<?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>52779</bug_id>
          
          <creation_ts>2011-01-19 20:26:40 -0800</creation_ts>
          <short_desc>Cleanup Scrollbar/ScrollbarClient relationship</short_desc>
          <delta_ts>2011-01-21 13:39:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</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="Sam Weinig">sam</assigned_to>
          <cc>abarth</cc>
    
    <cc>bdakin</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>pkasting</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>337080</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-19 20:26:40 -0800</bug_when>
    <thetext>Instead of routing all scrolls through the Scrollbar, the Scrollbar should just be a dumb &quot;view&quot; onto the scrollable area (being told when the scroll offset has changed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337081</commentid>
    <comment_count>1</comment_count>
      <attachid>79546</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-19 20:28:27 -0800</bug_when>
    <thetext>Created attachment 79546
WIP (Do not review)

Uploading WIP patch to see how the bots feel about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337093</commentid>
    <comment_count>2</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-19 20:52:01 -0800</bug_when>
    <thetext>Attachment 79546 did not build on qt:
Build output: http://queues.webkit.org/results/7539233</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337094</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 20:52:32 -0800</bug_when>
    <thetext>Attachment 79546 did not build on chromium:
Build output: http://queues.webkit.org/results/7516192</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337097</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 20:57:15 -0800</bug_when>
    <thetext>Attachment 79546 did not build on gtk:
Build output: http://queues.webkit.org/results/7568218</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337110</commentid>
    <comment_count>5</comment_count>
      <attachid>79549</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-19 21:37:35 -0800</bug_when>
    <thetext>Created attachment 79549
WIP-2 (Do not review)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337116</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 21:49:54 -0800</bug_when>
    <thetext>Attachment 79549 did not build on gtk:
Build output: http://queues.webkit.org/results/7610233</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337118</commentid>
    <comment_count>7</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-01-19 21:53:18 -0800</bug_when>
    <thetext>Attachment 79549 did not build on qt:
Build output: http://queues.webkit.org/results/7523238</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337204</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-20 02:30:19 -0800</bug_when>
    <thetext>If you&apos;re just looking for ews results you can remove the review flag as soon as numbers appear in the bubbles.

you can also submit patches directly using http://queues.webkit.org/submit-to-ews</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337457</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-20 11:11:10 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; If you&apos;re just looking for ews results you can remove the review flag as soon as numbers appear in the bubbles.
&gt; 
&gt; you can also submit patches directly using http://queues.webkit.org/submit-to-ews

Cool!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337462</commentid>
    <comment_count>10</comment_count>
      <attachid>79621</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-20 11:25:02 -0800</bug_when>
    <thetext>Created attachment 79621
Attempt 3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337468</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-20 11:36:14 -0800</bug_when>
    <thetext>Attachment 79621 did not build on gtk:
Build output: http://queues.webkit.org/results/7609231</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337517</commentid>
    <comment_count>12</comment_count>
      <attachid>79636</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-20 12:40:51 -0800</bug_when>
    <thetext>Created attachment 79636
Attempt 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337533</commentid>
    <comment_count>13</comment_count>
      <attachid>79640</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-20 12:56:22 -0800</bug_when>
    <thetext>Created attachment 79640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337534</commentid>
    <comment_count>14</comment_count>
      <attachid>79641</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-20 12:58:28 -0800</bug_when>
    <thetext>Created attachment 79641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337540</commentid>
    <comment_count>15</comment_count>
      <attachid>79641</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-01-20 13:08:51 -0800</bug_when>
    <thetext>Comment on attachment 79641
Patch

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

Looks good.

&gt; Source/WebCore/platform/Scrollbar.cpp:310
&gt; +            if (m_orientation == HorizontalScrollbar)
&gt; +                client()-&gt;scrollToXOffsetWithoutAnimation(m_dragOrigin);
&gt; +            else
&gt; +                client()-&gt;scrollToYOffsetWithoutAnimation(m_dragOrigin);

I see this pattern in multiple places.  Maybe there should be a scrollToOffsetWithoutAnimation(ScrollbarOrientation, int offset) function.

&gt; Source/WebCore/platform/efl/ScrollbarEfl.cpp:91
&gt; +    if (that-&gt;orientation() == HorizontalScrollbar)
&gt; +        that-&gt;client()-&gt;scrollToXOffsetWithoutAnimation(v);
&gt; +    else
&gt; +        that-&gt;client()-&gt;scrollToYOffsetWithoutAnimation(v);
&gt;  }

See comment above about this pattern.

&gt; Source/WebCore/platform/gtk/MainFrameScrollbarGtk.cpp:115
&gt; +    if (that-&gt;orientation() == HorizontalScrollbar)
&gt; +        that-&gt;client()-&gt;scrollToXOffsetWithoutAnimation(static_cast&lt;int&gt;(gtk_adjustment_get_value(that-&gt;m_adjustment.get())));
&gt; +    else
&gt; +        that-&gt;client()-&gt;scrollToYOffsetWithoutAnimation(static_cast&lt;int&gt;(gtk_adjustment_get_value(that-&gt;m_adjustment.get())));

And again.  Especially gross given the big gtk_adjustment_get_value expression is repeated twice.

&gt; Source/WebKit/qt/Api/qwebframe.cpp:1078
&gt; +        if (orientation == Qt::Horizontal)
&gt; +            sb-&gt;client()-&gt;scrollToXOffsetWithoutAnimation(value);
&gt; +        else
&gt; +            sb-&gt;client()-&gt;scrollToYOffsetWithoutAnimation(value);

And again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337647</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-20 15:22:45 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76291 might have broken Qt Linux Release minimal, Qt Linux ARMv5 Release, Qt Linux ARMv7 Release, Qt Windows 32-bit Release, and Qt Windows 32-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337655</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-01-20 15:32:35 -0800</bug_when>
    <thetext>Sam, do you want to look at bug 45005, and
 * Dupe that against this if relevant
 * See if there were any useful details on that bug you haven&apos;t done here

I haven&apos;t looked to see what you&apos;ve done on this bug but from a high level it sounds very much like what that bug was about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338192</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-21 11:32:34 -0800</bug_when>
    <thetext>*** Bug 45005 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338207</commentid>
    <comment_count>19</comment_count>
      <attachid>79769</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-21 11:40:47 -0800</bug_when>
    <thetext>Created attachment 79769
Part 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338209</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-21 11:43:12 -0800</bug_when>
    <thetext>Attachment 79769 did not pass style-queue:

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

Source/WebCore/platform/ScrollView.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/win/WebScrollBar.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/ScrollbarThemeComposite.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/Scrollbar.h:46:  The parameter name &quot;orientation&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/Scrollbar.h:46:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 59 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>338232</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-21 11:59:19 -0800</bug_when>
    <thetext>Attachment 79769 did not build on chromium:
Build output: http://queues.webkit.org/results/7569263</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338241</commentid>
    <comment_count>22</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-21 12:05:55 -0800</bug_when>
    <thetext>Forgot to mention, part 1 landed in http://trac.webkit.org/changeset/76291.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338247</commentid>
    <comment_count>23</comment_count>
      <attachid>79769</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-21 12:15:45 -0800</bug_when>
    <thetext>Comment on attachment 79769
Part 2

Part 2 landed in http://trac.webkit.org/changeset/76378.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338252</commentid>
    <comment_count>24</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-01-21 12:19:42 -0800</bug_when>
    <thetext>Attachment 79769 did not build on win:
Build output: http://queues.webkit.org/results/7570267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338267</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-21 12:33:03 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76378 might have broken Chromium Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>338298</commentid>
    <comment_count>26</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2011-01-21 13:39:51 -0800</bug_when>
    <thetext>Marking fixed for now. Additional cleanups will come later.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79546</attachid>
            <date>2011-01-19 20:28:27 -0800</date>
            <delta_ts>2011-01-19 21:37:35 -0800</delta_ts>
            <desc>WIP (Do not review)</desc>
            <filename>patchForBZ.diff</filename>
            <type>text/plain</type>
            <size>71145</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDEtMTkgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMh
KQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxUbyk6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6Omhv
cml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmVydGlj
YWxTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNl
TW92ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyOjpzZXRQcmVzc2VkUG9zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxi
YXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxU
b1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNs
aWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50Ojpob3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhckNsaWVudDo6dmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1
cE1lbnVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzY3JvbGxUb1Jl
dmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2Nyb2xsVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UG9wdXBNZW51V2luOjp3bmRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmg6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnZlcnRpY2Fs
U2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNj
cm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpsb2dp
Y2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp2ZXJ0
aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorCiAyMDExLTAxLTE5ICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByNzYxODcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NjE3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTE0MDQsNyArMTE0MDQsNyBAQAogCQlCQ0E4Q0E1RDExRTRFNkQxMDA4MTJGQjcg
LyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0FBOTBDMjBBN0VC
QTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTY3JvbGxiYXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDsg
c291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkg
LyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
Y3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FDRjNCQTEwNzI5
MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUUxRkE1
MTI5MzlEQjcwMDRDQjAyNiAvKiBTY3JvbGxBbmltYXRvck1hYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JvbGxBbmltYXRvck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTM4NzksNyArMTM4NzksNiBAQAogCQkJCTFDRTI0Rjk2MEQ3Q0FGMEUwMDdF
MDRDMiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkJQkNBRTFGQTUxMjkzOURCNzAwNENC
MDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggKi8sCiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2
NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLAotCQkJCUJDQUE5MEMyMEE3RUJBNjAwMDhC
MTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKIAkJCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYg
LyogU2Nyb2xsVmlld01hYy5tbSAqLywKQEAgLTE4MjYxLDYgKzE4MjYwLDcgQEAKIAkJCQk1MTYy
QzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKIAkJCQlDQTNCRjY3
QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAogCQkJCUNBM0JGNjdE
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAorCQkJCUJDQUE5MEMyMEE3
RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEw
MEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlCQzlCQzY0QjBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKIAkJCQlCQzlCQzY0QzBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDc2
MTc4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOSArOTcsMTQgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZShmbAogICAgIGlmICghbV9zY3JvbGxiYXIpCiAgICAgICAg
IHJldHVybjsKICAgICAKKyAgICBpZiAoIW1fc2Nyb2xsYmFyLT5jbGllbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZmxvYXQgbmV3VmFsdWUgPSB2YWx1ZSAqIG1fc2Nyb2xsYmFyLT5tYXhp
bXVtKCk7Ci0gICAgCi0gICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG5ld1ZhbHVlLCBTY3JvbGxi
YXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7ICAgIAorICAgIGlmIChtX3Njcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+
Y2xpZW50KCktPnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24obmV3VmFsdWUpOworICAg
IGVsc2UKKyAgICAgICAgbV9zY3JvbGxiYXItPmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKG5ld1ZhbHVlKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQzLDIz
ICsxOTQzLDE1IEBAIGJvb2wgRnJhbWVWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQg
RnJhbWVWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBiYXIpCit2b2lkIEZyYW1lVmlldzo6
c2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KQogewotICAgIC8vIEZpZ3VyZSBvdXQg
aWYgd2UgcmVhbGx5IG1vdmVkLgogICAgIEludFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKGJhcik7CisgICAgU2Nyb2xsVmlldzo6c2Ny
b2xsVG8obmV3T2Zmc2V0KTsKICAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQogICAg
ICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dmFs
dWVDaGFuZ2VkKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQotewotICAgIFNjcm9sbFZpZXc6
OnZhbHVlQ2hhbmdlZChzY3JvbGxEZWx0YSk7Ci0gICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkt
PnNlbmRTY3JvbGxFdmVudCgpOwotICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlk
Q2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci19Ci0KIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICAvLyBBZGQgaW4gb3VyIG9mZnNldCB3aXRoaW4gdGhlIEZyYW1lVmlldy4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsMTIgKzI4OCwxMiBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25z
dCBJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFjZQot
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtz
KFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvKGNv
bnN0IEludFNpemUmKTsKKwogICAgIHZvaWQgZGVmZXJyZWRSZXBhaW50VGltZXJGaXJlZChUaW1l
cjxGcmFtZVZpZXc+Kik7CiAgICAgdm9pZCBkb0RlZmVycmVkUmVwYWludHMoKTsKICAgICB2b2lk
IHVwZGF0ZURlZmVycmVkUmVwYWludERlbGF5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgi
CiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50Lmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCkBAIC02MSwxNiArNjIsMjcgQEAgYm9vbCBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaQogICAgIGlmICgqY3VycmVudFBvcyA9PSBuZXdQ
b3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqY3VycmVudFBvcyA9IG5ld1BvczsKLSAg
ICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1cnJl
bnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQ
b3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IGZsb2F0IHBvcykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9jdXJyZW50UG9zWCA9
IG9mZnNldC54KCk7CisgICAgbV9jdXJyZW50UG9zWSA9IG9mZnNldC55KCk7CisgICAgbm90aXR5
UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCi0gICAgICAgIG1fY3VycmVudFBvc1ggPSBwb3M7Ci0gICAgZWxzZQotICAgICAg
ICBtX2N1cnJlbnRQb3NZID0gcG9zOworICAgIHJldHVybiBGbG9hdFBvaW50KG1fY3VycmVudFBv
c1gsIG1fY3VycmVudFBvc1kpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQb3Np
dGlvbkNoYW5nZWQoKQoreworICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgU2Nyb2xsYmFyQ2xpZW50Owog
CiBjbGFzcyBTY3JvbGxBbmltYXRvciB7CkBAIC01MCwxNiArNTEsMTggQEAgcHVibGljOgogICAg
IC8vIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0
ZWx5LCBuZXZlciBhbmltYXRlcy4KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cik7CiAKLSAgICAvLyBTdG9wcyBhbnkgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24g
YW5kIHVwZGF0ZXMgdGhlIFNjcm9sbEFuaW1hdG9yCi0gICAgLy8gd2l0aCB0aGUgY3VycmVudCBz
Y3JvbGwgcG9zaXRpb24uICBUaGlzIGRvZXMgbm90IGNhdXNlIGEgY2FsbGJhY2sgdG8gdGhlCi0g
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uKCkgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKKyAgICB2b2lkIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworCiAgICAgU2Nyb2xsYmFyQ2xp
ZW50KiBtX2NsaWVudDsKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2lu
ZyBhIEZsb2F0UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9z
WTsgLy8gc3ViY2xhc3MgY29kZSBjb21wbGV4aXR5LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotI2VuZGlmCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRvcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDI1
ICszMjAsMjAgQEAgaW50IFNjcm9sbFZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZQogICAg
IHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+
dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsVmlldzo6
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1
ZShvZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVl
KG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKLX0KKyAgICBpbnQg
aG9yaXpvbnRhbE9mZnNldCA9IHN0ZDo6bWF4KHN0ZDo6bWluKG9mZnNldC54KCksIGNvbnRlbnRz
V2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSwgMCk7CisgICAgaW50IHZlcnRpY2FsT2Zmc2V0ID0g
c3RkOjptYXgoc3RkOjptaW4ob2Zmc2V0LnkoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVI
ZWlnaHQoKSksIDApOwogCi12b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIq
IHNjcm9sbGJhcikKLXsKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KICAg
ICBJbnRTaXplIG5ld09mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxiYXIp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKHNjcm9sbGJhci0+dmFsdWUo
KSAtIG1fc2Nyb2xsT3JpZ2luLngoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5z
ZXRIZWlnaHQoc2Nyb2xsYmFyLT52YWx1ZSgpIC0gbV9zY3JvbGxPcmlnaW4ueSgpKTsKLSAgICB9
CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGhvcml6b250YWxPZmZzZXQgLSBtX3Njcm9sbE9yaWdp
bi54KCkpOworICAgIG5ld09mZnNldC5zZXRIZWlnaHQodmVydGljYWxPZmZzZXQgLSBtX3Njcm9s
bE9yaWdpbi55KCkpOworCisgICAgc2Nyb2xsVG8obmV3T2Zmc2V0KTsKK30KIAordm9pZCBTY3Jv
bGxWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCit7CiAgICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSA9IG5ld09mZnNldCAtIG1fc2Nyb2xsT2Zmc2V0OwogICAgIGlmIChzY3Jv
bGxEZWx0YSA9PSBJbnRTaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MSwxMyArMzQ2LDEz
IEBAIHZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhcioKICAgICBzY3JvbGxD
b250ZW50cyhzY3JvbGxEZWx0YSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2Vk
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoraW50IFNjcm9sbFZpZXc6OnNjcm9sbFBvc2l0
aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIGlmIChzY3JvbGxiYXJzU3Vw
cHJlc3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXBhaW50Rml4ZWRFbGVtZW50c0Fm
dGVyU2Nyb2xsaW5nKCk7Ci0gICAgc2Nyb2xsQ29udGVudHMoc2Nyb2xsRGVsdGEpOworICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBzY3JvbGxQb3Np
dGlvbigpLnkoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCkBAIC0zOTEsMTUgKzM4Niw4
IEBAIGJvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiAKIHsKICAgICBpZiAo
cGxhdGZvcm1XaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpOwotICAgIAotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwg
ZGlyZWN0aW9uID09IFNjcm9sbERvd24pIHsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxi
YXIpCi0gICAgICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5KTsKIH0KIAogYm9vbCBTY3JvbGxWaWV3Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTUz
MCw3ICs1MTgsNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAg
ICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9u
KHRydWUpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0g
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkgKyBt
X3Njcm9sbE9yaWdpbi54KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAg
ICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAKQEAg
LTU1Miw3ICs1MzksNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3Qg
CiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlv
bih0cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpICsgbV9z
Y3JvbGxPcmlnaW4ueSgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAg
ICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwogICAgIH0KQEAgLTU2Miwx
NSArNTQ4LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAg
ICAgICB1cGRhdGVTY3JvbGxDb3JuZXIoKTsKICAgICB9CiAKLSAgICAvLyBTZWUgaWYgb3VyIG9m
ZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBz
Y3JvbGxiYXJzLgotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdp
dGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3JvbGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KLSAg
ICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFz
IHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1heGltaXplZCByZXN1bHQKLSAgICAvLyBkb2VzIG5v
dCkuCi0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IHNjcm9sbCAtIG1fc2Nyb2xsT2Zmc2V0Owot
ICAgIGlmIChzY3JvbGxEZWx0YSAhPSBJbnRTaXplKCkpIHsKLSAgICAgICBtX3Njcm9sbE9mZnNl
dCA9IHNjcm9sbDsKLSAgICAgICB2YWx1ZUNoYW5nZWQoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAg
ICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBv
aW50KHNjcm9sbC53aWR0aCgpLCBzY3JvbGwuaGVpZ2h0KCkpKTsKIAogICAgIG1faW5VcGRhdGVT
Y3JvbGxiYXJzID0gZmFsc2U7CiB9CkBAIC03NTcsNiArNzM1LDcgQEAgdm9pZCBTY3JvbGxWaWV3
Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZQogICAgIC8vIHNjcm9sbCBhbnkgZnVydGhlci4KICAg
ICBmbG9hdCBkZWx0YVggPSBtX2hvcml6b250YWxTY3JvbGxiYXIgPyBlLmRlbHRhWCgpIDogMDsK
ICAgICBmbG9hdCBkZWx0YVkgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gZS5kZWx0YVkoKSA6IDA7
CisgICAgCiAgICAgSW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7CiAgICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNj
cm9sbERlbHRhID0gc2Nyb2xsUG9zaXRpb24oKSAtIG1pbmltdW1TY3JvbGxQb3NpdGlvbigpOwog
ICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgoKSA+IDAp
CkBAIC03NzMsOSArNzUyLDkgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3Jt
V2hlZQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRlbHRhWSkKLSAgICAgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFZKTsK
KyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBp
eGVsLCBkZWx0YVkpOwogICAgICAgICBpZiAoZGVsdGFYKQotICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFYKTsK
KyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5
UGl4ZWwsIGRlbHRhWCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEyIEBAIHB1YmxpYzoKIAog
ICAgIC8vIFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRo
ZSBvdGhlcnMuCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoY29uc3QgSW50
U2l6ZSYpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKICAg
ICAKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJp
ZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGJhckNsaWVudC4KKyAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KTsKKwogICAgIC8vIFRoZSB3aW5k
b3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuIFRoZSBTY3JvbGxWaWV3IHdpbGwgY29tbXVu
aWNhdGUgc2Nyb2xscyBhbmQgcmVwYWludHMgdG8gdGhlCiAgICAgLy8gaG9zdCB3aW5kb3cgaW4g
dGhlIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBo
b3N0V2luZG93KCkgY29uc3QgPSAwOwpAQCAtNzgsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gSWYgdGhlIHNjcm9sbCB2aWV3IGRvZXMgbm90IHVzZSBhIG5hdGl2ZSB3aWRnZXQsIHRo
ZW4gaXQgd2lsbCBoYXZlIGNyb3NzLXBsYXRmb3JtIFNjcm9sbGJhcnMuIFRoZXNlIGZ1bmN0aW9u
cwogICAgIC8vIGNhbiBiZSB1c2VkIHRvIG9idGFpbiB0aG9zZSBzY3JvbGxiYXJzLgotICAgIFNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bFNjcm9sbGJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250
YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CiAgICAg
Ym9vbCBpc1Njcm9sbFZpZXdTY3JvbGxiYXIoY29uc3QgV2lkZ2V0KiBjaGlsZCkgY29uc3QgeyBy
ZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpID09IGNoaWxkIHx8IHZlcnRpY2FsU2Nyb2xsYmFy
KCkgPT0gY2hpbGQ7IH0KIAogICAgIC8vIEZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgcmV0cmll
dmluZyB0aGUgc2Nyb2xsaW5nIG1vZGUgaW4gZWFjaCBheGlzIChob3Jpem9udGFsL3ZlcnRpY2Fs
KS4gVGhlIG1vZGUgaGFzIHZhbHVlcyBvZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMyArMTA0LDE5IEBAIFNjcm9sbGJh
cjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsK
IH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2LCBTY3JvbGxTb3VyY2Ugc291cmNl
KQordm9pZCBTY3JvbGxiYXI6Om9mZnNldERpZENoYW5nZSgpCiB7Ci0gICAgdiA9IG1heChtaW4o
diwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7Ci0gICAgaWYgKHZhbHVlKCkgPT0g
dikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgot
ICAgIHNldEN1cnJlbnRQb3Modiwgc291cmNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NF
UlQobV9jbGllbnQpOworCisgICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9jbGllbnQtPnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKKyAgICBpZiAocG9zaXRpb24gPT0gbV9j
dXJyZW50UG9zKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgb2xkVGh1bWJQb3NpdGlvbiA9
IHRoZW1lKCktPnRodW1iUG9zaXRpb24odGhpcyk7CisgICAgbV9jdXJyZW50UG9zID0gcG9zaXRp
b247CisgICAgdXBkYXRlVGh1bWJQb3NpdGlvbigpOworICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09
IFRodW1iUGFydCkKKyAgICAgICAgc2V0UHJlc3NlZFBvcyhtX3ByZXNzZWRQb3MgKyB0aGVtZSgp
LT50aHVtYlBvc2l0aW9uKHRoaXMpIC0gb2xkVGh1bWJQb3NpdGlvbik7ICAgIAogfQogCiB2b2lk
IFNjcm9sbGJhcjo6c2V0UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUp
CkBAIC0xMzEsMzEgKzEzNyw2IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRTdGVwcyhpbnQgbGluZVN0
ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhlbHNQZXJTdGVwOwogfQogCi1ib29s
IFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQotewotI2lmIEhBVkUoQUNDRVNT
SUJJTElUWSkKLSAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAm
JiBheE9iamVjdENhY2hlKCkpCi0gICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNh
dGlvbihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHRoaXMpLCAwLCBBWE9iamVjdENhY2hl
OjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7Ci0jZW5kaWYKLQotICAgIC8vIElnbm9yZSBwZXJwZW5k
aWN1bGFyIHNjcm9sbHMuCi0gICAgaWYgKChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpID8gKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93
bikgOiAoZGlyZWN0aW9uID09IFNjcm9sbExlZnQgfHwgZGlyZWN0aW9uID09IFNjcm9sbFJpZ2h0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZsb2F0IHN0ZXAgPSAwOwotICAgIHN3aXRj
aCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIFNjcm9sbEJ5TGluZTogICAgIHN0ZXAgPSBtX2xp
bmVTdGVwOyAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCeVBhZ2U6ICAgICBzdGVwID0gbV9wYWdl
U3RlcDsgIGJyZWFrOwotICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDogc3RlcCA9IG1fdG90YWxT
aXplOyBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6ICAgIHN0ZXAgPSBtX3BpeGVsU3Rl
cDsgYnJlYWs7Ci0gICAgfQotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0
aW9uID09IFNjcm9sbExlZnQpCi0gICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKLSAg
ICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+c2Nyb2xsKG1fb3JpZW50
YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQotICAgIHJldHVybiBzZXRD
dXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSkpLCAwLjBmKSwgTm90
RnJvbVNjcm9sbEFuaW1hdG9yKTsKLX0KLQogdm9pZCBTY3JvbGxiYXI6OnVwZGF0ZVRodW1iKCkK
IHsKICNpZmRlZiBUSFVNQl9QT1NJVElPTl9BRkZFQ1RTX0JVVFRPTlMKQEAgLTIxNSw3ICsxOTYs
NyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQogCiAg
ICAgLy8gSGFuZGxlIHRoZSBhcnJvd3MgYW5kIHRyYWNrLgotICAgIGlmIChzY3JvbGwocHJlc3Nl
ZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpKSkK
KyAgICBpZiAoY2xpZW50KCktPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBw
cmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVk
ZWQoZGVsYXkpOwogfQogCkBAIC0yODQsMjggKzI2NSwxNCBAQCB2b2lkIFNjcm9sbGJhcjo6bW92
ZVRodW1iKGludCBwb3MpCiAgICAgICAgIGRlbHRhID0gbWluKG1heFBvcyAtIHRodW1iUG9zLCBk
ZWx0YSk7CiAgICAgZWxzZSBpZiAoZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1
bWJQb3MsIGRlbHRhKTsKLSAgICBpZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Moc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVu
IC0gdGh1bWJMZW4pLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotfQotCi1ib29sIFNjcm9sbGJh
cjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCi17Ci0gICAg
aWYgKChzb3VyY2UgIT0gRnJvbVNjcm9sbEFuaW1hdG9yKSAmJiBjbGllbnQoKSkKLSAgICAgICAg
Y2xpZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0aW9u
LCBwb3MpOwotCi0gICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGludCBvbGRWYWx1ZSA9IHZhbHVlKCk7Ci0gICAgaW50IG9sZFRodW1iUG9z
ID0gdGhlbWUoKS0+dGh1bWJQb3NpdGlvbih0aGlzKTsKLSAgICBtX2N1cnJlbnRQb3MgPSBwb3M7
Ci0gICAgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwotICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRo
dW1iUGFydCkKLSAgICAgICAgc2V0UHJlc3NlZFBvcyhtX3ByZXNzZWRQb3MgKyB0aGVtZSgpLT50
aHVtYlBvc2l0aW9uKHRoaXMpIC0gb2xkVGh1bWJQb3MpOwotCi0gICAgaWYgKHZhbHVlKCkgIT0g
b2xkVmFsdWUgJiYgY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT52YWx1ZUNoYW5nZWQodGhp
cyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGRlbHRhKSB7CisgICAgICAgIGlu
dCBuZXdQb3NpdGlvbiA9IGxyb3VuZGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVs
dGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAgICAgICAgaWYgKG1f
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIGNsaWVudCgp
LT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRp
b24obmV3UG9zaXRpb24pOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxiYXI6OnNldEhvdmVyZWRQ
YXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKQEAgLTMzNiw5ICszMDMsMTIgQEAgdm9pZCBTY3JvbGxi
YXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhcgogYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQg
PT0gVGh1bWJQYXJ0KSB7Ci0gICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFja1RvRHJh
Z09yaWdpbih0aGlzLCBldnQpKQotICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmln
aW4sIE5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAo
dGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkgeworICAgICAg
ICAgICAgaWYgKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
ICAgICAgICBjbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX2RyYWdP
cmlnaW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zY3Jv
bGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fZHJhZ09yaWdpbik7CisgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGV2dC5wb3MoKSkueCgpIDoKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS55KCkpOwpAQCAtNTIxLDQgKzQ5MSw0IEBAIEludFBv
aW50IFNjcm9sbGJhcjo6Y29udmVydEZyb21Db250YWluaW4KICAgICByZXR1cm4gV2lkZ2V0Ojpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKIH0KIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHJldmlz
aW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgcHVibGljOgogICAgIC8vIE11c3QgYmUgaW1wbGVt
ZW50ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2FuJ3Qgc2ltcGx5IHVzZSB0aGUgU2Nyb2xsYmFyIGJh
c2UgY2xhc3MuICBSaWdodCBub3cgdGhlIG9ubHkgcGxhdGZvcm0gdGhhdCBpcyBub3QgdXNpbmcg
dGhlIGJhc2UgY2xhc3MgaXMgR1RLLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGJhcj4g
Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSk7CiAKKyAg
ICAvLyBDYWxsZWQgYnkgdGhlIFNjcm9sbGJhckNsaWVudCB3aGVuIHRoZSBzY3JvbGwgb2Zmc2V0
IGNoYW5nZXMuCisgICAgdm9pZCBvZmZzZXREaWRDaGFuZ2UoKTsKKwogICAgIHN0YXRpYyBpbnQg
cGl4ZWxzUGVyTGluZVN0ZXAoKSB7IHJldHVybiA0MDsgfQogICAgIHN0YXRpYyBmbG9hdCBtaW5G
cmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSB7IHJldHVybiAwLjg3NWY7IH0KICAgICBzdGF0aWMg
aW50IG1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKTsKQEAgLTYxLDcgKzY0LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZW50YXRpb247IH0KLSAgICAKKwogICAgIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIGxyb3VuZGYobV9jdXJyZW50UG9zKTsgfQogICAgIGZsb2F0IGN1cnJlbnRQb3MoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRQb3M7IH0KICAgICBpbnQgcHJlc3NlZFBvcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlc3NlZFBvczsgfQpAQCAtNzMsMTggKzc2LDE1IEBAIHB1YmxpYzoKICAgICBp
bnQgbGluZVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTdGVwOyB9CiAgICAgaW50IHBhZ2VT
dGVwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU3RlcDsgfQogICAgIGZsb2F0IHBpeGVsU3RlcCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxTdGVwOyB9Ci0gICAgCisKICAgICBTY3JvbGxiYXJQYXJ0
IHByZXNzZWRQYXJ0KCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUGFydDsgfQogICAgIFNjcm9s
bGJhclBhcnQgaG92ZXJlZFBhcnQoKSBjb25zdCB7IHJldHVybiBtX2hvdmVyZWRQYXJ0OyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldEhvdmVyZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0KTsKIAogICAgIHZvaWQgc2V0U3Rl
cHMoaW50IGxpbmVTdGVwLCBpbnQgcGFnZVN0ZXAsIGludCBwaXhlbHNQZXJTdGVwID0gMSk7Ci0g
ICAgYm9vbCBzZXRWYWx1ZShpbnQsIFNjcm9sbFNvdXJjZSBzb3VyY2UpOwogICAgIHZvaWQgc2V0
UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUpOwogICAgIHZvaWQgc2V0
UHJlc3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9Ci0KLSAgICBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0g
MSk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xNzIsMTAgKzE3Miw4IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0
OwotCi0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJj
ZSk7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8v
IFNjcm9sbGJhcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNs
aWVudC5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDE0ICs0Niw2
OCBAQCBTY3JvbGxiYXJDbGllbnQ6On5TY3JvbGxiYXJDbGllbnQoKQogewogfQogCi1ib29sIFNj
cm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cikKK2Jvb2wgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCiB7Cisg
ICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXI7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Ny
b2xsRG93bikgeworICAgICAgICBvcmllbnRhdGlvbiA9IFZlcnRpY2FsU2Nyb2xsYmFyOworICAg
ICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG9yaWVudGF0aW9uID0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICAgICAgc2Nyb2xsYmFy
ID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0KKworICAgIGlmICghc2Nyb2xsYmFyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBzdGVwID0gMDsKKyAgICBzd2l0Y2gg
KGdyYW51bGFyaXR5KSB7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6CisgICAgICAgIHN0ZXAgPSBz
Y3JvbGxiYXItPmxpbmVTdGVwKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQ
YWdlOgorICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3RlcCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6CisgICAgICAgIHN0ZXAgPSBzY3JvbGxiYXIt
PnRvdGFsU2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6Cisg
ICAgICAgIHN0ZXAgPSBzY3JvbGxiYXItPnBpeGVsU3RlcCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3Jv
bGxMZWZ0KQorICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxpZXI7CisKICAgICByZXR1cm4g
bV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0
IHBvcykKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsQW5pbWF0b3ItPnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworfQorCit2b2lkIFNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB4KQoreworICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KHgsIG1fc2Nyb2xsQW5p
bWF0b3ItPmN1cnJlbnRQb3NpdGlvbigpLnkoKSkpOworfQorCit2b2lkIFNjcm9sbGJhckNsaWVu
dDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB5KQoreworICAgIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KG1fc2Nyb2xsQW5pbWF0b3ItPmN1
cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOworfQorCit2b2lkIFNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewotICAg
IG1fc2Nyb2xsQW5pbWF0b3ItPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihvcmll
bnRhdGlvbiwgcG9zKTsKKyAgICAvLyBUZWxsIHRoZSBkZXJpdmVkIGNsYXNzIHRvIHNjcm9sbCBp
dHMgY29udGVudHMuCisgICAgc2V0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7CisKKyAgICAvLyBUZWxs
IHRoZSBzY3JvbGxiYXJzIHRvIHVwZGF0ZSB0aGVpciB0aHVtYiBwb3N0aW9ucy4KKyAgICBpZiAo
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gdGhpcy0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpKQorICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5vZmZzZXREaWRDaGFuZ2UoKTsKKyAg
ICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHRoaXMtPnZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5vZmZzZXREaWRDaGFuZ2UoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxNCBA
QAogI2lmbmRlZiBTY3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAog
Ci0jaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFz
cyBTY3JvbGxBbmltYXRvcjsKIAogY2xhc3MgU2Nyb2xsYmFyQ2xpZW50IHsKQEAgLTQwLDE4ICs0
MSwyMyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyQ2xpZW50KCk7CiAgICAgdmlydHVhbCB+U2Ny
b2xsYmFyQ2xpZW50KCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZXIpOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0
aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpOworICAgIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIgPSAxKTsKKyAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25z
dCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGZsb2F0IHgpOworICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9h
dCB4KTsKIAotICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopID0gMDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9z
aXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFy
Q29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFy
a3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBiZSBvdmVycmlkZW4gYnkgc3ViY2xhc3NlcyB0byBwZXJmb3JtIHRoZSBhY3R1YWwKKyAg
ICAvLyBzY3JvbGwgb2YgdGhlIGNvbnRlbnQuCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldChjb25zdCBJbnRQb2ludCYpID0gMDsKKworCiAgICAgLy8gQ29udmVydCBwb2ludHMgYW5k
IHJlY3RzIGJldHdlZW4gdGhlIHNjcm9sbGJhciBhbmQgaXRzIGNvbnRhaW5pbmcgdmlldy4KICAg
ICAvLyBUaGUgY2xpZW50IG5lZWRzIHRvIGltcGxlbWVudCB0aGVzZSBpbiBvcmRlciB0byBiZSBh
d2FyZSBvZiBsYXlvdXQgZWZmZWN0cwogICAgIC8vIGxpa2UgQ1NTIHRyYW5zZm9ybXMuCkBAIC03
Miw5ICs3OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6
Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiAgICAgfQogCisgICAgdmly
dHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorCiBwcml2YXRlOgorICAgIC8vIE5PVEU6IE9ubHkgY2FsbGVkIGZyb20gdGhlIFNj
cm9sbEFuaW1hdG9yLgorICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxBbmltYXRvcjsKKyAgICB2b2lk
IHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKKwogICAgIE93
blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIH07CiAKLX0KLSNlbmRpZgor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyQ2xpZW50X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5o
CShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFC
TEUoU01PT1RIX1NDUk9MTElORykKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRl
ICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtNDYs
MTAgKzQ1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwg
ZmxvYXQgcG9zaXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBTY3Jv
bGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS4KLSAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlv
bigpIGNvbnN0OwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBv
aW50JiBuZXdQb3NpdGlvbik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZpc2lvbiA3NjE3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcp
CiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNYWMu
aCIKICNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKIApAQCAtMTYxLDIzICsxNjIsMTcgQEAg
Ym9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhcgogICAgIHJldHVybiB0cnVl
OwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BB
bmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25z
dCBGbG9hdFBvaW50JiBvZmZzZXQpCiB7CiAgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdl
dCgpIF9zdG9wUnVuXTsKLSAgICBTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRT
dG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3MpOwotfQotCi1GbG9hdFBvaW50IFNjcm9sbEFu
aW1hdG9yTWFjOjpjdXJyZW50UG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBGbG9hdFBv
aW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpOworICAgIFNjcm9sbEFuaW1hdG9yOjpz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxB
bmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQ
b3NpdGlvbikKIHsKICAgICBtX2N1cnJlbnRQb3NYID0gbmV3UG9zaXRpb24ueCgpOwogICAgIG1f
Y3VycmVudFBvc1kgPSBuZXdQb3NpdGlvbi55KCk7Ci0KLSAgICBtX2NsaWVudC0+c2V0U2Nyb2xs
T2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZ
KSk7CisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4u
Y3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1
cE1lbnVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxl
IEluYy4KICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykuCiAgKgpAQCAtNTMyLDEyICs1MzIsMTIgQEAgYm9vbCBQb3B1cE1l
bnVXaW46OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aQogICAgIGludCBpbmRleCA9IGZvY3VzZWRJbmRl
eCgpOwogCiAgICAgaWYgKGluZGV4IDwgbV9zY3JvbGxPZmZzZXQpIHsKLSAgICAgICAgbV9zY3Jv
bGxiYXItPnNldFZhbHVlKGluZGV4LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7
CisgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihpbmRleCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChpbmRleCA+
PSBtX3Njcm9sbE9mZnNldCArIHZpc2libGVJdGVtcygpKSB7Ci0gICAgICAgIG1fc2Nyb2xsYmFy
LT5zZXRWYWx1ZShpbmRleCAtIHZpc2libGVJdGVtcygpICsgMSwgU2Nyb2xsYmFyOjpOb3RGcm9t
U2Nyb2xsQW5pbWF0b3IpOworICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNl
dFdpdGhvdXRBbmltYXRpb24oaW5kZXggLSB2aXNpYmxlSXRlbXMoKSArIDEpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTY3MCwyMSArNjcwLDIzIEBAIGludCBQb3B1cE1lbnVX
aW46OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3IKICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNp
emUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgUG9wdXBN
ZW51V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZz
ZXQpCitpbnQgUG9wdXBNZW51V2luOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdAog
ewotICAgIGlmIChtX3Njcm9sbGJhcikKLSAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG9m
ZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gbV9z
Y3JvbGxPZmZzZXQ7Cit9CisKK3ZvaWQgUG9wdXBNZW51V2luOjpzZXRTY3JvbGxPZmZzZXQoY29u
c3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxUbyhvZmZzZXQueSgpKTsKIH0KIAot
dm9pZCBQb3B1cE1lbnVXaW46OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNjcm9sbEJhcikKK3Zv
aWQgUG9wdXBNZW51V2luOjpzY3JvbGxUbyhpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVChtX3Nj
cm9sbGJhcik7CiAKICAgICBpZiAoIW1fcG9wdXApCiAgICAgICAgIHJldHVybjsKIAotICAgIGlu
dCBvZmZzZXQgPSBzY3JvbGxCYXItPnZhbHVlKCk7Ci0KICAgICBpZiAobV9zY3JvbGxPZmZzZXQg
PT0gb2Zmc2V0KQogICAgICAgICByZXR1cm47CiAKQEAgLTk5MSw3ICs5OTMsOCBAQCBMUkVTVUxU
IFBvcHVwTWVudVdpbjo6d25kUHJvYyhIV05EIGhXbmQsCiAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzY3Jv
bGxiYXIoKS0+c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxp
bmUsIGFicyhpKSk7CisKKyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAw
ID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNiBA
QCBwcml2YXRlOgogICAgIHZvaWQgc2V0V2FzQ2xpY2tlZChib29sIGIgPSB0cnVlKSB7IG1fd2Fz
Q2xpY2tlZCA9IGI7IH0KICAgICBib29sIHdhc0NsaWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dh
c0NsaWNrZWQ7IH0KIAotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGludCBvZmZzZXQpIHsgbV9z
Y3JvbGxPZmZzZXQgPSBvZmZzZXQ7IH0KICAgICBpbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JvbGxPZmZzZXQ7IH0KIAogICAgIGJvb2wgc2Nyb2xsVG9SZXZlYWxTZWxlY3Rp
b24oKTsKQEAgLTkyLDExICs5MSwxNSBAQCBwcml2YXRlOgogCiAgICAgLy8gU2Nyb2xsQmFyQ2xp
ZW50CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNj
cm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29u
c3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xs
YmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXIuZ2V0KCk7IH0KKworICAgIC8vIE5PVEU6
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zm
c2V0IGZyb20gU2Nyb2xsYmFyQ2xpZW50LgorICAgIHZvaWQgc2Nyb2xsVG8oaW50IG9mZnNldCk7
CiAKICAgICB2b2lkIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShjb25zdCBJbnRSZWN0JiwgRnJh
bWVWaWV3Kik7CiAgICAgdm9pZCBpbnZhbGlkYXRlSXRlbShpbnQgaW5kZXgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEzMDYsMjMgKzEzMDYsMzYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNp
dmVseShpbgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoaW50
IHgsIGludCB5LCBib29sIHVwZGF0ZVNjcm9sbGJhcnMsIGJvb2wgcmVwYWludCkKK3ZvaWQgUmVu
ZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQgeSkKK3sKKyAgICBTY3JvbGxiYXJD
bGllbnQ6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludCh4LCB5KSk7Cit9
CisKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKIHsKICAgICBSZW5k
ZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoYm94LT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPTUFSUVVFRSkgewotICAg
ICAgICBpZiAoeCA8IDApIHggPSAwOwotICAgICAgICBpZiAoeSA8IDApIHkgPSAwOworICAgICAg
ICBpZiAoeCA8IDApCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgaWYgKHkgPCAwKQorICAg
ICAgICAgICAgeSA9IDA7CiAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIHNjcm9sbFdpZHRoL0hl
aWdodCBmdW5jdGlvbnMgc28gdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlm
IHRoZXkgbmVlZAogICAgICAgICAvLyB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3Mp
LgogICAgICAgICBpbnQgbWF4WCA9IHNjcm9sbFdpZHRoKCkgLSBib3gtPmNsaWVudFdpZHRoKCk7
CisgICAgICAgIGlmIChtYXhYIDwgMCkKKyAgICAgICAgICAgIG1heFggPSAwOwogICAgICAgICBp
bnQgbWF4WSA9IHNjcm9sbEhlaWdodCgpIC0gYm94LT5jbGllbnRIZWlnaHQoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICh4ID4gbWF4WCkgeCA9IG1heFg7Ci0gICAgICAgIGlmICh5ID4gbWF4WSkg
eSA9IG1heFk7CisgICAgICAgIGlmIChtYXhZIDwgMCkKKyAgICAgICAgICAgIG1heFkgPSAwOwor
CisgICAgICAgIGlmICh4ID4gbWF4WCkKKyAgICAgICAgICAgIHggPSBtYXhYOworICAgICAgICBp
ZiAoeSA+IG1heFkpCisgICAgICAgICAgICB5ID0gbWF4WTsKICAgICB9CiAgICAgCiAgICAgLy8g
RklYTUU6IEV2ZW50dWFsbHksIHdlIHdpbGwgd2FudCB0byBwZXJmb3JtIGEgYmxpdC4gIEZvciBu
b3cgbmV2ZXIKQEAgLTEzODYsMTYgKzEzOTksOSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxU
b09mZnNldChpbnQgeCwgCiAgICAgfQogCiAgICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVw
YWludCBvZiBvdXIgb2JqZWN0LgotICAgIGlmICh2aWV3ICYmIHJlcGFpbnQpCisgICAgaWYgKHZp
ZXcpCiAgICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29u
dGFpbmVyLCByZWN0Rm9yUmVwYWludCk7CiAKLSAgICBpZiAodXBkYXRlU2Nyb2xsYmFycykgewot
ICAgICAgICBpZiAobV9oQmFyKQotICAgICAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxY
T2Zmc2V0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKLSAgICAgICAgaWYg
KG1fdkJhcikKLSAgICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZLCBTY3JvbGxi
YXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgfQotCiAgICAgLy8gU2NoZWR1bGUgdGhl
IHNjcm9sbCBET00gZXZlbnQuCiAgICAgcmVuZGVyZXIoKS0+bm9kZSgpLT5kb2N1bWVudCgpLT5l
dmVudFF1ZXVlKCktPmVucXVldWVTY3JvbGxFdmVudChyZW5kZXJlcigpLT5ub2RlKCksIEV2ZW50
UXVldWU6OlNjcm9sbEV2ZW50RWxlbWVudFRhcmdldCk7CiB9CkBAIC0xNjQ5LDM2ICsxNjU1LDE4
IEBAIGludCBSZW5kZXJMYXllcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmkKICAgICByZXR1cm4g
c2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQordm9pZCBSZW5kZXJMYXllcjo6c2V0U2Ny
b2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgaWYgKG1faEJhcikKLSAg
ICAgICAgbV9oQmFyLT5zZXRWYWx1ZShvZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxB
bmltYXRvcik7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZz
ZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAgc2Nyb2xsVG8ob2Zm
c2V0LngoKSwgb2Zmc2V0LnkoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnZhbHVlQ2hhbmdl
ZChTY3JvbGxiYXIqKQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIq
IHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICAvLyBVcGRhdGUgc2Nyb2xsIHBvc2l0aW9uIGZyb20g
c2Nyb2xsYmFycy4KLQotICAgIGJvb2wgbmVlZFVwZGF0ZSA9IGZhbHNlOwotICAgIGludCBuZXdY
ID0gc2Nyb2xsWE9mZnNldCgpOwotICAgIGludCBuZXdZID0gbV9zY3JvbGxZOwotICAgIAotICAg
IGlmIChtX2hCYXIpIHsKLSAgICAgICAgbmV3WCA9IG1faEJhci0+dmFsdWUoKTsKLSAgICAgICAg
aWYgKG5ld1ggIT0gc2Nyb2xsWE9mZnNldCgpKQotICAgICAgICAgICBuZWVkVXBkYXRlID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIG5ld1kgPSBtX3ZCYXItPnZh
bHVlKCk7Ci0gICAgICAgIGlmIChuZXdZICE9IG1fc2Nyb2xsWSkKLSAgICAgICAgICAgbmVlZFVw
ZGF0ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRVcGRhdGUpCi0gICAgICAgIHNjcm9s
bFRvT2Zmc2V0KG5ld1gsIG5ld1ksIGZhbHNlKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBzY3JvbGxYT2Zm
c2V0KCk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9s
bGJhcikKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsWTsKKyAgICByZXR1cm4gMDsKIH0KIAogYm9v
bCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdApAQCAtMTY4Nyw3ICsxNjc1LDYgQEAgYm9v
bCBSZW5kZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBwYWdlICYmIHBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwogfQogCi0KIHN0YXRpYyBJbnRSZWN0IGNv
cm5lclJlY3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBib3VuZHMp
CiB7CiAgICAgaW50IGhvcml6b250YWxUaGlja25lc3M7CkBAIC0yMDMxLDggKzIwMTgsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVPdmVyZmxvd1N0YXR1cyhiCiAgICAgfQogfQogCi12b2lk
Ci1SZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3ZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiB7CiAgICAgUmVuZGVyQm94KiBi
b3ggPSByZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKQEAgLTIxMjQsMjggKzIxMTAsMTYgQEAg
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dAogICAgICAgICBpbnQgcGFn
ZVN0ZXAgPSBtYXgobWF4PGludD4oY2xpZW50V2lkdGggKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9u
VG9TdGVwV2hlblBhZ2luZygpLCBjbGllbnRXaWR0aCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJl
dHdlZW5QYWdlcygpKSwgMSk7CiAgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpw
aXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faEJhci0+c2V0UHJvcG9y
dGlvbihjbGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7Ci0gICAgICAgIC8vIEV4cGxpY2l0bHkg
c2V0IHRoZSBob3Jpem9udGFsIHNjcm9sbCB2YWx1ZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4g
YQotICAgICAgICAvLyByaWdodC10by1sZWZ0IHNjcm9sbGFibGUgYXJlYSdzIHdpZHRoIChvciBj
b250ZW50IHdpZHRoKSBjaGFuZ2VzLCB0aGUKLSAgICAgICAgLy8gdG9wIHJpZ2h0IGNvcm5lciBv
ZiB0aGUgY29udGVudCBkb2Vzbid0IHNoaWZ0IHdpdGggcmVzcGVjdCB0byB0aGUgdG9wCi0gICAg
ICAgIC8vIHJpZ2h0IGNvcm5lciBvZiB0aGUgYXJlYS4gQ29uY2VwdHVhbGx5LCByaWdodC10by1s
ZWZ0IGFyZWFzIGhhdmUKLSAgICAgICAgLy8gdGhlaXIgb3JpZ2luIGF0IHRoZSB0b3AtcmlnaHQs
IGJ1dCBSZW5kZXJMYXllciBpcyB0b3AtbGVmdCBvcmllbnRlZCwKLSAgICAgICAgLy8gc28gdGhp
cyBpcyBuZWVkZWQgdG8ga2VlcCBldmVyeXRoaW5nIHdvcmtpbmcuCi0gICAgICAgIG1faEJhci0+
c2V0VmFsdWUoc2Nyb2xsWE9mZnNldCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRv
cik7CiAgICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgaW50IGNsaWVudEhlaWdodCA9
IGJveC0+Y2xpZW50SGVpZ2h0KCk7CiAgICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50
PihjbGllbnRIZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygp
LCBjbGllbnRIZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEp
OwogICAgICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAo
KSwgcGFnZVN0ZXApOwogICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0
LCBtX3Njcm9sbEhlaWdodCk7Ci0gICAgICAgIC8vIEV4cGxpY2l0bHkgc2V0IHRoZSB2ZXJ0aWNh
bCBzY3JvbGwgdmFsdWUuICBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGEKLSAgICAgICAgLy8gcmln
aHQtdG8tbGVmdCB2ZXJ0aWNhbCB3cml0aW5nLW1vZGUgc2Nyb2xsYWJsZSBhcmVhJ3MgaGVpZ2h0
IChvciBjb250ZW50IGhlaWdodCkgY2hhbmdlcywgdGhlCi0gICAgICAgIC8vIGJvdHRvbSByaWdo
dCBjb3JuZXIgb2YgdGhlIGNvbnRlbnQgZG9lc24ndCBzaGlmdCB3aXRoIHJlc3BlY3QgdG8gdGhl
IGJvdHRvbQotICAgICAgICAvLyByaWdodCBjb3JuZXIgb2YgdGhlIGFyZWEuIENvbmNlcHR1YWxs
eSwgcmlnaHQtdG8tbGVmdCB2ZXJ0aWNhbCB3cml0aW5nLW1vZGUgYXJlYXMgaGF2ZQotICAgICAg
ICAvLyB0aGVpciBvcmlnaW4gYXQgdGhlIGJvdHRvbS1yaWdodCwgYnV0IFJlbmRlckxheWVyIGlz
IHRvcC1sZWZ0IG9yaWVudGVkLAotICAgICAgICAvLyBzbyB0aGlzIGlzIG5lZWRlZCB0byBrZWVw
IGV2ZXJ5dGhpbmcgd29ya2luZy4KLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShzY3JvbGxZT2Zm
c2V0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICB9CiAgCisgICAg
c2Nyb2xsVG9PZmZzZXQoc2Nyb2xsWE9mZnNldCgpLCBzY3JvbGxZT2Zmc2V0KCkpOworIAogICAg
IGlmIChyZW5kZXJlcigpLT5ub2RlKCkgJiYgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+aGFzTGlz
dGVuZXJUeXBlKERvY3VtZW50OjpPVkVSRkxPV0NIQU5HRURfTElTVEVORVIpKQogICAgICAgICB1
cGRhdGVPdmVyZmxvd1N0YXR1cyhob3Jpem9udGFsT3ZlcmZsb3csIHZlcnRpY2FsT3ZlcmZsb3cp
OwogfQpAQCAtMjMwMCwxNSArMjI3NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVy
Zmxvd0NvbnRyb2wKIAogYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBk
aXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVy
KQogewotICAgIGJvb2wgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlOwotICAgIGJvb2wgZGlk
VmVydGljYWxTY3JvbGwgPSBmYWxzZTsKLQotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIGRpZEhv
cml6b250YWxTY3JvbGwgPSBtX2hCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9
IG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwotCi0g
ICAgcmV0dXJuIChkaWRIb3Jpem9udGFsU2Nyb2xsIHx8IGRpZFZlcnRpY2FsU2Nyb2xsKTsKKyAg
ICByZXR1cm4gU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwg
bXVsdGlwbGllcik7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogcCwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2
aW9yLCBSZW5kZXJPYmplY3QgKnBhaW50aW5nUm9vdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAg
cHVibGljOgogICAgIGludCBzY3JvbGxYT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxY
ICsgbV9zY3JvbGxPcmlnaW4ueCgpOyB9CiAgICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbFkgKyBtX3Njcm9sbE9yaWdpbi55KCk7IH0KIAotICAgIHZvaWQgc2Ny
b2xsVG9PZmZzZXQoaW50IHgsIGludCB5LCBib29sIHVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlLCBi
b29sIHJlcGFpbnQgPSB0cnVlKTsKKyAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQg
eSk7CiAgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoeCwg
bV9zY3JvbGxZICsgbV9zY3JvbGxPcmlnaW4ueSgpKTsgfQogICAgIHZvaWQgc2Nyb2xsVG9ZT2Zm
c2V0KGludCB5KSB7IHNjcm9sbFRvT2Zmc2V0KG1fc2Nyb2xsWCArIG1fc2Nyb2xsT3JpZ2luLngo
KSwgeSk7IH0KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgSW50UmVjdCYsIGJv
b2wgc2Nyb2xsVG9BbmNob3IgPSBmYWxzZSwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblgg
PSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQsIGNvbnN0IFNjcm9sbEFsaWdu
bWVudCYgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkKTsKQEAg
LTUxNSw4ICs1MTUsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVy
ZmFjZQogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChT
Y3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBv
aW50Jik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNv
bnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0OwpAQCAtNTI0LDcgKzUy
NCwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0
OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVh
bCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Ny
b2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICAKKworICAgIC8vIE5PVEU6IFRo
aXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0
IGZyb20gU2Nyb2xsYmFyQ2xpZW50LgorICAgIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5KTsK
KwogICAgIEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0Owog
ICAgIAogICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZs
b3csIGJvb2wgdmVydGljYWxPdmVyZmxvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5
NSw3IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW4KICAgICBlbHNl
CiAgICAgICAgIG5ld09mZnNldCA9IGluZGV4IC0gbnVtVmlzaWJsZUl0ZW1zKCkgKyAxOwogCi0g
ICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBt
X3ZCYXItPnNldFZhbHVlKG1faW5kZXhPZmZzZXQsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKKyAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmlt
YXRpb24obmV3T2Zmc2V0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTA5LDEyICs1MDcs
MTIgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5kZXhJc1Zpc2libGUoaQogCiBib29sIFJl
bmRlckxpc3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQogewotICAgIHJl
dHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllcik7CisgICAgcmV0dXJuIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpcmVjdGlvbiwg
Z3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6OmxvZ2lj
YWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiopCiB7Ci0gICAgcmV0dXJu
IG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0
eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nr
c1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIFNj
cm9sbGJhckNsaWVudDo6c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBSZW5kZXJM
aXN0Qm94Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4KQpAQCAtNTMwLDIwICs1Mjgs
MjQgQEAgaW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFNpemUoU2Nyb2xsYmFyTwogICAgIHJldHVy
biAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3ZCYXIpID8gKG1fdkJh
ci0+dG90YWxTaXplKCkgLSBtX3ZCYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBS
ZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
JiBvZmZzZXQpCitpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikg
Y29uc3QKIHsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNl
dC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gbV9pbmRl
eE9mZnNldDsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
KikKK3ZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBv
ZmZzZXQpCiB7Ci0gICAgaW50IG5ld09mZnNldCA9IG1fdkJhci0+dmFsdWUoKTsKLSAgICBpZiAo
bmV3T2Zmc2V0ICE9IG1faW5kZXhPZmZzZXQpIHsKLSAgICAgICAgbV9pbmRleE9mZnNldCA9IG5l
d09mZnNldDsKLSAgICAgICAgcmVwYWludCgpOwotICAgICAgICBub2RlKCktPmRvY3VtZW50KCkt
PmV2ZW50UXVldWUoKS0+ZW5xdWV1ZVNjcm9sbEV2ZW50KG5vZGUoKSwgRXZlbnRRdWV1ZTo6U2Ny
b2xsRXZlbnRFbGVtZW50VGFyZ2V0KTsKLSAgICB9CisgICAgc2Nyb2xsVG8ob2Zmc2V0LnkoKSk7
Cit9CisKK3ZvaWQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG8oaW50IG5ld09mZnNldCkKK3sKKyAg
ICBpZiAobmV3T2Zmc2V0ID09IG1faW5kZXhPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAg
IG1faW5kZXhPZmZzZXQgPSBuZXdPZmZzZXQ7CisgICAgcmVwYWludCgpOworICAgIG5vZGUoKS0+
ZG9jdW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlU2Nyb2xsRXZlbnQobm9kZSgpLCBFdmVu
dFF1ZXVlOjpTY3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwogfQogCiBpbnQgUmVuZGVyTGlzdEJv
eDo6aXRlbUhlaWdodCgpIGNvbnN0CkBAIC01ODksOSArNTkxLDggQEAgdm9pZCBSZW5kZXJMaXN0
Qm94OjpzZXRTY3JvbGxUb3AoaW50IG5ldwogICAgIGludCBpbmRleCA9IG5ld1RvcCAvIGl0ZW1I
ZWlnaHQoKTsKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG51bUl0ZW1zKCkgfHwgaW5k
ZXggPT0gbV9pbmRleE9mZnNldCkKICAgICAgICAgcmV0dXJuOwotICAgIG1faW5kZXhPZmZzZXQg
PSBpbmRleDsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKGluZGV4
LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgCisgICAgU2Nyb2xsYmFy
Q2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4KTsKIH0KIAogYm9v
bCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBI
aXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCArOTYsOCBAQCBw
cml2YXRlOgogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KICAgICB2aXJ0dWFs
IGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQ
b2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAg
dmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9p
ZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNjcm9s
bGJhckNvcm5lclByZXNlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAvLyBXZSBkb24ndCBz
dXBwb3J0IHJlc2l6ZSBvbiBsaXN0IGJveGVzIHlldC4gIElmIHdlIGRpZCB0aGlzIHdvdWxkIGhh
dmUgdG8gY2hhbmdlLgpAQCAtMTA1LDYgKzEwNSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVy
dEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IElu
dFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5p
bmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJl
dHVybiBtX3ZCYXIuZ2V0KCk7IH0KKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYmFyQ2xp
ZW50LgorICAgIHZvaWQgc2Nyb2xsVG8oaW50IG5ld09mZnNldCk7CiAKICAgICB2b2lkIHNldEhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKTsKICAgICBQYXNzUmVmUHRyPFNj
cm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTWFycXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1hcnF1ZWUuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDkgKzE3
MSw5IEBAIHZvaWQgUmVuZGVyTWFycXVlZTo6c3RhcnQoKQogCiAgICAgaWYgKCFtX3N1c3BlbmRl
ZCAmJiAhbV9zdG9wcGVkKSB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAg
ICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG1fc3RhcnQsIDAsIGZhbHNlLCBmYWxzZSk7Cisg
ICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChtX3N0YXJ0LCAwKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoMCwgbV9zdGFydCwgZmFs
c2UsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KDAsIG1fc3Rh
cnQpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjAyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDEtMTkgIFNhbSBXZWluaWcg
IDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQor
CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzZXRTY3JvbGxPZmZzZXQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsVG8pOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Nb3VzZVdoZWVsKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKToKKyAg
ICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjp2ZXJ0aWNhbFNjcm9sbGJhcik6CisKIDIwMTEt
MDEtMTkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IHRoZSBXZWJLaXQyIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlzaW9uIDc2MTc4KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQzOSwyMSArNDM5LDIzIEBAIGludCBXZWJQb3B1cE1lbnVQcm94
eVdpbjo6c2Nyb2xsU2l6ZShTY3IKICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAt
IG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51
UHJveHlXaW46OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKK2ludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFy
KikgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxiYXIpCi0gICAgICAgIG1fc2Nyb2xsYmFyLT5z
ZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAg
cmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpz
ZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxUbyhv
ZmZzZXQueSgpKTsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhciogc2Nyb2xsQmFyKQordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xs
VG8oaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlQobV9zY3JvbGxiYXIpOwogCiAgICAgaWYgKCFt
X3BvcHVwKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgb2Zmc2V0ID0gc2Nyb2xsQmFyLT52
YWx1ZSgpOwotCiAgICAgaWYgKG1fc2Nyb2xsT2Zmc2V0ID09IG9mZnNldCkKICAgICAgICAgcmV0
dXJuOwogCkBAIC03MjAsNyArNzIyLDggQEAgTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6
b25Nb3VzZVdoZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAtLWk7CiAgICAgfQotICAgIHNj
cm9sbGJhcigpLT5zY3JvbGwoaSA+IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5
TGluZSwgYWJzKGkpKTsKKworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAwID8gU2Ny
b2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CiAgICAgcmV0dXJuIDA7
CiB9CiAKQEAgLTkyMiwxMiArOTI1LDEyIEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNj
cm9sbFRvUmV2ZWEKICAgICBpbnQgaW5kZXggPSBmb2N1c2VkSW5kZXgoKTsKIAogICAgIGlmIChp
bmRleCA8IG1fc2Nyb2xsT2Zmc2V0KSB7Ci0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShp
bmRleCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgICAgICBTY3JvbGxi
YXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoaW5kZXggPj0gbV9zY3JvbGxPZmZzZXQg
KyB2aXNpYmxlSXRlbXMoKSkgewotICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUoaW5kZXgg
LSB2aXNpYmxlSXRlbXMoKSArIDEsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsK
KyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5
V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1
cE1lbnVQcm94eVdpbi5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTEg
KzYwLDE1IEBAIHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKICAgICB2aXJ0dWFs
IGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
V2ViQ29yZTo6U2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2Vi
Q29yZTo6U2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNl
dChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQorCisgICAgLy8gTk9URTog
VGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZz
ZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQgb2Zmc2V0KTsK
IAogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKICAgICBzdGF0aWMgTFJF
U1VMVCBDQUxMQkFDSyBXZWJQb3B1cE1lbnVQcm94eVduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFN
LCBMUEFSQU0pOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjAy
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwyMiBAQAorMjAxMS0wMS0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBz
aG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBzcmMvV2Vi
U2Nyb2xsYmFySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Oldl
YlNjcm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2YWx1
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3Jv
bGxiYXJJbXBsOjpvbk1vdXNlTW92ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhcklt
cGw6Om9uTW91c2VXaGVlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9u
S2V5RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5oOgorCiAyMDExLTAxLTE5ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjc2MTk0LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2Nyb2xsYmFySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDYgKzYyLDcgQEAgaW50IFdlYlNjcm9sbGJhcjo6ZGVmYXVsdFRoaWNrbmVzcygpCiAKIFdlYlNj
cm9sbGJhckltcGw6OldlYlNjcm9sbGJhckltcGwoV2ViU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQs
IE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKQogICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwg
bV9zY3JvbGxPZmZzZXQoMCkKIHsKICAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRl
TmF0aXZlU2Nyb2xsYmFyKAogICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJDbGllbnQqPih0
aGlzKSwKQEAgLTg5LDEyICs5MCwxNSBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldExvY2F0
aW9uKGNvbnN0CiAKIGludCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fc2Nyb2xsYmFyLT52YWx1ZSgpOworICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsK
IH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCiB7Ci0g
ICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9uLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3Jv
bGxBbmltYXRvcik7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpCisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xs
VG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgZWxzZQorICAgICAgICBX
ZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24o
cG9zaXRpb24pOwogfQogCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3VtZW50U2l6ZShp
bnQgc2l6ZSkKQEAgLTExMiw3ICsxMTYsOCBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9s
bChTY3JvbGxEaXJlCiAgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNj
cm9sbERvd247CiAgICAgZWxzZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsTGVm
dCA6IFNjcm9sbFVwOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBsaWVyKTsKKwor
ICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlwbGllcikKIH0KIAog
dm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2Vi
UmVjdCYgcmVjdCkKQEAgLTE2NywxMSArMTcyLDExIEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6
b25Nb3VzZURvd24oY29uc3QKICAgICBpZiAoIW1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250
YWlucyhtb3VzZWRvd24ueCwgbW91c2Vkb3duLnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgIG1vdXNlZG93bi54IC09IG1fc2Nyb2xsYmFyLT54KCk7Ci0gICAgICAgICAg
ICBtb3VzZWRvd24ueSAtPSBtX3Njcm9sbGJhci0+eSgpOwotICAgICAgICAgICAgbV9zY3JvbGxi
YXItPm1vdXNlRG93bihQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgp
LCBtb3VzZWRvd24pKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAg
bW91c2Vkb3duLnggLT0gbV9zY3JvbGxiYXItPngoKTsKKyAgICBtb3VzZWRvd24ueSAtPSBtX3Nj
cm9sbGJhci0+eSgpOworICAgIG1fc2Nyb2xsYmFyLT5tb3VzZURvd24oUGxhdGZvcm1Nb3VzZUV2
ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vkb3duKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVVwKGNvbnN0IFdlYklucHV0
RXZlbnQmIGV2ZW50KQogewpAQCAtMTgzLDE2ICsxODgsMTYgQEAgYm9vbCBXZWJTY3JvbGxiYXJJ
bXBsOjpvbk1vdXNlVXAoY29uc3QgVwogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VN
b3ZlKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogewotICAgICAgICBXZWJNb3VzZUV2ZW50
IG1vdXNlbW92ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KTsK
LSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3VzZW1vdmUu
eCwgbW91c2Vtb3ZlLnkpCi0gICAgICAgICAgICB8fCBtX3Njcm9sbGJhci0+cHJlc3NlZFBhcnQo
KSAhPSBOb1BhcnQpIHsKLSAgICAgICAgICAgIG1vdXNlbW92ZS54IC09IG1fc2Nyb2xsYmFyLT54
KCk7Ci0gICAgICAgICAgICBtb3VzZW1vdmUueSAtPSBtX3Njcm9sbGJhci0+eSgpOwotICAgICAg
ICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlbW92ZSkpOwotICAgICAgICB9CisgICAgV2Vi
TW91c2VFdmVudCBtb3VzZW1vdmUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+
KCZldmVudCk7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3Vz
ZW1vdmUueCwgbW91c2Vtb3ZlLnkpCisgICAgICAgIHx8IG1fc2Nyb2xsYmFyLT5wcmVzc2VkUGFy
dCgpICE9IE5vUGFydCkgeworICAgICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJhci0+eCgp
OworICAgICAgICBtb3VzZW1vdmUueSAtPSBtX3Njcm9sbGJhci0+eSgpOworICAgICAgICByZXR1
cm4gbV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Nj
cm9sbGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7CisgICAgfQogCi0gICAgICAgIGlmIChtX3Njcm9s
bGJhci0+aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCi0gICAgICAgICAgICBtX3Njcm9sbGJhci0+
bW91c2VFeGl0ZWQoKTsKKyAgICBpZiAobV9zY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gTm9Q
YXJ0KQorICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VFeGl0ZWQoKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTIwNiw1OSArMjExLDU5IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25N
b3VzZUxlYXZlKGNvbnMKIAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7Ci0gICAgICAgIC8vIFNhbWUgbG9naWMgYXMgaW4g
U2Nyb2xsdmlldy5jcHAuICBJZiB3ZSBjYW4gbW92ZSBhdCBhbGwsIHdlJ2xsIGFjY2VwdCB0aGUg
ZXZlbnQuCi0gICAgICAgIFdlYk1vdXNlV2hlZWxFdmVudCBtb3VzZXdoZWVsID0gKnN0YXRpY19j
YXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZldmVudCk7Ci0gICAgICAgIGludCBtYXhT
Y3JvbGxEZWx0YSA9IG1fc2Nyb2xsYmFyLT5tYXhpbXVtKCkgLSBtX3Njcm9sbGJhci0+dmFsdWUo
KTsKLSAgICAgICAgZmxvYXQgZGVsdGEgPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyID8gbW91c2V3aGVlbC5kZWx0YVggOiBtb3VzZXdoZWVsLmRlbHRh
WTsKLSAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEgPiAwKSB8fCAoZGVs
dGEgPiAwICYmIG1fc2Nyb2xsYmFyLT52YWx1ZSgpID4gMCkpIHsKLSAgICAgICAgICAgIGlmICht
b3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3Njcm9s
bGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgICAgICAgICAg
ICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRhIDwgMDsKLSAgICAgICAgICAgICAgICBkZWx0YSA9IG1h
eChtYXgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAqIFNj
cm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHN0YXRpY19jYXN0PGZsb2F0
PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdl
ZW5QYWdlcygpKSksIDEuMGYpOwotICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKLSAgICAg
ICAgICAgICAgICAgICAgZGVsdGEgKj0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBt
X3Njcm9sbGJhci0+c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwg
V2ViQ29yZTo6U2Nyb2xsQnlQaXhlbCwgZGVsdGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgLy8gU2FtZSBsb2dpYyBhcyBpbiBTY3JvbGx2aWV3LmNwcC4gIElmIHdlIGNhbiBtb3Zl
IGF0IGFsbCwgd2UnbGwgYWNjZXB0IHRoZSBldmVudC4KKyAgICBXZWJNb3VzZVdoZWVsRXZlbnQg
bW91c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigmZXZl
bnQpOworICAgIGludCBtYXhTY3JvbGxEZWx0YSA9IG1fc2Nyb2xsYmFyLT5tYXhpbXVtKCkgLSBt
X3Njcm9sbGJhci0+dmFsdWUoKTsKKyAgICBmbG9hdCBkZWx0YSA9IG1fc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtb3VzZXdoZWVsLmRlbHRhWCA6IG1v
dXNld2hlZWwuZGVsdGFZOworICAgIGlmICgoZGVsdGEgPCAwICYmIG1heFNjcm9sbERlbHRhID4g
MCkgfHwgKGRlbHRhID4gMCAmJiBtX3Njcm9sbGJhci0+dmFsdWUoKSA+IDApKSB7CisgICAgICAg
IGlmIChtb3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkgeworICAgICAgICAgICAgQVNTRVJUKG1fc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAg
IGJvb2wgbmVnYXRpdmUgPSBkZWx0YSA8IDA7CisgICAgICAgICAgICBkZWx0YSA9IG1heChtYXgo
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAqIFNjcm9sbGJh
cjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Nj
cm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdl
cygpKSksIDEuMGYpOworICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAg
IGRlbHRhICo9IC0xOwogICAgICAgICB9CisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVu
dDo6c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6
U2Nyb2xsQnlQaXhlbCwgZGVsdGEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93
bihjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKIHsKLSAgICAgICAgV2ViS2V5Ym9hcmRFdmVu
dCBrZXlib2FyZCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4oJmV2ZW50
KTsKLSAgICAgICAgaW50IGtleUNvZGU7Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8gZHVwbGljYXRl
IHRoaXMgbG9naWMgZnJvbSBXZWJWaWV3SW1wbCBiZWNhdXNlIHRoZXJlIGl0IHVzZXMKLSAgICAg
ICAgLy8gQ2hhciBhbmQgUmF3S2V5RG93biBldmVudHMsIHdoaWNoIGRvbid0IGV4aXN0IGF0IHRo
aXMgcG9pbnQuCi0gICAgICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX1NQ
QUNFKQotICAgICAgICAgICAga2V5Q29kZSA9ICgoa2V5Ym9hcmQubW9kaWZpZXJzICYgV2ViSW5w
dXRFdmVudDo6U2hpZnRLZXkpID8gVktFWV9QUklPUiA6IFZLRVlfTkVYVCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50
OjpDb250cm9sS2V5KSB7Ci0gICAgICAgICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3IgaW4g
dGhlIHNlbnNlIHRoYXQgQ3RybCtob21lL2VuZCBhcmUgdGhlIG9ubHkgQ3RybAotICAgICAgICAg
ICAgICAgIC8vIGtleSBjb21iaW5hdGlvbnMgd2hpY2ggYWZmZWN0IHNjcm9sbGluZy4gU2FmYXJp
IGlzIGJ1Z2d5IGluIHRoZQotICAgICAgICAgICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xs
cyB0aGUgcGFnZSBmb3IgYWxsIEN0cmwrc2Nyb2xsaW5nIGtleQotICAgICAgICAgICAgICAgIC8v
IGNvbWJpbmF0aW9ucy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3BnZG4vdXAvZG93biwgZXRjLgotICAg
ICAgICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIFZLRVlfSE9NRToKLSAgICAgICAgICAgICAgICBjYXNlIFZLRVlfRU5EOgot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQorICAgIFdl
YktleWJvYXJkRXZlbnQga2V5Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5Ym9hcmRF
dmVudCo+KCZldmVudCk7CisgICAgaW50IGtleUNvZGU7CisgICAgLy8gV2UgaGF2ZSB0byBkdXBs
aWNhdGUgdGhpcyBsb2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQgdXNlcwor
ICAgIC8vIENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlzdCBhdCB0
aGlzIHBvaW50LgorICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX1NQQUNF
KQorICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50
OjpTaGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5KSB7
CisgICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUgc2Vuc2UgdGhhdCBDdHJs
K2hvbWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCisgICAgICAgICAgICAvLyBrZXkgY29tYmluYXRp
b25zIHdoaWNoIGFmZmVjdCBzY3JvbGxpbmcuIFNhZmFyaSBpcyBidWdneSBpbiB0aGUKKyAgICAg
ICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0aGUgcGFnZSBmb3IgYWxsIEN0cmwrc2Ny
b2xsaW5nIGtleQorICAgICAgICAgICAgLy8gY29tYmluYXRpb25zLiBGb3IgZS5nLiBDdHJsK3Bn
dXAvcGdkbi91cC9kb3duLCBldGMuCisgICAgICAgICAgICBzd2l0Y2ggKGtleWJvYXJkLndpbmRv
d3NLZXlDb2RlKSB7CisgICAgICAgICAgICBjYXNlIFZLRVlfSE9NRToKKyAgICAgICAgICAgIGNh
c2UgVktFWV9FTkQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KKyAgICAgICAg
fQogCi0gICAgICAgICAgICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkgfHwgKGtleWJvYXJkLm1v
ZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQu
bW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgICAgICBrZXlDb2RlID0ga2V5Ym9hcmQud2luZG93c0tleUNvZGU7
Ci0gICAgICAgIH0KLSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVj
dGlvbjsKLSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJp
dHk7Ci0gICAgICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbChrZXlDb2Rl
LCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7Ci0gICAgICAgICAgICAv
LyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGlyZWN0aW9uIHdhc24ndCBjb21wYXRpYmxl
IHdpdGggdGhpcyBzY3JvbGxiYXIuCi0gICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxiYXItPnNj
cm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICAgICAgfQorICAg
ICAgICBrZXlDb2RlID0ga2V5Ym9hcmQud2luZG93c0tleUNvZGU7CisgICAgfQorICAgIFdlYkNv
cmU6OlNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247CisgICAgV2ViQ29yZTo6U2Nyb2xs
R3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7CisgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBL
ZXlDb2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxh
cml0eSkpIHsKKyAgICAgICAgLy8gV2lsbCByZXR1cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlv
biB3YXNuJ3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgc2Nyb2xsYmFyLgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxH
cmFudWxhcml0eSk7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjY3LDEzICsy
NzIsMTggQEAgaW50IFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZQogICAgIHJl
dHVybiAob3JpZW50YXRpb24gPT0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpID8gKG1fc2Ny
b2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9
CiAKLXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoraW50IFdlYlNjcm9sbGJhckltcGw6OnNj
cm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0CiB7Ci0gICAgbV9zY3JvbGxi
YXItPnNldFZhbHVlKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKSA/IG9mZnNldC54KCkgOiBvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxB
bmltYXRvcik7CisgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OwogfQogCi12b2lkIFdlYlNjcm9s
bGJhckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKQordm9pZCBXZWJTY3Jv
bGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNl
dCkKIHsKKyAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikKKyAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQueCgpOworICAgIGVsc2UK
KyAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQueSgpOworCiAgICAgbV9jbGllbnQtPnZh
bHVlQ2hhbmdlZCh0aGlzKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViU2Nyb2xsYmFySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlNjcm9sbGJhckltcGwuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkg
KzU4LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0
IFdlYklucHV0RXZlbnQmKTsKIAogICAgIC8vIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCBtZXRo
b2RzCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IHNj
cm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1
YWwgaW50IHNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFy
KiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3Q7
CkBAIC03Niw2ICs3Niw3IEBAIHByaXZhdGU6CiAKICAgICBXZWJTY3JvbGxiYXJDbGllbnQqIG1f
Y2xpZW50OwogCisgICAgaW50IG1fc2Nyb2xsT2Zmc2V0OwogICAgIFJlZlB0cjxXZWJDb3JlOjpT
Y3JvbGxiYXI+IG1fc2Nyb2xsYmFyOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkocmV2aXNp
b24gNzYyMDIpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAxMS0wMS0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQg
YSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBXZWJT
Y3JvbGxCYXIuY3BwOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjpXZWJTY3JvbGxCYXIpOgorICAg
ICAgICAoV2ViU2Nyb2xsQmFyOjpzZXRWYWx1ZSk6CisgICAgICAgIChXZWJTY3JvbGxCYXI6OnZh
bHVlKToKKyAgICAgICAgKFdlYlNjcm9sbEJhcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYlNjcm9s
bEJhcjo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjpzZXRTY3JvbGxP
ZmZzZXQpOgorICAgICAgICAqIFdlYlNjcm9sbEJhci5oOgorCiAyMDExLTAxLTE5ICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5jcHAJKHJldmlzaW9uIDc2
MTc4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNiArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIFdlYlNjcm9sbEJh
cjo6V2ViU2Nyb2xsQmFyKCkKICAgICA6IG1fcmVmQ291bnQoMCkKICAgICAsIG1fY29udGFpbmlu
Z1dpbmRvdygwKQorICAgICwgbV9jdXJyZW50UG9zaXRpb24oMCkKIHsKICAgICBnQ2xhc3NDb3Vu
dCsrOwogICAgIGdDbGFzc05hbWVDb3VudC5hZGQoIldlYlNjcm9sbEJhciIpOwpAQCAtMTQzLDcg
KzE0NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2Nyb2xsQmFyOjoKIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2Nyb2xsQmFyOjpzZXRWYWx1ZSggCiAgICAgLyogW2lu
XSAqLyBpbnQgdmFsdWUpCiB7Ci0gICAgbV9zY3JvbGxCYXItPnNldFZhbHVlKHZhbHVlLCBTY3Jv
bGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgbV9jdXJyZW50UG9zaXRpb24gPSB2
YWx1ZTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTUyLDcgKzE1Myw3IEBAIEhSRVNVTFQg
U1RETUVUSE9EQ0FMTFRZUEUgV2ViU2Nyb2xsQmFyOjoKIHsKICAgICBpZiAoIXZhbHVlKQogICAg
ICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICp2YWx1ZSA9IG1fc2Nyb2xsQmFyLT52YWx1ZSgp
OworICAgICp2YWx1ZSA9IG1fY3VycmVudFBvc2l0aW9uOwogICAgIHJldHVybiBTX09LOwogfQog
CkBAIC0yNDcsNyArMjQ4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxC
YXI6OgogewogICAgIFNjcm9sbERpcmVjdGlvbiB3ZWJDb3JlU2Nyb2xsRGlyZWN0aW9uID0gKFNj
cm9sbERpcmVjdGlvbikgZGlyZWN0aW9uOwogICAgIFNjcm9sbEdyYW51bGFyaXR5IHdlYkNvcmVH
cmFudWxhcml0eSA9IChTY3JvbGxHcmFudWxhcml0eSkgZ3JhbnVsYXJpdHk7Ci0gICAgbV9zY3Jv
bGxCYXItPnNjcm9sbCh3ZWJDb3JlU2Nyb2xsRGlyZWN0aW9uLCB3ZWJDb3JlR3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpOworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKHdlYkNvcmVTY3JvbGxE
aXJlY3Rpb24sIHdlYkNvcmVHcmFudWxhcml0eSwgbXVsdGlwbGllcik7CiAgICAgcmV0dXJuIFNf
T0s7CiB9CiAKQEAgLTI1NywxNyArMjU4LDE0IEBAIGludCBXZWJTY3JvbGxCYXI6OnNjcm9sbFNp
emUoU2Nyb2xsYmFyT3IKICAgICByZXR1cm4gKG9yaWVudGF0aW9uID09IG1fc2Nyb2xsQmFyLT5v
cmllbnRhdGlvbigpKSA/IChtX3Njcm9sbEJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbEJhci0+
dmlzaWJsZVNpemUoKSkgOiAwOyAKIH0KIAotdm9pZCBXZWJTY3JvbGxCYXI6OnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK2ludCBXZWJTY3JvbGxC
YXI6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0CiB7Ci0gICAgbV9zY3JvbGxCYXIt
PnNldFZhbHVlKChtX3Njcm9sbEJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSA/IG9mZnNldC54KCkgOiBvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmlt
YXRvcik7CisgICAgcmV0dXJuIG1fY3VycmVudFBvc2l0aW9uOwogfQogCi12b2lkIFdlYlNjcm9s
bEJhcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQordm9pZCBXZWJTY3JvbGxC
YXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewotICAgIGlmICht
X3Njcm9sbEJhciAhPSBzY3JvbGxCYXIpIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsgIC8vIHNo
b3VsZG4ndCBoYXBwZW4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2N1cnJlbnRQb3Np
dGlvbiA9IChtX3Njcm9sbEJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KSA/IG9mZnNldC54KCkgOiBvZmZzZXQueSgpOwogICAgIG1fZGVsZWdhdGUtPnZhbHVlQ2hhbmdl
ZCh0aGlzKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmgJKHJldmlzaW9uIDc2
MTc4KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTExNyw4ICsxMTcsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgLy8gU2Nyb2xsYmFy
Q2xpZW50CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciop
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQm
KTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm92aWRlIGEgd2F5
IHRvIHNldCB0aGlzIHZhbHVlLgpAQCAtMTI4LDYgKzEyOCw3IEBAIHByb3RlY3RlZDoKIAogICAg
IFVMT05HIG1fcmVmQ291bnQ7CiAgICAgSFdORCBtX2NvbnRhaW5pbmdXaW5kb3c7CisgICAgaW50
IG1fY3VycmVudFBvc2l0aW9uOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+IG1fc2Ny
b2xsQmFyOwogICAgIENPTVB0cjxJV2ViU2Nyb2xsQmFyRGVsZWdhdGVQcml2YXRlPiBtX2RlbGVn
YXRlOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79549</attachid>
            <date>2011-01-19 21:37:35 -0800</date>
            <delta_ts>2011-01-20 11:25:02 -0800</delta_ts>
            <desc>WIP-2 (Do not review)</desc>
            <filename>patchForBZ.diff</filename>
            <type>text/plain</type>
            <size>73496</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDEtMTkgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMh
KQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxUbyk6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6Omhv
cml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmVydGlj
YWxTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNl
TW92ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyOjpzZXRQcmVzc2VkUG9zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxi
YXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxU
b1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNs
aWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50Ojpob3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhckNsaWVudDo6dmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1
cE1lbnVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzY3JvbGxUb1Jl
dmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2Nyb2xsVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UG9wdXBNZW51V2luOjp3bmRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmg6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnZlcnRpY2Fs
U2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNj
cm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpsb2dp
Y2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp2ZXJ0
aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorCiAyMDExLTAxLTE5ICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByNzYxODcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NjE3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTE0MDQsNyArMTE0MDQsNyBAQAogCQlCQ0E4Q0E1RDExRTRFNkQxMDA4MTJGQjcg
LyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0FBOTBDMjBBN0VC
QTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTY3JvbGxiYXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDsg
c291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkg
LyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
Y3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FDRjNCQTEwNzI5
MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUUxRkE1
MTI5MzlEQjcwMDRDQjAyNiAvKiBTY3JvbGxBbmltYXRvck1hYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JvbGxBbmltYXRvck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTM4NzksNyArMTM4NzksNiBAQAogCQkJCTFDRTI0Rjk2MEQ3Q0FGMEUwMDdF
MDRDMiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkJQkNBRTFGQTUxMjkzOURCNzAwNENC
MDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggKi8sCiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2
NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLAotCQkJCUJDQUE5MEMyMEE3RUJBNjAwMDhC
MTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKIAkJCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYg
LyogU2Nyb2xsVmlld01hYy5tbSAqLywKQEAgLTE4MjYxLDYgKzE4MjYwLDcgQEAKIAkJCQk1MTYy
QzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKIAkJCQlDQTNCRjY3
QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAogCQkJCUNBM0JGNjdE
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAorCQkJCUJDQUE5MEMyMEE3
RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEw
MEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlCQzlCQzY0QjBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKIAkJCQlCQzlCQzY0QzBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDc2
MTc4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOSArOTcsMTQgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZShmbAogICAgIGlmICghbV9zY3JvbGxiYXIpCiAgICAgICAg
IHJldHVybjsKICAgICAKKyAgICBpZiAoIW1fc2Nyb2xsYmFyLT5jbGllbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZmxvYXQgbmV3VmFsdWUgPSB2YWx1ZSAqIG1fc2Nyb2xsYmFyLT5tYXhp
bXVtKCk7Ci0gICAgCi0gICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG5ld1ZhbHVlLCBTY3JvbGxi
YXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7ICAgIAorICAgIGlmIChtX3Njcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+
Y2xpZW50KCktPnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24obmV3VmFsdWUpOworICAg
IGVsc2UKKyAgICAgICAgbV9zY3JvbGxiYXItPmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKG5ld1ZhbHVlKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQzLDIz
ICsxOTQzLDE1IEBAIGJvb2wgRnJhbWVWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQg
RnJhbWVWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBiYXIpCit2b2lkIEZyYW1lVmlldzo6
c2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KQogewotICAgIC8vIEZpZ3VyZSBvdXQg
aWYgd2UgcmVhbGx5IG1vdmVkLgogICAgIEludFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKGJhcik7CisgICAgU2Nyb2xsVmlldzo6c2Ny
b2xsVG8obmV3T2Zmc2V0KTsKICAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQogICAg
ICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dmFs
dWVDaGFuZ2VkKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQotewotICAgIFNjcm9sbFZpZXc6
OnZhbHVlQ2hhbmdlZChzY3JvbGxEZWx0YSk7Ci0gICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkt
PnNlbmRTY3JvbGxFdmVudCgpOwotICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlk
Q2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci19Ci0KIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICAvLyBBZGQgaW4gb3VyIG9mZnNldCB3aXRoaW4gdGhlIEZyYW1lVmlldy4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsMTIgKzI4OCwxMiBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25z
dCBJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFjZQot
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtz
KFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvKGNv
bnN0IEludFNpemUmKTsKKwogICAgIHZvaWQgZGVmZXJyZWRSZXBhaW50VGltZXJGaXJlZChUaW1l
cjxGcmFtZVZpZXc+Kik7CiAgICAgdm9pZCBkb0RlZmVycmVkUmVwYWludHMoKTsKICAgICB2b2lk
IHVwZGF0ZURlZmVycmVkUmVwYWludERlbGF5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgi
CiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50Lmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCkBAIC02MSwxNiArNjIsMjcgQEAgYm9vbCBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaQogICAgIGlmICgqY3VycmVudFBvcyA9PSBuZXdQ
b3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqY3VycmVudFBvcyA9IG5ld1BvczsKLSAg
ICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1cnJl
bnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQ
b3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IGZsb2F0IHBvcykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9jdXJyZW50UG9zWCA9
IG9mZnNldC54KCk7CisgICAgbV9jdXJyZW50UG9zWSA9IG9mZnNldC55KCk7CisgICAgbm90aXR5
UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCi0gICAgICAgIG1fY3VycmVudFBvc1ggPSBwb3M7Ci0gICAgZWxzZQotICAgICAg
ICBtX2N1cnJlbnRQb3NZID0gcG9zOworICAgIHJldHVybiBGbG9hdFBvaW50KG1fY3VycmVudFBv
c1gsIG1fY3VycmVudFBvc1kpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQb3Np
dGlvbkNoYW5nZWQoKQoreworICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgU2Nyb2xsYmFyQ2xpZW50Owog
CiBjbGFzcyBTY3JvbGxBbmltYXRvciB7CkBAIC01MCwxNiArNTEsMTggQEAgcHVibGljOgogICAg
IC8vIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0
ZWx5LCBuZXZlciBhbmltYXRlcy4KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cik7CiAKLSAgICAvLyBTdG9wcyBhbnkgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24g
YW5kIHVwZGF0ZXMgdGhlIFNjcm9sbEFuaW1hdG9yCi0gICAgLy8gd2l0aCB0aGUgY3VycmVudCBz
Y3JvbGwgcG9zaXRpb24uICBUaGlzIGRvZXMgbm90IGNhdXNlIGEgY2FsbGJhY2sgdG8gdGhlCi0g
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uKCkgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKKyAgICB2b2lkIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworCiAgICAgU2Nyb2xsYmFyQ2xp
ZW50KiBtX2NsaWVudDsKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2lu
ZyBhIEZsb2F0UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9z
WTsgLy8gc3ViY2xhc3MgY29kZSBjb21wbGV4aXR5LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotI2VuZGlmCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRvcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDI1
ICszMjAsMjAgQEAgaW50IFNjcm9sbFZpZXc6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZQogICAg
IHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+
dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3ZvaWQgU2Nyb2xsVmlldzo6
c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgaWYgKG1faG9y
aXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1
ZShvZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVl
KG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKLX0KKyAgICBpbnQg
aG9yaXpvbnRhbE9mZnNldCA9IHN0ZDo6bWF4KHN0ZDo6bWluKG9mZnNldC54KCksIGNvbnRlbnRz
V2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSwgMCk7CisgICAgaW50IHZlcnRpY2FsT2Zmc2V0ID0g
c3RkOjptYXgoc3RkOjptaW4ob2Zmc2V0LnkoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2libGVI
ZWlnaHQoKSksIDApOwogCi12b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIq
IHNjcm9sbGJhcikKLXsKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KICAg
ICBJbnRTaXplIG5ld09mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxiYXIp
IHsKLSAgICAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKHNjcm9sbGJhci0+dmFsdWUo
KSAtIG1fc2Nyb2xsT3JpZ2luLngoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5z
ZXRIZWlnaHQoc2Nyb2xsYmFyLT52YWx1ZSgpIC0gbV9zY3JvbGxPcmlnaW4ueSgpKTsKLSAgICB9
CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGhvcml6b250YWxPZmZzZXQgLSBtX3Njcm9sbE9yaWdp
bi54KCkpOworICAgIG5ld09mZnNldC5zZXRIZWlnaHQodmVydGljYWxPZmZzZXQgLSBtX3Njcm9s
bE9yaWdpbi55KCkpOworCisgICAgc2Nyb2xsVG8obmV3T2Zmc2V0KTsKK30KIAordm9pZCBTY3Jv
bGxWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCit7CiAgICAgSW50U2l6
ZSBzY3JvbGxEZWx0YSA9IG5ld09mZnNldCAtIG1fc2Nyb2xsT2Zmc2V0OwogICAgIGlmIChzY3Jv
bGxEZWx0YSA9PSBJbnRTaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MSwxMyArMzQ2LDEz
IEBAIHZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhcioKICAgICBzY3JvbGxD
b250ZW50cyhzY3JvbGxEZWx0YSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2Vk
KGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoraW50IFNjcm9sbFZpZXc6OnNjcm9sbFBvc2l0
aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIGlmIChzY3JvbGxiYXJzU3Vw
cHJlc3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXBhaW50Rml4ZWRFbGVtZW50c0Fm
dGVyU2Nyb2xsaW5nKCk7Ci0gICAgc2Nyb2xsQ29udGVudHMoc2Nyb2xsRGVsdGEpOworICAgIGlm
IChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAg
ICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBzY3JvbGxQb3Np
dGlvbigpLnkoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpzZXRTY3Jv
bGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCkBAIC0zOTEsMTUgKzM4Niw4
IEBAIGJvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiAKIHsKICAgICBpZiAo
cGxhdGZvcm1XaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3JtU2Nyb2xsKGRpcmVjdGlv
biwgZ3JhbnVsYXJpdHkpOwotICAgIAotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwg
ZGlyZWN0aW9uID09IFNjcm9sbERvd24pIHsKLSAgICAgICAgaWYgKG1fdmVydGljYWxTY3JvbGxi
YXIpCi0gICAgICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVj
dGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChtX2hvcml6b250
YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5z
Y3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5KTsKIH0KIAogYm9vbCBTY3JvbGxWaWV3Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKQEAgLTUz
MCw3ICs1MTgsNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAg
ICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9u
KHRydWUpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN0ZXBzKFNjcm9sbGJh
cjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRlbnRzV2lkdGgoKSk7Ci0g
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLndpZHRoKCkgKyBt
X3Njcm9sbE9yaWdpbi54KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAg
ICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX2hvcml6b250
YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCiAgICAgfSAKQEAg
LTU1Miw3ICs1MzksNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3Qg
CiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlv
bih0cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFy
OjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50c0hlaWdodCgpKTsKLSAg
ICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpICsgbV9z
Y3JvbGxPcmlnaW4ueSgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAg
ICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwogICAgIH0KQEAgLTU2Miwx
NSArNTQ4LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IAogICAg
ICAgICB1cGRhdGVTY3JvbGxDb3JuZXIoKTsKICAgICB9CiAKLSAgICAvLyBTZWUgaWYgb3VyIG9m
ZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBz
Y3JvbGxiYXJzLgotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdp
dGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3JvbGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KLSAg
ICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFz
IHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1heGltaXplZCByZXN1bHQKLSAgICAvLyBkb2VzIG5v
dCkuCi0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IHNjcm9sbCAtIG1fc2Nyb2xsT2Zmc2V0Owot
ICAgIGlmIChzY3JvbGxEZWx0YSAhPSBJbnRTaXplKCkpIHsKLSAgICAgICBtX3Njcm9sbE9mZnNl
dCA9IHNjcm9sbDsKLSAgICAgICB2YWx1ZUNoYW5nZWQoc2Nyb2xsRGVsdGEpOwotICAgIH0KKyAg
ICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBv
aW50KHNjcm9sbC53aWR0aCgpLCBzY3JvbGwuaGVpZ2h0KCkpKTsKIAogICAgIG1faW5VcGRhdGVT
Y3JvbGxiYXJzID0gZmFsc2U7CiB9CkBAIC03NTcsNiArNzM1LDcgQEAgdm9pZCBTY3JvbGxWaWV3
Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZQogICAgIC8vIHNjcm9sbCBhbnkgZnVydGhlci4KICAg
ICBmbG9hdCBkZWx0YVggPSBtX2hvcml6b250YWxTY3JvbGxiYXIgPyBlLmRlbHRhWCgpIDogMDsK
ICAgICBmbG9hdCBkZWx0YVkgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyID8gZS5kZWx0YVkoKSA6IDA7
CisgICAgCiAgICAgSW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEgPSBtYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7CiAgICAgSW50U2l6ZSBtYXhCYWNrd2FyZFNj
cm9sbERlbHRhID0gc2Nyb2xsUG9zaXRpb24oKSAtIG1pbmltdW1TY3JvbGxQb3NpdGlvbigpOwog
ICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEud2lkdGgoKSA+IDAp
CkBAIC03NzMsOSArNzUyLDkgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3Jt
V2hlZQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRlbHRhWSkKLSAgICAgICAgICAgIG1fdmVy
dGljYWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFZKTsK
KyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBp
eGVsLCBkZWx0YVkpOwogICAgICAgICBpZiAoZGVsdGFYKQotICAgICAgICAgICAgbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFYKTsK
KyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5
UGl4ZWwsIGRlbHRhWCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsVmlldy5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEyIEBAIHB1YmxpYzoKIAog
ICAgIC8vIFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBGcmFtZVZpZXcgb3ZlcnJpZGVzIHRo
ZSBvdGhlcnMuCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoY29uc3QgSW50
U2l6ZSYpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKICAg
ICAKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJp
ZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGJhckNsaWVudC4KKyAgICB2aXJ0dWFsIHZv
aWQgc2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KTsKKwogICAgIC8vIFRoZSB3aW5k
b3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuIFRoZSBTY3JvbGxWaWV3IHdpbGwgY29tbXVu
aWNhdGUgc2Nyb2xscyBhbmQgcmVwYWludHMgdG8gdGhlCiAgICAgLy8gaG9zdCB3aW5kb3cgaW4g
dGhlIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgdmlydHVhbCBIb3N0V2luZG93KiBo
b3N0V2luZG93KCkgY29uc3QgPSAwOwpAQCAtNzgsOCArODAsOCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgLy8gSWYgdGhlIHNjcm9sbCB2aWV3IGRvZXMgbm90IHVzZSBhIG5hdGl2ZSB3aWRnZXQsIHRo
ZW4gaXQgd2lsbCBoYXZlIGNyb3NzLXBsYXRmb3JtIFNjcm9sbGJhcnMuIFRoZXNlIGZ1bmN0aW9u
cwogICAgIC8vIGNhbiBiZSB1c2VkIHRvIG9idGFpbiB0aG9zZSBzY3JvbGxiYXJzLgotICAgIFNj
cm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRh
bFNjcm9sbGJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBT
Y3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250
YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9CiAgICAg
Ym9vbCBpc1Njcm9sbFZpZXdTY3JvbGxiYXIoY29uc3QgV2lkZ2V0KiBjaGlsZCkgY29uc3QgeyBy
ZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpID09IGNoaWxkIHx8IHZlcnRpY2FsU2Nyb2xsYmFy
KCkgPT0gY2hpbGQ7IH0KIAogICAgIC8vIEZ1bmN0aW9ucyBmb3Igc2V0dGluZyBhbmQgcmV0cmll
dmluZyB0aGUgc2Nyb2xsaW5nIG1vZGUgaW4gZWFjaCBheGlzIChob3Jpem9udGFsL3ZlcnRpY2Fs
KS4gVGhlIG1vZGUgaGFzIHZhbHVlcyBvZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxiYXIuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMyArMTA0LDE5IEBAIFNjcm9sbGJh
cjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNjcm9sbGJhcih0aGlzKTsK
IH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2LCBTY3JvbGxTb3VyY2Ugc291cmNl
KQordm9pZCBTY3JvbGxiYXI6Om9mZnNldERpZENoYW5nZSgpCiB7Ci0gICAgdiA9IG1heChtaW4o
diwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7Ci0gICAgaWYgKHZhbHVlKCkgPT0g
dikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3RheWVkIHRoZSBzYW1lLgot
ICAgIHNldEN1cnJlbnRQb3Modiwgc291cmNlKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NF
UlQobV9jbGllbnQpOworCisgICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
bV9jbGllbnQtPnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKKyAgICBpZiAocG9zaXRpb24gPT0gbV9j
dXJyZW50UG9zKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgb2xkVGh1bWJQb3NpdGlvbiA9
IHRoZW1lKCktPnRodW1iUG9zaXRpb24odGhpcyk7CisgICAgbV9jdXJyZW50UG9zID0gcG9zaXRp
b247CisgICAgdXBkYXRlVGh1bWJQb3NpdGlvbigpOworICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09
IFRodW1iUGFydCkKKyAgICAgICAgc2V0UHJlc3NlZFBvcyhtX3ByZXNzZWRQb3MgKyB0aGVtZSgp
LT50aHVtYlBvc2l0aW9uKHRoaXMpIC0gb2xkVGh1bWJQb3NpdGlvbik7ICAgIAogfQogCiB2b2lk
IFNjcm9sbGJhcjo6c2V0UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUp
CkBAIC0xMzEsMzEgKzEzNyw2IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRTdGVwcyhpbnQgbGluZVN0
ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhlbHNQZXJTdGVwOwogfQogCi1ib29s
IFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQotewotI2lmIEhBVkUoQUNDRVNT
SUJJTElUWSkKLSAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSAm
JiBheE9iamVjdENhY2hlKCkpCi0gICAgICAgIGF4T2JqZWN0Q2FjaGUoKS0+cG9zdE5vdGlmaWNh
dGlvbihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHRoaXMpLCAwLCBBWE9iamVjdENhY2hl
OjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7Ci0jZW5kaWYKLQotICAgIC8vIElnbm9yZSBwZXJwZW5k
aWN1bGFyIHNjcm9sbHMuCi0gICAgaWYgKChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3Jv
bGxiYXIpID8gKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93
bikgOiAoZGlyZWN0aW9uID09IFNjcm9sbExlZnQgfHwgZGlyZWN0aW9uID09IFNjcm9sbFJpZ2h0
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZsb2F0IHN0ZXAgPSAwOwotICAgIHN3aXRj
aCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIFNjcm9sbEJ5TGluZTogICAgIHN0ZXAgPSBtX2xp
bmVTdGVwOyAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCeVBhZ2U6ICAgICBzdGVwID0gbV9wYWdl
U3RlcDsgIGJyZWFrOwotICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDogc3RlcCA9IG1fdG90YWxT
aXplOyBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6ICAgIHN0ZXAgPSBtX3BpeGVsU3Rl
cDsgYnJlYWs7Ci0gICAgfQotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0
aW9uID09IFNjcm9sbExlZnQpCi0gICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKLSAg
ICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+c2Nyb2xsKG1fb3JpZW50
YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQotICAgIHJldHVybiBzZXRD
dXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSkpLCAwLjBmKSwgTm90
RnJvbVNjcm9sbEFuaW1hdG9yKTsKLX0KLQogdm9pZCBTY3JvbGxiYXI6OnVwZGF0ZVRodW1iKCkK
IHsKICNpZmRlZiBUSFVNQl9QT1NJVElPTl9BRkZFQ1RTX0JVVFRPTlMKQEAgLTIxNSw3ICsxOTYs
NyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0KGRvCiAgICAgfQogCiAg
ICAgLy8gSGFuZGxlIHRoZSBhcnJvd3MgYW5kIHRyYWNrLgotICAgIGlmIChzY3JvbGwocHJlc3Nl
ZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpKSkK
KyAgICBpZiAoY2xpZW50KCktPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBw
cmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQogICAgICAgICBzdGFydFRpbWVySWZOZWVk
ZWQoZGVsYXkpOwogfQogCkBAIC0yODQsMjggKzI2NSwxNCBAQCB2b2lkIFNjcm9sbGJhcjo6bW92
ZVRodW1iKGludCBwb3MpCiAgICAgICAgIGRlbHRhID0gbWluKG1heFBvcyAtIHRodW1iUG9zLCBk
ZWx0YSk7CiAgICAgZWxzZSBpZiAoZGVsdGEgPCAwKQogICAgICAgICBkZWx0YSA9IG1heCgtdGh1
bWJQb3MsIGRlbHRhKTsKLSAgICBpZiAoZGVsdGEpCi0gICAgICAgIHNldEN1cnJlbnRQb3Moc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVu
IC0gdGh1bWJMZW4pLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotfQotCi1ib29sIFNjcm9sbGJh
cjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCi17Ci0gICAg
aWYgKChzb3VyY2UgIT0gRnJvbVNjcm9sbEFuaW1hdG9yKSAmJiBjbGllbnQoKSkKLSAgICAgICAg
Y2xpZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihtX29yaWVudGF0aW9u
LCBwb3MpOwotCi0gICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGludCBvbGRWYWx1ZSA9IHZhbHVlKCk7Ci0gICAgaW50IG9sZFRodW1iUG9z
ID0gdGhlbWUoKS0+dGh1bWJQb3NpdGlvbih0aGlzKTsKLSAgICBtX2N1cnJlbnRQb3MgPSBwb3M7
Ci0gICAgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwotICAgIGlmIChtX3ByZXNzZWRQYXJ0ID09IFRo
dW1iUGFydCkKLSAgICAgICAgc2V0UHJlc3NlZFBvcyhtX3ByZXNzZWRQb3MgKyB0aGVtZSgpLT50
aHVtYlBvc2l0aW9uKHRoaXMpIC0gb2xkVGh1bWJQb3MpOwotCi0gICAgaWYgKHZhbHVlKCkgIT0g
b2xkVmFsdWUgJiYgY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT52YWx1ZUNoYW5nZWQodGhp
cyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGRlbHRhKSB7CisgICAgICAgIGlu
dCBuZXdQb3NpdGlvbiA9IGxyb3VuZGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVs
dGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsKKyAgICAgICAgaWYgKG1f
b3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgICAgIGNsaWVudCgp
LT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRp
b24obmV3UG9zaXRpb24pOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxiYXI6OnNldEhvdmVyZWRQ
YXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKQEAgLTMzNiw5ICszMDMsMTIgQEAgdm9pZCBTY3JvbGxi
YXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhcgogYm9vbCBTY3JvbGxiYXI6Om1vdXNlTW92ZWQo
Y29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYgKG1fcHJlc3NlZFBhcnQg
PT0gVGh1bWJQYXJ0KSB7Ci0gICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFja1RvRHJh
Z09yaWdpbih0aGlzLCBldnQpKQotICAgICAgICAgICAgc2V0Q3VycmVudFBvcyhtX2RyYWdPcmln
aW4sIE5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAo
dGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkgeworICAgICAg
ICAgICAgaWYgKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAg
ICAgICAgICBjbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX2RyYWdP
cmlnaW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zY3Jv
bGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fZHJhZ09yaWdpbik7CisgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGV2dC5wb3MoKSkueCgpIDoKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNv
bnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS55KCkpOwpAQCAtNTIxLDQgKzQ5MSw0IEBAIEludFBv
aW50IFNjcm9sbGJhcjo6Y29udmVydEZyb21Db250YWluaW4KICAgICByZXR1cm4gV2lkZ2V0Ojpj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKIH0KIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHJldmlz
aW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgcHVibGljOgogICAgIC8vIE11c3QgYmUgaW1wbGVt
ZW50ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2FuJ3Qgc2ltcGx5IHVzZSB0aGUgU2Nyb2xsYmFyIGJh
c2UgY2xhc3MuICBSaWdodCBub3cgdGhlIG9ubHkgcGxhdGZvcm0gdGhhdCBpcyBub3QgdXNpbmcg
dGhlIGJhc2UgY2xhc3MgaXMgR1RLLgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGJhcj4g
Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSk7CiAKKyAg
ICAvLyBDYWxsZWQgYnkgdGhlIFNjcm9sbGJhckNsaWVudCB3aGVuIHRoZSBzY3JvbGwgb2Zmc2V0
IGNoYW5nZXMuCisgICAgdm9pZCBvZmZzZXREaWRDaGFuZ2UoKTsKKwogICAgIHN0YXRpYyBpbnQg
cGl4ZWxzUGVyTGluZVN0ZXAoKSB7IHJldHVybiA0MDsgfQogICAgIHN0YXRpYyBmbG9hdCBtaW5G
cmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSB7IHJldHVybiAwLjg3NWY7IH0KICAgICBzdGF0aWMg
aW50IG1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKTsKQEAgLTYxLDcgKzY0LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZW50YXRpb247IH0KLSAgICAKKwogICAgIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIGxyb3VuZGYobV9jdXJyZW50UG9zKTsgfQogICAgIGZsb2F0IGN1cnJlbnRQb3MoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRQb3M7IH0KICAgICBpbnQgcHJlc3NlZFBvcygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlc3NlZFBvczsgfQpAQCAtNzMsMTggKzc2LDE1IEBAIHB1YmxpYzoKICAgICBp
bnQgbGluZVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTdGVwOyB9CiAgICAgaW50IHBhZ2VT
dGVwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU3RlcDsgfQogICAgIGZsb2F0IHBpeGVsU3RlcCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxTdGVwOyB9Ci0gICAgCisKICAgICBTY3JvbGxiYXJQYXJ0
IHByZXNzZWRQYXJ0KCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUGFydDsgfQogICAgIFNjcm9s
bGJhclBhcnQgaG92ZXJlZFBhcnQoKSBjb25zdCB7IHJldHVybiBtX2hvdmVyZWRQYXJ0OyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNldEhvdmVyZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0KTsKIAogICAgIHZvaWQgc2V0U3Rl
cHMoaW50IGxpbmVTdGVwLCBpbnQgcGFnZVN0ZXAsIGludCBwaXhlbHNQZXJTdGVwID0gMSk7Ci0g
ICAgYm9vbCBzZXRWYWx1ZShpbnQsIFNjcm9sbFNvdXJjZSBzb3VyY2UpOwogICAgIHZvaWQgc2V0
UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUpOwogICAgIHZvaWQgc2V0
UHJlc3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9Ci0KLSAgICBib29sIHNjcm9s
bChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0g
MSk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xNzIsMTAgKzE3Miw4IEBAIHByb3RlY3RlZDoK
IHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSgpIGNvbnN0
OwotCi0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJj
ZSk7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZgorI2VuZGlmIC8v
IFNjcm9sbGJhcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGll
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNs
aWVudC5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogCisjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgogI2luY2x1ZGUg
IlNjcm9sbEFuaW1hdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDE0ICs0Niw2
OCBAQCBTY3JvbGxiYXJDbGllbnQ6On5TY3JvbGxiYXJDbGllbnQoKQogewogfQogCi1ib29sIFNj
cm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cikKK2Jvb2wgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlv
biwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCiB7Cisg
ICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAgU2Nyb2xsYmFyKiBzY3Jv
bGxiYXI7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Ny
b2xsRG93bikgeworICAgICAgICBvcmllbnRhdGlvbiA9IFZlcnRpY2FsU2Nyb2xsYmFyOworICAg
ICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIG9yaWVudGF0aW9uID0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICAgICAgc2Nyb2xsYmFy
ID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0KKworICAgIGlmICghc2Nyb2xsYmFyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBzdGVwID0gMDsKKyAgICBzd2l0Y2gg
KGdyYW51bGFyaXR5KSB7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6CisgICAgICAgIHN0ZXAgPSBz
Y3JvbGxiYXItPmxpbmVTdGVwKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQ
YWdlOgorICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3RlcCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6CisgICAgICAgIHN0ZXAgPSBzY3JvbGxiYXIt
PnRvdGFsU2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6Cisg
ICAgICAgIHN0ZXAgPSBzY3JvbGxiYXItPnBpeGVsU3RlcCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3Jv
bGxMZWZ0KQorICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxpZXI7CisKICAgICByZXR1cm4g
bV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwg
bXVsdGlwbGllcik7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0
IHBvcykKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRp
b24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Nyb2xsQW5pbWF0b3ItPnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworfQorCit2b2lkIFNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB4KQoreworICAg
IHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KHgsIG1fc2Nyb2xsQW5p
bWF0b3ItPmN1cnJlbnRQb3NpdGlvbigpLnkoKSkpOworfQorCit2b2lkIFNjcm9sbGJhckNsaWVu
dDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB5KQoreworICAgIHNjcm9s
bFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KG1fc2Nyb2xsQW5pbWF0b3ItPmN1
cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOworfQorCit2b2lkIFNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewotICAg
IG1fc2Nyb2xsQW5pbWF0b3ItPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihvcmll
bnRhdGlvbiwgcG9zKTsKKyAgICAvLyBUZWxsIHRoZSBkZXJpdmVkIGNsYXNzIHRvIHNjcm9sbCBp
dHMgY29udGVudHMuCisgICAgc2V0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7CisKKyAgICAvLyBUZWxs
IHRoZSBzY3JvbGxiYXJzIHRvIHVwZGF0ZSB0aGVpciB0aHVtYiBwb3N0aW9ucy4KKyAgICBpZiAo
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gdGhpcy0+aG9yaXpvbnRhbFNjcm9sbGJh
cigpKQorICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5vZmZzZXREaWRDaGFuZ2UoKTsKKyAg
ICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHRoaXMtPnZlcnRpY2FsU2Nyb2xs
YmFyKCkpCisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5vZmZzZXREaWRDaGFuZ2UoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxNCBA
QAogI2lmbmRlZiBTY3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3JvbGxiYXJDbGllbnRfaAog
Ci0jaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFz
cyBTY3JvbGxBbmltYXRvcjsKIAogY2xhc3MgU2Nyb2xsYmFyQ2xpZW50IHsKQEAgLTQwLDE4ICs0
MSwyMyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyQ2xpZW50KCk7CiAgICAgdmlydHVhbCB+U2Ny
b2xsYmFyQ2xpZW50KCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZXIpOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0
aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpOworICAgIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIgPSAxKTsKKyAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25z
dCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGZsb2F0IHgpOworICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9h
dCB4KTsKIAotICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopID0gMDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9z
aXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFy
Q29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFy
a3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBiZSBvdmVycmlkZW4gYnkgc3ViY2xhc3NlcyB0byBwZXJmb3JtIHRoZSBhY3R1YWwKKyAg
ICAvLyBzY3JvbGwgb2YgdGhlIGNvbnRlbnQuCisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldChjb25zdCBJbnRQb2ludCYpID0gMDsKKworCiAgICAgLy8gQ29udmVydCBwb2ludHMgYW5k
IHJlY3RzIGJldHdlZW4gdGhlIHNjcm9sbGJhciBhbmQgaXRzIGNvbnRhaW5pbmcgdmlldy4KICAg
ICAvLyBUaGUgY2xpZW50IG5lZWRzIHRvIGltcGxlbWVudCB0aGVzZSBpbiBvcmRlciB0byBiZSBh
d2FyZSBvZiBsYXlvdXQgZWZmZWN0cwogICAgIC8vIGxpa2UgQ1NTIHRyYW5zZm9ybXMuCkBAIC03
Miw5ICs3OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6
Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiAgICAgfQogCisgICAgdmly
dHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gMDsgfQorCiBwcml2YXRlOgorICAgIC8vIE5PVEU6IE9ubHkgY2FsbGVkIGZyb20gdGhlIFNj
cm9sbEFuaW1hdG9yLgorICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxBbmltYXRvcjsKKyAgICB2b2lk
IHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKKwogICAgIE93
blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIH07CiAKLX0KLSNlbmRpZgor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xsYmFyQ2xpZW50X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuY3BwCShyZXZp
c2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCwxMCBAQCBzdGF0aWMgdm9pZCBzY3JvbGxi
YXJFZmxFZGplTWVzc2FnZSh2b2lkCiAKICAgICBtID0gc3RhdGljX2Nhc3Q8RWRqZV9NZXNzYWdl
X0Zsb2F0Kj4obXNnKTsKICAgICB2ID0gbS0+dmFsICogKHRoYXQtPnRvdGFsU2l6ZSgpIC0gdGhh
dC0+dmlzaWJsZVNpemUoKSk7Ci0gICAgdGhhdC0+c2V0VmFsdWUodiwgU2Nyb2xsYmFyOjpOb3RG
cm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIGlmICh0aGF0LT5vcmllbnRhdGlvbiA9PSBIb3Jpem9u
dGFsU2Nyb2xsYmFyKQorICAgICAgICB0aGF0LT5jbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbih2KTsKKyAgICBlbHNlCisgICAgICAgIHRoYXQtPmNsaWVudCgpLT5zY3Jv
bGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHYpOwogfQogCiB2b2lkIFNjcm9sbGJhckVmbDo6
c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcAkocmV2aXNpb24gNzYx
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCwxMCBAQCB2b2lkIE1haW5GcmFtZVNj
cm9sbGJhckd0azo6dXBkYXRlVGh1bWJQCiAKIHZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpn
dGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIE1haW5GcmFtZVNjcm9sbGJhckd0ayogdGhh
dCkKIHsKLSAgICB0aGF0LT5zZXRWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50
X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQuZ2V0KCkpKSwgTm90RnJvbVNjcm9sbEFuaW1h
dG9yKTsKKyAgICBpZiAobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAg
ICAgICB0aGF0LT5jbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzdGF0
aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQu
Z2V0KCkpKSk7CisgICAgZWxzZQorICAgICAgICB0aGF0LT5jbGllbnQoKS0+c2Nyb2xsVG9ZT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92
YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgTWFpbkZyYW1lU2Ny
b2xsYmFyR3RrOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3Qm
IHJlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JN
YWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5p
bWF0b3JNYWMuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
YWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CiAKQEAgLTQ2LDEwICs0NSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRv
ck1hYygpOwogCiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3Jp
ZW50YXRpb24sIGZsb2F0IHBvc2l0aW9uKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogICAgIC8vIENhbGxlZCBi
eSB0aGUgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuCi0gICAgRmxvYXRQb2ludCBjdXJy
ZW50UG9zaXRpb24oKSBjb25zdDsKICAgICB2b2lkIGltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24g
NzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lmIEVOQUJMRShTTU9PVEhf
U0NST0xMSU5HKQogCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbEFu
aW1hdG9yTWFjLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCiAKQEAgLTE2MSwyMyAr
MTYyLDE3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbChTY3JvbGxiYXIKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6c2V0U2Nyb2xsUG9zaXRp
b25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9h
dCBwb3MpCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQogewogICAgIFttX3Njcm9sbEFuaW1hdGlv
bkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07Ci0gICAgU2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBv
c2l0aW9uQW5kU3RvcEFuaW1hdGlvbihvcmllbnRhdGlvbiwgcG9zKTsKLX0KLQotRmxvYXRQb2lu
dCBTY3JvbGxBbmltYXRvck1hYzo6Y3VycmVudFBvc2l0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gRmxvYXRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKTsKKyAgICBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CiAKIHZv
aWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQ
b2ludCYgbmV3UG9zaXRpb24pCiB7CiAgICAgbV9jdXJyZW50UG9zWCA9IG5ld1Bvc2l0aW9uLngo
KTsKICAgICBtX2N1cnJlbnRQb3NZID0gbmV3UG9zaXRpb24ueSgpOwotCi0gICAgbV9jbGllbnQt
PnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9j
dXJyZW50UG9zWSkpOworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBN
ZW51V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9w
dXBNZW51V2luLmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUG9wdXBNZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRv
cmNoIE1vYmlsZSBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24g
YW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKQEAgLTUzMiwxMiArNTMyLDEyIEBAIGJv
b2wgUG9wdXBNZW51V2luOjpzY3JvbGxUb1JldmVhbFNlbGVjdGkKICAgICBpbnQgaW5kZXggPSBm
b2N1c2VkSW5kZXgoKTsKIAogICAgIGlmIChpbmRleCA8IG1fc2Nyb2xsT2Zmc2V0KSB7Ci0gICAg
ICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShpbmRleCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IpOworICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhv
dXRBbmltYXRpb24oaW5kZXgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBp
ZiAoaW5kZXggPj0gbV9zY3JvbGxPZmZzZXQgKyB2aXNpYmxlSXRlbXMoKSkgewotICAgICAgICBt
X3Njcm9sbGJhci0+c2V0VmFsdWUoaW5kZXggLSB2aXNpYmxlSXRlbXMoKSArIDEsIFNjcm9sbGJh
cjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3Jv
bGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC02NzAsMjEgKzY3MCwyMyBAQCBpbnQg
UG9wdXBNZW51V2luOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yCiAgICAgcmV0dXJuICgob3JpZW50
YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpICYmIG1fc2Nyb2xsYmFyKSA/IChtX3Njcm9sbGJh
ci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12
b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQ
b2ludCYgb2Zmc2V0KQoraW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFy
KikgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxiYXIpCi0gICAgICAgIG1fc2Nyb2xsYmFyLT5z
ZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAg
cmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OworfQorCit2b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xs
T2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgc2Nyb2xsVG8ob2Zmc2V0Lnko
KSk7CiB9CiAKLXZvaWQgUG9wdXBNZW51V2luOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3Jv
bGxCYXIpCit2b2lkIFBvcHVwTWVudVdpbjo6c2Nyb2xsVG8oaW50IG9mZnNldCkKIHsKICAgICBB
U1NFUlQobV9zY3JvbGxiYXIpOwogCiAgICAgaWYgKCFtX3BvcHVwKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpbnQgb2Zmc2V0ID0gc2Nyb2xsQmFyLT52YWx1ZSgpOwotCiAgICAgaWYgKG1fc2Ny
b2xsT2Zmc2V0ID09IG9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCkBAIC05OTEsNyArOTkzLDgg
QEAgTFJFU1VMVCBQb3B1cE1lbnVXaW46OnduZFByb2MoSFdORCBoV25kLAogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc2Nyb2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwg
U2Nyb2xsQnlMaW5lLCBhYnMoaSkpOworCisgICAgICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNj
cm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDcgKzc4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFdhc0NsaWNrZWQoYm9vbCBiID0gdHJ1
ZSkgeyBtX3dhc0NsaWNrZWQgPSBiOyB9CiAgICAgYm9vbCB3YXNDbGlja2VkKCkgY29uc3QgeyBy
ZXR1cm4gbV93YXNDbGlja2VkOyB9CiAKLSAgICB2b2lkIHNldFNjcm9sbE9mZnNldChpbnQgb2Zm
c2V0KSB7IG1fc2Nyb2xsT2Zmc2V0ID0gb2Zmc2V0OyB9CiAgICAgaW50IHNjcm9sbE9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OyB9CiAKICAgICBib29sIHNjcm9sbFRvUmV2
ZWFsU2VsZWN0aW9uKCk7CkBAIC05MiwxMSArOTEsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIFNj
cm9sbEJhckNsaWVudAogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IElu
dFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9s
bGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNl
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0
aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgpOyB9CisKKyAg
ICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNl
dFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGJhckNsaWVudC4KKyAgICB2b2lkIHNjcm9sbFRvKGlu
dCBvZmZzZXQpOwogCiAgICAgdm9pZCBjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUoY29uc3QgSW50
UmVjdCYsIEZyYW1lVmlldyopOwogICAgIHZvaWQgaW52YWxpZGF0ZUl0ZW0oaW50IGluZGV4KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24g
NzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzA2LDIzICsxMzA2LDM2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9s
bEJ5UmVjdXJzaXZlbHkoaW4KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRv
T2Zmc2V0KGludCB4LCBpbnQgeSwgYm9vbCB1cGRhdGVTY3JvbGxiYXJzLCBib29sIHJlcGFpbnQp
Cit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHkpCit7CisgICAg
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQo
eCwgeSkpOworfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiB7
CiAgICAgUmVuZGVyQm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKGJveC0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFV
RUUpIHsKLSAgICAgICAgaWYgKHggPCAwKSB4ID0gMDsKLSAgICAgICAgaWYgKHkgPCAwKSB5ID0g
MDsKKyAgICAgICAgaWYgKHggPCAwKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGlmICh5
IDwgMCkKKyAgICAgICAgICAgIHkgPSAwOwogICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBzY3Jv
bGxXaWR0aC9IZWlnaHQgZnVuY3Rpb25zIHNvIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBj
b21wdXRlZCBpZiB0aGV5IG5lZWQKICAgICAgICAgLy8gdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRk
ZW4gYmxvY2tzKS4KICAgICAgICAgaW50IG1heFggPSBzY3JvbGxXaWR0aCgpIC0gYm94LT5jbGll
bnRXaWR0aCgpOworICAgICAgICBpZiAobWF4WCA8IDApCisgICAgICAgICAgICBtYXhYID0gMDsK
ICAgICAgICAgaW50IG1heFkgPSBzY3JvbGxIZWlnaHQoKSAtIGJveC0+Y2xpZW50SGVpZ2h0KCk7
Ci0gICAgICAgIAotICAgICAgICBpZiAoeCA+IG1heFgpIHggPSBtYXhYOwotICAgICAgICBpZiAo
eSA+IG1heFkpIHkgPSBtYXhZOworICAgICAgICBpZiAobWF4WSA8IDApCisgICAgICAgICAgICBt
YXhZID0gMDsKKworICAgICAgICBpZiAoeCA+IG1heFgpCisgICAgICAgICAgICB4ID0gbWF4WDsK
KyAgICAgICAgaWYgKHkgPiBtYXhZKQorICAgICAgICAgICAgeSA9IG1heFk7CiAgICAgfQogICAg
IAogICAgIC8vIEZJWE1FOiBFdmVudHVhbGx5LCB3ZSB3aWxsIHdhbnQgdG8gcGVyZm9ybSBhIGJs
aXQuICBGb3Igbm93IG5ldmVyCkBAIC0xMzg2LDE2ICsxMzk5LDkgQEAgdm9pZCBSZW5kZXJMYXll
cjo6c2Nyb2xsVG9PZmZzZXQoaW50IHgsIAogICAgIH0KIAogICAgIC8vIEp1c3Qgc2NoZWR1bGUg
YSBmdWxsIHJlcGFpbnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAodmlldyAmJiByZXBhaW50KQor
ICAgIGlmICh2aWV3KQogICAgICAgICByZW5kZXJlcigpLT5yZXBhaW50VXNpbmdDb250YWluZXIo
cmVwYWludENvbnRhaW5lciwgcmVjdEZvclJlcGFpbnQpOwogCi0gICAgaWYgKHVwZGF0ZVNjcm9s
bGJhcnMpIHsKLSAgICAgICAgaWYgKG1faEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFs
dWUoc2Nyb2xsWE9mZnNldCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci0g
ICAgICAgIGlmIChtX3ZCYXIpCi0gICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xs
WSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotICAgIH0KLQogICAgIC8vIFNj
aGVkdWxlIHRoZSBzY3JvbGwgRE9NIGV2ZW50LgogICAgIHJlbmRlcmVyKCktPm5vZGUoKS0+ZG9j
dW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlU2Nyb2xsRXZlbnQocmVuZGVyZXIoKS0+bm9k
ZSgpLCBFdmVudFF1ZXVlOjpTY3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwogfQpAQCAtMTY0OSwz
NiArMTY1NSwxOCBAQCBpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpCiAg
ICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFy
LT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9m
ZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewotICAgIGlmICht
X2hCYXIpCi0gICAgICAgIG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgU2Nyb2xsYmFyOjpG
cm9tU2Nyb2xsQW5pbWF0b3IpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0
VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIHNj
cm9sbFRvKG9mZnNldC54KCksIG9mZnNldC55KCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp2
YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24o
U2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgLy8gVXBkYXRlIHNjcm9sbCBwb3Np
dGlvbiBmcm9tIHNjcm9sbGJhcnMuCi0KLSAgICBib29sIG5lZWRVcGRhdGUgPSBmYWxzZTsKLSAg
ICBpbnQgbmV3WCA9IHNjcm9sbFhPZmZzZXQoKTsKLSAgICBpbnQgbmV3WSA9IG1fc2Nyb2xsWTsK
LSAgICAKLSAgICBpZiAobV9oQmFyKSB7Ci0gICAgICAgIG5ld1ggPSBtX2hCYXItPnZhbHVlKCk7
Ci0gICAgICAgIGlmIChuZXdYICE9IHNjcm9sbFhPZmZzZXQoKSkKLSAgICAgICAgICAgbmVlZFVw
ZGF0ZSA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBuZXdZID0g
bV92QmFyLT52YWx1ZSgpOwotICAgICAgICBpZiAobmV3WSAhPSBtX3Njcm9sbFkpCi0gICAgICAg
ICAgIG5lZWRVcGRhdGUgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChuZWVkVXBkYXRlKQotICAg
ICAgICBzY3JvbGxUb09mZnNldChuZXdYLCBuZXdZLCBmYWxzZSk7CisgICAgaWYgKHNjcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4g
c2Nyb2xsWE9mZnNldCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVy
dGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbFk7CisgICAgcmV0dXJuIDA7
CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKQEAgLTE2ODcsNyArMTY3
NSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFn
ZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAotCiBzdGF0aWMg
SW50UmVjdCBjb3JuZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgSW50UmVj
dCYgYm91bmRzKQogewogICAgIGludCBob3Jpem9udGFsVGhpY2tuZXNzOwpAQCAtMjAzMSw4ICsy
MDE4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYgogICAgIH0K
IH0KIAotdm9pZAotUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogewogICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgaWYgKCFib3gpCkBAIC0yMTI0LDI4ICsy
MTEwLDE2IEBAIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAg
ICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjpt
aW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1h
eE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOwogICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNj
cm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hCYXIt
PnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsV2lkdGgpOwotICAgICAgICAvLyBF
eHBsaWNpdGx5IHNldCB0aGUgaG9yaXpvbnRhbCBzY3JvbGwgdmFsdWUuICBUaGlzIGVuc3VyZXMg
dGhhdCB3aGVuIGEKLSAgICAgICAgLy8gcmlnaHQtdG8tbGVmdCBzY3JvbGxhYmxlIGFyZWEncyB3
aWR0aCAob3IgY29udGVudCB3aWR0aCkgY2hhbmdlcywgdGhlCi0gICAgICAgIC8vIHRvcCByaWdo
dCBjb3JuZXIgb2YgdGhlIGNvbnRlbnQgZG9lc24ndCBzaGlmdCB3aXRoIHJlc3BlY3QgdG8gdGhl
IHRvcAotICAgICAgICAvLyByaWdodCBjb3JuZXIgb2YgdGhlIGFyZWEuIENvbmNlcHR1YWxseSwg
cmlnaHQtdG8tbGVmdCBhcmVhcyBoYXZlCi0gICAgICAgIC8vIHRoZWlyIG9yaWdpbiBhdCB0aGUg
dG9wLXJpZ2h0LCBidXQgUmVuZGVyTGF5ZXIgaXMgdG9wLWxlZnQgb3JpZW50ZWQsCi0gICAgICAg
IC8vIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nLgotICAgICAg
ICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Ny
b2xsQW5pbWF0b3IpOwogICAgIH0KICAgICBpZiAobV92QmFyKSB7CiAgICAgICAgIGludCBjbGll
bnRIZWlnaHQgPSBib3gtPmNsaWVudEhlaWdodCgpOwogICAgICAgICBpbnQgcGFnZVN0ZXAgPSBt
YXgobWF4PGludD4oY2xpZW50SGVpZ2h0ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdo
ZW5QYWdpbmcoKSwgY2xpZW50SGVpZ2h0IC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBh
Z2VzKCkpLCAxKTsKICAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Bl
ckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNs
aWVudEhlaWdodCwgbV9zY3JvbGxIZWlnaHQpOwotICAgICAgICAvLyBFeHBsaWNpdGx5IHNldCB0
aGUgdmVydGljYWwgc2Nyb2xsIHZhbHVlLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhCi0gICAg
ICAgIC8vIHJpZ2h0LXRvLWxlZnQgdmVydGljYWwgd3JpdGluZy1tb2RlIHNjcm9sbGFibGUgYXJl
YSdzIGhlaWdodCAob3IgY29udGVudCBoZWlnaHQpIGNoYW5nZXMsIHRoZQotICAgICAgICAvLyBi
b3R0b20gcmlnaHQgY29ybmVyIG9mIHRoZSBjb250ZW50IGRvZXNuJ3Qgc2hpZnQgd2l0aCByZXNw
ZWN0IHRvIHRoZSBib3R0b20KLSAgICAgICAgLy8gcmlnaHQgY29ybmVyIG9mIHRoZSBhcmVhLiBD
b25jZXB0dWFsbHksIHJpZ2h0LXRvLWxlZnQgdmVydGljYWwgd3JpdGluZy1tb2RlIGFyZWFzIGhh
dmUKLSAgICAgICAgLy8gdGhlaXIgb3JpZ2luIGF0IHRoZSBib3R0b20tcmlnaHQsIGJ1dCBSZW5k
ZXJMYXllciBpcyB0b3AtbGVmdCBvcmllbnRlZCwKLSAgICAgICAgLy8gc28gdGhpcyBpcyBuZWVk
ZWQgdG8ga2VlcCBldmVyeXRoaW5nIHdvcmtpbmcuCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUo
c2Nyb2xsWU9mZnNldCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAg
fQogIAorICAgIHNjcm9sbFRvT2Zmc2V0KHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgp
KTsKKyAKICAgICBpZiAocmVuZGVyZXIoKS0+bm9kZSgpICYmIHJlbmRlcmVyKCktPmRvY3VtZW50
KCktPmhhc0xpc3RlbmVyVHlwZShEb2N1bWVudDo6T1ZFUkZMT1dDSEFOR0VEX0xJU1RFTkVSKSkK
ICAgICAgICAgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoaG9yaXpvbnRhbE92ZXJmbG93LCB2ZXJ0aWNh
bE92ZXJmbG93KTsKIH0KQEAgLTIzMDAsMTUgKzIyNzQsNyBAQCBib29sIFJlbmRlckxheWVyOjpo
aXRUZXN0T3ZlcmZsb3dDb250cm9sCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllcikKIHsKLSAgICBib29sIGRpZEhvcml6b250YWxTY3JvbGwgPSBmYWxzZTsKLSAg
ICBib29sIGRpZFZlcnRpY2FsU2Nyb2xsID0gZmFsc2U7Ci0KLSAgICBpZiAobV9oQmFyKQotICAg
ICAgICBkaWRIb3Jpem9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSwgbXVsdGlwbGllcik7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgZGlkVmVydGlj
YWxTY3JvbGwgPSBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKTsKLQotICAgIHJldHVybiAoZGlkSG9yaXpvbnRhbFNjcm9sbCB8fCBkaWRWZXJ0aWNhbFNj
cm9sbCk7CisgICAgcmV0dXJuIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3Jh
bnVsYXJpdHksIG11bHRpcGxpZXIpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFw
aGljc0NvbnRleHQqIHAsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3Ig
cGFpbnRCZWhhdmlvciwgUmVuZGVyT2JqZWN0ICpwYWludGluZ1Jvb3QpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcg
KzIzOSw3IEBAIHB1YmxpYzoKICAgICBpbnQgc2Nyb2xsWE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsWCArIG1fc2Nyb2xsT3JpZ2luLngoKTsgfQogICAgIGludCBzY3JvbGxZT2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxZICsgbV9zY3JvbGxPcmlnaW4ueSgpOyB9CiAKLSAg
ICB2b2lkIHNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQgeSwgYm9vbCB1cGRhdGVTY3JvbGxiYXJz
ID0gdHJ1ZSwgYm9vbCByZXBhaW50ID0gdHJ1ZSk7CisgICAgdm9pZCBzY3JvbGxUb09mZnNldChp
bnQgeCwgaW50IHkpOwogICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRv
T2Zmc2V0KHgsIG1fc2Nyb2xsWSArIG1fc2Nyb2xsT3JpZ2luLnkoKSk7IH0KICAgICB2b2lkIHNj
cm9sbFRvWU9mZnNldChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChtX3Njcm9sbFggKyBtX3Njcm9s
bE9yaWdpbi54KCksIHkpOyB9CiAgICAgdm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IElu
dFJlY3QmLCBib29sIHNjcm9sbFRvQW5jaG9yID0gZmFsc2UsIGNvbnN0IFNjcm9sbEFsaWdubWVu
dCYgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBjb25zdCBT
Y3JvbGxBbGlnbm1lbnQmIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5l
ZWRlZCk7CkBAIC01MTUsOCArNTE1LDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFNjcm9sbEJhckNs
aWVudCBpbnRlcmZhY2UKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zm
c2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChj
b25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJh
ciopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdDsKQEAg
LTUyNCw3ICs1MjQsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9D
b250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0Owog
ICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFy
KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgCisKKyAgICAv
LyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNj
cm9sbE9mZnNldCBmcm9tIFNjcm9sbGJhckNsaWVudC4KKyAgICB2b2lkIHNjcm9sbFRvKGludCB4
LCBpbnQgeSk7CisKICAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXIq
KSBjb25zdDsKICAgICAKICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpv
bnRhbE92ZXJmbG93LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ5NSw5ICs0OTUsNyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxlbWVu
CiAgICAgZWxzZQogICAgICAgICBuZXdPZmZzZXQgPSBpbmRleCAtIG51bVZpc2libGVJdGVtcygp
ICsgMTsKIAotICAgIG1faW5kZXhPZmZzZXQgPSBuZXdPZmZzZXQ7Ci0gICAgaWYgKG1fdkJhcikK
LSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zmc2V0LCBTY3JvbGxiYXI6Ok5vdEZy
b21TY3JvbGxBbmltYXRvcik7CisgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRX
aXRob3V0QW5pbWF0aW9uKG5ld09mZnNldCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUw
OSwxMiArNTA3LDEyIEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bGlzdEluZGV4SXNWaXNpYmxlKGkK
IAogYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwg
U2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKikK
IHsKLSAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpOworICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChk
aXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0
Qm94Ojpsb2dpY2FsU2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3Jv
bGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQogewot
ICAgIHJldHVybiBtX3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGly
ZWN0aW9uLCBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLT5pc0Zs
aXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAg
IHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rp
b24sIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCktPmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiB9CiAKIHZv
aWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKQEAgLTUz
MCwyMCArNTI4LDI0IEBAIGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKFNjcm9sbGJhck8K
ICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgJiYgbV92QmFy
KSA/IChtX3ZCYXItPnRvdGFsU2l6ZSgpIC0gbV92QmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9
CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBJbnRQb2ludCYgb2Zmc2V0KQoraW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFBvc2l0aW9uKFNj
cm9sbGJhciopIGNvbnN0CiB7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRW
YWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAgcmV0
dXJuIG1faW5kZXhPZmZzZXQ7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhciopCit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldChjb25zdCBJ
bnRQb2ludCYgb2Zmc2V0KQogewotICAgIGludCBuZXdPZmZzZXQgPSBtX3ZCYXItPnZhbHVlKCk7
Ci0gICAgaWYgKG5ld09mZnNldCAhPSBtX2luZGV4T2Zmc2V0KSB7Ci0gICAgICAgIG1faW5kZXhP
ZmZzZXQgPSBuZXdPZmZzZXQ7Ci0gICAgICAgIHJlcGFpbnQoKTsKLSAgICAgICAgbm9kZSgpLT5k
b2N1bWVudCgpLT5ldmVudFF1ZXVlKCktPmVucXVldWVTY3JvbGxFdmVudChub2RlKCksIEV2ZW50
UXVldWU6OlNjcm9sbEV2ZW50RWxlbWVudFRhcmdldCk7Ci0gICAgfQorICAgIHNjcm9sbFRvKG9m
ZnNldC55KCkpOworfQorCit2b2lkIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvKGludCBuZXdPZmZz
ZXQpCit7CisgICAgaWYgKG5ld09mZnNldCA9PSBtX2luZGV4T2Zmc2V0KQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OworICAgIHJlcGFpbnQoKTsKKyAg
ICBub2RlKCktPmRvY3VtZW50KCktPmV2ZW50UXVldWUoKS0+ZW5xdWV1ZVNjcm9sbEV2ZW50KG5v
ZGUoKSwgRXZlbnRRdWV1ZTo6U2Nyb2xsRXZlbnRFbGVtZW50VGFyZ2V0KTsKIH0KIAogaW50IFJl
bmRlckxpc3RCb3g6Oml0ZW1IZWlnaHQoKSBjb25zdApAQCAtNTg5LDkgKzU5MSw4IEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICBpbnQgaW5kZXggPSBuZXdU
b3AgLyBpdGVtSGVpZ2h0KCk7CiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBudW1JdGVt
cygpIHx8IGluZGV4ID09IG1faW5kZXhPZmZzZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lu
ZGV4T2Zmc2V0ID0gaW5kZXg7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRW
YWx1ZShpbmRleCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIAorICAg
IFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCk7
CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDgg
Kzk2LDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZhY2UuCiAg
ICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24o
Y29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwg
Ym9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8g
V2UgZG9uJ3Qgc3VwcG9ydCByZXNpemUgb24gbGlzdCBib3hlcyB5ZXQuICBJZiB3ZSBkaWQgdGhp
cyB3b3VsZCBoYXZlIHRvIGNoYW5nZS4KQEAgLTEwNSw2ICsxMDUsMTAgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNv
bnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBv
aW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIq
LCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZy
b21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBv
aW50JikgY29uc3Q7CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gbV92QmFyLmdldCgpOyB9CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNj
cm9sbGJhckNsaWVudC4KKyAgICB2b2lkIHNjcm9sbFRvKGludCBuZXdPZmZzZXQpOwogCiAgICAg
dm9pZCBzZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcik7CiAgICAgUGFz
c1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcigpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw5ICsxNzEsOSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnN0YXJ0KCkKIAogICAgIGlmICgh
bV9zdXNwZW5kZWQgJiYgIW1fc3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkp
Ci0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChtX3N0YXJ0LCAwLCBmYWxzZSwg
ZmFsc2UpOworICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQobV9zdGFydCwgMCk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KDAsIG1f
c3RhcnQsIGZhbHNlLCBmYWxzZSk7CisgICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNl
dCgwLCBtX3N0YXJ0KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3VzcGVuZGVkID0g
ZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NjIwMikKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTAxLTE5ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJM
IChPT1BTISkKKworICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsUG9zaXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0U2Nyb2xsT2Zm
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uTW91c2VXaGVlbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUb1JldmVhbFNlbGVj
dGlvbik6CisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmVydGljYWxTY3JvbGxiYXIp
OgorCiAyMDExLTAxLTE5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCB0aGUgV2ViS2l0MiBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwCShyZXZpc2lv
biA3NjE3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJv
eHlXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzksMjEgKzQzOSwyMyBAQCBpbnQgV2ViUG9w
dXBNZW51UHJveHlXaW46OnNjcm9sbFNpemUoU2NyCiAgICAgcmV0dXJuICgob3JpZW50YXRpb24g
PT0gVmVydGljYWxTY3JvbGxiYXIpICYmIG1fc2Nyb2xsYmFyKSA/IChtX3Njcm9sbGJhci0+dG90
YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFdl
YlBvcHVwTWVudVByb3h5V2luOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IElu
dFBvaW50JiBvZmZzZXQpCitpbnQgV2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFBvc2l0aW9u
KFNjcm9sbGJhciopIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYmFyKQotICAgICAgICBtX3Nj
cm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0
b3IpOworICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKK30KKwordm9pZCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit7CisgICAg
c2Nyb2xsVG8ob2Zmc2V0LnkoKSk7CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNjcm9sbEJhcikKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlX
aW46OnNjcm9sbFRvKGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsKIAog
ICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IG9mZnNldCA9IHNj
cm9sbEJhci0+dmFsdWUoKTsKLQogICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBvZmZzZXQpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNzIwLDcgKzcyMiw4IEBAIExSRVNVTFQgV2ViUG9wdXBNZW51
UHJveHlXaW46Om9uTW91c2VXaGUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgLS1pOwogICAg
IH0KLSAgICBzY3JvbGxiYXIoKS0+c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3du
LCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CisKKyAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChp
ID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkpOwogICAg
IHJldHVybiAwOwogfQogCkBAIC05MjIsMTIgKzkyNSwxMiBAQCBib29sIFdlYlBvcHVwTWVudVBy
b3h5V2luOjpzY3JvbGxUb1JldmVhCiAgICAgaW50IGluZGV4ID0gZm9jdXNlZEluZGV4KCk7CiAK
ICAgICBpZiAoaW5kZXggPCBtX3Njcm9sbE9mZnNldCkgewotICAgICAgICBtX3Njcm9sbGJhci0+
c2V0VmFsdWUoaW5kZXgsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICAg
ICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKGluZGV4ID49IG1fc2Ny
b2xsT2Zmc2V0ICsgdmlzaWJsZUl0ZW1zKCkpIHsKLSAgICAgICAgbV9zY3JvbGxiYXItPnNldFZh
bHVlKGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxB
bmltYXRvcik7CisgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihpbmRleCAtIHZpc2libGVJdGVtcygpICsgMSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1
cE1lbnVQcm94eVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93
aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDExICs2MCwxNSBAQCBwcml2YXRlOgogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50CiAg
ICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBv
c2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwgY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBXZWJDb3JlOjpTY3JvbGxiYXIqIHZlcnRp
Y2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXIuZ2V0KCk7IH0KKworICAg
IC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0
U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYmFyQ2xpZW50LgorICAgIHZvaWQgc2Nyb2xsVG8oaW50
IG9mZnNldCk7CiAKICAgICBzdGF0aWMgYm9vbCByZWdpc3RlcldpbmRvd0NsYXNzKCk7CiAgICAg
c3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgV2ViUG9wdXBNZW51UHJveHlXbmRQcm9jKEhXTkQsIFVJ
TlQsIFdQQVJBTSwgTFBBUkFNKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA3NjIwMikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTkgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAg
ICogc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxi
YXJJbXBsOjpXZWJTY3JvbGxiYXJJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFy
SW1wbDo6dmFsdWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1
ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uTW91c2VEb3duKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZU1vdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJT
Y3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxi
YXJJbXBsOjpvbktleURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpz
Y3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFNj
cm9sbE9mZnNldCk6CisgICAgICAgICogc3JjL1dlYlNjcm9sbGJhckltcGwuaDoKKwogMjAxMS0w
MS0xOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3NjE5NC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Miw2ICs2Miw3IEBAIGludCBXZWJTY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3Mo
KQogCiBXZWJTY3JvbGxiYXJJbXBsOjpXZWJTY3JvbGxiYXJJbXBsKFdlYlNjcm9sbGJhckNsaWVu
dCogY2xpZW50LCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbikKICAgICA6IG1fY2xpZW50KGNsaWVu
dCkKKyAgICAsIG1fc2Nyb2xsT2Zmc2V0KDApCiB7CiAgICAgbV9zY3JvbGxiYXIgPSBTY3JvbGxi
YXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcigKICAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFy
Q2xpZW50Kj4odGhpcyksCkBAIC04OSwxMiArOTAsMTUgQEAgdm9pZCBXZWJTY3JvbGxiYXJJbXBs
OjpzZXRMb2NhdGlvbihjb25zdAogCiBpbnQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25z
dAogewotICAgIHJldHVybiBtX3Njcm9sbGJhci0+dmFsdWUoKTsKKyAgICByZXR1cm4gbV9zY3Jv
bGxPZmZzZXQ7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUoaW50IHBvc2l0
aW9uKQogewotICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShwb3NpdGlvbiwgU2Nyb2xsYmFyOjpO
b3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJDbGll
bnQ6OnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIGVsc2UK
KyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0
QW5pbWF0aW9uKHBvc2l0aW9uKTsKIH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXREb2N1
bWVudFNpemUoaW50IHNpemUpCkBAIC0xMTIsNyArMTE2LDggQEAgdm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjpzY3JvbGwoU2Nyb2xsRGlyZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xs
UmlnaHQgOiBTY3JvbGxEb3duOwogICAgIGVsc2UKICAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/
IFNjcm9sbExlZnQgOiBTY3JvbGxVcDsKLSAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwgc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlw
bGllcik7CisKKyAgICBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXIsIHN0YXRp
Y19jYXN0PFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIG11bHRpcGxp
ZXIpOwogfQogCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFz
LCBjb25zdCBXZWJSZWN0JiByZWN0KQpAQCAtMTY3LDExICsxNzIsMTEgQEAgYm9vbCBXZWJTY3Jv
bGxiYXJJbXBsOjpvbk1vdXNlRG93bihjb25zdAogICAgIGlmICghbV9zY3JvbGxiYXItPmZyYW1l
UmVjdCgpLmNvbnRhaW5zKG1vdXNlZG93bi54LCBtb3VzZWRvd24ueSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICAgICAgbW91c2Vkb3duLnggLT0gbV9zY3JvbGxiYXItPngoKTsK
LSAgICAgICAgICAgIG1vdXNlZG93bi55IC09IG1fc2Nyb2xsYmFyLT55KCk7Ci0gICAgICAgICAg
ICBtX3Njcm9sbGJhci0+bW91c2VEb3duKFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV9zY3Jv
bGxiYXIuZ2V0KCksIG1vdXNlZG93bikpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KKyAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOworICAgIG1vdXNlZG93
bi55IC09IG1fc2Nyb2xsYmFyLT55KCk7CisgICAgbV9zY3JvbGxiYXItPm1vdXNlRG93bihQbGF0
Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZWRvd24pKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KIAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlVXAoY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7CkBAIC0xODMsMTYgKzE4OCwxNiBAQCBib29sIFdl
YlNjcm9sbGJhckltcGw6Om9uTW91c2VVcChjb25zdCBXCiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1w
bDo6b25Nb3VzZU1vdmUoY29uc3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7Ci0gICAgICAgIFdl
Yk1vdXNlRXZlbnQgbW91c2Vtb3ZlID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQq
PigmZXZlbnQpOwotICAgICAgICBpZiAobV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5z
KG1vdXNlbW92ZS54LCBtb3VzZW1vdmUueSkKLSAgICAgICAgICAgIHx8IG1fc2Nyb2xsYmFyLT5w
cmVzc2VkUGFydCgpICE9IE5vUGFydCkgewotICAgICAgICAgICAgbW91c2Vtb3ZlLnggLT0gbV9z
Y3JvbGxiYXItPngoKTsKLSAgICAgICAgICAgIG1vdXNlbW92ZS55IC09IG1fc2Nyb2xsYmFyLT55
KCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1N
b3VzZUV2ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7Ci0gICAgICAg
IH0KKyAgICBXZWJNb3VzZUV2ZW50IG1vdXNlbW92ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJN
b3VzZUV2ZW50Kj4oJmV2ZW50KTsKKyAgICBpZiAobV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNv
bnRhaW5zKG1vdXNlbW92ZS54LCBtb3VzZW1vdmUueSkKKyAgICAgICAgfHwgbV9zY3JvbGxiYXIt
PnByZXNzZWRQYXJ0KCkgIT0gTm9QYXJ0KSB7CisgICAgICAgIG1vdXNlbW92ZS54IC09IG1fc2Ny
b2xsYmFyLT54KCk7CisgICAgICAgIG1vdXNlbW92ZS55IC09IG1fc2Nyb2xsYmFyLT55KCk7Cisg
ICAgICAgIHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRC
dWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZW1vdmUpKTsKKyAgICB9CiAKLSAgICAgICAg
aWYgKG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCkKLSAgICAgICAgICAgIG1f
c2Nyb2xsYmFyLT5tb3VzZUV4aXRlZCgpOworICAgIGlmIChtX3Njcm9sbGJhci0+aG92ZXJlZFBh
cnQoKSAhPSBOb1BhcnQpCisgICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4aXRlZCgpOwogICAg
IHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjA2LDU5ICsyMTEsNTkgQEAgYm9vbCBXZWJTY3JvbGxi
YXJJbXBsOjpvbk1vdXNlTGVhdmUoY29ucwogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91
c2VXaGVlbChjb25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKIHsKLSAgICAgICAgLy8gU2FtZSBs
b2dpYyBhcyBpbiBTY3JvbGx2aWV3LmNwcC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2UnbGwg
YWNjZXB0IHRoZSBldmVudC4KLSAgICAgICAgV2ViTW91c2VXaGVlbEV2ZW50IG1vdXNld2hlZWwg
PSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsKLSAgICAg
ICAgaW50IG1heFNjcm9sbERlbHRhID0gbV9zY3JvbGxiYXItPm1heGltdW0oKSAtIG1fc2Nyb2xs
YmFyLT52YWx1ZSgpOwotICAgICAgICBmbG9hdCBkZWx0YSA9IG1fc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtb3VzZXdoZWVsLmRlbHRhWCA6IG1vdXNl
d2hlZWwuZGVsdGFZOwotICAgICAgICBpZiAoKGRlbHRhIDwgMCAmJiBtYXhTY3JvbGxEZWx0YSA+
IDApIHx8IChkZWx0YSA+IDAgJiYgbV9zY3JvbGxiYXItPnZhbHVlKCkgPiAwKSkgewotICAgICAg
ICAgICAgaWYgKG1vdXNld2hlZWwuc2Nyb2xsQnlQYWdlKSB7Ci0gICAgICAgICAgICAgICAgQVNT
RVJUKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAg
ICAgICAgICAgICAgICBib29sIG5lZ2F0aXZlID0gZGVsdGEgPCAwOwotICAgICAgICAgICAgICAg
IGRlbHRhID0gbWF4KG1heChzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxiYXItPnZpc2libGVT
aXplKCkpICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhP
dmVybGFwQmV0d2VlblBhZ2VzKCkpKSwgMS4wZik7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZ2F0
aXZlKQotICAgICAgICAgICAgICAgICAgICBkZWx0YSAqPSAtMTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gV2ViQ29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6
OlNjcm9sbFVwLCBXZWJDb3JlOjpTY3JvbGxCeVBpeGVsLCBkZWx0YSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAvLyBTYW1lIGxvZ2ljIGFzIGluIFNjcm9sbHZpZXcuY3BwLiAgSWYg
d2UgY2FuIG1vdmUgYXQgYWxsLCB3ZSdsbCBhY2NlcHQgdGhlIGV2ZW50LgorICAgIFdlYk1vdXNl
V2hlZWxFdmVudCBtb3VzZXdoZWVsID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxF
dmVudCo+KCZldmVudCk7CisgICAgaW50IG1heFNjcm9sbERlbHRhID0gbV9zY3JvbGxiYXItPm1h
eGltdW0oKSAtIG1fc2Nyb2xsYmFyLT52YWx1ZSgpOworICAgIGZsb2F0IGRlbHRhID0gbV9zY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1vdXNld2hlZWwu
ZGVsdGFYIDogbW91c2V3aGVlbC5kZWx0YVk7CisgICAgaWYgKChkZWx0YSA8IDAgJiYgbWF4U2Ny
b2xsRGVsdGEgPiAwKSB8fCAoZGVsdGEgPiAwICYmIG1fc2Nyb2xsYmFyLT52YWx1ZSgpID4gMCkp
IHsKKyAgICAgICAgaWYgKG1vdXNld2hlZWwuc2Nyb2xsQnlQYWdlKSB7CisgICAgICAgICAgICBB
U1NFUlQobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpOwor
ICAgICAgICAgICAgYm9vbCBuZWdhdGl2ZSA9IGRlbHRhIDwgMDsKKyAgICAgICAgICAgIGRlbHRh
ID0gbWF4KG1heChzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkp
ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFw
QmV0d2VlblBhZ2VzKCkpKSwgMS4wZik7CisgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAg
ICAgICAgICAgICAgZGVsdGEgKj0gLTE7CiAgICAgICAgIH0KKyAgICAgICAgV2ViQ29yZTo6U2Ny
b2xsYmFyQ2xpZW50OjpzY3JvbGwoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpID8gV2ViQ29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVw
LCBXZWJDb3JlOjpTY3JvbGxCeVBpeGVsLCBkZWx0YSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1w
bDo6b25LZXlEb3duKGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogewotICAgICAgICBXZWJL
ZXlib2FyZEV2ZW50IGtleWJvYXJkID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYktleWJvYXJkRXZl
bnQqPigmZXZlbnQpOwotICAgICAgICBpbnQga2V5Q29kZTsKLSAgICAgICAgLy8gV2UgaGF2ZSB0
byBkdXBsaWNhdGUgdGhpcyBsb2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQg
dXNlcwotICAgICAgICAvLyBDaGFyIGFuZCBSYXdLZXlEb3duIGV2ZW50cywgd2hpY2ggZG9uJ3Qg
ZXhpc3QgYXQgdGhpcyBwb2ludC4KLSAgICAgICAgaWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2Rl
ID09IFZLRVlfU1BBQ0UpCi0gICAgICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmll
cnMgJiBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsK
LSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAoa2V5Ym9hcmQubW9kaWZpZXJzID09IFdl
YklucHV0RXZlbnQ6OkNvbnRyb2xLZXkpIHsKLSAgICAgICAgICAgICAgICAvLyBNYXRjaCBGRiBi
ZWhhdmlvciBpbiB0aGUgc2Vuc2UgdGhhdCBDdHJsK2hvbWUvZW5kIGFyZSB0aGUgb25seSBDdHJs
Ci0gICAgICAgICAgICAgICAgLy8ga2V5IGNvbWJpbmF0aW9ucyB3aGljaCBhZmZlY3Qgc2Nyb2xs
aW5nLiBTYWZhcmkgaXMgYnVnZ3kgaW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gc2Vuc2UgdGhh
dCBpdCBzY3JvbGxzIHRoZSBwYWdlIGZvciBhbGwgQ3RybCtzY3JvbGxpbmcga2V5Ci0gICAgICAg
ICAgICAgICAgLy8gY29tYmluYXRpb25zLiBGb3IgZS5nLiBDdHJsK3BndXAvcGdkbi91cC9kb3du
LCBldGMuCi0gICAgICAgICAgICAgICAgc3dpdGNoIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgVktFWV9IT01FOgotICAgICAgICAgICAgICAgIGNhc2Ug
VktFWV9FTkQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgV2ViS2V5Ym9hcmRFdmVudCBrZXlib2FyZCA9ICpzdGF0aWNfY2FzdDxjb25zdCBX
ZWJLZXlib2FyZEV2ZW50Kj4oJmV2ZW50KTsKKyAgICBpbnQga2V5Q29kZTsKKyAgICAvLyBXZSBo
YXZlIHRvIGR1cGxpY2F0ZSB0aGlzIGxvZ2ljIGZyb20gV2ViVmlld0ltcGwgYmVjYXVzZSB0aGVy
ZSBpdCB1c2VzCisgICAgLy8gQ2hhciBhbmQgUmF3S2V5RG93biBldmVudHMsIHdoaWNoIGRvbid0
IGV4aXN0IGF0IHRoaXMgcG9pbnQuCisgICAgaWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09
IFZLRVlfU1BBQ0UpCisgICAgICAgIGtleUNvZGUgPSAoKGtleWJvYXJkLm1vZGlmaWVycyAmIFdl
YklucHV0RXZlbnQ6OlNoaWZ0S2V5KSA/IFZLRVlfUFJJT1IgOiBWS0VZX05FWFQpOworICAgIGVs
c2UgeworICAgICAgICBpZiAoa2V5Ym9hcmQubW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNv
bnRyb2xLZXkpIHsKKyAgICAgICAgICAgIC8vIE1hdGNoIEZGIGJlaGF2aW9yIGluIHRoZSBzZW5z
ZSB0aGF0IEN0cmwraG9tZS9lbmQgYXJlIHRoZSBvbmx5IEN0cmwKKyAgICAgICAgICAgIC8vIGtl
eSBjb21iaW5hdGlvbnMgd2hpY2ggYWZmZWN0IHNjcm9sbGluZy4gU2FmYXJpIGlzIGJ1Z2d5IGlu
IHRoZQorICAgICAgICAgICAgLy8gc2Vuc2UgdGhhdCBpdCBzY3JvbGxzIHRoZSBwYWdlIGZvciBh
bGwgQ3RybCtzY3JvbGxpbmcga2V5CisgICAgICAgICAgICAvLyBjb21iaW5hdGlvbnMuIEZvciBl
LmcuIEN0cmwrcGd1cC9wZ2RuL3VwL2Rvd24sIGV0Yy4KKyAgICAgICAgICAgIHN3aXRjaCAoa2V5
Ym9hcmQud2luZG93c0tleUNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgVktFWV9IT01FOgorICAg
ICAgICAgICAgY2FzZSBWS0VZX0VORDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQorICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAo
a2V5Ym9hcmQubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGtleWJvYXJkLmlzU3lzdGVtS2V5IHx8
IChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5k
b3dzS2V5Q29kZTsKLSAgICAgICAgfQotICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24g
c2Nyb2xsRGlyZWN0aW9uOwotICAgICAgICBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSBzY3Jv
bGxHcmFudWxhcml0eTsKLSAgICAgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Ny
b2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkpIHsKLSAg
ICAgICAgICAgIC8vIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fzbid0
IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNjcm9sbGJhci4KLSAgICAgICAgICAgIHJldHVybiBtX3Nj
cm9sbGJhci0+c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOwotICAg
ICAgICB9CisgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5Q29kZTsKKyAgICB9
CisgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBXZWJD
b3JlOjpTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKKyAgICBpZiAoV2ViVmll
d0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNj
cm9sbEdyYW51bGFyaXR5KSkgeworICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3Jv
bGwgZGlyZWN0aW9uIHdhc24ndCBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChzY3JvbGxEaXJlY3Rp
b24sIHNjcm9sbEdyYW51bGFyaXR5KTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBA
IC0yNjcsMTMgKzI3MiwxOCBAQCBpbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsU2l6ZShXZWJD
b3JlCiAgICAgcmV0dXJuIChvcmllbnRhdGlvbiA9PSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24o
KSkgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXpl
KCkpIDogMDsKIH0KIAotdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitpbnQgV2ViU2Nyb2xs
YmFySW1wbDo6c2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3QKIHsKLSAg
ICBtX3Njcm9sbGJhci0+c2V0VmFsdWUoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIFNjcm9sbGJhcjo6
RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQ7CiB9CiAKLXZv
aWQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopCit2
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgb2Zmc2V0KQogeworICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbE9mZnNldCA9IG9mZnNldC54KCk7
CisgICAgZWxzZQorICAgICAgICBtX3Njcm9sbE9mZnNldCA9IG9mZnNldC55KCk7CisKICAgICBt
X2NsaWVudC0+dmFsdWVDaGFuZ2VkKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkod29ya2luZyBjb3B5
KQpAQCAtNTgsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0
RXZlbnQoY29uc3QgV2ViSW5wdXRFdmVudCYpOwogCiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xsYmFy
Q2xpZW50IG1ldGhvZHMKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CisgICAgdmly
dHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7
CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3Jl
OjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29s
IGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNl
bnQoKSBjb25zdDsKQEAgLTc2LDYgKzc2LDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYlNjcm9sbGJh
ckNsaWVudCogbV9jbGllbnQ7CiAKKyAgICBpbnQgbV9zY3JvbGxPZmZzZXQ7CiAgICAgUmVmUHRy
PFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9zY3JvbGxiYXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZS5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYktpdC9xdC9B
cGkvcXdlYmZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3MSw3ICsxMDcxLDExIEBAIHZv
aWQgUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJWYWx1ZShRdDo6T3IKICAgICAgICAgICAgIHZhbHVl
ID0gMDsKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0
aW9uKSkKICAgICAgICAgICAgIHZhbHVlID0gc2Nyb2xsQmFyTWF4aW11bShvcmllbnRhdGlvbik7
Ci0gICAgICAgIHNiLT5zZXRWYWx1ZSh2YWx1ZSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5p
bWF0b3IpOworCisgICAgICAgIGlmIChvcmllbnRhdGlvbiA9PSBRdDo6SG9yaXpvbnRhbCkKKyAg
ICAgICAgICAgIHNiLT5jbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbih2
YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNiLT5jbGllbnQoKS0+c2Nyb2xsVG9Z
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbih2YWx1ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiA3NjIwMikKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTAxLTE5ICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIGFuZCBidWcgVVJMIChPT1BTISkKKwor
ICAgICAgICAqIFdlYlNjcm9sbEJhci5jcHA6CisgICAgICAgIChXZWJTY3JvbGxCYXI6OldlYlNj
cm9sbEJhcik6CisgICAgICAgIChXZWJTY3JvbGxCYXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdl
YlNjcm9sbEJhcjo6dmFsdWUpOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjpzY3JvbGwpOgorICAg
ICAgICAoV2ViU2Nyb2xsQmFyOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJTY3JvbGxC
YXI6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgICogV2ViU2Nyb2xsQmFyLmg6CisKIDIwMTEt
MDEtMTkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9s
bEJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNw
cAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogV2ViU2Nyb2xsQmFyOjpXZWJTY3JvbGxCYXIoKQogICAgIDogbV9yZWZDb3VudCgwKQogICAg
ICwgbV9jb250YWluaW5nV2luZG93KDApCisgICAgLCBtX2N1cnJlbnRQb3NpdGlvbigwKQogewog
ICAgIGdDbGFzc0NvdW50Kys7CiAgICAgZ0NsYXNzTmFtZUNvdW50LmFkZCgiV2ViU2Nyb2xsQmFy
Iik7CkBAIC0xNDMsNyArMTQ0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3Jv
bGxCYXI6OgogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OnNldFZhbHVl
KCAKICAgICAvKiBbaW5dICovIGludCB2YWx1ZSkKIHsKLSAgICBtX3Njcm9sbEJhci0+c2V0VmFs
dWUodmFsdWUsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBtX2N1cnJl
bnRQb3NpdGlvbiA9IHZhbHVlOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xNTIsNyArMTUz
LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OgogewogICAgIGlm
ICghdmFsdWUpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnZhbHVlID0gbV9zY3Jv
bGxCYXItPnZhbHVlKCk7CisgICAgKnZhbHVlID0gbV9jdXJyZW50UG9zaXRpb247CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKQEAgLTI0Nyw3ICsyNDgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIFdlYlNjcm9sbEJhcjo6CiB7CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHdlYkNvcmVTY3JvbGxE
aXJlY3Rpb24gPSAoU2Nyb2xsRGlyZWN0aW9uKSBkaXJlY3Rpb247CiAgICAgU2Nyb2xsR3JhbnVs
YXJpdHkgd2ViQ29yZUdyYW51bGFyaXR5ID0gKFNjcm9sbEdyYW51bGFyaXR5KSBncmFudWxhcml0
eTsKLSAgICBtX3Njcm9sbEJhci0+c2Nyb2xsKHdlYkNvcmVTY3JvbGxEaXJlY3Rpb24sIHdlYkNv
cmVHcmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwo
d2ViQ29yZVNjcm9sbERpcmVjdGlvbiwgd2ViQ29yZUdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsK
ICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMjU3LDE3ICsyNTgsMTQgQEAgaW50IFdlYlNjcm9s
bEJhcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcgogICAgIHJldHVybiAob3JpZW50YXRpb24gPT0g
bV9zY3JvbGxCYXItPm9yaWVudGF0aW9uKCkpID8gKG1fc2Nyb2xsQmFyLT50b3RhbFNpemUoKSAt
IG1fc2Nyb2xsQmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7IAogfQogCi12b2lkIFdlYlNjcm9sbEJh
cjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQor
aW50IFdlYlNjcm9sbEJhcjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QKIHsKLSAg
ICBtX3Njcm9sbEJhci0+c2V0VmFsdWUoKG1fc2Nyb2xsQmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIFNjcm9sbGJhcjo6
RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gbV9jdXJyZW50UG9zaXRpb247CiB9CiAK
LXZvaWQgV2ViU2Nyb2xsQmFyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCit2
b2lkIFdlYlNjcm9sbEJhcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQp
CiB7Ci0gICAgaWYgKG1fc2Nyb2xsQmFyICE9IHNjcm9sbEJhcikgewotICAgICAgICBBU1NFUlQo
ZmFsc2UpOyAgLy8gc2hvdWxkbid0IGhhcHBlbgotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IG1fY3VycmVudFBvc2l0aW9uID0gKG1fc2Nyb2xsQmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6
b250YWxTY3JvbGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCk7CiAgICAgbV9kZWxlZ2F0
ZS0+dmFsdWVDaGFuZ2VkKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJT
Y3JvbGxCYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIu
aAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE3LDggKzExNyw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAg
ICAvLyBTY3JvbGxiYXJDbGllbnQKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Ny
b2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9p
ZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRp
b24oU2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVj
dChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHByb3ZpZGUgYSB3YXkgdG8gc2V0IHRoaXMgdmFsdWUuCkBAIC0xMjgsNiArMTI4LDcgQEAgcHJv
dGVjdGVkOgogCiAgICAgVUxPTkcgbV9yZWZDb3VudDsKICAgICBIV05EIG1fY29udGFpbmluZ1dp
bmRvdzsKKyAgICBpbnQgbV9jdXJyZW50UG9zaXRpb247CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNj
cm9sbGJhcj4gbV9zY3JvbGxCYXI7CiAgICAgQ09NUHRyPElXZWJTY3JvbGxCYXJEZWxlZ2F0ZVBy
aXZhdGU+IG1fZGVsZWdhdGU7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79621</attachid>
            <date>2011-01-20 11:25:02 -0800</date>
            <delta_ts>2011-01-20 12:40:51 -0800</delta_ts>
            <desc>Attempt 3</desc>
            <filename>patchForBZ.diff</filename>
            <type>text/plain</type>
            <size>78268</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjAyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODIgQEAKKzIwMTEtMDEtMTkgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMh
KQorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVNjcm9sbGJhci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyOjpzZXRWYWx1ZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpzY3JvbGxUbyk6CisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6OmN1cnJlbnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbFZpZXc6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6Omhv
cml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmVydGlj
YWxTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6Om9mZnNldERpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXI6Om1vdmVUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6Om1vdXNl
TW92ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGJhci5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyOjpzZXRQcmVzc2VkUG9zKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxi
YXJDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxU
b1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNs
aWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24pOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyQ2xpZW50Ojpob3Jpem9udGFsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhckNsaWVudDo6dmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9T
Y3JvbGxBbmltYXRvck1hYy5oOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JN
YWM6OmltbWVkaWF0ZVNjcm9sbFRvUG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1
cE1lbnVXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjpzY3JvbGxUb1Jl
dmVhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2Nyb2xsVG8pOgorICAgICAgICAo
V2ViQ29yZTo6UG9wdXBNZW51V2luOjp3bmRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
UG9wdXBNZW51V2luLmg6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnZlcnRpY2Fs
U2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxheWVyOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXll
cjo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xs
SW5mb0FmdGVyTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGwp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNj
cm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RCb3g6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojpsb2dp
Y2FsU2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNjcm9sbFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUbyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxUb3ApOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp2ZXJ0
aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWFycXVlZTo6c3RhcnQpOgorCiAyMDExLTAxLTE5ICBT
aGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCByb2xsaW5nIG91dCByNzYxODcuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NjE3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtMTE0MDQsNyArMTE0MDQsNyBAQAogCQlCQ0E4Q0E1RDExRTRFNkQxMDA4MTJGQjcg
LyogQmFja0ZvcndhcmRMaXN0SW1wbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkNBOENBNUUxMUU0RTZEMTAwODEyRkI3IC8qIEJhY2tGb3J3YXJkTGlzdEltcGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E5NzkxNjEyMTVEMDU1MDA1QzQ4NUMgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQ0FBOTBDMjBBN0VC
QTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBTY3JvbGxiYXIuY3BwOyBwYXRoID0gcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcDsg
c291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQlCQ0FBOTBDMjBBN0VCQTYwMDA4QjEyMjkg
LyogU2Nyb2xsYmFyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
Y3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FDRjNCQTEwNzI5
MjFBMDBDMEM4QTMgLyogVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUNGM0JCMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29u
dGVudFVSTFBhdHRlcm4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUUxRkE1
MTI5MzlEQjcwMDRDQjAyNiAvKiBTY3JvbGxBbmltYXRvck1hYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JvbGxBbmltYXRvck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTM4NzksNyArMTM4NzksNiBAQAogCQkJCTFDRTI0Rjk2MEQ3Q0FGMEUwMDdF
MDRDMiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCiAJCQkJQkNBRTFGQTUxMjkzOURCNzAwNENC
MDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggKi8sCiAJCQkJQkM1MTE1NkQxMkIxNzQ5QzAwQzk2
NzU0IC8qIFNjcm9sbEFuaW1hdG9yTWFjLm1tICovLAotCQkJCUJDQUE5MEMyMEE3RUJBNjAwMDhC
MTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5oICovLAogCQkJCUJDRUY4NjlFMEU4NDRFOUQwMEE4NUNENSAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLywKIAkJCQk5MzUzNjc2QTA5QUVEODhCMDBEMzVDRDYg
LyogU2Nyb2xsVmlld01hYy5tbSAqLywKQEAgLTE4MjYxLDYgKzE4MjYwLDcgQEAKIAkJCQk1MTYy
QzdGMzExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCAqLywKIAkJCQlDQTNCRjY3
QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAogCQkJCUNBM0JGNjdE
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAorCQkJCUJDQUE5MEMyMEE3
RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDN0IyQUY4MDQ1MDgyNDEw
MEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKIAkJCQlCQzlCQzY0QjBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKIAkJCQlCQzlCQzY0QzBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDc2
MTc4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xs
YmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsOSArOTcsMTQgQEAgdm9pZCBBY2Nlc3NpYmls
aXR5U2Nyb2xsYmFyOjpzZXRWYWx1ZShmbAogICAgIGlmICghbV9zY3JvbGxiYXIpCiAgICAgICAg
IHJldHVybjsKICAgICAKKyAgICBpZiAoIW1fc2Nyb2xsYmFyLT5jbGllbnQoKSkKKyAgICAgICAg
cmV0dXJuOworCiAgICAgZmxvYXQgbmV3VmFsdWUgPSB2YWx1ZSAqIG1fc2Nyb2xsYmFyLT5tYXhp
bXVtKCk7Ci0gICAgCi0gICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG5ld1ZhbHVlLCBTY3JvbGxi
YXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7ICAgIAorICAgIGlmIChtX3Njcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICBtX3Njcm9sbGJhci0+
Y2xpZW50KCktPnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24obmV3VmFsdWUpOworICAg
IGVsc2UKKyAgICAgICAgbV9zY3JvbGxiYXItPmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKG5ld1ZhbHVlKTsKIH0KICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQzLDIz
ICsxOTQzLDE1IEBAIGJvb2wgRnJhbWVWaWV3Ojppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJu
IHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9CiAKLXZvaWQg
RnJhbWVWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBiYXIpCit2b2lkIEZyYW1lVmlldzo6
c2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KQogewotICAgIC8vIEZpZ3VyZSBvdXQg
aWYgd2UgcmVhbGx5IG1vdmVkLgogICAgIEludFNpemUgb2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0KCk7
Ci0gICAgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKGJhcik7CisgICAgU2Nyb2xsVmlldzo6c2Ny
b2xsVG8obmV3T2Zmc2V0KTsKICAgICBpZiAob2Zmc2V0ICE9IHNjcm9sbE9mZnNldCgpKQogICAg
ICAgICBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoKTsKICAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xp
ZW50KCktPmRpZENoYW5nZVNjcm9sbE9mZnNldCgpOwogfQogCi12b2lkIEZyYW1lVmlldzo6dmFs
dWVDaGFuZ2VkKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQotewotICAgIFNjcm9sbFZpZXc6
OnZhbHVlQ2hhbmdlZChzY3JvbGxEZWx0YSk7Ci0gICAgZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCkt
PnNlbmRTY3JvbGxFdmVudCgpOwotICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlk
Q2hhbmdlU2Nyb2xsT2Zmc2V0KCk7Ci19Ci0KIHZvaWQgRnJhbWVWaWV3OjppbnZhbGlkYXRlU2Ny
b2xsYmFyUmVjdChTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICAvLyBBZGQgaW4gb3VyIG9mZnNldCB3aXRoaW4gdGhlIEZyYW1lVmlldy4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsMTIgKzI4OCwxMiBAQCBwcml2
YXRlOgogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlldyhjb25z
dCBJbnRQb2ludCYpIGNvbnN0OwogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFjZQot
ICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0
dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21hcmtz
KFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OwogCisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvKGNv
bnN0IEludFNpemUmKTsKKwogICAgIHZvaWQgZGVmZXJyZWRSZXBhaW50VGltZXJGaXJlZChUaW1l
cjxGcmFtZVZpZXc+Kik7CiAgICAgdm9pZCBkb0RlZmVycmVkUmVwYWludHMoKTsKICAgICB2b2lk
IHVwZGF0ZURlZmVycmVkUmVwYWludERlbGF5KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgi
CiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50Lmgi
CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogCkBAIC02MSwxNiArNjIsMjcgQEAgYm9vbCBTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJhck9yaQogICAgIGlmICgqY3VycmVudFBvcyA9PSBuZXdQ
b3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAqY3VycmVudFBvcyA9IG5ld1BvczsKLSAg
ICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1cnJl
bnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsK
KwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQ
b3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24s
IGZsb2F0IHBvcykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9jdXJyZW50UG9zWCA9
IG9mZnNldC54KCk7CisgICAgbV9jdXJyZW50UG9zWSA9IG9mZnNldC55KCk7CisgICAgbm90aXR5
UG9zaXRpb25DaGFuZ2VkKCk7Cit9CisKK0Zsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCi0gICAgICAgIG1fY3VycmVudFBvc1ggPSBwb3M7Ci0gICAgZWxzZQotICAgICAg
ICBtX2N1cnJlbnRQb3NZID0gcG9zOworICAgIHJldHVybiBGbG9hdFBvaW50KG1fY3VycmVudFBv
c1gsIG1fY3VycmVudFBvc1kpOworfQorCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQb3Np
dGlvbkNoYW5nZWQoKQoreworICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgU2Nyb2xsYmFyQ2xpZW50Owog
CiBjbGFzcyBTY3JvbGxBbmltYXRvciB7CkBAIC01MCwxNiArNTEsMTggQEAgcHVibGljOgogICAg
IC8vIFRoZSBiYXNlIGNsYXNzIGltcGxlbWVudGF0aW9uIGFsd2F5cyBzY3JvbGxzIGltbWVkaWF0
ZWx5LCBuZXZlciBhbmltYXRlcy4KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9y
aWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cik7CiAKLSAgICAvLyBTdG9wcyBhbnkgYW5pbWF0aW9uIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24g
YW5kIHVwZGF0ZXMgdGhlIFNjcm9sbEFuaW1hdG9yCi0gICAgLy8gd2l0aCB0aGUgY3VycmVudCBz
Y3JvbGwgcG9zaXRpb24uICBUaGlzIGRvZXMgbm90IGNhdXNlIGEgY2FsbGJhY2sgdG8gdGhlCi0g
ICAgLy8gU2Nyb2xsYmFyQ2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlv
bkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKworICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uKCkgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKKyAgICB2b2lkIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworCiAgICAgU2Nyb2xsYmFyQ2xp
ZW50KiBtX2NsaWVudDsKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2lu
ZyBhIEZsb2F0UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9z
WTsgLy8gc3ViY2xhc3MgY29kZSBjb21wbGV4aXR5LgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotI2VuZGlmCisKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRvcl9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCShyZXZpc2lvbiA3NjE3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JX
aW4uaCIKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJDbGll
bnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
QEAgLTE3NywxNyArMTc4LDI0IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9sbChTY3Jv
bGxiYXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCit2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQogewotICAgIFBlckF4
aXNEYXRhKiBkYXRhID0gKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpID8gJm1f
aG9yaXpvbnRhbERhdGEgOiAmbV92ZXJ0aWNhbERhdGE7Ci0gICAgc3RvcEFuaW1hdGlvblRpbWVy
SWZOZWVkZWQoZGF0YSk7Ci0gICAgKmRhdGEtPm1fY3VycmVudFBvcyA9IHBvczsKLSAgICBkYXRh
LT5tX2Rlc2lyZWRQb3MgPSBwb3M7Ci0gICAgZGF0YS0+bV9jdXJyZW50VmVsb2NpdHkgPSAwOwot
ICAgIGRhdGEtPm1fZGVzaXJlZFZlbG9jaXR5ID0gMDsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJ
Zk5lZWRlZCgmbV9ob3Jpem9udGFsRGF0YSk7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZOZWVk
ZWQoJm1fdmVydGljYWxEYXRhKTsKKworICAgICptX2hvcml6b250YWxEYXRhLm1fY3VycmVudFBv
cyA9IG9mZnNldC54KCk7CisgICAgbV9ob3Jpem9udGFsRGF0YS5tX2Rlc2lyZWRQb3MgPSBvZmZz
ZXQueCgpOworICAgIG1faG9yaXpvbnRhbERhdGEubV9jdXJyZW50VmVsb2NpdHkgPSAwOworICAg
IG1faG9yaXpvbnRhbERhdGEubV9kZXNpcmVkVmVsb2NpdHkgPSAwOworCisgICAgKm1fdmVydGlj
YWxEYXRhLm1fY3VycmVudFBvcyA9IG9mZnNldC55KCk7CisgICAgbV92ZXJ0aWNhbERhdGEubV9k
ZXNpcmVkUG9zID0gb2Zmc2V0LnkoKTsKKyAgICBtX3ZlcnRpY2FsRGF0YS5tX2N1cnJlbnRWZWxv
Y2l0eSA9IDA7CisgICAgbV92ZXJ0aWNhbERhdGEubV9kZXNpcmVkVmVsb2NpdHkgPSAwOworCisg
ICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKLS8vIHN0YXRpYwogZG91YmxlIFNjcm9s
bEFuaW1hdG9yV2luOjphY2NlbGVyYXRpb25UaW1lKCkKIHsKICAgICAvLyBXZSBlbGVjdCB0byB1
c2UgU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCktPmF1dG9zY3JvbGxUaW1lckRlbGF5KCkg
YXMKQEAgLTI5Myw3ICszMDEsOCBAQCB2b2lkIFNjcm9sbEFuaW1hdG9yV2luOjphbmltYXRlU2Ny
b2xsKFBlCiAgICAgICAgIGRhdGEtPm1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KGFuaW1h
dGlvblRpbWVyRGVsYXkpOwogICAgICAgICBkYXRhLT5tX2xhc3RBbmltYXRpb25UaW1lID0gV1RG
OjpjdXJyZW50VGltZSgpOwogICAgIH0KLSAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbihJbnRQb2ludCgqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3MsICptX3Zl
cnRpY2FsRGF0YS5tX2N1cnJlbnRQb3MpKTsKKworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDQs
NyArNDQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JXaW4oKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51
bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uLCBm
bG9hdCk7CisgICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihj
b25zdCBGbG9hdFBvaW50Jik7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IFBlckF4aXNEYXRhIHsK
QEAgLTY5LDggKzY5LDggQEAgcHJpdmF0ZToKICAgICBQZXJBeGlzRGF0YSBtX3ZlcnRpY2FsRGF0
YTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShT
TU9PVEhfU0NST0xMSU5HKQogCi0jZW5kaWYKKyNlbmRpZiAvLyBTY3JvbGxBbmltYXRvcldpbl9o
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gNzYx
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIwLDI1ICszMjAsMjAgQEAgaW50IFNjcm9sbFZpZXc6OnNjcm9sbFNpemUoU2Ny
b2xsYmFyT3JpZQogICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUo
KSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFNjcm9sbFZpZXc6
OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3Zv
aWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7
Ci0gICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9ob3Jpem9udGFsU2Ny
b2xsYmFyLT5zZXRWYWx1ZShvZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRv
cik7Ci0gICAgaWYgKG1fdmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgIG1fdmVydGljYWxTY3Jv
bGxiYXItPnNldFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9y
KTsKLX0KKyAgICBpbnQgaG9yaXpvbnRhbE9mZnNldCA9IHN0ZDo6bWF4KHN0ZDo6bWluKG9mZnNl
dC54KCksIGNvbnRlbnRzV2lkdGgoKSAtIHZpc2libGVXaWR0aCgpKSwgMCk7CisgICAgaW50IHZl
cnRpY2FsT2Zmc2V0ID0gc3RkOjptYXgoc3RkOjptaW4ob2Zmc2V0LnkoKSwgY29udGVudHNIZWln
aHQoKSAtIHZpc2libGVIZWlnaHQoKSksIDApOwogCi12b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hh
bmdlZChTY3JvbGxiYXIqIHNjcm9sbGJhcikKLXsKLSAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJl
YWxseSBtb3ZlZC4KICAgICBJbnRTaXplIG5ld09mZnNldCA9IG1fc2Nyb2xsT2Zmc2V0OwotICAg
IGlmIChzY3JvbGxiYXIpIHsKLSAgICAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKHNj
cm9sbGJhci0+dmFsdWUoKSAtIG1fc2Nyb2xsT3JpZ2luLngoKSk7Ci0gICAgICAgIGVsc2UgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAg
ICAgIG5ld09mZnNldC5zZXRIZWlnaHQoc2Nyb2xsYmFyLT52YWx1ZSgpIC0gbV9zY3JvbGxPcmln
aW4ueSgpKTsKLSAgICB9CisgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGhvcml6b250YWxPZmZzZXQg
LSBtX3Njcm9sbE9yaWdpbi54KCkpOworICAgIG5ld09mZnNldC5zZXRIZWlnaHQodmVydGljYWxP
ZmZzZXQgLSBtX3Njcm9sbE9yaWdpbi55KCkpOworCisgICAgc2Nyb2xsVG8obmV3T2Zmc2V0KTsK
K30KIAordm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQp
Cit7CiAgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IG5ld09mZnNldCAtIG1fc2Nyb2xsT2Zmc2V0
OwogICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRTaXplKCkpCiAgICAgICAgIHJldHVybjsKQEAg
LTM1MSwxMyArMzQ2LDEzIEBAIHZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJh
cioKICAgICBzY3JvbGxDb250ZW50cyhzY3JvbGxEZWx0YSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmll
dzo6dmFsdWVDaGFuZ2VkKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoraW50IFNjcm9sbFZp
ZXc6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIGlm
IChzY3JvbGxiYXJzU3VwcHJlc3NlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXBhaW50
Rml4ZWRFbGVtZW50c0FmdGVyU2Nyb2xsaW5nKCk7Ci0gICAgc2Nyb2xsQ29udGVudHMoc2Nyb2xs
RGVsdGEpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikKKyAgICAgICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueCgpOworICAgIGlmIChz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCisgICAgICAgIHJl
dHVybiBzY3JvbGxQb3NpdGlvbigpLnkoKTsKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBTY3Jv
bGxWaWV3OjpzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9pbnQpCkBA
IC0zOTEsMTUgKzM4Niw4IEBAIGJvb2wgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVjdGlv
biAKIHsKICAgICBpZiAocGxhdGZvcm1XaWRnZXQoKSkKICAgICAgICAgcmV0dXJuIHBsYXRmb3Jt
U2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIAotICAgIGlmIChkaXJlY3Rpb24g
PT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIHsKLSAgICAgICAgaWYgKG1f
dmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICByZXR1cm4gbV9ob3Jpem9u
dGFsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgfQotICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXJl
Y3Rpb24sIGdyYW51bGFyaXR5KTsKIH0KIAogYm9vbCBTY3JvbGxWaWV3Ojpsb2dpY2FsU2Nyb2xs
KFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFu
dWxhcml0eSkKQEAgLTUzMCw3ICs1MTgsNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9s
bGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNl
dFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAg
ICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50V2lkdGgsIGNvbnRl
bnRzV2lkdGgoKSk7Ci0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Ny
b2xsLndpZHRoKCkgKyBtX3Njcm9sbE9yaWdpbi54KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9s
bEFuaW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAg
ICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNl
KTsgCiAgICAgfSAKQEAgLTU1Miw3ICs1MzksNiBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNj
cm9sbGJhcnMoY29uc3QgCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBw
cmVzc0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0
U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBjb250ZW50
c0hlaWdodCgpKTsKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUoc2Nyb2xs
LmhlaWdodCgpICsgbV9zY3JvbGxPcmlnaW4ueSgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxB
bmltYXRvcik7CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOwog
ICAgIH0KQEAgLTU2MiwxNSArNTQ4LDcgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxi
YXJzKGNvbnN0IAogICAgICAgICB1cGRhdGVTY3JvbGxDb3JuZXIoKTsKICAgICB9CiAKLSAgICAv
LyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBt
aWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgotICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGVk
aXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3JvbGxpbmcgdG8gcmV2ZWFs
IHNlbGVjdGlvbi4KLSAgICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiBtYXhpbWl6aW5nIGEg
d2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1heGltaXplZCByZXN1bHQK
LSAgICAvLyBkb2VzIG5vdCkuCi0gICAgSW50U2l6ZSBzY3JvbGxEZWx0YSA9IHNjcm9sbCAtIG1f
c2Nyb2xsT2Zmc2V0OwotICAgIGlmIChzY3JvbGxEZWx0YSAhPSBJbnRTaXplKCkpIHsKLSAgICAg
ICBtX3Njcm9sbE9mZnNldCA9IHNjcm9sbDsKLSAgICAgICB2YWx1ZUNoYW5nZWQoc2Nyb2xsRGVs
dGEpOwotICAgIH0KKyAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihGbG9hdFBvaW50KHNjcm9sbC53aWR0aCgpLCBzY3JvbGwuaGVpZ2h0KCkpKTsKIAog
ICAgIG1faW5VcGRhdGVTY3JvbGxiYXJzID0gZmFsc2U7CiB9CkBAIC03NTcsNiArNzM1LDcgQEAg
dm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZQogICAgIC8vIHNjcm9sbCBh
bnkgZnVydGhlci4KICAgICBmbG9hdCBkZWx0YVggPSBtX2hvcml6b250YWxTY3JvbGxiYXIgPyBl
LmRlbHRhWCgpIDogMDsKICAgICBmbG9hdCBkZWx0YVkgPSBtX3ZlcnRpY2FsU2Nyb2xsYmFyID8g
ZS5kZWx0YVkoKSA6IDA7CisgICAgCiAgICAgSW50U2l6ZSBtYXhGb3J3YXJkU2Nyb2xsRGVsdGEg
PSBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSAtIHNjcm9sbFBvc2l0aW9uKCk7CiAgICAgSW50U2l6
ZSBtYXhCYWNrd2FyZFNjcm9sbERlbHRhID0gc2Nyb2xsUG9zaXRpb24oKSAtIG1pbmltdW1TY3Jv
bGxQb3NpdGlvbigpOwogICAgIGlmICgoZGVsdGFYIDwgMCAmJiBtYXhGb3J3YXJkU2Nyb2xsRGVs
dGEud2lkdGgoKSA+IDApCkBAIC03NzMsOSArNzUyLDkgQEAgdm9pZCBTY3JvbGxWaWV3Ojp3aGVl
bEV2ZW50KFBsYXRmb3JtV2hlZQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGRlbHRhWSkKLSAg
ICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxVcCwgU2Nyb2xsQnlQ
aXhlbCwgZGVsdGFZKTsKKyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9s
bFVwLCBTY3JvbGxCeVBpeGVsLCBkZWx0YVkpOwogICAgICAgICBpZiAoZGVsdGFYKQotICAgICAg
ICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQ
aXhlbCwgZGVsdGFYKTsKKyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9s
bExlZnQsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTAgKzYwLDEy
IEBAIHB1YmxpYzoKIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBmdW5jdGlvbnMuICBGcmFtZVZp
ZXcgb3ZlcnJpZGVzIHRoZSBvdGhlcnMuCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNo
YW5nZWQoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNj
cm9sbGJhciopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3Qg
SW50UG9pbnQmKTsKICAgICAKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl
ZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGJhckNsaWVudC4K
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KTsKKwog
ICAgIC8vIFRoZSB3aW5kb3cgdGhhdHMgaG9zdHMgdGhlIFNjcm9sbFZpZXcuIFRoZSBTY3JvbGxW
aWV3IHdpbGwgY29tbXVuaWNhdGUgc2Nyb2xscyBhbmQgcmVwYWludHMgdG8gdGhlCiAgICAgLy8g
aG9zdCB3aW5kb3cgaW4gdGhlIHdpbmRvdydzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgdmlydHVh
bCBIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3QgPSAwOwpAQCAtNzgsOCArODAsOCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgLy8gSWYgdGhlIHNjcm9sbCB2aWV3IGRvZXMgbm90IHVzZSBhIG5h
dGl2ZSB3aWRnZXQsIHRoZW4gaXQgd2lsbCBoYXZlIGNyb3NzLXBsYXRmb3JtIFNjcm9sbGJhcnMu
IFRoZXNlIGZ1bmN0aW9ucwogICAgIC8vIGNhbiBiZSB1c2VkIHRvIG9idGFpbiB0aG9zZSBzY3Jv
bGxiYXJzLgotICAgIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0
dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQotICAgIFNjcm9sbGJhciogdmVydGlj
YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLmdldCgpOyB9
CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJl
dHVybiBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJh
ciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFy
LmdldCgpOyB9CiAgICAgYm9vbCBpc1Njcm9sbFZpZXdTY3JvbGxiYXIoY29uc3QgV2lkZ2V0KiBj
aGlsZCkgY29uc3QgeyByZXR1cm4gaG9yaXpvbnRhbFNjcm9sbGJhcigpID09IGNoaWxkIHx8IHZl
cnRpY2FsU2Nyb2xsYmFyKCkgPT0gY2hpbGQ7IH0KIAogICAgIC8vIEZ1bmN0aW9ucyBmb3Igc2V0
dGluZyBhbmQgcmV0cmlldmluZyB0aGUgc2Nyb2xsaW5nIG1vZGUgaW4gZWFjaCBheGlzIChob3Jp
em9udGFsL3ZlcnRpY2FsKS4gVGhlIG1vZGUgaGFzIHZhbHVlcyBvZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMyArMTA0
LDE5IEBAIFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCiAgICAgbV90aGVtZS0+dW5yZWdpc3RlclNj
cm9sbGJhcih0aGlzKTsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNldFZhbHVlKGludCB2LCBTY3Jv
bGxTb3VyY2Ugc291cmNlKQordm9pZCBTY3JvbGxiYXI6Om9mZnNldERpZENoYW5nZSgpCiB7Ci0g
ICAgdiA9IG1heChtaW4odiwgbV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSwgMCk7Ci0gICAg
aWYgKHZhbHVlKCkgPT0gdikKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPdXIgdmFsdWUgc3Rh
eWVkIHRoZSBzYW1lLgotICAgIHNldEN1cnJlbnRQb3Modiwgc291cmNlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKKyAgICBBU1NFUlQobV9jbGllbnQpOworCisgICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0
aWNfY2FzdDxmbG9hdD4obV9jbGllbnQtPnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKKyAgICBpZiAo
cG9zaXRpb24gPT0gbV9jdXJyZW50UG9zKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgb2xk
VGh1bWJQb3NpdGlvbiA9IHRoZW1lKCktPnRodW1iUG9zaXRpb24odGhpcyk7CisgICAgbV9jdXJy
ZW50UG9zID0gcG9zaXRpb247CisgICAgdXBkYXRlVGh1bWJQb3NpdGlvbigpOworICAgIGlmICht
X3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkKKyAgICAgICAgc2V0UHJlc3NlZFBvcyhtX3ByZXNz
ZWRQb3MgKyB0aGVtZSgpLT50aHVtYlBvc2l0aW9uKHRoaXMpIC0gb2xkVGh1bWJQb3NpdGlvbik7
ICAgIAogfQogCiB2b2lkIFNjcm9sbGJhcjo6c2V0UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUs
IGludCB0b3RhbFNpemUpCkBAIC0xMzEsMzEgKzEzNyw2IEBAIHZvaWQgU2Nyb2xsYmFyOjpzZXRT
dGVwcyhpbnQgbGluZVN0ZXAsIGkKICAgICBtX3BpeGVsU3RlcCA9IDEuMGYgLyBwaXhlbHNQZXJT
dGVwOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQotewot
I2lmIEhBVkUoQUNDRVNTSUJJTElUWSkKLSAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJp
bGl0eUVuYWJsZWQoKSAmJiBheE9iamVjdENhY2hlKCkpCi0gICAgICAgIGF4T2JqZWN0Q2FjaGUo
KS0+cG9zdE5vdGlmaWNhdGlvbihheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKHRoaXMpLCAw
LCBBWE9iamVjdENhY2hlOjpBWFZhbHVlQ2hhbmdlZCwgdHJ1ZSk7Ci0jZW5kaWYKLQotICAgIC8v
IElnbm9yZSBwZXJwZW5kaWN1bGFyIHNjcm9sbHMuCi0gICAgaWYgKChtX29yaWVudGF0aW9uID09
IEhvcml6b250YWxTY3JvbGxiYXIpID8gKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rp
b24gPT0gU2Nyb2xsRG93bikgOiAoZGlyZWN0aW9uID09IFNjcm9sbExlZnQgfHwgZGlyZWN0aW9u
ID09IFNjcm9sbFJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZsb2F0IHN0ZXAg
PSAwOwotICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIFNjcm9sbEJ5TGluZTog
ICAgIHN0ZXAgPSBtX2xpbmVTdGVwOyAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCeVBhZ2U6ICAg
ICBzdGVwID0gbV9wYWdlU3RlcDsgIGJyZWFrOwotICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDog
c3RlcCA9IG1fdG90YWxTaXplOyBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5UGl4ZWw6ICAgIHN0
ZXAgPSBtX3BpeGVsU3RlcDsgYnJlYWs7Ci0gICAgfQotICAgIGlmIChkaXJlY3Rpb24gPT0gU2Ny
b2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCi0gICAgICAgIG11bHRpcGxpZXIgPSAt
bXVsdGlwbGllcjsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBjbGllbnQoKS0+
c2Nyb2xsKG1fb3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKLQot
ICAgIHJldHVybiBzZXRDdXJyZW50UG9zKG1heChtaW4obV9jdXJyZW50UG9zICsgKHN0ZXAgKiBt
dWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6
ZSkpLCAwLjBmKSwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKLX0KLQogdm9pZCBTY3JvbGxiYXI6
OnVwZGF0ZVRodW1iKCkKIHsKICNpZmRlZiBUSFVNQl9QT1NJVElPTl9BRkZFQ1RTX0JVVFRPTlMK
QEAgLTIxNSw3ICsxOTYsNyBAQCB2b2lkIFNjcm9sbGJhcjo6YXV0b3Njcm9sbFByZXNzZWRQYXJ0
KGRvCiAgICAgfQogCiAgICAgLy8gSGFuZGxlIHRoZSBhcnJvd3MgYW5kIHRyYWNrLgotICAgIGlm
IChzY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxH
cmFudWxhcml0eSgpKSkKKyAgICBpZiAoY2xpZW50KCktPnNjcm9sbChwcmVzc2VkUGFydFNjcm9s
bERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQogICAgICAgICBz
dGFydFRpbWVySWZOZWVkZWQoZGVsYXkpOwogfQogCkBAIC0yODQsMjggKzI2NSwxNCBAQCB2b2lk
IFNjcm9sbGJhcjo6bW92ZVRodW1iKGludCBwb3MpCiAgICAgICAgIGRlbHRhID0gbWluKG1heFBv
cyAtIHRodW1iUG9zLCBkZWx0YSk7CiAgICAgZWxzZSBpZiAoZGVsdGEgPCAwKQogICAgICAgICBk
ZWx0YSA9IG1heCgtdGh1bWJQb3MsIGRlbHRhKTsKLSAgICBpZiAoZGVsdGEpCi0gICAgICAgIHNl
dEN1cnJlbnRQb3Moc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11
bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotfQot
Ci1ib29sIFNjcm9sbGJhcjo6c2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9sbFNvdXJjZSBz
b3VyY2UpCi17Ci0gICAgaWYgKChzb3VyY2UgIT0gRnJvbVNjcm9sbEFuaW1hdG9yKSAmJiBjbGll
bnQoKSkKLSAgICAgICAgY2xpZW50KCktPnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlv
bihtX29yaWVudGF0aW9uLCBwb3MpOwotCi0gICAgaWYgKHBvcyA9PSBtX2N1cnJlbnRQb3MpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBvbGRWYWx1ZSA9IHZhbHVlKCk7Ci0gICAg
aW50IG9sZFRodW1iUG9zID0gdGhlbWUoKS0+dGh1bWJQb3NpdGlvbih0aGlzKTsKLSAgICBtX2N1
cnJlbnRQb3MgPSBwb3M7Ci0gICAgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwotICAgIGlmIChtX3By
ZXNzZWRQYXJ0ID09IFRodW1iUGFydCkKLSAgICAgICAgc2V0UHJlc3NlZFBvcyhtX3ByZXNzZWRQ
b3MgKyB0aGVtZSgpLT50aHVtYlBvc2l0aW9uKHRoaXMpIC0gb2xkVGh1bWJQb3MpOwotCi0gICAg
aWYgKHZhbHVlKCkgIT0gb2xkVmFsdWUgJiYgY2xpZW50KCkpCi0gICAgICAgIGNsaWVudCgpLT52
YWx1ZUNoYW5nZWQodGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGRlbHRh
KSB7CisgICAgICAgIGludCBuZXdQb3NpdGlvbiA9IGxyb3VuZGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHRodW1iUG9zICsgZGVsdGEpICogbWF4aW11bSgpIC8gKHRyYWNrTGVuIC0gdGh1bWJMZW4pKTsK
KyAgICAgICAgaWYgKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAg
ICAgICAgIGNsaWVudCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0
aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xpZW50KCktPnNjcm9sbFRvWU9mZnNl
dFdpdGhvdXRBbmltYXRpb24obmV3UG9zaXRpb24pOworICAgIH0KIH0KIAogdm9pZCBTY3JvbGxi
YXI6OnNldEhvdmVyZWRQYXJ0KFNjcm9sbGJhclBhcnQgcGFydCkKQEAgLTMzNiw5ICszMDMsMTIg
QEAgdm9pZCBTY3JvbGxiYXI6OnNldFByZXNzZWRQYXJ0KFNjcm9sbGJhcgogYm9vbCBTY3JvbGxi
YXI6Om1vdXNlTW92ZWQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldnQpCiB7CiAgICAgaWYg
KG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KSB7Ci0gICAgICAgIGlmICh0aGVtZSgpLT5zaG91
bGRTbmFwQmFja1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKQotICAgICAgICAgICAgc2V0Q3VycmVu
dFBvcyhtX2RyYWdPcmlnaW4sIE5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgICAgIGVsc2Ug
eworICAgICAgICBpZiAodGhlbWUoKS0+c2hvdWxkU25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywg
ZXZ0KSkgeworICAgICAgICAgICAgaWYgKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgICAgICAgICBjbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihtX2RyYWdPcmlnaW4pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fZHJhZ09yaWdpbik7
CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1bWIobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAgICAgICAgICAgY29udmVydEZy
b21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKICAgICAgICAgICAgICAgICAgICAg
ICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS55KCkpOwpAQCAtNTIxLDQg
KzQ5MSw0IEBAIEludFBvaW50IFNjcm9sbGJhcjo6Y29udmVydEZyb21Db250YWluaW4KICAgICBy
ZXR1cm4gV2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKIH0K
IAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsYmFyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDkgQEAgcHVibGljOgogICAgIC8v
IE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2FuJ3Qgc2ltcGx5IHVzZSB0
aGUgU2Nyb2xsYmFyIGJhc2UgY2xhc3MuICBSaWdodCBub3cgdGhlIG9ubHkgcGxhdGZvcm0gdGhh
dCBpcyBub3QgdXNpbmcgdGhlIGJhc2UgY2xhc3MgaXMgR1RLLgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNjcm9sbGJhcj4gY3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCogY2xp
ZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNp
emUgc2l6ZSk7CiAKKyAgICAvLyBDYWxsZWQgYnkgdGhlIFNjcm9sbGJhckNsaWVudCB3aGVuIHRo
ZSBzY3JvbGwgb2Zmc2V0IGNoYW5nZXMuCisgICAgdm9pZCBvZmZzZXREaWRDaGFuZ2UoKTsKKwog
ICAgIHN0YXRpYyBpbnQgcGl4ZWxzUGVyTGluZVN0ZXAoKSB7IHJldHVybiA0MDsgfQogICAgIHN0
YXRpYyBmbG9hdCBtaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSB7IHJldHVybiAwLjg3NWY7
IH0KICAgICBzdGF0aWMgaW50IG1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKTsKQEAgLTYxLDcgKzY0
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KLSAgICAKKwogICAgIGludCB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIGxyb3VuZGYobV9jdXJyZW50UG9zKTsgfQogICAgIGZsb2F0IGN1
cnJlbnRQb3MoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRQb3M7IH0KICAgICBpbnQgcHJlc3Nl
ZFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc3NlZFBvczsgfQpAQCAtNzMsMTggKzc2LDE1IEBA
IHB1YmxpYzoKICAgICBpbnQgbGluZVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTdGVwOyB9
CiAgICAgaW50IHBhZ2VTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU3RlcDsgfQogICAgIGZs
b2F0IHBpeGVsU3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxTdGVwOyB9Ci0gICAgCisKICAg
ICBTY3JvbGxiYXJQYXJ0IHByZXNzZWRQYXJ0KCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUGFy
dDsgfQogICAgIFNjcm9sbGJhclBhcnQgaG92ZXJlZFBhcnQoKSBjb25zdCB7IHJldHVybiBtX2hv
dmVyZWRQYXJ0OyB9CiAgICAgdmlydHVhbCB2b2lkIHNldEhvdmVyZWRQYXJ0KFNjcm9sbGJhclBh
cnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVzc2VkUGFydChTY3JvbGxiYXJQYXJ0KTsKIAog
ICAgIHZvaWQgc2V0U3RlcHMoaW50IGxpbmVTdGVwLCBpbnQgcGFnZVN0ZXAsIGludCBwaXhlbHNQ
ZXJTdGVwID0gMSk7Ci0gICAgYm9vbCBzZXRWYWx1ZShpbnQsIFNjcm9sbFNvdXJjZSBzb3VyY2Up
OwogICAgIHZvaWQgc2V0UHJvcG9ydGlvbihpbnQgdmlzaWJsZVNpemUsIGludCB0b3RhbFNpemUp
OwogICAgIHZvaWQgc2V0UHJlc3NlZFBvcyhpbnQgcCkgeyBtX3ByZXNzZWRQb3MgPSBwOyB9Ci0K
LSAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyID0gMSk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwogCkBAIC0xNzIsMTAgKzE3Miw4
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgQVhPYmplY3RDYWNoZSogYXhPYmpl
Y3RDYWNoZSgpIGNvbnN0OwotCi0gICAgYm9vbCBzZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgU2Ny
b2xsU291cmNlIHNvdXJjZSk7CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZgorI2VuZGlmIC8vIFNjcm9sbGJhcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhckNsaWVudC5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiAr
MzEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5o
IgogCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQ0LDE0ICs0Niw2OCBAQCBTY3JvbGxiYXJDbGllbnQ6On5TY3JvbGxiYXJDbGllbnQoKQog
ewogfQogCi1ib29sIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwg
ZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsRGly
ZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11
bHRpcGxpZXIpCiB7CisgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAg
U2Nyb2xsYmFyKiBzY3JvbGxiYXI7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBk
aXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgeworICAgICAgICBvcmllbnRhdGlvbiA9IFZlcnRpY2Fs
U2Nyb2xsYmFyOworICAgICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG9yaWVudGF0aW9uID0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAg
ICAgICAgc2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOworICAgIH0KKworICAgIGlm
ICghc2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmbG9hdCBzdGVwID0g
MDsKKyAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CisgICAgY2FzZSBTY3JvbGxCeUxpbmU6Cisg
ICAgICAgIHN0ZXAgPSBzY3JvbGxiYXItPmxpbmVTdGVwKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2Nyb2xsQnlQYWdlOgorICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3RlcCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6CisgICAgICAgIHN0
ZXAgPSBzY3JvbGxiYXItPnRvdGFsU2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNj
cm9sbEJ5UGl4ZWw6CisgICAgICAgIHN0ZXAgPSBzY3JvbGxiYXItPnBpeGVsU3RlcCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRp
cmVjdGlvbiA9PSBTY3JvbGxMZWZ0KQorICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxpZXI7
CisKICAgICByZXR1cm4gbV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFu
dWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyQ2xpZW50Ojpz
ZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIGZsb2F0IHBvcykKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fc2Ny
b2xsQW5pbWF0b3ItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQpOworfQor
Cit2b2lkIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihm
bG9hdCB4KQoreworICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50
KHgsIG1fc2Nyb2xsQW5pbWF0b3ItPmN1cnJlbnRQb3NpdGlvbigpLnkoKSkpOworfQorCit2b2lk
IFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB5
KQoreworICAgIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihGbG9hdFBvaW50KG1fc2Ny
b2xsQW5pbWF0b3ItPmN1cnJlbnRQb3NpdGlvbigpLngoKSwgeSkpOworfQorCit2b2lkIFNjcm9s
bGJhckNsaWVudDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYg
b2Zmc2V0KQogewotICAgIG1fc2Nyb2xsQW5pbWF0b3ItPnNldFNjcm9sbFBvc2l0aW9uQW5kU3Rv
cEFuaW1hdGlvbihvcmllbnRhdGlvbiwgcG9zKTsKKyAgICAvLyBUZWxsIHRoZSBkZXJpdmVkIGNs
YXNzIHRvIHNjcm9sbCBpdHMgY29udGVudHMuCisgICAgc2V0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7
CisKKyAgICAvLyBUZWxsIHRoZSBzY3JvbGxiYXJzIHRvIHVwZGF0ZSB0aGVpciB0aHVtYiBwb3N0
aW9ucy4KKyAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyID0gdGhpcy0+aG9y
aXpvbnRhbFNjcm9sbGJhcigpKQorICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyLT5vZmZzZXRE
aWRDaGFuZ2UoKTsKKyAgICBpZiAoU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhciA9IHRoaXMt
PnZlcnRpY2FsU2Nyb2xsYmFyKCkpCisgICAgICAgIHZlcnRpY2FsU2Nyb2xsYmFyLT5vZmZzZXRE
aWRDaGFuZ2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDEzICsyNiwxNCBAQAogI2lmbmRlZiBTY3JvbGxiYXJDbGllbnRfaAogI2RlZmluZSBTY3Jv
bGxiYXJDbGllbnRfaAogCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBQbGF0Zm9ybVdo
ZWVsRXZlbnQ7CiBjbGFzcyBTY3JvbGxBbmltYXRvcjsKIAogY2xhc3MgU2Nyb2xsYmFyQ2xpZW50
IHsKQEAgLTQwLDE4ICs0MSwyMyBAQCBwdWJsaWM6CiAgICAgU2Nyb2xsYmFyQ2xpZW50KCk7CiAg
ICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCk7CiAKLSAgICBib29sIHNjcm9sbChTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRp
b25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9h
dCBwb3MpOworICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKKyAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7CisgICAgdm9pZCBzY3JvbGxUb1hPZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGZsb2F0IHgpOworICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihmbG9hdCB4KTsKIAotICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopID0gMDsKKyAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jikg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKLQogICAgIHZpcnR1YWwg
dm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9CiAKKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvdmVycmlkZW4gYnkgc3ViY2xhc3NlcyB0byBwZXJmb3Jt
IHRoZSBhY3R1YWwKKyAgICAvLyBzY3JvbGwgb2YgdGhlIGNvbnRlbnQuCisgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpID0gMDsKKworCiAgICAgLy8gQ29u
dmVydCBwb2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIHNjcm9sbGJhciBhbmQgaXRzIGNvbnRh
aW5pbmcgdmlldy4KICAgICAvLyBUaGUgY2xpZW50IG5lZWRzIHRvIGltcGxlbWVudCB0aGVzZSBp
biBvcmRlciB0byBiZSBhd2FyZSBvZiBsYXlvdXQgZWZmZWN0cwogICAgIC8vIGxpa2UgQ1NTIHRy
YW5zZm9ybXMuCkBAIC03Miw5ICs3OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPldpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiAg
ICAgfQogCisgICAgdmlydHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25z
dCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFy
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCiBwcml2YXRlOgorICAgIC8vIE5PVEU6IE9ubHkgY2Fs
bGVkIGZyb20gdGhlIFNjcm9sbEFuaW1hdG9yLgorICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxBbmlt
YXRvcjsKKyAgICB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmKTsKKwogICAgIE93blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIH07
CiAKLX0KLSNlbmRpZgorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2Nyb2xs
YmFyQ2xpZW50X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJF
ZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxi
YXJFZmwuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vm
bC9TY3JvbGxiYXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCwxMCBAQCBzdGF0
aWMgdm9pZCBzY3JvbGxiYXJFZmxFZGplTWVzc2FnZSh2b2lkCiAKICAgICBtID0gc3RhdGljX2Nh
c3Q8RWRqZV9NZXNzYWdlX0Zsb2F0Kj4obXNnKTsKICAgICB2ID0gbS0+dmFsICogKHRoYXQtPnRv
dGFsU2l6ZSgpIC0gdGhhdC0+dmlzaWJsZVNpemUoKSk7Ci0gICAgdGhhdC0+c2V0VmFsdWUodiwg
U2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIGlmICh0aGF0LT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHRoYXQtPmNsaWVudCgpLT5z
Y3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHYpOworICAgIGVsc2UKKyAgICAgICAgdGhh
dC0+Y2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24odik7CiB9CiAKIHZv
aWQgU2Nyb2xsYmFyRWZsOjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogdmlldykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsu
Y3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9NYWlu
RnJhbWVTY3JvbGxiYXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKICNpbmNs
dWRlIDxndGsvZ3RrLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMTA4LDcgKzEw
OSwxMCBAQCB2b2lkIE1haW5GcmFtZVNjcm9sbGJhckd0azo6dXBkYXRlVGh1bWJQCiAKIHZvaWQg
TWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIE1h
aW5GcmFtZVNjcm9sbGJhckd0ayogdGhhdCkKIHsKLSAgICB0aGF0LT5zZXRWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQuZ2V0
KCkpKSwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBpZiAobV9vcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICB0aGF0LT5jbGllbnQoKS0+c2Nyb2xsVG9YT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92
YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQuZ2V0KCkpKSk7CisgICAgZWxzZQorICAgICAgICB0aGF0
LT5jbGllbnQoKS0+c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihzdGF0aWNfY2FzdDxp
bnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQuZ2V0KCkpKSk7
CiB9CiAKIHZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpwYWludChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkocmV2aXNpb24gNzYxNzgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAK
LSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKICNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTQ2LDEwICs0NSw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck1hYygpOwogCiAgICAgdmlydHVhbCBib29sIHNjcm9s
bChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0
b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0IHBvc2l0aW9uKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9p
bnQmKTsKIAogICAgIC8vIENhbGxlZCBieSB0aGUgU2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGUuCi0gICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKICAgICB2b2lkIGlt
bWVkaWF0ZVNjcm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pOwogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5tbQkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcg
QEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5HKQogCisjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yTWFjLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
Q2xpZW50LmgiCiAKQEAgLTE2MSwyMyArMTYyLDE3IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3JNYWM6
OnNjcm9sbChTY3JvbGxiYXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmlt
YXRvck1hYzo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBwb3MpCit2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQog
ewogICAgIFttX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5nZXQoKSBfc3RvcFJ1bl07Ci0gICAgU2Ny
b2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihvcmllbnRhdGlv
biwgcG9zKTsKLX0KLQotRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvck1hYzo6Y3VycmVudFBvc2l0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gRmxvYXRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1
cnJlbnRQb3NZKTsKKyAgICBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5p
bWF0aW9uKG9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OmltbWVkaWF0ZVNj
cm9sbFRvUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgbmV3UG9zaXRpb24pCiB7CiAgICAgbV9jdXJy
ZW50UG9zWCA9IG5ld1Bvc2l0aW9uLngoKTsKICAgICBtX2N1cnJlbnRQb3NZID0gbmV3UG9zaXRp
b24ueSgpOwotCi0gICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50
UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOworICAgIG5vdGl0eVBvc2l0aW9u
Q2hhbmdlZCgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJT
Y3JvbGxiYXJDbGllbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogCiAjaW5jbHVk
ZSA8UUFwcGxpY2F0aW9uPgpAQCAtNzYsMTcgKzc3LDE3IEBAIGJvb2wgU2Nyb2xsYmFyOjpjb250
ZXh0TWVudShjb25zdCBQbGF0Zm8KICAgICAgICAgY29uc3QgUVBvaW50IHBvcyA9IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1dpbmRvdyhldmVudC5wb3MoKSk7CiAgICAgICAgIG1vdmVUaHVtYihob3Jp
em9udGFsID8gcG9zLngoKSA6IHBvcy55KCkpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uU2VsZWN0
ZWQgPT0gYWN0U2Nyb2xsVG9wKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExl
ZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVudCk7CisgICAgICAgIGNsaWVudCgpLT5zY3Jv
bGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlEb2N1bWVudCk7
CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsQm90dG9tKQotICAgICAg
ICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlE
b2N1bWVudCk7CisgICAgICAgIGNsaWVudCgpLT5zY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJp
Z2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlEb2N1bWVudCk7CiAgICAgZWxzZSBpZiAoYWN0aW9u
U2VsZWN0ZWQgPT0gYWN0UGFnZVVwKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9s
bExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlKTsKKyAgICAgICAgY2xpZW50KCktPnNjcm9s
bChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOwogICAg
IGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQotICAgICAgICBzY3JvbGwo
aG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlQYWdlKTsKKyAg
ICAgICAgY2xpZW50KCktPnNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxE
b3duLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNj
cm9sbFVwKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxV
cCwgU2Nyb2xsQnlMaW5lKTsKKyAgICAgICAgY2xpZW50KCktPnNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeUxpbmUpOwogICAgIGVsc2UgaWYgKGFjdGlv
blNlbGVjdGVkID09IGFjdFNjcm9sbERvd24pCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUpOworICAgICAgICBjbGllbnQo
KS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5
TGluZSk7CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShy
ZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVG9yY2ggTW9iaWxlIEluYy4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykuCiAgKgpAQCAtNTMyLDEyICs1MzIsMTIgQEAgYm9vbCBQb3B1cE1lbnVXaW46
OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aQogICAgIGludCBpbmRleCA9IGZvY3VzZWRJbmRleCgpOwog
CiAgICAgaWYgKGluZGV4IDwgbV9zY3JvbGxPZmZzZXQpIHsKLSAgICAgICAgbV9zY3JvbGxiYXIt
PnNldFZhbHVlKGluZGV4LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAg
ICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRl
eCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChpbmRleCA+PSBtX3Nj
cm9sbE9mZnNldCArIHZpc2libGVJdGVtcygpKSB7Ci0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRW
YWx1ZShpbmRleCAtIHZpc2libGVJdGVtcygpICsgMSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IpOworICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhv
dXRBbmltYXRpb24oaW5kZXggLSB2aXNpYmxlSXRlbXMoKSArIDEpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTY3MCwyMSArNjcwLDIzIEBAIGludCBQb3B1cE1lbnVXaW46OnNj
cm9sbFNpemUoU2Nyb2xsYmFyT3IKICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAt
IG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgUG9wdXBNZW51V2lu
OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCitp
bnQgUG9wdXBNZW51V2luOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdAogewotICAg
IGlmIChtX3Njcm9sbGJhcikKLSAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC55
KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gbV9zY3JvbGxP
ZmZzZXQ7Cit9CisKK3ZvaWQgUG9wdXBNZW51V2luOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50
UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxUbyhvZmZzZXQueSgpKTsKIH0KIAotdm9pZCBQ
b3B1cE1lbnVXaW46OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNjcm9sbEJhcikKK3ZvaWQgUG9w
dXBNZW51V2luOjpzY3JvbGxUbyhpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVChtX3Njcm9sbGJh
cik7CiAKICAgICBpZiAoIW1fcG9wdXApCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBvZmZz
ZXQgPSBzY3JvbGxCYXItPnZhbHVlKCk7Ci0KICAgICBpZiAobV9zY3JvbGxPZmZzZXQgPT0gb2Zm
c2V0KQogICAgICAgICByZXR1cm47CiAKQEAgLTk5MSw3ICs5OTMsOCBAQCBMUkVTVUxUIFBvcHVw
TWVudVdpbjo6d25kUHJvYyhIV05EIGhXbmQsCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzY3JvbGxiYXIo
KS0+c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFi
cyhpKSk7CisKKyAgICAgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAwID8gU2Ny
b2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9w
dXBNZW51V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0V2FzQ2xpY2tlZChib29sIGIgPSB0cnVlKSB7IG1fd2FzQ2xpY2tl
ZCA9IGI7IH0KICAgICBib29sIHdhc0NsaWNrZWQoKSBjb25zdCB7IHJldHVybiBtX3dhc0NsaWNr
ZWQ7IH0KIAotICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGludCBvZmZzZXQpIHsgbV9zY3JvbGxP
ZmZzZXQgPSBvZmZzZXQ7IH0KICAgICBpbnQgc2Nyb2xsT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxPZmZzZXQ7IH0KIAogICAgIGJvb2wgc2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24oKTsK
QEAgLTkyLDExICs5MSwxNSBAQCBwcml2YXRlOgogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50CiAg
ICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
bikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24o
Y29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJh
ciopOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0Owor
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50
UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JvbGxiYXIuZ2V0KCk7IH0KKworICAgIC8vIE5PVEU6IFRoaXMg
c2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZy
b20gU2Nyb2xsYmFyQ2xpZW50LgorICAgIHZvaWQgc2Nyb2xsVG8oaW50IG9mZnNldCk7CiAKICAg
ICB2b2lkIGNhbGN1bGF0ZVBvc2l0aW9uQW5kU2l6ZShjb25zdCBJbnRSZWN0JiwgRnJhbWVWaWV3
Kik7CiAgICAgdm9pZCBpbnZhbGlkYXRlSXRlbShpbnQgaW5kZXgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
MDYsMjMgKzEzMDYsMzYgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsQnlSZWN1cnNpdmVseShp
bgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoaW50IHgsIGlu
dCB5LCBib29sIHVwZGF0ZVNjcm9sbGJhcnMsIGJvb2wgcmVwYWludCkKK3ZvaWQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQgeSkKK3sKKyAgICBTY3JvbGxiYXJDbGllbnQ6
OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihJbnRQb2ludCh4LCB5KSk7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvKGludCB4LCBpbnQgeSkKIHsKICAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwogICAgIGlmICghYm94KQogICAgICAgICByZXR1cm47CiAKICAg
ICBpZiAoYm94LT5zdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPTUFSUVVFRSkgewotICAgICAgICBp
ZiAoeCA8IDApIHggPSAwOwotICAgICAgICBpZiAoeSA8IDApIHkgPSAwOworICAgICAgICBpZiAo
eCA8IDApCisgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgaWYgKHkgPCAwKQorICAgICAgICAg
ICAgeSA9IDA7CiAgICAgCiAgICAgICAgIC8vIENhbGwgdGhlIHNjcm9sbFdpZHRoL0hlaWdodCBm
dW5jdGlvbnMgc28gdGhhdCB0aGUgZGltZW5zaW9ucyB3aWxsIGJlIGNvbXB1dGVkIGlmIHRoZXkg
bmVlZAogICAgICAgICAvLyB0byBiZSAoZm9yIG92ZXJmbG93OmhpZGRlbiBibG9ja3MpLgogICAg
ICAgICBpbnQgbWF4WCA9IHNjcm9sbFdpZHRoKCkgLSBib3gtPmNsaWVudFdpZHRoKCk7CisgICAg
ICAgIGlmIChtYXhYIDwgMCkKKyAgICAgICAgICAgIG1heFggPSAwOwogICAgICAgICBpbnQgbWF4
WSA9IHNjcm9sbEhlaWdodCgpIC0gYm94LT5jbGllbnRIZWlnaHQoKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmICh4ID4gbWF4WCkgeCA9IG1heFg7Ci0gICAgICAgIGlmICh5ID4gbWF4WSkgeSA9IG1h
eFk7CisgICAgICAgIGlmIChtYXhZIDwgMCkKKyAgICAgICAgICAgIG1heFkgPSAwOworCisgICAg
ICAgIGlmICh4ID4gbWF4WCkKKyAgICAgICAgICAgIHggPSBtYXhYOworICAgICAgICBpZiAoeSA+
IG1heFkpCisgICAgICAgICAgICB5ID0gbWF4WTsKICAgICB9CiAgICAgCiAgICAgLy8gRklYTUU6
IEV2ZW50dWFsbHksIHdlIHdpbGwgd2FudCB0byBwZXJmb3JtIGEgYmxpdC4gIEZvciBub3cgbmV2
ZXIKQEAgLTEzODYsMTYgKzEzOTksOSBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNl
dChpbnQgeCwgCiAgICAgfQogCiAgICAgLy8gSnVzdCBzY2hlZHVsZSBhIGZ1bGwgcmVwYWludCBv
ZiBvdXIgb2JqZWN0LgotICAgIGlmICh2aWV3ICYmIHJlcGFpbnQpCisgICAgaWYgKHZpZXcpCiAg
ICAgICAgIHJlbmRlcmVyKCktPnJlcGFpbnRVc2luZ0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVy
LCByZWN0Rm9yUmVwYWludCk7CiAKLSAgICBpZiAodXBkYXRlU2Nyb2xsYmFycykgewotICAgICAg
ICBpZiAobV9oQmFyKQotICAgICAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0
KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKLSAgICAgICAgaWYgKG1fdkJh
cikKLSAgICAgICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9zY3JvbGxZLCBTY3JvbGxiYXI6Ok5v
dEZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgfQotCiAgICAgLy8gU2NoZWR1bGUgdGhlIHNjcm9s
bCBET00gZXZlbnQuCiAgICAgcmVuZGVyZXIoKS0+bm9kZSgpLT5kb2N1bWVudCgpLT5ldmVudFF1
ZXVlKCktPmVucXVldWVTY3JvbGxFdmVudChyZW5kZXJlcigpLT5ub2RlKCksIEV2ZW50UXVldWU6
OlNjcm9sbEV2ZW50RWxlbWVudFRhcmdldCk7CiB9CkBAIC0xNjQ5LDM2ICsxNjU1LDE4IEBAIGlu
dCBSZW5kZXJMYXllcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmkKICAgICByZXR1cm4gc2Nyb2xs
YmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkgLSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkp
IDogMDsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQordm9pZCBSZW5kZXJMYXllcjo6c2V0U2Nyb2xsT2Zm
c2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgaWYgKG1faEJhcikKLSAgICAgICAg
bV9oQmFyLT5zZXRWYWx1ZShvZmZzZXQueCgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRv
cik7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQueSgp
LCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAgc2Nyb2xsVG8ob2Zmc2V0Lngo
KSwgb2Zmc2V0LnkoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqKQoraW50IFJlbmRlckxheWVyOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9s
bGJhcikgY29uc3QKIHsKLSAgICAvLyBVcGRhdGUgc2Nyb2xsIHBvc2l0aW9uIGZyb20gc2Nyb2xs
YmFycy4KLQotICAgIGJvb2wgbmVlZFVwZGF0ZSA9IGZhbHNlOwotICAgIGludCBuZXdYID0gc2Ny
b2xsWE9mZnNldCgpOwotICAgIGludCBuZXdZID0gbV9zY3JvbGxZOwotICAgIAotICAgIGlmICht
X2hCYXIpIHsKLSAgICAgICAgbmV3WCA9IG1faEJhci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKG5l
d1ggIT0gc2Nyb2xsWE9mZnNldCgpKQotICAgICAgICAgICBuZWVkVXBkYXRlID0gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICBpZiAobV92QmFyKSB7Ci0gICAgICAgIG5ld1kgPSBtX3ZCYXItPnZhbHVlKCk7
Ci0gICAgICAgIGlmIChuZXdZICE9IG1fc2Nyb2xsWSkKLSAgICAgICAgICAgbmVlZFVwZGF0ZSA9
IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRVcGRhdGUpCi0gICAgICAgIHNjcm9sbFRvT2Zm
c2V0KG5ld1gsIG5ld1ksIGZhbHNlKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBzY3JvbGxYT2Zmc2V0KCk7
CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikK
KyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsWTsKKyAgICByZXR1cm4gMDsKIH0KIAogYm9vbCBSZW5k
ZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdApAQCAtMTY4Nyw3ICsxNjc1LDYgQEAgYm9vbCBSZW5k
ZXJMYXllcjo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwogfQogCi0KIHN0YXRpYyBJbnRSZWN0IGNvcm5lclJl
Y3QoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyLCBjb25zdCBJbnRSZWN0JiBib3VuZHMpCiB7CiAg
ICAgaW50IGhvcml6b250YWxUaGlja25lc3M7CkBAIC0yMDMxLDggKzIwMTgsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVPdmVyZmxvd1N0YXR1cyhiCiAgICAgfQogfQogCi12b2lkCi1SZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKK3ZvaWQgUmVuZGVyTGF5ZXI6
OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCiB7CiAgICAgUmVuZGVyQm94KiBib3ggPSBy
ZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKQEAgLTIxMjQsMjggKzIxMTAsMTYgQEAgUmVuZGVy
TGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dAogICAgICAgICBpbnQgcGFnZVN0ZXAg
PSBtYXgobWF4PGludD4oY2xpZW50V2lkdGggKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVw
V2hlblBhZ2luZygpLCBjbGllbnRXaWR0aCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5Q
YWdlcygpKSwgMSk7CiAgICAgICAgIG1faEJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQ
ZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faEJhci0+c2V0UHJvcG9ydGlvbihj
bGllbnRXaWR0aCwgbV9zY3JvbGxXaWR0aCk7Ci0gICAgICAgIC8vIEV4cGxpY2l0bHkgc2V0IHRo
ZSBob3Jpem9udGFsIHNjcm9sbCB2YWx1ZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYQotICAg
ICAgICAvLyByaWdodC10by1sZWZ0IHNjcm9sbGFibGUgYXJlYSdzIHdpZHRoIChvciBjb250ZW50
IHdpZHRoKSBjaGFuZ2VzLCB0aGUKLSAgICAgICAgLy8gdG9wIHJpZ2h0IGNvcm5lciBvZiB0aGUg
Y29udGVudCBkb2Vzbid0IHNoaWZ0IHdpdGggcmVzcGVjdCB0byB0aGUgdG9wCi0gICAgICAgIC8v
IHJpZ2h0IGNvcm5lciBvZiB0aGUgYXJlYS4gQ29uY2VwdHVhbGx5LCByaWdodC10by1sZWZ0IGFy
ZWFzIGhhdmUKLSAgICAgICAgLy8gdGhlaXIgb3JpZ2luIGF0IHRoZSB0b3AtcmlnaHQsIGJ1dCBS
ZW5kZXJMYXllciBpcyB0b3AtbGVmdCBvcmllbnRlZCwKLSAgICAgICAgLy8gc28gdGhpcyBpcyBu
ZWVkZWQgdG8ga2VlcCBldmVyeXRoaW5nIHdvcmtpbmcuCi0gICAgICAgIG1faEJhci0+c2V0VmFs
dWUoc2Nyb2xsWE9mZnNldCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAg
ICAgfQogICAgIGlmIChtX3ZCYXIpIHsKICAgICAgICAgaW50IGNsaWVudEhlaWdodCA9IGJveC0+
Y2xpZW50SGVpZ2h0KCk7CiAgICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGll
bnRIZWlnaHQgKiBTY3JvbGxiYXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBjbGll
bnRIZWlnaHQgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSksIDEpOwogICAg
ICAgICBtX3ZCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFn
ZVN0ZXApOwogICAgICAgICBtX3ZCYXItPnNldFByb3BvcnRpb24oY2xpZW50SGVpZ2h0LCBtX3Nj
cm9sbEhlaWdodCk7Ci0gICAgICAgIC8vIEV4cGxpY2l0bHkgc2V0IHRoZSB2ZXJ0aWNhbCBzY3Jv
bGwgdmFsdWUuICBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGEKLSAgICAgICAgLy8gcmlnaHQtdG8t
bGVmdCB2ZXJ0aWNhbCB3cml0aW5nLW1vZGUgc2Nyb2xsYWJsZSBhcmVhJ3MgaGVpZ2h0IChvciBj
b250ZW50IGhlaWdodCkgY2hhbmdlcywgdGhlCi0gICAgICAgIC8vIGJvdHRvbSByaWdodCBjb3Ju
ZXIgb2YgdGhlIGNvbnRlbnQgZG9lc24ndCBzaGlmdCB3aXRoIHJlc3BlY3QgdG8gdGhlIGJvdHRv
bQotICAgICAgICAvLyByaWdodCBjb3JuZXIgb2YgdGhlIGFyZWEuIENvbmNlcHR1YWxseSwgcmln
aHQtdG8tbGVmdCB2ZXJ0aWNhbCB3cml0aW5nLW1vZGUgYXJlYXMgaGF2ZQotICAgICAgICAvLyB0
aGVpciBvcmlnaW4gYXQgdGhlIGJvdHRvbS1yaWdodCwgYnV0IFJlbmRlckxheWVyIGlzIHRvcC1s
ZWZ0IG9yaWVudGVkLAotICAgICAgICAvLyBzbyB0aGlzIGlzIG5lZWRlZCB0byBrZWVwIGV2ZXJ5
dGhpbmcgd29ya2luZy4KLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShzY3JvbGxZT2Zmc2V0KCks
IFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICB9CiAgCisgICAgc2Nyb2xs
VG9PZmZzZXQoc2Nyb2xsWE9mZnNldCgpLCBzY3JvbGxZT2Zmc2V0KCkpOworIAogICAgIGlmIChy
ZW5kZXJlcigpLT5ub2RlKCkgJiYgcmVuZGVyZXIoKS0+ZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJU
eXBlKERvY3VtZW50OjpPVkVSRkxPV0NIQU5HRURfTElTVEVORVIpKQogICAgICAgICB1cGRhdGVP
dmVyZmxvd1N0YXR1cyhob3Jpem9udGFsT3ZlcmZsb3csIHZlcnRpY2FsT3ZlcmZsb3cpOwogfQpA
QCAtMjMwMCwxNSArMjI3NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0Nv
bnRyb2wKIAogYm9vbCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rp
b24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQogewot
ICAgIGJvb2wgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IGZhbHNlOwotICAgIGJvb2wgZGlkVmVydGlj
YWxTY3JvbGwgPSBmYWxzZTsKLQotICAgIGlmIChtX2hCYXIpCi0gICAgICAgIGRpZEhvcml6b250
YWxTY3JvbGwgPSBtX2hCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBs
aWVyKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBkaWRWZXJ0aWNhbFNjcm9sbCA9IG1fdkJh
ci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwotCi0gICAgcmV0
dXJuIChkaWRIb3Jpem9udGFsU2Nyb2xsIHx8IGRpZFZlcnRpY2FsU2Nyb2xsKTsKKyAgICByZXR1
cm4gU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlw
bGllcik7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogcCwg
Y29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCwgUGFpbnRCZWhhdmlvciBwYWludEJlaGF2aW9yLCBS
ZW5kZXJPYmplY3QgKnBhaW50aW5nUm9vdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNyArMjM5LDcgQEAgcHVibGlj
OgogICAgIGludCBzY3JvbGxYT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxYICsgbV9z
Y3JvbGxPcmlnaW4ueCgpOyB9CiAgICAgaW50IHNjcm9sbFlPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX3Njcm9sbFkgKyBtX3Njcm9sbE9yaWdpbi55KCk7IH0KIAotICAgIHZvaWQgc2Nyb2xsVG9P
ZmZzZXQoaW50IHgsIGludCB5LCBib29sIHVwZGF0ZVNjcm9sbGJhcnMgPSB0cnVlLCBib29sIHJl
cGFpbnQgPSB0cnVlKTsKKyAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQgeSk7CiAg
ICAgdm9pZCBzY3JvbGxUb1hPZmZzZXQoaW50IHgpIHsgc2Nyb2xsVG9PZmZzZXQoeCwgbV9zY3Jv
bGxZICsgbV9zY3JvbGxPcmlnaW4ueSgpKTsgfQogICAgIHZvaWQgc2Nyb2xsVG9ZT2Zmc2V0KGlu
dCB5KSB7IHNjcm9sbFRvT2Zmc2V0KG1fc2Nyb2xsWCArIG1fc2Nyb2xsT3JpZ2luLngoKSwgeSk7
IH0KICAgICB2b2lkIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3QgSW50UmVjdCYsIGJvb2wgc2Ny
b2xsVG9BbmNob3IgPSBmYWxzZSwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblggPSBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYg
YWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkKTsKQEAgLTUxNSw4
ICs1MTUsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gU2Nyb2xsQmFyQ2xpZW50IGludGVyZmFjZQog
ICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRp
b24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9u
KGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxi
YXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50Jik7
CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IElu
dFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFs
IGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0OwpAQCAtNTI0LDcgKzUyNCwxMCBA
QCBwcml2YXRlOgogICAgIHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAg
IHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21TY3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQ
b2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFy
KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICAKKworICAgIC8vIE5PVEU6IFRoaXMgc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20g
U2Nyb2xsYmFyQ2xpZW50LgorICAgIHZvaWQgc2Nyb2xsVG8oaW50IHgsIGludCB5KTsKKwogICAg
IEludFNpemUgc2Nyb2xsYmFyT2Zmc2V0KGNvbnN0IFNjcm9sbGJhciopIGNvbnN0OwogICAgIAog
ICAgIHZvaWQgdXBkYXRlT3ZlcmZsb3dTdGF0dXMoYm9vbCBob3Jpem9udGFsT3ZlcmZsb3csIGJv
b2wgdmVydGljYWxPdmVyZmxvdyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk1LDkgKzQ5NSw3IEBA
IGJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW4KICAgICBlbHNlCiAgICAg
ICAgIG5ld09mZnNldCA9IGluZGV4IC0gbnVtVmlzaWJsZUl0ZW1zKCkgKyAxOwogCi0gICAgbV9p
bmRleE9mZnNldCA9IG5ld09mZnNldDsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXIt
PnNldFZhbHVlKG1faW5kZXhPZmZzZXQsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9y
KTsKKyAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24o
bmV3T2Zmc2V0KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTA5LDEyICs1MDcsMTIgQEAg
Ym9vbCBSZW5kZXJMaXN0Qm94OjpsaXN0SW5kZXhJc1Zpc2libGUoaQogCiBib29sIFJlbmRlckxp
c3RCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQogewotICAgIHJldHVybiBt
X3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGll
cik7CisgICAgcmV0dXJuIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiopCiB7Ci0gICAgcmV0dXJuIG1fdkJh
ciAmJiBtX3ZCYXItPnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgcmV0dXJuIFNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS0+aXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01v
ZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0Qm94
Ojp2YWx1ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4KQpAQCAtNTMwLDIwICs1MjgsMjQgQEAg
aW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFNpemUoU2Nyb2xsYmFyTwogICAgIHJldHVybiAoKG9y
aWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3ZCYXIpID8gKG1fdkJhci0+dG90
YWxTaXplKCkgLSBtX3ZCYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBSZW5kZXJM
aXN0Qm94OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZz
ZXQpCitpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QK
IHsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCks
IFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gbV9pbmRleE9mZnNl
dDsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikKK3Zv
aWQgUmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQp
CiB7Ci0gICAgaW50IG5ld09mZnNldCA9IG1fdkJhci0+dmFsdWUoKTsKLSAgICBpZiAobmV3T2Zm
c2V0ICE9IG1faW5kZXhPZmZzZXQpIHsKLSAgICAgICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNl
dDsKLSAgICAgICAgcmVwYWludCgpOwotICAgICAgICBub2RlKCktPmRvY3VtZW50KCktPmV2ZW50
UXVldWUoKS0+ZW5xdWV1ZVNjcm9sbEV2ZW50KG5vZGUoKSwgRXZlbnRRdWV1ZTo6U2Nyb2xsRXZl
bnRFbGVtZW50VGFyZ2V0KTsKLSAgICB9CisgICAgc2Nyb2xsVG8ob2Zmc2V0LnkoKSk7Cit9CisK
K3ZvaWQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsVG8oaW50IG5ld09mZnNldCkKK3sKKyAgICBpZiAo
bmV3T2Zmc2V0ID09IG1faW5kZXhPZmZzZXQpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW5k
ZXhPZmZzZXQgPSBuZXdPZmZzZXQ7CisgICAgcmVwYWludCgpOworICAgIG5vZGUoKS0+ZG9jdW1l
bnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlU2Nyb2xsRXZlbnQobm9kZSgpLCBFdmVudFF1ZXVl
OjpTY3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwogfQogCiBpbnQgUmVuZGVyTGlzdEJveDo6aXRl
bUhlaWdodCgpIGNvbnN0CkBAIC01ODksOSArNTkxLDggQEAgdm9pZCBSZW5kZXJMaXN0Qm94Ojpz
ZXRTY3JvbGxUb3AoaW50IG5ldwogICAgIGludCBpbmRleCA9IG5ld1RvcCAvIGl0ZW1IZWlnaHQo
KTsKICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IG51bUl0ZW1zKCkgfHwgaW5kZXggPT0g
bV9pbmRleE9mZnNldCkKICAgICAgICAgcmV0dXJuOwotICAgIG1faW5kZXhPZmZzZXQgPSBpbmRl
eDsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKGluZGV4LCBTY3Jv
bGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgCisgICAgU2Nyb2xsYmFyQ2xpZW50
OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4KTsKIH0KIAogYm9vbCBSZW5k
ZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0
QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCArOTYsOCBAQCBwcml2YXRl
OgogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGludGVyZmFjZS4KICAgICB2aXJ0dWFsIGludCBz
Y3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYp
OwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVh
bCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lk
IHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZh
bGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmly
dHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNv
cm5lclByZXNlbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfSAvLyBXZSBkb24ndCBzdXBwb3J0
IHJlc2l6ZSBvbiBsaXN0IGJveGVzIHlldC4gIElmIHdlIGRpZCB0aGlzIHdvdWxkIGhhdmUgdG8g
Y2hhbmdlLgpAQCAtMTA1LDYgKzEwNSwxMCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgSW50UmVj
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50
JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBt
X3ZCYXIuZ2V0KCk7IH0KKworICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYmFyQ2xpZW50Lgor
ICAgIHZvaWQgc2Nyb2xsVG8oaW50IG5ld09mZnNldCk7CiAKICAgICB2b2lkIHNldEhhc1ZlcnRp
Y2FsU2Nyb2xsYmFyKGJvb2wgaGFzU2Nyb2xsYmFyKTsKICAgICBQYXNzUmVmUHRyPFNjcm9sbGJh
cj4gY3JlYXRlU2Nyb2xsYmFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTWFycXVlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1hcnF1ZWUuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNYXJxdWVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDkgKzE3MSw5IEBA
IHZvaWQgUmVuZGVyTWFycXVlZTo6c3RhcnQoKQogCiAgICAgaWYgKCFtX3N1c3BlbmRlZCAmJiAh
bV9zdG9wcGVkKSB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWwoKSkKLSAgICAgICAgICAgIG1f
bGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG1fc3RhcnQsIDAsIGZhbHNlLCBmYWxzZSk7CisgICAgICAg
ICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChtX3N0YXJ0LCAwKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoMCwgbV9zdGFydCwgZmFsc2UsIGZh
bHNlKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KDAsIG1fc3RhcnQpOwog
ICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDc2MjAyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDEtMTkgIFNhbSBXZWluaWcgIDxzYW1A
d2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAg
ICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViS2l0
OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Nb3VzZVdoZWVsKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAg
KiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBvcHVwTWVudVByb3h5V2luOjp2ZXJ0aWNhbFNjcm9sbGJhcik6CisKIDIwMTEtMDEtMTkg
IFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IHRo
ZSBXZWJLaXQyIGJ1aWxkLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQ
b3B1cE1lbnVQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzOSwyMSArNDM5LDIzIEBAIGludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6
c2Nyb2xsU2l6ZShTY3IKICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9s
bGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIG1fc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgV2ViUG9wdXBNZW51UHJveHlX
aW46OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
K2ludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29u
c3QKIHsKLSAgICBpZiAobV9zY3JvbGxiYXIpCi0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1
ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAgcmV0dXJu
IG1fc2Nyb2xsT2Zmc2V0OworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpzZXRTY3Jv
bGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxUbyhvZmZzZXQu
eSgpKTsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmFsdWVDaGFuZ2VkKFNjcm9s
bGJhciogc2Nyb2xsQmFyKQordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsVG8oaW50
IG9mZnNldCkKIHsKICAgICBBU1NFUlQobV9zY3JvbGxiYXIpOwogCiAgICAgaWYgKCFtX3BvcHVw
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgb2Zmc2V0ID0gc2Nyb2xsQmFyLT52YWx1ZSgp
OwotCiAgICAgaWYgKG1fc2Nyb2xsT2Zmc2V0ID09IG9mZnNldCkKICAgICAgICAgcmV0dXJuOwog
CkBAIC03MjAsNyArNzIyLDggQEAgTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Nb3Vz
ZVdoZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAtLWk7CiAgICAgfQotICAgIHNjcm9sbGJh
cigpLT5zY3JvbGwoaSA+IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwg
YWJzKGkpKTsKKworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAg
OiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
QEAgLTkyMiwxMiArOTI1LDEyIEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRv
UmV2ZWEKICAgICBpbnQgaW5kZXggPSBmb2N1c2VkSW5kZXgoKTsKIAogICAgIGlmIChpbmRleCA8
IG1fc2Nyb2xsT2Zmc2V0KSB7Ci0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShpbmRleCwg
U2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgICAgICBTY3JvbGxiYXJDbGll
bnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoaW5kZXggPj0gbV9zY3JvbGxPZmZzZXQgKyB2aXNp
YmxlSXRlbXMoKSkgewotICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUoaW5kZXggLSB2aXNp
YmxlSXRlbXMoKSArIDEsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICAg
ICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4
IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQ
cm94eVdpbi5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93
aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTEgKzYwLDE1
IEBAIHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKICAgICB2aXJ0dWFsIGludCBz
Y3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25z
dDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoV2ViQ29y
ZTo6U2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6
U2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xs
YmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAg
ICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQorCisgICAgLy8gTk9URTogVGhpcyBz
aG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJv
bSBTY3JvbGxiYXJDbGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQgb2Zmc2V0KTsKIAogICAg
IHN0YXRpYyBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKICAgICBzdGF0aWMgTFJFU1VMVCBD
QUxMQkFDSyBXZWJQb3B1cE1lbnVQcm94eVduZFByb2MoSFdORCwgVUlOVCwgV1BBUkFNLCBMUEFS
QU0pOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjAyKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMiBAQAorMjAxMS0wMS0xOSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBk
ZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xs
YmFySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OldlYlNjcm9s
bGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Ny
b2xsYmFySW1wbDo6b25Nb3VzZURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJ
bXBsOjpvbk1vdXNlTW92ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9u
TW91c2VXaGVlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93
bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAg
ICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5oOgorCiAyMDExLTAxLTE5ICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjc2MTk0LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xs
YmFySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy
LDcgQEAgaW50IFdlYlNjcm9sbGJhcjo6ZGVmYXVsdFRoaWNrbmVzcygpCiAKIFdlYlNjcm9sbGJh
ckltcGw6OldlYlNjcm9sbGJhckltcGwoV2ViU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQogICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zY3Jv
bGxPZmZzZXQoMCkKIHsKICAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZl
U2Nyb2xsYmFyKAogICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJDbGllbnQqPih0aGlzKSwK
QEAgLTg5LDEyICs5MCwxNSBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKGNv
bnN0CiAKIGludCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fc2Nyb2xsYmFyLT52YWx1ZSgpOworICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKIH0KIAog
dm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCiB7Ci0gICAgbV9z
Y3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9uLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmlt
YXRvcik7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9YT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgZWxzZQorICAgICAgICBXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRp
b24pOwogfQogCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3VtZW50U2l6ZShpbnQgc2l6
ZSkKQEAgLTExMiw3ICsxMTYsOCBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3Jv
bGxEaXJlCiAgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERv
d247CiAgICAgZWxzZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNj
cm9sbFVwOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBsaWVyKTsKKworICAgIFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlwbGllcik7CiB9CiAKIHZvaWQg
V2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpCkBAIC0xNjcsMTEgKzE3MiwxMSBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91
c2VEb3duKGNvbnN0CiAgICAgaWYgKCFtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMo
bW91c2Vkb3duLngsIG1vdXNlZG93bi55KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOwotICAgICAgICAgICAgbW91
c2Vkb3duLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKLSAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5t
b3VzZURvd24oUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91
c2Vkb3duKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIG1vdXNl
ZG93bi54IC09IG1fc2Nyb2xsYmFyLT54KCk7CisgICAgbW91c2Vkb3duLnkgLT0gbV9zY3JvbGxi
YXItPnkoKTsKKyAgICBtX3Njcm9sbGJhci0+bW91c2VEb3duKFBsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlZG93bikpOworICAgIHJldHVybiB0cnVlOwor
fQogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VVcChjb25zdCBXZWJJbnB1dEV2ZW50
JiBldmVudCkKIHsKQEAgLTE4MywxNiArMTg4LDE2IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6
b25Nb3VzZVVwKGNvbnN0IFcKIAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlTW92ZShj
b25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKIHsKLSAgICAgICAgV2ViTW91c2VFdmVudCBtb3Vz
ZW1vdmUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7Ci0gICAg
ICAgIGlmIChtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91c2Vtb3ZlLngsIG1v
dXNlbW92ZS55KQotICAgICAgICAgICAgfHwgbV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgIT0g
Tm9QYXJ0KSB7Ci0gICAgICAgICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJhci0+eCgpOwot
ICAgICAgICAgICAgbW91c2Vtb3ZlLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKLSAgICAgICAgICAg
IHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVy
KG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZW1vdmUpKTsKLSAgICAgICAgfQorICAgIFdlYk1vdXNl
RXZlbnQgbW91c2Vtb3ZlID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZl
bnQpOworICAgIGlmIChtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91c2Vtb3Zl
LngsIG1vdXNlbW92ZS55KQorICAgICAgICB8fCBtX3Njcm9sbGJhci0+cHJlc3NlZFBhcnQoKSAh
PSBOb1BhcnQpIHsKKyAgICAgICAgbW91c2Vtb3ZlLnggLT0gbV9zY3JvbGxiYXItPngoKTsKKyAg
ICAgICAgbW91c2Vtb3ZlLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKKyAgICAgICAgcmV0dXJuIG1f
c2Nyb2xsYmFyLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV9zY3JvbGxi
YXIuZ2V0KCksIG1vdXNlbW92ZSkpOworICAgIH0KIAotICAgICAgICBpZiAobV9zY3JvbGxiYXIt
PmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0KQotICAgICAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNl
RXhpdGVkKCk7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCkK
KyAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNlRXhpdGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC0yMDYsNTkgKzIxMSw1OSBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VM
ZWF2ZShjb25zCiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNvbnN0IFdl
YklucHV0RXZlbnQmIGV2ZW50KQogewotICAgICAgICAvLyBTYW1lIGxvZ2ljIGFzIGluIFNjcm9s
bHZpZXcuY3BwLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxsLCB3ZSdsbCBhY2NlcHQgdGhlIGV2ZW50
LgotICAgICAgICBXZWJNb3VzZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxj
b25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigmZXZlbnQpOwotICAgICAgICBpbnQgbWF4U2Nyb2xs
RGVsdGEgPSBtX3Njcm9sbGJhci0+bWF4aW11bSgpIC0gbV9zY3JvbGxiYXItPnZhbHVlKCk7Ci0g
ICAgICAgIGZsb2F0IGRlbHRhID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IG1vdXNld2hlZWwuZGVsdGFYIDogbW91c2V3aGVlbC5kZWx0YVk7Ci0g
ICAgICAgIGlmICgoZGVsdGEgPCAwICYmIG1heFNjcm9sbERlbHRhID4gMCkgfHwgKGRlbHRhID4g
MCAmJiBtX3Njcm9sbGJhci0+dmFsdWUoKSA+IDApKSB7Ci0gICAgICAgICAgICBpZiAobW91c2V3
aGVlbC5zY3JvbGxCeVBhZ2UpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9zY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpOwotICAgICAgICAgICAgICAgIGJv
b2wgbmVnYXRpdmUgPSBkZWx0YSA8IDA7Ci0gICAgICAgICAgICAgICAgZGVsdGEgPSBtYXgobWF4
KHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgKiBTY3JvbGxi
YXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9z
Y3JvbGxiYXItPnZpc2libGVTaXplKCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFn
ZXMoKSkpLCAxLjBmKTsKLSAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCi0gICAgICAgICAg
ICAgICAgICAgIGRlbHRhICo9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zY3Jv
bGxiYXItPnNjcm9sbCgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDogV2ViQ29yZTo6U2Nyb2xsVXAsIFdlYkNv
cmU6OlNjcm9sbEJ5UGl4ZWwsIGRlbHRhKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IC8vIFNhbWUgbG9naWMgYXMgaW4gU2Nyb2xsdmlldy5jcHAuICBJZiB3ZSBjYW4gbW92ZSBhdCBh
bGwsIHdlJ2xsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgV2ViTW91c2VXaGVlbEV2ZW50IG1vdXNl
d2hlZWwgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsK
KyAgICBpbnQgbWF4U2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGJhci0+bWF4aW11bSgpIC0gbV9zY3Jv
bGxiYXItPnZhbHVlKCk7CisgICAgZmxvYXQgZGVsdGEgPSBtX3Njcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbW91c2V3aGVlbC5kZWx0YVggOiBtb3VzZXdo
ZWVsLmRlbHRhWTsKKyAgICBpZiAoKGRlbHRhIDwgMCAmJiBtYXhTY3JvbGxEZWx0YSA+IDApIHx8
IChkZWx0YSA+IDAgJiYgbV9zY3JvbGxiYXItPnZhbHVlKCkgPiAwKSkgeworICAgICAgICBpZiAo
bW91c2V3aGVlbC5zY3JvbGxCeVBhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Njcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBib29s
IG5lZ2F0aXZlID0gZGVsdGEgPCAwOworICAgICAgICAgICAgZGVsdGEgPSBtYXgobWF4KHN0YXRp
Y19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgKiBTY3JvbGxiYXI6Om1p
bkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxi
YXItPnZpc2libGVTaXplKCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSkp
LCAxLjBmKTsKKyAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICBkZWx0
YSAqPSAtMTsKICAgICAgICAgfQorICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNj
cm9sbCgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
PyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDogV2ViQ29yZTo6U2Nyb2xsVXAsIFdlYkNvcmU6OlNjcm9s
bEJ5UGl4ZWwsIGRlbHRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24oY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7Ci0gICAgICAgIFdlYktleWJvYXJkRXZlbnQga2V5
Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCo+KCZldmVudCk7Ci0g
ICAgICAgIGludCBrZXlDb2RlOwotICAgICAgICAvLyBXZSBoYXZlIHRvIGR1cGxpY2F0ZSB0aGlz
IGxvZ2ljIGZyb20gV2ViVmlld0ltcGwgYmVjYXVzZSB0aGVyZSBpdCB1c2VzCi0gICAgICAgIC8v
IENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlzdCBhdCB0aGlzIHBv
aW50LgotICAgICAgICBpZiAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUgPT0gVktFWV9TUEFDRSkK
LSAgICAgICAgICAgIGtleUNvZGUgPSAoKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklucHV0RXZl
bnQ6OlNoaWZ0S2V5KSA/IFZLRVlfUFJJT1IgOiBWS0VZX05FWFQpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChrZXlib2FyZC5tb2RpZmllcnMgPT0gV2ViSW5wdXRFdmVudDo6Q29u
dHJvbEtleSkgewotICAgICAgICAgICAgICAgIC8vIE1hdGNoIEZGIGJlaGF2aW9yIGluIHRoZSBz
ZW5zZSB0aGF0IEN0cmwraG9tZS9lbmQgYXJlIHRoZSBvbmx5IEN0cmwKLSAgICAgICAgICAgICAg
ICAvLyBrZXkgY29tYmluYXRpb25zIHdoaWNoIGFmZmVjdCBzY3JvbGxpbmcuIFNhZmFyaSBpcyBi
dWdneSBpbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBzZW5zZSB0aGF0IGl0IHNjcm9sbHMgdGhl
IHBhZ2UgZm9yIGFsbCBDdHJsK3Njcm9sbGluZyBrZXkKLSAgICAgICAgICAgICAgICAvLyBjb21i
aW5hdGlvbnMuIEZvciBlLmcuIEN0cmwrcGd1cC9wZ2RuL3VwL2Rvd24sIGV0Yy4KLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBWS0VZX0hPTUU6Ci0gICAgICAgICAgICAgICAgY2FzZSBWS0VZX0VORDoKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICBXZWJLZXli
b2FyZEV2ZW50IGtleWJvYXJkID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYktleWJvYXJkRXZlbnQq
PigmZXZlbnQpOworICAgIGludCBrZXlDb2RlOworICAgIC8vIFdlIGhhdmUgdG8gZHVwbGljYXRl
IHRoaXMgbG9naWMgZnJvbSBXZWJWaWV3SW1wbCBiZWNhdXNlIHRoZXJlIGl0IHVzZXMKKyAgICAv
LyBDaGFyIGFuZCBSYXdLZXlEb3duIGV2ZW50cywgd2hpY2ggZG9uJ3QgZXhpc3QgYXQgdGhpcyBw
b2ludC4KKyAgICBpZiAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUgPT0gVktFWV9TUEFDRSkKKyAg
ICAgICAga2V5Q29kZSA9ICgoa2V5Ym9hcmQubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hp
ZnRLZXkpID8gVktFWV9QUklPUiA6IFZLRVlfTkVYVCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChrZXlib2FyZC5tb2RpZmllcnMgPT0gV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleSkgeworICAg
ICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3IgaW4gdGhlIHNlbnNlIHRoYXQgQ3RybCtob21l
L2VuZCBhcmUgdGhlIG9ubHkgQ3RybAorICAgICAgICAgICAgLy8ga2V5IGNvbWJpbmF0aW9ucyB3
aGljaCBhZmZlY3Qgc2Nyb2xsaW5nLiBTYWZhcmkgaXMgYnVnZ3kgaW4gdGhlCisgICAgICAgICAg
ICAvLyBzZW5zZSB0aGF0IGl0IHNjcm9sbHMgdGhlIHBhZ2UgZm9yIGFsbCBDdHJsK3Njcm9sbGlu
ZyBrZXkKKyAgICAgICAgICAgIC8vIGNvbWJpbmF0aW9ucy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3Bn
ZG4vdXAvZG93biwgZXRjLgorICAgICAgICAgICAgc3dpdGNoIChrZXlib2FyZC53aW5kb3dzS2V5
Q29kZSkgeworICAgICAgICAgICAgY2FzZSBWS0VZX0hPTUU6CisgICAgICAgICAgICBjYXNlIFZL
RVlfRU5EOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKGtleWJvYXJkLmlzU3lzdGVtS2V5IHx8IChrZXlib2FyZC5tb2RpZmll
cnMgJiBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkgfHwgKGtleWJvYXJkLm1vZGlm
aWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICAgICAga2V5Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlDb2RlOwotICAg
ICAgICB9Ci0gICAgICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247
Ci0gICAgICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5Owot
ICAgICAgICBpZiAoV2ViVmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29kZSwgJnNj
cm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkgewotICAgICAgICAgICAgLy8gV2ls
bCByZXR1cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3YXNuJ3QgY29tcGF0aWJsZSB3aXRo
IHRoaXMgc2Nyb2xsYmFyLgotICAgICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5zY3JvbGwo
c2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7Ci0gICAgICAgIH0KKyAgICAgICAg
a2V5Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlDb2RlOworICAgIH0KKyAgICBXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24gc2Nyb2xsRGlyZWN0aW9uOworICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51
bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5OworICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29k
ZUZvclNjcm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkp
KSB7CisgICAgICAgIC8vIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fz
bid0IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNjcm9sbGJhci4KKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVs
YXJpdHkpOworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI2NywxMyArMjcyLDE4
IEBAIGludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxTaXplKFdlYkNvcmUKICAgICByZXR1cm4g
KG9yaWVudGF0aW9uID09IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKSA/IChtX3Njcm9sbGJh
ci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxQ
b3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdAogewotICAgIG1fc2Nyb2xsYmFyLT5z
ZXRWYWx1ZSgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgPyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0
b3IpOworICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKIH0KIAotdm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjp2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKikKK3ZvaWQgV2ViU2Nyb2xsYmFy
SW1wbDo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCiB7
CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIpCisgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gb2Zmc2V0LngoKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fc2Nyb2xsT2Zmc2V0ID0gb2Zmc2V0LnkoKTsKKwogICAgIG1fY2xpZW50LT52YWx1ZUNo
YW5nZWQodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTY3JvbGxiYXJJbXBsLmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJ
bnB1dEV2ZW50Jik7CiAKICAgICAvLyBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgbWV0aG9kcwot
ICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxT
aXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0OwpAQCAt
NzYsNiArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgV2ViU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVu
dDsKIAorICAgIGludCBtX3Njcm9sbE9mZnNldDsKICAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xs
YmFyPiBtX3Njcm9sbGJhcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcxLDcgKzEwNzEsMTEgQEAgdm9pZCBRV2ViRnJhbWU6OnNl
dFNjcm9sbEJhclZhbHVlKFF0OjpPcgogICAgICAgICAgICAgdmFsdWUgPSAwOwogICAgICAgICBl
bHNlIGlmICh2YWx1ZSA+IHNjcm9sbEJhck1heGltdW0ob3JpZW50YXRpb24pKQogICAgICAgICAg
ICAgdmFsdWUgPSBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKTsKLSAgICAgICAgc2ItPnNl
dFZhbHVlKHZhbHVlLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisKKyAgICAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFsKQorICAgICAgICAgICAgc2ItPmNs
aWVudCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHZhbHVlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2ItPmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5p
bWF0aW9uKHZhbHVlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc2MjAyKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTggQEAKKzIwMTEtMDEtMTkgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZWVkIGEg
c2hvcnQgZGVzY3JpcHRpb24gYW5kIGJ1ZyBVUkwgKE9PUFMhKQorCisgICAgICAgICogV2ViU2Ny
b2xsQmFyLmNwcDoKKyAgICAgICAgKFdlYlNjcm9sbEJhcjo6V2ViU2Nyb2xsQmFyKToKKyAgICAg
ICAgKFdlYlNjcm9sbEJhcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjp2YWx1
ZSk6CisgICAgICAgIChXZWJTY3JvbGxCYXI6OnNjcm9sbCk6CisgICAgICAgIChXZWJTY3JvbGxC
YXI6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYlNjcm9sbEJhcjo6c2V0U2Nyb2xsT2Zm
c2V0KToKKyAgICAgICAgKiBXZWJTY3JvbGxCYXIuaDoKKwogMjAxMS0wMS0xOSAgU2ltb24gRnJh
c2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0g
V2VpbmlnLgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3BwCShyZXZpc2lvbiA3NjE3
OCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBXZWJTY3JvbGxCYXI6
OldlYlNjcm9sbEJhcigpCiAgICAgOiBtX3JlZkNvdW50KDApCiAgICAgLCBtX2NvbnRhaW5pbmdX
aW5kb3coMCkKKyAgICAsIG1fY3VycmVudFBvc2l0aW9uKDApCiB7CiAgICAgZ0NsYXNzQ291bnQr
KzsKICAgICBnQ2xhc3NOYW1lQ291bnQuYWRkKCJXZWJTY3JvbGxCYXIiKTsKQEAgLTE0Myw3ICsx
NDQsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlNjcm9sbEJhcjo6CiBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIFdlYlNjcm9sbEJhcjo6c2V0VmFsdWUoIAogICAgIC8qIFtpbl0g
Ki8gaW50IHZhbHVlKQogewotICAgIG1fc2Nyb2xsQmFyLT5zZXRWYWx1ZSh2YWx1ZSwgU2Nyb2xs
YmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIG1fY3VycmVudFBvc2l0aW9uID0gdmFs
dWU7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTE1Miw3ICsxNTMsNyBAQCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIFdlYlNjcm9sbEJhcjo6CiB7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqdmFsdWUgPSBtX3Njcm9sbEJhci0+dmFsdWUoKTsK
KyAgICAqdmFsdWUgPSBtX2N1cnJlbnRQb3NpdGlvbjsKICAgICByZXR1cm4gU19PSzsKIH0KIApA
QCAtMjQ3LDcgKzI0OCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2Nyb2xsQmFy
OjoKIHsKICAgICBTY3JvbGxEaXJlY3Rpb24gd2ViQ29yZVNjcm9sbERpcmVjdGlvbiA9IChTY3Jv
bGxEaXJlY3Rpb24pIGRpcmVjdGlvbjsKICAgICBTY3JvbGxHcmFudWxhcml0eSB3ZWJDb3JlR3Jh
bnVsYXJpdHkgPSAoU2Nyb2xsR3JhbnVsYXJpdHkpIGdyYW51bGFyaXR5OwotICAgIG1fc2Nyb2xs
QmFyLT5zY3JvbGwod2ViQ29yZVNjcm9sbERpcmVjdGlvbiwgd2ViQ29yZUdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyKTsKKyAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbCh3ZWJDb3JlU2Nyb2xsRGly
ZWN0aW9uLCB3ZWJDb3JlR3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwogICAgIHJldHVybiBTX09L
OwogfQogCkBAIC0yNTcsMTcgKzI1OCwxNCBAQCBpbnQgV2ViU2Nyb2xsQmFyOjpzY3JvbGxTaXpl
KFNjcm9sbGJhck9yCiAgICAgcmV0dXJuIChvcmllbnRhdGlvbiA9PSBtX3Njcm9sbEJhci0+b3Jp
ZW50YXRpb24oKSkgPyAobV9zY3JvbGxCYXItPnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxCYXItPnZp
c2libGVTaXplKCkpIDogMDsgCiB9CiAKLXZvaWQgV2ViU2Nyb2xsQmFyOjpzZXRTY3JvbGxPZmZz
ZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCitpbnQgV2ViU2Nyb2xsQmFy
OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdAogewotICAgIG1fc2Nyb2xsQmFyLT5z
ZXRWYWx1ZSgobV9zY3JvbGxCYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgPyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0
b3IpOworICAgIHJldHVybiBtX2N1cnJlbnRQb3NpdGlvbjsKIH0KIAotdm9pZCBXZWJTY3JvbGxC
YXI6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIHNjcm9sbEJhcikKK3ZvaWQgV2ViU2Nyb2xsQmFy
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKLSAgICBpZiAobV9z
Y3JvbGxCYXIgIT0gc2Nyb2xsQmFyKSB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7ICAvLyBzaG91
bGRuJ3QgaGFwcGVuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgbV9jdXJyZW50UG9zaXRp
b24gPSAobV9zY3JvbGxCYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
PyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKTsKICAgICBtX2RlbGVnYXRlLT52YWx1ZUNoYW5nZWQo
dGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5oCShyZXZpc2lvbiA3NjE3
OCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTcsOCArMTE3LDggQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIC8vIFNjcm9sbGJhckNs
aWVudAogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChT
Y3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50Jik7
CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNv
bnN0IEludFJlY3QmKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvdmlkZSBhIHdheSB0
byBzZXQgdGhpcyB2YWx1ZS4KQEAgLTEyOCw2ICsxMjgsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBV
TE9ORyBtX3JlZkNvdW50OwogICAgIEhXTkQgbV9jb250YWluaW5nV2luZG93OworICAgIGludCBt
X2N1cnJlbnRQb3NpdGlvbjsKICAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBtX3Njcm9s
bEJhcjsKICAgICBDT01QdHI8SVdlYlNjcm9sbEJhckRlbGVnYXRlUHJpdmF0ZT4gbV9kZWxlZ2F0
ZTsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79636</attachid>
            <date>2011-01-20 12:40:51 -0800</date>
            <delta_ts>2011-01-20 12:56:22 -0800</delta_ts>
            <desc>Attempt 4</desc>
            <filename>patchForBZ.diff</filename>
            <type>text/plain</type>
            <size>71789</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQwNCw3ICsxMTQwNCw3IEBA
CiAJCUJDQThDQTVEMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdEltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0E4Q0E1RTExRTRFNkQxMDA4MTJG
QjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFNjcm9sbGJhci5jcHA7IHBh
dGggPSBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07
CisJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGJhci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUJDQUNGM0JBMTA3MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVS
TFBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckNv
bnRlbnRVUkxQYXR0ZXJuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBQ0Yz
QkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBRTFGQTUxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFu
aW1hdG9yTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1h
dG9yTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMzg3OSw3ICsxMzg3OSw2
IEBACiAJCQkJMUNFMjRGOTYwRDdDQUYwRTAwN0UwNEMyIC8qIFNjaGVkdWxlUGFpck1hYy5tbSAq
LywKIAkJCQlCQ0FFMUZBNTEyOTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCAq
LywKIAkJCQlCQzUxMTU2RDEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0g
Ki8sCi0JCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8sCiAJ
CQkJQkM4Qjg1M0MwRTdDN0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggKi8sCiAJ
CQkJQkNFRjg2OUUwRTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tICovLAog
CQkJCTkzNTM2NzZBMDlBRUQ4OEIwMEQzNUNENiAvKiBTY3JvbGxWaWV3TWFjLm1tICovLApAQCAt
MTgyNjEsNiArMTgyNjAsNyBAQAogCQkJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hl
bWVSZWdpc3RyeS5oICovLAogCQkJCUNBM0JGNjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxB
bmltYXRvci5jcHAgKi8sCiAJCQkJQ0EzQkY2N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFu
aW1hdG9yLmggKi8sCisJCQkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5j
cHAgKi8sCiAJCQkJQkM3QjJBRjgwNDUwODI0MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAog
CQkJCUJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuY3BwICovLAog
CQkJCUJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5U2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Nyw5ICs5NywxNCBAQCB2b2lkIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OnNldFZhbHVlKGZsCiAg
ICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAgICAgcmV0dXJuOwogICAgIAorICAgIGlmICghbV9z
Y3JvbGxiYXItPmNsaWVudCgpKQorICAgICAgICByZXR1cm47CisKICAgICBmbG9hdCBuZXdWYWx1
ZSA9IHZhbHVlICogbV9zY3JvbGxiYXItPm1heGltdW0oKTsKLSAgICAKLSAgICBtX3Njcm9sbGJh
ci0+c2V0VmFsdWUobmV3VmFsdWUsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsg
ICAgCisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpCisgICAgICAgIG1fc2Nyb2xsYmFyLT5jbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihuZXdWYWx1ZSk7CisgICAgZWxzZQorICAgICAgICBtX3Njcm9sbGJhci0+
Y2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24obmV3VmFsdWUpOwogfQog
ICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NDMsMjMgKzE5NDMsMTUgQEAgYm9vbCBGcmFtZVZpZXc6
OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xs
ZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqIGJhcikKK3ZvaWQgRnJhbWVWaWV3OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdP
ZmZzZXQpCiB7Ci0gICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCiAgICAgSW50
U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQoKTsKLSAgICBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5n
ZWQoYmFyKTsKKyAgICBTY3JvbGxWaWV3OjpzY3JvbGxUbyhuZXdPZmZzZXQpOwogICAgIGlmIChv
ZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCiAgICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgp
OwogICAgIGZyYW1lKCktPmxvYWRlcigpLT5jbGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0
KCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojp2YWx1ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2Ny
b2xsRGVsdGEpCi17Ci0gICAgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKHNjcm9sbERlbHRhKTsK
LSAgICBmcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Ci0gICAgZnJh
bWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLX0KLQog
dm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIC8vIEFkZCBpbiBvdXIgb2Zmc2V0IHdp
dGhpbiB0aGUgRnJhbWVWaWV3LgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lv
biA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4OCwxMiArMjg4LDEyIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRQb2ludCBj
b252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICAv
LyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNlCi0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdl
ZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKGNvbnN0IEludFNp
emUmKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFy
KiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYpOworCiAgICAgdm9pZCBk
ZWZlcnJlZFJlcGFpbnRUaW1lckZpcmVkKFRpbWVyPEZyYW1lVmlldz4qKTsKICAgICB2b2lkIGRv
RGVmZXJyZWRSZXBhaW50cygpOwogICAgIHZvaWQgdXBkYXRlRGVmZXJyZWRSZXBhaW50RGVsYXko
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJl
dmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIK
ICNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAg
LTYxLDE2ICs2MiwyNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3Jp
CiAgICAgaWYgKCpjdXJyZW50UG9zID09IG5ld1BvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICpjdXJyZW50UG9zID0gbmV3UG9zOwotICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRG
cm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKKwor
ICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgU2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQordm9pZCBTY3JvbGxBbmlt
YXRvcjo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9m
ZnNldCkKK3sKKyAgICBtX2N1cnJlbnRQb3NYID0gb2Zmc2V0LngoKTsKKyAgICBtX2N1cnJlbnRQ
b3NZID0gb2Zmc2V0LnkoKTsKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKworRmxv
YXRQb2ludCBTY3JvbGxBbmltYXRvcjo6Y3VycmVudFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBp
ZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgbV9jdXJyZW50
UG9zWCA9IHBvczsKLSAgICBlbHNlCi0gICAgICAgIG1fY3VycmVudFBvc1kgPSBwb3M7CisgICAg
cmV0dXJuIEZsb2F0UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSk7Cit9CisKK3Zv
aWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpCit7CisgICAgbV9jbGll
bnQtPnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwg
bV9jdXJyZW50UG9zWSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDc2MTc4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZsb2F0UG9p
bnQ7CiBjbGFzcyBTY3JvbGxiYXJDbGllbnQ7CiAKIGNsYXNzIFNjcm9sbEFuaW1hdG9yIHsKQEAg
LTUwLDE2ICs1MSwxOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50
YXRpb24gYWx3YXlzIHNjcm9sbHMgaW1tZWRpYXRlbHksIG5ldmVyIGFuaW1hdGVzLgogICAgIHZp
cnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKIAotICAgIC8vIFN0b3BzIGFueSBhbmlt
YXRpb24gaW4gdGhlIGdpdmVuIGRpcmVjdGlvbiBhbmQgdXBkYXRlcyB0aGUgU2Nyb2xsQW5pbWF0
b3IKLSAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbi4gIFRoaXMgZG9lcyBu
b3QgY2F1c2UgYSBjYWxsYmFjayB0byB0aGUKLSAgICAvLyBTY3JvbGxiYXJDbGllbnQuCi0gICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJP
cmllbnRhdGlvbiwgZmxvYXQpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhv
dXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworCisgICAgRmxvYXRQb2ludCBjdXJyZW50
UG9zaXRpb24oKSBjb25zdDsKIAogcHJvdGVjdGVkOgorICAgIHZvaWQgbm90aXR5UG9zaXRpb25D
aGFuZ2VkKCk7CisKICAgICBTY3JvbGxiYXJDbGllbnQqIG1fY2xpZW50OwogICAgIGZsb2F0IG1f
Y3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVzaW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byBy
ZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NZOyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhp
dHkuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0jZW5kaWYKKworI2VuZGlmIC8vIFNj
cm9sbEFuaW1hdG9yX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvcldpbi5oIgogCisjaW5jbHVkZSAiRmxvYXRQb2lu
dC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRo
ZW1lLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMTc3LDE3ICsxNzgsMjQgQEAgYm9vbCBT
Y3JvbGxBbmltYXRvcldpbjo6c2Nyb2xsKFNjcm9sbGJhcgogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRp
b24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3ZvaWQgU2Ny
b2xsQW5pbWF0b3JXaW46OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgUGVyQXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAmbV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2Fs
RGF0YTsKLSAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZChkYXRhKTsKLSAgICAqZGF0YS0+
bV9jdXJyZW50UG9zID0gcG9zOwotICAgIGRhdGEtPm1fZGVzaXJlZFBvcyA9IHBvczsKLSAgICBk
YXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IDA7Ci0gICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkg
PSAwOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRhKTsK
KyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5lZWRlZCgmbV92ZXJ0aWNhbERhdGEpOworCisgICAg
Km1faG9yaXpvbnRhbERhdGEubV9jdXJyZW50UG9zID0gb2Zmc2V0LngoKTsKKyAgICBtX2hvcml6
b250YWxEYXRhLm1fZGVzaXJlZFBvcyA9IG9mZnNldC54KCk7CisgICAgbV9ob3Jpem9udGFsRGF0
YS5tX2N1cnJlbnRWZWxvY2l0eSA9IDA7CisgICAgbV9ob3Jpem9udGFsRGF0YS5tX2Rlc2lyZWRW
ZWxvY2l0eSA9IDA7CisKKyAgICAqbV92ZXJ0aWNhbERhdGEubV9jdXJyZW50UG9zID0gb2Zmc2V0
LnkoKTsKKyAgICBtX3ZlcnRpY2FsRGF0YS5tX2Rlc2lyZWRQb3MgPSBvZmZzZXQueSgpOworICAg
IG1fdmVydGljYWxEYXRhLm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBtX3ZlcnRpY2FsRGF0
YS5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsK
IH0KIAotLy8gc3RhdGljCiBkb3VibGUgU2Nyb2xsQW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRp
bWUoKQogewogICAgIC8vIFdlIGVsZWN0IHRvIHVzZSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhl
bWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXkoKSBhcwpAQCAtMjkzLDcgKzMwMSw4IEBAIHZvaWQg
U2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3JvbGwoUGUKICAgICAgICAgZGF0YS0+bV9hbmlt
YXRpb25UaW1lci5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSk7CiAgICAgICAgIGRh
dGEtPm1fbGFzdEFuaW1hdGlvblRpbWUgPSBXVEY6OmN1cnJlbnRUaW1lKCk7CiAgICAgfQotICAg
IG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KCptX2hvcml6
b250YWxEYXRhLm1fY3VycmVudFBvcywgKm1fdmVydGljYWxEYXRhLm1fY3VycmVudFBvcykpOwor
CisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAko
cmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRv
cldpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5TY3JvbGxBbmltYXRvcldpbigpOwogCiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3Jv
bGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11
bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmlt
YXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogcHJpdmF0
ZToKICAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEgewpAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgog
ICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxEYXRhOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAKLSNlbmRpZgor
I2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yV2luX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsMjUgKzMyMCwyMCBAQCBp
bnQgU2Nyb2xsVmlldzo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllCiAgICAgcmV0dXJuIHNjcm9s
bGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgp
KSA6IDA7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQordm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZz
ZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xs
YmFyKQotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCks
IFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9s
bGJhcikKLSAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwg
U2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOwotfQorICAgIGludCBob3Jpem9udGFsT2Zm
c2V0ID0gc3RkOjptYXgoc3RkOjptaW4ob2Zmc2V0LngoKSwgY29udGVudHNXaWR0aCgpIC0gdmlz
aWJsZVdpZHRoKCkpLCAwKTsKKyAgICBpbnQgdmVydGljYWxPZmZzZXQgPSBzdGQ6Om1heChzdGQ6
Om1pbihvZmZzZXQueSgpLCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSwgMCk7
CiAKLXZvaWQgU2Nyb2xsVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQot
ewotICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgogICAgIEludFNpemUgbmV3
T2Zmc2V0ID0gbV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9sbGJhcikgewotICAgICAgICBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAg
ICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgoc2Nyb2xsYmFyLT52YWx1ZSgpIC0gbV9zY3JvbGxP
cmlnaW4ueCgpKTsKLSAgICAgICAgZWxzZSBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09
IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgbmV3T2Zmc2V0LnNldEhlaWdodChzY3Jv
bGxiYXItPnZhbHVlKCkgLSBtX3Njcm9sbE9yaWdpbi55KCkpOwotICAgIH0KKyAgICBuZXdPZmZz
ZXQuc2V0V2lkdGgoaG9yaXpvbnRhbE9mZnNldCAtIG1fc2Nyb2xsT3JpZ2luLngoKSk7CisgICAg
bmV3T2Zmc2V0LnNldEhlaWdodCh2ZXJ0aWNhbE9mZnNldCAtIG1fc2Nyb2xsT3JpZ2luLnkoKSk7
CisKKyAgICBzY3JvbGxUbyhuZXdPZmZzZXQpOworfQogCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9s
bFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkKK3sKICAgICBJbnRTaXplIHNjcm9sbERlbHRh
ID0gbmV3T2Zmc2V0IC0gbV9zY3JvbGxPZmZzZXQ7CiAgICAgaWYgKHNjcm9sbERlbHRhID09IElu
dFNpemUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzUxLDEzICszNDYsMTMgQEAgdm9pZCBTY3Jv
bGxWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKgogICAgIHNjcm9sbENvbnRlbnRzKHNjcm9s
bERlbHRhKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5nZWQoY29uc3QgSW50U2l6
ZSYgc2Nyb2xsRGVsdGEpCitpbnQgU2Nyb2xsVmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFy
KiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgaWYgKHNjcm9sbGJhcnNTdXBwcmVzc2VkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlcGFpbnRGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmco
KTsKLSAgICBzY3JvbGxDb250ZW50cyhzY3JvbGxEZWx0YSk7CisgICAgaWYgKHNjcm9sbGJhci0+
b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gc2Ny
b2xsUG9zaXRpb24oKS54KCk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBW
ZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueSgpOwor
ICAgIHJldHVybiAwOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNv
bnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkKQEAgLTM5MSwxNSArMzg2LDggQEAgYm9vbCBTY3Jv
bGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIAogewogICAgIGlmIChwbGF0Zm9ybVdpZGdl
dCgpKQogICAgICAgICByZXR1cm4gcGxhdGZvcm1TY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0
eSk7Ci0gICAgCi0gICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0g
U2Nyb2xsRG93bikgewotICAgICAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAg
ICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxh
cml0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikK
LSAgICAgICAgICAgIHJldHVybiBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwogfQogCiBi
b29sIFNjcm9sbFZpZXc6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJl
Y3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQpAQCAtNTMwLDcgKzUxOCw2IEBA
IHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1f
aG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJM
aW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0
UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29udGVudHNXaWR0aCgpKTsKLSAgICAgICAgbV9ob3Jp
em9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwud2lkdGgoKSArIG1fc2Nyb2xsT3JpZ2lu
LngoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgICAgICBpZiAobV9z
Y3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFsc2UpOyAKICAgICB9IApAQCAtNTUyLDcgKzUzOSw2
IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1Blckxp
bmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJv
cG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOwotICAgICAgICBtX3ZlcnRp
Y2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3JvbGwuaGVpZ2h0KCkgKyBtX3Njcm9sbE9yaWdpbi55
KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Ny
b2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRT
dXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CiAgICAgfQpAQCAtNTYyLDE1ICs1NDgsNyBAQCB2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgCiAgICAgICAgIHVwZGF0ZVNj
cm9sbENvcm5lcigpOwogICAgIH0KIAotICAgIC8vIFNlZSBpZiBvdXIgb2Zmc2V0IGhhcyBjaGFu
Z2VkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG1pZ2h0IG5vdCBoYXZlIHNjcm9sbGJhcnMuCi0g
ICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZWRpdGluZyBhIGJvZHkgd2l0aCBvdmVyZmxvdzpo
aWRkZW4gYW5kIHNjcm9sbGluZyB0byByZXZlYWwgc2VsZWN0aW9uLgotICAgIC8vIEl0IGNhbiBh
bHNvIGhhcHBlbiB3aGVuIG1heGltaXppbmcgYSB3aW5kb3cgdGhhdCBoYXMgc2Nyb2xsYmFycyAo
YnV0IHRoZSBuZXcgbWF4aW1pemVkIHJlc3VsdAotICAgIC8vIGRvZXMgbm90KS4KLSAgICBJbnRT
aXplIHNjcm9sbERlbHRhID0gc2Nyb2xsIC0gbV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9s
bERlbHRhICE9IEludFNpemUoKSkgewotICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsOwot
ICAgICAgIHZhbHVlQ2hhbmdlZChzY3JvbGxEZWx0YSk7Ci0gICAgfQorICAgIFNjcm9sbGJhckNs
aWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsLndp
ZHRoKCksIHNjcm9sbC5oZWlnaHQoKSkpOwogCiAgICAgbV9pblVwZGF0ZVNjcm9sbGJhcnMgPSBm
YWxzZTsKIH0KQEAgLTc1Nyw2ICs3MzUsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQo
UGxhdGZvcm1XaGVlCiAgICAgLy8gc2Nyb2xsIGFueSBmdXJ0aGVyLgogICAgIGZsb2F0IGRlbHRh
WCA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciA/IGUuZGVsdGFYKCkgOiAwOwogICAgIGZsb2F0IGRl
bHRhWSA9IG1fdmVydGljYWxTY3JvbGxiYXIgPyBlLmRlbHRhWSgpIDogMDsKKyAgICAKICAgICBJ
bnRTaXplIG1heEZvcndhcmRTY3JvbGxEZWx0YSA9IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIC0g
c2Nyb2xsUG9zaXRpb24oKTsKICAgICBJbnRTaXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBz
Y3JvbGxQb3NpdGlvbigpIC0gbWluaW11bVNjcm9sbFBvc2l0aW9uKCk7CiAgICAgaWYgKChkZWx0
YVggPCAwICYmIG1heEZvcndhcmRTY3JvbGxEZWx0YS53aWR0aCgpID4gMCkKQEAgLTc3Myw5ICs3
NTIsOSBAQCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVlCiAgICAgICAg
IH0KIAogICAgICAgICBpZiAoZGVsdGFZKQotICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJh
ci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxCeVBpeGVsLCBkZWx0YVkpOworICAgICAgICAgICAg
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7
CiAgICAgICAgIGlmIChkZWx0YVgpCi0gICAgICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXIt
PnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgpOworICAgICAgICAgICAg
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFY
KTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJl
dmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAsMTIgQEAgcHVibGljOgogCiAgICAgLy8gU2Nyb2xs
YmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KICAg
ICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihj
b25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFy
Kik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChjb25zdCBJbnRTaXplJik7CisgICAg
dmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOwogICAgIAorICAgIC8vIE5P
VEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xs
T2Zmc2V0IGZyb20gU2Nyb2xsYmFyQ2xpZW50LgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUbyhj
b25zdCBJbnRTaXplJiBuZXdPZmZzZXQpOworCiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0
cyB0aGUgU2Nyb2xsVmlldy4gVGhlIFNjcm9sbFZpZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxz
IGFuZCByZXBhaW50cyB0byB0aGUKICAgICAvLyBob3N0IHdpbmRvdyBpbiB0aGUgd2luZG93J3Mg
Y29vcmRpbmF0ZSBzcGFjZS4KICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBj
b25zdCA9IDA7CkBAIC03OCw4ICs4MCw4IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBJZiB0aGUg
c2Nyb2xsIHZpZXcgZG9lcyBub3QgdXNlIGEgbmF0aXZlIHdpZGdldCwgdGhlbiBpdCB3aWxsIGhh
dmUgY3Jvc3MtcGxhdGZvcm0gU2Nyb2xsYmFycy4gVGhlc2UgZnVuY3Rpb25zCiAgICAgLy8gY2Fu
IGJlIHVzZWQgdG8gb2J0YWluIHRob3NlIHNjcm9sbGJhcnMuCi0gICAgU2Nyb2xsYmFyKiBob3Jp
em9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdl
dCgpOyB9Ci0gICAgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJu
IG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9y
aXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5n
ZXQoKTsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7IH0KICAgICBib29sIGlzU2Nyb2xs
Vmlld1Njcm9sbGJhcihjb25zdCBXaWRnZXQqIGNoaWxkKSBjb25zdCB7IHJldHVybiBob3Jpem9u
dGFsU2Nyb2xsYmFyKCkgPT0gY2hpbGQgfHwgdmVydGljYWxTY3JvbGxiYXIoKSA9PSBjaGlsZDsg
fQogCiAgICAgLy8gRnVuY3Rpb25zIGZvciBzZXR0aW5nIGFuZCByZXRyaWV2aW5nIHRoZSBzY3Jv
bGxpbmcgbW9kZSBpbiBlYWNoIGF4aXMgKGhvcml6b250YWwvdmVydGljYWwpLiBUaGUgbW9kZSBo
YXMgdmFsdWVzIG9mCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJl
dmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTkgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFy
KCkKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVyU2Nyb2xsYmFyKHRoaXMpOwogfQogCi1ib29sIFNj
cm9sbGJhcjo6c2V0VmFsdWUoaW50IHYsIFNjcm9sbFNvdXJjZSBzb3VyY2UpCit2b2lkIFNjcm9s
bGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKCkKIHsKLSAgICB2ID0gbWF4KG1pbih2LCBtX3RvdGFsU2l6
ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKLSAgICBpZiAodmFsdWUoKSA9PSB2KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBzdGF5ZWQgdGhlIHNhbWUuCi0gICAgc2V0Q3VycmVu
dFBvcyh2LCBzb3VyY2UpOwotICAgIHJldHVybiB0cnVlOworICAgIEFTU0VSVChtX2NsaWVudCk7
CisKKyAgICBmbG9hdCBwb3NpdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Ny
b2xsUG9zaXRpb24odGhpcykpOworICAgIGlmIChwb3NpdGlvbiA9PSBtX2N1cnJlbnRQb3MpCisg
ICAgICAgIHJldHVybjsKKworICAgIGludCBvbGRUaHVtYlBvc2l0aW9uID0gdGhlbWUoKS0+dGh1
bWJQb3NpdGlvbih0aGlzKTsKKyAgICBtX2N1cnJlbnRQb3MgPSBwb3NpdGlvbjsKKyAgICB1cGRh
dGVUaHVtYlBvc2l0aW9uKCk7CisgICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQor
ICAgICAgICBzZXRQcmVzc2VkUG9zKG1fcHJlc3NlZFBvcyArIHRoZW1lKCktPnRodW1iUG9zaXRp
b24odGhpcykgLSBvbGRUaHVtYlBvc2l0aW9uKTsgICAgCiB9CiAKIHZvaWQgU2Nyb2xsYmFyOjpz
ZXRQcm9wb3J0aW9uKGludCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSkKQEAgLTEzMSwzMSAr
MTM3LDYgQEAgdm9pZCBTY3JvbGxiYXI6OnNldFN0ZXBzKGludCBsaW5lU3RlcCwgaQogICAgIG1f
cGl4ZWxTdGVwID0gMS4wZiAvIHBpeGVsc1BlclN0ZXA7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpz
Y3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17Ci0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAg
IGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2Fj
aGUoKSkKLSAgICAgICAgYXhPYmplY3RDYWNoZSgpLT5wb3N0Tm90aWZpY2F0aW9uKGF4T2JqZWN0
Q2FjaGUoKS0+Z2V0T3JDcmVhdGUodGhpcyksIDAsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFu
Z2VkLCB0cnVlKTsKLSNlbmRpZgotCi0gICAgLy8gSWdub3JlIHBlcnBlbmRpY3VsYXIgc2Nyb2xs
cy4KLSAgICBpZiAoKG1fb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAoZGly
ZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSA6IChkaXJlY3Rp
b24gPT0gU2Nyb2xsTGVmdCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsUmlnaHQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgZmxvYXQgc3RlcCA9IDA7Ci0gICAgc3dpdGNoIChncmFudWxhcml0
eSkgewotICAgIGNhc2UgU2Nyb2xsQnlMaW5lOiAgICAgc3RlcCA9IG1fbGluZVN0ZXA7ICBicmVh
azsKLSAgICBjYXNlIFNjcm9sbEJ5UGFnZTogICAgIHN0ZXAgPSBtX3BhZ2VTdGVwOyAgYnJlYWs7
Ci0gICAgY2FzZSBTY3JvbGxCeURvY3VtZW50OiBzdGVwID0gbV90b3RhbFNpemU7IGJyZWFrOwot
ICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDogICAgc3RlcCA9IG1fcGl4ZWxTdGVwOyBicmVhazsKLSAg
ICB9Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xs
TGVmdCkKLSAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOwotICAgIGlmIChjbGllbnQo
KSkKLSAgICAgICAgcmV0dXJuIGNsaWVudCgpLT5zY3JvbGwobV9vcmllbnRhdGlvbiwgZ3JhbnVs
YXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwotCi0gICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4
KG1pbihtX2N1cnJlbnRQb3MgKyAoc3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9h
dD4obV90b3RhbFNpemUgLSBtX3Zpc2libGVTaXplKSksIDAuMGYpLCBOb3RGcm9tU2Nyb2xsQW5p
bWF0b3IpOwotfQotCiB2b2lkIFNjcm9sbGJhcjo6dXBkYXRlVGh1bWIoKQogewogI2lmZGVmIFRI
VU1CX1BPU0lUSU9OX0FGRkVDVFNfQlVUVE9OUwpAQCAtMjE1LDcgKzE5Niw3IEBAIHZvaWQgU2Ny
b2xsYmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQoZG8KICAgICB9CiAKICAgICAvLyBIYW5kbGUg
dGhlIGFycm93cyBhbmQgdHJhY2suCi0gICAgaWYgKHNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERp
cmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQorICAgIGlmIChjbGll
bnQoKS0+c2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Ny
b2xsR3JhbnVsYXJpdHkoKSkpCiAgICAgICAgIHN0YXJ0VGltZXJJZk5lZWRlZChkZWxheSk7CiB9
CiAKQEAgLTI4NCwyOCArMjY1LDE0IEBAIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBv
cykKICAgICAgICAgZGVsdGEgPSBtaW4obWF4UG9zIC0gdGh1bWJQb3MsIGRlbHRhKTsKICAgICBl
bHNlIGlmIChkZWx0YSA8IDApCiAgICAgICAgIGRlbHRhID0gbWF4KC10aHVtYlBvcywgZGVsdGEp
OwotICAgIGlmIChkZWx0YSkKLSAgICAgICAgc2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9h
dD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiks
IE5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyOjpzZXRDdXJyZW50
UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNlIHNvdXJjZSkKLXsKLSAgICBpZiAoKHNvdXJjZSAh
PSBGcm9tU2Nyb2xsQW5pbWF0b3IpICYmIGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7Ci0KLSAg
ICBpZiAocG9zID09IG1fY3VycmVudFBvcykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aW50IG9sZFZhbHVlID0gdmFsdWUoKTsKLSAgICBpbnQgb2xkVGh1bWJQb3MgPSB0aGVtZSgpLT50
aHVtYlBvc2l0aW9uKHRoaXMpOwotICAgIG1fY3VycmVudFBvcyA9IHBvczsKLSAgICB1cGRhdGVU
aHVtYlBvc2l0aW9uKCk7Ci0gICAgaWYgKG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQotICAg
ICAgICBzZXRQcmVzc2VkUG9zKG1fcHJlc3NlZFBvcyArIHRoZW1lKCktPnRodW1iUG9zaXRpb24o
dGhpcykgLSBvbGRUaHVtYlBvcyk7Ci0KLSAgICBpZiAodmFsdWUoKSAhPSBvbGRWYWx1ZSAmJiBj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnZhbHVlQ2hhbmdlZCh0aGlzKTsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoZGVsdGEpIHsKKyAgICAgICAgaW50IG5ld1Bvc2l0aW9u
ID0gbHJvdW5kZihzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVt
KCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbikpOworICAgICAgICBpZiAobV9vcmllbnRhdGlvbiA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgY2xpZW50KCktPnNjcm9sbFRvWE9m
ZnNldFdpdGhvdXRBbmltYXRpb24obmV3UG9zaXRpb24pOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjbGllbnQoKS0+c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihuZXdQb3NpdGlv
bik7CisgICAgfQogfQogCiB2b2lkIFNjcm9sbGJhcjo6c2V0SG92ZXJlZFBhcnQoU2Nyb2xsYmFy
UGFydCBwYXJ0KQpAQCAtMzM2LDkgKzMwMywxMiBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3Nl
ZFBhcnQoU2Nyb2xsYmFyCiBib29sIFNjcm9sbGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQp
IHsKLSAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMs
IGV2dCkpCi0gICAgICAgICAgICBzZXRDdXJyZW50UG9zKG1fZHJhZ09yaWdpbiwgTm90RnJvbVNj
cm9sbEFuaW1hdG9yKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmICh0aGVtZSgpLT5zaG91
bGRTbmFwQmFja1RvRHJhZ09yaWdpbih0aGlzLCBldnQpKSB7CisgICAgICAgICAgICBpZiAobV9v
cmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICAgICAgICAgIGNsaWVu
dCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fZHJhZ09yaWdpbik7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdp
dGhvdXRBbmltYXRpb24obV9kcmFnT3JpZ2luKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIgPyAKICAg
ICAgICAgICAgICAgICAgICAgICBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygp
KS54KCkgOgogICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRv
dyhldnQucG9zKCkpLnkoKSk7CkBAIC01MjEsNCArNDkxLDQgQEAgSW50UG9pbnQgU2Nyb2xsYmFy
Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbgogICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29u
dGFpbmluZ1ZpZXcocGFyZW50UG9pbnQpOwogfQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNpb24gNzYxNzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NTIsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAgLy8gTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBwbGF0
Zm9ybXMgdGhhdCBjYW4ndCBzaW1wbHkgdXNlIHRoZSBTY3JvbGxiYXIgYmFzZSBjbGFzcy4gIFJp
Z2h0IG5vdyB0aGUgb25seSBwbGF0Zm9ybSB0aGF0IGlzIG5vdCB1c2luZyB0aGUgYmFzZSBjbGFz
cyBpcyBHVEsuCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVOYXRpdmVT
Y3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKIAorICAgIC8vIENhbGxlZCBi
eSB0aGUgU2Nyb2xsYmFyQ2xpZW50IHdoZW4gdGhlIHNjcm9sbCBvZmZzZXQgY2hhbmdlcy4KKyAg
ICB2b2lkIG9mZnNldERpZENoYW5nZSgpOworCiAgICAgc3RhdGljIGludCBwaXhlbHNQZXJMaW5l
U3RlcCgpIHsgcmV0dXJuIDQwOyB9CiAgICAgc3RhdGljIGZsb2F0IG1pbkZyYWN0aW9uVG9TdGVw
V2hlblBhZ2luZygpIHsgcmV0dXJuIDAuODc1ZjsgfQogICAgIHN0YXRpYyBpbnQgbWF4T3Zlcmxh
cEJldHdlZW5QYWdlcygpOwpAQCAtNjEsNyArNjQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGJvb2wgaXNDdXN0b21TY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRh
dGlvbjsgfQotICAgIAorCiAgICAgaW50IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbHJvdW5kZiht
X2N1cnJlbnRQb3MpOyB9CiAgICAgZmxvYXQgY3VycmVudFBvcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudFBvczsgfQogICAgIGludCBwcmVzc2VkUG9zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVz
c2VkUG9zOyB9CkBAIC03MywxOCArNzYsMTUgQEAgcHVibGljOgogICAgIGludCBsaW5lU3RlcCgp
IGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0ZXA7IH0KICAgICBpbnQgcGFnZVN0ZXAoKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VTdGVwOyB9CiAgICAgZmxvYXQgcGl4ZWxTdGVwKCkgY29uc3QgeyByZXR1
cm4gbV9waXhlbFN0ZXA7IH0KLSAgICAKKwogICAgIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQo
KSBjb25zdCB7IHJldHVybiBtX3ByZXNzZWRQYXJ0OyB9CiAgICAgU2Nyb2xsYmFyUGFydCBob3Zl
cmVkUGFydCgpIGNvbnN0IHsgcmV0dXJuIG1faG92ZXJlZFBhcnQ7IH0KICAgICB2aXJ0dWFsIHZv
aWQgc2V0SG92ZXJlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFBy
ZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwogCiAgICAgdm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0
ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVsc1BlclN0ZXAgPSAxKTsKLSAgICBib29sIHNldFZh
bHVlKGludCwgU2Nyb2xsU291cmNlIHNvdXJjZSk7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGlu
dCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGlu
dCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0KLQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICAKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFt
YWdlUmVjdCk7CiAKQEAgLTE3MiwxMCArMTcyLDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAg
dmlydHVhbCBBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlKCkgY29uc3Q7Ci0KLSAgICBib29s
IHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBTY3JvbGxTb3VyY2Ugc291cmNlKTsKIH07CiAKLX0K
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCisjZW5kaWYgLy8gU2Nyb2xsYmFyX2gK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAkocmV2
aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50Lmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0
b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsMTQgKzQ2LDY4IEBAIFNjcm9sbGJh
ckNsaWVudDo6flNjcm9sbGJhckNsaWVudCgpCiB7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyQ2xpZW50
OjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKQorYm9vbCBTY3Jv
bGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKIHsKKyAgICBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbjsKKyAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcjsKKyAgICBp
ZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSB7Cisg
ICAgICAgIG9yaWVudGF0aW9uID0gVmVydGljYWxTY3JvbGxiYXI7CisgICAgICAgIHNjcm9sbGJh
ciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgb3JpZW50YXRp
b24gPSBIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgICAgICBzY3JvbGxiYXIgPSBob3Jpem9udGFs
U2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAgaWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZsb2F0IHN0ZXAgPSAwOworICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkp
IHsKKyAgICBjYXNlIFNjcm9sbEJ5TGluZToKKyAgICAgICAgc3RlcCA9IHNjcm9sbGJhci0+bGlu
ZVN0ZXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeVBhZ2U6CisgICAgICAg
IHN0ZXAgPSBzY3JvbGxiYXItPnBhZ2VTdGVwKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U2Nyb2xsQnlEb2N1bWVudDoKKyAgICAgICAgc3RlcCA9IHNjcm9sbGJhci0+dG90YWxTaXplKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDoKKyAgICAgICAgc3RlcCA9
IHNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlm
IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCisgICAg
ICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGllcjsKKwogICAgIHJldHVybiBtX3Njcm9sbEFuaW1h
dG9yLT5zY3JvbGwob3JpZW50YXRpb24sIGdyYW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsK
IH0KIAotdm9pZCBTY3JvbGxiYXJDbGllbnQ6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1h
dGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQordm9pZCBT
Y3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKG9mZnNldCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3Jv
bGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0IHgpCit7CisgICAgc2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQoeCwgbV9zY3JvbGxBbmltYXRvci0+Y3VycmVu
dFBvc2l0aW9uKCkueSgpKSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lP
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0IHkpCit7CisgICAgc2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQobV9zY3JvbGxBbmltYXRvci0+Y3VycmVudFBvc2l0aW9u
KCkueCgpLCB5KSk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXRG
cm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgbV9zY3JvbGxBbmlt
YXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3Mp
OworICAgIC8vIFRlbGwgdGhlIGRlcml2ZWQgY2xhc3MgdG8gc2Nyb2xsIGl0cyBjb250ZW50cy4K
KyAgICBzZXRTY3JvbGxPZmZzZXQob2Zmc2V0KTsKKworICAgIC8vIFRlbGwgdGhlIHNjcm9sbGJh
cnMgdG8gdXBkYXRlIHRoZWlyIHRodW1iIHBvc3Rpb25zLgorICAgIGlmIChTY3JvbGxiYXIqIGhv
cml6b250YWxTY3JvbGxiYXIgPSB0aGlzLT5ob3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAg
IGhvcml6b250YWxTY3JvbGxiYXItPm9mZnNldERpZENoYW5nZSgpOworICAgIGlmIChTY3JvbGxi
YXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gdGhpcy0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAg
ICAgdmVydGljYWxTY3JvbGxiYXItPm9mZnNldERpZENoYW5nZSgpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGll
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGll
bnQuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxi
YXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDE0IEBACiAjaWZuZGVmIFNj
cm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCiAKLSNpbmNsdWRlICJJ
bnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
RmxvYXRQb2ludDsKK2NsYXNzIFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbEFuaW1h
dG9yOwogCiBjbGFzcyBTY3JvbGxiYXJDbGllbnQgewpAQCAtNDAsMTggKzQxLDIzIEBAIHB1Ymxp
YzoKICAgICBTY3JvbGxiYXJDbGllbnQoKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJDbGllbnQo
KTsKIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGll
cik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcyk7CisgICAgYm9vbCBzY3JvbGwoU2Ny
b2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOwor
ICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQm
KTsKKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeCk7Cisg
ICAgdm9pZCBzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0IHgpOwogCi0gICAg
dmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikg
Y29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9u
KGNvbnN0IEludFBvaW50JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmFyKikgPSAwOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50
YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxi
YXIqKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0
KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQWN0
aXZlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50
KCkgY29uc3QgPSAwOwotCiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50
UmVjdD4mKSBjb25zdCB7IH0KIAorICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG92ZXJy
aWRlbiBieSBzdWJjbGFzc2VzIHRvIHBlcmZvcm0gdGhlIGFjdHVhbAorICAgIC8vIHNjcm9sbCBv
ZiB0aGUgY29udGVudC4KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IElu
dFBvaW50JikgPSAwOworCisKICAgICAvLyBDb252ZXJ0IHBvaW50cyBhbmQgcmVjdHMgYmV0d2Vl
biB0aGUgc2Nyb2xsYmFyIGFuZCBpdHMgY29udGFpbmluZyB2aWV3LgogICAgIC8vIFRoZSBjbGll
bnQgbmVlZHMgdG8gaW1wbGVtZW50IHRoZXNlIGluIG9yZGVyIHRvIGJlIGF3YXJlIG9mIGxheW91
dCBlZmZlY3RzCiAgICAgLy8gbGlrZSBDU1MgdHJhbnNmb3Jtcy4KQEAgLTcyLDkgKzc4LDE3IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNv
bnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIFNjcm9sbGJh
ciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisKIHBy
aXZhdGU6CisgICAgLy8gTk9URTogT25seSBjYWxsZWQgZnJvbSB0aGUgU2Nyb2xsQW5pbWF0b3Iu
CisgICAgZnJpZW5kIGNsYXNzIFNjcm9sbEFuaW1hdG9yOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zm
c2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOworCiAgICAgT3duUHRyPFNjcm9sbEFu
aW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogfTsKIAotfQotI2VuZGlmCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxiYXJDbGllbnRfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAJKHJldmlzaW9uIDc2MTc4KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg0LDcgKzg0LDEwIEBAIHN0YXRpYyB2b2lkIHNjcm9sbGJhckVmbEVkamVNZXNz
YWdlKHZvaWQKIAogICAgIG0gPSBzdGF0aWNfY2FzdDxFZGplX01lc3NhZ2VfRmxvYXQqPihtc2cp
OwogICAgIHYgPSBtLT52YWwgKiAodGhhdC0+dG90YWxTaXplKCkgLSB0aGF0LT52aXNpYmxlU2l6
ZSgpKTsKLSAgICB0aGF0LT5zZXRWYWx1ZSh2LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmlt
YXRvcik7CisgICAgaWYgKHRoYXQtPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikKKyAgICAgICAgdGhhdC0+Y2xpZW50KCktPnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRp
b24odik7CisgICAgZWxzZQorICAgICAgICB0aGF0LT5jbGllbnQoKS0+c2Nyb2xsVG9ZT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbih2KTsKIH0KIAogdm9pZCBTY3JvbGxiYXJFZmw6OnNldFBhcmVudChT
Y3JvbGxWaWV3KiB2aWV3KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5G
cmFtZVNjcm9sbGJhckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CkBAIC0xMDgsNyArMTA5LDEwIEBAIHZvaWQgTWFpbkZyYW1lU2Nyb2xs
YmFyR3RrOjp1cGRhdGVUaHVtYlAKIAogdm9pZCBNYWluRnJhbWVTY3JvbGxiYXJHdGs6Omd0a1Zh
bHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50KiwgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrKiB0aGF0KQog
ewotICAgIHRoYXQtPnNldFZhbHVlKHN0YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0
X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudC5nZXQoKSkpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3Ip
OworICAgIGlmICh0aGF0LT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisg
ICAgICAgIHRoYXQtPmNsaWVudCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHN0
YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVu
dC5nZXQoKSkpKTsKKyAgICBlbHNlCisgICAgICAgIHRoYXQtPmNsaWVudCgpLT5zY3JvbGxUb1lP
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKHN0YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0
X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudC5nZXQoKSkpKTsKIH0KIAogdm9pZCBNYWluRnJhbWVT
Y3JvbGxiYXJHdGs6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYgcmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRv
ck1hYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxB
bmltYXRvck1hYy5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9TY3JvbGxBbmltYXRvck1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBA
CiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KIApAQCAtNDYsMTAgKzQ1LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1h
dG9yTWFjKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJP
cmllbnRhdGlvbiwgZmxvYXQgcG9zaXRpb24pOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09m
ZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOwogCiAgICAgLy8gQ2FsbGVk
IGJ5IHRoZSBTY3JvbGxBbmltYXRpb25IZWxwZXJEZWxlZ2F0ZS4KLSAgICBGbG9hdFBvaW50IGN1
cnJlbnRQb3NpdGlvbigpIGNvbnN0OwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChj
b25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZpc2lv
biA3NjE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFNNT09U
SF9TQ1JPTExJTkcpCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3JNYWMuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKIApAQCAtMTYxLDIz
ICsxNjIsMTcgQEAgYm9vbCBTY3JvbGxBbmltYXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhcgogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjpzZXRTY3JvbGxQb3Np
dGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZs
b2F0IHBvcykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCiB7CiAgICAgW21fc2Nyb2xsQW5pbWF0
aW9uSGVscGVyLmdldCgpIF9zdG9wUnVuXTsKLSAgICBTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xs
UG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3MpOwotfQotCi1GbG9hdFBv
aW50IFNjcm9sbEFuaW1hdG9yTWFjOjpjdXJyZW50UG9zaXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBGbG9hdFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpOworICAgIFNjcm9s
bEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKIH0KIAog
dm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9h
dFBvaW50JiBuZXdQb3NpdGlvbikKIHsKICAgICBtX2N1cnJlbnRQb3NYID0gbmV3UG9zaXRpb24u
eCgpOwogICAgIG1fY3VycmVudFBvc1kgPSBuZXdQb3NpdGlvbi55KCk7Ci0KLSAgICBtX2NsaWVu
dC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBt
X2N1cnJlbnRQb3NZKSk7CisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9s
bGJhclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3Jv
bGxiYXJRdC5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAKICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CkBAIC03
NiwxNyArNzcsMTcgQEAgYm9vbCBTY3JvbGxiYXI6OmNvbnRleHRNZW51KGNvbnN0IFBsYXRmbwog
ICAgICAgICBjb25zdCBRUG9pbnQgcG9zID0gY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2
ZW50LnBvcygpKTsKICAgICAgICAgbW92ZVRodW1iKGhvcml6b250YWwgPyBwb3MueCgpIDogcG9z
LnkoKSk7CiAgICAgfSBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxUb3ApCi0g
ICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxC
eURvY3VtZW50KTsKKyAgICAgICAgY2xpZW50KCktPnNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xs
TGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rpb25T
ZWxlY3RlZCA9PSBhY3RTY3JvbGxCb3R0b20pCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50KTsKKyAgICAgICAgY2xp
ZW50KCktPnNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3Jv
bGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQYWdlVXAp
Ci0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3Jv
bGxCeVBhZ2UpOworICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxM
ZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0
ZWQgPT0gYWN0UGFnZURvd24pCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmln
aHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBhZ2UpOworICAgICAgICBjbGllbnQoKS0+c2Nyb2xs
KGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7CiAg
ICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVXApCi0gICAgICAgIHNjcm9s
bChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeUxpbmUpOworICAg
ICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAs
IFNjcm9sbEJ5TGluZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xs
RG93bikKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERv
d24sIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGNsaWVudCgpLT5zY3JvbGwoaG9yaXpvbnRhbCA/
IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lKTsKICNlbmRpZiAvLyBRVF9O
T19DT05URVhUTUVOVQogICAgIHJldHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2JpbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEw
IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCkBAIC01
MzIsMTIgKzUzMiwxMiBAQCBib29sIFBvcHVwTWVudVdpbjo6c2Nyb2xsVG9SZXZlYWxTZWxlY3Rp
CiAgICAgaW50IGluZGV4ID0gZm9jdXNlZEluZGV4KCk7CiAKICAgICBpZiAoaW5kZXggPCBtX3Nj
cm9sbE9mZnNldCkgewotICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUoaW5kZXgsIFNjcm9s
bGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50Ojpz
Y3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGluZGV4KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCiAgICAgaWYgKGluZGV4ID49IG1fc2Nyb2xsT2Zmc2V0ICsgdmlzaWJsZUl0
ZW1zKCkpIHsKLSAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKGluZGV4IC0gdmlzaWJsZUl0
ZW1zKCkgKyAxLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgICAgIFNj
cm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCAtIHZp
c2libGVJdGVtcygpICsgMSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjcw
LDIxICs2NzAsMjMgQEAgaW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcgog
ICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3Njcm9s
bGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVT
aXplKCkpIDogMDsKIH0KIAotdm9pZCBQb3B1cE1lbnVXaW46OnNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK2ludCBQb3B1cE1lbnVXaW46OnNjcm9s
bFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYmFyKQotICAg
ICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Ny
b2xsQW5pbWF0b3IpOworICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKK30KKwordm9pZCBQb3B1
cE1lbnVXaW46OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAg
IHNjcm9sbFRvKG9mZnNldC55KCkpOwogfQogCi12b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQordm9pZCBQb3B1cE1lbnVXaW46OnNjcm9sbFRvKGlu
dCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyKTsKIAogICAgIGlmICghbV9wb3B1
cCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IG9mZnNldCA9IHNjcm9sbEJhci0+dmFsdWUo
KTsKLQogICAgIGlmIChtX3Njcm9sbE9mZnNldCA9PSBvZmZzZXQpCiAgICAgICAgIHJldHVybjsK
IApAQCAtOTkxLDcgKzk5Myw4IEBAIExSRVNVTFQgUG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQg
aFduZCwKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIC0taTsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHNjcm9sbGJhcigpLT5zY3JvbGwoaSA+IDAgPyBTY3Jv
bGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwgYWJzKGkpKTsKKworICAgICAgICAgICAg
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoaSA+IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNj
cm9sbEJ5TGluZSwgYWJzKGkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgJKHJldmlzaW9u
IDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRXYXND
bGlja2VkKGJvb2wgYiA9IHRydWUpIHsgbV93YXNDbGlja2VkID0gYjsgfQogICAgIGJvb2wgd2Fz
Q2xpY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzQ2xpY2tlZDsgfQogCi0gICAgdm9pZCBzZXRT
Y3JvbGxPZmZzZXQoaW50IG9mZnNldCkgeyBtX3Njcm9sbE9mZnNldCA9IG9mZnNldDsgfQogICAg
IGludCBzY3JvbGxPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbE9mZnNldDsgfQogCiAg
ICAgYm9vbCBzY3JvbGxUb1JldmVhbFNlbGVjdGlvbigpOwpAQCAtOTIsMTEgKzkxLDE1IEBAIHBy
aXZhdGU6CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKICAgICB2aXJ0dWFsIGludCBzY3JvbGxT
aXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQg
c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNj
cm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRl
U2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBi
b29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0
dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bGJhci5nZXQoKTsgfQorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
YnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisg
ICAgdm9pZCBzY3JvbGxUbyhpbnQgb2Zmc2V0KTsKIAogICAgIHZvaWQgY2FsY3VsYXRlUG9zaXRp
b25BbmRTaXplKGNvbnN0IEludFJlY3QmLCBGcmFtZVZpZXcqKTsKICAgICB2b2lkIGludmFsaWRh
dGVJdGVtKGludCBpbmRleCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNiwyMyArMTMwNiwzNiBAQCB2b2lk
IFJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vyc2l2ZWx5KGluCiAgICAgfQogfQogCi12b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHksIGJvb2wgdXBkYXRlU2Nyb2xs
YmFycywgYm9vbCByZXBhaW50KQordm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoaW50
IHgsIGludCB5KQoreworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKEludFBvaW50KHgsIHkpKTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xs
VG8oaW50IHgsIGludCB5KQogewogICAgIFJlbmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAg
ICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChib3gtPnN0eWxlKCktPm92
ZXJmbG93WCgpICE9IE9NQVJRVUVFKSB7Ci0gICAgICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0gICAg
ICAgIGlmICh5IDwgMCkgeSA9IDA7CisgICAgICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHgg
PSAwOworICAgICAgICBpZiAoeSA8IDApCisgICAgICAgICAgICB5ID0gMDsKICAgICAKICAgICAg
ICAgLy8gQ2FsbCB0aGUgc2Nyb2xsV2lkdGgvSGVpZ2h0IGZ1bmN0aW9ucyBzbyB0aGF0IHRoZSBk
aW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQgaWYgdGhleSBuZWVkCiAgICAgICAgIC8vIHRvIGJl
IChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2NrcykuCiAgICAgICAgIGludCBtYXhYID0gc2Nyb2xs
V2lkdGgoKSAtIGJveC0+Y2xpZW50V2lkdGgoKTsKKyAgICAgICAgaWYgKG1heFggPCAwKQorICAg
ICAgICAgICAgbWF4WCA9IDA7CiAgICAgICAgIGludCBtYXhZID0gc2Nyb2xsSGVpZ2h0KCkgLSBi
b3gtPmNsaWVudEhlaWdodCgpOwotICAgICAgICAKLSAgICAgICAgaWYgKHggPiBtYXhYKSB4ID0g
bWF4WDsKLSAgICAgICAgaWYgKHkgPiBtYXhZKSB5ID0gbWF4WTsKKyAgICAgICAgaWYgKG1heFkg
PCAwKQorICAgICAgICAgICAgbWF4WSA9IDA7CisKKyAgICAgICAgaWYgKHggPiBtYXhYKQorICAg
ICAgICAgICAgeCA9IG1heFg7CisgICAgICAgIGlmICh5ID4gbWF4WSkKKyAgICAgICAgICAgIHkg
PSBtYXhZOwogICAgIH0KICAgICAKICAgICAvLyBGSVhNRTogRXZlbnR1YWxseSwgd2Ugd2lsbCB3
YW50IHRvIHBlcmZvcm0gYSBibGl0LiAgRm9yIG5vdyBuZXZlcgpAQCAtMTM4NiwxNiArMTM5OSw5
IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCAKICAgICB9CiAKICAg
ICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCByZXBhaW50IG9mIG91ciBvYmplY3QuCi0gICAgaWYg
KHZpZXcgJiYgcmVwYWludCkKKyAgICBpZiAodmlldykKICAgICAgICAgcmVuZGVyZXIoKS0+cmVw
YWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRDb250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsKIAot
ICAgIGlmICh1cGRhdGVTY3JvbGxiYXJzKSB7Ci0gICAgICAgIGlmIChtX2hCYXIpCi0gICAgICAg
ICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9t
U2Nyb2xsQW5pbWF0b3IpOwotICAgICAgICBpZiAobV92QmFyKQotICAgICAgICAgICAgbV92QmFy
LT5zZXRWYWx1ZShtX3Njcm9sbFksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsK
LSAgICB9Ci0KICAgICAvLyBTY2hlZHVsZSB0aGUgc2Nyb2xsIERPTSBldmVudC4KICAgICByZW5k
ZXJlcigpLT5ub2RlKCktPmRvY3VtZW50KCktPmV2ZW50UXVldWUoKS0+ZW5xdWV1ZVNjcm9sbEV2
ZW50KHJlbmRlcmVyKCktPm5vZGUoKSwgRXZlbnRRdWV1ZTo6U2Nyb2xsRXZlbnRFbGVtZW50VGFy
Z2V0KTsKIH0KQEAgLTE2NDksMzYgKzE2NTUsMTggQEAgaW50IFJlbmRlckxheWVyOjpzY3JvbGxT
aXplKFNjcm9sbGJhck9yaQogICAgIHJldHVybiBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFJlbmRl
ckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZz
ZXQpCit2b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKIHsKLSAgICBpZiAobV9oQmFyKQotICAgICAgICBtX2hCYXItPnNldFZhbHVlKG9mZnNl
dC54KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKLSAgICBpZiAobV92QmFyKQot
ICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9s
bEFuaW1hdG9yKTsKKyAgICBzY3JvbGxUbyhvZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKIH0KIAot
dm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopCitpbnQgUmVuZGVyTGF5
ZXI6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIC8v
IFVwZGF0ZSBzY3JvbGwgcG9zaXRpb24gZnJvbSBzY3JvbGxiYXJzLgotCi0gICAgYm9vbCBuZWVk
VXBkYXRlID0gZmFsc2U7Ci0gICAgaW50IG5ld1ggPSBzY3JvbGxYT2Zmc2V0KCk7Ci0gICAgaW50
IG5ld1kgPSBtX3Njcm9sbFk7Ci0gICAgCi0gICAgaWYgKG1faEJhcikgewotICAgICAgICBuZXdY
ID0gbV9oQmFyLT52YWx1ZSgpOwotICAgICAgICBpZiAobmV3WCAhPSBzY3JvbGxYT2Zmc2V0KCkp
Ci0gICAgICAgICAgIG5lZWRVcGRhdGUgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChtX3ZCYXIp
IHsKLSAgICAgICAgbmV3WSA9IG1fdkJhci0+dmFsdWUoKTsKLSAgICAgICAgaWYgKG5ld1kgIT0g
bV9zY3JvbGxZKQotICAgICAgICAgICBuZWVkVXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBp
ZiAobmVlZFVwZGF0ZSkKLSAgICAgICAgc2Nyb2xsVG9PZmZzZXQobmV3WCwgbmV3WSwgZmFsc2Up
OworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikKKyAgICAgICAgcmV0dXJuIHNjcm9sbFhPZmZzZXQoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxZOworICAgIHJldHVybiAwOwogfQogCiBib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNv
bnN0CkBAIC0xNjg3LDcgKzE2NzUsNiBAQCBib29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNv
bnN0CiAgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZl
KCk7CiB9CiAKLQogc3RhdGljIEludFJlY3QgY29ybmVyUmVjdChjb25zdCBSZW5kZXJMYXllciog
bGF5ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5kcykKIHsKICAgICBpbnQgaG9yaXpvbnRhbFRoaWNr
bmVzczsKQEAgLTIwMzEsOCArMjAxOCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU92ZXJm
bG93U3RhdHVzKGIKICAgICB9CiB9CiAKLXZvaWQKLVJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJ
bmZvQWZ0ZXJMYXlvdXQoKQordm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVy
TGF5b3V0KCkKIHsKICAgICBSZW5kZXJCb3gqIGJveCA9IHJlbmRlckJveCgpOwogICAgIGlmICgh
Ym94KQpAQCAtMjEyNCwyOCArMjExMCwxNiBAQCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5m
b0FmdGVyTGF5b3V0CiAgICAgICAgIGludCBwYWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRX
aWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdp
ZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsKICAgICAgICAg
bV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVw
KTsKICAgICAgICAgbV9oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdp
ZHRoKTsKLSAgICAgICAgLy8gRXhwbGljaXRseSBzZXQgdGhlIGhvcml6b250YWwgc2Nyb2xsIHZh
bHVlLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhCi0gICAgICAgIC8vIHJpZ2h0LXRvLWxlZnQg
c2Nyb2xsYWJsZSBhcmVhJ3Mgd2lkdGggKG9yIGNvbnRlbnQgd2lkdGgpIGNoYW5nZXMsIHRoZQot
ICAgICAgICAvLyB0b3AgcmlnaHQgY29ybmVyIG9mIHRoZSBjb250ZW50IGRvZXNuJ3Qgc2hpZnQg
d2l0aCByZXNwZWN0IHRvIHRoZSB0b3AKLSAgICAgICAgLy8gcmlnaHQgY29ybmVyIG9mIHRoZSBh
cmVhLiBDb25jZXB0dWFsbHksIHJpZ2h0LXRvLWxlZnQgYXJlYXMgaGF2ZQotICAgICAgICAvLyB0
aGVpciBvcmlnaW4gYXQgdGhlIHRvcC1yaWdodCwgYnV0IFJlbmRlckxheWVyIGlzIHRvcC1sZWZ0
IG9yaWVudGVkLAotICAgICAgICAvLyBzbyB0aGlzIGlzIG5lZWRlZCB0byBrZWVwIGV2ZXJ5dGhp
bmcgd29ya2luZy4KLSAgICAgICAgbV9oQmFyLT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCksIFNj
cm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikg
ewogICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gYm94LT5jbGllbnRIZWlnaHQoKTsKICAgICAg
ICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxpbnQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6
bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6
bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwgMSk7CiAgICAgICAgIG1fdkJhci0+c2V0U3RlcHMo
U2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdkJh
ci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIG1fc2Nyb2xsSGVpZ2h0KTsKLSAgICAgICAg
Ly8gRXhwbGljaXRseSBzZXQgdGhlIHZlcnRpY2FsIHNjcm9sbCB2YWx1ZS4gIFRoaXMgZW5zdXJl
cyB0aGF0IHdoZW4gYQotICAgICAgICAvLyByaWdodC10by1sZWZ0IHZlcnRpY2FsIHdyaXRpbmct
bW9kZSBzY3JvbGxhYmxlIGFyZWEncyBoZWlnaHQgKG9yIGNvbnRlbnQgaGVpZ2h0KSBjaGFuZ2Vz
LCB0aGUKLSAgICAgICAgLy8gYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgY29udGVudCBkb2Vz
bid0IHNoaWZ0IHdpdGggcmVzcGVjdCB0byB0aGUgYm90dG9tCi0gICAgICAgIC8vIHJpZ2h0IGNv
cm5lciBvZiB0aGUgYXJlYS4gQ29uY2VwdHVhbGx5LCByaWdodC10by1sZWZ0IHZlcnRpY2FsIHdy
aXRpbmctbW9kZSBhcmVhcyBoYXZlCi0gICAgICAgIC8vIHRoZWlyIG9yaWdpbiBhdCB0aGUgYm90
dG9tLXJpZ2h0LCBidXQgUmVuZGVyTGF5ZXIgaXMgdG9wLWxlZnQgb3JpZW50ZWQsCi0gICAgICAg
IC8vIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nLgotICAgICAg
ICBtX3ZCYXItPnNldFZhbHVlKHNjcm9sbFlPZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Ny
b2xsQW5pbWF0b3IpOwogICAgIH0KICAKKyAgICBzY3JvbGxUb09mZnNldChzY3JvbGxYT2Zmc2V0
KCksIHNjcm9sbFlPZmZzZXQoKSk7CisgCiAgICAgaWYgKHJlbmRlcmVyKCktPm5vZGUoKSAmJiBy
ZW5kZXJlcigpLT5kb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoRG9jdW1lbnQ6Ok9WRVJGTE9X
Q0hBTkdFRF9MSVNURU5FUikpCiAgICAgICAgIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGhvcml6b250
YWxPdmVyZmxvdywgdmVydGljYWxPdmVyZmxvdyk7CiB9CkBAIC0yMzAwLDE1ICsyMjc0LDcgQEAg
Ym9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92ZXJmbG93Q29udHJvbAogCiBib29sIFJlbmRlckxh
eWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCiB7Ci0gICAgYm9vbCBkaWRIb3Jpem9udGFs
U2Nyb2xsID0gZmFsc2U7Ci0gICAgYm9vbCBkaWRWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlOwotCi0g
ICAgaWYgKG1faEJhcikKLSAgICAgICAgZGlkSG9yaXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Ny
b2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwotICAgIGlmIChtX3ZCYXIp
Ci0gICAgICAgIGRpZFZlcnRpY2FsU2Nyb2xsID0gbV92QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBn
cmFudWxhcml0eSwgbXVsdGlwbGllcik7Ci0KLSAgICByZXR1cm4gKGRpZEhvcml6b250YWxTY3Jv
bGwgfHwgZGlkVmVydGljYWxTY3JvbGwpOworICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VS
ZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVoYXZpb3IsIFJlbmRlck9iamVjdCAqcGFpbnRpbmdS
b290KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9u
IDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBAQCBwdWJsaWM6CiAgICAgaW50IHNjcm9sbFhPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFggKyBtX3Njcm9sbE9yaWdpbi54KCk7IH0KICAg
ICBpbnQgc2Nyb2xsWU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsWSArIG1fc2Nyb2xs
T3JpZ2luLnkoKTsgfQogCi0gICAgdm9pZCBzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHksIGJv
b2wgdXBkYXRlU2Nyb2xsYmFycyA9IHRydWUsIGJvb2wgcmVwYWludCA9IHRydWUpOworICAgIHZv
aWQgc2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5KTsKICAgICB2b2lkIHNjcm9sbFRvWE9mZnNl
dChpbnQgeCkgeyBzY3JvbGxUb09mZnNldCh4LCBtX3Njcm9sbFkgKyBtX3Njcm9sbE9yaWdpbi55
KCkpOyB9CiAgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQo
bV9zY3JvbGxYICsgbV9zY3JvbGxPcmlnaW4ueCgpLCB5KTsgfQogICAgIHZvaWQgc2Nyb2xsUmVj
dFRvVmlzaWJsZShjb25zdCBJbnRSZWN0JiwgYm9vbCBzY3JvbGxUb0FuY2hvciA9IGZhbHNlLCBj
b25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50
ZXJJZk5lZWRlZCwgY29uc3QgU2Nyb2xsQWxpZ25tZW50JiBhbGlnblkgPSBTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduQ2VudGVySWZOZWVkZWQpOwpAQCAtNTE1LDggKzUxNSw4IEBAIHByaXZhdGU6CiAK
ICAgICAvLyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNlCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGludCBzY3Jv
bGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0
ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQ
cmVzZW50KCkgY29uc3Q7CkBAIC01MjQsNyArNTI0LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNv
bnN0OwotICAgIAorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkg
dGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAg
dm9pZCBzY3JvbGxUbyhpbnQgeCwgaW50IHkpOworCiAgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZz
ZXQoY29uc3QgU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgCiAgICAgdm9pZCB1cGRhdGVPdmVyZmxv
d1N0YXR1cyhib29sIGhvcml6b250YWxPdmVyZmxvdywgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93KTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlz
aW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00OTUsOSArNDk1LDcgQEAgYm9vbCBSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxUb1JldmVhbEVsZW1lbgogICAgIGVsc2UKICAgICAgICAgbmV3T2Zmc2V0ID0gaW5kZXgg
LSBudW1WaXNpYmxlSXRlbXMoKSArIDE7CiAKLSAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0
OwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNl
dCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIFNjcm9sbGJhckNsaWVu
dDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihuZXdPZmZzZXQpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC01MDksMTIgKzUwNywxMiBAQCBib29sIFJlbmRlckxpc3RCb3g6Omxp
c3RJbmRleElzVmlzaWJsZShpCiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xsKFNjcm9sbERp
cmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBt
dWx0aXBsaWVyLCBOb2RlKiopCiB7Ci0gICAgcmV0dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9s
bChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gU2Nyb2xs
YmFyQ2xpZW50OjpzY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiB9
CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6bG9naWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0
aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIsIE5vZGUqKikKIHsKLSAgICByZXR1cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGxv
Z2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwobG9naWNh
bFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
LCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpOwogfQogCiB2b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgpCkBAIC01MzAsMjAgKzUyOCwyNCBAQCBpbnQgUmVuZGVyTGlzdEJveDo6c2Ny
b2xsU2l6ZShTY3JvbGxiYXJPCiAgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxT
Y3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlz
aWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK2ludCBSZW5kZXJMaXN0Qm94
OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdAogewotICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xs
QW5pbWF0b3IpOworICAgIHJldHVybiBtX2luZGV4T2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckxp
c3RCb3g6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKQordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKLSAgICBpbnQgbmV3T2Zmc2V0
ID0gbV92QmFyLT52YWx1ZSgpOwotICAgIGlmIChuZXdPZmZzZXQgIT0gbV9pbmRleE9mZnNldCkg
ewotICAgICAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwotICAgICAgICByZXBhaW50KCk7
Ci0gICAgICAgIG5vZGUoKS0+ZG9jdW1lbnQoKS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlU2Nyb2xs
RXZlbnQobm9kZSgpLCBFdmVudFF1ZXVlOjpTY3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwotICAg
IH0KKyAgICBzY3JvbGxUbyhvZmZzZXQueSgpKTsKK30KKwordm9pZCBSZW5kZXJMaXN0Qm94Ojpz
Y3JvbGxUbyhpbnQgbmV3T2Zmc2V0KQoreworICAgIGlmIChuZXdPZmZzZXQgPT0gbV9pbmRleE9m
ZnNldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsK
KyAgICByZXBhaW50KCk7CisgICAgbm9kZSgpLT5kb2N1bWVudCgpLT5ldmVudFF1ZXVlKCktPmVu
cXVldWVTY3JvbGxFdmVudChub2RlKCksIEV2ZW50UXVldWU6OlNjcm9sbEV2ZW50RWxlbWVudFRh
cmdldCk7CiB9CiAKIGludCBSZW5kZXJMaXN0Qm94OjppdGVtSGVpZ2h0KCkgY29uc3QKQEAgLTU4
OSw5ICs1OTEsOCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAg
ICAgaW50IGluZGV4ID0gbmV3VG9wIC8gaXRlbUhlaWdodCgpOwogICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPj0gbnVtSXRlbXMoKSB8fCBpbmRleCA9PSBtX2luZGV4T2Zmc2V0KQogICAgICAg
ICByZXR1cm47Ci0gICAgbV9pbmRleE9mZnNldCA9IGluZGV4OwotICAgIGlmIChtX3ZCYXIpCi0g
ICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5kZXgsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKKyAgICAKKyAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhv
dXRBbmltYXRpb24oaW5kZXgpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGlu
dCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24g
NzYxNzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw4ICs5Niw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxiYXJD
bGllbnQgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxP
ZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihT
Y3JvbGxiYXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNj
cm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBj
b25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9IC8vIFdlIGRvbid0IHN1cHBvcnQgcmVzaXplIG9uIGxpc3QgYm94ZXMg
eWV0LiAgSWYgd2UgZGlkIHRoaXMgd291bGQgaGF2ZSB0byBjaGFuZ2UuCkBAIC0xMDUsNiArMTA1
LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmlu
Z1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7
CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1Zp
ZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFs
IEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2
ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fdkJhci5nZXQoKTsgfQorCisgICAg
Ly8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRT
Y3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQg
bmV3T2Zmc2V0KTsKIAogICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNT
Y3JvbGxiYXIpOwogICAgIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNYXJxdWVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHJldmlz
aW9uIDc2MTc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsOSArMTcxLDkgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjpz
dGFydCgpCiAKICAgICBpZiAoIW1fc3VzcGVuZGVkICYmICFtX3N0b3BwZWQpIHsKICAgICAgICAg
aWYgKGlzSG9yaXpvbnRhbCgpKQotICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQo
bV9zdGFydCwgMCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRv
T2Zmc2V0KG1fc3RhcnQsIDApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2xheWVyLT5z
Y3JvbGxUb09mZnNldCgwLCBtX3N0YXJ0LCBmYWxzZSwgZmFsc2UpOworICAgICAgICAgICAgbV9s
YXllci0+c2Nyb2xsVG9PZmZzZXQoMCwgbV9zdGFydCk7CiAgICAgfQogICAgIGVsc2UgewogICAg
ICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlzaW9uIDc2MTc4
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSwyMSArNDM5LDIzIEBAIGludCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6c2Nyb2xsU2l6ZShTY3IKICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUo
KSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgV2ViUG9wdXBN
ZW51UHJveHlXaW46OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKK2ludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xs
YmFyKikgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxiYXIpCi0gICAgICAgIG1fc2Nyb2xsYmFy
LT5zZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cisg
ICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2lu
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxU
byhvZmZzZXQueSgpKTsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Ny
b2xsVG8oaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlQobV9zY3JvbGxiYXIpOwogCiAgICAgaWYg
KCFtX3BvcHVwKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgb2Zmc2V0ID0gc2Nyb2xsQmFy
LT52YWx1ZSgpOwotCiAgICAgaWYgKG1fc2Nyb2xsT2Zmc2V0ID09IG9mZnNldCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03MjAsNyArNzIyLDggQEAgTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdp
bjo6b25Nb3VzZVdoZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAtLWk7CiAgICAgfQotICAg
IHNjcm9sbGJhcigpLT5zY3JvbGwoaSA+IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9s
bEJ5TGluZSwgYWJzKGkpKTsKKworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAwID8g
U2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKQEAgLTkyMiwxMiArOTI1LDEyIEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46
OnNjcm9sbFRvUmV2ZWEKICAgICBpbnQgaW5kZXggPSBmb2N1c2VkSW5kZXgoKTsKIAogICAgIGlm
IChpbmRleCA8IG1fc2Nyb2xsT2Zmc2V0KSB7Ci0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1
ZShpbmRleCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgICAgICBTY3Jv
bGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoaW5kZXggPj0gbV9zY3JvbGxPZmZz
ZXQgKyB2aXNpYmxlSXRlbXMoKSkgewotICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUoaW5k
ZXggLSB2aXNpYmxlSXRlbXMoKSArIDEsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9y
KTsKKyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVBy
b3h5V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQ
b3B1cE1lbnVQcm94eVdpbi5oCShyZXZpc2lvbiA3NjE3OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAs
MTEgKzYwLDE1IEBAIHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKICAgICB2aXJ0
dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5n
ZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24o
V2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQorCisgICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxP
ZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQgb2Zmc2V0
KTsKIAogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKICAgICBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyBXZWJQb3B1cE1lbnVQcm94eVduZFByb2MoSFdORCwgVUlOVCwgV1BB
UkFNLCBMUEFSQU0pOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xs
YmFySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2Nyb2xsYmFySW1wbC5jcHAJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy
LDcgQEAgaW50IFdlYlNjcm9sbGJhcjo6ZGVmYXVsdFRoaWNrbmVzcygpCiAKIFdlYlNjcm9sbGJh
ckltcGw6OldlYlNjcm9sbGJhckltcGwoV2ViU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIE9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKQogICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9zY3Jv
bGxPZmZzZXQoMCkKIHsKICAgICBtX3Njcm9sbGJhciA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZl
U2Nyb2xsYmFyKAogICAgICAgICBzdGF0aWNfY2FzdDxTY3JvbGxiYXJDbGllbnQqPih0aGlzKSwK
QEAgLTg5LDEyICs5MCwxNSBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldExvY2F0aW9uKGNv
bnN0CiAKIGludCBXZWJTY3JvbGxiYXJJbXBsOjp2YWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fc2Nyb2xsYmFyLT52YWx1ZSgpOworICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKIH0KIAog
dm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRWYWx1ZShpbnQgcG9zaXRpb24pCiB7Ci0gICAgbV9z
Y3JvbGxiYXItPnNldFZhbHVlKHBvc2l0aW9uLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmlt
YXRvcik7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIpCisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9YT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihwb3NpdGlvbik7CisgICAgZWxzZQorICAgICAgICBXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24ocG9zaXRp
b24pOwogfQogCiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldERvY3VtZW50U2l6ZShpbnQgc2l6
ZSkKQEAgLTExMiw3ICsxMTYsOCBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbChTY3Jv
bGxEaXJlCiAgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERv
d247CiAgICAgZWxzZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNj
cm9sbFVwOwotICAgIG1fc2Nyb2xsYmFyLT5zY3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBsaWVyKTsKKworICAgIFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlwbGllcik7CiB9CiAKIHZvaWQg
V2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2FudmFzKiBjYW52YXMsIGNvbnN0IFdlYlJlY3Qm
IHJlY3QpCkBAIC0xNjcsMTEgKzE3MiwxMSBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91
c2VEb3duKGNvbnN0CiAgICAgaWYgKCFtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMo
bW91c2Vkb3duLngsIG1vdXNlZG93bi55KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBtb3VzZWRvd24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOwotICAgICAgICAgICAgbW91
c2Vkb3duLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKLSAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5t
b3VzZURvd24oUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91
c2Vkb3duKSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQorICAgIG1vdXNl
ZG93bi54IC09IG1fc2Nyb2xsYmFyLT54KCk7CisgICAgbW91c2Vkb3duLnkgLT0gbV9zY3JvbGxi
YXItPnkoKTsKKyAgICBtX3Njcm9sbGJhci0+bW91c2VEb3duKFBsYXRmb3JtTW91c2VFdmVudEJ1
aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlZG93bikpOworICAgIHJldHVybiB0cnVlOwor
fQogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VVcChjb25zdCBXZWJJbnB1dEV2ZW50
JiBldmVudCkKIHsKQEAgLTE4MywxNiArMTg4LDE2IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6
b25Nb3VzZVVwKGNvbnN0IFcKIAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlTW92ZShj
b25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKIHsKLSAgICAgICAgV2ViTW91c2VFdmVudCBtb3Vz
ZW1vdmUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZldmVudCk7Ci0gICAg
ICAgIGlmIChtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91c2Vtb3ZlLngsIG1v
dXNlbW92ZS55KQotICAgICAgICAgICAgfHwgbV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgIT0g
Tm9QYXJ0KSB7Ci0gICAgICAgICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJhci0+eCgpOwot
ICAgICAgICAgICAgbW91c2Vtb3ZlLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKLSAgICAgICAgICAg
IHJldHVybiBtX3Njcm9sbGJhci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVy
KG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZW1vdmUpKTsKLSAgICAgICAgfQorICAgIFdlYk1vdXNl
RXZlbnQgbW91c2Vtb3ZlID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZl
bnQpOworICAgIGlmIChtX3Njcm9sbGJhci0+ZnJhbWVSZWN0KCkuY29udGFpbnMobW91c2Vtb3Zl
LngsIG1vdXNlbW92ZS55KQorICAgICAgICB8fCBtX3Njcm9sbGJhci0+cHJlc3NlZFBhcnQoKSAh
PSBOb1BhcnQpIHsKKyAgICAgICAgbW91c2Vtb3ZlLnggLT0gbV9zY3JvbGxiYXItPngoKTsKKyAg
ICAgICAgbW91c2Vtb3ZlLnkgLT0gbV9zY3JvbGxiYXItPnkoKTsKKyAgICAgICAgcmV0dXJuIG1f
c2Nyb2xsYmFyLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV9zY3JvbGxi
YXIuZ2V0KCksIG1vdXNlbW92ZSkpOworICAgIH0KIAotICAgICAgICBpZiAobV9zY3JvbGxiYXIt
PmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0KQotICAgICAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNl
RXhpdGVkKCk7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpICE9IE5vUGFydCkK
KyAgICAgICAgbV9zY3JvbGxiYXItPm1vdXNlRXhpdGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCkBAIC0yMDYsNTkgKzIxMSw1OSBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VM
ZWF2ZShjb25zCiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVdoZWVsKGNvbnN0IFdl
YklucHV0RXZlbnQmIGV2ZW50KQogewotICAgICAgICAvLyBTYW1lIGxvZ2ljIGFzIGluIFNjcm9s
bHZpZXcuY3BwLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxsLCB3ZSdsbCBhY2NlcHQgdGhlIGV2ZW50
LgotICAgICAgICBXZWJNb3VzZVdoZWVsRXZlbnQgbW91c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxj
b25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigmZXZlbnQpOwotICAgICAgICBpbnQgbWF4U2Nyb2xs
RGVsdGEgPSBtX3Njcm9sbGJhci0+bWF4aW11bSgpIC0gbV9zY3JvbGxiYXItPnZhbHVlKCk7Ci0g
ICAgICAgIGZsb2F0IGRlbHRhID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpv
bnRhbFNjcm9sbGJhciA/IG1vdXNld2hlZWwuZGVsdGFYIDogbW91c2V3aGVlbC5kZWx0YVk7Ci0g
ICAgICAgIGlmICgoZGVsdGEgPCAwICYmIG1heFNjcm9sbERlbHRhID4gMCkgfHwgKGRlbHRhID4g
MCAmJiBtX3Njcm9sbGJhci0+dmFsdWUoKSA+IDApKSB7Ci0gICAgICAgICAgICBpZiAobW91c2V3
aGVlbC5zY3JvbGxCeVBhZ2UpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9zY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpOwotICAgICAgICAgICAgICAgIGJv
b2wgbmVnYXRpdmUgPSBkZWx0YSA8IDA7Ci0gICAgICAgICAgICAgICAgZGVsdGEgPSBtYXgobWF4
KHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgKiBTY3JvbGxi
YXI6Om1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9z
Y3JvbGxiYXItPnZpc2libGVTaXplKCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFn
ZXMoKSkpLCAxLjBmKTsKLSAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUpCi0gICAgICAgICAg
ICAgICAgICAgIGRlbHRhICo9IC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9zY3Jv
bGxiYXItPnNjcm9sbCgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNj
cm9sbGJhcikgPyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDogV2ViQ29yZTo6U2Nyb2xsVXAsIFdlYkNv
cmU6OlNjcm9sbEJ5UGl4ZWwsIGRlbHRhKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
IC8vIFNhbWUgbG9naWMgYXMgaW4gU2Nyb2xsdmlldy5jcHAuICBJZiB3ZSBjYW4gbW92ZSBhdCBh
bGwsIHdlJ2xsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgV2ViTW91c2VXaGVlbEV2ZW50IG1vdXNl
d2hlZWwgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsK
KyAgICBpbnQgbWF4U2Nyb2xsRGVsdGEgPSBtX3Njcm9sbGJhci0+bWF4aW11bSgpIC0gbV9zY3Jv
bGxiYXItPnZhbHVlKCk7CisgICAgZmxvYXQgZGVsdGEgPSBtX3Njcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gbW91c2V3aGVlbC5kZWx0YVggOiBtb3VzZXdo
ZWVsLmRlbHRhWTsKKyAgICBpZiAoKGRlbHRhIDwgMCAmJiBtYXhTY3JvbGxEZWx0YSA+IDApIHx8
IChkZWx0YSA+IDAgJiYgbV9zY3JvbGxiYXItPnZhbHVlKCkgPiAwKSkgeworICAgICAgICBpZiAo
bW91c2V3aGVlbC5zY3JvbGxCeVBhZ2UpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Njcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgICAgICAgICBib29s
IG5lZ2F0aXZlID0gZGVsdGEgPCAwOworICAgICAgICAgICAgZGVsdGEgPSBtYXgobWF4KHN0YXRp
Y19jYXN0PGZsb2F0PihtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgKiBTY3JvbGxiYXI6Om1p
bkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxi
YXItPnZpc2libGVTaXplKCkgLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKSkp
LCAxLjBmKTsKKyAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKKyAgICAgICAgICAgICAgICBkZWx0
YSAqPSAtMTsKICAgICAgICAgfQorICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNj
cm9sbCgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikg
PyBXZWJDb3JlOjpTY3JvbGxMZWZ0IDogV2ViQ29yZTo6U2Nyb2xsVXAsIFdlYkNvcmU6OlNjcm9s
bEJ5UGl4ZWwsIGRlbHRhKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbktleURvd24oY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7Ci0gICAgICAgIFdlYktleWJvYXJkRXZlbnQga2V5
Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVudCo+KCZldmVudCk7Ci0g
ICAgICAgIGludCBrZXlDb2RlOwotICAgICAgICAvLyBXZSBoYXZlIHRvIGR1cGxpY2F0ZSB0aGlz
IGxvZ2ljIGZyb20gV2ViVmlld0ltcGwgYmVjYXVzZSB0aGVyZSBpdCB1c2VzCi0gICAgICAgIC8v
IENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlzdCBhdCB0aGlzIHBv
aW50LgotICAgICAgICBpZiAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUgPT0gVktFWV9TUEFDRSkK
LSAgICAgICAgICAgIGtleUNvZGUgPSAoKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklucHV0RXZl
bnQ6OlNoaWZ0S2V5KSA/IFZLRVlfUFJJT1IgOiBWS0VZX05FWFQpOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChrZXlib2FyZC5tb2RpZmllcnMgPT0gV2ViSW5wdXRFdmVudDo6Q29u
dHJvbEtleSkgewotICAgICAgICAgICAgICAgIC8vIE1hdGNoIEZGIGJlaGF2aW9yIGluIHRoZSBz
ZW5zZSB0aGF0IEN0cmwraG9tZS9lbmQgYXJlIHRoZSBvbmx5IEN0cmwKLSAgICAgICAgICAgICAg
ICAvLyBrZXkgY29tYmluYXRpb25zIHdoaWNoIGFmZmVjdCBzY3JvbGxpbmcuIFNhZmFyaSBpcyBi
dWdneSBpbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBzZW5zZSB0aGF0IGl0IHNjcm9sbHMgdGhl
IHBhZ2UgZm9yIGFsbCBDdHJsK3Njcm9sbGluZyBrZXkKLSAgICAgICAgICAgICAgICAvLyBjb21i
aW5hdGlvbnMuIEZvciBlLmcuIEN0cmwrcGd1cC9wZ2RuL3VwL2Rvd24sIGV0Yy4KLSAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlKSB7Ci0gICAgICAgICAgICAg
ICAgY2FzZSBWS0VZX0hPTUU6Ci0gICAgICAgICAgICAgICAgY2FzZSBWS0VZX0VORDoKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICBXZWJLZXli
b2FyZEV2ZW50IGtleWJvYXJkID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYktleWJvYXJkRXZlbnQq
PigmZXZlbnQpOworICAgIGludCBrZXlDb2RlOworICAgIC8vIFdlIGhhdmUgdG8gZHVwbGljYXRl
IHRoaXMgbG9naWMgZnJvbSBXZWJWaWV3SW1wbCBiZWNhdXNlIHRoZXJlIGl0IHVzZXMKKyAgICAv
LyBDaGFyIGFuZCBSYXdLZXlEb3duIGV2ZW50cywgd2hpY2ggZG9uJ3QgZXhpc3QgYXQgdGhpcyBw
b2ludC4KKyAgICBpZiAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUgPT0gVktFWV9TUEFDRSkKKyAg
ICAgICAga2V5Q29kZSA9ICgoa2V5Ym9hcmQubW9kaWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hp
ZnRLZXkpID8gVktFWV9QUklPUiA6IFZLRVlfTkVYVCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
IChrZXlib2FyZC5tb2RpZmllcnMgPT0gV2ViSW5wdXRFdmVudDo6Q29udHJvbEtleSkgeworICAg
ICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3IgaW4gdGhlIHNlbnNlIHRoYXQgQ3RybCtob21l
L2VuZCBhcmUgdGhlIG9ubHkgQ3RybAorICAgICAgICAgICAgLy8ga2V5IGNvbWJpbmF0aW9ucyB3
aGljaCBhZmZlY3Qgc2Nyb2xsaW5nLiBTYWZhcmkgaXMgYnVnZ3kgaW4gdGhlCisgICAgICAgICAg
ICAvLyBzZW5zZSB0aGF0IGl0IHNjcm9sbHMgdGhlIHBhZ2UgZm9yIGFsbCBDdHJsK3Njcm9sbGlu
ZyBrZXkKKyAgICAgICAgICAgIC8vIGNvbWJpbmF0aW9ucy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3Bn
ZG4vdXAvZG93biwgZXRjLgorICAgICAgICAgICAgc3dpdGNoIChrZXlib2FyZC53aW5kb3dzS2V5
Q29kZSkgeworICAgICAgICAgICAgY2FzZSBWS0VZX0hPTUU6CisgICAgICAgICAgICBjYXNlIFZL
RVlfRU5EOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKGtleWJvYXJkLmlzU3lzdGVtS2V5IHx8IChrZXlib2FyZC5tb2RpZmll
cnMgJiBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkgfHwgKGtleWJvYXJkLm1vZGlm
aWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICAgICAga2V5Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlDb2RlOwotICAg
ICAgICB9Ci0gICAgICAgIFdlYkNvcmU6OlNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247
Ci0gICAgICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5Owot
ICAgICAgICBpZiAoV2ViVmlld0ltcGw6Om1hcEtleUNvZGVGb3JTY3JvbGwoa2V5Q29kZSwgJnNj
cm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkgewotICAgICAgICAgICAgLy8gV2ls
bCByZXR1cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3YXNuJ3QgY29tcGF0aWJsZSB3aXRo
IHRoaXMgc2Nyb2xsYmFyLgotICAgICAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5zY3JvbGwo
c2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7Ci0gICAgICAgIH0KKyAgICAgICAg
a2V5Q29kZSA9IGtleWJvYXJkLndpbmRvd3NLZXlDb2RlOworICAgIH0KKyAgICBXZWJDb3JlOjpT
Y3JvbGxEaXJlY3Rpb24gc2Nyb2xsRGlyZWN0aW9uOworICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51
bGFyaXR5IHNjcm9sbEdyYW51bGFyaXR5OworICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29k
ZUZvclNjcm9sbChrZXlDb2RlLCAmc2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkp
KSB7CisgICAgICAgIC8vIFdpbGwgcmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fz
bid0IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNjcm9sbGJhci4KKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVs
YXJpdHkpOworICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTI2NywxMyArMjcyLDE4
IEBAIGludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxTaXplKFdlYkNvcmUKICAgICByZXR1cm4g
KG9yaWVudGF0aW9uID09IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpKSA/IChtX3Njcm9sbGJh
ci0+dG90YWxTaXplKCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12
b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkKK2ludCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGxQ
b3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdAogewotICAgIG1fc2Nyb2xsYmFyLT5z
ZXRWYWx1ZSgobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgPyBvZmZzZXQueCgpIDogb2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0
b3IpOworICAgIHJldHVybiBtX3Njcm9sbE9mZnNldDsKIH0KIAotdm9pZCBXZWJTY3JvbGxiYXJJ
bXBsOjp2YWx1ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKikKK3ZvaWQgV2ViU2Nyb2xsYmFy
SW1wbDo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBvZmZzZXQpCiB7
CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIpCisgICAgICAgIG1fc2Nyb2xsT2Zmc2V0ID0gb2Zmc2V0LngoKTsKKyAgICBlbHNlCisgICAg
ICAgIG1fc2Nyb2xsT2Zmc2V0ID0gb2Zmc2V0LnkoKTsKKwogICAgIG1fY2xpZW50LT52YWx1ZUNo
YW5nZWQodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTY3JvbGxiYXJJbXBsLmgJKHJldmlzaW9uIDc2MTc4KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1OCw5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJ
bnB1dEV2ZW50Jik7CiAKICAgICAvLyBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgbWV0aG9kcwot
ICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZh
bHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxT
aXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdDsKKyAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdmly
dHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKICAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0OwpAQCAt
NzYsNiArNzYsNyBAQCBwcml2YXRlOgogCiAgICAgV2ViU2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVu
dDsKIAorICAgIGludCBtX3Njcm9sbE9mZnNldDsKICAgICBSZWZQdHI8V2ViQ29yZTo6U2Nyb2xs
YmFyPiBtX3Njcm9sbGJhcjsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJm
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDcxLDcgKzEwNzEsMTEgQEAgdm9pZCBRV2ViRnJhbWU6OnNl
dFNjcm9sbEJhclZhbHVlKFF0OjpPcgogICAgICAgICAgICAgdmFsdWUgPSAwOwogICAgICAgICBl
bHNlIGlmICh2YWx1ZSA+IHNjcm9sbEJhck1heGltdW0ob3JpZW50YXRpb24pKQogICAgICAgICAg
ICAgdmFsdWUgPSBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKTsKLSAgICAgICAgc2ItPnNl
dFZhbHVlKHZhbHVlLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisKKyAgICAg
ICAgaWYgKG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFsKQorICAgICAgICAgICAgc2ItPmNs
aWVudCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHZhbHVlKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2ItPmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5p
bWF0aW9uKHZhbHVlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlNj
cm9sbEJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFy
LmNwcAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogV2ViU2Nyb2xsQmFyOjpXZWJTY3JvbGxCYXIoKQogICAgIDogbV9yZWZDb3VudCgwKQog
ICAgICwgbV9jb250YWluaW5nV2luZG93KDApCisgICAgLCBtX2N1cnJlbnRQb3NpdGlvbigwKQog
ewogICAgIGdDbGFzc0NvdW50Kys7CiAgICAgZ0NsYXNzTmFtZUNvdW50LmFkZCgiV2ViU2Nyb2xs
QmFyIik7CkBAIC0xNDMsNyArMTQ0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJT
Y3JvbGxCYXI6OgogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OnNldFZh
bHVlKCAKICAgICAvKiBbaW5dICovIGludCB2YWx1ZSkKIHsKLSAgICBtX3Njcm9sbEJhci0+c2V0
VmFsdWUodmFsdWUsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBtX2N1
cnJlbnRQb3NpdGlvbiA9IHZhbHVlOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xNTIsNyAr
MTUzLDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OgogewogICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnZhbHVlID0gbV9z
Y3JvbGxCYXItPnZhbHVlKCk7CisgICAgKnZhbHVlID0gbV9jdXJyZW50UG9zaXRpb247CiAgICAg
cmV0dXJuIFNfT0s7CiB9CiAKQEAgLTI0Nyw3ICsyNDgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYlNjcm9sbEJhcjo6CiB7CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHdlYkNvcmVTY3Jv
bGxEaXJlY3Rpb24gPSAoU2Nyb2xsRGlyZWN0aW9uKSBkaXJlY3Rpb247CiAgICAgU2Nyb2xsR3Jh
bnVsYXJpdHkgd2ViQ29yZUdyYW51bGFyaXR5ID0gKFNjcm9sbEdyYW51bGFyaXR5KSBncmFudWxh
cml0eTsKLSAgICBtX3Njcm9sbEJhci0+c2Nyb2xsKHdlYkNvcmVTY3JvbGxEaXJlY3Rpb24sIHdl
YkNvcmVHcmFudWxhcml0eSwgbXVsdGlwbGllcik7CisgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3Jv
bGwod2ViQ29yZVNjcm9sbERpcmVjdGlvbiwgd2ViQ29yZUdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMjU3LDE3ICsyNTgsMTQgQEAgaW50IFdlYlNj
cm9sbEJhcjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcgogICAgIHJldHVybiAob3JpZW50YXRpb24g
PT0gbV9zY3JvbGxCYXItPm9yaWVudGF0aW9uKCkpID8gKG1fc2Nyb2xsQmFyLT50b3RhbFNpemUo
KSAtIG1fc2Nyb2xsQmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7IAogfQogCi12b2lkIFdlYlNjcm9s
bEJhcjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0
KQoraW50IFdlYlNjcm9sbEJhcjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QKIHsK
LSAgICBtX3Njcm9sbEJhci0+c2V0VmFsdWUoKG1fc2Nyb2xsQmFyLT5vcmllbnRhdGlvbigpID09
IEhvcml6b250YWxTY3JvbGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIFNjcm9sbGJh
cjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICByZXR1cm4gbV9jdXJyZW50UG9zaXRpb247CiB9
CiAKLXZvaWQgV2ViU2Nyb2xsQmFyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIp
Cit2b2lkIFdlYlNjcm9sbEJhcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZz
ZXQpCiB7Ci0gICAgaWYgKG1fc2Nyb2xsQmFyICE9IHNjcm9sbEJhcikgewotICAgICAgICBBU1NF
UlQoZmFsc2UpOyAgLy8gc2hvdWxkbid0IGhhcHBlbgotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIG1fY3VycmVudFBvc2l0aW9uID0gKG1fc2Nyb2xsQmFyLT5vcmllbnRhdGlvbigpID09IEhv
cml6b250YWxTY3JvbGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCk7CiAgICAgbV9kZWxl
Z2F0ZS0+dmFsdWVDaGFuZ2VkKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJTY3JvbGxCYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxC
YXIuaAkocmV2aXNpb24gNzYxNzgpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDggKzExNyw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICAvLyBTY3JvbGxiYXJDbGllbnQKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwg
dm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9z
aXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNl
dChjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFy
UmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHByb3ZpZGUgYSB3YXkgdG8gc2V0IHRoaXMgdmFsdWUuCkBAIC0xMjgsNiArMTI4LDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgVUxPTkcgbV9yZWZDb3VudDsKICAgICBIV05EIG1fY29udGFpbmlu
Z1dpbmRvdzsKKyAgICBpbnQgbV9jdXJyZW50UG9zaXRpb247CiAgICAgUmVmUHRyPFdlYkNvcmU6
OlNjcm9sbGJhcj4gbV9zY3JvbGxCYXI7CiAgICAgQ09NUHRyPElXZWJTY3JvbGxCYXJEZWxlZ2F0
ZVByaXZhdGU+IG1fZGVsZWdhdGU7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79640</attachid>
            <date>2011-01-20 12:56:22 -0800</date>
            <delta_ts>2011-01-20 12:58:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchForPrimetime.diff</filename>
            <type>text/plain</type>
            <size>85002</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1ICsxLDEzMSBAQAotMjAxMS0wMS0yMCAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgorMjAxMS0wMS0yMCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCi0gICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgotCi0gICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS84NzY1NDk4PiBSRUdSRVNTSU9OIChyNzIxNDEpOiBDYW5ub3Qg
b3JkZXIgcHJpbnRzIHdpdGggQXBlcnR1cmUgMy4xCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgogCi0gICAgICAgIDxyZGFyOi8vcHJvYmxlbS84ODg0NjQ4PiBSRUdSRVNTSU9O
IChyNzIxNDEpOiBTYWZhcmkgaGFuZ3Mgd2hlbiB2aXNpdGluZyBhIHBhZ2Ugb24gd3d3LmJmbXR2
LmNvbQotICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3
NjUKKyAgICAgICAgQ2xlYW51cCBTY3JvbGxiYXIvU2Nyb2xsYmFyQ2xpZW50IHJlbGF0aW9uc2hp
cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3NzkK
IAotICAgICAgICA8cmRhcjovL3Byb2JsZW0vODg5MDkwOT4gUkVHUkVTU0lPTiAocjcyMTQxKTog
VmVyeSBTbG93IFJlbmRlcmluZyBXaXRoIENlcnRhaW4gTWFya3VwCi0gICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjI2NQorICAgICAgICBQaXBlIGFsbCBz
Y3JvbGxpbmcgdGhyb3VnaCB0aGUgU2Nyb2xsYmFyQ2xpZW50L1Njcm9sbEFuaW1hdG9yCisgICAg
ICAgIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIFNjcm9sbGJhci4gVGhlIFNjcm9sbGJhciBub3cg
aXMganVzdAorICAgICAgICBhICJ2aWV3IiBvbiB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBz
Y3JvbGxhYmxlIGFyZWEgaXQgaXMKKyAgICAgICAgYXR0YWNoZWQgdG8uCisKKyAgICAgICAgVGhl
cmUgYXJlIG5vdyB0d28gd2F5cyB0byBzY3JvbGwgYSBzY3JvbGxhYmxlIGFyZWE6CisgICAgICAg
IC0gU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoKQorICAgICAgICAtIFNjcm9sbGJhckNsaWVudDo6
c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKCkKKworICAgICAgICBCb3RoIG9mIHRoZXNl
IGdvIHRocm91Z2ggdGhlIFNjcm9sbEFuaW1hdG9yICh1cGRhdGluZyBpdHMgc3RhdGUKKyAgICAg
ICAgb3Igc3RhcnRpbmcgYW4gYW5pbWF0aW9uKS4gVGhlIFNjcm9sbEFuaW1hdG9yLCBpbiB0dXJu
LCBub3cgY2FsbHMKKyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uLCB3aGljaCB0ZWxscyB0aGUKKyAgICAgICAgU2Nyb2xsYmFycyB0byBwdWxsIGEg
bmV3IG9mZnNldCAodmlhIFNjcm9sbGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKQorICAgICAgICBhbmQg
dGVsbHMgdGhlIGNsYXNzIHRoYXQgZGVyaXZlcyBmcm9tIFNjcm9sbGJhckNsaWVudCB0byBzY3Jv
bGwKKyAgICAgICAgaXRzIGNvbnRlbnRzICh2aWEgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxP
ZmZzZXQpLgogCi0gICAgICAgIFRlc3Q6IGZhc3QvYmxvY2svbGluZS1sYXlvdXQvbmVnYXRpdmUt
bWF4LWhlaWdodC5odG1sCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICBNb3ZlIFNjcm9sbGJhci5jcHAgdG8gdGhlIHJpZ2h0IHBsYWNlLgogCi0g
ICAgICAgIEludGVnZXIgb3ZlcmZsb3cgZGV0ZWN0aW9uIGxlZCB0byBhIGJsb2NrIGhhdmluZyBh
IGh1Z2UgaGVpZ2h0LiBUaGlzIG1hbmlmZXN0ZWQgYXMgYnJva2VuIGxheW91dAotICAgICAgICBp
biB0aGUgZmlyc3QgYnVnIGFuZCBhcyBleHRyZW1lIHNsb3duZXNzIGluIHRoZSBsYXR0ZXIgYnVn
cyBiZWNhdXNlIG9mCi0gICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MjgzMgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJh
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyOjpzZXRWYWx1
ZSk6CisgICAgICAgIEluaXRpYXRlIHRoZSBzY3JvbGwgdGhyb3VnaCB0aGUgc2Nyb2xsYmFyIGNs
aWVudCwgcmF0aGVyIHRoYW4gdGhlCisgICAgICAgIHNjcm9sbGJhciBpdHNlbGYuCiAKLSAgICAg
ICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6Ci0gICAgICAgIChXZWJDb3JlOjpSb290
SW5saW5lQm94OjphbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbik6IENsYW1wIG1heEhlaWdodCB0
byAwIHNvIHRoZSBuZXh0IGxpbmUKLSAgICAgICAgY2Fubm90IHN0YXJ0IGFib3ZlIHRoaXMgbGlu
ZS4gVGhlIG5lZ2F0aXZlIG1heEhlaWdodCBhbHNvIGNhdXNlZCB0aGUgaW50ZWdlciBvdmVyZmxv
dyBkZXRlY3Rpb24KLSAgICAgICAgbG9naWMgdG8gZ2l2ZSB0aGUgYmxvY2sgYSBodWdlIGhlaWdo
dC4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFt
ZVZpZXc6OnNjcm9sbFRvKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5oOgorICAgICAgICBD
b25kZW5zZSB0aGUgdHdvIHZhbHVlQ2hhbmdlZCBvdmVycmlkZXMgdG8gYSBzaW5nbGUgb3ZlcnJp
ZGUgb2YgdGhlCisgICAgICAgIHNjcm9sbFRvIGZ1bmN0aW9uLgogCi0yMDExLTAxLTIwICBZaSBT
aGVuICA8eWkuNC5zaGVuQG5va2lhLmNvbT4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmN1cnJlbnRQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRpb25DaGFu
Z2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFu
aW1hdG9yV2luOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3JvbGwpOgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yV2luLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFu
aW1hdG9yTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvck1hYzo6aW1t
ZWRpYXRlU2Nyb2xsVG9Qb2ludCk6CisgICAgICAgIENoYW5nZSBzZXRTY3JvbGxQb3NpdGlvbkFu
ZFN0b3BBbmltYXRpb24gdG8gc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uCisgICAgICAg
IGFuZCBib3R0bGVuZWNrIGFsbCBjbGllbnQgbm90aWZpY2F0aW9uIG9mIGNoYW5nZWQgcG9zaXRp
b24gdGhyb3VnaCBhIG5ldworICAgICAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKSBmdW5jdGlv
bi4KIAotICAgICAgICBSZXZpZXdlZCBieSBFcmljIENhcmxzb24uCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3OjpzZXRTY3Jv
bGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsVG8pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnVwZGF0ZVNjcm9sbGJhcnMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxF
dmVudCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsVmlldy5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsVmlldzo6aG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp2ZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgIFVwZGF0ZSB0byBzY3JvbGwg
dmlhIHRoZSBTY3JvbGxiYXJDbGllbnQgcmF0aGVyIHRoYW4gdGhlIFNjcm9sbGJhci4KIAotICAg
ICAgICBDbGVhbiB1cCB0aGUgTWVkaWEgQ29udHJvbHMgQ1NTIGZvciBRdAotICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI4MjIKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpvZmZzZXRE
aWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJlc3Nl
ZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3ZlVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxiYXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0UHJlc3NlZFBvcyk6
CisgICAgICAgIENoYW5nZSB0aGUgc2Nyb2xsYmFyIHRvIG9ubHkgdXBkYXRlcyBpdHMgb2Zmc2V0
IGluIHJlc3BvbnNlIHRvCisgICAgICAgIGFuIG9mZnNldERpZENoYW5nZSBjYWxsLgorCisgICAg
ICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhckNsaWVudDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVu
dDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbGJhckNsaWVudDo6c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXRG
cm9tQW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6aG9yaXpvbnRhbFNjcm9sbGJhcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnZlcnRpY2FsU2Nyb2xsYmFyKToKKyAg
ICAgICAgTWFrZSB0aGUgaW5jcmVhc2luZ2x5IG1pc25hbWVkIFNjcm9sbGJhckNsaWVudCByZXNw
b25zaWJsZSBmb3IKKyAgICAgICAgc2Nyb2xsaW5nLgogCi0gICAgICAgIFNwbGl0IHRoZSBhdWRp
bzo6LXdlYmtpdC1tZWRpYS14eHggYW5kIHZpZGVvOjotd2Via2l0LW1lZGlhLXh4eCBydWxlcyAK
LSAgICAgICAgaW4gbWVkaWFDb250cm9sc1F0LmNzcywgYW5kIHJlbW92ZSB0aGUgZHVwbGljYXRl
IGF1ZGlvOjotd2Via2l0LW1lZGlhLXh4eAotICAgICAgICBydWxlcyBmcm9tIG1lZGlhQ29udHJv
bHNRdEZ1bGxzY3JlZW4uY3NzLgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwu
Y3BwOgorICAgICAgICAoc2Nyb2xsYmFyRWZsRWRqZU1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuY3BwOgorICAgICAgICAoTWFpbkZyYW1lU2Ny
b2xsYmFyR3RrOjpndGtWYWx1ZUNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Njcm9s
bGJhclF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y29udGV4dE1lbnUpOgor
ICAgICAgICBVcGRhdGUgdG8gbW92ZSBzY3JvbGxpbmcgdGhyb3VnaCB0aGUgY2xpZW50LgorCisg
ICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQb3B1cE1lbnVXaW46OnNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwTWVudVdpbjo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9w
dXBNZW51V2luOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51
V2luOjpzY3JvbGxUbyk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVXaW46OnduZFByb2Mp
OgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaDoKKyAgICAgICAgKFdlYkNv
cmU6OlBvcHVwTWVudVdpbjo6dmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xs
VG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGlzdEJveDo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnNldFNjcm9s
bFRvcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxpc3RCb3g6OnZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgVXBkYXRl
IHRvIHNjcm9sbCB2aWEgdGhlIFNjcm9sbGJhckNsaWVudCByYXRoZXIgdGhhbiB0aGUgU2Nyb2xs
YmFyLgogCi0gICAgICAgICogY3NzL21lZGlhQ29udHJvbHNRdC5jc3M6Ci0gICAgICAgIChhdWRp
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1wYW5lbCk6Ci0gICAgICAgICh2aWRlbzo6LXdlYmtp
dC1tZWRpYS1jb250cm9scy1wYW5lbCk6Ci0gICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy1tdXRlLWJ1dHRvbik6Ci0gICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250
cm9scy1tdXRlLWJ1dHRvbik6Ci0gICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9s
cy1wbGF5LWJ1dHRvbik6Ci0gICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1w
bGF5LWJ1dHRvbik6Ci0gICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1l
bGluZS1jb250YWluZXIpOgotICAgICAgICAodmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMt
dGltZWxpbmUtY29udGFpbmVyKToKLSAgICAgICAgKGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRy
b2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5KToKLSAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlh
LWNvbnRyb2xzLWN1cnJlbnQtdGltZS1kaXNwbGF5KToKLSAgICAgICAgKGF1ZGlvOjotd2Via2l0
LW1lZGlhLWNvbnRyb2xzLXRpbWUtcmVtYWluaW5nLWRpc3BsYXkpOgotICAgICAgICAodmlkZW86
Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtdGltZS1yZW1haW5pbmctZGlzcGxheSk6Ci0gICAgICAg
IChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSk6Ci0gICAgICAgICh2aWRl
bzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lbGluZSk6Ci0gICAgICAgIChhdWRpbzo6LXdl
YmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lcik6Ci0gICAgICAgICh2
aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyLWNvbnRhaW5lcik6Ci0g
ICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy12b2x1bWUtc2xpZGVyKToKLSAg
ICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXZvbHVtZS1zbGlkZXIpOgotICAg
ICAgICAoYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1iYWNrLWJ1dHRvbik6Ci0g
ICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1zZWVrLWJhY2stYnV0dG9uKToK
LSAgICAgICAgKGF1ZGlvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstZm9yd2FyZC1idXR0
b24pOgotICAgICAgICAodmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3YXJk
LWJ1dHRvbik6Ci0gICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxsc2Ny
ZWVuLWJ1dHRvbik6Ci0gICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1mdWxs
c2NyZWVuLWJ1dHRvbik6Ci0gICAgICAgIChhdWRpbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1y
ZXdpbmQtYnV0dG9uKToKLSAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJl
d2luZC1idXR0b24pOgotICAgICAgICAoYXVkaW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtcmV0
dXJuLXRvLXJlYWx0aW1lLWJ1dHRvbik6Ci0gICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS1j
b250cm9scy1yZXR1cm4tdG8tcmVhbHRpbWUtYnV0dG9uKToKLSAgICAgICAgKGF1ZGlvOjotd2Vi
a2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMtYnV0dG9uKToKLSAgICAg
ICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXRvZ2dsZS1jbG9zZWQtY2FwdGlvbnMt
YnV0dG9uKToKLSAgICAgICAgKiBjc3MvbWVkaWFDb250cm9sc1F0RnVsbHNjcmVlbi5jc3M6Ci0g
ICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy10aW1lLXJlbWFpbmluZy1kaXNw
bGF5KToKLSAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXNlZWstYmFjay1i
dXR0b24pOgotICAgICAgICAodmlkZW86Oi13ZWJraXQtbWVkaWEtY29udHJvbHMtc2Vlay1mb3J3
YXJkLWJ1dHRvbik6Ci0gICAgICAgICh2aWRlbzo6LXdlYmtpdC1tZWRpYS1jb250cm9scy1yZXdp
bmQtYnV0dG9uKToKLSAgICAgICAgKHZpZGVvOjotd2Via2l0LW1lZGlhLWNvbnRyb2xzLXJldHVy
bi10by1yZWFsdGltZS1idXR0b24pOgotICAgICAgICAodmlkZW86Oi13ZWJraXQtbWVkaWEtY29u
dHJvbHMtdG9nZ2xlLWNsb3NlZC1jYXB0aW9ucy1idXR0b24pOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJNYXJxdWVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hcnF1ZWU6OnN0
YXJ0KToKKyAgICAgICAgU2ltcGxpZnkgaW5pdGlhbCBwYWludCB0byBqdXN0IGRvIGFuIGltbWVk
aWF0ZSBzY3JvbGwgdG8gdGhlIHBvc2l0aW9uLgogCiAyMDExLTAxLTIwICBBbGV4YW5kZXIgUGF2
bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDc2MjczKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTQxNSw3ICsxMTQxNSw3IEBACiAJCUJDQThDQTVEMTFFNEU2RDEwMDgxMkZC
NyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQ0E4Q0E1RTExRTRFNkQxMDA4MTJGQjcgLyogQmFja0ZvcndhcmRMaXN0SW1wbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYWNrRm9yd2FyZExpc3RJbXBsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTk3OTE2MTIxNUQwNTUwMDVDNDg1QyAv
KiBJbWFnZUJ1ZmZlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDQUE5MEMyMEE3
RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFNjcm9sbGJhci5jcHA7IHBhdGggPSBwbGF0Zm9ybS9TY3JvbGxiYXIuY3Bw
OyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIy
OSAvKiBTY3JvbGxiYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNjcm9sbGJhci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQUNGM0JBMTA3
MjkyMUEwMEMwQzhBMyAvKiBVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckNvbnRlbnRVUkxQYXR0ZXJuLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBQ0YzQkIxMDcyOTIxQTAwQzBDOEEzIC8qIFVzZXJD
b250ZW50VVJMUGF0dGVybi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2Vy
Q29udGVudFVSTFBhdHRlcm4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBRTFG
QTUxMjkzOURCNzAwNENCMDI2IC8qIFNjcm9sbEFuaW1hdG9yTWFjLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEFuaW1hdG9yTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xMzg5MCw3ICsxMzg5MCw2IEBACiAJCQkJMUNFMjRGOTYwRDdDQUYwRTAw
N0UwNEMyIC8qIFNjaGVkdWxlUGFpck1hYy5tbSAqLywKIAkJCQlCQ0FFMUZBNTEyOTM5REI3MDA0
Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCAqLywKIAkJCQlCQzUxMTU2RDEyQjE3NDlDMDBD
OTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gKi8sCi0JCQkJQkNBQTkwQzIwQTdFQkE2MDAw
OEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8sCiAJCQkJQkM4Qjg1M0MwRTdDN0YxMTAwQUI2OTg0
IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggKi8sCiAJCQkJQkNFRjg2OUUwRTg0NEU5RDAwQTg1Q0Q1
IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tICovLAogCQkJCTkzNTM2NzZBMDlBRUQ4OEIwMEQzNUNE
NiAvKiBTY3JvbGxWaWV3TWFjLm1tICovLApAQCAtMTgyNzgsNiArMTgyNzcsNyBAQAogCQkJCTUx
NjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovLAogCQkJCUNBM0JG
NjdCMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgKi8sCiAJCQkJQ0EzQkY2
N0QxMEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmggKi8sCisJCQkJQkNBQTkwQzIw
QTdFQkE2MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8sCiAJCQkJQkM3QjJBRjgwNDUwODI0
MTAwQTgwMDBGIC8qIFNjcm9sbGJhci5oICovLAogCQkJCUJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0
OSAvKiBTY3JvbGxiYXJDbGllbnQuY3BwICovLAogCQkJCUJDOUJDNjRDMEU3QzQ4ODkwMDhCOTg0
OSAvKiBTY3JvbGxiYXJDbGllbnQuaCAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAkocmV2aXNpb24g
NzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3Jv
bGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw5ICs5NywxNCBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlTY3JvbGxiYXI6OnNldFZhbHVlKGZsCiAgICAgaWYgKCFtX3Njcm9sbGJhcikKICAgICAg
ICAgcmV0dXJuOwogICAgIAorICAgIGlmICghbV9zY3JvbGxiYXItPmNsaWVudCgpKQorICAgICAg
ICByZXR1cm47CisKICAgICBmbG9hdCBuZXdWYWx1ZSA9IHZhbHVlICogbV9zY3JvbGxiYXItPm1h
eGltdW0oKTsKLSAgICAKLSAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUobmV3VmFsdWUsIFNjcm9s
bGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsgICAgCisgICAgaWYgKG1fc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIG1fc2Nyb2xsYmFy
LT5jbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihuZXdWYWx1ZSk7Cisg
ICAgZWxzZQorICAgICAgICBtX3Njcm9sbGJhci0+Y2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdp
dGhvdXRBbmltYXRpb24obmV3VmFsdWUpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NDAs
MjMgKzE5NDAsMTUgQEAgYm9vbCBGcmFtZVZpZXc6OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1
cm4gcGFnZSAmJiBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAotdm9p
ZCBGcmFtZVZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqIGJhcikKK3ZvaWQgRnJhbWVWaWV3
OjpzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQpCiB7Ci0gICAgLy8gRmlndXJlIG91
dCBpZiB3ZSByZWFsbHkgbW92ZWQuCiAgICAgSW50U2l6ZSBvZmZzZXQgPSBzY3JvbGxPZmZzZXQo
KTsKLSAgICBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5nZWQoYmFyKTsKKyAgICBTY3JvbGxWaWV3Ojpz
Y3JvbGxUbyhuZXdPZmZzZXQpOwogICAgIGlmIChvZmZzZXQgIT0gc2Nyb2xsT2Zmc2V0KCkpCiAg
ICAgICAgIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZCgpOwogICAgIGZyYW1lKCktPmxvYWRlcigpLT5j
bGllbnQoKS0+ZGlkQ2hhbmdlU2Nyb2xsT2Zmc2V0KCk7CiB9CiAKLXZvaWQgRnJhbWVWaWV3Ojp2
YWx1ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCi17Ci0gICAgU2Nyb2xsVmll
dzo6dmFsdWVDaGFuZ2VkKHNjcm9sbERlbHRhKTsKLSAgICBmcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+c2VuZFNjcm9sbEV2ZW50KCk7Ci0gICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVudCgpLT5k
aWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKLX0KLQogdm9pZCBGcmFtZVZpZXc6OmludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIC8vIEFkZCBpbiBvdXIgb2Zmc2V0IHdpdGhpbiB0aGUgRnJhbWVWaWV3LgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5oCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OCwxMiArMjg4LDEyIEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNv
bnN0IEludFBvaW50JikgY29uc3Q7CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNl
Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKGNvbnN0IEludFNpemUmKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52
YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBnZXRUaWNrbWFy
a3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3Q7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG8o
Y29uc3QgSW50U2l6ZSYpOworCiAgICAgdm9pZCBkZWZlcnJlZFJlcGFpbnRUaW1lckZpcmVkKFRp
bWVyPEZyYW1lVmlldz4qKTsKICAgICB2b2lkIGRvRGVmZXJyZWRSZXBhaW50cygpOwogICAgIHZv
aWQgdXBkYXRlRGVmZXJyZWRSZXBhaW50RGVsYXkoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3Iu
aCIKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQu
aCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKQEAgLTYxLDE2ICs2MiwyNyBAQCBib29sIFNjcm9s
bEFuaW1hdG9yOjpzY3JvbGwoU2Nyb2xsYmFyT3JpCiAgICAgaWYgKCpjdXJyZW50UG9zID09IG5l
d1BvcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICpjdXJyZW50UG9zID0gbmV3UG9zOwot
ICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3Vy
cmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKKworICAgIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgp
OworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3I6OnNldFNjcm9s
bFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgZmxvYXQgcG9zKQordm9pZCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX2N1cnJlbnRQb3NY
ID0gb2Zmc2V0LngoKTsKKyAgICBtX2N1cnJlbnRQb3NZID0gb2Zmc2V0LnkoKTsKKyAgICBub3Rp
dHlQb3NpdGlvbkNoYW5nZWQoKTsKK30KKworRmxvYXRQb2ludCBTY3JvbGxBbmltYXRvcjo6Y3Vy
cmVudFBvc2l0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikKLSAgICAgICAgbV9jdXJyZW50UG9zWCA9IHBvczsKLSAgICBlbHNlCi0gICAg
ICAgIG1fY3VycmVudFBvc1kgPSBwb3M7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQobV9jdXJyZW50
UG9zWCwgbV9jdXJyZW50UG9zWSk7Cit9CisKK3ZvaWQgU2Nyb2xsQW5pbWF0b3I6Om5vdGl0eVBv
c2l0aW9uQ2hhbmdlZCgpCit7CisgICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oSW50UG9pbnQobV9jdXJyZW50UG9zWCwgbV9jdXJyZW50UG9zWSkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmgJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Ny
b2xsQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEZsb2F0UG9pbnQ7CiBjbGFzcyBTY3JvbGxiYXJDbGllbnQ7
CiAKIGNsYXNzIFNjcm9sbEFuaW1hdG9yIHsKQEAgLTUwLDE2ICs1MSwxOCBAQCBwdWJsaWM6CiAg
ICAgLy8gVGhlIGJhc2UgY2xhc3MgaW1wbGVtZW50YXRpb24gYWx3YXlzIHNjcm9sbHMgaW1tZWRp
YXRlbHksIG5ldmVyIGFuaW1hdGVzLgogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGwoU2Nyb2xsYmFy
T3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBs
aWVyKTsKIAotICAgIC8vIFN0b3BzIGFueSBhbmltYXRpb24gaW4gdGhlIGdpdmVuIGRpcmVjdGlv
biBhbmQgdXBkYXRlcyB0aGUgU2Nyb2xsQW5pbWF0b3IKLSAgICAvLyB3aXRoIHRoZSBjdXJyZW50
IHNjcm9sbCBwb3NpdGlvbi4gIFRoaXMgZG9lcyBub3QgY2F1c2UgYSBjYWxsYmFjayB0byB0aGUK
LSAgICAvLyBTY3JvbGxiYXJDbGllbnQuCi0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQpOworICAgIHZp
cnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2lu
dCYpOworCisgICAgRmxvYXRQb2ludCBjdXJyZW50UG9zaXRpb24oKSBjb25zdDsKIAogcHJvdGVj
dGVkOgorICAgIHZvaWQgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CisKICAgICBTY3JvbGxiYXJD
bGllbnQqIG1fY2xpZW50OwogICAgIGZsb2F0IG1fY3VycmVudFBvc1g7IC8vIFdlIGF2b2lkIHVz
aW5nIGEgRmxvYXRQb2ludCBpbiBvcmRlciB0byByZWR1Y2UKICAgICBmbG9hdCBtX2N1cnJlbnRQ
b3NZOyAvLyBzdWJjbGFzcyBjb2RlIGNvbXBsZXhpdHkuCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0jZW5kaWYKKworI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDc2
MjczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRv
cldpbi5oIgogCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhckNs
aWVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGht
PgpAQCAtMTc3LDE3ICsxNzgsMjQgQEAgYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xsKFNj
cm9sbGJhcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNjcm9sbEFuaW1hdG9yV2luOjpz
ZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIGZsb2F0IHBvcykKK3ZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgUGVy
QXhpc0RhdGEqIGRhdGEgPSAob3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAm
bV9ob3Jpem9udGFsRGF0YSA6ICZtX3ZlcnRpY2FsRGF0YTsKLSAgICBzdG9wQW5pbWF0aW9uVGlt
ZXJJZk5lZWRlZChkYXRhKTsKLSAgICAqZGF0YS0+bV9jdXJyZW50UG9zID0gcG9zOwotICAgIGRh
dGEtPm1fZGVzaXJlZFBvcyA9IHBvczsKLSAgICBkYXRhLT5tX2N1cnJlbnRWZWxvY2l0eSA9IDA7
Ci0gICAgZGF0YS0+bV9kZXNpcmVkVmVsb2NpdHkgPSAwOworICAgIHN0b3BBbmltYXRpb25UaW1l
cklmTmVlZGVkKCZtX2hvcml6b250YWxEYXRhKTsKKyAgICBzdG9wQW5pbWF0aW9uVGltZXJJZk5l
ZWRlZCgmbV92ZXJ0aWNhbERhdGEpOworCisgICAgKm1faG9yaXpvbnRhbERhdGEubV9jdXJyZW50
UG9zID0gb2Zmc2V0LngoKTsKKyAgICBtX2hvcml6b250YWxEYXRhLm1fZGVzaXJlZFBvcyA9IG9m
ZnNldC54KCk7CisgICAgbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRWZWxvY2l0eSA9IDA7Cisg
ICAgbV9ob3Jpem9udGFsRGF0YS5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisKKyAgICAqbV92ZXJ0
aWNhbERhdGEubV9jdXJyZW50UG9zID0gb2Zmc2V0LnkoKTsKKyAgICBtX3ZlcnRpY2FsRGF0YS5t
X2Rlc2lyZWRQb3MgPSBvZmZzZXQueSgpOworICAgIG1fdmVydGljYWxEYXRhLm1fY3VycmVudFZl
bG9jaXR5ID0gMDsKKyAgICBtX3ZlcnRpY2FsRGF0YS5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisK
KyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKIH0KIAotLy8gc3RhdGljCiBkb3VibGUgU2Ny
b2xsQW5pbWF0b3JXaW46OmFjY2VsZXJhdGlvblRpbWUoKQogewogICAgIC8vIFdlIGVsZWN0IHRv
IHVzZSBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGhlbWUoKS0+YXV0b3Njcm9sbFRpbWVyRGVsYXko
KSBhcwpAQCAtMjkzLDcgKzMwMSw4IEBAIHZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVT
Y3JvbGwoUGUKICAgICAgICAgZGF0YS0+bV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QoYW5p
bWF0aW9uVGltZXJEZWxheSk7CiAgICAgICAgIGRhdGEtPm1fbGFzdEFuaW1hdGlvblRpbWUgPSBX
VEY6OmN1cnJlbnRUaW1lKCk7CiAgICAgfQotICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRG
cm9tQW5pbWF0aW9uKEludFBvaW50KCptX2hvcml6b250YWxEYXRhLm1fY3VycmVudFBvcywgKm1f
dmVydGljYWxEYXRhLm1fY3VycmVudFBvcykpOworCisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2Vk
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NCw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvcldpbigpOwog
CiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3Jh
bnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24s
IGZsb2F0KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGNvbnN0IEZsb2F0UG9pbnQmKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgUGVyQXhpc0RhdGEg
ewpAQCAtNjksOCArNjksOCBAQCBwcml2YXRlOgogICAgIFBlckF4aXNEYXRhIG1fdmVydGljYWxE
YXRhOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFNNT09USF9TQ1JPTExJTkcpCiAKLSNlbmRpZgorI2VuZGlmIC8vIFNjcm9sbEFuaW1hdG9yV2lu
X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiA3
NjI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjAsMjUgKzMyMCwyMCBAQCBpbnQgU2Nyb2xsVmlldzo6c2Nyb2xsU2l6ZShT
Y3JvbGxiYXJPcmllCiAgICAgcmV0dXJuIHNjcm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6
ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgU2Nyb2xsVmll
dzo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQor
dm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkK
IHsKLSAgICBpZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICBtX2hvcml6b250YWxT
Y3JvbGxiYXItPnNldFZhbHVlKG9mZnNldC54KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1h
dG9yKTsKLSAgICBpZiAobV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgbV92ZXJ0aWNhbFNj
cm9sbGJhci0+c2V0VmFsdWUob2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0
b3IpOwotfQorICAgIGludCBob3Jpem9udGFsT2Zmc2V0ID0gc3RkOjptYXgoc3RkOjptaW4ob2Zm
c2V0LngoKSwgY29udGVudHNXaWR0aCgpIC0gdmlzaWJsZVdpZHRoKCkpLCAwKTsKKyAgICBpbnQg
dmVydGljYWxPZmZzZXQgPSBzdGQ6Om1heChzdGQ6Om1pbihvZmZzZXQueSgpLCBjb250ZW50c0hl
aWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKSwgMCk7CiAKLXZvaWQgU2Nyb2xsVmlldzo6dmFsdWVD
aGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsYmFyKQotewotICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2Ug
cmVhbGx5IG1vdmVkLgogICAgIEludFNpemUgbmV3T2Zmc2V0ID0gbV9zY3JvbGxPZmZzZXQ7Ci0g
ICAgaWYgKHNjcm9sbGJhcikgewotICAgICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgICAgICBuZXdPZmZzZXQuc2V0V2lkdGgo
c2Nyb2xsYmFyLT52YWx1ZSgpIC0gbV9zY3JvbGxPcmlnaW4ueCgpKTsKLSAgICAgICAgZWxzZSBp
ZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAg
ICAgICAgbmV3T2Zmc2V0LnNldEhlaWdodChzY3JvbGxiYXItPnZhbHVlKCkgLSBtX3Njcm9sbE9y
aWdpbi55KCkpOwotICAgIH0KKyAgICBuZXdPZmZzZXQuc2V0V2lkdGgoaG9yaXpvbnRhbE9mZnNl
dCAtIG1fc2Nyb2xsT3JpZ2luLngoKSk7CisgICAgbmV3T2Zmc2V0LnNldEhlaWdodCh2ZXJ0aWNh
bE9mZnNldCAtIG1fc2Nyb2xsT3JpZ2luLnkoKSk7CisKKyAgICBzY3JvbGxUbyhuZXdPZmZzZXQp
OworfQogCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNl
dCkKK3sKICAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbmV3T2Zmc2V0IC0gbV9zY3JvbGxPZmZz
ZXQ7CiAgICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMzUxLDEzICszNDYsMTMgQEAgdm9pZCBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5nZWQoU2Nyb2xs
YmFyKgogICAgIHNjcm9sbENvbnRlbnRzKHNjcm9sbERlbHRhKTsKIH0KIAotdm9pZCBTY3JvbGxW
aWV3Ojp2YWx1ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCitpbnQgU2Nyb2xs
Vmlldzo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBzY3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAg
aWYgKHNjcm9sbGJhcnNTdXBwcmVzc2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJlcGFp
bnRGaXhlZEVsZW1lbnRzQWZ0ZXJTY3JvbGxpbmcoKTsKLSAgICBzY3JvbGxDb250ZW50cyhzY3Jv
bGxEZWx0YSk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24oKS54KCk7CisgICAgaWYg
KHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikKKyAgICAgICAg
cmV0dXJuIHNjcm9sbFBvc2l0aW9uKCkueSgpOworICAgIHJldHVybiAwOwogfQogCiB2b2lkIFNj
cm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBzY3JvbGxQb2ludCkK
QEAgLTM5MSwxNSArMzg2LDggQEAgYm9vbCBTY3JvbGxWaWV3OjpzY3JvbGwoU2Nyb2xsRGlyZWN0
aW9uIAogewogICAgIGlmIChwbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICByZXR1cm4gcGxhdGZv
cm1TY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgCi0gICAgaWYgKGRpcmVjdGlv
biA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgewotICAgICAgICBpZiAo
bV92ZXJ0aWNhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVybiBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKG1faG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIHJldHVybiBtX2hvcml6
b250YWxTY3JvbGxiYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRp
cmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwogfQogCiBib29sIFNjcm9sbFZpZXc6OmxvZ2ljYWxTY3Jv
bGwoU2Nyb2xsTG9naWNhbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5KQpAQCAtNTMwLDcgKzUxOCw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Ny
b2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3Vw
cHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+
c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3RlcCgpLCBwYWdlU3RlcCk7CiAgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRXaWR0aCwgY29u
dGVudHNXaWR0aCgpKTsKLSAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRWYWx1ZShz
Y3JvbGwud2lkdGgoKSArIG1fc2Nyb2xsT3JpZ2luLngoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Ny
b2xsQW5pbWF0b3IpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAg
ICAgICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oZmFs
c2UpOyAKICAgICB9IApAQCAtNTUyLDcgKzUzOSw2IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRl
U2Nyb2xsYmFycyhjb25zdCAKICAgICAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1
cHByZXNzSW52YWxpZGF0aW9uKHRydWUpOwogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5z
ZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAg
ICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRl
bnRzSGVpZ2h0KCkpOwotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRWYWx1ZShzY3Jv
bGwuaGVpZ2h0KCkgKyBtX3Njcm9sbE9yaWdpbi55KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9s
bEFuaW1hdG9yKTsKICAgICAgICAgaWYgKG1fc2Nyb2xsYmFyc1N1cHByZXNzZWQpCiAgICAgICAg
ICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7
CiAgICAgfQpAQCAtNTYyLDE1ICs1NDgsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9s
bGJhcnMoY29uc3QgCiAgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lcigpOwogICAgIH0KIAotICAg
IC8vIFNlZSBpZiBvdXIgb2Zmc2V0IGhhcyBjaGFuZ2VkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdl
IG1pZ2h0IG5vdCBoYXZlIHNjcm9sbGJhcnMuCi0gICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4g
ZWRpdGluZyBhIGJvZHkgd2l0aCBvdmVyZmxvdzpoaWRkZW4gYW5kIHNjcm9sbGluZyB0byByZXZl
YWwgc2VsZWN0aW9uLgotICAgIC8vIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIG1heGltaXppbmcg
YSB3aW5kb3cgdGhhdCBoYXMgc2Nyb2xsYmFycyAoYnV0IHRoZSBuZXcgbWF4aW1pemVkIHJlc3Vs
dAotICAgIC8vIGRvZXMgbm90KS4KLSAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gc2Nyb2xsIC0g
bV9zY3JvbGxPZmZzZXQ7Ci0gICAgaWYgKHNjcm9sbERlbHRhICE9IEludFNpemUoKSkgewotICAg
ICAgIG1fc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsOwotICAgICAgIHZhbHVlQ2hhbmdlZChzY3JvbGxE
ZWx0YSk7Ci0gICAgfQorICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0
QW5pbWF0aW9uKEZsb2F0UG9pbnQoc2Nyb2xsLndpZHRoKCksIHNjcm9sbC5oZWlnaHQoKSkpOwog
CiAgICAgbV9pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKIH0KQEAgLTc1Nyw2ICs3MzUsNyBA
QCB2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVlCiAgICAgLy8gc2Nyb2xs
IGFueSBmdXJ0aGVyLgogICAgIGZsb2F0IGRlbHRhWCA9IG1faG9yaXpvbnRhbFNjcm9sbGJhciA/
IGUuZGVsdGFYKCkgOiAwOwogICAgIGZsb2F0IGRlbHRhWSA9IG1fdmVydGljYWxTY3JvbGxiYXIg
PyBlLmRlbHRhWSgpIDogMDsKKyAgICAKICAgICBJbnRTaXplIG1heEZvcndhcmRTY3JvbGxEZWx0
YSA9IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIC0gc2Nyb2xsUG9zaXRpb24oKTsKICAgICBJbnRT
aXplIG1heEJhY2t3YXJkU2Nyb2xsRGVsdGEgPSBzY3JvbGxQb3NpdGlvbigpIC0gbWluaW11bVNj
cm9sbFBvc2l0aW9uKCk7CiAgICAgaWYgKChkZWx0YVggPCAwICYmIG1heEZvcndhcmRTY3JvbGxE
ZWx0YS53aWR0aCgpID4gMCkKQEAgLTc3Myw5ICs3NTIsOSBAQCB2b2lkIFNjcm9sbFZpZXc6Ondo
ZWVsRXZlbnQoUGxhdGZvcm1XaGVlCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZGVsdGFZKQot
ICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbFVwLCBTY3JvbGxC
eVBpeGVsLCBkZWx0YVkpOworICAgICAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Ny
b2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7CiAgICAgICAgIGlmIChkZWx0YVgpCi0gICAg
ICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxC
eVBpeGVsLCBkZWx0YVgpOworICAgICAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Ny
b2xsTGVmdCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFYKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMCArNjAs
MTIgQEAgcHVibGljOgogCiAgICAgLy8gU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1l
VmlldyBvdmVycmlkZXMgdGhlIG90aGVycy4KICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1
YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVl
Q2hhbmdlZChjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24o
U2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25z
dCBJbnRQb2ludCYpOwogICAgIAorICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2Fs
bGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYmFyQ2xpZW50
LgorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUbyhjb25zdCBJbnRTaXplJiBuZXdPZmZzZXQpOwor
CiAgICAgLy8gVGhlIHdpbmRvdyB0aGF0cyBob3N0cyB0aGUgU2Nyb2xsVmlldy4gVGhlIFNjcm9s
bFZpZXcgd2lsbCBjb21tdW5pY2F0ZSBzY3JvbGxzIGFuZCByZXBhaW50cyB0byB0aGUKICAgICAv
LyBob3N0IHdpbmRvdyBpbiB0aGUgd2luZG93J3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICB2aXJ0
dWFsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdCA9IDA7CkBAIC03OCw4ICs4MCw4IEBA
IHB1YmxpYzoKICAgICAKICAgICAvLyBJZiB0aGUgc2Nyb2xsIHZpZXcgZG9lcyBub3QgdXNlIGEg
bmF0aXZlIHdpZGdldCwgdGhlbiBpdCB3aWxsIGhhdmUgY3Jvc3MtcGxhdGZvcm0gU2Nyb2xsYmFy
cy4gVGhlc2UgZnVuY3Rpb25zCiAgICAgLy8gY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRob3NlIHNj
cm9sbGJhcnMuCi0gICAgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyBy
ZXR1cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9Ci0gICAgU2Nyb2xsYmFyKiB2ZXJ0
aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIuZ2V0KCk7
IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIG1faG9yaXpvbnRhbFNjcm9sbGJhci5nZXQoKTsgfQorICAgIHZpcnR1YWwgU2Nyb2xs
YmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxi
YXIuZ2V0KCk7IH0KICAgICBib29sIGlzU2Nyb2xsVmlld1Njcm9sbGJhcihjb25zdCBXaWRnZXQq
IGNoaWxkKSBjb25zdCB7IHJldHVybiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgPT0gY2hpbGQgfHwg
dmVydGljYWxTY3JvbGxiYXIoKSA9PSBjaGlsZDsgfQogCiAgICAgLy8gRnVuY3Rpb25zIGZvciBz
ZXR0aW5nIGFuZCByZXRyaWV2aW5nIHRoZSBzY3JvbGxpbmcgbW9kZSBpbiBlYWNoIGF4aXMgKGhv
cml6b250YWwvdmVydGljYWwpLiBUaGUgbW9kZSBoYXMgdmFsdWVzIG9mCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsx
MDQsMTkgQEAgU2Nyb2xsYmFyOjp+U2Nyb2xsYmFyKCkKICAgICBtX3RoZW1lLT51bnJlZ2lzdGVy
U2Nyb2xsYmFyKHRoaXMpOwogfQogCi1ib29sIFNjcm9sbGJhcjo6c2V0VmFsdWUoaW50IHYsIFNj
cm9sbFNvdXJjZSBzb3VyY2UpCit2b2lkIFNjcm9sbGJhcjo6b2Zmc2V0RGlkQ2hhbmdlKCkKIHsK
LSAgICB2ID0gbWF4KG1pbih2LCBtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUpLCAwKTsKLSAg
ICBpZiAodmFsdWUoKSA9PSB2KQotICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE91ciB2YWx1ZSBz
dGF5ZWQgdGhlIHNhbWUuCi0gICAgc2V0Q3VycmVudFBvcyh2LCBzb3VyY2UpOwotICAgIHJldHVy
biB0cnVlOworICAgIEFTU0VSVChtX2NsaWVudCk7CisKKyAgICBmbG9hdCBwb3NpdGlvbiA9IHN0
YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsUG9zaXRpb24odGhpcykpOworICAgIGlm
IChwb3NpdGlvbiA9PSBtX2N1cnJlbnRQb3MpCisgICAgICAgIHJldHVybjsKKworICAgIGludCBv
bGRUaHVtYlBvc2l0aW9uID0gdGhlbWUoKS0+dGh1bWJQb3NpdGlvbih0aGlzKTsKKyAgICBtX2N1
cnJlbnRQb3MgPSBwb3NpdGlvbjsKKyAgICB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7CisgICAgaWYg
KG1fcHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQorICAgICAgICBzZXRQcmVzc2VkUG9zKG1fcHJl
c3NlZFBvcyArIHRoZW1lKCktPnRodW1iUG9zaXRpb24odGhpcykgLSBvbGRUaHVtYlBvc2l0aW9u
KTsgICAgCiB9CiAKIHZvaWQgU2Nyb2xsYmFyOjpzZXRQcm9wb3J0aW9uKGludCB2aXNpYmxlU2l6
ZSwgaW50IHRvdGFsU2l6ZSkKQEAgLTEzMSwzMSArMTM3LDYgQEAgdm9pZCBTY3JvbGxiYXI6OnNl
dFN0ZXBzKGludCBsaW5lU3RlcCwgaQogICAgIG1fcGl4ZWxTdGVwID0gMS4wZiAvIHBpeGVsc1Bl
clN0ZXA7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVj
dGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIpCi17
Ci0jaWYgSEFWRShBQ0NFU1NJQklMSVRZKQotICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3Np
YmlsaXR5RW5hYmxlZCgpICYmIGF4T2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgYXhPYmplY3RDYWNo
ZSgpLT5wb3N0Tm90aWZpY2F0aW9uKGF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUodGhpcyks
IDAsIEFYT2JqZWN0Q2FjaGU6OkFYVmFsdWVDaGFuZ2VkLCB0cnVlKTsKLSNlbmRpZgotCi0gICAg
Ly8gSWdub3JlIHBlcnBlbmRpY3VsYXIgc2Nyb2xscy4KLSAgICBpZiAoKG1fb3JpZW50YXRpb24g
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgPyAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVj
dGlvbiA9PSBTY3JvbGxEb3duKSA6IChkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCB8fCBkaXJlY3Rp
b24gPT0gU2Nyb2xsUmlnaHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZmxvYXQgc3Rl
cCA9IDA7Ci0gICAgc3dpdGNoIChncmFudWxhcml0eSkgewotICAgIGNhc2UgU2Nyb2xsQnlMaW5l
OiAgICAgc3RlcCA9IG1fbGluZVN0ZXA7ICBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5UGFnZTog
ICAgIHN0ZXAgPSBtX3BhZ2VTdGVwOyAgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCeURvY3VtZW50
OiBzdGVwID0gbV90b3RhbFNpemU7IGJyZWFrOwotICAgIGNhc2UgU2Nyb2xsQnlQaXhlbDogICAg
c3RlcCA9IG1fcGl4ZWxTdGVwOyBicmVhazsKLSAgICB9Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBT
Y3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKLSAgICAgICAgbXVsdGlwbGllciA9
IC1tdWx0aXBsaWVyOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGNsaWVudCgp
LT5zY3JvbGwobV9vcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwot
Ci0gICAgcmV0dXJuIHNldEN1cnJlbnRQb3MobWF4KG1pbihtX2N1cnJlbnRQb3MgKyAoc3RlcCAq
IG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV90b3RhbFNpemUgLSBtX3Zpc2libGVT
aXplKSksIDAuMGYpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotfQotCiB2b2lkIFNjcm9sbGJh
cjo6dXBkYXRlVGh1bWIoKQogewogI2lmZGVmIFRIVU1CX1BPU0lUSU9OX0FGRkVDVFNfQlVUVE9O
UwpAQCAtMjE1LDcgKzE5Niw3IEBAIHZvaWQgU2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBh
cnQoZG8KICAgICB9CiAKICAgICAvLyBIYW5kbGUgdGhlIGFycm93cyBhbmQgdHJhY2suCi0gICAg
aWYgKHNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlvbigpLCBwcmVzc2VkUGFydFNjcm9s
bEdyYW51bGFyaXR5KCkpKQorICAgIGlmIChjbGllbnQoKS0+c2Nyb2xsKHByZXNzZWRQYXJ0U2Ny
b2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3JhbnVsYXJpdHkoKSkpCiAgICAgICAg
IHN0YXJ0VGltZXJJZk5lZWRlZChkZWxheSk7CiB9CiAKQEAgLTI4NCwyOCArMjY1LDE0IEBAIHZv
aWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBvcykKICAgICAgICAgZGVsdGEgPSBtaW4obWF4
UG9zIC0gdGh1bWJQb3MsIGRlbHRhKTsKICAgICBlbHNlIGlmIChkZWx0YSA8IDApCiAgICAgICAg
IGRlbHRhID0gbWF4KC10aHVtYlBvcywgZGVsdGEpOwotICAgIGlmIChkZWx0YSkKLSAgICAgICAg
c2V0Q3VycmVudFBvcyhzdGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhp
bXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbiksIE5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci19
Ci0KLWJvb2wgU2Nyb2xsYmFyOjpzZXRDdXJyZW50UG9zKGZsb2F0IHBvcywgU2Nyb2xsU291cmNl
IHNvdXJjZSkKLXsKLSAgICBpZiAoKHNvdXJjZSAhPSBGcm9tU2Nyb2xsQW5pbWF0b3IpICYmIGNs
aWVudCgpKQotICAgICAgICBjbGllbnQoKS0+c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0
aW9uKG1fb3JpZW50YXRpb24sIHBvcyk7Ci0KLSAgICBpZiAocG9zID09IG1fY3VycmVudFBvcykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IG9sZFZhbHVlID0gdmFsdWUoKTsKLSAg
ICBpbnQgb2xkVGh1bWJQb3MgPSB0aGVtZSgpLT50aHVtYlBvc2l0aW9uKHRoaXMpOwotICAgIG1f
Y3VycmVudFBvcyA9IHBvczsKLSAgICB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7Ci0gICAgaWYgKG1f
cHJlc3NlZFBhcnQgPT0gVGh1bWJQYXJ0KQotICAgICAgICBzZXRQcmVzc2VkUG9zKG1fcHJlc3Nl
ZFBvcyArIHRoZW1lKCktPnRodW1iUG9zaXRpb24odGhpcykgLSBvbGRUaHVtYlBvcyk7Ci0KLSAg
ICBpZiAodmFsdWUoKSAhPSBvbGRWYWx1ZSAmJiBjbGllbnQoKSkKLSAgICAgICAgY2xpZW50KCkt
PnZhbHVlQ2hhbmdlZCh0aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoZGVs
dGEpIHsKKyAgICAgICAgaW50IG5ld1Bvc2l0aW9uID0gbHJvdW5kZihzdGF0aWNfY2FzdDxmbG9h
dD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tMZW4gLSB0aHVtYkxlbikp
OworICAgICAgICBpZiAobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAg
ICAgICAgICAgY2xpZW50KCktPnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24obmV3UG9z
aXRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbGllbnQoKS0+c2Nyb2xsVG9ZT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihuZXdQb3NpdGlvbik7CisgICAgfQogfQogCiB2b2lkIFNjcm9s
bGJhcjo6c2V0SG92ZXJlZFBhcnQoU2Nyb2xsYmFyUGFydCBwYXJ0KQpAQCAtMzM2LDkgKzMwMywx
MiBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyCiBib29sIFNjcm9s
bGJhcjo6bW91c2VNb3ZlZChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIGV2dCkKIHsKICAgICBp
ZiAobV9wcmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpIHsKLSAgICAgICAgaWYgKHRoZW1lKCktPnNo
b3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2dCkpCi0gICAgICAgICAgICBzZXRDdXJy
ZW50UG9zKG1fZHJhZ09yaWdpbiwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKLSAgICAgICAgZWxz
ZSB7CisgICAgICAgIGlmICh0aGVtZSgpLT5zaG91bGRTbmFwQmFja1RvRHJhZ09yaWdpbih0aGlz
LCBldnQpKSB7CisgICAgICAgICAgICBpZiAobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICAgICAgICAgIGNsaWVudCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0
QW5pbWF0aW9uKG1fZHJhZ09yaWdpbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgY2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24obV9kcmFnT3JpZ2lu
KTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1vdmVUaHVtYihtX29yaWVudGF0aW9u
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyAKICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZ0LnBvcygpKS54KCkgOgogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldnQucG9zKCkpLnkoKSk7CkBAIC01MjEs
NCArNDkxLDQgQEAgSW50UG9pbnQgU2Nyb2xsYmFyOjpjb252ZXJ0RnJvbUNvbnRhaW5pbgogICAg
IHJldHVybiBXaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UG9pbnQpOwog
fQogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxiYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gTXVzdCBiZSBpbXBsZW1lbnRlZCBieSBwbGF0Zm9ybXMgdGhhdCBjYW4ndCBzaW1wbHkgdXNl
IHRoZSBTY3JvbGxiYXIgYmFzZSBjbGFzcy4gIFJpZ2h0IG5vdyB0aGUgb25seSBwbGF0Zm9ybSB0
aGF0IGlzIG5vdCB1c2luZyB0aGUgYmFzZSBjbGFzcyBpcyBHVEsuCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U2Nyb2xsYmFyPiBjcmVhdGVOYXRpdmVTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBj
bGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSBzaXplKTsKIAorICAgIC8vIENhbGxlZCBieSB0aGUgU2Nyb2xsYmFyQ2xpZW50IHdoZW4g
dGhlIHNjcm9sbCBvZmZzZXQgY2hhbmdlcy4KKyAgICB2b2lkIG9mZnNldERpZENoYW5nZSgpOwor
CiAgICAgc3RhdGljIGludCBwaXhlbHNQZXJMaW5lU3RlcCgpIHsgcmV0dXJuIDQwOyB9CiAgICAg
c3RhdGljIGZsb2F0IG1pbkZyYWN0aW9uVG9TdGVwV2hlblBhZ2luZygpIHsgcmV0dXJuIDAuODc1
ZjsgfQogICAgIHN0YXRpYyBpbnQgbWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpOwpAQCAtNjEsNyAr
NjQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21TY3JvbGxiYXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQotICAgIAorCiAgICAgaW50IHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbHJvdW5kZihtX2N1cnJlbnRQb3MpOyB9CiAgICAgZmxvYXQg
Y3VycmVudFBvcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFBvczsgfQogICAgIGludCBwcmVz
c2VkUG9zKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzc2VkUG9zOyB9CkBAIC03MywxOCArNzYsMTUg
QEAgcHVibGljOgogICAgIGludCBsaW5lU3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVN0ZXA7
IH0KICAgICBpbnQgcGFnZVN0ZXAoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTdGVwOyB9CiAgICAg
ZmxvYXQgcGl4ZWxTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbFN0ZXA7IH0KLSAgICAKKwog
ICAgIFNjcm9sbGJhclBhcnQgcHJlc3NlZFBhcnQoKSBjb25zdCB7IHJldHVybiBtX3ByZXNzZWRQ
YXJ0OyB9CiAgICAgU2Nyb2xsYmFyUGFydCBob3ZlcmVkUGFydCgpIGNvbnN0IHsgcmV0dXJuIG1f
aG92ZXJlZFBhcnQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SG92ZXJlZFBhcnQoU2Nyb2xsYmFy
UGFydCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFByZXNzZWRQYXJ0KFNjcm9sbGJhclBhcnQpOwog
CiAgICAgdm9pZCBzZXRTdGVwcyhpbnQgbGluZVN0ZXAsIGludCBwYWdlU3RlcCwgaW50IHBpeGVs
c1BlclN0ZXAgPSAxKTsKLSAgICBib29sIHNldFZhbHVlKGludCwgU2Nyb2xsU291cmNlIHNvdXJj
ZSk7CiAgICAgdm9pZCBzZXRQcm9wb3J0aW9uKGludCB2aXNpYmxlU2l6ZSwgaW50IHRvdGFsU2l6
ZSk7CiAgICAgdm9pZCBzZXRQcmVzc2VkUG9zKGludCBwKSB7IG1fcHJlc3NlZFBvcyA9IHA7IH0K
LQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIgPSAxKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhp
Y3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgZGFtYWdlUmVjdCk7CiAKQEAgLTE3MiwxMCArMTcy
LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxiYXIo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBBWE9iamVjdENhY2hlKiBheE9i
amVjdENhY2hlKCkgY29uc3Q7Ci0KLSAgICBib29sIHNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBT
Y3JvbGxTb3VyY2Ugc291cmNlKTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAot
I2VuZGlmCisjZW5kaWYgLy8gU2Nyb2xsYmFyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbGJhckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50
LmgiCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNDQsMTQgKzQ2LDY4IEBAIFNjcm9sbGJhckNsaWVudDo6flNjcm9sbGJhckNsaWVudCgp
CiB7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRp
b24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKQorYm9vbCBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxE
aXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllcikKIHsKKyAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKKyAg
ICBTY3JvbGxiYXIqIHNjcm9sbGJhcjsKKyAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8
IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSB7CisgICAgICAgIG9yaWVudGF0aW9uID0gVmVydGlj
YWxTY3JvbGxiYXI7CisgICAgICAgIHNjcm9sbGJhciA9IHZlcnRpY2FsU2Nyb2xsYmFyKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgb3JpZW50YXRpb24gPSBIb3Jpem9udGFsU2Nyb2xsYmFyOwor
ICAgICAgICBzY3JvbGxiYXIgPSBob3Jpem9udGFsU2Nyb2xsYmFyKCk7CisgICAgfQorCisgICAg
aWYgKCFzY3JvbGxiYXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZsb2F0IHN0ZXAg
PSAwOworICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKKyAgICBjYXNlIFNjcm9sbEJ5TGluZToK
KyAgICAgICAgc3RlcCA9IHNjcm9sbGJhci0+bGluZVN0ZXAoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTY3JvbGxCeVBhZ2U6CisgICAgICAgIHN0ZXAgPSBzY3JvbGxiYXItPnBhZ2VTdGVw
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Nyb2xsQnlEb2N1bWVudDoKKyAgICAgICAg
c3RlcCA9IHNjcm9sbGJhci0+dG90YWxTaXplKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U2Nyb2xsQnlQaXhlbDoKKyAgICAgICAgc3RlcCA9IHNjcm9sbGJhci0+cGl4ZWxTdGVwKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwg
ZGlyZWN0aW9uID09IFNjcm9sbExlZnQpCisgICAgICAgIG11bHRpcGxpZXIgPSAtbXVsdGlwbGll
cjsKKwogICAgIHJldHVybiBtX3Njcm9sbEFuaW1hdG9yLT5zY3JvbGwob3JpZW50YXRpb24sIGdy
YW51bGFyaXR5LCBzdGVwLCBtdWx0aXBsaWVyKTsKIH0KIAotdm9pZCBTY3JvbGxiYXJDbGllbnQ6
OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgZmxvYXQgcG9zKQordm9pZCBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBvZmZzZXQpCit7CisgICAgbV9z
Y3JvbGxBbmltYXRvci0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7Cit9
CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGZsb2F0IHgpCit7CisgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9p
bnQoeCwgbV9zY3JvbGxBbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7Cit9CisKK3Zv
aWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0
IHkpCit7CisgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQobV9z
Y3JvbGxBbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCkueCgpLCB5KSk7Cit9CisKK3ZvaWQgU2Ny
b2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
JiBvZmZzZXQpCiB7Ci0gICAgbV9zY3JvbGxBbmltYXRvci0+c2V0U2Nyb2xsUG9zaXRpb25BbmRT
dG9wQW5pbWF0aW9uKG9yaWVudGF0aW9uLCBwb3MpOworICAgIC8vIFRlbGwgdGhlIGRlcml2ZWQg
Y2xhc3MgdG8gc2Nyb2xsIGl0cyBjb250ZW50cy4KKyAgICBzZXRTY3JvbGxPZmZzZXQob2Zmc2V0
KTsKKworICAgIC8vIFRlbGwgdGhlIHNjcm9sbGJhcnMgdG8gdXBkYXRlIHRoZWlyIHRodW1iIHBv
c3Rpb25zLgorICAgIGlmIChTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIgPSB0aGlzLT5o
b3Jpem9udGFsU2Nyb2xsYmFyKCkpCisgICAgICAgIGhvcml6b250YWxTY3JvbGxiYXItPm9mZnNl
dERpZENoYW5nZSgpOworICAgIGlmIChTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyID0gdGhp
cy0+dmVydGljYWxTY3JvbGxiYXIoKSkKKyAgICAgICAgdmVydGljYWxTY3JvbGxiYXItPm9mZnNl
dERpZENoYW5nZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkocmV2aXNpb24gNzYyNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTMgKzI2LDE0IEBACiAjaWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCiAjZGVmaW5lIFNj
cm9sbGJhckNsaWVudF9oCiAKLSNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRmxvYXRQb2ludDsKK2NsYXNzIFBsYXRmb3Jt
V2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbEFuaW1hdG9yOwogCiBjbGFzcyBTY3JvbGxiYXJDbGll
bnQgewpAQCAtNDAsMTggKzQxLDIzIEBAIHB1YmxpYzoKICAgICBTY3JvbGxiYXJDbGllbnQoKTsK
ICAgICB2aXJ0dWFsIH5TY3JvbGxiYXJDbGllbnQoKTsKIAotICAgIGJvb2wgc2Nyb2xsKFNjcm9s
bGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0
eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdm9pZCBzZXRTY3JvbGxQb3Np
dGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZs
b2F0IHBvcyk7CisgICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgZmxvYXQgbXVsdGlwbGllciA9IDEpOworICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIHNjcm9sbFRvWE9mZnNl
dFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeCk7CisgICAgdm9pZCBzY3JvbGxUb1lPZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKGZsb2F0IHgpOwogCi0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKikgPSAwOworICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3Qm
KSA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgPSAwOwotCiAgICAgdmlydHVh
bCB2b2lkIGdldFRpY2ttYXJrcyhWZWN0b3I8SW50UmVjdD4mKSBjb25zdCB7IH0KIAorICAgIC8v
IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG92ZXJyaWRlbiBieSBzdWJjbGFzc2VzIHRvIHBlcmZv
cm0gdGhlIGFjdHVhbAorICAgIC8vIHNjcm9sbCBvZiB0aGUgY29udGVudC4KKyAgICB2aXJ0dWFs
IHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JikgPSAwOworCisKICAgICAvLyBD
b252ZXJ0IHBvaW50cyBhbmQgcmVjdHMgYmV0d2VlbiB0aGUgc2Nyb2xsYmFyIGFuZCBpdHMgY29u
dGFpbmluZyB2aWV3LgogICAgIC8vIFRoZSBjbGllbnQgbmVlZHMgdG8gaW1wbGVtZW50IHRoZXNl
IGluIG9yZGVyIHRvIGJlIGF3YXJlIG9mIGxheW91dCBlZmZlY3RzCiAgICAgLy8gbGlrZSBDU1Mg
dHJhbnNmb3Jtcy4KQEAgLTcyLDkgKzc4LDE3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNj
cm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVudFBvaW50KTsK
ICAgICB9CiAKKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhcigpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxi
YXIoKSBjb25zdCB7IHJldHVybiAwOyB9CisKIHByaXZhdGU6CisgICAgLy8gTk9URTogT25seSBj
YWxsZWQgZnJvbSB0aGUgU2Nyb2xsQW5pbWF0b3IuCisgICAgZnJpZW5kIGNsYXNzIFNjcm9sbEFu
aW1hdG9yOworICAgIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQ
b2ludCYpOworCiAgICAgT3duUHRyPFNjcm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwog
fTsKIAotfQotI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBTY3Jv
bGxiYXJDbGllbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJh
ckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9s
bGJhckVmbC5jcHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
ZWZsL1Njcm9sbGJhckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDEwIEBAIHN0
YXRpYyB2b2lkIHNjcm9sbGJhckVmbEVkamVNZXNzYWdlKHZvaWQKIAogICAgIG0gPSBzdGF0aWNf
Y2FzdDxFZGplX01lc3NhZ2VfRmxvYXQqPihtc2cpOwogICAgIHYgPSBtLT52YWwgKiAodGhhdC0+
dG90YWxTaXplKCkgLSB0aGF0LT52aXNpYmxlU2l6ZSgpKTsKLSAgICB0aGF0LT5zZXRWYWx1ZSh2
LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgaWYgKHRoYXQtPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgdGhhdC0+Y2xpZW50KCkt
PnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24odik7CisgICAgZWxzZQorICAgICAgICB0
aGF0LT5jbGllbnQoKS0+c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbih2KTsKIH0KIAog
dm9pZCBTY3JvbGxiYXJFZmw6OnNldFBhcmVudChTY3JvbGxWaWV3KiB2aWV3KQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0
ay5jcHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01h
aW5GcmFtZVNjcm9sbGJhckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0xMDgsNyAr
MTA5LDEwIEBAIHZvaWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjp1cGRhdGVUaHVtYlAKIAogdm9p
ZCBNYWluRnJhbWVTY3JvbGxiYXJHdGs6Omd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50Kiwg
TWFpbkZyYW1lU2Nyb2xsYmFyR3RrKiB0aGF0KQogewotICAgIHRoYXQtPnNldFZhbHVlKHN0YXRp
Y19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudC5n
ZXQoKSkpLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIGlmICh0aGF0LT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAgIHRoYXQtPmNsaWVudCgpLT5zY3Jv
bGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHN0YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1l
bnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudC5nZXQoKSkpKTsKKyAgICBlbHNlCisgICAg
ICAgIHRoYXQtPmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHN0YXRp
Y19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudC5n
ZXQoKSkpKTsKIH0KIAogdm9pZCBNYWluRnJhbWVTY3JvbGxiYXJHdGs6OnBhaW50KEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCShyZXZpc2lvbiA3NjI3
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9M
TElORykKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRv
ci5oIgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtNDYsMTAgKzQ1LDkgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yTWFjKCk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
c3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbFBvc2l0
aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxvYXQgcG9zaXRpb24p
OworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3Qg
RmxvYXRQb2ludCYpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IHRoZSBTY3JvbGxBbmltYXRpb25IZWxw
ZXJEZWxlZ2F0ZS4KLSAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbigpIGNvbnN0OwogICAg
IHZvaWQgaW1tZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlv
bik7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xs
QW5pbWF0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1Njcm9sbEFuaW1hdG9yTWFjLm1tCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogCiAjaWYgRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCiAKKyNpbmNsdWRlICJG
bG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsQW5pbWF0b3JNYWMuaCIKICNpbmNsdWRlICJT
Y3JvbGxiYXJDbGllbnQuaCIKIApAQCAtMTYxLDIzICsxNjIsMTcgQEAgYm9vbCBTY3JvbGxBbmlt
YXRvck1hYzo6c2Nyb2xsKFNjcm9sbGJhcgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFNj
cm9sbEFuaW1hdG9yTWFjOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24oU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIGZsb2F0IHBvcykKK3ZvaWQgU2Nyb2xsQW5pbWF0
b3JNYWM6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50JiBv
ZmZzZXQpCiB7CiAgICAgW21fc2Nyb2xsQW5pbWF0aW9uSGVscGVyLmdldCgpIF9zdG9wUnVuXTsK
LSAgICBTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKG9y
aWVudGF0aW9uLCBwb3MpOwotfQotCi1GbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yTWFjOjpjdXJy
ZW50UG9zaXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBGbG9hdFBvaW50KG1fY3VycmVudFBv
c1gsIG1fY3VycmVudFBvc1kpOworICAgIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxBbmltYXRvck1hYzo6aW1t
ZWRpYXRlU2Nyb2xsVG9Qb2ludChjb25zdCBGbG9hdFBvaW50JiBuZXdQb3NpdGlvbikKIHsKICAg
ICBtX2N1cnJlbnRQb3NYID0gbmV3UG9zaXRpb24ueCgpOwogICAgIG1fY3VycmVudFBvc1kgPSBu
ZXdQb3NpdGlvbi55KCk7Ci0KLSAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CisgICAgbm90aXR5
UG9zaXRpb25DaGFuZ2VkKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHJldmlzaW9uIDc2Mjcz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAK
ICNpbmNsdWRlIDxRQXBwbGljYXRpb24+CkBAIC03NiwxNyArNzcsMTcgQEAgYm9vbCBTY3JvbGxi
YXI6OmNvbnRleHRNZW51KGNvbnN0IFBsYXRmbwogICAgICAgICBjb25zdCBRUG9pbnQgcG9zID0g
Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2ZW50LnBvcygpKTsKICAgICAgICAgbW92ZVRo
dW1iKGhvcml6b250YWwgPyBwb3MueCgpIDogcG9zLnkoKSk7CiAgICAgfSBlbHNlIGlmIChhY3Rp
b25TZWxlY3RlZCA9PSBhY3RTY3JvbGxUb3ApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURvY3VtZW50KTsKKyAgICAgICAgY2xpZW50
KCktPnNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeURv
Y3VtZW50KTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxCb3R0b20p
Ci0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBT
Y3JvbGxCeURvY3VtZW50KTsKKyAgICAgICAgY2xpZW50KCktPnNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeURvY3VtZW50KTsKICAgICBlbHNlIGlm
IChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQYWdlVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFs
ID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOworICAgICAgICBjbGllbnQo
KS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFn
ZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0UGFnZURvd24pCi0gICAgICAg
IHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBh
Z2UpOworICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6
IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQg
PT0gYWN0U2Nyb2xsVXApCi0gICAgICAgIHNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6
IFNjcm9sbFVwLCBTY3JvbGxCeUxpbmUpOworICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6
b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSk7CiAgICAgZWxzZSBp
ZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0U2Nyb2xsRG93bikKLSAgICAgICAgc2Nyb2xsKGhvcml6
b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSk7CisgICAgICAg
IGNsaWVudCgpLT5zY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwg
U2Nyb2xsQnlMaW5lKTsKICNlbmRpZiAvLyBRVF9OT19DT05URVhUTUVOVQogICAgIHJldHVybiB0
cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdp
bi5jcHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bv
cHVwTWVudVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBUb3JjaCBNb2Jp
bGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCkBAIC01MzIsMTIgKzUzMiwxMiBAQCBib29sIFBvcHVw
TWVudVdpbjo6c2Nyb2xsVG9SZXZlYWxTZWxlY3RpCiAgICAgaW50IGluZGV4ID0gZm9jdXNlZElu
ZGV4KCk7CiAKICAgICBpZiAoaW5kZXggPCBtX3Njcm9sbE9mZnNldCkgewotICAgICAgICBtX3Nj
cm9sbGJhci0+c2V0VmFsdWUoaW5kZXgsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9y
KTsKKyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGluZGV4KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgaWYgKGluZGV4
ID49IG1fc2Nyb2xsT2Zmc2V0ICsgdmlzaWJsZUl0ZW1zKCkpIHsKLSAgICAgICAgbV9zY3JvbGxi
YXItPnNldFZhbHVlKGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxLCBTY3JvbGxiYXI6Ok5vdEZy
b21TY3JvbGxBbmltYXRvcik7CisgICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zm
c2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCAtIHZpc2libGVJdGVtcygpICsgMSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNjcwLDIxICs2NzAsMjMgQEAgaW50IFBvcHVwTWVu
dVdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcgogICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09
IFZlcnRpY2FsU2Nyb2xsYmFyKSAmJiBtX3Njcm9sbGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFs
U2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBQb3B1
cE1lbnVXaW46OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKK2ludCBQb3B1cE1lbnVXaW46OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0
CiB7Ci0gICAgaWYgKG1fc2Nyb2xsYmFyKQotICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUo
b2Zmc2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIHJldHVybiBt
X3Njcm9sbE9mZnNldDsKK30KKwordm9pZCBQb3B1cE1lbnVXaW46OnNldFNjcm9sbE9mZnNldChj
b25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKG9mZnNldC55KCkpOwogfQog
Ci12b2lkIFBvcHVwTWVudVdpbjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQor
dm9pZCBQb3B1cE1lbnVXaW46OnNjcm9sbFRvKGludCBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKG1f
c2Nyb2xsYmFyKTsKIAogICAgIGlmICghbV9wb3B1cCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aW50IG9mZnNldCA9IHNjcm9sbEJhci0+dmFsdWUoKTsKLQogICAgIGlmIChtX3Njcm9sbE9mZnNl
dCA9PSBvZmZzZXQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTkxLDcgKzk5Myw4IEBAIExSRVNV
TFQgUG9wdXBNZW51V2luOjp3bmRQcm9jKEhXTkQgaFduZCwKICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgIC0taTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNj
cm9sbGJhcigpLT5zY3JvbGwoaSA+IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5
TGluZSwgYWJzKGkpKTsKKworICAgICAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoaSA+
IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwgYWJzKGkpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9Qb3B1cE1lbnVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vUG9wdXBNZW51V2luLmgJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw2
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRXYXNDbGlja2VkKGJvb2wgYiA9IHRydWUpIHsgbV93
YXNDbGlja2VkID0gYjsgfQogICAgIGJvb2wgd2FzQ2xpY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2FzQ2xpY2tlZDsgfQogCi0gICAgdm9pZCBzZXRTY3JvbGxPZmZzZXQoaW50IG9mZnNldCkgeyBt
X3Njcm9sbE9mZnNldCA9IG9mZnNldDsgfQogICAgIGludCBzY3JvbGxPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbE9mZnNldDsgfQogCiAgICAgYm9vbCBzY3JvbGxUb1JldmVhbFNlbGVj
dGlvbigpOwpAQCAtOTIsMTEgKzkxLDE1IEBAIHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxCYXJD
bGllbnQKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYp
OwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBj
b25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQorCisgICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxP
ZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQgb2Zmc2V0
KTsKIAogICAgIHZvaWQgY2FsY3VsYXRlUG9zaXRpb25BbmRTaXplKGNvbnN0IEludFJlY3QmLCBG
cmFtZVZpZXcqKTsKICAgICB2b2lkIGludmFsaWRhdGVJdGVtKGludCBpbmRleCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDc2MjczKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMwNiwyMyArMTMwNiwzNiBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vy
c2l2ZWx5KGluCiAgICAgfQogfQogCi12b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb09mZnNldChp
bnQgeCwgaW50IHksIGJvb2wgdXBkYXRlU2Nyb2xsYmFycywgYm9vbCByZXBhaW50KQordm9pZCBS
ZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQoaW50IHgsIGludCB5KQoreworICAgIFNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEludFBvaW50KHgsIHkpKTsK
K30KKwordm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG8oaW50IHgsIGludCB5KQogewogICAgIFJl
bmRlckJveCogYm94ID0gcmVuZGVyQm94KCk7CiAgICAgaWYgKCFib3gpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmIChib3gtPnN0eWxlKCktPm92ZXJmbG93WCgpICE9IE9NQVJRVUVFKSB7Ci0g
ICAgICAgIGlmICh4IDwgMCkgeCA9IDA7Ci0gICAgICAgIGlmICh5IDwgMCkgeSA9IDA7CisgICAg
ICAgIGlmICh4IDwgMCkKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICBpZiAoeSA8IDApCisg
ICAgICAgICAgICB5ID0gMDsKICAgICAKICAgICAgICAgLy8gQ2FsbCB0aGUgc2Nyb2xsV2lkdGgv
SGVpZ2h0IGZ1bmN0aW9ucyBzbyB0aGF0IHRoZSBkaW1lbnNpb25zIHdpbGwgYmUgY29tcHV0ZWQg
aWYgdGhleSBuZWVkCiAgICAgICAgIC8vIHRvIGJlIChmb3Igb3ZlcmZsb3c6aGlkZGVuIGJsb2Nr
cykuCiAgICAgICAgIGludCBtYXhYID0gc2Nyb2xsV2lkdGgoKSAtIGJveC0+Y2xpZW50V2lkdGgo
KTsKKyAgICAgICAgaWYgKG1heFggPCAwKQorICAgICAgICAgICAgbWF4WCA9IDA7CiAgICAgICAg
IGludCBtYXhZID0gc2Nyb2xsSGVpZ2h0KCkgLSBib3gtPmNsaWVudEhlaWdodCgpOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHggPiBtYXhYKSB4ID0gbWF4WDsKLSAgICAgICAgaWYgKHkgPiBtYXhZ
KSB5ID0gbWF4WTsKKyAgICAgICAgaWYgKG1heFkgPCAwKQorICAgICAgICAgICAgbWF4WSA9IDA7
CisKKyAgICAgICAgaWYgKHggPiBtYXhYKQorICAgICAgICAgICAgeCA9IG1heFg7CisgICAgICAg
IGlmICh5ID4gbWF4WSkKKyAgICAgICAgICAgIHkgPSBtYXhZOwogICAgIH0KICAgICAKICAgICAv
LyBGSVhNRTogRXZlbnR1YWxseSwgd2Ugd2lsbCB3YW50IHRvIHBlcmZvcm0gYSBibGl0LiAgRm9y
IG5vdyBuZXZlcgpAQCAtMTM4NiwxNiArMTM5OSw5IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9s
bFRvT2Zmc2V0KGludCB4LCAKICAgICB9CiAKICAgICAvLyBKdXN0IHNjaGVkdWxlIGEgZnVsbCBy
ZXBhaW50IG9mIG91ciBvYmplY3QuCi0gICAgaWYgKHZpZXcgJiYgcmVwYWludCkKKyAgICBpZiAo
dmlldykKICAgICAgICAgcmVuZGVyZXIoKS0+cmVwYWludFVzaW5nQ29udGFpbmVyKHJlcGFpbnRD
b250YWluZXIsIHJlY3RGb3JSZXBhaW50KTsKIAotICAgIGlmICh1cGRhdGVTY3JvbGxiYXJzKSB7
Ci0gICAgICAgIGlmIChtX2hCYXIpCi0gICAgICAgICAgICBtX2hCYXItPnNldFZhbHVlKHNjcm9s
bFhPZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotICAgICAgICBp
ZiAobV92QmFyKQotICAgICAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShtX3Njcm9sbFksIFNjcm9s
bGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKLSAgICB9Ci0KICAgICAvLyBTY2hlZHVsZSB0
aGUgc2Nyb2xsIERPTSBldmVudC4KICAgICByZW5kZXJlcigpLT5ub2RlKCktPmRvY3VtZW50KCkt
PmV2ZW50UXVldWUoKS0+ZW5xdWV1ZVNjcm9sbEV2ZW50KHJlbmRlcmVyKCktPm5vZGUoKSwgRXZl
bnRRdWV1ZTo6U2Nyb2xsRXZlbnRFbGVtZW50VGFyZ2V0KTsKIH0KQEAgLTE2NDksMzYgKzE2NTUs
MTggQEAgaW50IFJlbmRlckxheWVyOjpzY3JvbGxTaXplKFNjcm9sbGJhck9yaQogICAgIHJldHVy
biBzY3JvbGxiYXIgPyAoc2Nyb2xsYmFyLT50b3RhbFNpemUoKSAtIHNjcm9sbGJhci0+dmlzaWJs
ZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFJlbmRlckxheWVyOjpzZXRTY3JvbGxPZmZzZXRGcm9t
QW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit2b2lkIFJlbmRlckxheWVyOjpzZXRT
Y3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKLSAgICBpZiAobV9oQmFyKQot
ICAgICAgICBtX2hCYXItPnNldFZhbHVlKG9mZnNldC54KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9s
bEFuaW1hdG9yKTsKLSAgICBpZiAobV92QmFyKQotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG9m
ZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBzY3JvbGxUbyhv
ZmZzZXQueCgpLCBvZmZzZXQueSgpKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciopCitpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJh
ciogc2Nyb2xsYmFyKSBjb25zdAogewotICAgIC8vIFVwZGF0ZSBzY3JvbGwgcG9zaXRpb24gZnJv
bSBzY3JvbGxiYXJzLgotCi0gICAgYm9vbCBuZWVkVXBkYXRlID0gZmFsc2U7Ci0gICAgaW50IG5l
d1ggPSBzY3JvbGxYT2Zmc2V0KCk7Ci0gICAgaW50IG5ld1kgPSBtX3Njcm9sbFk7Ci0gICAgCi0g
ICAgaWYgKG1faEJhcikgewotICAgICAgICBuZXdYID0gbV9oQmFyLT52YWx1ZSgpOwotICAgICAg
ICBpZiAobmV3WCAhPSBzY3JvbGxYT2Zmc2V0KCkpCi0gICAgICAgICAgIG5lZWRVcGRhdGUgPSB0
cnVlOwotICAgIH0KLQotICAgIGlmIChtX3ZCYXIpIHsKLSAgICAgICAgbmV3WSA9IG1fdkJhci0+
dmFsdWUoKTsKLSAgICAgICAgaWYgKG5ld1kgIT0gbV9zY3JvbGxZKQotICAgICAgICAgICBuZWVk
VXBkYXRlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAobmVlZFVwZGF0ZSkKLSAgICAgICAgc2Ny
b2xsVG9PZmZzZXQobmV3WCwgbmV3WSwgZmFsc2UpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIHNjcm9sbFhP
ZmZzZXQoKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Ny
b2xsYmFyKQorICAgICAgICByZXR1cm4gbV9zY3JvbGxZOworICAgIHJldHVybiAwOwogfQogCiBi
b29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0CkBAIC0xNjg3LDcgKzE2NzUsNiBAQCBi
b29sIFJlbmRlckxheWVyOjppc0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHBhZ2UgJiYgcGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmlzQWN0aXZlKCk7CiB9CiAKLQogc3RhdGljIEludFJlY3Qg
Y29ybmVyUmVjdChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIsIGNvbnN0IEludFJlY3QmIGJvdW5k
cykKIHsKICAgICBpbnQgaG9yaXpvbnRhbFRoaWNrbmVzczsKQEAgLTIwMzEsOCArMjAxOCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZU92ZXJmbG93U3RhdHVzKGIKICAgICB9CiB9CiAKLXZv
aWQKLVJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQordm9pZCBSZW5k
ZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KCkKIHsKICAgICBSZW5kZXJCb3gq
IGJveCA9IHJlbmRlckJveCgpOwogICAgIGlmICghYm94KQpAQCAtMjEyNCwyOCArMjExMCwxNiBA
QCBSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0CiAgICAgICAgIGludCBw
YWdlU3RlcCA9IG1heChtYXg8aW50PihjbGllbnRXaWR0aCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rp
b25Ub1N0ZXBXaGVuUGFnaW5nKCksIGNsaWVudFdpZHRoIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFw
QmV0d2VlblBhZ2VzKCkpLCAxKTsKICAgICAgICAgbV9oQmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6
OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAgbV9oQmFyLT5zZXRQcm9w
b3J0aW9uKGNsaWVudFdpZHRoLCBtX3Njcm9sbFdpZHRoKTsKLSAgICAgICAgLy8gRXhwbGljaXRs
eSBzZXQgdGhlIGhvcml6b250YWwgc2Nyb2xsIHZhbHVlLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2hl
biBhCi0gICAgICAgIC8vIHJpZ2h0LXRvLWxlZnQgc2Nyb2xsYWJsZSBhcmVhJ3Mgd2lkdGggKG9y
IGNvbnRlbnQgd2lkdGgpIGNoYW5nZXMsIHRoZQotICAgICAgICAvLyB0b3AgcmlnaHQgY29ybmVy
IG9mIHRoZSBjb250ZW50IGRvZXNuJ3Qgc2hpZnQgd2l0aCByZXNwZWN0IHRvIHRoZSB0b3AKLSAg
ICAgICAgLy8gcmlnaHQgY29ybmVyIG9mIHRoZSBhcmVhLiBDb25jZXB0dWFsbHksIHJpZ2h0LXRv
LWxlZnQgYXJlYXMgaGF2ZQotICAgICAgICAvLyB0aGVpciBvcmlnaW4gYXQgdGhlIHRvcC1yaWdo
dCwgYnV0IFJlbmRlckxheWVyIGlzIHRvcC1sZWZ0IG9yaWVudGVkLAotICAgICAgICAvLyBzbyB0
aGlzIGlzIG5lZWRlZCB0byBrZWVwIGV2ZXJ5dGhpbmcgd29ya2luZy4KLSAgICAgICAgbV9oQmFy
LT5zZXRWYWx1ZShzY3JvbGxYT2Zmc2V0KCksIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1h
dG9yKTsKICAgICB9CiAgICAgaWYgKG1fdkJhcikgewogICAgICAgICBpbnQgY2xpZW50SGVpZ2h0
ID0gYm94LT5jbGllbnRIZWlnaHQoKTsKICAgICAgICAgaW50IHBhZ2VTdGVwID0gbWF4KG1heDxp
bnQ+KGNsaWVudEhlaWdodCAqIFNjcm9sbGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5n
KCksIGNsaWVudEhlaWdodCAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygpKSwg
MSk7CiAgICAgICAgIG1fdkJhci0+c2V0U3RlcHMoU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5lU3Rl
cCgpLCBwYWdlU3RlcCk7CiAgICAgICAgIG1fdkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRIZWln
aHQsIG1fc2Nyb2xsSGVpZ2h0KTsKLSAgICAgICAgLy8gRXhwbGljaXRseSBzZXQgdGhlIHZlcnRp
Y2FsIHNjcm9sbCB2YWx1ZS4gIFRoaXMgZW5zdXJlcyB0aGF0IHdoZW4gYQotICAgICAgICAvLyBy
aWdodC10by1sZWZ0IHZlcnRpY2FsIHdyaXRpbmctbW9kZSBzY3JvbGxhYmxlIGFyZWEncyBoZWln
aHQgKG9yIGNvbnRlbnQgaGVpZ2h0KSBjaGFuZ2VzLCB0aGUKLSAgICAgICAgLy8gYm90dG9tIHJp
Z2h0IGNvcm5lciBvZiB0aGUgY29udGVudCBkb2Vzbid0IHNoaWZ0IHdpdGggcmVzcGVjdCB0byB0
aGUgYm90dG9tCi0gICAgICAgIC8vIHJpZ2h0IGNvcm5lciBvZiB0aGUgYXJlYS4gQ29uY2VwdHVh
bGx5LCByaWdodC10by1sZWZ0IHZlcnRpY2FsIHdyaXRpbmctbW9kZSBhcmVhcyBoYXZlCi0gICAg
ICAgIC8vIHRoZWlyIG9yaWdpbiBhdCB0aGUgYm90dG9tLXJpZ2h0LCBidXQgUmVuZGVyTGF5ZXIg
aXMgdG9wLWxlZnQgb3JpZW50ZWQsCi0gICAgICAgIC8vIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGtl
ZXAgZXZlcnl0aGluZyB3b3JraW5nLgotICAgICAgICBtX3ZCYXItPnNldFZhbHVlKHNjcm9sbFlP
ZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwogICAgIH0KICAKKyAg
ICBzY3JvbGxUb09mZnNldChzY3JvbGxYT2Zmc2V0KCksIHNjcm9sbFlPZmZzZXQoKSk7CisgCiAg
ICAgaWYgKHJlbmRlcmVyKCktPm5vZGUoKSAmJiByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5oYXNM
aXN0ZW5lclR5cGUoRG9jdW1lbnQ6Ok9WRVJGTE9XQ0hBTkdFRF9MSVNURU5FUikpCiAgICAgICAg
IHVwZGF0ZU92ZXJmbG93U3RhdHVzKGhvcml6b250YWxPdmVyZmxvdywgdmVydGljYWxPdmVyZmxv
dyk7CiB9CkBAIC0yMzAwLDE1ICsyMjc0LDcgQEAgYm9vbCBSZW5kZXJMYXllcjo6aGl0VGVzdE92
ZXJmbG93Q29udHJvbAogCiBib29sIFJlbmRlckxheWVyOjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIpCiB7Ci0gICAgYm9vbCBkaWRIb3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7Ci0gICAgYm9vbCBk
aWRWZXJ0aWNhbFNjcm9sbCA9IGZhbHNlOwotCi0gICAgaWYgKG1faEJhcikKLSAgICAgICAgZGlk
SG9yaXpvbnRhbFNjcm9sbCA9IG1faEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHks
IG11bHRpcGxpZXIpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIGRpZFZlcnRpY2FsU2Nyb2xs
ID0gbV92QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7Ci0K
LSAgICByZXR1cm4gKGRpZEhvcml6b250YWxTY3JvbGwgfHwgZGlkVmVydGljYWxTY3JvbGwpOwor
ICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5
LCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50QmVo
YXZpb3IsIFJlbmRlck9iamVjdCAqcGFpbnRpbmdSb290KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBA
QCBwdWJsaWM6CiAgICAgaW50IHNjcm9sbFhPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bFggKyBtX3Njcm9sbE9yaWdpbi54KCk7IH0KICAgICBpbnQgc2Nyb2xsWU9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsWSArIG1fc2Nyb2xsT3JpZ2luLnkoKTsgfQogCi0gICAgdm9pZCBz
Y3JvbGxUb09mZnNldChpbnQgeCwgaW50IHksIGJvb2wgdXBkYXRlU2Nyb2xsYmFycyA9IHRydWUs
IGJvb2wgcmVwYWludCA9IHRydWUpOworICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXQoaW50IHgsIGlu
dCB5KTsKICAgICB2b2lkIHNjcm9sbFRvWE9mZnNldChpbnQgeCkgeyBzY3JvbGxUb09mZnNldCh4
LCBtX3Njcm9sbFkgKyBtX3Njcm9sbE9yaWdpbi55KCkpOyB9CiAgICAgdm9pZCBzY3JvbGxUb1lP
ZmZzZXQoaW50IHkpIHsgc2Nyb2xsVG9PZmZzZXQobV9zY3JvbGxYICsgbV9zY3JvbGxPcmlnaW4u
eCgpLCB5KTsgfQogICAgIHZvaWQgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBJbnRSZWN0Jiwg
Ym9vbCBzY3JvbGxUb0FuY2hvciA9IGZhbHNlLCBjb25zdCBTY3JvbGxBbGlnbm1lbnQmIGFsaWdu
WCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCwgY29uc3QgU2Nyb2xsQWxp
Z25tZW50JiBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQpOwpA
QCAtNTE1LDggKzUxNSw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQgaW50
ZXJmYWNlCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2Vk
KFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50
UG9pbnQmKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwg
Y29uc3QgSW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAg
IHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3Q7CkBAIC01MjQsNyAr
NTI0LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29u
c3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmlu
Z1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0
dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBT
Y3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIAorCisgICAgLy8gTk9URTog
VGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZz
ZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQgeCwgaW50IHkp
OworCiAgICAgSW50U2l6ZSBzY3JvbGxiYXJPZmZzZXQoY29uc3QgU2Nyb2xsYmFyKikgY29uc3Q7
CiAgICAgCiAgICAgdm9pZCB1cGRhdGVPdmVyZmxvd1N0YXR1cyhib29sIGhvcml6b250YWxPdmVy
ZmxvdywgYm9vbCB2ZXJ0aWNhbE92ZXJmbG93KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsOSAr
NDk1LDcgQEAgYm9vbCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbgogICAgIGVs
c2UKICAgICAgICAgbmV3T2Zmc2V0ID0gaW5kZXggLSBudW1WaXNpYmxlSXRlbXMoKSArIDE7CiAK
LSAgICBtX2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAg
IG1fdkJhci0+c2V0VmFsdWUobV9pbmRleE9mZnNldCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xs
QW5pbWF0b3IpOworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbihuZXdPZmZzZXQpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MDksMTIgKzUw
NywxMiBAQCBib29sIFJlbmRlckxpc3RCb3g6Omxpc3RJbmRleElzVmlzaWJsZShpCiAKIGJvb2wg
UmVuZGVyTGlzdEJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiopCiB7Ci0gICAg
cmV0dXJuIG1fdkJhciAmJiBtX3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBt
dWx0aXBsaWVyKTsKKyAgICByZXR1cm4gU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoZGlyZWN0aW9u
LCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiB9CiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6bG9n
aWNhbFNjcm9sbChTY3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKikKIHsKLSAgICByZXR1
cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwg
c3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSksIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4g
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOwogfQogCiB2b2lkIFJlbmRl
ckxpc3RCb3g6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgpCkBAIC01MzAsMjAgKzUy
OCwyNCBAQCBpbnQgUmVuZGVyTGlzdEJveDo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPCiAgICAgcmV0
dXJuICgob3JpZW50YXRpb24gPT0gVmVydGljYWxTY3JvbGxiYXIpICYmIG1fdkJhcikgPyAobV92
QmFyLT50b3RhbFNpemUoKSAtIG1fdkJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lk
IFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmIG9mZnNldCkKK2ludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIq
KSBjb25zdAogewotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zm
c2V0LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIHJldHVybiBtX2lu
ZGV4T2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OnZhbHVlQ2hhbmdlZChTY3JvbGxi
YXIqKQordm9pZCBSZW5kZXJMaXN0Qm94OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKIHsKLSAgICBpbnQgbmV3T2Zmc2V0ID0gbV92QmFyLT52YWx1ZSgpOwotICAgIGlm
IChuZXdPZmZzZXQgIT0gbV9pbmRleE9mZnNldCkgewotICAgICAgICBtX2luZGV4T2Zmc2V0ID0g
bmV3T2Zmc2V0OwotICAgICAgICByZXBhaW50KCk7Ci0gICAgICAgIG5vZGUoKS0+ZG9jdW1lbnQo
KS0+ZXZlbnRRdWV1ZSgpLT5lbnF1ZXVlU2Nyb2xsRXZlbnQobm9kZSgpLCBFdmVudFF1ZXVlOjpT
Y3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwotICAgIH0KKyAgICBzY3JvbGxUbyhvZmZzZXQueSgp
KTsKK30KKwordm9pZCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxUbyhpbnQgbmV3T2Zmc2V0KQorewor
ICAgIGlmIChuZXdPZmZzZXQgPT0gbV9pbmRleE9mZnNldCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9pbmRleE9mZnNldCA9IG5ld09mZnNldDsKKyAgICByZXBhaW50KCk7CisgICAgbm9kZSgp
LT5kb2N1bWVudCgpLT5ldmVudFF1ZXVlKCktPmVucXVldWVTY3JvbGxFdmVudChub2RlKCksIEV2
ZW50UXVldWU6OlNjcm9sbEV2ZW50RWxlbWVudFRhcmdldCk7CiB9CiAKIGludCBSZW5kZXJMaXN0
Qm94OjppdGVtSGVpZ2h0KCkgY29uc3QKQEAgLTU4OSw5ICs1OTEsOCBAQCB2b2lkIFJlbmRlckxp
c3RCb3g6OnNldFNjcm9sbFRvcChpbnQgbmV3CiAgICAgaW50IGluZGV4ID0gbmV3VG9wIC8gaXRl
bUhlaWdodCgpOwogICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbnVtSXRlbXMoKSB8fCBp
bmRleCA9PSBtX2luZGV4T2Zmc2V0KQogICAgICAgICByZXR1cm47Ci0gICAgbV9pbmRleE9mZnNl
dCA9IGluZGV4OwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUoaW5k
ZXgsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICAKKyAgICBTY3JvbGxi
YXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgpOwogfQogCiBi
b29sIFJlbmRlckxpc3RCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1
ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHks
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw4ICs5Niw4IEBA
IHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgaW50ZXJmYWNlLgogICAgIHZpcnR1
YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IElu
dFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKKyAg
ICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50Jik7CiAgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgc2Ny
b2xsYmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9IC8vIFdlIGRvbid0
IHN1cHBvcnQgcmVzaXplIG9uIGxpc3QgYm94ZXMgeWV0LiAgSWYgd2UgZGlkIHRoaXMgd291bGQg
aGF2ZSB0byBjaGFuZ2UuCkBAIC0xMDUsNiArMTA1LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVh
bCBJbnRSZWN0IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3Jv
bGxiYXIqLCBjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252
ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNv
bnN0OworICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsg
cmV0dXJuIG1fdkJhci5nZXQoKTsgfQorCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBi
ZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxiYXJD
bGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQgbmV3T2Zmc2V0KTsKIAogICAgIHZvaWQgc2V0
SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBoYXNTY3JvbGxiYXIpOwogICAgIFBhc3NSZWZQdHI8
U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNYXJxdWVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck1hcnF1ZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsOSAr
MTcxLDkgQEAgdm9pZCBSZW5kZXJNYXJxdWVlOjpzdGFydCgpCiAKICAgICBpZiAoIW1fc3VzcGVu
ZGVkICYmICFtX3N0b3BwZWQpIHsKICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKQotICAgICAg
ICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQobV9zdGFydCwgMCwgZmFsc2UsIGZhbHNlKTsK
KyAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KG1fc3RhcnQsIDApOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldCgwLCBtX3N0YXJ0LCBm
YWxzZSwgZmFsc2UpOworICAgICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQoMCwgbV9z
dGFydCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0wMS0yMCAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENsZWFudXAgU2Nyb2xsYmFyL1Njcm9sbGJhckNsaWVudCByZWxhdGlvbnNo
aXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzc5
CisKKyAgICAgICAgKiBVSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFBvc2l0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNldFNjcm9sbE9mZnNldCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUbyk6CisgICAgICAg
IChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpvbk1vdXNlV2hlZWwpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24pOgor
ICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnZlcnRpY2FsU2Nyb2xsYmFyKToKKwogMjAx
MS0wMS0yMCAgS2V2aW4gRGVja2VyICA8a2RlY2tlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHAJKHJldmlzaW9uIDc2Mjcz
KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzOSwyMSArNDM5LDIzIEBAIGludCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6c2Nyb2xsU2l6ZShTY3IKICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9PSBWZXJ0
aWNhbFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3RhbFNpemUo
KSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgV2ViUG9wdXBN
ZW51UHJveHlXaW46OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKK2ludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xs
YmFyKikgY29uc3QKIHsKLSAgICBpZiAobV9zY3JvbGxiYXIpCi0gICAgICAgIG1fc2Nyb2xsYmFy
LT5zZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7Cisg
ICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OworfQorCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2lu
OjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3sKKyAgICBzY3JvbGxU
byhvZmZzZXQueSgpKTsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmFsdWVDaGFu
Z2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQordm9pZCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Ny
b2xsVG8oaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlQobV9zY3JvbGxiYXIpOwogCiAgICAgaWYg
KCFtX3BvcHVwKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgb2Zmc2V0ID0gc2Nyb2xsQmFy
LT52YWx1ZSgpOwotCiAgICAgaWYgKG1fc2Nyb2xsT2Zmc2V0ID09IG9mZnNldCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03MjAsNyArNzIyLDggQEAgTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdp
bjo6b25Nb3VzZVdoZQogICAgICAgICBlbHNlCiAgICAgICAgICAgICAtLWk7CiAgICAgfQotICAg
IHNjcm9sbGJhcigpLT5zY3JvbGwoaSA+IDAgPyBTY3JvbGxVcCA6IFNjcm9sbERvd24sIFNjcm9s
bEJ5TGluZSwgYWJzKGkpKTsKKworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAwID8g
U2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CiAgICAgcmV0dXJu
IDA7CiB9CiAKQEAgLTkyMiwxMiArOTI1LDEyIEBAIGJvb2wgV2ViUG9wdXBNZW51UHJveHlXaW46
OnNjcm9sbFRvUmV2ZWEKICAgICBpbnQgaW5kZXggPSBmb2N1c2VkSW5kZXgoKTsKIAogICAgIGlm
IChpbmRleCA8IG1fc2Nyb2xsT2Zmc2V0KSB7Ci0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1
ZShpbmRleCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgICAgICBTY3Jv
bGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoaW5kZXggPj0gbV9zY3JvbGxPZmZz
ZXQgKyB2aXNpYmxlSXRlbXMoKSkgewotICAgICAgICBtX3Njcm9sbGJhci0+c2V0VmFsdWUoaW5k
ZXggLSB2aXNpYmxlSXRlbXMoKSArIDEsIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9y
KTsKKyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVBy
b3h5V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dpbi9XZWJQ
b3B1cE1lbnVQcm94eVdpbi5oCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjAs
MTEgKzYwLDE1IEBAIHByaXZhdGU6CiAKICAgICAvLyBTY3JvbGxCYXJDbGllbnQKICAgICB2aXJ0
dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5n
ZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24o
V2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9m
ZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3Jv
bGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQorCisgICAgLy8gTk9U
RTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxP
ZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAgdm9pZCBzY3JvbGxUbyhpbnQgb2Zmc2V0
KTsKIAogICAgIHN0YXRpYyBib29sIHJlZ2lzdGVyV2luZG93Q2xhc3MoKTsKICAgICBzdGF0aWMg
TFJFU1VMVCBDQUxMQkFDSyBXZWJQb3B1cE1lbnVQcm94eVduZFByb2MoSFdORCwgVUlOVCwgV1BB
UkFNLCBMUEFSQU0pOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2
MjczKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMyBAQAorMjAxMS0wMS0yMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFu
dXAgU2Nyb2xsYmFyL1Njcm9sbGJhckNsaWVudCByZWxhdGlvbnNoaXAKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzc5CisKKyAgICAgICAgKiBzcmMv
V2ViU2Nyb2xsYmFySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
OldlYlNjcm9sbGJhckltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjp2
YWx1ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYktp
dDo6V2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZURvd24pOgorICAgICAgICAoV2ViS2l0OjpXZWJT
Y3JvbGxiYXJJbXBsOjpvbk1vdXNlTW92ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJh
ckltcGw6Om9uTW91c2VXaGVlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6
Om9uS2V5RG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zm
c2V0KToKKyAgICAgICAgKiBzcmMvV2ViU2Nyb2xsYmFySW1wbC5oOgorCiAyMDEwLTEyLTE0ICBZ
dXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFkYW0gQmFydGguCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3Jv
bGxiYXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTY3JvbGxiYXJJbXBsLmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiAr
NjIsNyBAQCBpbnQgV2ViU2Nyb2xsYmFyOjpkZWZhdWx0VGhpY2tuZXNzKCkKIAogV2ViU2Nyb2xs
YmFySW1wbDo6V2ViU2Nyb2xsYmFySW1wbChXZWJTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pCiAgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgLCBtX3Nj
cm9sbE9mZnNldCgwKQogewogICAgIG1fc2Nyb2xsYmFyID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoCiAgICAgICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhckNsaWVudCo+KHRoaXMp
LApAQCAtODksMTIgKzkwLDE1IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0TG9jYXRpb24o
Y29uc3QKIAogaW50IFdlYlNjcm9sbGJhckltcGw6OnZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9zY3JvbGxiYXItPnZhbHVlKCk7CisgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OwogfQog
CiB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNldFZhbHVlKGludCBwb3NpdGlvbikKIHsKLSAgICBt
X3Njcm9sbGJhci0+c2V0VmFsdWUocG9zaXRpb24sIFNjcm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFu
aW1hdG9yKTsKKyAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRh
bFNjcm9sbGJhcikKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1hP
ZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9uKTsKKyAgICBlbHNlCisgICAgICAgIFdlYkNv
cmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihwb3Np
dGlvbik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0RG9jdW1lbnRTaXplKGludCBz
aXplKQpAQCAtMTEyLDcgKzExNiw4IEBAIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsKFNj
cm9sbERpcmUKICAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xs
RG93bjsKICAgICBlbHNlCiAgICAgICAgIGRpciA9IGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDog
U2Nyb2xsVXA7Ci0gICAgbV9zY3JvbGxiYXItPnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFdlYkNv
cmU6OlNjcm9sbEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIG11bHRpcGxpZXIpOworCisgICAg
V2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoZGlyLCBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJpdHkpLCBtdWx0aXBsaWVyKTsKIH0KIAogdm9p
ZCBXZWJTY3JvbGxiYXJJbXBsOjpwYWludChXZWJDYW52YXMqIGNhbnZhcywgY29uc3QgV2ViUmVj
dCYgcmVjdCkKQEAgLTE2NywxMSArMTcyLDExIEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25N
b3VzZURvd24oY29uc3QKICAgICBpZiAoIW1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlu
cyhtb3VzZWRvd24ueCwgbW91c2Vkb3duLnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIG1vdXNlZG93bi54IC09IG1fc2Nyb2xsYmFyLT54KCk7Ci0gICAgICAgICAgICBt
b3VzZWRvd24ueSAtPSBtX3Njcm9sbGJhci0+eSgpOwotICAgICAgICAgICAgbV9zY3JvbGxiYXIt
Pm1vdXNlRG93bihQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBt
b3VzZWRvd24pKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9CisgICAgbW91
c2Vkb3duLnggLT0gbV9zY3JvbGxiYXItPngoKTsKKyAgICBtb3VzZWRvd24ueSAtPSBtX3Njcm9s
bGJhci0+eSgpOworICAgIG1fc2Nyb2xsYmFyLT5tb3VzZURvd24oUGxhdGZvcm1Nb3VzZUV2ZW50
QnVpbGRlcihtX3Njcm9sbGJhci5nZXQoKSwgbW91c2Vkb3duKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZVVwKGNvbnN0IFdlYklucHV0RXZl
bnQmIGV2ZW50KQogewpAQCAtMTgzLDE2ICsxODgsMTYgQEAgYm9vbCBXZWJTY3JvbGxiYXJJbXBs
Ojpvbk1vdXNlVXAoY29uc3QgVwogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VNb3Zl
KGNvbnN0IFdlYklucHV0RXZlbnQmIGV2ZW50KQogewotICAgICAgICBXZWJNb3VzZUV2ZW50IG1v
dXNlbW92ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50KTsKLSAg
ICAgICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3VzZW1vdmUueCwg
bW91c2Vtb3ZlLnkpCi0gICAgICAgICAgICB8fCBtX3Njcm9sbGJhci0+cHJlc3NlZFBhcnQoKSAh
PSBOb1BhcnQpIHsKLSAgICAgICAgICAgIG1vdXNlbW92ZS54IC09IG1fc2Nyb2xsYmFyLT54KCk7
Ci0gICAgICAgICAgICBtb3VzZW1vdmUueSAtPSBtX3Njcm9sbGJhci0+eSgpOwotICAgICAgICAg
ICAgcmV0dXJuIG1fc2Nyb2xsYmFyLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudEJ1aWxk
ZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNlbW92ZSkpOwotICAgICAgICB9CisgICAgV2ViTW91
c2VFdmVudCBtb3VzZW1vdmUgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViTW91c2VFdmVudCo+KCZl
dmVudCk7CisgICAgaWYgKG1fc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKS5jb250YWlucyhtb3VzZW1v
dmUueCwgbW91c2Vtb3ZlLnkpCisgICAgICAgIHx8IG1fc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgp
ICE9IE5vUGFydCkgeworICAgICAgICBtb3VzZW1vdmUueCAtPSBtX3Njcm9sbGJhci0+eCgpOwor
ICAgICAgICBtb3VzZW1vdmUueSAtPSBtX3Njcm9sbGJhci0+eSgpOworICAgICAgICByZXR1cm4g
bV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlcihtX3Njcm9s
bGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7CisgICAgfQogCi0gICAgICAgIGlmIChtX3Njcm9sbGJh
ci0+aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCi0gICAgICAgICAgICBtX3Njcm9sbGJhci0+bW91
c2VFeGl0ZWQoKTsKKyAgICBpZiAobV9zY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgIT0gTm9QYXJ0
KQorICAgICAgICBtX3Njcm9sbGJhci0+bW91c2VFeGl0ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKQEAgLTIwNiw1OSArMjExLDU5IEBAIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3Vz
ZUxlYXZlKGNvbnMKIAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29uc3Qg
V2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7Ci0gICAgICAgIC8vIFNhbWUgbG9naWMgYXMgaW4gU2Ny
b2xsdmlldy5jcHAuICBJZiB3ZSBjYW4gbW92ZSBhdCBhbGwsIHdlJ2xsIGFjY2VwdCB0aGUgZXZl
bnQuCi0gICAgICAgIFdlYk1vdXNlV2hlZWxFdmVudCBtb3VzZXdoZWVsID0gKnN0YXRpY19jYXN0
PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZldmVudCk7Ci0gICAgICAgIGludCBtYXhTY3Jv
bGxEZWx0YSA9IG1fc2Nyb2xsYmFyLT5tYXhpbXVtKCkgLSBtX3Njcm9sbGJhci0+dmFsdWUoKTsK
LSAgICAgICAgZmxvYXQgZGVsdGEgPSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyID8gbW91c2V3aGVlbC5kZWx0YVggOiBtb3VzZXdoZWVsLmRlbHRhWTsK
LSAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEgPiAwKSB8fCAoZGVsdGEg
PiAwICYmIG1fc2Nyb2xsYmFyLT52YWx1ZSgpID4gMCkpIHsKLSAgICAgICAgICAgIGlmIChtb3Vz
ZXdoZWVsLnNjcm9sbEJ5UGFnZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3Njcm9sbGJh
ci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBuZWdhdGl2ZSA9IGRlbHRhIDwgMDsKLSAgICAgICAgICAgICAgICBkZWx0YSA9IG1heCht
YXgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAqIFNjcm9s
bGJhcjo6bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHN0YXRpY19jYXN0PGZsb2F0Piht
X3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5Q
YWdlcygpKSksIDEuMGYpOwotICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSkKLSAgICAgICAg
ICAgICAgICAgICAgZGVsdGEgKj0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3Nj
cm9sbGJhci0+c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2Vi
Q29yZTo6U2Nyb2xsQnlQaXhlbCwgZGVsdGEpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgLy8gU2FtZSBsb2dpYyBhcyBpbiBTY3JvbGx2aWV3LmNwcC4gIElmIHdlIGNhbiBtb3ZlIGF0
IGFsbCwgd2UnbGwgYWNjZXB0IHRoZSBldmVudC4KKyAgICBXZWJNb3VzZVdoZWVsRXZlbnQgbW91
c2V3aGVlbCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZVdoZWVsRXZlbnQqPigmZXZlbnQp
OworICAgIGludCBtYXhTY3JvbGxEZWx0YSA9IG1fc2Nyb2xsYmFyLT5tYXhpbXVtKCkgLSBtX3Nj
cm9sbGJhci0+dmFsdWUoKTsKKyAgICBmbG9hdCBkZWx0YSA9IG1fc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBtb3VzZXdoZWVsLmRlbHRhWCA6IG1vdXNl
d2hlZWwuZGVsdGFZOworICAgIGlmICgoZGVsdGEgPCAwICYmIG1heFNjcm9sbERlbHRhID4gMCkg
fHwgKGRlbHRhID4gMCAmJiBtX3Njcm9sbGJhci0+dmFsdWUoKSA+IDApKSB7CisgICAgICAgIGlm
IChtb3VzZXdoZWVsLnNjcm9sbEJ5UGFnZSkgeworICAgICAgICAgICAgQVNTRVJUKG1fc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIGJv
b2wgbmVnYXRpdmUgPSBkZWx0YSA8IDA7CisgICAgICAgICAgICBkZWx0YSA9IG1heChtYXgoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSAqIFNjcm9sbGJhcjo6
bWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCksIHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9s
bGJhci0+dmlzaWJsZVNpemUoKSAtIFNjcm9sbGJhcjo6bWF4T3ZlcmxhcEJldHdlZW5QYWdlcygp
KSksIDEuMGYpOworICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQorICAgICAgICAgICAgICAgIGRl
bHRhICo9IC0xOwogICAgICAgICB9CisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6
c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpTY3JvbGxVcCwgV2ViQ29yZTo6U2Ny
b2xsQnlQaXhlbCwgZGVsdGEpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bihj
b25zdCBXZWJJbnB1dEV2ZW50JiBldmVudCkKIHsKLSAgICAgICAgV2ViS2V5Ym9hcmRFdmVudCBr
ZXlib2FyZCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4oJmV2ZW50KTsK
LSAgICAgICAgaW50IGtleUNvZGU7Ci0gICAgICAgIC8vIFdlIGhhdmUgdG8gZHVwbGljYXRlIHRo
aXMgbG9naWMgZnJvbSBXZWJWaWV3SW1wbCBiZWNhdXNlIHRoZXJlIGl0IHVzZXMKLSAgICAgICAg
Ly8gQ2hhciBhbmQgUmF3S2V5RG93biBldmVudHMsIHdoaWNoIGRvbid0IGV4aXN0IGF0IHRoaXMg
cG9pbnQuCi0gICAgICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX1NQQUNF
KQotICAgICAgICAgICAga2V5Q29kZSA9ICgoa2V5Ym9hcmQubW9kaWZpZXJzICYgV2ViSW5wdXRF
dmVudDo6U2hpZnRLZXkpID8gVktFWV9QUklPUiA6IFZLRVlfTkVYVCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgaWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpD
b250cm9sS2V5KSB7Ci0gICAgICAgICAgICAgICAgLy8gTWF0Y2ggRkYgYmVoYXZpb3IgaW4gdGhl
IHNlbnNlIHRoYXQgQ3RybCtob21lL2VuZCBhcmUgdGhlIG9ubHkgQ3RybAotICAgICAgICAgICAg
ICAgIC8vIGtleSBjb21iaW5hdGlvbnMgd2hpY2ggYWZmZWN0IHNjcm9sbGluZy4gU2FmYXJpIGlz
IGJ1Z2d5IGluIHRoZQotICAgICAgICAgICAgICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0
aGUgcGFnZSBmb3IgYWxsIEN0cmwrc2Nyb2xsaW5nIGtleQotICAgICAgICAgICAgICAgIC8vIGNv
bWJpbmF0aW9ucy4gRm9yIGUuZy4gQ3RybCtwZ3VwL3BnZG4vdXAvZG93biwgZXRjLgotICAgICAg
ICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQud2luZG93c0tleUNvZGUpIHsKLSAgICAgICAgICAg
ICAgICBjYXNlIFZLRVlfSE9NRToKLSAgICAgICAgICAgICAgICBjYXNlIFZLRVlfRU5EOgotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQorICAgIFdlYktl
eWJvYXJkRXZlbnQga2V5Ym9hcmQgPSAqc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCo+KCZldmVudCk7CisgICAgaW50IGtleUNvZGU7CisgICAgLy8gV2UgaGF2ZSB0byBkdXBsaWNh
dGUgdGhpcyBsb2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQgdXNlcworICAg
IC8vIENoYXIgYW5kIFJhd0tleURvd24gZXZlbnRzLCB3aGljaCBkb24ndCBleGlzdCBhdCB0aGlz
IHBvaW50LgorICAgIGlmIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSA9PSBWS0VZX1NQQUNFKQor
ICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50OjpT
aGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
aWYgKGtleWJvYXJkLm1vZGlmaWVycyA9PSBXZWJJbnB1dEV2ZW50OjpDb250cm9sS2V5KSB7Cisg
ICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUgc2Vuc2UgdGhhdCBDdHJsK2hv
bWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCisgICAgICAgICAgICAvLyBrZXkgY29tYmluYXRpb25z
IHdoaWNoIGFmZmVjdCBzY3JvbGxpbmcuIFNhZmFyaSBpcyBidWdneSBpbiB0aGUKKyAgICAgICAg
ICAgIC8vIHNlbnNlIHRoYXQgaXQgc2Nyb2xscyB0aGUgcGFnZSBmb3IgYWxsIEN0cmwrc2Nyb2xs
aW5nIGtleQorICAgICAgICAgICAgLy8gY29tYmluYXRpb25zLiBGb3IgZS5nLiBDdHJsK3BndXAv
cGdkbi91cC9kb3duLCBldGMuCisgICAgICAgICAgICBzd2l0Y2ggKGtleWJvYXJkLndpbmRvd3NL
ZXlDb2RlKSB7CisgICAgICAgICAgICBjYXNlIFZLRVlfSE9NRToKKyAgICAgICAgICAgIGNhc2Ug
VktFWV9FTkQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAoa2V5Ym9hcmQuaXNTeXN0ZW1LZXkgfHwgKGtleWJvYXJkLm1vZGlm
aWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0S2V5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQubW9k
aWZpZXJzICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBrZXlDb2RlID0ga2V5Ym9hcmQud2luZG93c0tleUNvZGU7Ci0g
ICAgICAgIH0KLSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlv
bjsKLSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7
Ci0gICAgICAgIGlmIChXZWJWaWV3SW1wbDo6bWFwS2V5Q29kZUZvclNjcm9sbChrZXlDb2RlLCAm
c2Nyb2xsRGlyZWN0aW9uLCAmc2Nyb2xsR3JhbnVsYXJpdHkpKSB7Ci0gICAgICAgICAgICAvLyBX
aWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGlyZWN0aW9uIHdhc24ndCBjb21wYXRpYmxlIHdp
dGggdGhpcyBzY3JvbGxiYXIuCi0gICAgICAgICAgICByZXR1cm4gbV9zY3JvbGxiYXItPnNjcm9s
bChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFyaXR5KTsKLSAgICAgICAgfQorICAgICAg
ICBrZXlDb2RlID0ga2V5Ym9hcmQud2luZG93c0tleUNvZGU7CisgICAgfQorICAgIFdlYkNvcmU6
OlNjcm9sbERpcmVjdGlvbiBzY3JvbGxEaXJlY3Rpb247CisgICAgV2ViQ29yZTo6U2Nyb2xsR3Jh
bnVsYXJpdHkgc2Nyb2xsR3JhbnVsYXJpdHk7CisgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBLZXlD
b2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0
eSkpIHsKKyAgICAgICAgLy8gV2lsbCByZXR1cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3
YXNuJ3QgY29tcGF0aWJsZSB3aXRoIHRoaXMgc2Nyb2xsYmFyLgorICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFu
dWxhcml0eSk7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMjY3LDEzICsyNzIs
MTggQEAgaW50IFdlYlNjcm9sbGJhckltcGw6OnNjcm9sbFNpemUoV2ViQ29yZQogICAgIHJldHVy
biAob3JpZW50YXRpb24gPT0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkpID8gKG1fc2Nyb2xs
YmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAK
LXZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQoraW50IFdlYlNjcm9sbGJhckltcGw6OnNjcm9s
bFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0CiB7Ci0gICAgbV9zY3JvbGxiYXIt
PnNldFZhbHVlKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyKSA/IG9mZnNldC54KCkgOiBvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmlt
YXRvcik7CisgICAgcmV0dXJuIG1fc2Nyb2xsT2Zmc2V0OwogfQogCi12b2lkIFdlYlNjcm9sbGJh
ckltcGw6OnZhbHVlQ2hhbmdlZChXZWJDb3JlOjpTY3JvbGxiYXIqKQordm9pZCBXZWJTY3JvbGxi
YXJJbXBsOjpzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIG9mZnNldCkK
IHsKKyAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9s
bGJhcikKKyAgICAgICAgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQueCgpOworICAgIGVsc2UKKyAg
ICAgICAgbV9zY3JvbGxPZmZzZXQgPSBvZmZzZXQueSgpOworCiAgICAgbV9jbGllbnQtPnZhbHVl
Q2hhbmdlZCh0aGlzKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2Nyb2xsYmFySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlNjcm9sbGJhckltcGwuaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDkgKzU4
LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBoYW5kbGVJbnB1dEV2ZW50KGNvbnN0IFdl
YklucHV0RXZlbnQmKTsKIAogICAgIC8vIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCBtZXRob2Rz
Ci0gICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZy
b21BbmltYXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQg
dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IHNjcm9s
bFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OworICAgIHZpcnR1YWwg
aW50IHNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0OwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3Q7CkBA
IC03Niw2ICs3Niw3IEBAIHByaXZhdGU6CiAKICAgICBXZWJTY3JvbGxiYXJDbGllbnQqIG1fY2xp
ZW50OwogCisgICAgaW50IG1fc2Nyb2xsT2Zmc2V0OwogICAgIFJlZlB0cjxXZWJDb3JlOjpTY3Jv
bGxiYXI+IG1fc2Nyb2xsYmFyOwogfTsKIApJbmRleDogU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2
MjczKQorKysgU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMS0wMS0yMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFudXAgU2Ny
b2xsYmFyL1Njcm9sbGJhckNsaWVudCByZWxhdGlvbnNoaXAKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzc5CisKKyAgICAgICAgKiBBcGkvcXdlYmZy
YW1lLmNwcDoKKyAgICAgICAgKFFXZWJGcmFtZTo6c2V0U2Nyb2xsQmFyVmFsdWUpOgorCiAyMDEx
LTAxLTE5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFtZS5j
cHAJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA3MSw3ICsxMDcxLDExIEBAIHZvaWQgUVdlYkZyYW1lOjpz
ZXRTY3JvbGxCYXJWYWx1ZShRdDo6T3IKICAgICAgICAgICAgIHZhbHVlID0gMDsKICAgICAgICAg
ZWxzZSBpZiAodmFsdWUgPiBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKSkKICAgICAgICAg
ICAgIHZhbHVlID0gc2Nyb2xsQmFyTWF4aW11bShvcmllbnRhdGlvbik7Ci0gICAgICAgIHNiLT5z
ZXRWYWx1ZSh2YWx1ZSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworCisgICAg
ICAgIGlmIChvcmllbnRhdGlvbiA9PSBRdDo6SG9yaXpvbnRhbCkKKyAgICAgICAgICAgIHNiLT5j
bGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbih2YWx1ZSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHNiLT5jbGllbnQoKS0+c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFu
aW1hdGlvbih2YWx1ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lv
biA3NjI3MykKKysrIFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDExLTAxLTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW51
cCBTY3JvbGxiYXIvU2Nyb2xsYmFyQ2xpZW50IHJlbGF0aW9uc2hpcAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3NzkKKworICAgICAgICAqIFdlYlNj
cm9sbEJhci5jcHA6CisgICAgICAgIChXZWJTY3JvbGxCYXI6OldlYlNjcm9sbEJhcik6CisgICAg
ICAgIChXZWJTY3JvbGxCYXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYlNjcm9sbEJhcjo6dmFs
dWUpOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjpzY3JvbGwpOgorICAgICAgICAoV2ViU2Nyb2xs
QmFyOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJTY3JvbGxCYXI6OnNldFNjcm9sbE9m
ZnNldCk6CisgICAgICAgICogV2ViU2Nyb2xsQmFyLmg6CisKIDIwMTEtMDEtMTkgIEFkYW0gUm9i
ZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBmb3IgV0tDQUNGTGF5ZXJS
ZW5kZXJlciBjaGFuZ2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5jcHAJKHJldmlz
aW9uIDc2MjczKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIFdlYlNj
cm9sbEJhcjo6V2ViU2Nyb2xsQmFyKCkKICAgICA6IG1fcmVmQ291bnQoMCkKICAgICAsIG1fY29u
dGFpbmluZ1dpbmRvdygwKQorICAgICwgbV9jdXJyZW50UG9zaXRpb24oMCkKIHsKICAgICBnQ2xh
c3NDb3VudCsrOwogICAgIGdDbGFzc05hbWVDb3VudC5hZGQoIldlYlNjcm9sbEJhciIpOwpAQCAt
MTQzLDcgKzE0NCw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2Nyb2xsQmFyOjoK
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2Nyb2xsQmFyOjpzZXRWYWx1ZSggCiAgICAg
LyogW2luXSAqLyBpbnQgdmFsdWUpCiB7Ci0gICAgbV9zY3JvbGxCYXItPnNldFZhbHVlKHZhbHVl
LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgbV9jdXJyZW50UG9zaXRp
b24gPSB2YWx1ZTsKICAgICByZXR1cm4gU19PSzsKIH0KIApAQCAtMTUyLDcgKzE1Myw3IEBAIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViU2Nyb2xsQmFyOjoKIHsKICAgICBpZiAoIXZhbHVl
KQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICp2YWx1ZSA9IG1fc2Nyb2xsQmFyLT52
YWx1ZSgpOworICAgICp2YWx1ZSA9IG1fY3VycmVudFBvc2l0aW9uOwogICAgIHJldHVybiBTX09L
OwogfQogCkBAIC0yNDcsNyArMjQ4LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJT
Y3JvbGxCYXI6OgogewogICAgIFNjcm9sbERpcmVjdGlvbiB3ZWJDb3JlU2Nyb2xsRGlyZWN0aW9u
ID0gKFNjcm9sbERpcmVjdGlvbikgZGlyZWN0aW9uOwogICAgIFNjcm9sbEdyYW51bGFyaXR5IHdl
YkNvcmVHcmFudWxhcml0eSA9IChTY3JvbGxHcmFudWxhcml0eSkgZ3JhbnVsYXJpdHk7Ci0gICAg
bV9zY3JvbGxCYXItPnNjcm9sbCh3ZWJDb3JlU2Nyb2xsRGlyZWN0aW9uLCB3ZWJDb3JlR3JhbnVs
YXJpdHksIG11bHRpcGxpZXIpOworICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKHdlYkNvcmVT
Y3JvbGxEaXJlY3Rpb24sIHdlYkNvcmVHcmFudWxhcml0eSwgbXVsdGlwbGllcik7CiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKQEAgLTI1NywxNyArMjU4LDE0IEBAIGludCBXZWJTY3JvbGxCYXI6OnNj
cm9sbFNpemUoU2Nyb2xsYmFyT3IKICAgICByZXR1cm4gKG9yaWVudGF0aW9uID09IG1fc2Nyb2xs
QmFyLT5vcmllbnRhdGlvbigpKSA/IChtX3Njcm9sbEJhci0+dG90YWxTaXplKCkgLSBtX3Njcm9s
bEJhci0+dmlzaWJsZVNpemUoKSkgOiAwOyAKIH0KIAotdm9pZCBXZWJTY3JvbGxCYXI6OnNldFNj
cm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK2ludCBXZWJT
Y3JvbGxCYXI6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0CiB7Ci0gICAgbV9zY3Jv
bGxCYXItPnNldFZhbHVlKChtX3Njcm9sbEJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKSA/IG9mZnNldC54KCkgOiBvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3Jv
bGxBbmltYXRvcik7CisgICAgcmV0dXJuIG1fY3VycmVudFBvc2l0aW9uOwogfQogCi12b2lkIFdl
YlNjcm9sbEJhcjo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogc2Nyb2xsQmFyKQordm9pZCBXZWJT
Y3JvbGxCYXI6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewotICAg
IGlmIChtX3Njcm9sbEJhciAhPSBzY3JvbGxCYXIpIHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsg
IC8vIHNob3VsZG4ndCBoYXBwZW4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBtX2N1cnJl
bnRQb3NpdGlvbiA9IChtX3Njcm9sbEJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKSA/IG9mZnNldC54KCkgOiBvZmZzZXQueSgpOwogICAgIG1fZGVsZWdhdGUtPnZhbHVl
Q2hhbmdlZCh0aGlzKTsKIH0KIApJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmgJKHJldmlz
aW9uIDc2MjczKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExNyw4ICsxMTcsOCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgLy8gU2Ny
b2xsYmFyQ2xpZW50CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNl
dEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVD
aGFuZ2VkKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9s
bGJhciopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50
UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xs
YmFyKiwgY29uc3QgSW50UmVjdCYpOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm92aWRl
IGEgd2F5IHRvIHNldCB0aGlzIHZhbHVlLgpAQCAtMTI4LDYgKzEyOCw3IEBAIHByb3RlY3RlZDoK
IAogICAgIFVMT05HIG1fcmVmQ291bnQ7CiAgICAgSFdORCBtX2NvbnRhaW5pbmdXaW5kb3c7Cisg
ICAgaW50IG1fY3VycmVudFBvc2l0aW9uOwogICAgIFJlZlB0cjxXZWJDb3JlOjpTY3JvbGxiYXI+
IG1fc2Nyb2xsQmFyOwogICAgIENPTVB0cjxJV2ViU2Nyb2xsQmFyRGVsZWdhdGVQcml2YXRlPiBt
X2RlbGVnYXRlOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79641</attachid>
            <date>2011-01-20 12:58:28 -0800</date>
            <delta_ts>2011-01-21 11:40:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patchForPrimetime.diff</filename>
            <type>text/plain</type>
            <size>81293</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMyIEBACisyMDExLTAxLTIwICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQ2xlYW51cCBTY3JvbGxiYXIvU2Nyb2xsYmFyQ2xpZW50IHJlbGF0aW9u
c2hpcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3
NzkKKworICAgICAgICBQaXBlIGFsbCBzY3JvbGxpbmcgdGhyb3VnaCB0aGUgU2Nyb2xsYmFyQ2xp
ZW50L1Njcm9sbEFuaW1hdG9yCisgICAgICAgIHJhdGhlciB0aGFuIHRocm91Z2ggdGhlIFNjcm9s
bGJhci4gVGhlIFNjcm9sbGJhciBub3cgaXMganVzdAorICAgICAgICBhICJ2aWV3IiBvbiB0aGUg
c2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBzY3JvbGxhYmxlIGFyZWEgaXQgaXMKKyAgICAgICAgYXR0
YWNoZWQgdG8uCisKKyAgICAgICAgVGhlcmUgYXJlIG5vdyB0d28gd2F5cyB0byBzY3JvbGwgYSBz
Y3JvbGxhYmxlIGFyZWE6CisgICAgICAgIC0gU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoKQorICAg
ICAgICAtIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKCkK
KworICAgICAgICBCb3RoIG9mIHRoZXNlIGdvIHRocm91Z2ggdGhlIFNjcm9sbEFuaW1hdG9yICh1
cGRhdGluZyBpdHMgc3RhdGUKKyAgICAgICAgb3Igc3RhcnRpbmcgYW4gYW5pbWF0aW9uKS4gVGhl
IFNjcm9sbEFuaW1hdG9yLCBpbiB0dXJuLCBub3cgY2FsbHMKKyAgICAgICAgU2Nyb2xsYmFyQ2xp
ZW50OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uLCB3aGljaCB0ZWxscyB0aGUKKyAgICAg
ICAgU2Nyb2xsYmFycyB0byBwdWxsIGEgbmV3IG9mZnNldCAodmlhIFNjcm9sbGJhcjo6b2Zmc2V0
RGlkQ2hhbmdlKQorICAgICAgICBhbmQgdGVsbHMgdGhlIGNsYXNzIHRoYXQgZGVyaXZlcyBmcm9t
IFNjcm9sbGJhckNsaWVudCB0byBzY3JvbGwKKyAgICAgICAgaXRzIGNvbnRlbnRzICh2aWEgU2Ny
b2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXQpLgorCisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBNb3ZlIFNjcm9sbGJhci5jcHAgdG8gdGhl
IHJpZ2h0IHBsYWNlLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlTY3JvbGxiYXI6OnNl
dFZhbHVlKToKKyAgICAgICAgSW5pdGlhdGUgdGhlIHNjcm9sbCB0aHJvdWdoIHRoZSBzY3JvbGxi
YXIgY2xpZW50LCByYXRoZXIgdGhhbiB0aGUKKyAgICAgICAgc2Nyb2xsYmFyIGl0c2VsZi4KKwor
ICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6c2Nyb2xsVG8pOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAgICAgIENvbmRl
bnNlIHRoZSB0d28gdmFsdWVDaGFuZ2VkIG92ZXJyaWRlcyB0byBhIHNpbmdsZSBvdmVycmlkZSBv
ZiB0aGUKKyAgICAgICAgc2Nyb2xsVG8gZnVuY3Rpb24uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9T
Y3JvbGxBbmltYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6c2Ny
b2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmN1cnJl
bnRQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6bm90aXR5UG9z
aXRpb25DaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JXaW46OmFuaW1hdGVTY3JvbGwpOgorICAgICAg
ICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFj
L1Njcm9sbEFuaW1hdG9yTWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1h
dG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbFRv
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxBbmltYXRv
ck1hYzo6aW1tZWRpYXRlU2Nyb2xsVG9Qb2ludCk6CisgICAgICAgIENoYW5nZSBzZXRTY3JvbGxQ
b3NpdGlvbkFuZFN0b3BBbmltYXRpb24gdG8gc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
CisgICAgICAgIGFuZCBib3R0bGVuZWNrIGFsbCBjbGllbnQgbm90aWZpY2F0aW9uIG9mIGNoYW5n
ZWQgcG9zaXRpb24gdGhyb3VnaCBhIG5ldworICAgICAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQo
KSBmdW5jdGlvbi4KKworICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6
OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3Jt
L1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6Omhvcml6b250YWxT
Y3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dmVydGljYWxTY3JvbGxi
YXIpOgorICAgICAgICBVcGRhdGUgdG8gc2Nyb2xsIHZpYSB0aGUgU2Nyb2xsYmFyQ2xpZW50IHJh
dGhlciB0aGFuIHRoZSBTY3JvbGxiYXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpvZmZzZXREaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjphdXRvc2Nyb2xsUHJlc3NlZFBhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3ZlVGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6c2V0UHJlc3NlZFBvcyk6CisgICAgICAgIENoYW5n
ZSB0aGUgc2Nyb2xsYmFyIHRvIG9ubHkgdXBkYXRlcyBpdHMgb2Zmc2V0IGluIHJlc3BvbnNlIHRv
CisgICAgICAgIGFuIG9mZnNldERpZENoYW5nZSBjYWxsLgorCisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6
c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudDo6
c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGJhckNsaWVudDo6aG9yaXpvbnRhbFNjcm9sbGJhcik6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OnZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgTWFrZSB0aGUg
aW5jcmVhc2luZ2x5IG1pc25hbWVkIFNjcm9sbGJhckNsaWVudCByZXNwb25zaWJsZSBmb3IKKyAg
ICAgICAgc2Nyb2xsaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5j
cHA6CisgICAgICAgIChzY3JvbGxiYXJFZmxFZGplTWVzc2FnZSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3RrL01haW5GcmFtZVNjcm9sbGJhckd0ay5jcHA6CisgICAgICAgIChNYWluRnJhbWVTY3Jv
bGxiYXJHdGs6Omd0a1ZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpjb250ZXh0TWVudSk6Cisg
ICAgICAgIFVwZGF0ZSB0byBtb3ZlIHNjcm9sbGluZyB0aHJvdWdoIHRoZSBjbGllbnQuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBvcHVwTWVudVdpbjo6c2Nyb2xsVG9SZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UG9wdXBNZW51V2luOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQb3B1
cE1lbnVXaW46OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpQb3B1cE1lbnVX
aW46OnNjcm9sbFRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6d25kUHJvYyk6
CisgICAgICAgICogcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6UG9wdXBNZW51V2luOjp2ZXJ0aWNhbFNjcm9sbGJhcik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpzY3JvbGxU
b09mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsVG8pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMYXllcjo6c2Nyb2xsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpzY3JvbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdEJveDo6bG9naWNhbFNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMaXN0Qm94OjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0Qm94OjpzZXRTY3JvbGxPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJv
eDo6c2Nyb2xsVG8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0U2Nyb2xs
VG9wKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdEJveDo6dmVydGljYWxTY3JvbGxiYXIpOgorICAgICAgICBVcGRhdGUg
dG8gc2Nyb2xsIHZpYSB0aGUgU2Nyb2xsYmFyQ2xpZW50IHJhdGhlciB0aGFuIHRoZSBTY3JvbGxi
YXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXJxdWVlOjpzdGFydCk6CisgICAgICAgIFNpbXBsaWZ5IGluaXRpYWwg
cGFpbnQgdG8ganVzdCBkbyBhbiBpbW1lZGlhdGUgc2Nyb2xsIHRvIHRoZSBwb3NpdGlvbi4KKwog
MjAxMS0wMS0yMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNzYyNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTExNDE1LDcgKzExNDE1LDcgQEAKIAkJQkNBOENBNUQxMUU0RTZEMTAwODEyRkI3IC8q
IEJhY2tGb3J3YXJkTGlzdEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQmFja0ZvcndhcmRMaXN0SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDQThDQTVFMTFFNEU2RDEwMDgxMkZCNyAvKiBCYWNrRm9yd2FyZExpc3RJbXBsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJhY2tGb3J3YXJkTGlzdEltcGwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBOTc5MTYxMjE1RDA1NTAwNUM0ODVDIC8qIElt
YWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNBQTkwQzIwQTdFQkE2
MDAwOEIxMjI5IC8qIFNjcm9sbGJhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gU2Nyb2xsYmFyLmNwcDsgcGF0aCA9IHBsYXRmb3JtL1Njcm9sbGJhci5jcHA7IHNv
dXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJQkNBQTkwQzIwQTdFQkE2MDAwOEIxMjI5IC8q
IFNjcm9sbGJhci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Ny
b2xsYmFyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBQ0YzQkExMDcyOTIx
QTAwQzBDOEEzIC8qIFVzZXJDb250ZW50VVJMUGF0dGVybi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyQ29udGVudFVSTFBhdHRlcm4uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0FDRjNCQjEwNzI5MjFBMDBDMEM4QTMgLyogVXNlckNvbnRl
bnRVUkxQYXR0ZXJuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJDb250
ZW50VVJMUGF0dGVybi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0FFMUZBNTEy
OTM5REI3MDA0Q0IwMjYgLyogU2Nyb2xsQW5pbWF0b3JNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2Nyb2xsQW5pbWF0b3JNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzODkwLDcgKzEzODkwLDYgQEAKIAkJCQkxQ0UyNEY5NjBEN0NBRjBFMDA3RTA0
QzIgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAogCQkJCUJDQUUxRkE1MTI5MzlEQjcwMDRDQjAy
NiAvKiBTY3JvbGxBbmltYXRvck1hYy5oICovLAogCQkJCUJDNTExNTZEMTJCMTc0OUMwMEM5Njc1
NCAvKiBTY3JvbGxBbmltYXRvck1hYy5tbSAqLywKLQkJCQlCQ0FBOTBDMjBBN0VCQTYwMDA4QjEy
MjkgLyogU2Nyb2xsYmFyLmNwcCAqLywKIAkJCQlCQzhCODUzQzBFN0M3RjExMDBBQjY5ODQgLyog
U2Nyb2xsYmFyVGhlbWVNYWMuaCAqLywKIAkJCQlCQ0VGODY5RTBFODQ0RTlEMDBBODVDRDUgLyog
U2Nyb2xsYmFyVGhlbWVNYWMubW0gKi8sCiAJCQkJOTM1MzY3NkEwOUFFRDg4QjAwRDM1Q0Q2IC8q
IFNjcm9sbFZpZXdNYWMubW0gKi8sCkBAIC0xODI3OCw2ICsxODI3Nyw3IEBACiAJCQkJNTE2MkM3
RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5LmggKi8sCiAJCQkJQ0EzQkY2N0Ix
MEQ5OUJBRTAwRTZDRTUzIC8qIFNjcm9sbEFuaW1hdG9yLmNwcCAqLywKIAkJCQlDQTNCRjY3RDEw
RDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuaCAqLywKKwkJCQlCQ0FBOTBDMjBBN0VC
QTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCAqLywKIAkJCQlCQzdCMkFGODA0NTA4MjQxMDBB
ODAwMEYgLyogU2Nyb2xsYmFyLmggKi8sCiAJCQkJQkM5QkM2NEIwRTdDNDg4OTAwOEI5ODQ5IC8q
IFNjcm9sbGJhckNsaWVudC5jcHAgKi8sCiAJCQkJQkM5QkM2NEMwRTdDNDg4OTAwOEI5ODQ5IC8q
IFNjcm9sbGJhckNsaWVudC5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCShyZXZpc2lvbiA3NjI3
MykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJh
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDkgKzk3LDE0IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVNjcm9sbGJhcjo6c2V0VmFsdWUoZmwKICAgICBpZiAoIW1fc2Nyb2xsYmFyKQogICAgICAgICBy
ZXR1cm47CiAgICAgCisgICAgaWYgKCFtX3Njcm9sbGJhci0+Y2xpZW50KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGZsb2F0IG5ld1ZhbHVlID0gdmFsdWUgKiBtX3Njcm9sbGJhci0+bWF4aW11
bSgpOwotICAgIAotICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShuZXdWYWx1ZSwgU2Nyb2xsYmFy
OjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOyAgICAKKyAgICBpZiAobV9zY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgbV9zY3JvbGxiYXItPmNs
aWVudCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG5ld1ZhbHVlKTsKKyAgICBl
bHNlCisgICAgICAgIG1fc2Nyb2xsYmFyLT5jbGllbnQoKS0+c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihuZXdWYWx1ZSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0MCwyMyAr
MTk0MCwxNSBAQCBib29sIEZyYW1lVmlldzo6aXNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBw
YWdlICYmIHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5pc0FjdGl2ZSgpOwogfQogCi12b2lkIEZy
YW1lVmlldzo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciogYmFyKQordm9pZCBGcmFtZVZpZXc6OnNj
cm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCkKIHsKLSAgICAvLyBGaWd1cmUgb3V0IGlm
IHdlIHJlYWxseSBtb3ZlZC4KICAgICBJbnRTaXplIG9mZnNldCA9IHNjcm9sbE9mZnNldCgpOwot
ICAgIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChiYXIpOworICAgIFNjcm9sbFZpZXc6OnNjcm9s
bFRvKG5ld09mZnNldCk7CiAgICAgaWYgKG9mZnNldCAhPSBzY3JvbGxPZmZzZXQoKSkKICAgICAg
ICAgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkKCk7CiAgICAgZnJhbWUoKS0+bG9hZGVyKCktPmNsaWVu
dCgpLT5kaWRDaGFuZ2VTY3JvbGxPZmZzZXQoKTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnZhbHVl
Q2hhbmdlZChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKLXsKLSAgICBTY3JvbGxWaWV3Ojp2
YWx1ZUNoYW5nZWQoc2Nyb2xsRGVsdGEpOwotICAgIGZyYW1lKCktPmV2ZW50SGFuZGxlcigpLT5z
ZW5kU2Nyb2xsRXZlbnQoKTsKLSAgICBmcmFtZSgpLT5sb2FkZXIoKS0+Y2xpZW50KCktPmRpZENo
YW5nZVNjcm9sbE9mZnNldCgpOwotfQotCiB2b2lkIEZyYW1lVmlldzo6aW52YWxpZGF0ZVNjcm9s
bGJhclJlY3QoU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAg
ICAgLy8gQWRkIGluIG91ciBvZmZzZXQgd2l0aGluIHRoZSBGcmFtZVZpZXcuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg4LDEyICsyODgsMTIgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKIAogICAgIC8vIFNjcm9sbEJhckNsaWVudCBpbnRlcmZhY2UKLSAg
ICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOwotICAgIHZpcnR1YWwgdm9p
ZCB2YWx1ZUNoYW5nZWQoY29uc3QgSW50U2l6ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdmlydHVh
bCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGdldFRpY2ttYXJrcyhW
ZWN0b3I8SW50UmVjdD4mKSBjb25zdDsKIAorICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUbyhjb25z
dCBJbnRTaXplJik7CisKICAgICB2b2lkIGRlZmVycmVkUmVwYWludFRpbWVyRmlyZWQoVGltZXI8
RnJhbWVWaWV3PiopOwogICAgIHZvaWQgZG9EZWZlcnJlZFJlcGFpbnRzKCk7CiAgICAgdm9pZCB1
cGRhdGVEZWZlcnJlZFJlcGFpbnREZWxheSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgog
CisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgog
I2luY2x1ZGUgPGFsZ29yaXRobT4KIApAQCAtNjEsMTYgKzYyLDI3IEBAIGJvb2wgU2Nyb2xsQW5p
bWF0b3I6OnNjcm9sbChTY3JvbGxiYXJPcmkKICAgICBpZiAoKmN1cnJlbnRQb3MgPT0gbmV3UG9z
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgKmN1cnJlbnRQb3MgPSBuZXdQb3M7Ci0gICAg
bV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oSW50UG9pbnQobV9jdXJyZW50
UG9zWCwgbV9jdXJyZW50UG9zWSkpOworCisgICAgbm90aXR5UG9zaXRpb25DaGFuZ2VkKCk7CisK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxBbmltYXRvcjo6c2V0U2Nyb2xsUG9z
aXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBm
bG9hdCBwb3MpCit2b2lkIFNjcm9sbEFuaW1hdG9yOjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQoreworICAgIG1fY3VycmVudFBvc1ggPSBv
ZmZzZXQueCgpOworICAgIG1fY3VycmVudFBvc1kgPSBvZmZzZXQueSgpOworICAgIG5vdGl0eVBv
c2l0aW9uQ2hhbmdlZCgpOworfQorCitGbG9hdFBvaW50IFNjcm9sbEFuaW1hdG9yOjpjdXJyZW50
UG9zaXRpb24oKSBjb25zdAogewotICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQotICAgICAgICBtX2N1cnJlbnRQb3NYID0gcG9zOwotICAgIGVsc2UKLSAgICAgICAg
bV9jdXJyZW50UG9zWSA9IHBvczsKKyAgICByZXR1cm4gRmxvYXRQb2ludChtX2N1cnJlbnRQb3NY
LCBtX2N1cnJlbnRQb3NZKTsKK30KKwordm9pZCBTY3JvbGxBbmltYXRvcjo6bm90aXR5UG9zaXRp
b25DaGFuZ2VkKCkKK3sKKyAgICBtX2NsaWVudC0+c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlv
bihJbnRQb2ludChtX2N1cnJlbnRQb3NYLCBtX2N1cnJlbnRQb3NZKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1h
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0
b3IuaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNzIFNjcm9sbGJhckNsaWVudDsKIAog
Y2xhc3MgU2Nyb2xsQW5pbWF0b3IgewpAQCAtNTAsMTYgKzUxLDE4IEBAIHB1YmxpYzoKICAgICAv
LyBUaGUgYmFzZSBjbGFzcyBpbXBsZW1lbnRhdGlvbiBhbHdheXMgc2Nyb2xscyBpbW1lZGlhdGVs
eSwgbmV2ZXIgYW5pbWF0ZXMuCiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmll
bnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIp
OwogCi0gICAgLy8gU3RvcHMgYW55IGFuaW1hdGlvbiBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uIGFu
ZCB1cGRhdGVzIHRoZSBTY3JvbGxBbmltYXRvcgotICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgc2Ny
b2xsIHBvc2l0aW9uLiAgVGhpcyBkb2VzIG5vdCBjYXVzZSBhIGNhbGxiYWNrIHRvIHRoZQotICAg
IC8vIFNjcm9sbGJhckNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25B
bmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uLCBmbG9hdCk7CisgICAgdmlydHVh
bCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9hdFBvaW50Jik7
CisKKyAgICBGbG9hdFBvaW50IGN1cnJlbnRQb3NpdGlvbigpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6
CisgICAgdm9pZCBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsKKwogICAgIFNjcm9sbGJhckNsaWVu
dCogbV9jbGllbnQ7CiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWDsgLy8gV2UgYXZvaWQgdXNpbmcg
YSBGbG9hdFBvaW50IGluIG9yZGVyIHRvIHJlZHVjZQogICAgIGZsb2F0IG1fY3VycmVudFBvc1k7
IC8vIHN1YmNsYXNzIGNvZGUgY29tcGxleGl0eS4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLSNlbmRpZgorCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmNwcAkocmV2aXNpb24gNzYyNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yV2lu
LmgiCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBA
IC0xNzcsMTcgKzE3OCwyNCBAQCBib29sIFNjcm9sbEFuaW1hdG9yV2luOjpzY3JvbGwoU2Nyb2xs
YmFyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2Nyb2xsQW5pbWF0b3JXaW46OnNldFNj
cm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgZmxvYXQgcG9zKQordm9pZCBTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKIHsKLSAgICBQZXJBeGlz
RGF0YSogZGF0YSA9IChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2hv
cml6b250YWxEYXRhIDogJm1fdmVydGljYWxEYXRhOwotICAgIHN0b3BBbmltYXRpb25UaW1lcklm
TmVlZGVkKGRhdGEpOwotICAgICpkYXRhLT5tX2N1cnJlbnRQb3MgPSBwb3M7Ci0gICAgZGF0YS0+
bV9kZXNpcmVkUG9zID0gcG9zOwotICAgIGRhdGEtPm1fY3VycmVudFZlbG9jaXR5ID0gMDsKLSAg
ICBkYXRhLT5tX2Rlc2lyZWRWZWxvY2l0eSA9IDA7CisgICAgc3RvcEFuaW1hdGlvblRpbWVySWZO
ZWVkZWQoJm1faG9yaXpvbnRhbERhdGEpOworICAgIHN0b3BBbmltYXRpb25UaW1lcklmTmVlZGVk
KCZtX3ZlcnRpY2FsRGF0YSk7CisKKyAgICAqbV9ob3Jpem9udGFsRGF0YS5tX2N1cnJlbnRQb3Mg
PSBvZmZzZXQueCgpOworICAgIG1faG9yaXpvbnRhbERhdGEubV9kZXNpcmVkUG9zID0gb2Zmc2V0
LngoKTsKKyAgICBtX2hvcml6b250YWxEYXRhLm1fY3VycmVudFZlbG9jaXR5ID0gMDsKKyAgICBt
X2hvcml6b250YWxEYXRhLm1fZGVzaXJlZFZlbG9jaXR5ID0gMDsKKworICAgICptX3ZlcnRpY2Fs
RGF0YS5tX2N1cnJlbnRQb3MgPSBvZmZzZXQueSgpOworICAgIG1fdmVydGljYWxEYXRhLm1fZGVz
aXJlZFBvcyA9IG9mZnNldC55KCk7CisgICAgbV92ZXJ0aWNhbERhdGEubV9jdXJyZW50VmVsb2Np
dHkgPSAwOworICAgIG1fdmVydGljYWxEYXRhLm1fZGVzaXJlZFZlbG9jaXR5ID0gMDsKKworICAg
IG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOwogfQogCi0vLyBzdGF0aWMKIGRvdWJsZSBTY3JvbGxB
bmltYXRvcldpbjo6YWNjZWxlcmF0aW9uVGltZSgpCiB7CiAgICAgLy8gV2UgZWxlY3QgdG8gdXNl
IFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaGVtZSgpLT5hdXRvc2Nyb2xsVGltZXJEZWxheSgpIGFz
CkBAIC0yOTMsNyArMzAxLDggQEAgdm9pZCBTY3JvbGxBbmltYXRvcldpbjo6YW5pbWF0ZVNjcm9s
bChQZQogICAgICAgICBkYXRhLT5tX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChhbmltYXRp
b25UaW1lckRlbGF5KTsKICAgICAgICAgZGF0YS0+bV9sYXN0QW5pbWF0aW9uVGltZSA9IFdURjo6
Y3VycmVudFRpbWUoKTsKICAgICB9Ci0gICAgbV9jbGllbnQtPnNldFNjcm9sbE9mZnNldEZyb21B
bmltYXRpb24oSW50UG9pbnQoKm1faG9yaXpvbnRhbERhdGEubV9jdXJyZW50UG9zLCAqbV92ZXJ0
aWNhbERhdGEubV9jdXJyZW50UG9zKSk7CisKKyAgICBub3RpdHlQb3NpdGlvbkNoYW5nZWQoKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yV2luKCk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgc2Nyb2xsKFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxh
cml0eSwgZmxvYXQgc3RlcCwgZmxvYXQgbXVsdGlwbGllcik7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiwgZmxv
YXQpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29u
c3QgRmxvYXRQb2ludCYpOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBQZXJBeGlzRGF0YSB7CkBA
IC02OSw4ICs2OSw4IEBAIHByaXZhdGU6CiAgICAgUGVyQXhpc0RhdGEgbV92ZXJ0aWNhbERhdGE7
CiB9OwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoU01P
T1RIX1NDUk9MTElORykKIAotI2VuZGlmCisjZW5kaWYgLy8gU2Nyb2xsQW5pbWF0b3JXaW5faApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDc2Mjcz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyMCwyNSArMzIwLDIwIEBAIGludCBTY3JvbGxWaWV3OjpzY3JvbGxTaXplKFNjcm9s
bGJhck9yaWUKICAgICByZXR1cm4gc2Nyb2xsYmFyID8gKHNjcm9sbGJhci0+dG90YWxTaXplKCkg
LSBzY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojpz
ZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCit2b2lk
IFNjcm9sbFZpZXc6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewot
ICAgIGlmIChtX2hvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIG1faG9yaXpvbnRhbFNjcm9s
bGJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3Ip
OwotICAgIGlmIChtX3ZlcnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xs
YmFyLT5zZXRWYWx1ZShvZmZzZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7
Ci19CisgICAgaW50IGhvcml6b250YWxPZmZzZXQgPSBzdGQ6Om1heChzdGQ6Om1pbihvZmZzZXQu
eCgpLCBjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSksIDApOworICAgIGludCB2ZXJ0
aWNhbE9mZnNldCA9IHN0ZDo6bWF4KHN0ZDo6bWluKG9mZnNldC55KCksIGNvbnRlbnRzSGVpZ2h0
KCkgLSB2aXNpYmxlSGVpZ2h0KCkpLCAwKTsKIAotdm9pZCBTY3JvbGxWaWV3Ojp2YWx1ZUNoYW5n
ZWQoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCi17Ci0gICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFs
bHkgbW92ZWQuCiAgICAgSW50U2l6ZSBuZXdPZmZzZXQgPSBtX3Njcm9sbE9mZnNldDsKLSAgICBp
ZiAoc2Nyb2xsYmFyKSB7Ci0gICAgICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0g
SG9yaXpvbnRhbFNjcm9sbGJhcikKLSAgICAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChzY3Jv
bGxiYXItPnZhbHVlKCkgLSBtX3Njcm9sbE9yaWdpbi54KCkpOwotICAgICAgICBlbHNlIGlmIChz
Y3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpCi0gICAgICAgICAg
ICBuZXdPZmZzZXQuc2V0SGVpZ2h0KHNjcm9sbGJhci0+dmFsdWUoKSAtIG1fc2Nyb2xsT3JpZ2lu
LnkoKSk7Ci0gICAgfQorICAgIG5ld09mZnNldC5zZXRXaWR0aChob3Jpem9udGFsT2Zmc2V0IC0g
bV9zY3JvbGxPcmlnaW4ueCgpKTsKKyAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KHZlcnRpY2FsT2Zm
c2V0IC0gbV9zY3JvbGxPcmlnaW4ueSgpKTsKKworICAgIHNjcm9sbFRvKG5ld09mZnNldCk7Cit9
CiAKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsVG8oY29uc3QgSW50U2l6ZSYgbmV3T2Zmc2V0KQor
ewogICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQgLSBtX3Njcm9sbE9mZnNldDsK
ICAgICBpZiAoc2Nyb2xsRGVsdGEgPT0gSW50U2l6ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0z
NTEsMTMgKzM0NiwxMyBAQCB2b2lkIFNjcm9sbFZpZXc6OnZhbHVlQ2hhbmdlZChTY3JvbGxiYXIq
CiAgICAgc2Nyb2xsQ29udGVudHMoc2Nyb2xsRGVsdGEpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6
OnZhbHVlQ2hhbmdlZChjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK2ludCBTY3JvbGxWaWV3
OjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqIHNjcm9sbGJhcikgY29uc3QKIHsKLSAgICBpZiAo
c2Nyb2xsYmFyc1N1cHByZXNzZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVwYWludEZp
eGVkRWxlbWVudHNBZnRlclNjcm9sbGluZygpOwotICAgIHNjcm9sbENvbnRlbnRzKHNjcm9sbERl
bHRhKTsKKyAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpCisgICAgICAgIHJldHVybiBzY3JvbGxQb3NpdGlvbigpLngoKTsKKyAgICBpZiAoc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKQorICAgICAgICByZXR1
cm4gc2Nyb2xsUG9zaXRpb24oKS55KCk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6c2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvaW50KQpAQCAt
MzkxLDE1ICszODYsOCBAQCBib29sIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24g
CiB7CiAgICAgaWYgKHBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICAKLSAgICBpZiAoZGlyZWN0aW9uID09
IFNjcm9sbFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxEb3duKSB7Ci0gICAgICAgIGlmIChtX3Zl
cnRpY2FsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1fdmVydGljYWxTY3JvbGxiYXIt
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAobV9ob3Jpem9udGFsU2Nyb2xsYmFyKQotICAgICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRh
bFNjcm9sbGJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSk7CiB9CiAKIGJvb2wgU2Nyb2xsVmlldzo6bG9naWNhbFNjcm9sbChT
Y3JvbGxMb2dpY2FsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHkpCkBAIC01MzAsNyArNTE4LDYgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxi
YXJzKGNvbnN0IAogICAgICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVz
c0ludmFsaWRhdGlvbih0cnVlKTsKICAgICAgICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRT
dGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCksIHBhZ2VTdGVwKTsKICAgICAgICAg
bV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250ZW50
c1dpZHRoKCkpOwotICAgICAgICBtX2hvcml6b250YWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9s
bC53aWR0aCgpICsgbV9zY3JvbGxPcmlnaW4ueCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxB
bmltYXRvcik7CiAgICAgICAgIGlmIChtX3Njcm9sbGJhcnNTdXBwcmVzc2VkKQogICAgICAgICAg
ICAgbV9ob3Jpem9udGFsU2Nyb2xsYmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxzZSk7
IAogICAgIH0gCkBAIC01NTIsNyArNTM5LDYgQEAgdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVTY3Jv
bGxiYXJzKGNvbnN0IAogICAgICAgICAgICAgbV92ZXJ0aWNhbFNjcm9sbGJhci0+c2V0U3VwcHJl
c3NJbnZhbGlkYXRpb24odHJ1ZSk7CiAgICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN0
ZXBzKFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBt
X3ZlcnRpY2FsU2Nyb2xsYmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgY29udGVudHNI
ZWlnaHQoKSk7Ci0gICAgICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnNldFZhbHVlKHNjcm9sbC5o
ZWlnaHQoKSArIG1fc2Nyb2xsT3JpZ2luLnkoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5p
bWF0b3IpOwogICAgICAgICBpZiAobV9zY3JvbGxiYXJzU3VwcHJlc3NlZCkKICAgICAgICAgICAg
IG1fdmVydGljYWxTY3JvbGxiYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKICAg
ICB9CkBAIC01NjIsMTUgKzU0OCw3IEBAIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFy
cyhjb25zdCAKICAgICAgICAgdXBkYXRlU2Nyb2xsQ29ybmVyKCk7CiAgICAgfQogCi0gICAgLy8g
U2VlIGlmIG91ciBvZmZzZXQgaGFzIGNoYW5nZWQgaW4gYSBzaXR1YXRpb24gd2hlcmUgd2UgbWln
aHQgbm90IGhhdmUgc2Nyb2xsYmFycy4KLSAgICAvLyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBlZGl0
aW5nIGEgYm9keSB3aXRoIG92ZXJmbG93OmhpZGRlbiBhbmQgc2Nyb2xsaW5nIHRvIHJldmVhbCBz
ZWxlY3Rpb24uCi0gICAgLy8gSXQgY2FuIGFsc28gaGFwcGVuIHdoZW4gbWF4aW1pemluZyBhIHdp
bmRvdyB0aGF0IGhhcyBzY3JvbGxiYXJzIChidXQgdGhlIG5ldyBtYXhpbWl6ZWQgcmVzdWx0Ci0g
ICAgLy8gZG9lcyBub3QpLgotICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBzY3JvbGwgLSBtX3Nj
cm9sbE9mZnNldDsKLSAgICBpZiAoc2Nyb2xsRGVsdGEgIT0gSW50U2l6ZSgpKSB7Ci0gICAgICAg
bV9zY3JvbGxPZmZzZXQgPSBzY3JvbGw7Ci0gICAgICAgdmFsdWVDaGFuZ2VkKHNjcm9sbERlbHRh
KTsKLSAgICB9CisgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmlt
YXRpb24oRmxvYXRQb2ludChzY3JvbGwud2lkdGgoKSwgc2Nyb2xsLmhlaWdodCgpKSk7CiAKICAg
ICBtX2luVXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOwogfQpAQCAtNzU3LDYgKzczNSw3IEBAIHZv
aWQgU2Nyb2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUKICAgICAvLyBzY3JvbGwgYW55
IGZ1cnRoZXIuCiAgICAgZmxvYXQgZGVsdGFYID0gbV9ob3Jpem9udGFsU2Nyb2xsYmFyID8gZS5k
ZWx0YVgoKSA6IDA7CiAgICAgZmxvYXQgZGVsdGFZID0gbV92ZXJ0aWNhbFNjcm9sbGJhciA/IGUu
ZGVsdGFZKCkgOiAwOworICAgIAogICAgIEludFNpemUgbWF4Rm9yd2FyZFNjcm9sbERlbHRhID0g
bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgLSBzY3JvbGxQb3NpdGlvbigpOwogICAgIEludFNpemUg
bWF4QmFja3dhcmRTY3JvbGxEZWx0YSA9IHNjcm9sbFBvc2l0aW9uKCkgLSBtaW5pbXVtU2Nyb2xs
UG9zaXRpb24oKTsKICAgICBpZiAoKGRlbHRhWCA8IDAgJiYgbWF4Rm9yd2FyZFNjcm9sbERlbHRh
LndpZHRoKCkgPiAwKQpAQCAtNzczLDkgKzc1Miw5IEBAIHZvaWQgU2Nyb2xsVmlldzo6d2hlZWxF
dmVudChQbGF0Zm9ybVdoZWUKICAgICAgICAgfQogCiAgICAgICAgIGlmIChkZWx0YVkpCi0gICAg
ICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zY3JvbGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4
ZWwsIGRlbHRhWSk7CisgICAgICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxV
cCwgU2Nyb2xsQnlQaXhlbCwgZGVsdGFZKTsKICAgICAgICAgaWYgKGRlbHRhWCkKLSAgICAgICAg
ICAgIG1faG9yaXpvbnRhbFNjcm9sbGJhci0+c2Nyb2xsKFNjcm9sbExlZnQsIFNjcm9sbEJ5UGl4
ZWwsIGRlbHRhWCk7CisgICAgICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxM
ZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEwICs2MCwxMiBA
QCBwdWJsaWM6CiAKICAgICAvLyBTY3JvbGxiYXJDbGllbnQgZnVuY3Rpb25zLiAgRnJhbWVWaWV3
IG92ZXJyaWRlcyB0aGUgb3RoZXJzLgogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2
b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFu
Z2VkKGNvbnN0IEludFNpemUmKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3Jv
bGxiYXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IElu
dFBvaW50Jik7CiAgICAgCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
YnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCk7CisKICAg
ICAvLyBUaGUgd2luZG93IHRoYXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiBUaGUgU2Nyb2xsVmll
dyB3aWxsIGNvbW11bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQogICAgIC8vIGhv
c3Qgd2luZG93IGluIHRoZSB3aW5kb3cncyBjb29yZGluYXRlIHNwYWNlLgogICAgIHZpcnR1YWwg
SG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0ID0gMDsKQEAgLTc4LDggKzgwLDggQEAgcHVi
bGljOgogICAgIAogICAgIC8vIElmIHRoZSBzY3JvbGwgdmlldyBkb2VzIG5vdCB1c2UgYSBuYXRp
dmUgd2lkZ2V0LCB0aGVuIGl0IHdpbGwgaGF2ZSBjcm9zcy1wbGF0Zm9ybSBTY3JvbGxiYXJzLiBU
aGVzZSBmdW5jdGlvbnMKICAgICAvLyBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhvc2Ugc2Nyb2xs
YmFycy4KLSAgICBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVy
biBtX2hvcml6b250YWxTY3JvbGxiYXIuZ2V0KCk7IH0KLSAgICBTY3JvbGxiYXIqIHZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5nZXQoKTsgfQor
ICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gbV9ob3Jpem9udGFsU2Nyb2xsYmFyLmdldCgpOyB9CisgICAgdmlydHVhbCBTY3JvbGxiYXIq
IHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNjcm9sbGJhci5n
ZXQoKTsgfQogICAgIGJvb2wgaXNTY3JvbGxWaWV3U2Nyb2xsYmFyKGNvbnN0IFdpZGdldCogY2hp
bGQpIGNvbnN0IHsgcmV0dXJuIGhvcml6b250YWxTY3JvbGxiYXIoKSA9PSBjaGlsZCB8fCB2ZXJ0
aWNhbFNjcm9sbGJhcigpID09IGNoaWxkOyB9CiAKICAgICAvLyBGdW5jdGlvbnMgZm9yIHNldHRp
bmcgYW5kIHJldHJpZXZpbmcgdGhlIHNjcm9sbGluZyBtb2RlIGluIGVhY2ggYXhpcyAoaG9yaXpv
bnRhbC92ZXJ0aWNhbCkuIFRoZSBtb2RlIGhhcyB2YWx1ZXMgb2YKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwx
OSBAQCBTY3JvbGxiYXI6On5TY3JvbGxiYXIoKQogICAgIG1fdGhlbWUtPnVucmVnaXN0ZXJTY3Jv
bGxiYXIodGhpcyk7CiB9CiAKLWJvb2wgU2Nyb2xsYmFyOjpzZXRWYWx1ZShpbnQgdiwgU2Nyb2xs
U291cmNlIHNvdXJjZSkKK3ZvaWQgU2Nyb2xsYmFyOjpvZmZzZXREaWRDaGFuZ2UoKQogewotICAg
IHYgPSBtYXgobWluKHYsIG1fdG90YWxTaXplIC0gbV92aXNpYmxlU2l6ZSksIDApOwotICAgIGlm
ICh2YWx1ZSgpID09IHYpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gT3VyIHZhbHVlIHN0YXll
ZCB0aGUgc2FtZS4KLSAgICBzZXRDdXJyZW50UG9zKHYsIHNvdXJjZSk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKworICAgIGZsb2F0IHBvc2l0aW9uID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG1fY2xpZW50LT5zY3JvbGxQb3NpdGlvbih0aGlzKSk7CisgICAgaWYgKHBv
c2l0aW9uID09IG1fY3VycmVudFBvcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaW50IG9sZFRo
dW1iUG9zaXRpb24gPSB0aGVtZSgpLT50aHVtYlBvc2l0aW9uKHRoaXMpOworICAgIG1fY3VycmVu
dFBvcyA9IHBvc2l0aW9uOworICAgIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKKyAgICBpZiAobV9w
cmVzc2VkUGFydCA9PSBUaHVtYlBhcnQpCisgICAgICAgIHNldFByZXNzZWRQb3MobV9wcmVzc2Vk
UG9zICsgdGhlbWUoKS0+dGh1bWJQb3NpdGlvbih0aGlzKSAtIG9sZFRodW1iUG9zaXRpb24pOyAg
ICAKIH0KIAogdm9pZCBTY3JvbGxiYXI6OnNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBp
bnQgdG90YWxTaXplKQpAQCAtMTMxLDMxICsxMzcsNiBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0U3Rl
cHMoaW50IGxpbmVTdGVwLCBpCiAgICAgbV9waXhlbFN0ZXAgPSAxLjBmIC8gcGl4ZWxzUGVyU3Rl
cDsKIH0KIAotYm9vbCBTY3JvbGxiYXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKLXsKLSNp
ZiBIQVZFKEFDQ0VTU0lCSUxJVFkpCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxp
dHlFbmFibGVkKCkgJiYgYXhPYmplY3RDYWNoZSgpKQotICAgICAgICBheE9iamVjdENhY2hlKCkt
PnBvc3ROb3RpZmljYXRpb24oYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZSh0aGlzKSwgMCwg
QVhPYmplY3RDYWNoZTo6QVhWYWx1ZUNoYW5nZWQsIHRydWUpOwotI2VuZGlmCi0KLSAgICAvLyBJ
Z25vcmUgcGVycGVuZGljdWxhciBzY3JvbGxzLgotICAgIGlmICgobV9vcmllbnRhdGlvbiA9PSBI
b3Jpem9udGFsU2Nyb2xsYmFyKSA/IChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9u
ID09IFNjcm9sbERvd24pIDogKGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0IHx8IGRpcmVjdGlvbiA9
PSBTY3JvbGxSaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmbG9hdCBzdGVwID0g
MDsKLSAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0gICAgY2FzZSBTY3JvbGxCeUxpbmU6ICAg
ICBzdGVwID0gbV9saW5lU3RlcDsgIGJyZWFrOwotICAgIGNhc2UgU2Nyb2xsQnlQYWdlOiAgICAg
c3RlcCA9IG1fcGFnZVN0ZXA7ICBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6IHN0
ZXAgPSBtX3RvdGFsU2l6ZTsgYnJlYWs7Ci0gICAgY2FzZSBTY3JvbGxCeVBpeGVsOiAgICBzdGVw
ID0gbV9waXhlbFN0ZXA7IGJyZWFrOwotICAgIH0KLSAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9s
bFVwIHx8IGRpcmVjdGlvbiA9PSBTY3JvbGxMZWZ0KQotICAgICAgICBtdWx0aXBsaWVyID0gLW11
bHRpcGxpZXI7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICByZXR1cm4gY2xpZW50KCktPnNj
cm9sbChtX29yaWVudGF0aW9uLCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7Ci0KLSAg
ICByZXR1cm4gc2V0Q3VycmVudFBvcyhtYXgobWluKG1fY3VycmVudFBvcyArIChzdGVwICogbXVs
dGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX3RvdGFsU2l6ZSAtIG1fdmlzaWJsZVNpemUp
KSwgMC4wZiksIE5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci19Ci0KIHZvaWQgU2Nyb2xsYmFyOjp1
cGRhdGVUaHVtYigpCiB7CiAjaWZkZWYgVEhVTUJfUE9TSVRJT05fQUZGRUNUU19CVVRUT05TCkBA
IC0yMTUsNyArMTk2LDcgQEAgdm9pZCBTY3JvbGxiYXI6OmF1dG9zY3JvbGxQcmVzc2VkUGFydChk
bwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUgYXJyb3dzIGFuZCB0cmFjay4KLSAgICBpZiAo
c2Nyb2xsKHByZXNzZWRQYXJ0U2Nyb2xsRGlyZWN0aW9uKCksIHByZXNzZWRQYXJ0U2Nyb2xsR3Jh
bnVsYXJpdHkoKSkpCisgICAgaWYgKGNsaWVudCgpLT5zY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxE
aXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRTY3JvbGxHcmFudWxhcml0eSgpKSkKICAgICAgICAgc3Rh
cnRUaW1lcklmTmVlZGVkKGRlbGF5KTsKIH0KIApAQCAtMjg0LDI4ICsyNjUsMTQgQEAgdm9pZCBT
Y3JvbGxiYXI6Om1vdmVUaHVtYihpbnQgcG9zKQogICAgICAgICBkZWx0YSA9IG1pbihtYXhQb3Mg
LSB0aHVtYlBvcywgZGVsdGEpOwogICAgIGVsc2UgaWYgKGRlbHRhIDwgMCkKICAgICAgICAgZGVs
dGEgPSBtYXgoLXRodW1iUG9zLCBkZWx0YSk7Ci0gICAgaWYgKGRlbHRhKQotICAgICAgICBzZXRD
dXJyZW50UG9zKHN0YXRpY19jYXN0PGZsb2F0Pih0aHVtYlBvcyArIGRlbHRhKSAqIG1heGltdW0o
KSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSwgTm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKLX0KLQot
Ym9vbCBTY3JvbGxiYXI6OnNldEN1cnJlbnRQb3MoZmxvYXQgcG9zLCBTY3JvbGxTb3VyY2Ugc291
cmNlKQotewotICAgIGlmICgoc291cmNlICE9IEZyb21TY3JvbGxBbmltYXRvcikgJiYgY2xpZW50
KCkpCi0gICAgICAgIGNsaWVudCgpLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24o
bV9vcmllbnRhdGlvbiwgcG9zKTsKLQotICAgIGlmIChwb3MgPT0gbV9jdXJyZW50UG9zKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgb2xkVmFsdWUgPSB2YWx1ZSgpOwotICAgIGlu
dCBvbGRUaHVtYlBvcyA9IHRoZW1lKCktPnRodW1iUG9zaXRpb24odGhpcyk7Ci0gICAgbV9jdXJy
ZW50UG9zID0gcG9zOwotICAgIHVwZGF0ZVRodW1iUG9zaXRpb24oKTsKLSAgICBpZiAobV9wcmVz
c2VkUGFydCA9PSBUaHVtYlBhcnQpCi0gICAgICAgIHNldFByZXNzZWRQb3MobV9wcmVzc2VkUG9z
ICsgdGhlbWUoKS0+dGh1bWJQb3NpdGlvbih0aGlzKSAtIG9sZFRodW1iUG9zKTsKLQotICAgIGlm
ICh2YWx1ZSgpICE9IG9sZFZhbHVlICYmIGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+dmFs
dWVDaGFuZ2VkKHRoaXMpOwotICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChkZWx0YSkg
eworICAgICAgICBpbnQgbmV3UG9zaXRpb24gPSBscm91bmRmKHN0YXRpY19jYXN0PGZsb2F0Pih0
aHVtYlBvcyArIGRlbHRhKSAqIG1heGltdW0oKSAvICh0cmFja0xlbiAtIHRodW1iTGVuKSk7Cisg
ICAgICAgIGlmIChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCisgICAgICAg
ICAgICBjbGllbnQoKS0+c2Nyb2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihuZXdQb3NpdGlv
bik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRX
aXRob3V0QW5pbWF0aW9uKG5ld1Bvc2l0aW9uKTsKKyAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsYmFy
OjpzZXRIb3ZlcmVkUGFydChTY3JvbGxiYXJQYXJ0IHBhcnQpCkBAIC0zMzYsOSArMzAzLDEyIEBA
IHZvaWQgU2Nyb2xsYmFyOjpzZXRQcmVzc2VkUGFydChTY3JvbGxiYXIKIGJvb2wgU2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZXZ0KQogewogICAgIGlmICht
X3ByZXNzZWRQYXJ0ID09IFRodW1iUGFydCkgewotICAgICAgICBpZiAodGhlbWUoKS0+c2hvdWxk
U25hcEJhY2tUb0RyYWdPcmlnaW4odGhpcywgZXZ0KSkKLSAgICAgICAgICAgIHNldEN1cnJlbnRQ
b3MobV9kcmFnT3JpZ2luLCBOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotICAgICAgICBlbHNlIHsK
KyAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3JpZ2luKHRoaXMsIGV2
dCkpIHsKKyAgICAgICAgICAgIGlmIChtX29yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxi
YXIpCisgICAgICAgICAgICAgICAgY2xpZW50KCktPnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmlt
YXRpb24obV9kcmFnT3JpZ2luKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBj
bGllbnQoKS0+c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihtX2RyYWdPcmlnaW4pOwor
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbW92ZVRodW1iKG1fb3JpZW50YXRpb24gPT0g
SG9yaXpvbnRhbFNjcm9sbGJhciA/IAogICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRGcm9t
Q29udGFpbmluZ1dpbmRvdyhldnQucG9zKCkpLngoKSA6CiAgICAgICAgICAgICAgICAgICAgICAg
Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueSgpKTsKQEAgLTUyMSw0ICs0
OTEsNCBAQCBJbnRQb2ludCBTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluCiAgICAgcmV0
dXJuIFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7CiB9CiAK
LX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbGJhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhci5oCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGJhci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw5IEBAIHB1YmxpYzoKICAgICAvLyBN
dXN0IGJlIGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhl
IFNjcm9sbGJhciBiYXNlIGNsYXNzLiAgUmlnaHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQg
aXMgbm90IHVzaW5nIHRoZSBiYXNlIGNsYXNzIGlzIEdUSy4KICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTY3JvbGxiYXI+IGNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVu
dCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXpl
IHNpemUpOwogCisgICAgLy8gQ2FsbGVkIGJ5IHRoZSBTY3JvbGxiYXJDbGllbnQgd2hlbiB0aGUg
c2Nyb2xsIG9mZnNldCBjaGFuZ2VzLgorICAgIHZvaWQgb2Zmc2V0RGlkQ2hhbmdlKCk7CisKICAg
ICBzdGF0aWMgaW50IHBpeGVsc1BlckxpbmVTdGVwKCkgeyByZXR1cm4gNDA7IH0KICAgICBzdGF0
aWMgZmxvYXQgbWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCkgeyByZXR1cm4gMC44NzVmOyB9
CiAgICAgc3RhdGljIGludCBtYXhPdmVybGFwQmV0d2VlblBhZ2VzKCk7CkBAIC02MSw3ICs2NCw3
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc0N1c3RvbVNjcm9sbGJhcigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24o
KSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9Ci0gICAgCisKICAgICBpbnQgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBscm91bmRmKG1fY3VycmVudFBvcyk7IH0KICAgICBmbG9hdCBjdXJy
ZW50UG9zKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50UG9zOyB9CiAgICAgaW50IHByZXNzZWRQ
b3MoKSBjb25zdCB7IHJldHVybiBtX3ByZXNzZWRQb3M7IH0KQEAgLTczLDE4ICs3NiwxNSBAQCBw
dWJsaWM6CiAgICAgaW50IGxpbmVTdGVwKCkgY29uc3QgeyByZXR1cm4gbV9saW5lU3RlcDsgfQog
ICAgIGludCBwYWdlU3RlcCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFnZVN0ZXA7IH0KICAgICBmbG9h
dCBwaXhlbFN0ZXAoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsU3RlcDsgfQotICAgIAorCiAgICAg
U2Nyb2xsYmFyUGFydCBwcmVzc2VkUGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlc3NlZFBhcnQ7
IH0KICAgICBTY3JvbGxiYXJQYXJ0IGhvdmVyZWRQYXJ0KCkgY29uc3QgeyByZXR1cm4gbV9ob3Zl
cmVkUGFydDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRIb3ZlcmVkUGFydChTY3JvbGxiYXJQYXJ0
KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlc3NlZFBhcnQoU2Nyb2xsYmFyUGFydCk7CiAKICAg
ICB2b2lkIHNldFN0ZXBzKGludCBsaW5lU3RlcCwgaW50IHBhZ2VTdGVwLCBpbnQgcGl4ZWxzUGVy
U3RlcCA9IDEpOwotICAgIGJvb2wgc2V0VmFsdWUoaW50LCBTY3JvbGxTb3VyY2Ugc291cmNlKTsK
ICAgICB2b2lkIHNldFByb3BvcnRpb24oaW50IHZpc2libGVTaXplLCBpbnQgdG90YWxTaXplKTsK
ICAgICB2b2lkIHNldFByZXNzZWRQb3MoaW50IHApIHsgbV9wcmVzc2VkUG9zID0gcDsgfQotCi0g
ICAgYm9vbCBzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQg
bXVsdGlwbGllciA9IDEpOwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KTsKIApAQCAtMTcyLDEwICsxNzIsOCBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGJhcigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0
Q2FjaGUoKSBjb25zdDsKLQotICAgIGJvb2wgc2V0Q3VycmVudFBvcyhmbG9hdCBwb3MsIFNjcm9s
bFNvdXJjZSBzb3VyY2UpOwogfTsKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYKKyNlbmRpZiAvLyBTY3JvbGxiYXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxiYXJDbGllbnQuY3BwCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIK
IAorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQu
aCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC00NCwxNCArNDYsNjggQEAgU2Nyb2xsYmFyQ2xpZW50Ojp+U2Nyb2xsYmFyQ2xpZW50KCkKIHsK
IH0KIAotYm9vbCBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiBv
cmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IHN0ZXAsIGZs
b2F0IG11bHRpcGxpZXIpCitib29sIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyKQogeworICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uOworICAgIFNj
cm9sbGJhciogc2Nyb2xsYmFyOworICAgIGlmIChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGly
ZWN0aW9uID09IFNjcm9sbERvd24pIHsKKyAgICAgICAgb3JpZW50YXRpb24gPSBWZXJ0aWNhbFNj
cm9sbGJhcjsKKyAgICAgICAgc2Nyb2xsYmFyID0gdmVydGljYWxTY3JvbGxiYXIoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBvcmllbnRhdGlvbiA9IEhvcml6b250YWxTY3JvbGxiYXI7CisgICAg
ICAgIHNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXIoKTsKKyAgICB9CisKKyAgICBpZiAo
IXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZmxvYXQgc3RlcCA9IDA7
CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgU2Nyb2xsQnlMaW5lOgorICAg
ICAgICBzdGVwID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNjcm9sbEJ5UGFnZToKKyAgICAgICAgc3RlcCA9IHNjcm9sbGJhci0+cGFnZVN0ZXAoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeURvY3VtZW50OgorICAgICAgICBzdGVw
ID0gc2Nyb2xsYmFyLT50b3RhbFNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3Jv
bGxCeVBpeGVsOgorICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT5waXhlbFN0ZXAoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJl
Y3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICAgICAgbXVsdGlwbGllciA9IC1tdWx0aXBsaWVyOwor
CiAgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3ItPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVs
YXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwogfQogCi12b2lkIFNjcm9sbGJhckNsaWVudDo6c2V0
U2Nyb2xsUG9zaXRpb25BbmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBmbG9hdCBwb3MpCit2b2lkIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9s
bEFuaW1hdG9yLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKK30KKwor
dm9pZCBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxv
YXQgeCkKK3sKKyAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludCh4
LCBtX3Njcm9sbEFuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKS55KCkpKTsKK30KKwordm9pZCBT
Y3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeSkK
K3sKKyAgICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChtX3Njcm9s
bEFuaW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKS54KCksIHkpKTsKK30KKwordm9pZCBTY3JvbGxi
YXJDbGllbnQ6OnNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9m
ZnNldCkKIHsKLSAgICBtX3Njcm9sbEFuaW1hdG9yLT5zZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BB
bmltYXRpb24ob3JpZW50YXRpb24sIHBvcyk7CisgICAgLy8gVGVsbCB0aGUgZGVyaXZlZCBjbGFz
cyB0byBzY3JvbGwgaXRzIGNvbnRlbnRzLgorICAgIHNldFNjcm9sbE9mZnNldChvZmZzZXQpOwor
CisgICAgLy8gVGVsbCB0aGUgc2Nyb2xsYmFycyB0byB1cGRhdGUgdGhlaXIgdGh1bWIgcG9zdGlv
bnMuCisgICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHRoaXMtPmhvcml6
b250YWxTY3JvbGxiYXIoKSkKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+b2Zmc2V0RGlk
Q2hhbmdlKCk7CisgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSB0aGlzLT52
ZXJ0aWNhbFNjcm9sbGJhcigpKQorICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+b2Zmc2V0RGlk
Q2hhbmdlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NiwxMyArMjYsMTQgQEAKICNpZm5kZWYgU2Nyb2xsYmFyQ2xpZW50X2gKICNkZWZpbmUgU2Nyb2xs
YmFyQ2xpZW50X2gKIAotI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgUGxhdGZvcm1XaGVl
bEV2ZW50OwogY2xhc3MgU2Nyb2xsQW5pbWF0b3I7CiAKIGNsYXNzIFNjcm9sbGJhckNsaWVudCB7
CkBAIC00MCwxOCArNDEsMjMgQEAgcHVibGljOgogICAgIFNjcm9sbGJhckNsaWVudCgpOwogICAg
IHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpOwogCi0gICAgYm9vbCBzY3JvbGwoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBm
bG9hdCBzdGVwLCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9u
QW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQg
cG9zKTsKKyAgICBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyID0gMSk7CisgICAgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihmbG9hdCB4KTsKKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNldFdpdGhvdXRB
bmltYXRpb24oZmxvYXQgeCk7CiAKLSAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKSA9IDA7CisgICAgdmlydHVhbCBpbnQg
c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
aW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBi
b29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdCA9IDA7Ci0KICAgICB2aXJ0dWFsIHZv
aWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0IHsgfQogCisgICAgLy8gVGhp
cyBmdW5jdGlvbiBzaG91bGQgYmUgb3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMgdG8gcGVyZm9ybSB0
aGUgYWN0dWFsCisgICAgLy8gc2Nyb2xsIG9mIHRoZSBjb250ZW50LgorICAgIHZpcnR1YWwgdm9p
ZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKSA9IDA7CisKKwogICAgIC8vIENvbnZl
cnQgcG9pbnRzIGFuZCByZWN0cyBiZXR3ZWVuIHRoZSBzY3JvbGxiYXIgYW5kIGl0cyBjb250YWlu
aW5nIHZpZXcuCiAgICAgLy8gVGhlIGNsaWVudCBuZWVkcyB0byBpbXBsZW1lbnQgdGhlc2UgaW4g
b3JkZXIgdG8gYmUgYXdhcmUgb2YgbGF5b3V0IGVmZmVjdHMKICAgICAvLyBsaWtlIENTUyB0cmFu
c2Zvcm1zLgpAQCAtNzIsOSArNzgsMTcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UG9pbnQpOwogICAg
IH0KIAorICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KKwogcHJpdmF0ZToKKyAgICAvLyBOT1RFOiBPbmx5IGNhbGxl
ZCBmcm9tIHRoZSBTY3JvbGxBbmltYXRvci4KKyAgICBmcmllbmQgY2xhc3MgU2Nyb2xsQW5pbWF0
b3I7CisgICAgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50
Jik7CisKICAgICBPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0b3I7CiB9Owog
Ci19Ci0jZW5kaWYKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNjcm9sbGJh
ckNsaWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFy
RWZsLmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
U2Nyb2xsYmFyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsMTAgQEAgc3RhdGlj
IHZvaWQgc2Nyb2xsYmFyRWZsRWRqZU1lc3NhZ2Uodm9pZAogCiAgICAgbSA9IHN0YXRpY19jYXN0
PEVkamVfTWVzc2FnZV9GbG9hdCo+KG1zZyk7CiAgICAgdiA9IG0tPnZhbCAqICh0aGF0LT50b3Rh
bFNpemUoKSAtIHRoYXQtPnZpc2libGVTaXplKCkpOwotICAgIHRoYXQtPnNldFZhbHVlKHYsIFNj
cm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBpZiAodGhhdC0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICB0aGF0LT5jbGllbnQoKS0+c2Ny
b2xsVG9YT2Zmc2V0V2l0aG91dEFuaW1hdGlvbih2KTsKKyAgICBlbHNlCisgICAgICAgIHRoYXQt
PmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHYpOwogfQogCiB2b2lk
IFNjcm9sbGJhckVmbDo6c2V0UGFyZW50KFNjcm9sbFZpZXcqIHZpZXcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNw
cAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZy
YW1lU2Nyb2xsYmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKICNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCiAjaW5jbHVk
ZSA8Z3RrL2d0ay5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTEwOCw3ICsxMDks
MTAgQEAgdm9pZCBNYWluRnJhbWVTY3JvbGxiYXJHdGs6OnVwZGF0ZVRodW1iUAogCiB2b2lkIE1h
aW5GcmFtZVNjcm9sbGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBNYWlu
RnJhbWVTY3JvbGxiYXJHdGsqIHRoYXQpCiB7Ci0gICAgdGhhdC0+c2V0VmFsdWUoc3RhdGljX2Nh
c3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50LmdldCgp
KSksIE5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgaWYgKHRoYXQtPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhcikKKyAgICAgICAgdGhhdC0+Y2xpZW50KCktPnNjcm9sbFRv
WE9mZnNldFdpdGhvdXRBbmltYXRpb24oc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9n
ZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50LmdldCgpKSkpOworICAgIGVsc2UKKyAgICAgICAg
dGhhdC0+Y2xpZW50KCktPnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oc3RhdGljX2Nh
c3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50LmdldCgp
KSkpOwogfQogCiB2b2lkIE1haW5GcmFtZVNjcm9sbGJhckd0azo6cGFpbnQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9uIDc2MjczKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShTTU9PVEhfU0NST0xMSU5H
KQogCi0jaW5jbHVkZSAiRmxvYXRQb2ludC5oIgogI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgi
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCkBAIC00NiwxMCArNDUsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB+U2Nyb2xsQW5pbWF0b3JNYWMoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBz
Y3JvbGwoU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBzdGVw
LCBmbG9hdCBtdWx0aXBsaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb25B
bmRTdG9wQW5pbWF0aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uLCBmbG9hdCBwb3NpdGlvbik7Cisg
ICAgdmlydHVhbCB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBGbG9h
dFBvaW50Jik7CiAKICAgICAvLyBDYWxsZWQgYnkgdGhlIFNjcm9sbEFuaW1hdGlvbkhlbHBlckRl
bGVnYXRlLgotICAgIEZsb2F0UG9pbnQgY3VycmVudFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdm9p
ZCBpbW1lZGlhdGVTY3JvbGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKTsK
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmlt
YXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Ny
b2xsQW5pbWF0b3JNYWMubW0JKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsy
Nyw3IEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9MTElORykKIAorI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvck1hYy5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhckNsaWVudC5oIgogCkBAIC0xNjEsMjMgKzE2MiwxNyBAQCBib29sIFNjcm9sbEFuaW1hdG9y
TWFjOjpzY3JvbGwoU2Nyb2xsYmFyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU2Nyb2xs
QW5pbWF0b3JNYWM6OnNldFNjcm9sbFBvc2l0aW9uQW5kU3RvcEFuaW1hdGlvbihTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQgcG9zKQordm9pZCBTY3JvbGxBbmltYXRvck1h
Yzo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNl
dCkKIHsKICAgICBbbV9zY3JvbGxBbmltYXRpb25IZWxwZXIuZ2V0KCkgX3N0b3BSdW5dOwotICAg
IFNjcm9sbEFuaW1hdG9yOjpzZXRTY3JvbGxQb3NpdGlvbkFuZFN0b3BBbmltYXRpb24ob3JpZW50
YXRpb24sIHBvcyk7Ci19Ci0KLUZsb2F0UG9pbnQgU2Nyb2xsQW5pbWF0b3JNYWM6OmN1cnJlbnRQ
b3NpdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQobV9jdXJyZW50UG9zWCwg
bV9jdXJyZW50UG9zWSk7CisgICAgU2Nyb2xsQW5pbWF0b3I6OnNjcm9sbFRvT2Zmc2V0V2l0aG91
dEFuaW1hdGlvbihvZmZzZXQpOwogfQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yTWFjOjppbW1lZGlh
dGVTY3JvbGxUb1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmIG5ld1Bvc2l0aW9uKQogewogICAgIG1f
Y3VycmVudFBvc1ggPSBuZXdQb3NpdGlvbi54KCk7CiAgICAgbV9jdXJyZW50UG9zWSA9IG5ld1Bv
c2l0aW9uLnkoKTsKLQotICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9u
KEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKKyAgICBub3RpdHlQb3Np
dGlvbkNoYW5nZWQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xsYmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9sbGJhclF0LmNwcAkocmV2aXNpb24gNzYyNzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVk
ZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKIAogI2lu
Y2x1ZGUgPFFBcHBsaWNhdGlvbj4KQEAgLTc2LDE3ICs3NywxNyBAQCBib29sIFNjcm9sbGJhcjo6
Y29udGV4dE1lbnUoY29uc3QgUGxhdGZvCiAgICAgICAgIGNvbnN0IFFQb2ludCBwb3MgPSBjb252
ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3coZXZlbnQucG9zKCkpOwogICAgICAgICBtb3ZlVGh1bWIo
aG9yaXpvbnRhbCA/IHBvcy54KCkgOiBwb3MueSgpKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvblNl
bGVjdGVkID09IGFjdFNjcm9sbFRvcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3Jv
bGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICBjbGllbnQoKS0+
c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1l
bnQpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNjcm9sbEJvdHRvbSkKLSAg
ICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9s
bEJ5RG9jdW1lbnQpOworICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3Jv
bGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5RG9jdW1lbnQpOwogICAgIGVsc2UgaWYgKGFj
dGlvblNlbGVjdGVkID09IGFjdFBhZ2VVcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBT
Y3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIGNsaWVudCgpLT5z
Y3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlQYWdlKTsK
ICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBhY3RQYWdlRG93bikKLSAgICAgICAgc2Ny
b2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5UGFnZSk7
CisgICAgICAgIGNsaWVudCgpLT5zY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Ny
b2xsRG93biwgU2Nyb2xsQnlQYWdlKTsKICAgICBlbHNlIGlmIChhY3Rpb25TZWxlY3RlZCA9PSBh
Y3RTY3JvbGxVcCkKLSAgICAgICAgc2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Ny
b2xsVXAsIFNjcm9sbEJ5TGluZSk7CisgICAgICAgIGNsaWVudCgpLT5zY3JvbGwoaG9yaXpvbnRh
bCA/IFNjcm9sbExlZnQgOiBTY3JvbGxVcCwgU2Nyb2xsQnlMaW5lKTsKICAgICBlbHNlIGlmIChh
Y3Rpb25TZWxlY3RlZCA9PSBhY3RTY3JvbGxEb3duKQotICAgICAgICBzY3JvbGwoaG9yaXpvbnRh
bCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lKTsKKyAgICAgICAgY2xp
ZW50KCktPnNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3Jv
bGxCeUxpbmUpOwogI2VuZGlmIC8vIFFUX05PX0NPTlRFWFRNRU5VCiAgICAgcmV0dXJuIHRydWU7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmNw
cAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUG9wdXBN
ZW51V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRvcmNoIE1vYmlsZSBJ
bmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpLgogICoKQEAgLTUzMiwxMiArNTMyLDEyIEBAIGJvb2wgUG9wdXBNZW51
V2luOjpzY3JvbGxUb1JldmVhbFNlbGVjdGkKICAgICBpbnQgaW5kZXggPSBmb2N1c2VkSW5kZXgo
KTsKIAogICAgIGlmIChpbmRleCA8IG1fc2Nyb2xsT2Zmc2V0KSB7Ci0gICAgICAgIG1fc2Nyb2xs
YmFyLT5zZXRWYWx1ZShpbmRleCwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwor
ICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24o
aW5kZXgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBpZiAoaW5kZXggPj0g
bV9zY3JvbGxPZmZzZXQgKyB2aXNpYmxlSXRlbXMoKSkgewotICAgICAgICBtX3Njcm9sbGJhci0+
c2V0VmFsdWUoaW5kZXggLSB2aXNpYmxlSXRlbXMoKSArIDEsIFNjcm9sbGJhcjo6Tm90RnJvbVNj
cm9sbEFuaW1hdG9yKTsKKyAgICAgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRX
aXRob3V0QW5pbWF0aW9uKGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCkBAIC02NzAsMjEgKzY3MCwyMyBAQCBpbnQgUG9wdXBNZW51V2lu
OjpzY3JvbGxTaXplKFNjcm9sbGJhck9yCiAgICAgcmV0dXJuICgob3JpZW50YXRpb24gPT0gVmVy
dGljYWxTY3JvbGxiYXIpICYmIG1fc2Nyb2xsYmFyKSA/IChtX3Njcm9sbGJhci0+dG90YWxTaXpl
KCkgLSBtX3Njcm9sbGJhci0+dmlzaWJsZVNpemUoKSkgOiAwOwogfQogCi12b2lkIFBvcHVwTWVu
dVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0
KQoraW50IFBvcHVwTWVudVdpbjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QKIHsK
LSAgICBpZiAobV9zY3JvbGxiYXIpCi0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShvZmZz
ZXQueSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAgcmV0dXJuIG1fc2Ny
b2xsT2Zmc2V0OworfQorCit2b2lkIFBvcHVwTWVudVdpbjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0
IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgc2Nyb2xsVG8ob2Zmc2V0LnkoKSk7CiB9CiAKLXZv
aWQgUG9wdXBNZW51V2luOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCit2b2lk
IFBvcHVwTWVudVdpbjo6c2Nyb2xsVG8oaW50IG9mZnNldCkKIHsKICAgICBBU1NFUlQobV9zY3Jv
bGxiYXIpOwogCiAgICAgaWYgKCFtX3BvcHVwKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
b2Zmc2V0ID0gc2Nyb2xsQmFyLT52YWx1ZSgpOwotCiAgICAgaWYgKG1fc2Nyb2xsT2Zmc2V0ID09
IG9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCkBAIC05OTEsNyArOTkzLDggQEAgTFJFU1VMVCBQ
b3B1cE1lbnVXaW46OnduZFByb2MoSFdORCBoV25kLAogICAgICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc2Nyb2xs
YmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5l
LCBhYnMoaSkpOworCisgICAgICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChpID4gMCA/
IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lLCBhYnMoaSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2lu
L1BvcHVwTWVudVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9Qb3B1cE1lbnVXaW4uaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUG9wdXBNZW51V2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIHNldFdhc0NsaWNrZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3dhc0Ns
aWNrZWQgPSBiOyB9CiAgICAgYm9vbCB3YXNDbGlja2VkKCkgY29uc3QgeyByZXR1cm4gbV93YXND
bGlja2VkOyB9CiAKLSAgICB2b2lkIHNldFNjcm9sbE9mZnNldChpbnQgb2Zmc2V0KSB7IG1fc2Ny
b2xsT2Zmc2V0ID0gb2Zmc2V0OyB9CiAgICAgaW50IHNjcm9sbE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsT2Zmc2V0OyB9CiAKICAgICBib29sIHNjcm9sbFRvUmV2ZWFsU2VsZWN0aW9u
KCk7CkBAIC05MiwxMSArOTEsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIFNjcm9sbEJhckNsaWVu
dAogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24pIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0
aW9uKGNvbnN0IEludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50Jik7CiAg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgpOyB9CisKKyAgICAvLyBOT1RFOiBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNl
dCBmcm9tIFNjcm9sbGJhckNsaWVudC4KKyAgICB2b2lkIHNjcm9sbFRvKGludCBvZmZzZXQpOwog
CiAgICAgdm9pZCBjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUoY29uc3QgSW50UmVjdCYsIEZyYW1l
VmlldyopOwogICAgIHZvaWQgaW52YWxpZGF0ZUl0ZW0oaW50IGluZGV4KTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzA2LDIzICsxMzA2LDM2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbEJ5UmVjdXJzaXZl
bHkoaW4KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4
LCBpbnQgeSwgYm9vbCB1cGRhdGVTY3JvbGxiYXJzLCBib29sIHJlcGFpbnQpCit2b2lkIFJlbmRl
ckxheWVyOjpzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHkpCit7CisgICAgU2Nyb2xsYmFyQ2xp
ZW50OjpzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oSW50UG9pbnQoeCwgeSkpOworfQor
Cit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUbyhpbnQgeCwgaW50IHkpCiB7CiAgICAgUmVuZGVy
Qm94KiBib3ggPSByZW5kZXJCb3goKTsKICAgICBpZiAoIWJveCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGJveC0+c3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUpIHsKLSAgICAg
ICAgaWYgKHggPCAwKSB4ID0gMDsKLSAgICAgICAgaWYgKHkgPCAwKSB5ID0gMDsKKyAgICAgICAg
aWYgKHggPCAwKQorICAgICAgICAgICAgeCA9IDA7CisgICAgICAgIGlmICh5IDwgMCkKKyAgICAg
ICAgICAgIHkgPSAwOwogICAgIAogICAgICAgICAvLyBDYWxsIHRoZSBzY3JvbGxXaWR0aC9IZWln
aHQgZnVuY3Rpb25zIHNvIHRoYXQgdGhlIGRpbWVuc2lvbnMgd2lsbCBiZSBjb21wdXRlZCBpZiB0
aGV5IG5lZWQKICAgICAgICAgLy8gdG8gYmUgKGZvciBvdmVyZmxvdzpoaWRkZW4gYmxvY2tzKS4K
ICAgICAgICAgaW50IG1heFggPSBzY3JvbGxXaWR0aCgpIC0gYm94LT5jbGllbnRXaWR0aCgpOwor
ICAgICAgICBpZiAobWF4WCA8IDApCisgICAgICAgICAgICBtYXhYID0gMDsKICAgICAgICAgaW50
IG1heFkgPSBzY3JvbGxIZWlnaHQoKSAtIGJveC0+Y2xpZW50SGVpZ2h0KCk7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoeCA+IG1heFgpIHggPSBtYXhYOwotICAgICAgICBpZiAoeSA+IG1heFkpIHkg
PSBtYXhZOworICAgICAgICBpZiAobWF4WSA8IDApCisgICAgICAgICAgICBtYXhZID0gMDsKKwor
ICAgICAgICBpZiAoeCA+IG1heFgpCisgICAgICAgICAgICB4ID0gbWF4WDsKKyAgICAgICAgaWYg
KHkgPiBtYXhZKQorICAgICAgICAgICAgeSA9IG1heFk7CiAgICAgfQogICAgIAogICAgIC8vIEZJ
WE1FOiBFdmVudHVhbGx5LCB3ZSB3aWxsIHdhbnQgdG8gcGVyZm9ybSBhIGJsaXQuICBGb3Igbm93
IG5ldmVyCkBAIC0xMzg2LDE2ICsxMzk5LDkgQEAgdm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9P
ZmZzZXQoaW50IHgsIAogICAgIH0KIAogICAgIC8vIEp1c3Qgc2NoZWR1bGUgYSBmdWxsIHJlcGFp
bnQgb2Ygb3VyIG9iamVjdC4KLSAgICBpZiAodmlldyAmJiByZXBhaW50KQorICAgIGlmICh2aWV3
KQogICAgICAgICByZW5kZXJlcigpLT5yZXBhaW50VXNpbmdDb250YWluZXIocmVwYWludENvbnRh
aW5lciwgcmVjdEZvclJlcGFpbnQpOwogCi0gICAgaWYgKHVwZGF0ZVNjcm9sbGJhcnMpIHsKLSAg
ICAgICAgaWYgKG1faEJhcikKLSAgICAgICAgICAgIG1faEJhci0+c2V0VmFsdWUoc2Nyb2xsWE9m
ZnNldCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7Ci0gICAgICAgIGlmICht
X3ZCYXIpCi0gICAgICAgICAgICBtX3ZCYXItPnNldFZhbHVlKG1fc2Nyb2xsWSwgU2Nyb2xsYmFy
OjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwotICAgIH0KLQogICAgIC8vIFNjaGVkdWxlIHRoZSBz
Y3JvbGwgRE9NIGV2ZW50LgogICAgIHJlbmRlcmVyKCktPm5vZGUoKS0+ZG9jdW1lbnQoKS0+ZXZl
bnRRdWV1ZSgpLT5lbnF1ZXVlU2Nyb2xsRXZlbnQocmVuZGVyZXIoKS0+bm9kZSgpLCBFdmVudFF1
ZXVlOjpTY3JvbGxFdmVudEVsZW1lbnRUYXJnZXQpOwogfQpAQCAtMTY0OSwzNiArMTY1NSwxOCBA
QCBpbnQgUmVuZGVyTGF5ZXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpCiAgICAgcmV0dXJuIHNj
cm9sbGJhciA/IChzY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6
ZSgpKSA6IDA7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9sbE9mZnNldEZyb21Bbmlt
YXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKK3ZvaWQgUmVuZGVyTGF5ZXI6OnNldFNjcm9s
bE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewotICAgIGlmIChtX2hCYXIpCi0gICAg
ICAgIG1faEJhci0+c2V0VmFsdWUob2Zmc2V0LngoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5p
bWF0b3IpOwotICAgIGlmIChtX3ZCYXIpCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUob2Zmc2V0
LnkoKSwgU2Nyb2xsYmFyOjpGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIHNjcm9sbFRvKG9mZnNl
dC54KCksIG9mZnNldC55KCkpOwogfQogCi12b2lkIFJlbmRlckxheWVyOjp2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKikKK2ludCBSZW5kZXJMYXllcjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpIGNvbnN0CiB7Ci0gICAgLy8gVXBkYXRlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHNj
cm9sbGJhcnMuCi0KLSAgICBib29sIG5lZWRVcGRhdGUgPSBmYWxzZTsKLSAgICBpbnQgbmV3WCA9
IHNjcm9sbFhPZmZzZXQoKTsKLSAgICBpbnQgbmV3WSA9IG1fc2Nyb2xsWTsKLSAgICAKLSAgICBp
ZiAobV9oQmFyKSB7Ci0gICAgICAgIG5ld1ggPSBtX2hCYXItPnZhbHVlKCk7Ci0gICAgICAgIGlm
IChuZXdYICE9IHNjcm9sbFhPZmZzZXQoKSkKLSAgICAgICAgICAgbmVlZFVwZGF0ZSA9IHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKG1fdkJhcikgewotICAgICAgICBuZXdZID0gbV92QmFyLT52YWx1
ZSgpOwotICAgICAgICBpZiAobmV3WSAhPSBtX3Njcm9sbFkpCi0gICAgICAgICAgIG5lZWRVcGRh
dGUgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChuZWVkVXBkYXRlKQotICAgICAgICBzY3JvbGxU
b09mZnNldChuZXdYLCBuZXdZLCBmYWxzZSk7CisgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQorICAgICAgICByZXR1cm4gc2Nyb2xsWE9mZnNl
dCgpOworICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxi
YXIpCisgICAgICAgIHJldHVybiBtX3Njcm9sbFk7CisgICAgcmV0dXJuIDA7CiB9CiAKIGJvb2wg
UmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKQEAgLTE2ODcsNyArMTY3NSw2IEBAIGJvb2wg
UmVuZGVyTGF5ZXI6OmlzQWN0aXZlKCkgY29uc3QKICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+aXNBY3RpdmUoKTsKIH0KIAotCiBzdGF0aWMgSW50UmVjdCBjb3Ju
ZXJSZWN0KGNvbnN0IFJlbmRlckxheWVyKiBsYXllciwgY29uc3QgSW50UmVjdCYgYm91bmRzKQog
ewogICAgIGludCBob3Jpem9udGFsVGhpY2tuZXNzOwpAQCAtMjAzMSw4ICsyMDE4LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlT3ZlcmZsb3dTdGF0dXMoYgogICAgIH0KIH0KIAotdm9pZAot
UmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRlckxheW91dCgpCit2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQoKQogewogICAgIFJlbmRlckJveCogYm94
ID0gcmVuZGVyQm94KCk7CiAgICAgaWYgKCFib3gpCkBAIC0yMTI0LDI4ICsyMTEwLDE2IEBAIFJl
bmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMYXlvdXQKICAgICAgICAgaW50IHBhZ2VT
dGVwID0gbWF4KG1heDxpbnQ+KGNsaWVudFdpZHRoICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRv
U3RlcFdoZW5QYWdpbmcoKSwgY2xpZW50V2lkdGggLSBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3
ZWVuUGFnZXMoKSksIDEpOwogICAgICAgICBtX2hCYXItPnNldFN0ZXBzKFNjcm9sbGJhcjo6cGl4
ZWxzUGVyTGluZVN0ZXAoKSwgcGFnZVN0ZXApOwogICAgICAgICBtX2hCYXItPnNldFByb3BvcnRp
b24oY2xpZW50V2lkdGgsIG1fc2Nyb2xsV2lkdGgpOwotICAgICAgICAvLyBFeHBsaWNpdGx5IHNl
dCB0aGUgaG9yaXpvbnRhbCBzY3JvbGwgdmFsdWUuICBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIGEK
LSAgICAgICAgLy8gcmlnaHQtdG8tbGVmdCBzY3JvbGxhYmxlIGFyZWEncyB3aWR0aCAob3IgY29u
dGVudCB3aWR0aCkgY2hhbmdlcywgdGhlCi0gICAgICAgIC8vIHRvcCByaWdodCBjb3JuZXIgb2Yg
dGhlIGNvbnRlbnQgZG9lc24ndCBzaGlmdCB3aXRoIHJlc3BlY3QgdG8gdGhlIHRvcAotICAgICAg
ICAvLyByaWdodCBjb3JuZXIgb2YgdGhlIGFyZWEuIENvbmNlcHR1YWxseSwgcmlnaHQtdG8tbGVm
dCBhcmVhcyBoYXZlCi0gICAgICAgIC8vIHRoZWlyIG9yaWdpbiBhdCB0aGUgdG9wLXJpZ2h0LCBi
dXQgUmVuZGVyTGF5ZXIgaXMgdG9wLWxlZnQgb3JpZW50ZWQsCi0gICAgICAgIC8vIHNvIHRoaXMg
aXMgbmVlZGVkIHRvIGtlZXAgZXZlcnl0aGluZyB3b3JraW5nLgotICAgICAgICBtX2hCYXItPnNl
dFZhbHVlKHNjcm9sbFhPZmZzZXQoKSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3Ip
OwogICAgIH0KICAgICBpZiAobV92QmFyKSB7CiAgICAgICAgIGludCBjbGllbnRIZWlnaHQgPSBi
b3gtPmNsaWVudEhlaWdodCgpOwogICAgICAgICBpbnQgcGFnZVN0ZXAgPSBtYXgobWF4PGludD4o
Y2xpZW50SGVpZ2h0ICogU2Nyb2xsYmFyOjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwg
Y2xpZW50SGVpZ2h0IC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpLCAxKTsK
ICAgICAgICAgbV92QmFyLT5zZXRTdGVwcyhTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVTdGVwKCks
IHBhZ2VTdGVwKTsKICAgICAgICAgbV92QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwg
bV9zY3JvbGxIZWlnaHQpOwotICAgICAgICAvLyBFeHBsaWNpdGx5IHNldCB0aGUgdmVydGljYWwg
c2Nyb2xsIHZhbHVlLiAgVGhpcyBlbnN1cmVzIHRoYXQgd2hlbiBhCi0gICAgICAgIC8vIHJpZ2h0
LXRvLWxlZnQgdmVydGljYWwgd3JpdGluZy1tb2RlIHNjcm9sbGFibGUgYXJlYSdzIGhlaWdodCAo
b3IgY29udGVudCBoZWlnaHQpIGNoYW5nZXMsIHRoZQotICAgICAgICAvLyBib3R0b20gcmlnaHQg
Y29ybmVyIG9mIHRoZSBjb250ZW50IGRvZXNuJ3Qgc2hpZnQgd2l0aCByZXNwZWN0IHRvIHRoZSBi
b3R0b20KLSAgICAgICAgLy8gcmlnaHQgY29ybmVyIG9mIHRoZSBhcmVhLiBDb25jZXB0dWFsbHks
IHJpZ2h0LXRvLWxlZnQgdmVydGljYWwgd3JpdGluZy1tb2RlIGFyZWFzIGhhdmUKLSAgICAgICAg
Ly8gdGhlaXIgb3JpZ2luIGF0IHRoZSBib3R0b20tcmlnaHQsIGJ1dCBSZW5kZXJMYXllciBpcyB0
b3AtbGVmdCBvcmllbnRlZCwKLSAgICAgICAgLy8gc28gdGhpcyBpcyBuZWVkZWQgdG8ga2VlcCBl
dmVyeXRoaW5nIHdvcmtpbmcuCi0gICAgICAgIG1fdkJhci0+c2V0VmFsdWUoc2Nyb2xsWU9mZnNl
dCgpLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CiAgICAgfQogIAorICAgIHNj
cm9sbFRvT2Zmc2V0KHNjcm9sbFhPZmZzZXQoKSwgc2Nyb2xsWU9mZnNldCgpKTsKKyAKICAgICBp
ZiAocmVuZGVyZXIoKS0+bm9kZSgpICYmIHJlbmRlcmVyKCktPmRvY3VtZW50KCktPmhhc0xpc3Rl
bmVyVHlwZShEb2N1bWVudDo6T1ZFUkZMT1dDSEFOR0VEX0xJU1RFTkVSKSkKICAgICAgICAgdXBk
YXRlT3ZlcmZsb3dTdGF0dXMoaG9yaXpvbnRhbE92ZXJmbG93LCB2ZXJ0aWNhbE92ZXJmbG93KTsK
IH0KQEAgLTIzMDAsMTUgKzIyNzQsNyBAQCBib29sIFJlbmRlckxheWVyOjpoaXRUZXN0T3ZlcmZs
b3dDb250cm9sCiAKIGJvb2wgUmVuZGVyTGF5ZXI6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikK
IHsKLSAgICBib29sIGRpZEhvcml6b250YWxTY3JvbGwgPSBmYWxzZTsKLSAgICBib29sIGRpZFZl
cnRpY2FsU2Nyb2xsID0gZmFsc2U7Ci0KLSAgICBpZiAobV9oQmFyKQotICAgICAgICBkaWRIb3Jp
em9udGFsU2Nyb2xsID0gbV9oQmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVs
dGlwbGllcik7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgZGlkVmVydGljYWxTY3JvbGwgPSBt
X3ZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKLQotICAg
IHJldHVybiAoZGlkSG9yaXpvbnRhbFNjcm9sbCB8fCBkaWRWZXJ0aWNhbFNjcm9sbCk7CisgICAg
cmV0dXJuIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11
bHRpcGxpZXIpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpwYWludChHcmFwaGljc0NvbnRleHQq
IHAsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlv
ciwgUmVuZGVyT2JqZWN0ICpwYWludGluZ1Jvb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuaAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHB1
YmxpYzoKICAgICBpbnQgc2Nyb2xsWE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsWCAr
IG1fc2Nyb2xsT3JpZ2luLngoKTsgfQogICAgIGludCBzY3JvbGxZT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zY3JvbGxZICsgbV9zY3JvbGxPcmlnaW4ueSgpOyB9CiAKLSAgICB2b2lkIHNjcm9s
bFRvT2Zmc2V0KGludCB4LCBpbnQgeSwgYm9vbCB1cGRhdGVTY3JvbGxiYXJzID0gdHJ1ZSwgYm9v
bCByZXBhaW50ID0gdHJ1ZSk7CisgICAgdm9pZCBzY3JvbGxUb09mZnNldChpbnQgeCwgaW50IHkp
OwogICAgIHZvaWQgc2Nyb2xsVG9YT2Zmc2V0KGludCB4KSB7IHNjcm9sbFRvT2Zmc2V0KHgsIG1f
c2Nyb2xsWSArIG1fc2Nyb2xsT3JpZ2luLnkoKSk7IH0KICAgICB2b2lkIHNjcm9sbFRvWU9mZnNl
dChpbnQgeSkgeyBzY3JvbGxUb09mZnNldChtX3Njcm9sbFggKyBtX3Njcm9sbE9yaWdpbi54KCks
IHkpOyB9CiAgICAgdm9pZCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IEludFJlY3QmLCBib29s
IHNjcm9sbFRvQW5jaG9yID0gZmFsc2UsIGNvbnN0IFNjcm9sbEFsaWdubWVudCYgYWxpZ25YID0g
U2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkLCBjb25zdCBTY3JvbGxBbGlnbm1l
bnQmIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZCk7CkBAIC01
MTUsOCArNTE1LDggQEAgcHJpdmF0ZToKIAogICAgIC8vIFNjcm9sbEJhckNsaWVudCBpbnRlcmZh
Y2UKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1h
dGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQoU2Ny
b2xsYmFyKik7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2lu
dCYpOworICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25z
dCBJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdDsKQEAgLTUyNCw3ICs1MjQs
MTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEludFJlY3QgY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsK
ICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmll
dyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwg
SW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9s
bGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7Ci0gICAgCisKKyAgICAvLyBOT1RFOiBUaGlz
IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBm
cm9tIFNjcm9sbGJhckNsaWVudC4KKyAgICB2b2lkIHNjcm9sbFRvKGludCB4LCBpbnQgeSk7CisK
ICAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxiYXIqKSBjb25zdDsKICAg
ICAKICAgICB2b2lkIHVwZGF0ZU92ZXJmbG93U3RhdHVzKGJvb2wgaG9yaXpvbnRhbE92ZXJmbG93
LCBib29sIHZlcnRpY2FsT3ZlcmZsb3cpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NSw5ICs0OTUs
NyBAQCBib29sIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2ZWFsRWxlbWVuCiAgICAgZWxzZQog
ICAgICAgICBuZXdPZmZzZXQgPSBpbmRleCAtIG51bVZpc2libGVJdGVtcygpICsgMTsKIAotICAg
IG1faW5kZXhPZmZzZXQgPSBuZXdPZmZzZXQ7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92
QmFyLT5zZXRWYWx1ZShtX2luZGV4T2Zmc2V0LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmlt
YXRvcik7CisgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKG5ld09mZnNldCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTUwOSwxMiArNTA3LDEy
IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6bGlzdEluZGV4SXNWaXNpYmxlKGkKIAogYm9vbCBSZW5k
ZXJMaXN0Qm94OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxpZXIsIE5vZGUqKikKIHsKLSAgICByZXR1
cm4gbV92QmFyICYmIG1fdkJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRp
cGxpZXIpOworICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpsb2dpY2Fs
U2Nyb2xsKFNjcm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0
eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllciwgTm9kZSoqKQogewotICAgIHJldHVybiBt
X3ZCYXIgJiYgbV92QmFyLT5zY3JvbGwobG9naWNhbFRvUGh5c2ljYWwoZGlyZWN0aW9uLCBzdHls
ZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpLCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpKSwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgIHJldHVybiBTY3Jv
bGxiYXJDbGllbnQ6OnNjcm9sbChsb2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCkt
PmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkpLCBncmFudWxhcml0eSwgbXVsdGlwbGllcik7CiB9CiAKIHZvaWQgUmVuZGVyTGlz
dEJveDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCkKQEAgLTUzMCwyMCArNTI4LDI0
IEBAIGludCBSZW5kZXJMaXN0Qm94OjpzY3JvbGxTaXplKFNjcm9sbGJhck8KICAgICByZXR1cm4g
KChvcmllbnRhdGlvbiA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgJiYgbV92QmFyKSA/IChtX3ZCYXIt
PnRvdGFsU2l6ZSgpIC0gbV92QmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CiB9CiAKLXZvaWQgUmVu
ZGVyTGlzdEJveDo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYg
b2Zmc2V0KQoraW50IFJlbmRlckxpc3RCb3g6OnNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNv
bnN0CiB7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShvZmZzZXQu
eSgpLCBTY3JvbGxiYXI6OkZyb21TY3JvbGxBbmltYXRvcik7CisgICAgcmV0dXJuIG1faW5kZXhP
ZmZzZXQ7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciop
Cit2b2lkIFJlbmRlckxpc3RCb3g6OnNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQogewotICAgIGludCBuZXdPZmZzZXQgPSBtX3ZCYXItPnZhbHVlKCk7Ci0gICAgaWYgKG5l
d09mZnNldCAhPSBtX2luZGV4T2Zmc2V0KSB7Ci0gICAgICAgIG1faW5kZXhPZmZzZXQgPSBuZXdP
ZmZzZXQ7Ci0gICAgICAgIHJlcGFpbnQoKTsKLSAgICAgICAgbm9kZSgpLT5kb2N1bWVudCgpLT5l
dmVudFF1ZXVlKCktPmVucXVldWVTY3JvbGxFdmVudChub2RlKCksIEV2ZW50UXVldWU6OlNjcm9s
bEV2ZW50RWxlbWVudFRhcmdldCk7Ci0gICAgfQorICAgIHNjcm9sbFRvKG9mZnNldC55KCkpOwor
fQorCit2b2lkIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvKGludCBuZXdPZmZzZXQpCit7CisgICAg
aWYgKG5ld09mZnNldCA9PSBtX2luZGV4T2Zmc2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2luZGV4T2Zmc2V0ID0gbmV3T2Zmc2V0OworICAgIHJlcGFpbnQoKTsKKyAgICBub2RlKCktPmRv
Y3VtZW50KCktPmV2ZW50UXVldWUoKS0+ZW5xdWV1ZVNjcm9sbEV2ZW50KG5vZGUoKSwgRXZlbnRR
dWV1ZTo6U2Nyb2xsRXZlbnRFbGVtZW50VGFyZ2V0KTsKIH0KIAogaW50IFJlbmRlckxpc3RCb3g6
Oml0ZW1IZWlnaHQoKSBjb25zdApAQCAtNTg5LDkgKzU5MSw4IEBAIHZvaWQgUmVuZGVyTGlzdEJv
eDo6c2V0U2Nyb2xsVG9wKGludCBuZXcKICAgICBpbnQgaW5kZXggPSBuZXdUb3AgLyBpdGVtSGVp
Z2h0KCk7CiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBudW1JdGVtcygpIHx8IGluZGV4
ID09IG1faW5kZXhPZmZzZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2luZGV4T2Zmc2V0ID0g
aW5kZXg7Ci0gICAgaWYgKG1fdkJhcikKLSAgICAgICAgbV92QmFyLT5zZXRWYWx1ZShpbmRleCwg
U2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOworICAgIAorICAgIFNjcm9sbGJhckNs
aWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCk7CiB9CiAKIGJvb2wg
UmVuZGVyTGlzdEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0
VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdEJveC5oCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDggKzk2LDggQEAgcHJp
dmF0ZToKIAogICAgIC8vIFNjcm9sbGJhckNsaWVudCBpbnRlcmZhY2UuCiAgICAgdmlydHVhbCBp
bnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9p
bnQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIHZp
cnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJhciopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQg
aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoU2Nyb2xsYmFyKiwgY29uc3QgSW50UmVjdCYpOwogICAg
IHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBzY3JvbGxi
YXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0gLy8gV2UgZG9uJ3Qgc3Vw
cG9ydCByZXNpemUgb24gbGlzdCBib3hlcyB5ZXQuICBJZiB3ZSBkaWQgdGhpcyB3b3VsZCBoYXZl
IHRvIGNoYW5nZS4KQEAgLTEwNSw2ICsxMDUsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIElu
dFJlY3QgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJh
ciosIGNvbnN0IEludFJlY3QmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5n
Vmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciosIGNvbnN0IEludFBvaW50JikgY29uc3Q7
CisgICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1
cm4gbV92QmFyLmdldCgpOyB9CisKKyAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNldCBmcm9tIFNjcm9sbGJhckNsaWVu
dC4KKyAgICB2b2lkIHNjcm9sbFRvKGludCBuZXdPZmZzZXQpOwogCiAgICAgdm9pZCBzZXRIYXNW
ZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc1Njcm9sbGJhcik7CiAgICAgUGFzc1JlZlB0cjxTY3Jv
bGxiYXI+IGNyZWF0ZVNjcm9sbGJhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1hcnF1ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNYXJxdWVlLmNwcAkocmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWFycXVlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw5ICsxNzEs
OSBAQCB2b2lkIFJlbmRlck1hcnF1ZWU6OnN0YXJ0KCkKIAogICAgIGlmICghbV9zdXNwZW5kZWQg
JiYgIW1fc3RvcHBlZCkgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAg
ICBtX2xheWVyLT5zY3JvbGxUb09mZnNldChtX3N0YXJ0LCAwLCBmYWxzZSwgZmFsc2UpOworICAg
ICAgICAgICAgbV9sYXllci0+c2Nyb2xsVG9PZmZzZXQobV9zdGFydCwgMCk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fbGF5ZXItPnNjcm9sbFRvT2Zmc2V0KDAsIG1fc3RhcnQsIGZhbHNl
LCBmYWxzZSk7CisgICAgICAgICAgICBtX2xheWVyLT5zY3JvbGxUb09mZnNldCgwLCBtX3N0YXJ0
KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDExLTAxLTIwICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ2xlYW51cCBTY3JvbGxiYXIvU2Nyb2xsYmFyQ2xpZW50IHJlbGF0aW9uc2hpcAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3NzkKKwor
ICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2V0U2Nyb2xsT2Zmc2V0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46OnNjcm9sbFRvKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUG9wdXBNZW51UHJveHlXaW46Om9uTW91c2VXaGVlbCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUb1JldmVhbFNlbGVjdGlvbik6CisgICAg
ICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6dmVydGljYWxTY3JvbGxiYXIpOgorCiAyMDExLTAx
LTIwICBLZXZpbiBEZWNrZXIgIDxrZGVja2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2lu
L1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAkocmV2aXNpb24gNzYyNzMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDM5LDIxICs0MzksMjMgQEAgaW50IFdlYlBvcHVwTWVudVByb3h5
V2luOjpzY3JvbGxTaXplKFNjcgogICAgIHJldHVybiAoKG9yaWVudGF0aW9uID09IFZlcnRpY2Fs
U2Nyb2xsYmFyKSAmJiBtX3Njcm9sbGJhcikgPyAobV9zY3JvbGxiYXItPnRvdGFsU2l6ZSgpIC0g
bV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9pZCBXZWJQb3B1cE1lbnVQ
cm94eVdpbjo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zm
c2V0KQoraW50IFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIq
KSBjb25zdAogewotICAgIGlmIChtX3Njcm9sbGJhcikKLSAgICAgICAgbV9zY3JvbGxiYXItPnNl
dFZhbHVlKG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBy
ZXR1cm4gbV9zY3JvbGxPZmZzZXQ7Cit9CisKK3ZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OnNl
dFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoreworICAgIHNjcm9sbFRvKG9m
ZnNldC55KCkpOwogfQogCi12b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjp2YWx1ZUNoYW5nZWQo
U2Nyb2xsYmFyKiBzY3JvbGxCYXIpCit2b2lkIFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxU
byhpbnQgb2Zmc2V0KQogewogICAgIEFTU0VSVChtX3Njcm9sbGJhcik7CiAKICAgICBpZiAoIW1f
cG9wdXApCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBvZmZzZXQgPSBzY3JvbGxCYXItPnZh
bHVlKCk7Ci0KICAgICBpZiAobV9zY3JvbGxPZmZzZXQgPT0gb2Zmc2V0KQogICAgICAgICByZXR1
cm47CiAKQEAgLTcyMCw3ICs3MjIsOCBAQCBMUkVTVUxUIFdlYlBvcHVwTWVudVByb3h5V2luOjpv
bk1vdXNlV2hlCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIC0taTsKICAgICB9Ci0gICAgc2Ny
b2xsYmFyKCktPnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlM
aW5lLCBhYnMoaSkpOworCisgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoaSA+IDAgPyBTY3Jv
bGxVcCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5TGluZSwgYWJzKGkpKTsKICAgICByZXR1cm4gMDsK
IH0KIApAQCAtOTIyLDEyICs5MjUsMTIgQEAgYm9vbCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Ny
b2xsVG9SZXZlYQogICAgIGludCBpbmRleCA9IGZvY3VzZWRJbmRleCgpOwogCiAgICAgaWYgKGlu
ZGV4IDwgbV9zY3JvbGxPZmZzZXQpIHsKLSAgICAgICAgbV9zY3JvbGxiYXItPnNldFZhbHVlKGlu
ZGV4LCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisgICAgICAgIFNjcm9sbGJh
ckNsaWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChpbmRleCA+PSBtX3Njcm9sbE9mZnNldCAr
IHZpc2libGVJdGVtcygpKSB7Ci0gICAgICAgIG1fc2Nyb2xsYmFyLT5zZXRWYWx1ZShpbmRleCAt
IHZpc2libGVJdGVtcygpICsgMSwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0b3IpOwor
ICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24o
aW5kZXggLSB2aXNpYmxlSXRlbXMoKSArIDEpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlX
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVw
TWVudVByb3h5V2luLmgJKHJldmlzaW9uIDc2MjczKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMSAr
NjAsMTUgQEAgcHJpdmF0ZToKIAogICAgIC8vIFNjcm9sbEJhckNsaWVudAogICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24p
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNv
bnN0IFdlYkNvcmU6OkludFBvaW50Jik7Ci0gICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChX
ZWJDb3JlOjpTY3JvbGxiYXIqKTsKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihXZWJD
b3JlOjpTY3JvbGxiYXIqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVT
Y3JvbGxiYXJSZWN0KFdlYkNvcmU6OlNjcm9sbGJhciosIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
KTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgV2ViQ29yZTo6U2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJh
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsYmFyLmdldCgpOyB9CisKKyAgICAvLyBOT1RFOiBU
aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBieSB0aGUgb3ZlcnJpZGVuIHNldFNjcm9sbE9mZnNl
dCBmcm9tIFNjcm9sbGJhckNsaWVudC4KKyAgICB2b2lkIHNjcm9sbFRvKGludCBvZmZzZXQpOwog
CiAgICAgc3RhdGljIGJvb2wgcmVnaXN0ZXJXaW5kb3dDbGFzcygpOwogICAgIHN0YXRpYyBMUkVT
VUxUIENBTExCQUNLIFdlYlBvcHVwTWVudVByb3h5V25kUHJvYyhIV05ELCBVSU5ULCBXUEFSQU0s
IExQQVJBTSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzYyNzMp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIzIEBACisyMDExLTAxLTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW51cCBT
Y3JvbGxiYXIvU2Nyb2xsYmFyQ2xpZW50IHJlbGF0aW9uc2hpcAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3NzkKKworICAgICAgICAqIHNyYy9XZWJT
Y3JvbGxiYXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6V2Vi
U2Nyb2xsYmFySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnZhbHVl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlRG93bik6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9s
bGJhckltcGw6Om9uTW91c2VNb3ZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1w
bDo6b25Nb3VzZVdoZWVsKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6b25L
ZXlEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsUG9zaXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXQp
OgorICAgICAgICAqIHNyYy9XZWJTY3JvbGxiYXJJbXBsLmg6CisKIDIwMTAtMTItMTQgIFl1cnkg
U2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJh
ckltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNj
cm9sbGJhckltcGwuY3BwCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNjcm9sbGJhckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw3
IEBAIGludCBXZWJTY3JvbGxiYXI6OmRlZmF1bHRUaGlja25lc3MoKQogCiBXZWJTY3JvbGxiYXJJ
bXBsOjpXZWJTY3JvbGxiYXJJbXBsKFdlYlNjcm9sbGJhckNsaWVudCogY2xpZW50LCBPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikKICAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAsIG1fc2Nyb2xs
T2Zmc2V0KDApCiB7CiAgICAgbV9zY3JvbGxiYXIgPSBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNj
cm9sbGJhcigKICAgICAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyQ2xpZW50Kj4odGhpcyksCkBA
IC04OSwxMiArOTAsMTUgQEAgdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRMb2NhdGlvbihjb25z
dAogCiBpbnQgV2ViU2Nyb2xsYmFySW1wbDo6dmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBt
X3Njcm9sbGJhci0+dmFsdWUoKTsKKyAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQ7CiB9CiAKIHZv
aWQgV2ViU2Nyb2xsYmFySW1wbDo6c2V0VmFsdWUoaW50IHBvc2l0aW9uKQogewotICAgIG1fc2Ny
b2xsYmFyLT5zZXRWYWx1ZShwb3NpdGlvbiwgU2Nyb2xsYmFyOjpOb3RGcm9tU2Nyb2xsQW5pbWF0
b3IpOworICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyKQorICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWE9mZnNl
dFdpdGhvdXRBbmltYXRpb24ocG9zaXRpb24pOworICAgIGVsc2UKKyAgICAgICAgV2ViQ29yZTo6
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHBvc2l0aW9u
KTsKIH0KIAogdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXREb2N1bWVudFNpemUoaW50IHNpemUp
CkBAIC0xMTIsNyArMTE2LDggQEAgdm9pZCBXZWJTY3JvbGxiYXJJbXBsOjpzY3JvbGwoU2Nyb2xs
RGlyZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3du
OwogICAgIGVsc2UKICAgICAgICAgZGlyID0gaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3Jv
bGxVcDsKLSAgICBtX3Njcm9sbGJhci0+c2Nyb2xsKGRpciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwgbXVsdGlwbGllcik7CisKKyAgICBXZWJD
b3JlOjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlNj
cm9sbEdyYW51bGFyaXR5PihncmFudWxhcml0eSksIG11bHRpcGxpZXIpOwogfQogCiB2b2lkIFdl
YlNjcm9sbGJhckltcGw6OnBhaW50KFdlYkNhbnZhcyogY2FudmFzLCBjb25zdCBXZWJSZWN0JiBy
ZWN0KQpAQCAtMTY3LDExICsxNzIsMTEgQEAgYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNl
RG93bihjb25zdAogICAgIGlmICghbV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1v
dXNlZG93bi54LCBtb3VzZWRvd24ueSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgbW91c2Vkb3duLnggLT0gbV9zY3JvbGxiYXItPngoKTsKLSAgICAgICAgICAgIG1vdXNl
ZG93bi55IC09IG1fc2Nyb2xsYmFyLT55KCk7Ci0gICAgICAgICAgICBtX3Njcm9sbGJhci0+bW91
c2VEb3duKFBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXIobV9zY3JvbGxiYXIuZ2V0KCksIG1vdXNl
ZG93bikpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KKyAgICBtb3VzZWRv
d24ueCAtPSBtX3Njcm9sbGJhci0+eCgpOworICAgIG1vdXNlZG93bi55IC09IG1fc2Nyb2xsYmFy
LT55KCk7CisgICAgbV9zY3JvbGxiYXItPm1vdXNlRG93bihQbGF0Zm9ybU1vdXNlRXZlbnRCdWls
ZGVyKG1fc2Nyb2xsYmFyLmdldCgpLCBtb3VzZWRvd24pKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
IAogYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlVXAoY29uc3QgV2ViSW5wdXRFdmVudCYg
ZXZlbnQpCiB7CkBAIC0xODMsMTYgKzE4OCwxNiBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6Om9u
TW91c2VVcChjb25zdCBXCiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25Nb3VzZU1vdmUoY29u
c3QgV2ViSW5wdXRFdmVudCYgZXZlbnQpCiB7Ci0gICAgICAgIFdlYk1vdXNlRXZlbnQgbW91c2Vt
b3ZlID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlRXZlbnQqPigmZXZlbnQpOwotICAgICAg
ICBpZiAobV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlbW92ZS54LCBtb3Vz
ZW1vdmUueSkKLSAgICAgICAgICAgIHx8IG1fc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpICE9IE5v
UGFydCkgewotICAgICAgICAgICAgbW91c2Vtb3ZlLnggLT0gbV9zY3JvbGxiYXItPngoKTsKLSAg
ICAgICAgICAgIG1vdXNlbW92ZS55IC09IG1fc2Nyb2xsYmFyLT55KCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9zY3JvbGxiYXItPm1vdXNlTW92ZWQoUGxhdGZvcm1Nb3VzZUV2ZW50QnVpbGRlciht
X3Njcm9sbGJhci5nZXQoKSwgbW91c2Vtb3ZlKSk7Ci0gICAgICAgIH0KKyAgICBXZWJNb3VzZUV2
ZW50IG1vdXNlbW92ZSA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJNb3VzZUV2ZW50Kj4oJmV2ZW50
KTsKKyAgICBpZiAobV9zY3JvbGxiYXItPmZyYW1lUmVjdCgpLmNvbnRhaW5zKG1vdXNlbW92ZS54
LCBtb3VzZW1vdmUueSkKKyAgICAgICAgfHwgbV9zY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgIT0g
Tm9QYXJ0KSB7CisgICAgICAgIG1vdXNlbW92ZS54IC09IG1fc2Nyb2xsYmFyLT54KCk7CisgICAg
ICAgIG1vdXNlbW92ZS55IC09IG1fc2Nyb2xsYmFyLT55KCk7CisgICAgICAgIHJldHVybiBtX3Nj
cm9sbGJhci0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1fc2Nyb2xsYmFy
LmdldCgpLCBtb3VzZW1vdmUpKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKG1fc2Nyb2xsYmFyLT5o
b3ZlcmVkUGFydCgpICE9IE5vUGFydCkKLSAgICAgICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4
aXRlZCgpOworICAgIGlmIChtX3Njcm9sbGJhci0+aG92ZXJlZFBhcnQoKSAhPSBOb1BhcnQpCisg
ICAgICAgIG1fc2Nyb2xsYmFyLT5tb3VzZUV4aXRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IApAQCAtMjA2LDU5ICsyMTEsNTkgQEAgYm9vbCBXZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlTGVh
dmUoY29ucwogCiBib29sIFdlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbChjb25zdCBXZWJJ
bnB1dEV2ZW50JiBldmVudCkKIHsKLSAgICAgICAgLy8gU2FtZSBsb2dpYyBhcyBpbiBTY3JvbGx2
aWV3LmNwcC4gIElmIHdlIGNhbiBtb3ZlIGF0IGFsbCwgd2UnbGwgYWNjZXB0IHRoZSBldmVudC4K
LSAgICAgICAgV2ViTW91c2VXaGVlbEV2ZW50IG1vdXNld2hlZWwgPSAqc3RhdGljX2Nhc3Q8Y29u
c3QgV2ViTW91c2VXaGVlbEV2ZW50Kj4oJmV2ZW50KTsKLSAgICAgICAgaW50IG1heFNjcm9sbERl
bHRhID0gbV9zY3JvbGxiYXItPm1heGltdW0oKSAtIG1fc2Nyb2xsYmFyLT52YWx1ZSgpOwotICAg
ICAgICBmbG9hdCBkZWx0YSA9IG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBtb3VzZXdoZWVsLmRlbHRhWCA6IG1vdXNld2hlZWwuZGVsdGFZOwotICAg
ICAgICBpZiAoKGRlbHRhIDwgMCAmJiBtYXhTY3JvbGxEZWx0YSA+IDApIHx8IChkZWx0YSA+IDAg
JiYgbV9zY3JvbGxiYXItPnZhbHVlKCkgPiAwKSkgewotICAgICAgICAgICAgaWYgKG1vdXNld2hl
ZWwuc2Nyb2xsQnlQYWdlKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICAgICAgICAgICAgICBib29s
IG5lZ2F0aXZlID0gZGVsdGEgPCAwOwotICAgICAgICAgICAgICAgIGRlbHRhID0gbWF4KG1heChz
dGF0aWNfY2FzdDxmbG9hdD4obV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpICogU2Nyb2xsYmFy
OjptaW5GcmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Ny
b2xsYmFyLT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2Vz
KCkpKSwgMS4wZik7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZ2F0aXZlKQotICAgICAgICAgICAg
ICAgICAgICBkZWx0YSAqPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fc2Nyb2xs
YmFyLT5zY3JvbGwoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpID8gV2ViQ29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVwLCBXZWJDb3Jl
OjpTY3JvbGxCeVBpeGVsLCBkZWx0YSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAv
LyBTYW1lIGxvZ2ljIGFzIGluIFNjcm9sbHZpZXcuY3BwLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxs
LCB3ZSdsbCBhY2NlcHQgdGhlIGV2ZW50LgorICAgIFdlYk1vdXNlV2hlZWxFdmVudCBtb3VzZXdo
ZWVsID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYk1vdXNlV2hlZWxFdmVudCo+KCZldmVudCk7Cisg
ICAgaW50IG1heFNjcm9sbERlbHRhID0gbV9zY3JvbGxiYXItPm1heGltdW0oKSAtIG1fc2Nyb2xs
YmFyLT52YWx1ZSgpOworICAgIGZsb2F0IGRlbHRhID0gbV9zY3JvbGxiYXItPm9yaWVudGF0aW9u
KCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1vdXNld2hlZWwuZGVsdGFYIDogbW91c2V3aGVl
bC5kZWx0YVk7CisgICAgaWYgKChkZWx0YSA8IDAgJiYgbWF4U2Nyb2xsRGVsdGEgPiAwKSB8fCAo
ZGVsdGEgPiAwICYmIG1fc2Nyb2xsYmFyLT52YWx1ZSgpID4gMCkpIHsKKyAgICAgICAgaWYgKG1v
dXNld2hlZWwuc2Nyb2xsQnlQYWdlKSB7CisgICAgICAgICAgICBBU1NFUlQobV9zY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gVmVydGljYWxTY3JvbGxiYXIpOworICAgICAgICAgICAgYm9vbCBu
ZWdhdGl2ZSA9IGRlbHRhIDwgMDsKKyAgICAgICAgICAgIGRlbHRhID0gbWF4KG1heChzdGF0aWNf
Y2FzdDxmbG9hdD4obV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpICogU2Nyb2xsYmFyOjptaW5G
cmFjdGlvblRvU3RlcFdoZW5QYWdpbmcoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYmFy
LT52aXNpYmxlU2l6ZSgpIC0gU2Nyb2xsYmFyOjptYXhPdmVybGFwQmV0d2VlblBhZ2VzKCkpKSwg
MS4wZik7CisgICAgICAgICAgICBpZiAobmVnYXRpdmUpCisgICAgICAgICAgICAgICAgZGVsdGEg
Kj0gLTE7CiAgICAgICAgIH0KKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3Jv
bGwoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpID8g
V2ViQ29yZTo6U2Nyb2xsTGVmdCA6IFdlYkNvcmU6OlNjcm9sbFVwLCBXZWJDb3JlOjpTY3JvbGxC
eVBpeGVsLCBkZWx0YSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKIGJvb2wgV2ViU2Nyb2xsYmFySW1wbDo6b25LZXlEb3duKGNvbnN0
IFdlYklucHV0RXZlbnQmIGV2ZW50KQogewotICAgICAgICBXZWJLZXlib2FyZEV2ZW50IGtleWJv
YXJkID0gKnN0YXRpY19jYXN0PGNvbnN0IFdlYktleWJvYXJkRXZlbnQqPigmZXZlbnQpOwotICAg
ICAgICBpbnQga2V5Q29kZTsKLSAgICAgICAgLy8gV2UgaGF2ZSB0byBkdXBsaWNhdGUgdGhpcyBs
b2dpYyBmcm9tIFdlYlZpZXdJbXBsIGJlY2F1c2UgdGhlcmUgaXQgdXNlcwotICAgICAgICAvLyBD
aGFyIGFuZCBSYXdLZXlEb3duIGV2ZW50cywgd2hpY2ggZG9uJ3QgZXhpc3QgYXQgdGhpcyBwb2lu
dC4KLSAgICAgICAgaWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09IFZLRVlfU1BBQ0UpCi0g
ICAgICAgICAgICBrZXlDb2RlID0gKChrZXlib2FyZC5tb2RpZmllcnMgJiBXZWJJbnB1dEV2ZW50
OjpTaGlmdEtleSkgPyBWS0VZX1BSSU9SIDogVktFWV9ORVhUKTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoa2V5Ym9hcmQubW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNvbnRy
b2xLZXkpIHsKLSAgICAgICAgICAgICAgICAvLyBNYXRjaCBGRiBiZWhhdmlvciBpbiB0aGUgc2Vu
c2UgdGhhdCBDdHJsK2hvbWUvZW5kIGFyZSB0aGUgb25seSBDdHJsCi0gICAgICAgICAgICAgICAg
Ly8ga2V5IGNvbWJpbmF0aW9ucyB3aGljaCBhZmZlY3Qgc2Nyb2xsaW5nLiBTYWZhcmkgaXMgYnVn
Z3kgaW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gc2Vuc2UgdGhhdCBpdCBzY3JvbGxzIHRoZSBw
YWdlIGZvciBhbGwgQ3RybCtzY3JvbGxpbmcga2V5Ci0gICAgICAgICAgICAgICAgLy8gY29tYmlu
YXRpb25zLiBGb3IgZS5nLiBDdHJsK3BndXAvcGdkbi91cC9kb3duLCBldGMuCi0gICAgICAgICAg
ICAgICAgc3dpdGNoIChrZXlib2FyZC53aW5kb3dzS2V5Q29kZSkgewotICAgICAgICAgICAgICAg
IGNhc2UgVktFWV9IT01FOgotICAgICAgICAgICAgICAgIGNhc2UgVktFWV9FTkQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAgV2ViS2V5Ym9h
cmRFdmVudCBrZXlib2FyZCA9ICpzdGF0aWNfY2FzdDxjb25zdCBXZWJLZXlib2FyZEV2ZW50Kj4o
JmV2ZW50KTsKKyAgICBpbnQga2V5Q29kZTsKKyAgICAvLyBXZSBoYXZlIHRvIGR1cGxpY2F0ZSB0
aGlzIGxvZ2ljIGZyb20gV2ViVmlld0ltcGwgYmVjYXVzZSB0aGVyZSBpdCB1c2VzCisgICAgLy8g
Q2hhciBhbmQgUmF3S2V5RG93biBldmVudHMsIHdoaWNoIGRvbid0IGV4aXN0IGF0IHRoaXMgcG9p
bnQuCisgICAgaWYgKGtleWJvYXJkLndpbmRvd3NLZXlDb2RlID09IFZLRVlfU1BBQ0UpCisgICAg
ICAgIGtleUNvZGUgPSAoKGtleWJvYXJkLm1vZGlmaWVycyAmIFdlYklucHV0RXZlbnQ6OlNoaWZ0
S2V5KSA/IFZLRVlfUFJJT1IgOiBWS0VZX05FWFQpOworICAgIGVsc2UgeworICAgICAgICBpZiAo
a2V5Ym9hcmQubW9kaWZpZXJzID09IFdlYklucHV0RXZlbnQ6OkNvbnRyb2xLZXkpIHsKKyAgICAg
ICAgICAgIC8vIE1hdGNoIEZGIGJlaGF2aW9yIGluIHRoZSBzZW5zZSB0aGF0IEN0cmwraG9tZS9l
bmQgYXJlIHRoZSBvbmx5IEN0cmwKKyAgICAgICAgICAgIC8vIGtleSBjb21iaW5hdGlvbnMgd2hp
Y2ggYWZmZWN0IHNjcm9sbGluZy4gU2FmYXJpIGlzIGJ1Z2d5IGluIHRoZQorICAgICAgICAgICAg
Ly8gc2Vuc2UgdGhhdCBpdCBzY3JvbGxzIHRoZSBwYWdlIGZvciBhbGwgQ3RybCtzY3JvbGxpbmcg
a2V5CisgICAgICAgICAgICAvLyBjb21iaW5hdGlvbnMuIEZvciBlLmcuIEN0cmwrcGd1cC9wZ2Ru
L3VwL2Rvd24sIGV0Yy4KKyAgICAgICAgICAgIHN3aXRjaCAoa2V5Ym9hcmQud2luZG93c0tleUNv
ZGUpIHsKKyAgICAgICAgICAgIGNhc2UgVktFWV9IT01FOgorICAgICAgICAgICAgY2FzZSBWS0VZ
X0VORDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGlmIChrZXlib2FyZC5pc1N5c3RlbUtleSB8fCAoa2V5Ym9hcmQubW9kaWZpZXJz
ICYgV2ViSW5wdXRFdmVudDo6U2hpZnRLZXkpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKGtleWJvYXJkLmlzU3lzdGVtS2V5IHx8IChrZXlib2FyZC5tb2RpZmll
cnMgJiBXZWJJbnB1dEV2ZW50OjpTaGlmdEtleSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAgICAgIGtleUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5Q29kZTsKLSAgICAg
ICAgfQotICAgICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gc2Nyb2xsRGlyZWN0aW9uOwot
ICAgICAgICBXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eSBzY3JvbGxHcmFudWxhcml0eTsKLSAg
ICAgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGtleUNvZGUsICZzY3Jv
bGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkpIHsKLSAgICAgICAgICAgIC8vIFdpbGwg
cmV0dXJuIGZhbHNlIGlmIHNjcm9sbCBkaXJlY3Rpb24gd2Fzbid0IGNvbXBhdGlibGUgd2l0aCB0
aGlzIHNjcm9sbGJhci4KLSAgICAgICAgICAgIHJldHVybiBtX3Njcm9sbGJhci0+c2Nyb2xsKHNj
cm9sbERpcmVjdGlvbiwgc2Nyb2xsR3JhbnVsYXJpdHkpOwotICAgICAgICB9CisgICAgICAgIGtl
eUNvZGUgPSBrZXlib2FyZC53aW5kb3dzS2V5Q29kZTsKKyAgICB9CisgICAgV2ViQ29yZTo6U2Ny
b2xsRGlyZWN0aW9uIHNjcm9sbERpcmVjdGlvbjsKKyAgICBXZWJDb3JlOjpTY3JvbGxHcmFudWxh
cml0eSBzY3JvbGxHcmFudWxhcml0eTsKKyAgICBpZiAoV2ViVmlld0ltcGw6Om1hcEtleUNvZGVG
b3JTY3JvbGwoa2V5Q29kZSwgJnNjcm9sbERpcmVjdGlvbiwgJnNjcm9sbEdyYW51bGFyaXR5KSkg
eworICAgICAgICAvLyBXaWxsIHJldHVybiBmYWxzZSBpZiBzY3JvbGwgZGlyZWN0aW9uIHdhc24n
dCBjb21wYXRpYmxlIHdpdGggdGhpcyBzY3JvbGxiYXIuCisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbEdyYW51bGFy
aXR5KTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0yNjcsMTMgKzI3MiwxOCBA
QCBpbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsU2l6ZShXZWJDb3JlCiAgICAgcmV0dXJuIChv
cmllbnRhdGlvbiA9PSBtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSkgPyAobV9zY3JvbGxiYXIt
PnRvdGFsU2l6ZSgpIC0gbV9zY3JvbGxiYXItPnZpc2libGVTaXplKCkpIDogMDsKIH0KIAotdm9p
ZCBXZWJTY3JvbGxiYXJJbXBsOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBvZmZzZXQpCitpbnQgV2ViU2Nyb2xsYmFySW1wbDo6c2Nyb2xsUG9z
aXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3QKIHsKLSAgICBtX3Njcm9sbGJhci0+c2V0
VmFsdWUoKG1fc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIp
ID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFuaW1hdG9y
KTsKKyAgICByZXR1cm4gbV9zY3JvbGxPZmZzZXQ7CiB9CiAKLXZvaWQgV2ViU2Nyb2xsYmFySW1w
bDo6dmFsdWVDaGFuZ2VkKFdlYkNvcmU6OlNjcm9sbGJhciopCit2b2lkIFdlYlNjcm9sbGJhcklt
cGw6OnNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgb2Zmc2V0KQogewor
ICAgIGlmIChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFy
KQorICAgICAgICBtX3Njcm9sbE9mZnNldCA9IG9mZnNldC54KCk7CisgICAgZWxzZQorICAgICAg
ICBtX3Njcm9sbE9mZnNldCA9IG9mZnNldC55KCk7CisKICAgICBtX2NsaWVudC0+dmFsdWVDaGFu
Z2VkKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3Jv
bGxiYXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
U2Nyb2xsYmFySW1wbC5oCShyZXZpc2lvbiA3NjI3MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlNjcm9sbGJhckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhbmRsZUlucHV0RXZlbnQoY29uc3QgV2ViSW5w
dXRFdmVudCYpOwogCiAgICAgLy8gV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50IG1ldGhvZHMKLSAg
ICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJvbUFu
aW1hdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1
ZUNoYW5nZWQoV2ViQ29yZTo6U2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6
ZShXZWJDb3JlOjpTY3JvbGxiYXJPcmllbnRhdGlvbikgY29uc3Q7CisgICAgdmlydHVhbCBpbnQg
c2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6U2Nyb2xsYmFyKikgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChXZWJDb3JlOjpTY3JvbGxiYXIqLCBjb25z
dCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAgICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3Q7
CiAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhckNvcm5lclByZXNlbnQoKSBjb25zdDsKQEAgLTc2
LDYgKzc2LDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYlNjcm9sbGJhckNsaWVudCogbV9jbGllbnQ7
CiAKKyAgICBpbnQgbV9zY3JvbGxPZmZzZXQ7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJh
cj4gbV9zY3JvbGxiYXI7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkocmV2aXNpb24gNzYyNzMp
CisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDEzIEBACisyMDExLTAxLTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW51cCBTY3JvbGxi
YXIvU2Nyb2xsYmFyQ2xpZW50IHJlbGF0aW9uc2hpcAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI3NzkKKworICAgICAgICAqIEFwaS9xd2ViZnJhbWUu
Y3BwOgorICAgICAgICAoUVdlYkZyYW1lOjpzZXRTY3JvbGxCYXJWYWx1ZSk6CisKIDIwMTEtMDEt
MTkgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQvQXBpL3F3ZWJmcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdlYmZyYW1lLmNwcAko
cmV2aXNpb24gNzYyNzMpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2ViZnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcxLDcgKzEwNzEsMTEgQEAgdm9pZCBRV2ViRnJhbWU6OnNldFNj
cm9sbEJhclZhbHVlKFF0OjpPcgogICAgICAgICAgICAgdmFsdWUgPSAwOwogICAgICAgICBlbHNl
IGlmICh2YWx1ZSA+IHNjcm9sbEJhck1heGltdW0ob3JpZW50YXRpb24pKQogICAgICAgICAgICAg
dmFsdWUgPSBzY3JvbGxCYXJNYXhpbXVtKG9yaWVudGF0aW9uKTsKLSAgICAgICAgc2ItPnNldFZh
bHVlKHZhbHVlLCBTY3JvbGxiYXI6Ok5vdEZyb21TY3JvbGxBbmltYXRvcik7CisKKyAgICAgICAg
aWYgKG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFsKQorICAgICAgICAgICAgc2ItPmNsaWVu
dCgpLT5zY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKHZhbHVlKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc2ItPmNsaWVudCgpLT5zY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKHZhbHVlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2
MjczKQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTkgQEAKKzIwMTEtMDEtMjAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbnVwIFNj
cm9sbGJhci9TY3JvbGxiYXJDbGllbnQgcmVsYXRpb25zaGlwCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01Mjc3OQorCisgICAgICAgICogV2ViU2Nyb2xs
QmFyLmNwcDoKKyAgICAgICAgKFdlYlNjcm9sbEJhcjo6V2ViU2Nyb2xsQmFyKToKKyAgICAgICAg
KFdlYlNjcm9sbEJhcjo6c2V0VmFsdWUpOgorICAgICAgICAoV2ViU2Nyb2xsQmFyOjp2YWx1ZSk6
CisgICAgICAgIChXZWJTY3JvbGxCYXI6OnNjcm9sbCk6CisgICAgICAgIChXZWJTY3JvbGxCYXI6
OnNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYlNjcm9sbEJhcjo6c2V0U2Nyb2xsT2Zmc2V0
KToKKyAgICAgICAgKiBXZWJTY3JvbGxCYXIuaDoKKwogMjAxMS0wMS0xOSAgQWRhbSBSb2JlbiAg
PGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIGZvciBXS0NBQ0ZMYXllclJlbmRl
cmVyIGNoYW5nZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9sbEJhci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xsQmFyLmNwcAkocmV2aXNpb24g
NzYyNzMpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Miw2ICs0Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogV2ViU2Nyb2xs
QmFyOjpXZWJTY3JvbGxCYXIoKQogICAgIDogbV9yZWZDb3VudCgwKQogICAgICwgbV9jb250YWlu
aW5nV2luZG93KDApCisgICAgLCBtX2N1cnJlbnRQb3NpdGlvbigwKQogewogICAgIGdDbGFzc0Nv
dW50Kys7CiAgICAgZ0NsYXNzTmFtZUNvdW50LmFkZCgiV2ViU2Nyb2xsQmFyIik7CkBAIC0xNDMs
NyArMTQ0LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OgogSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OnNldFZhbHVlKCAKICAgICAvKiBb
aW5dICovIGludCB2YWx1ZSkKIHsKLSAgICBtX3Njcm9sbEJhci0+c2V0VmFsdWUodmFsdWUsIFNj
cm9sbGJhcjo6Tm90RnJvbVNjcm9sbEFuaW1hdG9yKTsKKyAgICBtX2N1cnJlbnRQb3NpdGlvbiA9
IHZhbHVlOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0xNTIsNyArMTUzLDcgQEAgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OgogewogICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKnZhbHVlID0gbV9zY3JvbGxCYXItPnZhbHVl
KCk7CisgICAgKnZhbHVlID0gbV9jdXJyZW50UG9zaXRpb247CiAgICAgcmV0dXJuIFNfT0s7CiB9
CiAKQEAgLTI0Nyw3ICsyNDgsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlNjcm9s
bEJhcjo6CiB7CiAgICAgU2Nyb2xsRGlyZWN0aW9uIHdlYkNvcmVTY3JvbGxEaXJlY3Rpb24gPSAo
U2Nyb2xsRGlyZWN0aW9uKSBkaXJlY3Rpb247CiAgICAgU2Nyb2xsR3JhbnVsYXJpdHkgd2ViQ29y
ZUdyYW51bGFyaXR5ID0gKFNjcm9sbEdyYW51bGFyaXR5KSBncmFudWxhcml0eTsKLSAgICBtX3Nj
cm9sbEJhci0+c2Nyb2xsKHdlYkNvcmVTY3JvbGxEaXJlY3Rpb24sIHdlYkNvcmVHcmFudWxhcml0
eSwgbXVsdGlwbGllcik7CisgICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwod2ViQ29yZVNjcm9s
bERpcmVjdGlvbiwgd2ViQ29yZUdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKICAgICByZXR1cm4g
U19PSzsKIH0KIApAQCAtMjU3LDE3ICsyNTgsMTQgQEAgaW50IFdlYlNjcm9sbEJhcjo6c2Nyb2xs
U2l6ZShTY3JvbGxiYXJPcgogICAgIHJldHVybiAob3JpZW50YXRpb24gPT0gbV9zY3JvbGxCYXIt
Pm9yaWVudGF0aW9uKCkpID8gKG1fc2Nyb2xsQmFyLT50b3RhbFNpemUoKSAtIG1fc2Nyb2xsQmFy
LT52aXNpYmxlU2l6ZSgpKSA6IDA7IAogfQogCi12b2lkIFdlYlNjcm9sbEJhcjo6c2V0U2Nyb2xs
T2Zmc2V0RnJvbUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQoraW50IFdlYlNjcm9s
bEJhcjo6c2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QKIHsKLSAgICBtX3Njcm9sbEJh
ci0+c2V0VmFsdWUoKG1fc2Nyb2xsQmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3Jv
bGxiYXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCksIFNjcm9sbGJhcjo6RnJvbVNjcm9sbEFu
aW1hdG9yKTsKKyAgICByZXR1cm4gbV9jdXJyZW50UG9zaXRpb247CiB9CiAKLXZvaWQgV2ViU2Ny
b2xsQmFyOjp2YWx1ZUNoYW5nZWQoU2Nyb2xsYmFyKiBzY3JvbGxCYXIpCit2b2lkIFdlYlNjcm9s
bEJhcjo6c2V0U2Nyb2xsT2Zmc2V0KGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7Ci0gICAgaWYg
KG1fc2Nyb2xsQmFyICE9IHNjcm9sbEJhcikgewotICAgICAgICBBU1NFUlQoZmFsc2UpOyAgLy8g
c2hvdWxkbid0IGhhcHBlbgotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIG1fY3VycmVudFBv
c2l0aW9uID0gKG1fc2Nyb2xsQmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxi
YXIpID8gb2Zmc2V0LngoKSA6IG9mZnNldC55KCk7CiAgICAgbV9kZWxlZ2F0ZS0+dmFsdWVDaGFu
Z2VkKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuaAkocmV2aXNpb24g
NzYyNzMpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJTY3JvbGxCYXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDggKzExNyw4IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICAvLyBTY3JvbGxi
YXJDbGllbnQKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zmc2V0RnJv
bUFuaW1hdGlvbihjb25zdCBJbnRQb2ludCYpOwotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5n
ZWQoU2Nyb2xsYmFyKik7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFy
KikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2lu
dCYpOwogICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIq
LCBjb25zdCBJbnRSZWN0Jik7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb3ZpZGUgYSB3
YXkgdG8gc2V0IHRoaXMgdmFsdWUuCkBAIC0xMjgsNiArMTI4LDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgVUxPTkcgbV9yZWZDb3VudDsKICAgICBIV05EIG1fY29udGFpbmluZ1dpbmRvdzsKKyAgICBp
bnQgbV9jdXJyZW50UG9zaXRpb247CiAgICAgUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gbV9z
Y3JvbGxCYXI7CiAgICAgQ09NUHRyPElXZWJTY3JvbGxCYXJEZWxlZ2F0ZVByaXZhdGU+IG1fZGVs
ZWdhdGU7CiB9Owo=
</data>
<flag name="review"
          id="71058"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79769</attachid>
            <date>2011-01-21 11:40:47 -0800</date>
            <delta_ts>2011-01-21 12:15:45 -0800</delta_ts>
            <desc>Part 2</desc>
            <filename>patch2.diff</filename>
            <type>text/plain</type>
            <size>105411</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MzcyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI1IEBACisyMDExLTAxLTIxICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUGFydCAyIG9mICJDbGVhbnVwIFNjcm9sbGJhci9TY3JvbGxiYXJDbGll
bnQgcmVsYXRpb25zaGlwIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTI3NzkKKworICAgICAgICBSZW5hbWUgU2Nyb2xsYmFyQ2xpZW50IC0+IFNjcm9s
bGFibGVBcmVhLgorCisgICAgICAgIC0gQWxzbyByZXBsYWNlcyBTY3JvbGxiYXI6OnNldENsaWVu
dCB3aXRoIFNjcm9sbGJhcjo6ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJlYQorICAgICAgICAg
IHNpbmNlIHRoYXQgd2FzIGl0cyBvbmx5IHVzZSBjYXNlLgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVNjcm9sbGJhcjo6c2V0VmFsdWUpOgorICAgICAg
ICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyk6Cisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Qb3B1cE1lbnVD
bGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
cm9sbEFuaW1hdG9yOjpTY3JvbGxBbmltYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcjo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbEFuaW1hdG9yOjpub3Rp
dHlQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmg6
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxB
bmltYXRvcldpbjo6U2Nyb2xsQW5pbWF0b3JXaW4pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
QW5pbWF0b3JXaW46OnNjcm9sbCk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JX
aW4uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1
cGRhdGVTY3JvbGxiYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndoZWVsRXZl
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxhYmxlQXJlYS5jcHA6IENvcGllZCBmcm9tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
YmFyQ2xpZW50LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpTY3JvbGxh
YmxlQXJlYSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6flNjcm9sbGFibGVB
cmVhKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9YT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xs
VG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxl
QXJlYTo6c2V0U2Nyb2xsT2Zmc2V0RnJvbUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0v
U2Nyb2xsYWJsZUFyZWEuaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJD
bGllbnQuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsYmFyOjpTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpv
ZmZzZXREaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjphdXRvc2Nyb2xs
UHJlc3NlZFBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3ZlVGh1bWIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjptb3VzZU1vdmVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhcjo6aXNXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyOjppbnZhbGlkYXRlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnZl
cnRUb0NvbnRhaW5pbmdWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhcjo6Y29udmVy
dEZyb21Db250YWluaW5nVmlldyk6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYmFyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXI6OmRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyOjpzY3JvbGxhYmxlQXJlYSk6CisgICAgICAg
ICogcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9TY3Jv
bGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRnJh
bWVsZXNzU2Nyb2xsVmlldy5oOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJh
clRoZW1lQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bTo6cGFpbnRUaWNrbWFya3MpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9TY3JvbGxiYXJF
ZmwuY3BwOgorICAgICAgICAoU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIpOgorICAg
ICAgICAoU2Nyb2xsYmFyRWZsOjpTY3JvbGxiYXJFZmwpOgorICAgICAgICAoc2Nyb2xsYmFyRWZs
RWRqZU1lc3NhZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcDoKKyAgICAgICAg
KE1haW5GcmFtZVNjcm9sbGJhckd0azo6Y3JlYXRlKToKKyAgICAgICAgKE1haW5GcmFtZVNjcm9s
bGJhckd0azo6TWFpbkZyYW1lU2Nyb2xsYmFyR3RrKToKKyAgICAgICAgKE1haW5GcmFtZVNjcm9s
bGJhckd0azo6Z3RrVmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvTWFpbkZy
YW1lU2Nyb2xsYmFyR3RrLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9y
TWFjLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxBbmltYXRvck1hYzo6U2Nyb2xsQW5pbWF0b3JNYWMpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsQW5pbWF0b3JNYWM6OnNjcm9sbCk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Nj
cm9sbGJhclRoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVNYWM6
OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9TY3JvbGxiYXJRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXI6OmNvbnRleHRNZW51KToKKyAgICAgICAgKiBwbGF0Zm9ybS93
aW4vUG9wdXBNZW51V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBvcHVwTWVudVdpbjo6c2Ny
b2xsVG9SZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UG9wdXBNZW51V2luOjp3
bmRQcm9jKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmg6CisgICAgICAg
ICogcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lU2FmYXJpOjpwYWludFRyYWNrQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZVNhZmFyaTo6cGFpbnRCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnBhaW50VGh1bWIpOgorICAgICAgICAqIHBs
YXRmb3JtL3d4L1Njcm9sbGJhclRoZW1lV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
YmFyVGhlbWVXeDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJEYXRhR3JpZC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllcjo6c2Nyb2xsVG9PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OmRlc3Ryb3lTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnNjcm9sbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dEJveDo6c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdEJveDo6c2Nyb2xsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RC
b3g6OmxvZ2ljYWxTY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6c2V0
U2Nyb2xsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmRlc3Ryb3lTY3Jv
bGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1l
bnVMaXN0OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51
TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU2Nyb2xsYmFyOjpSZW5kZXJTY3JvbGxiYXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTY3JvbGxiYXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHRDb250cm9sU2luZ2xlTGluZTo6Y3JlYXRlU2Nyb2xsYmFyKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6CisKIDIwMTEtMDEtMjEgIEFkYW0gUm9i
ZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFNlcGFyYXRlIGZsdXNoaW5nIGxheWVy
IGNoYW5nZXMgZnJvbSByZW5kZXJpbmcgaW4gQ0FDRkxheWVyVHJlZUhvc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMzExLDggKzEzMTEsOCBAQCBTRVQoV2ViQ29yZV9T
T1VSQ0VTCiAgICAgcGxhdGZvcm0vTG9nZ2luZy5jcHAKICAgICBwbGF0Zm9ybS9NSU1FVHlwZVJl
Z2lzdHJ5LmNwcAogICAgIHBsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAorICAgIHBsYXRmb3Jt
L1Njcm9sbGFibGVBcmVhLmNwcAogICAgIHBsYXRmb3JtL1Njcm9sbGJhci5jcHAKLSAgICBwbGF0
Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3BwCiAgICAgcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21w
b3NpdGUuY3BwCiAgICAgcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKICAgICBwbGF0Zm9ybS9TaGFy
ZWRCdWZmZXIuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNzYzNTYpCisr
KyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2luZyBjb3B5KQpAQCAtMjU3NCw4
ICsyNTc0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY2hlbWVSZWdpc3RyeS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmggXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHAgXAotCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bGFibGVBcmVhLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAgXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAgXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTM1MTIsMTAgKzM1MTIsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1NjaGVtZVJlZ2lzdHJ5LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vU2NoZW1lUmVnaXN0cnkuaCcsCisgICAgICAgICAgICAn
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9TY3Jv
bGxhYmxlQXJlYS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9TY3JvbGxiYXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vU2Nyb2xsYmFyQ2xp
ZW50LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCcsCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBy
bwkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtMTI1NSw5ICsxMjU1LDkgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZVJlc3BvbnNlQmFzZS5jcHAgXAogICAgIHBsYXRmb3JtL3RleHQvUmVn
dWxhckV4cHJlc3Npb24uY3BwIFwKICAgICBwbGF0Zm9ybS9TY2hlbWVSZWdpc3RyeS5jcHAgXAor
ICAgIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcCBcCiAgICAgcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuY3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuY3BwIFwKLSAgICBwbGF0Zm9ybS9T
Y3JvbGxiYXJDbGllbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0
ZS5jcHAgXAogICAgIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwIFwKICAgICBwbGF0Zm9ybS90ZXh0
L1NlZ21lbnRlZFN0cmluZy5jcHAgXApAQCAtMjE5NCw5ICsyMTk0LDkgQEAgSEVBREVSUyArPSBc
CiAgICAgcGxhdGZvcm0vcXQvUXRTdHlsZU9wdGlvbldlYkNvbWJvQm94LmggXAogICAgIHBsYXRm
b3JtL3F0L1JlbmRlclRoZW1lUXQuaCBcCiAgICAgcGxhdGZvcm0vcXQvU2Nyb2xsYmFyVGhlbWVR
dC5oIFwKKyAgICBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oIFwKICAgICBwbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oIFwKICAgICBwbGF0Zm9ybS9TY3JvbGxiYXIuaCBcCi0gICAgcGxhdGZvcm0v
U2Nyb2xsYmFyQ2xpZW50LmggXAogICAgIHBsYXRmb3JtL1Njcm9sbGJhclRoZW1lQ29tcG9zaXRl
LmggXAogICAgIHBsYXRmb3JtL1Njcm9sbFZpZXcuaCBcCiAgICAgcGxhdGZvcm0vU2VhcmNoUG9w
dXBNZW51LmggXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1NzU0LDE5ICsyNTc1NCwxOSBA
QAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0
Zm9ybVxTY3JvbGxiYXIuY3BwIgorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cU2Nyb2xs
YWJsZUFyZWEuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXIuaCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXFNjcm9sbGFibGVBcmVhLmgiCiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKLQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbGJhckNsaWVudC5jcHAiCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXIuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxTY3JvbGxiYXJDbGllbnQuaCIK
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXFNjcm9sbGJhci5oIgogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTA1
OSw2ICs1MDU5LDggQEAKIAkJQkM4MjQzMkEwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNh
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
ODI0MzI2MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTFRyYW5zYWN0aW9uLmggKi87IH07CiAJCUJD
ODI0M0U4MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzgyNDNFNjBEMENGRDc1MDA0NjBD
OEYgLyogV2luZG93RmVhdHVyZXMuY3BwICovOyB9OwogCQlCQzgyNDNFOTBEMENGRDc1MDA0NjBD
OEYgLyogV2luZG93RmVhdHVyZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDOEFF
MzRFMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhBRTM0QzEyRUEwOTZBMDBFQjNBRTYg
LyogU2Nyb2xsYWJsZUFyZWEuY3BwICovOyB9OworCQlCQzhBRTM0RjEyRUEwOTZBMDBFQjNBRTYg
LyogU2Nyb2xsYWJsZUFyZWEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEJDOEFFMzREMTJFQTA5NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDOEI4NTNF
MEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4Qjg1M0MwRTdDN0YxMTAwQUI2OTg0IC8q
IFNjcm9sbGJhclRoZW1lTWFjLmggKi87IH07CiAJCUJDOEI4NTRCMEU3QzdGNTYwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM4Qjg1NEEwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkM4QkYxNTEx
MDU4MTNCRjAwQTQwQTA3IC8qIFVzZXJTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhCRjE1MDEwNTgxM0JGMDBBNDBBMDcgLyogVXNl
clN0eWxlU2hlZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNTA5Myw4ICs1MDk1LDYgQEAKIAkJQkM5OTgxMkUwREJFODA3QTAwOENFOUVGIC8q
IERPTUFic3RyYWN0Vmlld0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzk5ODEyRDBEQkU4MDdBMDA4Q0U5RUYgLyogRE9NQWJzdHJhY3RWaWV3
RnJhbWUuaCAqLzsgfTsKIAkJQkM5QUREMjMwQ0M0MDMyNjAwMDk4QzRDIC8qIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzlB
REQ4MDBDQzQwOTIyMDAwOThDNEMgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREN0YwQ0M0MDky
MjAwMDk4QzRDIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLzsgfTsKLQkJQkM5QkM2
NEQwRTdDNDg4OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlCQzY0QjBFN0M0ODg5MDA4Qjk4NDkg
LyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQlCQzlCQzY0RTBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlC
QzY0QzBFN0M0ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNBMTY5QTIwQkZENTVCNDAwMTlD
QTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMTY5QTAwQkZENTVCNDAwMTlDQTc2IC8qIEpT
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwICovOyB9OwogCQlCQ0ExNjlBMzBCRkQ1NUI0MDAx
OUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpT
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCAqLzsgfTsKIAkJQkNBMjU3MTUxMjkzQzAxMDAwN0Ey
NjNEIC8qIFZlcnRpY2FsUG9zaXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNBMjU3MTQxMjkzQzAxMDAwN0EyNjNEIC8qIFZlcnRpY2Fs
UG9zaXRpb25DYWNoZS5oICovOyB9OwpAQCAtMTEzNjcsNiArMTEzNjcsOCBAQAogCQlCQzgyNDMy
NjBEMENFOEEyMDA0NjBDOEYgLyogSlNTUUxUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NRTFRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDODI0M0U2MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXaW5kb3dGZWF0dXJlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4RiAv
KiBXaW5kb3dGZWF0dXJlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXaW5k
b3dGZWF0dXJlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQzhBRTM0QzEyRUEw
OTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQzhBRTM0RDEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYWJsZUFyZWEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4Qjg1M0MwRTdDN0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJh
clRoZW1lTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbGJhclRo
ZW1lTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEI4NTRBMEU3QzdGNTYw
MEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JvbGxiYXJUaGVtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhC
RjE1MDEwNTgxM0JGMDBBNDBBMDcgLyogVXNlclN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVXNlclN0eWxlU2hlZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTExNDA0LDggKzExNDA2LDYgQEAKIAkJQkM5OTgxMkQwREJFODA3QTAwOENFOUVG
IC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTUFic3RyYWN0Vmlld0ZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDOUFERDIyMENDNDAzMjYwMDA5OEM0QyAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5QUREN0YwQ0M0MDkyMjAwMDk4QzRD
IC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCUJDOUJDNjRCMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJDbGll
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsYmFyQ2xp
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM5QkM2NEMwRTdDNDg4OTAw
OEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTY3JvbGxiYXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNB
MTY5QTAwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFRhYmxlQ2FwdGlvbkVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ExNjlBMTBCRkQ1NUI0
MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQ0EyNTcxNDEyOTNDMDEwMDA3QTI2M0QgLyogVmVydGljYWxQ
b3NpdGlvbkNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlcnRpY2Fs
UG9zaXRpb25DYWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyOTAsMTIg
KzE4MjkwLDEyIEBACiAJCQkJMUM2M0EyNDYwRjcxNjQ2NjAwQzA5RDVBIC8qIFJ1bkxvb3BUaW1l
ci5oICovLAogCQkJCTUxNjJDN0YyMTFGNzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5j
cHAgKi8sCiAJCQkJNTE2MkM3RjMxMUY3N0VGQjAwNjEyRUZFIC8qIFNjaGVtZVJlZ2lzdHJ5Lmgg
Ki8sCisJCQkJQkM4QUUzNEMxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmNwcCAq
LywKKwkJCQlCQzhBRTM0RDEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuaCAqLywK
IAkJCQlDQTNCRjY3QjEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5pbWF0b3IuY3BwICovLAog
CQkJCUNBM0JGNjdEMTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5oICovLAogCQkJ
CUJDQUE5MEMyMEE3RUJBNjAwMDhCMTIyOSAvKiBTY3JvbGxiYXIuY3BwICovLAogCQkJCUJDN0Iy
QUY4MDQ1MDgyNDEwMEE4MDAwRiAvKiBTY3JvbGxiYXIuaCAqLywKLQkJCQlCQzlCQzY0QjBFN0M0
ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmNwcCAqLywKLQkJCQlCQzlCQzY0QzBFN0M0
ODg5MDA4Qjk4NDkgLyogU2Nyb2xsYmFyQ2xpZW50LmggKi8sCiAJCQkJQkM4Qjg1NEEwRTdDN0Y1
NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggKi8sCiAJCQkJQkMxNDAyODgwRTgzNjgwODAw
MzE5NzE3IC8qIFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCAqLywKIAkJCQlCQzE0MDI4OTBF
ODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCAqLywKQEAgLTIxODI3
LDcgKzIxODI3LDYgQEAKIAkJCQlDQTNCRjY3RTEwRDk5QkFFMDBFNkNFNTMgLyogU2Nyb2xsQW5p
bWF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQUUxRkE3MTI5MzlEQjcwMDRDQjAyNiAvKiBT
Y3JvbGxBbmltYXRvck1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk5QjgwODI0NUU1OTAw
MUU5QUJDIC8qIFNjcm9sbGJhci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM5QkM2NEUwRTdDNDg4
OTAwOEI5ODQ5IC8qIFNjcm9sbGJhckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4Qjg1
NEIwRTdDN0Y1NjAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE0MDI4QjBFODM2ODA4MDAzMTk3MTcgLyogU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDOEI4NTNFMEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJU
aGVtZU1hYy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjQxMSw2ICsyMjQxMCw3IEBACiAJCQkJOTNG
MTk5RUQwODI0NUU1OTAwMUU5QUJDIC8qIFhTTFRQcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxQkU1MTJFMENGNkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3REQ0RDg3MEZERjRENkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmggaW4g
SGVhZGVycyAqLywKKwkJCQlCQzhBRTM0RjEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFy
ZWEuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjQ2MjEsNyArMjQ2MjEsNiBAQAogCQkJCUNBM0JGNjdD
MTBEOTlCQUUwMEU2Q0U1MyAvKiBTY3JvbGxBbmltYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQzUxMTU2RTEyQjE3NDlDMDBDOTY3NTQgLyogU2Nyb2xsQW5pbWF0b3JNYWMubW0gaW4gU291
cmNlcyAqLywKIAkJCQlCQ0FBOTBDMzBBN0VCQTYwMDA4QjEyMjkgLyogU2Nyb2xsYmFyLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCUJDOUJDNjREMEU3QzQ4ODkwMDhCOTg0OSAvKiBTY3JvbGxiYXJD
bGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMxNDAyOEEwRTgzNjgwODAwMzE5NzE3IC8q
IFNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUY4NjlG
MEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTVEOTI1QjY3MEY2NEQ0REQwMEI4NDdGMCAvKiBTY3JvbGxCZWhhdmlvci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTI1MTA2LDYgKzI1MTA1LDcgQEAKIAkJCQk5M0YxOUIwNTA4MjQ1RTU5MDAx
RTlBQkMgLyogWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTFC
RTUxMkQwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5N0RENEQ4NjBGREY0RDZFMDBFQ0Y5QTQgLyogWFNTQXVkaXRvci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCQzhBRTM0RTEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5jcHAJKHJldmlzaW9uIDc2MzU2KQor
KysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5U2Nyb2xsYmFyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTEgKzk3LDExIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVNj
cm9sbGJhcjo6c2V0VmFsdWUoZmwKICAgICBpZiAoIW1fc2Nyb2xsYmFyKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgaWYgKCFtX3Njcm9sbGJhci0+Y2xpZW50KCkpCisgICAgaWYgKCFtX3Nj
cm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZmxvYXQg
bmV3VmFsdWUgPSB2YWx1ZSAqIG1fc2Nyb2xsYmFyLT5tYXhpbXVtKCk7Ci0gICAgbV9zY3JvbGxi
YXItPmNsaWVudCgpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9zY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCksIG5ld1ZhbHVlKTsKKyAgICBtX3Njcm9sbGJhci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKG1fc2Nyb2xsYmFyLT5vcmllbnRh
dGlvbigpLCBuZXdWYWx1ZSk7CiB9CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA3NjM1NikK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjg2Nyw3ICsyODY3LDcgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNo
ZWNrZXI6OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Nvcm5lclByZXNlbnQ6Ci0gICAgICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5jbGllbnQoKS0+c2Nyb2xsYmFyQ29ybmVyUHJlc2VudCgpOworICAgICAgICAg
ICAgcmV0dXJuIHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsYmFyQ29ybmVyUHJl
c2VudCgpOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0
LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdW
aWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0
RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKLSAgICAvLyBTY3Jv
bGxCYXJDbGllbnQgaW50ZXJmYWNlCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlCiAg
ICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0
IEludFJlY3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0VGlja21hcmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHJldmlzaW9uIDc2MzU2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUG9wdXBNZW51Q2xpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgQ29sb3I7CiBjbGFzcyBGb250U2VsZWN0b3I7CiBj
bGFzcyBIb3N0V2luZG93OwogY2xhc3MgU2Nyb2xsYmFyOwotY2xhc3MgU2Nyb2xsYmFyQ2xpZW50
OworY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiAKIGNsYXNzIFBvcHVwTWVudUNsaWVudCB7CiBwdWJs
aWM6CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZvbnRTZWxlY3Rvciog
Zm9udFNlbGVjdG9yKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdygpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNy
ZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBjcmVhdGVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwg
U2Nyb2xsYmFyQ29udHJvbFNpemUpID0gMDsKIH07CiAKICNpZiBFTkFCTEUoTk9fTElTVEJPWF9S
RU5ERVJJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFu
aW1hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMjAgKzMyLDIxIEBACiAjaW5jbHVkZSAi
U2Nyb2xsQW5pbWF0b3IuaCIKIAogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKLSNpbmNsdWRlICJT
Y3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUg
PGFsZ29yaXRobT4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiAhRU5BQkxFKFNNT09USF9TQ1JPTExJTkcpCi1TY3JvbGxBbmltYXRvciog
U2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKK1Bhc3NPd25Q
dHI8U2Nyb2xsQW5pbWF0b3I+IFNjcm9sbEFuaW1hdG9yOjpjcmVhdGUoU2Nyb2xsYWJsZUFyZWEq
IHNjcm9sbGFibGVBcmVhKQogewotICAgIHJldHVybiBuZXcgU2Nyb2xsQW5pbWF0b3IoY2xpZW50
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IFNjcm9sbEFuaW1hdG9yKHNjcm9sbGFibGVBcmVh
KSk7CiB9CiAjZW5kaWYKIAotU2Nyb2xsQW5pbWF0b3I6OlNjcm9sbEFuaW1hdG9yKFNjcm9sbGJh
ckNsaWVudCogY2xpZW50KQotICAgIDogbV9jbGllbnQoY2xpZW50KQorU2Nyb2xsQW5pbWF0b3I6
OlNjcm9sbEFuaW1hdG9yKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IG1f
c2Nyb2xsYWJsZUFyZWEoc2Nyb2xsYWJsZUFyZWEpCiAgICAgLCBtX2N1cnJlbnRQb3NYKDApCiAg
ICAgLCBtX2N1cnJlbnRQb3NZKDApCiB7CkBAIC01OCw3ICs1OSw3IEBAIFNjcm9sbEFuaW1hdG9y
Ojp+U2Nyb2xsQW5pbWF0b3IoKQogYm9vbCBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxHcmFudWxhcml0eSwgZmxvYXQgc3RlcCwg
ZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBmbG9hdCogY3VycmVudFBvcyA9IChvcmllbnRhdGlv
biA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/ICZtX2N1cnJlbnRQb3NYIDogJm1fY3VycmVudFBv
c1k7Ci0gICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4oKmN1cnJlbnRQb3MgKyAo
c3RlcCAqIG11bHRpcGxpZXIpLCBzdGF0aWNfY2FzdDxmbG9hdD4obV9jbGllbnQtPnNjcm9sbFNp
emUob3JpZW50YXRpb24pKSksIDAuMGYpOworICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4KHN0
ZDo6bWluKCpjdXJyZW50UG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOwog
ICAgIGlmICgqY3VycmVudFBvcyA9PSBuZXdQb3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAqY3VycmVudFBvcyA9IG5ld1BvczsKQEAgLTgyLDcgKzgzLDcgQEAgRmxvYXRQb2ludCBTY3Jv
bGxBbmltYXRvcjo6Y3VycmVudFBvc2l0aQogCiB2b2lkIFNjcm9sbEFuaW1hdG9yOjpub3RpdHlQ
b3NpdGlvbkNoYW5nZWQoKQogewotICAgIG1fY2xpZW50LT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKEludFBvaW50KG1fY3VycmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKKyAgICBtX3Nj
cm9sbGFibGVBcmVhLT5zZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKEludFBvaW50KG1fY3Vy
cmVudFBvc1gsIG1fY3VycmVudFBvc1kpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCShyZXZpc2lvbiA3
NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDE3ICszMiwxNyBAQAogI2RlZmluZSBTY3JvbGxBbmltYXRvcl9oCiAK
ICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRQb2ludDsKLWNsYXNzIFNjcm9sbGJhckNs
aWVudDsKK2NsYXNzIFNjcm9sbGFibGVBcmVhOwogCiBjbGFzcyBTY3JvbGxBbmltYXRvciB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFNjcm9sbEFuaW1hdG9yKiBjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50
Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8U2Nyb2xsQW5pbWF0b3I+IGNyZWF0ZShTY3JvbGxh
YmxlQXJlYSopOwogCi0gICAgU2Nyb2xsQW5pbWF0b3IoU2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQp
OwogICAgIHZpcnR1YWwgflNjcm9sbEFuaW1hdG9yKCk7CiAKICAgICAvLyBDb21wdXRlcyBhIHNj
cm9sbCBkZXN0aW5hdGlvbiBmb3IgdGhlIGdpdmVuIHBhcmFtZXRlcnMuICBSZXR1cm5zIGZhbHNl
IGlmCkBAIC01Niw5ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCBjdXJyZW50UG9z
aXRpb24oKSBjb25zdDsKIAogcHJvdGVjdGVkOgorICAgIFNjcm9sbEFuaW1hdG9yKFNjcm9sbGFi
bGVBcmVhKik7CisKICAgICB2b2lkIG5vdGl0eVBvc2l0aW9uQ2hhbmdlZCgpOwogCi0gICAgU2Ny
b2xsYmFyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxhYmxl
QXJlYTsKICAgICBmbG9hdCBtX2N1cnJlbnRQb3NYOyAvLyBXZSBhdm9pZCB1c2luZyBhIEZsb2F0
UG9pbnQgaW4gb3JkZXIgdG8gcmVkdWNlCiAgICAgZmxvYXQgbV9jdXJyZW50UG9zWTsgLy8gc3Vi
Y2xhc3MgY29kZSBjb21wbGV4aXR5LgogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbEFuaW1hdG9yV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxNyArMzUsMTcgQEAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvcldpbi5oIgogCiAjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgotI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUg
IlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRl
IDxhbGdvcml0aG0+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBzdGF0aWMKLVNjcm9s
bEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNjcm9sbGJhckNsaWVudCogY2xpZW50
KQorUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xsQW5pbWF0b3I6OmNyZWF0ZShTY3Jv
bGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCiB7Ci0gICAgcmV0dXJuIG5ldyBTY3JvbGxBbmlt
YXRvcldpbihjbGllbnQpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgU2Nyb2xsQW5pbWF0b3JX
aW4oc2Nyb2xsYWJsZUFyZWEpKTsKIH0KIAogY29uc3QgZG91YmxlIFNjcm9sbEFuaW1hdG9yV2lu
OjphbmltYXRpb25UaW1lckRlbGF5ID0gMC4wMTsKQEAgLTYxLDggKzYxLDggQEAgU2Nyb2xsQW5p
bWF0b3JXaW46OlBlckF4aXNEYXRhOjpQZXJBeGlzRAogfQogCiAKLVNjcm9sbEFuaW1hdG9yV2lu
OjpTY3JvbGxBbmltYXRvcldpbihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkKLSAgICA6IFNjcm9s
bEFuaW1hdG9yKGNsaWVudCkKK1Njcm9sbEFuaW1hdG9yV2luOjpTY3JvbGxBbmltYXRvcldpbihT
Y3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCisgICAgOiBTY3JvbGxBbmltYXRvcihzY3Jv
bGxhYmxlQXJlYSkKICAgICAsIG1faG9yaXpvbnRhbERhdGEodGhpcywgJm1fY3VycmVudFBvc1gp
CiAgICAgLCBtX3ZlcnRpY2FsRGF0YSh0aGlzLCAmbV9jdXJyZW50UG9zWSkKIHsKQEAgLTgyLDcg
KzgyLDcgQEAgYm9vbCBTY3JvbGxBbmltYXRvcldpbjo6c2Nyb2xsKFNjcm9sbGJhcgogCiAgICAg
Ly8gVGhpcyBpcyBhbiBhbmltYXRhYmxlIHNjcm9sbC4gIENhbGN1bGF0ZSB0aGUgc2Nyb2xsIGRl
bHRhLgogICAgIFBlckF4aXNEYXRhKiBkYXRhID0gKG9yaWVudGF0aW9uID09IFZlcnRpY2FsU2Ny
b2xsYmFyKSA/ICZtX3ZlcnRpY2FsRGF0YSA6ICZtX2hvcml6b250YWxEYXRhOwotICAgIGZsb2F0
IG5ld1BvcyA9IHN0ZDo6bWF4KHN0ZDo6bWluKGRhdGEtPm1fZGVzaXJlZFBvcyArIChzdGVwICog
bXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZsb2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6ZShvcmll
bnRhdGlvbikpKSwgMC4wZik7CisgICAgZmxvYXQgbmV3UG9zID0gc3RkOjptYXgoc3RkOjptaW4o
ZGF0YS0+bV9kZXNpcmVkUG9zICsgKHN0ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNjcm9sbFNpemUob3JpZW50YXRpb24pKSksIDAuMGYpOwog
ICAgIGlmIChuZXdQb3MgPT0gZGF0YS0+bV9kZXNpcmVkUG9zKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgZGF0YS0+bV9kZXNpcmVkUG9zID0gbmV3UG9zOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3JXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvcldpbi5oCShyZXZpc2lvbiA3NjM1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yV2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxBbmlt
YXRvcldpbiA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CiBwdWJsaWM6Ci0gICAgU2Nyb2xsQW5p
bWF0b3JXaW4oU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgU2Nyb2xsQW5pbWF0b3JXaW4oU2Nyb2xs
YWJsZUFyZWEqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvcldpbigpOwogCiAgICAgdmly
dHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHks
IGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Nyw3ICszODcsNyBAQCBi
b29sIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gCiAgICAgaWYgKHBsYXRmb3Jt
V2lkZ2V0KCkpCiAgICAgICAgIHJldHVybiBwbGF0Zm9ybVNjcm9sbChkaXJlY3Rpb24sIGdyYW51
bGFyaXR5KTsKIAotICAgIHJldHVybiBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXJlY3Rpb24s
IGdyYW51bGFyaXR5KTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rp
b24sIGdyYW51bGFyaXR5KTsKIH0KIAogYm9vbCBTY3JvbGxWaWV3Ojpsb2dpY2FsU2Nyb2xsKFNj
cm9sbExvZ2ljYWxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxh
cml0eSkKQEAgLTU0OCw3ICs1NDgsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJh
cnMoY29uc3QgCiAgICAgICAgIHVwZGF0ZVNjcm9sbENvcm5lcigpOwogICAgIH0KIAotICAgIFNj
cm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQo
c2Nyb2xsLndpZHRoKCkgKyBtX3Njcm9sbE9yaWdpbi54KCksIHNjcm9sbC5oZWlnaHQoKSArIG1f
c2Nyb2xsT3JpZ2luLnkoKSkpOworICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb09mZnNldFdp
dGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChzY3JvbGwud2lkdGgoKSArIG1fc2Nyb2xsT3JpZ2lu
LngoKSwgc2Nyb2xsLmhlaWdodCgpICsgbV9zY3JvbGxPcmlnaW4ueSgpKSk7CiAKICAgICBtX2lu
VXBkYXRlU2Nyb2xsYmFycyA9IGZhbHNlOwogfQpAQCAtNzUyLDkgKzc1Miw5IEBAIHZvaWQgU2Ny
b2xsVmlldzo6d2hlZWxFdmVudChQbGF0Zm9ybVdoZWUKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChkZWx0YVkpCi0gICAgICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxVcCwg
U2Nyb2xsQnlQaXhlbCwgZGVsdGFZKTsKKyAgICAgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3Jv
bGwoU2Nyb2xsVXAsIFNjcm9sbEJ5UGl4ZWwsIGRlbHRhWSk7CiAgICAgICAgIGlmIChkZWx0YVgp
Ci0gICAgICAgICAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxMZWZ0LCBTY3JvbGxC
eVBpeGVsLCBkZWx0YVgpOworICAgICAgICAgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3Jv
bGxMZWZ0LCBTY3JvbGxCeVBpeGVsLCBkZWx0YVgpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcg
QEAKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNs
dWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKQEAgLTU0LDE2ICs1
NCwxNiBAQCBjbGFzcyBIb3N0V2luZG93OwogY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xh
c3MgU2Nyb2xsYmFyOwogCi1jbGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCwgcHVibGlj
IFNjcm9sbGJhckNsaWVudCB7CitjbGFzcyBTY3JvbGxWaWV3IDogcHVibGljIFdpZGdldCwgcHVi
bGljIFNjcm9sbGFibGVBcmVhIHsKIHB1YmxpYzoKICAgICB+U2Nyb2xsVmlldygpOwogCi0gICAg
Ly8gU2Nyb2xsYmFyQ2xpZW50IGZ1bmN0aW9ucy4gIEZyYW1lVmlldyBvdmVycmlkZXMgdGhlIG90
aGVycy4KKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBmdW5jdGlvbnMuICBGcmFtZVZpZXcgb3ZlcnJp
ZGVzIHRoZSBvdGhlcnMuCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRp
b24oU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChj
b25zdCBJbnRQb2ludCYpOwogICAgIAotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYmFyQ2xp
ZW50LgorICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBvdmVy
cmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCiAgICAgdmlydHVhbCB2
b2lkIHNjcm9sbFRvKGNvbnN0IEludFNpemUmIG5ld09mZnNldCk7CiAKICAgICAvLyBUaGUgd2lu
ZG93IHRoYXRzIGhvc3RzIHRoZSBTY3JvbGxWaWV3LiBUaGUgU2Nyb2xsVmlldyB3aWxsIGNvbW11
bmljYXRlIHNjcm9sbHMgYW5kIHJlcGFpbnRzIHRvIHRoZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNpb24gNzYzNTYpCShmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5jcHA6NzYzNTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICogCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNjcm9sbGJhckNs
aWVudC5oIgorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hl
ZWxFdmVudC5oIgorI2luY2x1ZGUgIlNjcm9sbEFuaW1hdG9yLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworU2Nyb2xsYmFyQ2xpZW50OjpTY3JvbGxiYXJDbGllbnQoKQorICAgIDogbV9zY3Jv
bGxBbmltYXRvcihTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKHRoaXMpKQoreworfQorCitTY3JvbGxi
YXJDbGllbnQ6On5TY3JvbGxiYXJDbGllbnQoKQoreworfQorCitib29sIFNjcm9sbGJhckNsaWVu
dDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQoreworICAgIFNjcm9sbGJhck9yaWVudGF0aW9u
IG9yaWVudGF0aW9uOworICAgIFNjcm9sbGJhciogc2Nyb2xsYmFyOworICAgIGlmIChkaXJlY3Rp
b24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pIHsKKyAgICAgICAgb3Jp
ZW50YXRpb24gPSBWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICAgICAgc2Nyb2xsYmFyID0gdmVydGlj
YWxTY3JvbGxiYXIoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBvcmllbnRhdGlvbiA9IEhvcml6
b250YWxTY3JvbGxiYXI7CisgICAgICAgIHNjcm9sbGJhciA9IGhvcml6b250YWxTY3JvbGxiYXIo
KTsKKyAgICB9CisKKyAgICBpZiAoIXNjcm9sbGJhcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZmxvYXQgc3RlcCA9IDA7CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNh
c2UgU2Nyb2xsQnlMaW5lOgorICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT5saW5lU3RlcCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNjcm9sbEJ5UGFnZToKKyAgICAgICAgc3RlcCA9IHNj
cm9sbGJhci0+cGFnZVN0ZXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeURv
Y3VtZW50OgorICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT50b3RhbFNpemUoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTY3JvbGxCeVBpeGVsOgorICAgICAgICBzdGVwID0gc2Nyb2xsYmFy
LT5waXhlbFN0ZXAoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGRpcmVjdGlv
biA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsTGVmdCkKKyAgICAgICAgbXVsdGlw
bGllciA9IC1tdWx0aXBsaWVyOworCisgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3ItPnNjcm9s
bChvcmllbnRhdGlvbiwgZ3JhbnVsYXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOworfQorCit2b2lk
IFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIG9mZnNldCkKK3sKKyAgICBtX3Njcm9sbEFuaW1hdG9yLT5zY3JvbGxUb09mZnNl
dFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKK30KKwordm9pZCBTY3JvbGxiYXJDbGllbnQ6OnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRh
dGlvbiwgZmxvYXQgb2Zmc2V0KQoreworICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFs
U2Nyb2xsYmFyKQorICAgICAgICBzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNl
dCk7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9m
ZnNldCk7Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1hPZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGZsb2F0IHgpCit7CisgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KEZsb2F0UG9pbnQoeCwgbV9zY3JvbGxBbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7
Cit9CisKK3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0
aW9uKGZsb2F0IHkpCit7CisgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0
UG9pbnQobV9zY3JvbGxBbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCkueCgpLCB5KSk7Cit9CisK
K3ZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0
IEludFBvaW50JiBvZmZzZXQpCit7CisgICAgLy8gVGVsbCB0aGUgZGVyaXZlZCBjbGFzcyB0byBz
Y3JvbGwgaXRzIGNvbnRlbnRzLgorICAgIHNldFNjcm9sbE9mZnNldChvZmZzZXQpOworCisgICAg
Ly8gVGVsbCB0aGUgc2Nyb2xsYmFycyB0byB1cGRhdGUgdGhlaXIgdGh1bWIgcG9zdGlvbnMuCisg
ICAgaWYgKFNjcm9sbGJhciogaG9yaXpvbnRhbFNjcm9sbGJhciA9IHRoaXMtPmhvcml6b250YWxT
Y3JvbGxiYXIoKSkKKyAgICAgICAgaG9yaXpvbnRhbFNjcm9sbGJhci0+b2Zmc2V0RGlkQ2hhbmdl
KCk7CisgICAgaWYgKFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIgPSB0aGlzLT52ZXJ0aWNh
bFNjcm9sbGJhcigpKQorICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhci0+b2Zmc2V0RGlkQ2hhbmdl
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
MjksMjQgKzMwLDI1IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNj
cm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAKICNpbmNsdWRl
ICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsQW5pbWF0b3IuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNjcm9sbGJhckNsaWVudDo6U2Nyb2xsYmFyQ2xpZW50KCkKK1Nj
cm9sbGFibGVBcmVhOjpTY3JvbGxhYmxlQXJlYSgpCiAgICAgOiBtX3Njcm9sbEFuaW1hdG9yKFNj
cm9sbEFuaW1hdG9yOjpjcmVhdGUodGhpcykpCiB7CiB9CiAKLVNjcm9sbGJhckNsaWVudDo6flNj
cm9sbGJhckNsaWVudCgpCitTY3JvbGxhYmxlQXJlYTo6flNjcm9sbGFibGVBcmVhKCkKIHsKIH0K
IAotYm9vbCBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9u
LCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKK2Jvb2wg
U2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZGlyZWN0aW9uLCBTY3JvbGxH
cmFudWxhcml0eSBncmFudWxhcml0eSwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKICAgICBTY3JvbGxiYXIqIHNjcm9sbGJhcjsKQEAg
LTgzLDEyICs4NSwxMiBAQCBib29sIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKFNjcm9sbERpcmVj
CiAgICAgcmV0dXJuIG1fc2Nyb2xsQW5pbWF0b3ItPnNjcm9sbChvcmllbnRhdGlvbiwgZ3JhbnVs
YXJpdHksIHN0ZXAsIG11bHRpcGxpZXIpOwogfQogCi12b2lkIFNjcm9sbGJhckNsaWVudDo6c2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKGNvbnN0IEZsb2F0UG9pbnQmIG9mZnNldCkKK3Zv
aWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50JiBvZmZzZXQpCiB7CiAgICAgbV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CiAKLXZvaWQgU2Nyb2xsYmFyQ2xpZW50Ojpz
Y3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb24sIGZsb2F0IG9mZnNldCkKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0
V2l0aG91dEFuaW1hdGlvbihTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgZmxvYXQg
b2Zmc2V0KQogewogICAgIGlmIChvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKQog
ICAgICAgICBzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CkBAIC05Niwx
NyArOTgsMTcgQEAgdm9pZCBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvT2Zmc2V0V2l0aAogICAg
ICAgICBzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKG9mZnNldCk7CiB9CiAKLXZvaWQg
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0IHgp
Cit2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZs
b2F0IHgpCiB7CiAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQo
eCwgbV9zY3JvbGxBbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCkueSgpKSk7CiB9CiAKLXZvaWQg
U2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0IHkp
Cit2b2lkIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZs
b2F0IHkpCiB7CiAgICAgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKEZsb2F0UG9pbnQo
bV9zY3JvbGxBbmltYXRvci0+Y3VycmVudFBvc2l0aW9uKCkueCgpLCB5KSk7CiB9CiAKLXZvaWQg
U2Nyb2xsYmFyQ2xpZW50OjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBv
aW50JiBvZmZzZXQpCit2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRTY3JvbGxPZmZzZXRGcm9tQW5p
bWF0aW9uKGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7CiAgICAgLy8gVGVsbCB0aGUgZGVyaXZl
ZCBjbGFzcyB0byBzY3JvbGwgaXRzIGNvbnRlbnRzLgogICAgIHNldFNjcm9sbE9mZnNldChvZmZz
ZXQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZp
c2lvbiA3NjM1NikJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50
Lmg6NzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY3JvbGxiYXJDbGllbnRfaAorI2RlZmluZSBT
Y3JvbGxiYXJDbGllbnRfaAorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlNjcm9s
bGJhci5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OworY2xhc3MgU2Ny
b2xsQW5pbWF0b3I7CisKK2NsYXNzIFNjcm9sbGJhckNsaWVudCB7CitwdWJsaWM6CisgICAgU2Ny
b2xsYmFyQ2xpZW50KCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYmFyQ2xpZW50KCk7CisKKyAgICBi
b29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5LCBmbG9hdCBtdWx0
aXBsaWVyID0gMSk7CisgICAgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oY29u
c3QgRmxvYXRQb2ludCYpOworICAgIHZvaWQgc2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KFNjcm9sbGJhck9yaWVudGF0aW9uLCBmbG9hdCBvZmZzZXQpOworICAgIHZvaWQgc2Nyb2xsVG9Y
T2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB4KTsKKyAgICB2b2lkIHNjcm9sbFRvWU9mZnNl
dFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeCk7CisKKyAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXpl
KFNjcm9sbGJhck9yaWVudGF0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBpbnQgc2Nyb2xs
UG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlk
YXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0JikgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2Nyb2xs
YmFyQ29ybmVyUHJlc2VudCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0VGlja21h
cmtzKFZlY3RvcjxJbnRSZWN0PiYpIGNvbnN0IHsgfQorCisgICAgLy8gVGhpcyBmdW5jdGlvbiBz
aG91bGQgYmUgb3ZlcnJpZGVuIGJ5IHN1YmNsYXNzZXMgdG8gcGVyZm9ybSB0aGUgYWN0dWFsCisg
ICAgLy8gc2Nyb2xsIG9mIHRoZSBjb250ZW50LgorICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxP
ZmZzZXQoY29uc3QgSW50UG9pbnQmKSA9IDA7CisKKworICAgIC8vIENvbnZlcnQgcG9pbnRzIGFu
ZCByZWN0cyBiZXR3ZWVuIHRoZSBzY3JvbGxiYXIgYW5kIGl0cyBjb250YWluaW5nIHZpZXcuCisg
ICAgLy8gVGhlIGNsaWVudCBuZWVkcyB0byBpbXBsZW1lbnQgdGhlc2UgaW4gb3JkZXIgdG8gYmUg
YXdhcmUgb2YgbGF5b3V0IGVmZmVjdHMKKyAgICAvLyBsaWtlIENTUyB0cmFuc2Zvcm1zLgorICAg
IHZpcnR1YWwgSW50UmVjdCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29u
c3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHNjcm9sbGJhclJlY3QpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRUb0Nv
bnRhaW5pbmdWaWV3KHNjcm9sbGJhclJlY3QpOworICAgIH0KKyAgICB2aXJ0dWFsIEludFJlY3Qg
Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKGNvbnN0IFNjcm9sbGJhciogc2Ny
b2xsYmFyLCBjb25zdCBJbnRSZWN0JiBwYXJlbnRSZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHNjcm9sbGJhci0+V2lkZ2V0Ojpjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KHBhcmVu
dFJlY3QpOworICAgIH0KKyAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRGcm9tU2Nyb2xsYmFy
VG9Db250YWluaW5nVmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UG9p
bnQmIHNjcm9sbGJhclBvaW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNjcm9sbGJh
ci0+V2lkZ2V0Ojpjb252ZXJ0VG9Db250YWluaW5nVmlldyhzY3JvbGxiYXJQb2ludCk7CisgICAg
fQorICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xs
YmFyKGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRQb2ludCYgcGFyZW50UG9p
bnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZl
cnRGcm9tQ29udGFpbmluZ1ZpZXcocGFyZW50UG9pbnQpOworICAgIH0KKworICAgIHZpcnR1YWwg
U2Nyb2xsYmFyKiBob3Jpem9udGFsU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgU2Nyb2xsYmFyKiB2ZXJ0aWNhbFNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKworcHJpdmF0ZToKKyAgICAvLyBOT1RFOiBPbmx5IGNhbGxlZCBmcm9tIHRoZSBTY3JvbGxB
bmltYXRvci4KKyAgICBmcmllbmQgY2xhc3MgU2Nyb2xsQW5pbWF0b3I7CisgICAgdm9pZCBzZXRT
Y3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBvaW50Jik7CisKKyAgICBPd25QdHI8
U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0b3I7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBTY3JvbGxiYXJDbGllbnRfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDggKzIz
LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgU2Nyb2xsYmFyQ2xpZW50X2gK
LSNkZWZpbmUgU2Nyb2xsYmFyQ2xpZW50X2gKKyNpZm5kZWYgU2Nyb2xsYWJsZUFyZWFfaAorI2Rl
ZmluZSBTY3JvbGxhYmxlQXJlYV9oCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsYmFyLmgiCkBAIC0zNiwxMCArMzYsMTAgQEAgY2xhc3MgRmxvYXRQb2ludDsKIGNsYXNz
IFBsYXRmb3JtV2hlZWxFdmVudDsKIGNsYXNzIFNjcm9sbEFuaW1hdG9yOwogCi1jbGFzcyBTY3Jv
bGxiYXJDbGllbnQgeworY2xhc3MgU2Nyb2xsYWJsZUFyZWEgewogcHVibGljOgotICAgIFNjcm9s
bGJhckNsaWVudCgpOwotICAgIHZpcnR1YWwgflNjcm9sbGJhckNsaWVudCgpOworICAgIFNjcm9s
bGFibGVBcmVhKCk7CisgICAgdmlydHVhbCB+U2Nyb2xsYWJsZUFyZWEoKTsKIAogICAgIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIgPSAxKTsKICAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihjb25zdCBG
bG9hdFBvaW50Jik7CkBAIC05Miw0ICs5Miw0IEBAIHByaXZhdGU6CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAotI2VuZGlmIC8vIFNjcm9sbGJhckNsaWVudF9oCisjZW5kaWYgLy8gU2Nyb2xs
YWJsZUFyZWFfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuY3BwCShyZXZp
c2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE0ICsyNiwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhci5oIgogCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVNjcm9sbGJhci5o
IgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5U2Ny
b2xsYmFyLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQu
aCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1l
LmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC00OSw5ICs0OSw5IEBAIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiAhUExBVEZPUk0oRUZMKQotUGFz
c1JlZlB0cjxTY3JvbGxiYXI+IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9s
bGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Ny
b2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBTY3JvbGxiYXI6
OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNj
cm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXpl
KQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRp
b24sIHNpemUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhcihzY3JvbGxhYmxl
QXJlYSwgb3JpZW50YXRpb24sIHNpemUpKTsKIH0KICNlbmRpZgogCkBAIC02MSw5ICs2MSw5IEBA
IGludCBTY3JvbGxiYXI6Om1heE92ZXJsYXBCZXR3ZWVuUGFnZXMoKQogICAgIHJldHVybiBtYXhP
dmVybGFwQmV0d2VlblBhZ2VzOwogfQogCi1TY3JvbGxiYXI6OlNjcm9sbGJhcihTY3JvbGxiYXJD
bGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJh
ckNvbnRyb2xTaXplIGNvbnRyb2xTaXplLAorU2Nyb2xsYmFyOjpTY3JvbGxiYXIoU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwg
U2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUsCiAgICAgICAgICAgICAgICAgICAgICBT
Y3JvbGxiYXJUaGVtZSogdGhlbWUpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgOiBtX3Nj
cm9sbGFibGVBcmVhKHNjcm9sbGFibGVBcmVhKQogICAgICwgbV9vcmllbnRhdGlvbihvcmllbnRh
dGlvbikKICAgICAsIG1fY29udHJvbFNpemUoY29udHJvbFNpemUpCiAgICAgLCBtX3RoZW1lKHRo
ZW1lKQpAQCAtMTA2LDkgKzEwNiw5IEBAIFNjcm9sbGJhcjo6flNjcm9sbGJhcigpCiAKIHZvaWQg
U2Nyb2xsYmFyOjpvZmZzZXREaWRDaGFuZ2UoKQogewotICAgIEFTU0VSVChtX2NsaWVudCk7Cisg
ICAgQVNTRVJUKG1fc2Nyb2xsYWJsZUFyZWEpOwogCi0gICAgZmxvYXQgcG9zaXRpb24gPSBzdGF0
aWNfY2FzdDxmbG9hdD4obV9jbGllbnQtPnNjcm9sbFBvc2l0aW9uKHRoaXMpKTsKKyAgICBmbG9h
dCBwb3NpdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3Njcm9sbGFibGVBcmVhLT5zY3JvbGxQ
b3NpdGlvbih0aGlzKSk7CiAgICAgaWYgKHBvc2l0aW9uID09IG1fY3VycmVudFBvcykKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xOTYsNyArMTk2LDcgQEAgdm9pZCBTY3JvbGxiYXI6OmF1dG9zY3Jv
bGxQcmVzc2VkUGFydChkbwogICAgIH0KIAogICAgIC8vIEhhbmRsZSB0aGUgYXJyb3dzIGFuZCB0
cmFjay4KLSAgICBpZiAoY2xpZW50KCktPnNjcm9sbChwcmVzc2VkUGFydFNjcm9sbERpcmVjdGlv
bigpLCBwcmVzc2VkUGFydFNjcm9sbEdyYW51bGFyaXR5KCkpKQorICAgIGlmIChzY3JvbGxhYmxl
QXJlYSgpLT5zY3JvbGwocHJlc3NlZFBhcnRTY3JvbGxEaXJlY3Rpb24oKSwgcHJlc3NlZFBhcnRT
Y3JvbGxHcmFudWxhcml0eSgpKSkKICAgICAgICAgc3RhcnRUaW1lcklmTmVlZGVkKGRlbGF5KTsK
IH0KIApAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgU2Nyb2xsYmFyOjptb3ZlVGh1bWIoaW50IHBv
cykKICAgICAKICAgICBpZiAoZGVsdGEpIHsKICAgICAgICAgZmxvYXQgbmV3UG9zaXRpb24gPSBz
dGF0aWNfY2FzdDxmbG9hdD4odGh1bWJQb3MgKyBkZWx0YSkgKiBtYXhpbXVtKCkgLyAodHJhY2tM
ZW4gLSB0aHVtYkxlbik7Ci0gICAgICAgIGNsaWVudCgpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24obV9vcmllbnRhdGlvbiwgbmV3UG9zaXRpb24pOworICAgICAgICBzY3JvbGxhYmxl
QXJlYSgpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRhdGlvbiwgbmV3
UG9zaXRpb24pOwogICAgIH0KIH0KIApAQCAtMzAxLDcgKzMwMSw3IEBAIGJvb2wgU2Nyb2xsYmFy
Ojptb3VzZU1vdmVkKGNvbnN0IFBsYXRmb3IKIHsKICAgICBpZiAobV9wcmVzc2VkUGFydCA9PSBU
aHVtYlBhcnQpIHsKICAgICAgICAgaWYgKHRoZW1lKCktPnNob3VsZFNuYXBCYWNrVG9EcmFnT3Jp
Z2luKHRoaXMsIGV2dCkpCi0gICAgICAgICAgICBjbGllbnQoKS0+c2Nyb2xsVG9PZmZzZXRXaXRo
b3V0QW5pbWF0aW9uKG1fb3JpZW50YXRpb24sIG1fZHJhZ09yaWdpbik7CisgICAgICAgICAgICBz
Y3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24obV9vcmllbnRh
dGlvbiwgbV9kcmFnT3JpZ2luKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlVGh1
bWIobV9vcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gCiAgICAgICAgICAgICAg
ICAgICAgICAgY29udmVydEZyb21Db250YWluaW5nV2luZG93KGV2dC5wb3MoKSkueCgpIDoKQEAg
LTQzMyw3ICs0MzMsNyBAQCB2b2lkIFNjcm9sbGJhcjo6c2V0RW5hYmxlZChib29sIGUpCiAKIGJv
b2wgU2Nyb2xsYmFyOjppc1dpbmRvd0FjdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fY2xp
ZW50ICYmIG1fY2xpZW50LT5pc0FjdGl2ZSgpOworICAgIHJldHVybiBtX3Njcm9sbGFibGVBcmVh
ICYmIG1fc2Nyb2xsYWJsZUFyZWEtPmlzQWN0aXZlKCk7CiB9CiAgICAgCiBBWE9iamVjdENhY2hl
KiBTY3JvbGxiYXI6OmF4T2JqZWN0Q2FjaGUoKSBjb25zdApAQCAtNDQ5LDM4ICs0NDksMzggQEAg
dm9pZCBTY3JvbGxiYXI6OmludmFsaWRhdGVSZWN0KGNvbnN0IEludAogewogICAgIGlmIChzdXBw
cmVzc0ludmFsaWRhdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKG1fY2xpZW50KQot
ICAgICAgICBtX2NsaWVudC0+aW52YWxpZGF0ZVNjcm9sbGJhclJlY3QodGhpcywgcmVjdCk7Cisg
ICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIG1fc2Nyb2xsYWJsZUFyZWEtPmludmFs
aWRhdGVTY3JvbGxiYXJSZWN0KHRoaXMsIHJlY3QpOwogfQogCiBJbnRSZWN0IFNjcm9sbGJhcjo6
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYgbG9jYWxSZWN0KSBjb25zdAog
ewotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5jb252ZXJ0RnJv
bVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcodGhpcywgbG9jYWxSZWN0KTsKKyAgICBpZiAobV9z
Y3JvbGxhYmxlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1fc2Nyb2xsYWJsZUFyZWEtPmNvbnZlcnRG
cm9tU2Nyb2xsYmFyVG9Db250YWluaW5nVmlldyh0aGlzLCBsb2NhbFJlY3QpOwogCiAgICAgcmV0
dXJuIFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxSZWN0KTsKIH0KIAogSW50
UmVjdCBTY3JvbGxiYXI6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXcoY29uc3QgSW50UmVjdCYg
cGFyZW50UmVjdCkgY29uc3QKIHsKLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIHJldHVybiBt
X2NsaWVudC0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBhcmVu
dFJlY3QpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVhKQorICAgICAgICByZXR1cm4gbV9zY3Jv
bGxhYmxlQXJlYS0+Y29udmVydEZyb21Db250YWluaW5nVmlld1RvU2Nyb2xsYmFyKHRoaXMsIHBh
cmVudFJlY3QpOwogCiAgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmll
dyhwYXJlbnRSZWN0KTsKIH0KIAogSW50UG9pbnQgU2Nyb2xsYmFyOjpjb252ZXJ0VG9Db250YWlu
aW5nVmlldyhjb25zdCBJbnRQb2ludCYgbG9jYWxQb2ludCkgY29uc3QKIHsKLSAgICBpZiAobV9j
bGllbnQpCi0gICAgICAgIHJldHVybiBtX2NsaWVudC0+Y29udmVydEZyb21TY3JvbGxiYXJUb0Nv
bnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUG9pbnQpOworICAgIGlmIChtX3Njcm9sbGFibGVBcmVh
KQorICAgICAgICByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYS0+Y29udmVydEZyb21TY3JvbGxiYXJU
b0NvbnRhaW5pbmdWaWV3KHRoaXMsIGxvY2FsUG9pbnQpOwogCiAgICAgcmV0dXJuIFdpZGdldDo6
Y29udmVydFRvQ29udGFpbmluZ1ZpZXcobG9jYWxQb2ludCk7CiB9CiAKIEludFBvaW50IFNjcm9s
bGJhcjo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhjb25zdCBJbnRQb2ludCYgcGFyZW50UG9p
bnQpIGNvbnN0CiB7Ci0gICAgaWYgKG1fY2xpZW50KQotICAgICAgICByZXR1cm4gbV9jbGllbnQt
PmNvbnZlcnRGcm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcih0aGlzLCBwYXJlbnRQb2ludCk7
CisgICAgaWYgKG1fc2Nyb2xsYWJsZUFyZWEpCisgICAgICAgIHJldHVybiBtX3Njcm9sbGFibGVB
cmVhLT5jb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIodGhpcywgcGFyZW50UG9p
bnQpOwogCiAgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJl
bnRQb2ludCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkocmV2aXNp
b24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMzEgKzM2LDI2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW50UmVjdDsKLWNsYXNzIFNjcm9sbGJhckNsaWVudDsK
LWNsYXNzIFNjcm9sbGJhclRoZW1lOwogY2xhc3MgUGxhdGZvcm1Nb3VzZUV2ZW50OworY2xhc3Mg
U2Nyb2xsYWJsZUFyZWE7CitjbGFzcyBTY3JvbGxiYXJUaGVtZTsKIAogY2xhc3MgU2Nyb2xsYmFy
IDogcHVibGljIFdpZGdldCB7CiBwdWJsaWM6Ci0gICAgZW51bSBTY3JvbGxTb3VyY2UgewotICAg
ICAgICBGcm9tU2Nyb2xsQW5pbWF0b3IsCi0gICAgICAgIE5vdEZyb21TY3JvbGxBbmltYXRvciwK
LSAgICB9OworICAgIC8vIE11c3QgYmUgaW1wbGVtZW50ZWQgYnkgcGxhdGZvcm1zIHRoYXQgY2Fu
J3Qgc2ltcGx5IHVzZSB0aGUgU2Nyb2xsYmFyIGJhc2UgY2xhc3MuICBSaWdodCBub3cgdGhlIG9u
bHkgcGxhdGZvcm0gdGhhdCBpcyBub3QgdXNpbmcgdGhlIGJhc2UgY2xhc3MgaXMgR1RLLgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlTmF0aXZlU2Nyb2xsYmFyKFNjcm9s
bGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplIHNpemUpOwogCiAgICAgdmlydHVhbCB+U2Nyb2xsYmFyKCk7CiAKLSAgICAvLyBN
dXN0IGJlIGltcGxlbWVudGVkIGJ5IHBsYXRmb3JtcyB0aGF0IGNhbid0IHNpbXBseSB1c2UgdGhl
IFNjcm9sbGJhciBiYXNlIGNsYXNzLiAgUmlnaHQgbm93IHRoZSBvbmx5IHBsYXRmb3JtIHRoYXQg
aXMgbm90IHVzaW5nIHRoZSBiYXNlIGNsYXNzIGlzIEdUSy4KLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTY3JvbGxiYXI+IGNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVu
dCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXpl
IHNpemUpOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRoZSBTY3JvbGxiYXJDbGllbnQgd2hlbiB0aGUg
c2Nyb2xsIG9mZnNldCBjaGFuZ2VzLgorICAgIC8vIENhbGxlZCBieSB0aGUgU2Nyb2xsYWJsZUFy
ZWEgd2hlbiB0aGUgc2Nyb2xsIG9mZnNldCBjaGFuZ2VzLgogICAgIHZvaWQgb2Zmc2V0RGlkQ2hh
bmdlKCk7CiAKICAgICBzdGF0aWMgaW50IHBpeGVsc1BlckxpbmVTdGVwKCkgeyByZXR1cm4gNDA7
IH0KICAgICBzdGF0aWMgZmxvYXQgbWluRnJhY3Rpb25Ub1N0ZXBXaGVuUGFnaW5nKCkgeyByZXR1
cm4gMC44NzVmOyB9CiAgICAgc3RhdGljIGludCBtYXhPdmVybGFwQmV0d2VlblBhZ2VzKCk7CiAK
LSAgICB2b2lkIHNldENsaWVudChTY3JvbGxiYXJDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9
IGNsaWVudDsgfQotICAgIFNjcm9sbGJhckNsaWVudCogY2xpZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jbGllbnQ7IH0KKyAgICB2b2lkIGRpc2Nvbm5lY3RGcm9tU2Nyb2xsYWJsZUFyZWEoKSB7IG1f
c2Nyb2xsYWJsZUFyZWEgPSAwOyB9CisgICAgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVh
KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlQXJlYTsgfQogCiAgICAgdmlydHVhbCBib29s
IGlzQ3VzdG9tU2Nyb2xsYmFyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBTY3JvbGxi
YXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247
IH0KQEAgLTEzMCw3ICsxMjUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252
ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKIHByb3RlY3Rl
ZDoKLSAgICBTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24s
IFNjcm9sbGJhckNvbnRyb2xTaXplLCBTY3JvbGxiYXJUaGVtZSogPSAwKTsKKyAgICBTY3JvbGxi
YXIoU2Nyb2xsYWJsZUFyZWEqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJv
bFNpemUsIFNjcm9sbGJhclRoZW1lKiA9IDApOwogCiAgICAgdm9pZCB1cGRhdGVUaHVtYigpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7CkBAIC0xNDUsNyArMTQwLDcg
QEAgcHJvdGVjdGVkOgogICAgIAogICAgIHZvaWQgbW92ZVRodW1iKGludCBwb3MpOwogCi0gICAg
U2Nyb2xsYmFyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBTY3JvbGxhYmxlQXJlYSogbV9zY3JvbGxh
YmxlQXJlYTsKICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwogICAgIFNj
cm9sbGJhckNvbnRyb2xTaXplIG1fY29udHJvbFNpemU7CiAgICAgU2Nyb2xsYmFyVGhlbWUqIG1f
dGhlbWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhckNsaWVudC5j
cHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFy
Q2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxMjEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIAotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKiAKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCi0KLSNpbmNsdWRlICJGbG9h
dFBvaW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCi0jaW5jbHVkZSAiU2Ny
b2xsQW5pbWF0b3IuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1TY3JvbGxiYXJDbGllbnQ6
OlNjcm9sbGJhckNsaWVudCgpCi0gICAgOiBtX3Njcm9sbEFuaW1hdG9yKFNjcm9sbEFuaW1hdG9y
OjpjcmVhdGUodGhpcykpCi17Ci19Ci0KLVNjcm9sbGJhckNsaWVudDo6flNjcm9sbGJhckNsaWVu
dCgpCi17Ci19Ci0KLWJvb2wgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwoU2Nyb2xsRGlyZWN0aW9u
IGRpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIpCi17Ci0gICAgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgU2Nyb2xs
YmFyKiBzY3JvbGxiYXI7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rp
b24gPT0gU2Nyb2xsRG93bikgewotICAgICAgICBvcmllbnRhdGlvbiA9IFZlcnRpY2FsU2Nyb2xs
YmFyOwotICAgICAgICBzY3JvbGxiYXIgPSB2ZXJ0aWNhbFNjcm9sbGJhcigpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG9yaWVudGF0aW9uID0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKLSAgICAgICAg
c2Nyb2xsYmFyID0gaG9yaXpvbnRhbFNjcm9sbGJhcigpOwotICAgIH0KLQotICAgIGlmICghc2Ny
b2xsYmFyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmbG9hdCBzdGVwID0gMDsKLSAg
ICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7Ci0gICAgY2FzZSBTY3JvbGxCeUxpbmU6Ci0gICAgICAg
IHN0ZXAgPSBzY3JvbGxiYXItPmxpbmVTdGVwKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
U2Nyb2xsQnlQYWdlOgotICAgICAgICBzdGVwID0gc2Nyb2xsYmFyLT5wYWdlU3RlcCgpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5RG9jdW1lbnQ6Ci0gICAgICAgIHN0ZXAgPSBz
Y3JvbGxiYXItPnRvdGFsU2l6ZSgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFNjcm9sbEJ5
UGl4ZWw6Ci0gICAgICAgIHN0ZXAgPSBzY3JvbGxiYXItPnBpeGVsU3RlcCgpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBpZiAoZGlyZWN0aW9uID09IFNjcm9sbFVwIHx8IGRpcmVjdGlv
biA9PSBTY3JvbGxMZWZ0KQotICAgICAgICBtdWx0aXBsaWVyID0gLW11bHRpcGxpZXI7Ci0KLSAg
ICByZXR1cm4gbV9zY3JvbGxBbmltYXRvci0+c2Nyb2xsKG9yaWVudGF0aW9uLCBncmFudWxhcml0
eSwgc3RlcCwgbXVsdGlwbGllcik7Ci19Ci0KLXZvaWQgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGxU
b09mZnNldFdpdGhvdXRBbmltYXRpb24oY29uc3QgRmxvYXRQb2ludCYgb2Zmc2V0KQotewotICAg
IG1fc2Nyb2xsQW5pbWF0b3ItPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvZmZzZXQp
OwotfQotCi12b2lkIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0
aW9uKFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBmbG9hdCBvZmZzZXQpCi17Ci0g
ICAgaWYgKG9yaWVudGF0aW9uID09IEhvcml6b250YWxTY3JvbGxiYXIpCi0gICAgICAgIHNjcm9s
bFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKLSAgICBlbHNlCi0gICAgICAgIHNj
cm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24ob2Zmc2V0KTsKLX0KLQotdm9pZCBTY3JvbGxi
YXJDbGllbnQ6OnNjcm9sbFRvWE9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeCkKLXsKLSAg
ICBzY3JvbGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludCh4LCBtX3Njcm9sbEFu
aW1hdG9yLT5jdXJyZW50UG9zaXRpb24oKS55KCkpKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJDbGll
bnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oZmxvYXQgeSkKLXsKLSAgICBzY3Jv
bGxUb09mZnNldFdpdGhvdXRBbmltYXRpb24oRmxvYXRQb2ludChtX3Njcm9sbEFuaW1hdG9yLT5j
dXJyZW50UG9zaXRpb24oKS54KCksIHkpKTsKLX0KLQotdm9pZCBTY3JvbGxiYXJDbGllbnQ6OnNl
dFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmIG9mZnNldCkKLXsKLSAg
ICAvLyBUZWxsIHRoZSBkZXJpdmVkIGNsYXNzIHRvIHNjcm9sbCBpdHMgY29udGVudHMuCi0gICAg
c2V0U2Nyb2xsT2Zmc2V0KG9mZnNldCk7Ci0KLSAgICAvLyBUZWxsIHRoZSBzY3JvbGxiYXJzIHRv
IHVwZGF0ZSB0aGVpciB0aHVtYiBwb3N0aW9ucy4KLSAgICBpZiAoU2Nyb2xsYmFyKiBob3Jpem9u
dGFsU2Nyb2xsYmFyID0gdGhpcy0+aG9yaXpvbnRhbFNjcm9sbGJhcigpKQotICAgICAgICBob3Jp
em9udGFsU2Nyb2xsYmFyLT5vZmZzZXREaWRDaGFuZ2UoKTsKLSAgICBpZiAoU2Nyb2xsYmFyKiB2
ZXJ0aWNhbFNjcm9sbGJhciA9IHRoaXMtPnZlcnRpY2FsU2Nyb2xsYmFyKCkpCi0gICAgICAgIHZl
cnRpY2FsU2Nyb2xsYmFyLT5vZmZzZXREaWRDaGFuZ2UoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xpZW50LmgJ
KHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFNjcm9sbGJhckNsaWVudF9oCi0j
ZGVmaW5lIFNjcm9sbGJhckNsaWVudF9oCi0KLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIEZsb2F0UG9pbnQ7Ci1jbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7Ci1j
bGFzcyBTY3JvbGxBbmltYXRvcjsKLQotY2xhc3MgU2Nyb2xsYmFyQ2xpZW50IHsKLXB1YmxpYzoK
LSAgICBTY3JvbGxiYXJDbGllbnQoKTsKLSAgICB2aXJ0dWFsIH5TY3JvbGxiYXJDbGllbnQoKTsK
LQotICAgIGJvb2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZs
b2F0IG11bHRpcGxpZXIgPSAxKTsKLSAgICB2b2lkIHNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1h
dGlvbihjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgdm9pZCBzY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24oU2Nyb2xsYmFyT3JpZW50YXRpb24sIGZsb2F0IG9mZnNldCk7Ci0gICAgdm9pZCBz
Y3JvbGxUb1hPZmZzZXRXaXRob3V0QW5pbWF0aW9uKGZsb2F0IHgpOwotICAgIHZvaWQgc2Nyb2xs
VG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihmbG9hdCB4KTsKLQotICAgIHZpcnR1YWwgaW50IHNj
cm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGlu
dCBzY3JvbGxQb3NpdGlvbihTY3JvbGxiYXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVTY3JvbGxiYXJSZWN0KFNjcm9sbGJhciosIGNvbnN0IEludFJlY3QmKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGlzQWN0aXZlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBn
ZXRUaWNrbWFya3MoVmVjdG9yPEludFJlY3Q+JikgY29uc3QgeyB9Ci0KLSAgICAvLyBUaGlzIGZ1
bmN0aW9uIHNob3VsZCBiZSBvdmVycmlkZW4gYnkgc3ViY2xhc3NlcyB0byBwZXJmb3JtIHRoZSBh
Y3R1YWwKLSAgICAvLyBzY3JvbGwgb2YgdGhlIGNvbnRlbnQuCi0gICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpID0gMDsKLQotCi0gICAgLy8gQ29udmVydCBw
b2ludHMgYW5kIHJlY3RzIGJldHdlZW4gdGhlIHNjcm9sbGJhciBhbmQgaXRzIGNvbnRhaW5pbmcg
dmlldy4KLSAgICAvLyBUaGUgY2xpZW50IG5lZWRzIHRvIGltcGxlbWVudCB0aGVzZSBpbiBvcmRl
ciB0byBiZSBhd2FyZSBvZiBsYXlvdXQgZWZmZWN0cwotICAgIC8vIGxpa2UgQ1NTIHRyYW5zZm9y
bXMuCi0gICAgdmlydHVhbCBJbnRSZWN0IGNvbnZlcnRGcm9tU2Nyb2xsYmFyVG9Db250YWluaW5n
Vmlldyhjb25zdCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgc2Nyb2xsYmFy
UmVjdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdldDo6Y29u
dmVydFRvQ29udGFpbmluZ1ZpZXcoc2Nyb2xsYmFyUmVjdCk7Ci0gICAgfQotICAgIHZpcnR1YWwg
SW50UmVjdCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xs
YmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHBhcmVudFJlY3QpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gc2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRGcm9tQ29udGFpbmluZ1Zp
ZXcocGFyZW50UmVjdCk7Ci0gICAgfQotICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydEZyb21T
Y3JvbGxiYXJUb0NvbnRhaW5pbmdWaWV3KGNvbnN0IFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsYmFyUG9pbnQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5XaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KHNjcm9sbGJhclBvaW50
KTsKLSAgICB9Ci0gICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3
VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFBvaW50JiBw
YXJlbnRQb2ludCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBzY3JvbGxiYXItPldpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nVmlldyhwYXJlbnRQb2ludCk7Ci0gICAgfQotCi0gICAg
dmlydHVhbCBTY3JvbGxiYXIqIGhvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiAw
OyB9Ci0gICAgdmlydHVhbCBTY3JvbGxiYXIqIHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotCi1wcml2YXRlOgotICAgIC8vIE5PVEU6IE9ubHkgY2FsbGVkIGZyb20gdGhl
IFNjcm9sbEFuaW1hdG9yLgotICAgIGZyaWVuZCBjbGFzcyBTY3JvbGxBbmltYXRvcjsKLSAgICB2
b2lkIHNldFNjcm9sbE9mZnNldEZyb21BbmltYXRpb24oY29uc3QgSW50UG9pbnQmKTsKLQotICAg
IE93blB0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNjcm9sbGJhckNsaWVudF9oCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxiYXJUaGVtZUNvbXBvc2l0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYmFyVGhlbWVDb21wb3NpdGUuY3Bw
CShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGJhclRo
ZW1lQ29tcG9zaXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1
ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJT
Y3JvbGxiYXIuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3Jv
bGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZyYW1lbGVzc1Njcm9s
bFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9G
cmFtZWxlc3NTY3JvbGxWaWV3LmgJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRnJhbWVsZXNzU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MSw3ICs2MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29s
IGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JikgPSAwOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaGFuZGxlS2V5RXZlbnQoY29uc3QgUGxhdGZvcm1LZXlib2FyZEV2ZW50
JikgPSAwOwogCi0gICAgICAgIC8vIFNjcm9sbGJhckNsaWVudCBwdWJsaWMgbWV0aG9kczoKKyAg
ICAgICAgLy8gU2Nyb2xsYWJsZUFyZWEgcHVibGljIG1ldGhvZHM6CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBpbnZhbGlkYXRlU2Nyb2xsYmFyUmVjdChTY3JvbGxiYXIqLCBjb25zdCBJbnRSZWN0Jik7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtLmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksOCArMjksOCBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1
ZGUgIlNjcm9sbGJhci5oIgotI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lQ29tcG9zaXRlLmgiCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBA
IC0xMTAsNyArMTEwLDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtOjpwYWludFRpY2tt
YQogCiAgICAgLy8gR2V0IHRoZSB0aWNrbWFya3MgZm9yIHRoZSBmcmFtZXZpZXcuCiAgICAgVmVj
dG9yPEludFJlY3Q+IHRpY2ttYXJrczsKLSAgICBzY3JvbGxiYXItPmNsaWVudCgpLT5nZXRUaWNr
bWFya3ModGlja21hcmtzKTsKKyAgICBzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmdldFRp
Y2ttYXJrcyh0aWNrbWFya3MpOwogICAgIGlmICghdGlja21hcmtzLnNpemUoKSkKICAgICAgICAg
cmV0dXJuOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFy
RWZsLmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwv
U2Nyb2xsYmFyRWZsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTMgKzQyLDEzIEBACiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8
U2Nyb2xsYmFyPiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGll
bnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFNjcm9sbGJhckNv
bnRyb2xTaXplIHNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gU2Nyb2xsYmFyOjpjcmVhdGVO
YXRpdmVTY3JvbGxiYXIoU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhLCBTY3JvbGxiYXJP
cmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSkKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNjcm9sbGJhckVmbChjbGllbnQsIG9yaWVudGF0aW9uLCBz
aXplKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTY3JvbGxiYXJFZmwoc2Nyb2xsYWJsZUFy
ZWEsIG9yaWVudGF0aW9uLCBzaXplKSk7CiB9CiAKLVNjcm9sbGJhckVmbDo6U2Nyb2xsYmFyRWZs
KFNjcm9sbGJhckNsaWVudCogY2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgU2Nyb2xsYmFyQ29udHJvbFNpemUgY29udHJvbFNpemUpCi0gICAgOiBTY3JvbGxiYXIoY2xp
ZW50LCBvcmllbnRhdGlvbiwgY29udHJvbFNpemUpCitTY3JvbGxiYXJFZmw6OlNjcm9sbGJhckVm
bChTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9y
aWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKKyAgICA6IFNjcm9s
bGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIGNvbnRyb2xTaXplKQogICAgICwgbV9s
YXN0UG9zKDApCiAgICAgLCBtX2xhc3RUb3RhbFNpemUoMCkKICAgICAsIG1fbGFzdFZpc2libGVT
aXplKDApCkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHNjcm9sbGJhckVmbEVkamVNZXNz
YWdlKHZvaWQKIAogICAgIG0gPSBzdGF0aWNfY2FzdDxFZGplX01lc3NhZ2VfRmxvYXQqPihtc2cp
OwogICAgIHYgPSBtLT52YWwgKiAodGhhdC0+dG90YWxTaXplKCkgLSB0aGF0LT52aXNpYmxlU2l6
ZSgpKTsKLSAgICB0aGF0LT5jbGllbnQoKS0+c2Nyb2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9u
KHRoYXQtPm9yaWVudGF0aW9uKCksIHYpOworICAgIHRoYXQtPnNjcm9sbGFibGVBcmVhKCktPnNj
cm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbih0aGF0LT5vcmllbnRhdGlvbigpLCB2KTsKIH0K
IAogdm9pZCBTY3JvbGxiYXJFZmw6OnNldFBhcmVudChTY3JvbGxWaWV3KiB2aWV3KQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZWZsL1Njcm9sbGJhckVmbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9TY3JvbGxiYXJFZmwuaAkocmV2aXNpb24gNzYz
NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvU2Nyb2xsYmFyRWZsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIGRhbWFnZVJlY3QpOwog
CiBwcm90ZWN0ZWQ6Ci0gICAgU2Nyb2xsYmFyRWZsKFNjcm9sbGJhckNsaWVudCosIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CisgICAgU2Nyb2xsYmFyRWZsKFNj
cm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFNjcm9sbGJhckNvbnRyb2xTaXpl
KTsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uQW5kUHJvcG9ydGlvbigp
OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmNw
cAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZy
YW1lU2Nyb2xsYmFyR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTQgKzI1LDE0IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgog
I2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJTY3JvbGxiYXJDbGllbnQuaCIKKyNpbmNs
dWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8TWFpbkZyYW1lU2Nyb2xsYmFyR3RrPiBNYWlu
RnJhbWVTY3JvbGxiYXJHdGs6OmNyZWF0ZShTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xs
YmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIEd0a0FkanVzdG1lbnQqIGFkaikKK1Bhc3NSZWZQ
dHI8TWFpbkZyYW1lU2Nyb2xsYmFyR3RrPiBNYWluRnJhbWVTY3JvbGxiYXJHdGs6OmNyZWF0ZShT
Y3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uLCBHdGtBZGp1c3RtZW50KiBhZGopCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBN
YWluRnJhbWVTY3JvbGxiYXJHdGsoY2xpZW50LCBvcmllbnRhdGlvbiwgYWRqKSk7CisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBNYWluRnJhbWVTY3JvbGxiYXJHdGsoc2Nyb2xsYWJsZUFyZWEsIG9y
aWVudGF0aW9uLCBhZGopKTsKIH0KIAogLy8gTWFpbiBmcmFtZSBzY3JvbGxiYXJzIGFyZSBzbGF2
ZXMgdG8gYSBHdGtBZGp1c3RtZW50LiBJZiBhIG1haW4gZnJhbWUKQEAgLTQyLDggKzQyLDggQEAg
UGFzc1JlZlB0cjxNYWluRnJhbWVTY3JvbGxiYXJHdGs+IE1haW5GcgogLy8gc3RhdGUuIFRoZXNl
IHNjcm9sbGJhcnMgYXJlIG5ldmVyIHBhaW50ZWQsIGFzIHRoZSBjb250YWluZXIgdGFrZXMgY2Fy
ZSBvZgogLy8gdGhhdC4gVGhleSBleGlzdCBvbmx5IHRvIHNodXR0bGUgZGF0YSBmcm9tIHRoZSBH
dGtXaWRnZXQgY29udGFpbmVyIGludG8KIC8vIFdlYkNvcmUgYW5kIHZpY2UtdmVyc2EuCi1NYWlu
RnJhbWVTY3JvbGxiYXJHdGs6Ok1haW5GcmFtZVNjcm9sbGJhckd0ayhTY3JvbGxiYXJDbGllbnQq
IGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIEd0a0FkanVzdG1lbnQq
IGFkanVzdG1lbnQpCi0gICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRhdGlvbiwgUmVndWxh
clNjcm9sbGJhcikKK01haW5GcmFtZVNjcm9sbGJhckd0azo6TWFpbkZyYW1lU2Nyb2xsYmFyR3Rr
KFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sIEd0a0FkanVzdG1lbnQqIGFkanVzdG1lbnQpCisgICAgOiBTY3JvbGxiYXIoc2Ny
b2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xsYmFyKQogICAgICwgbV9hZGp1
c3RtZW50KDApCiB7CiAgICAgYXR0YWNoQWRqdXN0bWVudChhZGp1c3RtZW50KTsKQEAgLTEwOSw3
ICsxMDksNyBAQCB2b2lkIE1haW5GcmFtZVNjcm9sbGJhckd0azo6dXBkYXRlVGh1bWJQCiAKIHZv
aWQgTWFpbkZyYW1lU2Nyb2xsYmFyR3RrOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCos
IE1haW5GcmFtZVNjcm9sbGJhckd0ayogdGhhdCkKIHsKLSAgICB0aGF0LT5jbGllbnQoKS0+c2Ny
b2xsVG9PZmZzZXRXaXRob3V0QW5pbWF0aW9uKHRoYXQtPm9yaWVudGF0aW9uKCksIHN0YXRpY19j
YXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKHRoYXQtPm1fYWRqdXN0bWVudC5nZXQo
KSkpKTsKKyAgICB0aGF0LT5zY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGxUb09mZnNldFdpdGhvdXRB
bmltYXRpb24odGhhdC0+b3JpZW50YXRpb24oKSwgc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUodGhhdC0+bV9hZGp1c3RtZW50LmdldCgpKSkpOwogfQogCiB2b2lkIE1h
aW5GcmFtZVNjcm9sbGJhckd0azo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0JiByZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL01haW5G
cmFtZVNjcm9sbGJhckd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9NYWluRnJhbWVTY3JvbGxiYXJHdGsuaAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvTWFpbkZyYW1lU2Nyb2xsYmFyR3RrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDE4ICszMCwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1haW5G
cmFtZVNjcm9sbGJhckd0ayA6IHB1YmxpYyBTY3JvbGxiYXIgewogcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1haW5GcmFtZVNjcm9sbGJhckd0az4gY3JlYXRlKFNjcm9sbGFibGVBcmVh
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIEd0a0FkanVzdG1lbnQqKTsKKwogICAgIH5NYWluRnJh
bWVTY3JvbGxiYXJHdGsoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgSW50UmVjdCYpOwogICAgIHZvaWQgZGV0YWNoQWRqdXN0bWVudCgpOwogICAgIHZv
aWQgYXR0YWNoQWRqdXN0bWVudChHdGtBZGp1c3RtZW50Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8TWFpbkZyYW1lU2Nyb2xsYmFyR3RrPiBjcmVhdGUoU2Nyb2xsYmFyQ2xpZW50KiwgU2Nyb2xs
YmFyT3JpZW50YXRpb24sIEd0a0FkanVzdG1lbnQqKTsKIAogcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVUaHVtYlBvc2l0aW9uKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRo
dW1iUHJvcG9ydGlvbigpOwogCiBwcml2YXRlOgotICAgIE1haW5GcmFtZVNjcm9sbGJhckd0ayhT
Y3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgR3RrQWRqdXN0bWVudCopOwor
ICAgIE1haW5GcmFtZVNjcm9sbGJhckd0ayhTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVu
dGF0aW9uLCBHdGtBZGp1c3RtZW50Kik7CiAgICAgc3RhdGljIHZvaWQgZ3RrVmFsdWVDaGFuZ2Vk
KEd0a0FkanVzdG1lbnQqLCBNYWluRnJhbWVTY3JvbGxiYXJHdGsqKTsKIAogICAgIEdSZWZQdHI8
R3RrQWRqdXN0bWVudD4gbV9hZGp1c3RtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHJldmlzaW9uIDc2MzU2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTY3JvbGxB
bmltYXRvck1hYyA6IHB1YmxpYyBTY3JvbGxBbmltYXRvciB7CiBwdWJsaWM6Ci0gICAgU2Nyb2xs
QW5pbWF0b3JNYWMoU2Nyb2xsYmFyQ2xpZW50Kik7CisgICAgU2Nyb2xsQW5pbWF0b3JNYWMoU2Ny
b2xsYWJsZUFyZWEqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxBbmltYXRvck1hYygpOwogCiAgICAg
dmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsR3JhbnVsYXJp
dHksIGZsb2F0IHN0ZXAsIGZsb2F0IG11bHRpcGxpZXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbEFuaW1hdG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxBbmltYXRvck1hYy5tbQkocmV2aXNpb24gNzYzNTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU2Nyb2xsQW5pbWF0b3JNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDExIEBACiAKICNpZiBFTkFCTEUoU01PT1RIX1NDUk9M
TElORykKIAotI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJTY3JvbGxBbmltYXRv
ck1hYy5oIgotI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorCisjaW5jbHVkZSAiRmxvYXRQ
b2ludC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NP
d25QdHIuaD4KIAogQGludGVyZmFjZSBOU09iamVjdCAoTlNTY3JvbGxBbmltYXRpb25IZWxwZXJE
ZXRhaWxzKQogLSAoaWQpaW5pdFdpdGhEZWxlZ2F0ZTooaWQpZGVsZWdhdGU7CkBAIC0xMjIsMTMg
KzEyNCwxMyBAQCAtICh2b2lkKV9yZWN1cnNpdmVSZWNvbXB1dGVUb29sVGlwcwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVNjcm9sbEFuaW1hdG9yKiBTY3JvbGxBbmltYXRvcjo6Y3JlYXRlKFNj
cm9sbGJhckNsaWVudCogY2xpZW50KQorUGFzc093blB0cjxTY3JvbGxBbmltYXRvcj4gU2Nyb2xs
QW5pbWF0b3I6OmNyZWF0ZShTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCiB7Ci0gICAg
cmV0dXJuIG5ldyBTY3JvbGxBbmltYXRvck1hYyhjbGllbnQpOworICAgIHJldHVybiBhZG9wdFB0
cihuZXcgU2Nyb2xsQW5pbWF0b3JNYWMoc2Nyb2xsYWJsZUFyZWEpKTsKIH0KIAotU2Nyb2xsQW5p
bWF0b3JNYWM6OlNjcm9sbEFuaW1hdG9yTWFjKFNjcm9sbGJhckNsaWVudCogY2xpZW50KQotICAg
IDogU2Nyb2xsQW5pbWF0b3IoY2xpZW50KQorU2Nyb2xsQW5pbWF0b3JNYWM6OlNjcm9sbEFuaW1h
dG9yTWFjKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKKyAgICA6IFNjcm9sbEFuaW1h
dG9yKHNjcm9sbGFibGVBcmVhKQogewogICAgIG1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdh
dGUuYWRvcHROUyhbW1Njcm9sbEFuaW1hdGlvbkhlbHBlckRlbGVnYXRlIGFsbG9jXSBpbml0V2l0
aFNjcm9sbEFuaW1hdG9yOnRoaXNdKTsKICAgICBtX3Njcm9sbEFuaW1hdGlvbkhlbHBlci5hZG9w
dE5TKFtbTlNDbGFzc0Zyb21TdHJpbmcoQCJOU1Njcm9sbEFuaW1hdGlvbkhlbHBlciIpIGFsbG9j
XSBpbml0V2l0aERlbGVnYXRlOm1fc2Nyb2xsQW5pbWF0aW9uSGVscGVyRGVsZWdhdGUuZ2V0KCld
KTsKQEAgLTE0Nyw3ICsxNDksNyBAQCBib29sIFNjcm9sbEFuaW1hdG9yTWFjOjpzY3JvbGwoU2Ny
b2xsYmFyCiAgICAgICAgIHJldHVybiBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsKG9yaWVudGF0aW9u
LCBncmFudWxhcml0eSwgc3RlcCwgbXVsdGlwbGllcik7CiAKICAgICBmbG9hdCBjdXJyZW50UG9z
ID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IG1fY3VycmVudFBvc1ggOiBt
X2N1cnJlbnRQb3NZOwotICAgIGZsb2F0IG5ld1BvcyA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6Om1p
bjxmbG9hdD4oY3VycmVudFBvcyArIChzdGVwICogbXVsdGlwbGllciksIHN0YXRpY19jYXN0PGZs
b2F0PihtX2NsaWVudC0+c2Nyb2xsU2l6ZShvcmllbnRhdGlvbikpKSwgMCk7CisgICAgZmxvYXQg
bmV3UG9zID0gc3RkOjptYXg8ZmxvYXQ+KHN0ZDo6bWluPGZsb2F0PihjdXJyZW50UG9zICsgKHN0
ZXAgKiBtdWx0aXBsaWVyKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fc2Nyb2xsYWJsZUFyZWEtPnNj
cm9sbFNpemUob3JpZW50YXRpb24pKSksIDApOwogICAgIGlmIChjdXJyZW50UG9zID09IG5ld1Bv
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvU2Nyb2xsYmFyVGhlbWVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWFjL1Njcm9sbGJhclRoZW1lTWFjLm1tCShyZXZpc2lvbiA3NjM1NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TY3JvbGxiYXJUaGVtZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDIwLDcgKzQyMCw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVNYWM6OnBhaW50KFNj
cm9sbGJhcioKICAgICBpZiAoIXNjcm9sbGJhci0+ZW5hYmxlZCgpKQogICAgICAgICB0cmFja0lu
Zm8uZW5hYmxlU3RhdGUgPSBrVGhlbWVUcmFja0Rpc2FibGVkOwogICAgIGVsc2UKLSAgICAgICAg
dHJhY2tJbmZvLmVuYWJsZVN0YXRlID0gc2Nyb2xsYmFyLT5jbGllbnQoKS0+aXNBY3RpdmUoKSA/
IGtUaGVtZVRyYWNrQWN0aXZlIDoga1RoZW1lVHJhY2tJbmFjdGl2ZTsKKyAgICAgICAgdHJhY2tJ
bmZvLmVuYWJsZVN0YXRlID0gc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5pc0FjdGl2ZSgp
ID8ga1RoZW1lVHJhY2tBY3RpdmUgOiBrVGhlbWVUcmFja0luYWN0aXZlOwogCiAgICAgaWYgKGhh
c1RodW1iKHNjcm9sbGJhcikpCiAgICAgICAgIHRyYWNrSW5mby5hdHRyaWJ1dGVzIHw9IGtUaGVt
ZVRyYWNrU2hvd1RodW1iOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvU2Nyb2xs
YmFyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Njcm9s
bGJhclF0LmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9x
dC9TY3JvbGxiYXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5j
bHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZS5oIgogCiAj
aW5jbHVkZSA8UUFwcGxpY2F0aW9uPgpAQCAtNzcsMTcgKzc3LDE3IEBAIGJvb2wgU2Nyb2xsYmFy
Ojpjb250ZXh0TWVudShjb25zdCBQbGF0Zm8KICAgICAgICAgY29uc3QgUVBvaW50IHBvcyA9IGNv
bnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyhldmVudC5wb3MoKSk7CiAgICAgICAgIG1vdmVUaHVt
Yihob3Jpem9udGFsID8gcG9zLngoKSA6IHBvcy55KCkpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9u
U2VsZWN0ZWQgPT0gYWN0U2Nyb2xsVG9wKQotICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6
b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAg
ICBzY3JvbGxhYmxlQXJlYSgpLT5zY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbExlZnQgOiBTY3Jv
bGxVcCwgU2Nyb2xsQnlEb2N1bWVudCk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0g
YWN0U2Nyb2xsQm90dG9tKQotICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6b250YWwgPyBT
Y3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5RG9jdW1lbnQpOworICAgICAgICBzY3Jv
bGxhYmxlQXJlYSgpLT5zY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJpZ2h0IDogU2Nyb2xsRG93
biwgU2Nyb2xsQnlEb2N1bWVudCk7CiAgICAgZWxzZSBpZiAoYWN0aW9uU2VsZWN0ZWQgPT0gYWN0
UGFnZVVwKQotICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxMZWZ0
IDogU2Nyb2xsVXAsIFNjcm9sbEJ5UGFnZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPnNj
cm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9sbFVwLCBTY3JvbGxCeVBhZ2UpOwog
ICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFBhZ2VEb3duKQotICAgICAgICBjbGll
bnQoKS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9s
bEJ5UGFnZSk7CisgICAgICAgIHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbChob3Jpem9udGFsID8g
U2Nyb2xsUmlnaHQgOiBTY3JvbGxEb3duLCBTY3JvbGxCeVBhZ2UpOwogICAgIGVsc2UgaWYgKGFj
dGlvblNlbGVjdGVkID09IGFjdFNjcm9sbFVwKQotICAgICAgICBjbGllbnQoKS0+c2Nyb2xsKGhv
cml6b250YWwgPyBTY3JvbGxMZWZ0IDogU2Nyb2xsVXAsIFNjcm9sbEJ5TGluZSk7CisgICAgICAg
IHNjcm9sbGFibGVBcmVhKCktPnNjcm9sbChob3Jpem9udGFsID8gU2Nyb2xsTGVmdCA6IFNjcm9s
bFVwLCBTY3JvbGxCeUxpbmUpOwogICAgIGVsc2UgaWYgKGFjdGlvblNlbGVjdGVkID09IGFjdFNj
cm9sbERvd24pCi0gICAgICAgIGNsaWVudCgpLT5zY3JvbGwoaG9yaXpvbnRhbCA/IFNjcm9sbFJp
Z2h0IDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5lKTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEo
KS0+c2Nyb2xsKGhvcml6b250YWwgPyBTY3JvbGxSaWdodCA6IFNjcm9sbERvd24sIFNjcm9sbEJ5
TGluZSk7CiAjZW5kaWYgLy8gUVRfTk9fQ09OVEVYVE1FTlUKICAgICByZXR1cm4gdHJ1ZTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uY3BwCShy
ZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVX
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MzIsMTIgKzUzMiwxMiBAQCBib29sIFBvcHVwTWVu
dVdpbjo6c2Nyb2xsVG9SZXZlYWxTZWxlY3RpCiAgICAgaW50IGluZGV4ID0gZm9jdXNlZEluZGV4
KCk7CiAKICAgICBpZiAoaW5kZXggPCBtX3Njcm9sbE9mZnNldCkgewotICAgICAgICBTY3JvbGxi
YXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgpOworICAgICAg
ICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChpbmRleCA+PSBtX3Njcm9s
bE9mZnNldCArIHZpc2libGVJdGVtcygpKSB7Ci0gICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Ny
b2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCAtIHZpc2libGVJdGVtcygpICsgMSk7
CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC05OTQsNyArOTk0LDcgQEAgTFJFU1VMVCBQb3B1cE1lbnVXaW46OnduZFByb2MoSFdO
RCBoV25kLAogICAgICAgICAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxE
b3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CisgICAgICAgICAgICBTY3JvbGxhYmxlQXJlYTo6
c2Nyb2xsKGkgPiAwID8gU2Nyb2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUG9wdXBNZW51V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1BvcHVwTWVudVdpbi5oCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Qb3B1cE1lbnVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDUgQEAKIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yMyw4ICsyNCw4IEBA
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudS5oIgogI2luY2x1ZGUg
IlBvcHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KQEAgLTM4LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgRnJhbWVWaWV3OwogY2xhc3MgU2Nyb2xsYmFyOwogCi1jbGFzcyBQb3B1cE1lbnVXaW4gOiBw
dWJsaWMgUG9wdXBNZW51LCBwcml2YXRlIFNjcm9sbGJhckNsaWVudCB7CitjbGFzcyBQb3B1cE1l
bnVXaW4gOiBwdWJsaWMgUG9wdXBNZW51LCBwcml2YXRlIFNjcm9sbGFibGVBcmVhIHsKIHB1Ymxp
YzoKICAgICBQb3B1cE1lbnVXaW4oUG9wdXBNZW51Q2xpZW50Kik7CiAgICAgflBvcHVwTWVudVdp
bigpOwpAQCAtODksNyArOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2Nyb2xsYmFyQ2FwdHVy
aW5nTW91c2UoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhckNhcHR1cmluZ01vdXNlOyB9CiAg
ICAgdm9pZCBzZXRTY3JvbGxiYXJDYXB0dXJpbmdNb3VzZShib29sIGIpIHsgbV9zY3JvbGxiYXJD
YXB0dXJpbmdNb3VzZSA9IGI7IH0KIAotICAgIC8vIFNjcm9sbEJhckNsaWVudAorICAgIC8vIFNj
cm9sbGFibGVBcmVhCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRh
dGlvbiBvcmllbnRhdGlvbikgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24o
U2Nyb2xsYmFyKikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25z
dCBJbnRQb2ludCYpOwpAQCAtOTgsNyArOTksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9v
bCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7IHJldHVybiBtX3Nj
cm9sbGJhci5nZXQoKTsgfQogCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxs
ZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQu
CisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRl
biBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KICAgICB2b2lkIHNjcm9sbFRv
KGludCBvZmZzZXQpOwogCiAgICAgdm9pZCBjYWxjdWxhdGVQb3NpdGlvbkFuZFNpemUoY29uc3Qg
SW50UmVjdCYsIEZyYW1lVmlldyopOwpAQCAtMTIzLDYgKzEyNCw2IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3Nob3dQb3B1cDsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIFBvcHVwTWVudVdpbl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
U2Nyb2xsYmFyVGhlbWVTYWZhcmkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9TY3JvbGxiYXJUaGVtZVNhZmFyaS5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Njcm9sbGJhclRoZW1lU2FmYXJpLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAi
U2Nyb2xsYWJsZUFyZWEuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKLSNpbmNsdWRlICJTY3Jv
bGxiYXJDbGllbnQuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZVdpbi5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTIwOSw3ICsyMDksNyBA
QCB2b2lkIFNjcm9sbGJhclRoZW1lU2FmYXJpOjpwYWludFRyYWNrQmFjCiAgICAgICAgIHJldHVy
bjsKICAgICBOU0NvbnRyb2xTaXplIHNpemUgPSBzY3JvbGxiYXItPmNvbnRyb2xTaXplKCkgPT0g
U21hbGxTY3JvbGxiYXIgPyBOU1NtYWxsQ29udHJvbFNpemUgOiBOU1JlZ3VsYXJDb250cm9sU2l6
ZTsKICAgICBUaGVtZUNvbnRyb2xTdGF0ZSBzdGF0ZSA9IDA7Ci0gICAgaWYgKHNjcm9sbGJhci0+
Y2xpZW50KCktPmlzQWN0aXZlKCkpCisgICAgaWYgKHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFyZWEo
KS0+aXNBY3RpdmUoKSkKICAgICAgICAgc3RhdGUgfD0gQWN0aXZlU3RhdGU7CiAgICAgaWYgKGhh
c0J1dHRvbnMoc2Nyb2xsYmFyKSkKICAgICAgICAgc3RhdGUgfD0gRW5hYmxlZFN0YXRlOwpAQCAt
MjIyLDcgKzIyMiw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVTYWZhcmk6OnBhaW50QnV0dG9uKEcK
ICAgICAgICAgcmV0dXJuOwogICAgIE5TQ29udHJvbFNpemUgc2l6ZSA9IHNjcm9sbGJhci0+Y29u
dHJvbFNpemUoKSA9PSBTbWFsbFNjcm9sbGJhciA/IE5TU21hbGxDb250cm9sU2l6ZSA6IE5TUmVn
dWxhckNvbnRyb2xTaXplOwogICAgIFRoZW1lQ29udHJvbFN0YXRlIHN0YXRlID0gMDsKLSAgICBp
ZiAoc2Nyb2xsYmFyLT5jbGllbnQoKS0+aXNBY3RpdmUoKSkKKyAgICBpZiAoc2Nyb2xsYmFyLT5z
Y3JvbGxhYmxlQXJlYSgpLT5pc0FjdGl2ZSgpKQogICAgICAgICBzdGF0ZSB8PSBBY3RpdmVTdGF0
ZTsKICAgICBpZiAoaGFzQnV0dG9ucyhzY3JvbGxiYXIpKQogICAgICAgICBzdGF0ZSB8PSBFbmFi
bGVkU3RhdGU7CkBAIC0yNDIsNyArMjQyLDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZVNhZmFyaTo6
cGFpbnRUaHVtYihHcgogICAgICAgICByZXR1cm47CiAgICAgTlNDb250cm9sU2l6ZSBzaXplID0g
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFNtYWxsU2Nyb2xsYmFyID8gTlNTbWFsbENvbnRy
b2xTaXplIDogTlNSZWd1bGFyQ29udHJvbFNpemU7CiAgICAgVGhlbWVDb250cm9sU3RhdGUgc3Rh
dGUgPSAwOwotICAgIGlmIChzY3JvbGxiYXItPmNsaWVudCgpLT5pc0FjdGl2ZSgpKQorICAgIGlm
IChzY3JvbGxiYXItPnNjcm9sbGFibGVBcmVhKCktPmlzQWN0aXZlKCkpCiAgICAgICAgIHN0YXRl
IHw9IEFjdGl2ZVN0YXRlOwogICAgIGlmIChoYXNUaHVtYihzY3JvbGxiYXIpKQogICAgICAgICBz
dGF0ZSB8PSBFbmFibGVkU3RhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9T
Y3JvbGxiYXJUaGVtZVd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93eC9TY3JvbGxiYXJUaGVtZVd4LmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93eC9TY3JvbGxiYXJUaGVtZVd4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksOCArMjksOCBAQAogI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlNj
cm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAiU2Nyb2xs
YmFyQ2xpZW50LmgiCiAjaW5jbHVkZSAic2Nyb2xsYmFyX3JlbmRlci5oIgogI2luY2x1ZGUgIlNj
cm9sbGJhclRoZW1lQ29tcG9zaXRlLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgpAQCAtMTg1
LDcgKzE4NSw3IEBAIGJvb2wgU2Nyb2xsYmFyVGhlbWVXeDo6cGFpbnQoU2Nyb2xsYmFyKiAKIHsK
ICAgICB3eE9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IHd4SE9SSVpPTlRBTCA6IHd4VkVSVElDQUw7CiAg
ICAgaW50IGZsYWdzID0gMDsKLSAgICBpZiAoc2Nyb2xsYmFyLT5jbGllbnQoKS0+aXNBY3RpdmUo
KSkKKyAgICBpZiAoc2Nyb2xsYmFyLT5zY3JvbGxhYmxlQXJlYSgpLT5pc0FjdGl2ZSgpKQogICAg
ICAgICBmbGFncyB8PSB3eENPTlRST0xfRk9DVVNFRDsKICAgICAKICAgICBpZiAoIXNjcm9sbGJh
ci0+ZW5hYmxlZCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFH
cmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRhdGFH
cmlkLmgJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckRhdGFHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE0ICszMCwxNCBAQAogCiAjaW5jbHVk
ZSAiSFRNTERhdGFHcmlkRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5j
bHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2Nyb2xsYWJsZUFyZWEuaCIKICNp
bmNsdWRlICJTdHlsZUltYWdlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJEYXRh
R3JpZCA6IHB1YmxpYyBSZW5kZXJCbG9jaywgcHJpdmF0ZSBTY3JvbGxiYXJDbGllbnQgeworY2xh
c3MgUmVuZGVyRGF0YUdyaWQgOiBwdWJsaWMgUmVuZGVyQmxvY2ssIHByaXZhdGUgU2Nyb2xsYWJs
ZUFyZWEgewogcHVibGljOgogICAgIFJlbmRlckRhdGFHcmlkKEVsZW1lbnQqKTsKICAgICB+UmVu
ZGVyRGF0YUdyaWQoKTsKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIAogICAgIEhUTUxEYXRh
R3JpZEVsZW1lbnQqIGdyaWRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SFRN
TERhdGFHcmlkRWxlbWVudCo+KG5vZGUoKSk7IH0KIAotICAgIC8vIFNjcm9sbGJhckNsaWVudCBp
bnRlcmZhY2UuCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEgaW50ZXJmYWNlLgogICAgIHZpcnR1YWwg
aW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXRGcm9tQW5pbWF0aW9uKGNvbnN0IEludFBv
aW50Jik7CiAgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3JvbGxiYXIqKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gNzYzNTYp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzA4LDcgKzEzMDgsNyBAQCB2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxCeVJlY3Vy
c2l2ZWx5KGluCiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnNjcm9sbFRvT2Zmc2V0KGludCB4LCBpbnQg
eSkKIHsKLSAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihJbnRQb2ludCh4LCB5KSk7CisgICAgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRvT2Zmc2V0V2l0
aG91dEFuaW1hdGlvbihJbnRQb2ludCh4LCB5KSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OnNj
cm9sbFRvKGludCB4LCBpbnQgeSkKQEAgLTE4MjAsNyArMTgyMCw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OmRlc3Ryb3lTY3JvbGxiYXIoU2Nyb2wKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRl
clNjcm9sbGJhcio+KHNjcm9sbGJhci5nZXQoKSktPmNsZWFyT3duaW5nUmVuZGVyZXIoKTsKIAog
ICAgICAgICBzY3JvbGxiYXItPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgc2Nyb2xsYmFy
LT5zZXRDbGllbnQoMCk7CisgICAgICAgIHNjcm9sbGJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxh
YmxlQXJlYSgpOwogICAgICAgICBzY3JvbGxiYXIgPSAwOwogICAgIH0KIH0KQEAgLTIyNzQsNyAr
MjI3NCw3IEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmhpdFRlc3RPdmVyZmxvd0NvbnRyb2wKIAogYm9v
bCBSZW5kZXJMYXllcjo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyKQogewotICAgIHJldHVybiBT
Y3JvbGxiYXJDbGllbnQ6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVy
KTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFy
aXR5LCBtdWx0aXBsaWVyKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBwLCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0LCBQYWludEJlaGF2aW9yIHBhaW50
QmVoYXZpb3IsIFJlbmRlck9iamVjdCAqcGFpbnRpbmdSb290KQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNs
dWRlICJTY3JvbGxCZWhhdmlvci5oIgotI2luY2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2lu
Y2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC0xNTQsNyArMTU0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1f
Zml4ZWQgOiAxOwogfTsKIAotY2xhc3MgUmVuZGVyTGF5ZXIgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xp
ZW50IHsKK2NsYXNzIFJlbmRlckxheWVyIDogcHVibGljIFNjcm9sbGFibGVBcmVhIHsKIHB1Ymxp
YzoKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyUmVwbGljYTsKIApAQCAtNTEzLDcgKzUxMyw3IEBA
IHByaXZhdGU6CiAKICAgICBib29sIHNob3VsZEJlTm9ybWFsRmxvd09ubHkoKSBjb25zdDsgCiAK
LSAgICAvLyBTY3JvbGxCYXJDbGllbnQgaW50ZXJmYWNlCisgICAgLy8gU2Nyb2xsYWJsZUFyZWEg
aW50ZXJmYWNlCiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlv
biBvcmllbnRhdGlvbikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0aW9uKFNjcm9sbGJh
ciopIGNvbnN0OwpAQCAtNTI1LDcgKzUyNSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRQ
b2ludCBjb252ZXJ0RnJvbVNjcm9sbGJhclRvQ29udGFpbmluZ1ZpZXcoY29uc3QgU2Nyb2xsYmFy
KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRG
cm9tQ29udGFpbmluZ1ZpZXdUb1Njcm9sbGJhcihjb25zdCBTY3JvbGxiYXIqLCBjb25zdCBJbnRQ
b2ludCYpIGNvbnN0OwogCi0gICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
YnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxiYXJDbGllbnQuCisg
ICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBz
ZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJlYS4KICAgICB2b2lkIHNjcm9sbFRvKGlu
dCB4LCBpbnQgeSk7CiAKICAgICBJbnRTaXplIHNjcm9sbGJhck9mZnNldChjb25zdCBTY3JvbGxi
YXIqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTUsNyArNDk1LDcgQEAgYm9vbCBSZW5k
ZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbEVsZW1lbgogICAgIGVsc2UKICAgICAgICAgbmV3T2Zm
c2V0ID0gaW5kZXggLSBudW1WaXNpYmxlSXRlbXMoKSArIDE7CiAKLSAgICBTY3JvbGxiYXJDbGll
bnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24obmV3T2Zmc2V0KTsKKyAgICBTY3Jv
bGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihuZXdPZmZzZXQpOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC01MDcsMTIgKzUwNywxMiBAQCBib29sIFJlbmRlckxp
c3RCb3g6Omxpc3RJbmRleElzVmlzaWJsZShpCiAKIGJvb2wgUmVuZGVyTGlzdEJveDo6c2Nyb2xs
KFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
LCBmbG9hdCBtdWx0aXBsaWVyLCBOb2RlKiopCiB7Ci0gICAgcmV0dXJuIFNjcm9sbGJhckNsaWVu
dDo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxpZXIpOworICAgIHJldHVy
biBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHksIG11bHRpcGxp
ZXIpOwogfQogCiBib29sIFJlbmRlckxpc3RCb3g6OmxvZ2ljYWxTY3JvbGwoU2Nyb2xsTG9naWNh
bERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBmbG9h
dCBtdWx0aXBsaWVyLCBOb2RlKiopCiB7Ci0gICAgcmV0dXJuIFNjcm9sbGJhckNsaWVudDo6c2Ny
b2xsKGxvZ2ljYWxUb1BoeXNpY2FsKGRpcmVjdGlvbiwgc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSksIGdyYW51
bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICByZXR1cm4gU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbChs
b2dpY2FsVG9QaHlzaWNhbChkaXJlY3Rpb24sIHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCksIHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpLCBncmFudWxhcml0
eSwgbXVsdGlwbGllcik7CiB9CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6dmFsdWVDaGFuZ2VkKHVu
c2lnbmVkIGxpc3RJbmRleCkKQEAgLTU5Miw3ICs1OTIsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnNldFNjcm9sbFRvcChpbnQgbmV3CiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBudW1J
dGVtcygpIHx8IGluZGV4ID09IG1faW5kZXhPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5k
ZXgpOworICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0QW5pbWF0aW9u
KGluZGV4KTsKIH0KIAogYm9vbCBSZW5kZXJMaXN0Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkBAIC03MTQsNyAr
NzE0LDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpkZXN0cm95U2Nyb2xsYmFyKCkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIG1fdkJhci0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIG1fdkJh
ci0+c2V0Q2xpZW50KDApOworICAgIG1fdkJhci0+ZGlzY29ubmVjdEZyb21TY3JvbGxhYmxlQXJl
YSgpOwogICAgIG1fdkJhciA9IDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guaAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAK
ICNkZWZpbmUgUmVuZGVyTGlzdEJveF9oCiAKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgotI2lu
Y2x1ZGUgIlNjcm9sbGJhckNsaWVudC5oIgorI2luY2x1ZGUgIlNjcm9sbGFibGVBcmVhLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyTGlzdEJveCA6IHB1YmxpYyBSZW5k
ZXJCbG9jaywgcHJpdmF0ZSBTY3JvbGxiYXJDbGllbnQgeworY2xhc3MgUmVuZGVyTGlzdEJveCA6
IHB1YmxpYyBSZW5kZXJCbG9jaywgcHJpdmF0ZSBTY3JvbGxhYmxlQXJlYSB7CiBwdWJsaWM6CiAg
ICAgUmVuZGVyTGlzdEJveChFbGVtZW50Kik7CiAgICAgdmlydHVhbCB+UmVuZGVyTGlzdEJveCgp
OwpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwg
aW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCi0gICAgLy8gU2Nyb2xsYmFyQ2xpZW50
IGludGVyZmFjZS4KKyAgICAvLyBTY3JvbGxhYmxlQXJlYSBpbnRlcmZhY2UuCiAgICAgdmlydHVh
bCBpbnQgc2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3Q7
CiAgICAgdmlydHVhbCBpbnQgc2Nyb2xsUG9zaXRpb24oU2Nyb2xsYmFyKikgY29uc3Q7CiAgICAg
dmlydHVhbCB2b2lkIHNldFNjcm9sbE9mZnNldChjb25zdCBJbnRQb2ludCYpOwpAQCAtMTA3LDcg
KzEwNyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdWaWV3VG9TY3JvbGxiYXIoY29uc3QgU2Nyb2xsYmFyKiwgY29uc3QgSW50UG9pbnQmKSBj
b25zdDsKICAgICB2aXJ0dWFsIFNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIoKSBjb25zdCB7
IHJldHVybiBtX3ZCYXIuZ2V0KCk7IH0KIAotICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGJ5IHRoZSBvdmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYmFy
Q2xpZW50LgorICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHRoZSBv
dmVycmlkZW4gc2V0U2Nyb2xsT2Zmc2V0IGZyb20gU2Nyb2xsYWJsZUFyZWEuCiAgICAgdm9pZCBz
Y3JvbGxUbyhpbnQgbmV3T2Zmc2V0KTsKIAogICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3JvbGxi
YXIoYm9vbCBoYXNTY3JvbGxiYXIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NiwxNCArNDU2
LDE0IEBAIEhvc3RXaW5kb3cqIFJlbmRlck1lbnVMaXN0Ojpob3N0V2luZG93KCkKICAgICByZXR1
cm4gZG9jdW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7CiB9CiAKLVBhc3NSZWZQdHI8U2Ny
b2xsYmFyPiBSZW5kZXJNZW51TGlzdDo6Y3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCog
Y2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJv
bFNpemUgY29udHJvbFNpemUpCitQYXNzUmVmUHRyPFNjcm9sbGJhcj4gUmVuZGVyTWVudUxpc3Q6
OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJh
ck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6
ZSkKIHsKICAgICBSZWZQdHI8U2Nyb2xsYmFyPiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21T
Y3JvbGxiYXJTdHlsZSA9IHN0eWxlKCktPmhhc1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7CiAgICAg
aWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxlKQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3Jv
bGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCB0aGlzKTsK
KyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Nyb2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIo
c2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCB0aGlzKTsKICAgICBlbHNlCi0gICAgICAgIHdp
ZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRp
b24sIGNvbnRyb2xTaXplKTsKKyAgICAgICAgd2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRp
dmVTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSk7CiAg
ICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyAr
MTA3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJlZCgpIHt9
CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwogICAgIHZp
cnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxi
YXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJvbFNpemUpOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJh
ck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSk7CiAKICNpZiBFTkFCTEUoTk9fTElT
VEJPWF9SRU5ERVJJTkcpCiAgICAgdmlydHVhbCB2b2lkIGxpc3RCb3hTZWxlY3RJdGVtKGludCBs
aXN0SW5kZXgsIGJvb2wgYWxsb3dNdWx0aXBseVNlbGVjdGlvbnMsIGJvb2wgc2hpZnQsIGJvb2wg
ZmlyZU9uQ2hhbmdlTm93ID0gdHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU2Nyb2xsYmFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2Nyb2xsYmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMg
KzM0LDEzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IFJlbmRlclNjcm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCog
Y2xpZW50LCBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgUmVuZGVyQm94KiByZW5k
ZXJlciwgRnJhbWUqIG93bmluZ0ZyYW1lKQorUGFzc1JlZlB0cjxTY3JvbGxiYXI+IFJlbmRlclNj
cm9sbGJhcjo6Y3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFJlbmRlckJveCogcmVuZGVy
ZXIsIEZyYW1lKiBvd25pbmdGcmFtZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRl
clNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCByZW5kZXJlciwgb3duaW5nRnJhbWUpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlbmRlclNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwg
b3JpZW50YXRpb24sIHJlbmRlcmVyLCBvd25pbmdGcmFtZSkpOwogfQogCi1SZW5kZXJTY3JvbGxi
YXI6OlJlbmRlclNjcm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24sIFJlbmRlckJveCogcmVuZGVyZXIsIEZyYW1lKiBvd25pbmdG
cmFtZSkKLSAgICA6IFNjcm9sbGJhcihjbGllbnQsIG9yaWVudGF0aW9uLCBSZWd1bGFyU2Nyb2xs
YmFyLCBSZW5kZXJTY3JvbGxiYXJUaGVtZTo6cmVuZGVyU2Nyb2xsYmFyVGhlbWUoKSkKK1JlbmRl
clNjcm9sbGJhcjo6UmVuZGVyU2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJl
YSwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb24sIFJlbmRlckJveCogcmVuZGVyZXIs
IEZyYW1lKiBvd25pbmdGcmFtZSkKKyAgICA6IFNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3Jp
ZW50YXRpb24sIFJlZ3VsYXJTY3JvbGxiYXIsIFJlbmRlclNjcm9sbGJhclRoZW1lOjpyZW5kZXJT
Y3JvbGxiYXJUaGVtZSgpKQogICAgICwgbV9vd25lcihyZW5kZXJlcikKICAgICAsIG1fb3duaW5n
RnJhbWUob3duaW5nRnJhbWUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU2Nyb2xsYmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNjcm9sbGJhci5oCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTY3JvbGxiYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTEgKzM5LDExIEBA
IGNsYXNzIFJlbmRlclN0eWxlOwogCiBjbGFzcyBSZW5kZXJTY3JvbGxiYXIgOiBwdWJsaWMgU2Ny
b2xsYmFyIHsKIHByb3RlY3RlZDoKLSAgICBSZW5kZXJTY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50
KiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFJlbmRlckJveCosIEZyYW1lKik7CisgICAgUmVuZGVy
U2Nyb2xsYmFyKFNjcm9sbGFibGVBcmVhKiwgU2Nyb2xsYmFyT3JpZW50YXRpb24sIFJlbmRlckJv
eCosIEZyYW1lKik7CiAKIHB1YmxpYzoKICAgICBmcmllbmQgY2xhc3MgU2Nyb2xsYmFyOwotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlQ3VzdG9tU2Nyb2xsYmFyKFNjcm9s
bGJhckNsaWVudCosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBSZW5kZXJCb3gqLCBGcmFtZSogb3du
aW5nRnJhbWUgPSAwKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZUN1
c3RvbVNjcm9sbGJhcihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBSZW5k
ZXJCb3gqLCBGcmFtZSogb3duaW5nRnJhbWUgPSAwKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJTY3Jv
bGxiYXIoKTsKIAogICAgIHN0YXRpYyBTY3JvbGxiYXJQYXJ0IHBhcnRGb3JTdHlsZVJlc29sdmUo
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDc5LDE0ICsxMDc5LDE0IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpsb2dpY2EKICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmxvZ2ljYWxTY3JvbGwoZGlyZWN0
aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3RvcE5vZGUpOwogfQogCi1QYXNzUmVmUHRy
PFNjcm9sbGJhcj4gUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpjcmVhdGVTY3JvbGxiYXIo
U2Nyb2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9u
LCBTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFy
PiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxl
QXJlYSogc2Nyb2xsYWJsZUFyZWEsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLCBT
Y3JvbGxiYXJDb250cm9sU2l6ZSBjb250cm9sU2l6ZSkKIHsKICAgICBSZWZQdHI8U2Nyb2xsYmFy
PiB3aWRnZXQ7CiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJTdHlsZSA9IHN0eWxlKCktPmhh
c1BzZXVkb1N0eWxlKFNDUk9MTEJBUik7CiAgICAgaWYgKGhhc0N1c3RvbVNjcm9sbGJhclN0eWxl
KQotICAgICAgICB3aWRnZXQgPSBSZW5kZXJTY3JvbGxiYXI6OmNyZWF0ZUN1c3RvbVNjcm9sbGJh
cihjbGllbnQsIG9yaWVudGF0aW9uLCB0aGlzKTsKKyAgICAgICAgd2lkZ2V0ID0gUmVuZGVyU2Ny
b2xsYmFyOjpjcmVhdGVDdXN0b21TY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9u
LCB0aGlzKTsKICAgICBlbHNlCi0gICAgICAgIHdpZGdldCA9IFNjcm9sbGJhcjo6Y3JlYXRlTmF0
aXZlU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIGNvbnRyb2xTaXplKTsKKyAgICAgICAg
d2lkZ2V0ID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoc2Nyb2xsYWJsZUFyZWEs
IG9yaWVudGF0aW9uLCBjb250cm9sU2l6ZSk7CiAgICAgcmV0dXJuIHdpZGdldC5yZWxlYXNlKCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNp
bmdsZUxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDAsNyArMTQwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZy
b21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCk7CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZv
bnRTZWxlY3RvcigpIGNvbnN0OwogICAgIHZpcnR1YWwgSG9zdFdpbmRvdyogaG9zdFdpbmRvdygp
IGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJh
cihTY3JvbGxiYXJDbGllbnQqLCBTY3JvbGxiYXJPcmllbnRhdGlvbiwgU2Nyb2xsYmFyQ29udHJv
bFNpemUpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJh
cihTY3JvbGxhYmxlQXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9s
U2l6ZSk7CiAKICAgICBJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCgpIGNvbnN0OwogCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiA3NjM3MikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTAxLTIxICBTYW0gV2VpbmlnICA8
c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUGFydCAyIG9mICJDbGVhbnVwIFNjcm9sbGJhci9TY3JvbGxiYXJDbGllbnQgcmVs
YXRpb25zaGlwIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTI3NzkKKworICAgICAgICBSZW5hbWUgU2Nyb2xsYmFyQ2xpZW50IC0+IFNjcm9sbGFibGVB
cmVhLgorCisgICAgICAgICogVUlQcm9jZXNzL3dpbi9XZWJQb3B1cE1lbnVQcm94eVdpbi5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlBvcHVwTWVudVByb3h5V2luOjpvbk1vdXNlV2hlZWwpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsVG9SZXZlYWxTZWxl
Y3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaDoK
KwogMjAxMS0wMS0yMSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIGZvciBXS0NBQ0ZMYXllclJlbmRlcmVyIC0+IENBQ0ZMYXllclZpZXcgcmVuYW1lCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVwTWVu
dVByb3h5V2luLmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3Mvd2luL1dlYlBvcHVwTWVudVByb3h5V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMyLDgg
KzQzMiw2IEBAIHZvaWQgV2ViUG9wdXBNZW51UHJveHlXaW46OmludmFsaWRhdGVJdGUKICAgICA6
OkludmFsaWRhdGVSZWN0KG1fcG9wdXAsICZyLCBUUlVFKTsKIH0KIAotLy8gU2Nyb2xsYmFyQ2xp
ZW50Ci0KIGludCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6c2Nyb2xsU2l6ZShTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbikgY29uc3QKIHsKICAgICByZXR1cm4gKChvcmllbnRhdGlvbiA9
PSBWZXJ0aWNhbFNjcm9sbGJhcikgJiYgbV9zY3JvbGxiYXIpID8gKG1fc2Nyb2xsYmFyLT50b3Rh
bFNpemUoKSAtIG1fc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpKSA6IDA7CkBAIC03MjMsNyArNzIx
LDcgQEAgTFJFU1VMVCBXZWJQb3B1cE1lbnVQcm94eVdpbjo6b25Nb3VzZVdoZQogICAgICAgICAg
ICAgLS1pOwogICAgIH0KIAotICAgIFNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKGkgPiAwID8gU2Ny
b2xsVXAgOiBTY3JvbGxEb3duLCBTY3JvbGxCeUxpbmUsIGFicyhpKSk7CisgICAgU2Nyb2xsYWJs
ZUFyZWE6OnNjcm9sbChpID4gMCA/IFNjcm9sbFVwIDogU2Nyb2xsRG93biwgU2Nyb2xsQnlMaW5l
LCBhYnMoaSkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC05MjUsMTIgKzkyMywxMiBAQCBib29s
IFdlYlBvcHVwTWVudVByb3h5V2luOjpzY3JvbGxUb1JldmVhCiAgICAgaW50IGluZGV4ID0gZm9j
dXNlZEluZGV4KCk7CiAKICAgICBpZiAoaW5kZXggPCBtX3Njcm9sbE9mZnNldCkgewotICAgICAg
ICBTY3JvbGxiYXJDbGllbnQ6OnNjcm9sbFRvWU9mZnNldFdpdGhvdXRBbmltYXRpb24oaW5kZXgp
OworICAgICAgICBTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlv
bihpbmRleCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIGlmIChpbmRleCA+
PSBtX3Njcm9sbE9mZnNldCArIHZpc2libGVJdGVtcygpKSB7Ci0gICAgICAgIFNjcm9sbGJhckNs
aWVudDo6c2Nyb2xsVG9ZT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihpbmRleCAtIHZpc2libGVJdGVt
cygpICsgMSk7CisgICAgICAgIFNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb1lPZmZzZXRXaXRob3V0
QW5pbWF0aW9uKGluZGV4IC0gdmlzaWJsZUl0ZW1zKCkgKyAxKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd2luL1dlYlBvcHVw
TWVudVByb3h5V2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dp
bi9XZWJQb3B1cE1lbnVQcm94eVdpbi5oCShyZXZpc2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy93aW4vV2ViUG9wdXBNZW51UHJveHlXaW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIldlYlBvcHVwSXRlbS5oIgogI2luY2x1ZGUgIldl
YlBvcHVwTWVudVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXIuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1Njcm9sbGJhckNsaWVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xs
YWJsZUFyZWEuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwogdHlwZWRlZiBzdHJ1
Y3QgSERDX18qIEhEQzsKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNs
YXNzIFdlYlZpZXc7CiAKLWNsYXNzIFdlYlBvcHVwTWVudVByb3h5V2luIDogcHVibGljIFdlYlBv
cHVwTWVudVByb3h5LCBwcml2YXRlIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCAgeworY2xhc3Mg
V2ViUG9wdXBNZW51UHJveHlXaW4gOiBwdWJsaWMgV2ViUG9wdXBNZW51UHJveHksIHByaXZhdGUg
V2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWEgIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXZWJQb3B1cE1lbnVQcm94eVdpbj4gY3JlYXRlKFdlYlZpZXcqIHdlYlZpZXcsIFdlYlBvcHVw
TWVudVByb3h5OjpDbGllbnQqIGNsaWVudCkKICAgICB7CkBAIC01OCw4ICs1OCw4IEBAIHByaXZh
dGU6CiAKICAgICBXZWJDb3JlOjpTY3JvbGxiYXIqIHNjcm9sbGJhcigpIGNvbnN0IHsgcmV0dXJu
IG1fc2Nyb2xsYmFyLmdldCgpOyB9CiAKLSAgICAvLyBTY3JvbGxCYXJDbGllbnQKLSAgICB2aXJ0
dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uKSBjb25zdDsKKyAgICAvLyBTY3JvbGxhYmxlQXJlYQorICAgIHZpcnR1YWwgaW50IHNjcm9s
bFNpemUoV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24pIGNvbnN0OwogICAgIHZpcnR1YWwg
aW50IHNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OlNjcm9sbGJhciopIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2
aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVNjcm9sbGJhclJlY3QoV2ViQ29yZTo6U2Nyb2xsYmFyKiwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwpAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgogICAg
IHZpcnR1YWwgYm9vbCBzY3JvbGxiYXJDb3JuZXJQcmVzZW50KCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KICAgICB2aXJ0dWFsIFdlYkNvcmU6OlNjcm9sbGJhciogdmVydGljYWxTY3JvbGxiYXIo
KSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGJhci5nZXQoKTsgfQogCi0gICAgLy8gTk9URTogVGhp
cyBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQg
ZnJvbSBTY3JvbGxiYXJDbGllbnQuCisgICAgLy8gTk9URTogVGhpcyBzaG91bGQgb25seSBiZSBj
YWxsZWQgYnkgdGhlIG92ZXJyaWRlbiBzZXRTY3JvbGxPZmZzZXQgZnJvbSBTY3JvbGxhYmxlQXJl
YS4KICAgICB2b2lkIHNjcm9sbFRvKGludCBvZmZzZXQpOwogCiAgICAgc3RhdGljIGJvb2wgcmVn
aXN0ZXJXaW5kb3dDbGFzcygpOwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlz
aW9uIDc2MzcyKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0wMS0yMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFBhcnQgMiBvZiAiQ2xlYW51cCBTY3JvbGxiYXIvU2Nyb2xsYmFyQ2xpZW50IHJlbGF0aW9uc2hp
cCIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNzc5
CisKKyAgICAgICAgUmVuYW1lIFNjcm9sbGJhckNsaWVudCAtPiBTY3JvbGxhYmxlQXJlYS4KKwor
ICAgICAgICAqIHNyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpjcmVhdGVTY3JvbGxiYXIpOgorICAgICAgICAq
IHNyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oOgorICAgICAgICAqIHNyYy9XZWJTY3JvbGxi
YXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViU2Nyb2xsYmFySW1wbDo6V2ViU2Nyb2xs
YmFySW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6OnNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uTW91c2VXaGVlbCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlNjcm9sbGJhckltcGw6Om9uS2V5RG93bik6CisgICAgICAgICogc3JjL1dl
YlNjcm9sbGJhckltcGwuaDoKKyAgICAgICAgKiB0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6VGVzdFBvcHVwTWVudUNsaWVudDo6Y3JlYXRlU2Nyb2xsYmFyKToKKwog
MjAxMS0wMS0yMSAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIHVwZGF0aW5nIGNocm9taXVtIERFUFMgc28gd2UgY2FuIHB1bGwgaW4gbGludXgg
dGhlbWUgY2hhbmdlcy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9GaWxs
UG9wdXBNZW51Q2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTQsMTEgKzI1NCwxMSBAQCBIb3N0V2luZG93KiBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudDo6aG9zCiB9CiAKIFBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudDo6Y3JlYXRlU2Nyb2xsYmFyKAotICAgIFNjcm9sbGJhckNsaWVudCogY2xpZW50
LAorICAgIFNjcm9sbGFibGVBcmVhKiBhY3JvbGxhYmxlQXJlYSwKICAgICBTY3JvbGxiYXJPcmll
bnRhdGlvbiBvcmllbnRhdGlvbiwKICAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQogewot
ICAgIHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihjbGllbnQsIG9yaWVu
dGF0aW9uLCBzaXplKTsKKyAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIoc2Nyb2xsYWJsZUFyZWEsIG9yaWVudGF0aW9uLCBzaXplKTsKIH0KIAogdm9pZCBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6aW5pdGlhbGl6ZSgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaAkocmV2aXNpb24gNzYz
NTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFdlYkNvcmU6OkZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CiAgICAgdmlydHVh
bCBXZWJDb3JlOjpIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKAotICAgICAgICBX
ZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xs
YWJsZUFyZWEqIGNsaWVudCwKICAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24g
b3JpZW50YXRpb24sCiAgICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUp
OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJ
bXBsLmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTY3JvbGxiYXJJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBXZWJT
Y3JvbGxiYXJJbXBsOjpXZWJTY3JvbGxiYXJJbXBsKFdlYlNjCiAgICAgLCBtX3Njcm9sbE9mZnNl
dCgwKQogewogICAgIG1fc2Nyb2xsYmFyID0gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxi
YXIoCi0gICAgICAgIHN0YXRpY19jYXN0PFNjcm9sbGJhckNsaWVudCo+KHRoaXMpLAorICAgICAg
ICBzdGF0aWNfY2FzdDxTY3JvbGxhYmxlQXJlYSo+KHRoaXMpLAogICAgICAgICBzdGF0aWNfY2Fz
dDxTY3JvbGxiYXJPcmllbnRhdGlvbj4ob3JpZW50YXRpb24pLAogICAgICAgICBSZWd1bGFyU2Ny
b2xsYmFyKTsKIH0KQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFdlYlNjcm9sbGJhckltcGw6OnNj
cm9sbChTY3JvbGxEaXJlCiAgICAgZWxzZQogICAgICAgICBkaXIgPSBob3Jpem9udGFsID8gU2Ny
b2xsTGVmdCA6IFNjcm9sbFVwOwogCi0gICAgV2ViQ29yZTo6U2Nyb2xsYmFyQ2xpZW50OjpzY3Jv
bGwoZGlyLCBzdGF0aWNfY2FzdDxXZWJDb3JlOjpTY3JvbGxHcmFudWxhcml0eT4oZ3JhbnVsYXJp
dHkpLCBtdWx0aXBsaWVyKTsKKyAgICBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKGRp
ciwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHk+KGdyYW51bGFyaXR5KSwg
bXVsdGlwbGllcik7CiB9CiAKIHZvaWQgV2ViU2Nyb2xsYmFySW1wbDo6cGFpbnQoV2ViQ2FudmFz
KiBjYW52YXMsIGNvbnN0IFdlYlJlY3QmIHJlY3QpCkBAIC0yMjAsNyArMjIwLDcgQEAgYm9vbCBX
ZWJTY3JvbGxiYXJJbXBsOjpvbk1vdXNlV2hlZWwoY29ucwogICAgICAgICAgICAgaWYgKG5lZ2F0
aXZlKQogICAgICAgICAgICAgICAgIGRlbHRhICo9IC0xOwogICAgICAgICB9Ci0gICAgICAgIFdl
YkNvcmU6OlNjcm9sbGJhckNsaWVudDo6c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3Jl
OjpTY3JvbGxVcCwgV2ViQ29yZTo6U2Nyb2xsQnlQaXhlbCwgZGVsdGEpOworICAgICAgICBXZWJD
b3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKChtX3Njcm9sbGJhci0+b3JpZW50YXRpb24oKSA9
PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSA/IFdlYkNvcmU6OlNjcm9sbExlZnQgOiBXZWJDb3JlOjpT
Y3JvbGxVcCwgV2ViQ29yZTo6U2Nyb2xsQnlQaXhlbCwgZGVsdGEpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKQEAgLTI1OSw3ICsyNTksNyBAQCBib29sIFdlYlNjcm9sbGJhckltcGw6
Om9uS2V5RG93bihjb25zdCBXCiAgICAgV2ViQ29yZTo6U2Nyb2xsR3JhbnVsYXJpdHkgc2Nyb2xs
R3JhbnVsYXJpdHk7CiAgICAgaWYgKFdlYlZpZXdJbXBsOjptYXBLZXlDb2RlRm9yU2Nyb2xsKGtl
eUNvZGUsICZzY3JvbGxEaXJlY3Rpb24sICZzY3JvbGxHcmFudWxhcml0eSkpIHsKICAgICAgICAg
Ly8gV2lsbCByZXR1cm4gZmFsc2UgaWYgc2Nyb2xsIGRpcmVjdGlvbiB3YXNuJ3QgY29tcGF0aWJs
ZSB3aXRoIHRoaXMgc2Nyb2xsYmFyLgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6U2Nyb2xsYmFy
Q2xpZW50OjpzY3JvbGwoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxHcmFudWxhcml0eSk7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2Nyb2xsKHNjcm9sbERpcmVjdGlv
biwgc2Nyb2xsR3JhbnVsYXJpdHkpOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTY3JvbGxiYXJJbXBsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2Nyb2xsYmFySW1wbC5oCShyZXZp
c2lvbiA3NjM1NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNjcm9sbGJhcklt
cGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lmbmRlZiBXZWJTY3JvbGxi
YXJJbXBsX2gKICNkZWZpbmUgV2ViU2Nyb2xsYmFySW1wbF9oCiAKLSNpbmNsdWRlICJTY3JvbGxi
YXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JvbGxhYmxlQXJlYS5oIgogI2luY2x1ZGUgIldlYlNj
cm9sbGJhci5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsNyArNDMsNyBAQCBj
bGFzcyBTY3JvbGxiYXI7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViU2Nyb2xsYmFy
SW1wbCA6IHB1YmxpYyBXZWJTY3JvbGxiYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFdlYkNvcmU6OlNjcm9sbGJhckNsaWVudCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhIHsKIHB1YmxpYzoKICAgICBXZWJTY3JvbGxi
YXJJbXBsKFdlYlNjcm9sbGJhckNsaWVudCosIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKTsKICAg
ICB+V2ViU2Nyb2xsYmFySW1wbCgpOwpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFdlYkNhbnZhcyosIGNvbnN0IFdlYlJlY3QmKTsKICAgICB2aXJ0dWFs
IGJvb2wgaGFuZGxlSW5wdXRFdmVudChjb25zdCBXZWJJbnB1dEV2ZW50Jik7CiAKLSAgICAvLyBX
ZWJDb3JlOjpTY3JvbGxiYXJDbGllbnQgbWV0aG9kcworICAgIC8vIFdlYkNvcmU6OlNjcm9sbGFi
bGVBcmVhIG1ldGhvZHMKICAgICB2aXJ0dWFsIGludCBzY3JvbGxTaXplKFdlYkNvcmU6OlNjcm9s
bGJhck9yaWVudGF0aW9uKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBzY3JvbGxQb3NpdGlvbihX
ZWJDb3JlOjpTY3JvbGxiYXIqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsT2Zm
c2V0KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvUG9wdXBNZW51VGVzdC5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTYsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBGb250U2VsZWN0b3IqIGZv
bnRTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3coKSBjb25zdCB7IHJldHVybiAwOyB9CiAgICAgCi0gICAgdmlydHVhbCBQYXNz
UmVmUHRyPFNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKFNjcm9sbGJhckNsaWVudCosIFNjcm9s
bGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgeyByZXR1cm4gMDsgfQorICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcihTY3JvbGxhYmxl
QXJlYSosIFNjcm9sbGJhck9yaWVudGF0aW9uLCBTY3JvbGxiYXJDb250cm9sU2l6ZSkgeyByZXR1
cm4gMDsgfQogCiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fc2VsZWN0SW5kZXg7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3F0
L0NoYW5nZUxvZwkocmV2aXNpb24gNzYzNzIpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDExLTAxLTIxICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUGFydCAyIG9mICJDbGVhbnVwIFNjcm9sbGJhci9TY3JvbGxiYXJDbGllbnQg
cmVsYXRpb25zaGlwIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTI3NzkKKworICAgICAgICBSZW5hbWUgU2Nyb2xsYmFyQ2xpZW50IC0+IFNjcm9sbGFi
bGVBcmVhLgorCisgICAgICAgICogQXBpL3F3ZWJmcmFtZS5jcHA6CisgICAgICAgIChRV2ViRnJh
bWU6OnNldFNjcm9sbEJhclZhbHVlKToKKwogMjAxMS0wMS0yMCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvcXQv
QXBpL3F3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9xdC9BcGkvcXdl
YmZyYW1lLmNwcAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViS2l0L3F0L0FwaS9xd2Vi
ZnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcxLDcgKzEwNzEsNyBAQCB2b2lkIFFXZWJG
cmFtZTo6c2V0U2Nyb2xsQmFyVmFsdWUoUXQ6Ok9yCiAgICAgICAgICAgICB2YWx1ZSA9IDA7CiAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlID4gc2Nyb2xsQmFyTWF4aW11bShvcmllbnRhdGlvbikpCiAg
ICAgICAgICAgICB2YWx1ZSA9IHNjcm9sbEJhck1heGltdW0ob3JpZW50YXRpb24pOwotICAgICAg
ICBzYi0+Y2xpZW50KCktPnNjcm9sbFRvT2Zmc2V0V2l0aG91dEFuaW1hdGlvbihvcmllbnRhdGlv
biA9PSBRdDo6SG9yaXpvbnRhbCA/IEhvcml6b250YWxTY3JvbGxiYXIgOiBWZXJ0aWNhbFNjcm9s
bGJhciwgdmFsdWUpOworICAgICAgICBzYi0+c2Nyb2xsYWJsZUFyZWEoKS0+c2Nyb2xsVG9PZmZz
ZXRXaXRob3V0QW5pbWF0aW9uKG9yaWVudGF0aW9uID09IFF0OjpIb3Jpem9udGFsID8gSG9yaXpv
bnRhbFNjcm9sbGJhciA6IFZlcnRpY2FsU2Nyb2xsYmFyLCB2YWx1ZSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiA3NjM3MikKKysrIFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDExLTAxLTIxICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUGFydCAyIG9mICJDbGVhbnVwIFNjcm9sbGJhci9TY3JvbGxi
YXJDbGllbnQgcmVsYXRpb25zaGlwIgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTI3NzkKKworICAgICAgICBSZW5hbWUgU2Nyb2xsYmFyQ2xpZW50IC0+
IFNjcm9sbGFibGVBcmVhLgorCisgICAgICAgICogV2ViU2Nyb2xsQmFyLmNwcDoKKyAgICAgICAg
KFdlYlNjcm9sbEJhcjo6c2Nyb2xsKToKKyAgICAgICAgKiBXZWJTY3JvbGxCYXIuaDoKKwogMjAx
MS0wMS0yMCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRl
IGZvciBDQUNGTGF5ZXJUcmVlSG9zdCBjaGFuZ2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJTY3JvbGxCYXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYlNjcm9s
bEJhci5jcHAJKHJldmlzaW9uIDc2MzU2KQorKysgU291cmNlL1dlYktpdC93aW4vV2ViU2Nyb2xs
QmFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ4LDExICsyNDgsMTIgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJTY3JvbGxCYXI6OgogewogICAgIFNjcm9sbERpcmVjdGlvbiB3ZWJD
b3JlU2Nyb2xsRGlyZWN0aW9uID0gKFNjcm9sbERpcmVjdGlvbikgZGlyZWN0aW9uOwogICAgIFNj
cm9sbEdyYW51bGFyaXR5IHdlYkNvcmVHcmFudWxhcml0eSA9IChTY3JvbGxHcmFudWxhcml0eSkg
Z3JhbnVsYXJpdHk7Ci0gICAgU2Nyb2xsYmFyQ2xpZW50OjpzY3JvbGwod2ViQ29yZVNjcm9sbERp
cmVjdGlvbiwgd2ViQ29yZUdyYW51bGFyaXR5LCBtdWx0aXBsaWVyKTsKKyAgICBTY3JvbGxhYmxl
QXJlYTo6c2Nyb2xsKHdlYkNvcmVTY3JvbGxEaXJlY3Rpb24sIHdlYkNvcmVHcmFudWxhcml0eSwg
bXVsdGlwbGllcik7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLS8vIFNjcm9sbGJhckNsaWVudCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisv
LyBTY3JvbGxhYmxlQXJlYSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKIGludCBXZWJTY3JvbGxCYXI6OnNjcm9sbFNpemUoU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIChvcmllbnRhdGlv
biA9PSBtX3Njcm9sbEJhci0+b3JpZW50YXRpb24oKSkgPyAobV9zY3JvbGxCYXItPnRvdGFsU2l6
ZSgpIC0gbV9zY3JvbGxCYXItPnZpc2libGVTaXplKCkpIDogMDsgCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L3dpbi9XZWJTY3JvbGxCYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9X
ZWJTY3JvbGxCYXIuaAkocmV2aXNpb24gNzYzNTYpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJT
Y3JvbGxCYXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTcgKzM0LDE0IEBACiAjcHJhZ21hIHdh
cm5pbmcocHVzaCwgMCkKICNpbmNsdWRlIDxXZWJDb3JlL0NPTVB0ci5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2Nyb2xsYmFyLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxiYXJDbGllbnQuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbGFibGVBcmVhLmg+CiAjcHJhZ21hIHdhcm5pbmcocG9w
KQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBTY3JvbGxiYXI7CiB9CiAKLXVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwotCi1jbGFzcyBXZWJTY3JvbGxCYXIgOiBwdWJsaWMgSVdlYlNjcm9s
bEJhclByaXZhdGUsIFNjcm9sbGJhckNsaWVudAoteworY2xhc3MgV2ViU2Nyb2xsQmFyIDogcHVi
bGljIElXZWJTY3JvbGxCYXJQcml2YXRlLCBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFdlYlNjcm9sbEJhciogY3JlYXRlSW5zdGFuY2UoKTsKIHByb3RlY3Rl
ZDoKQEAgLTExNSw3ICsxMTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8qIFtpbl0gKi8gZmxvYXQg
bXVsdGlwbGllcik7CiAKIHByb3RlY3RlZDoKLSAgICAvLyBTY3JvbGxiYXJDbGllbnQKKyAgICAv
LyBTY3JvbGxhYmxlQXJlYQogICAgIHZpcnR1YWwgaW50IHNjcm9sbFNpemUoU2Nyb2xsYmFyT3Jp
ZW50YXRpb24gb3JpZW50YXRpb24pIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IHNjcm9sbFBvc2l0
aW9uKFNjcm9sbGJhciopIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxPZmZzZXQo
Y29uc3QgSW50UG9pbnQmKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>