<?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>107046</bug_id>
          
          <creation_ts>2013-01-16 13:14:57 -0800</creation_ts>
          <short_desc>Support non-WebVTT cues from in-band text tracks</short_desc>
          <delta_ts>2013-01-21 14:07:15 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>43668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>808647</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-16 13:14:57 -0800</bug_when>
    <thetext>r137161 added support for in-band text tracks, and to created WebVTT cues from other types of cue. This translation is not always successful, so we should have a &quot;generic&quot; cue type internal to WebCore which does not use the WebVTT rendering rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808710</commentid>
    <comment_count>1</comment_count>
      <attachid>183034</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-16 14:18:51 -0800</bug_when>
    <thetext>Created attachment 183034
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808713</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-16 14:21:57 -0800</bug_when>
    <thetext>Attachment 183034 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/html/track/TextTrackCueGeneric.cpp:54:  The parameter name &quot;document&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/track/TextTrackCueGeneric.cpp:54:  The parameter name &quot;cue&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:302:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebCore/html/track/TextTrackCueGeneric.h:26:  #ifndef header guard has wrong style, please use: TextTrackCueGeneric_h  [build/header_guard] [5]
Source/WebCore/html/track/TextTrackCueGeneric.h:69:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/html/track/TextTrack.h:108:  The parameter name &quot;cue&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 6 in 17 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>808739</commentid>
    <comment_count>3</comment_count>
      <attachid>183037</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-16 14:52:26 -0800</bug_when>
    <thetext>Created attachment 183037
Update patch for my good friend the style bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808741</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-16 14:54:03 -0800</bug_when>
    <thetext>Attachment 183037 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/html/track/TextTrack.h:108:  The parameter name &quot;cue&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 17 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>808788</commentid>
    <comment_count>5</comment_count>
      <attachid>183037</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-16 15:41:02 -0800</bug_when>
    <thetext>Comment on attachment 183037
Update patch for my good friend the style bot.

Attachment 183037 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15914508</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808798</commentid>
    <comment_count>6</comment_count>
      <attachid>183050</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-16 15:53:22 -0800</bug_when>
    <thetext>Created attachment 183050
Add new files to other port build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808856</commentid>
    <comment_count>7</comment_count>
      <attachid>183050</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-01-16 16:58:06 -0800</bug_when>
    <thetext>Comment on attachment 183050
Add new files to other port build systems.

Attachment 183050 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15909617</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808910</commentid>
    <comment_count>8</comment_count>
      <attachid>183074</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-16 17:55:16 -0800</bug_when>
    <thetext>Created attachment 183074
Another patch, another build system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>811684</commentid>
    <comment_count>9</comment_count>
      <attachid>183074</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-20 14:45:36 -0800</bug_when>
    <thetext>Comment on attachment 183074
Another patch, another build system.

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

r- due to the leak.  I am also not fond of the name TextTrackCueGeneric, since I don&apos;t understand what is generic about it.

&gt; Source/WebCore/html/track/TextTrackCueGeneric.cpp:103
&gt; +    :TextTrackCue(context, start, end, content)

Missing space.

&gt; Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h:50
&gt; +    enum alignment {

Types should start with a capital letter.

&gt; Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:335
&gt; +    m_cues.resize(0);

This looks like a leak to me.

&gt; Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:66
&gt; +    Vector&lt;GenericCueData*&gt; m_cues;

I don&apos;t see anyone deleting these cues.  Can we use an OwnPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812362</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-21 13:23:11 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 183074 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=183074&amp;action=review
&gt; 
&gt; r- due to the leak.  I am also not fond of the name TextTrackCueGeneric, since I don&apos;t understand what is generic about it.
&gt; 
A &quot;generic&quot; cue is a non-WebVTT cue, so it is one which should not be positioned/sized as if it was WebVTT. I agree that TextTrackCueGeneric isn&apos;t a great name, but I couldn&apos;t come up with anything better (TextTrackCueNonWebVTT, yuck). I added a short comment explaining what it is.

&gt; &gt; Source/WebCore/html/track/TextTrackCueGeneric.cpp:103
&gt; &gt; +    :TextTrackCue(context, start, end, content)
&gt; 
&gt; Missing space.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h:50
&gt; &gt; +    enum alignment {
&gt; 
&gt; Types should start with a capital letter.
&gt; 
Fixed.

&gt; &gt; Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:335
&gt; &gt; +    m_cues.resize(0);
&gt; 
&gt; This looks like a leak to me.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.h:66
&gt; &gt; +    Vector&lt;GenericCueData*&gt; m_cues;
&gt; 
&gt; I don&apos;t see anyone deleting these cues.  Can we use an OwnPtr?
&gt;
Oops, it was a leak. Fixed by changing to Vector&lt;OwnPtr&lt;GenericCueData&gt; &gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812363</commentid>
    <comment_count>11</comment_count>
      <attachid>183826</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-21 13:24:04 -0800</bug_when>
    <thetext>Created attachment 183826
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812367</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-21 13:29:55 -0800</bug_when>
    <thetext>Attachment 183826 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/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:307:  Extra space after ( in function call  [whitespace/parens] [4]
Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:327:  Local variables should never be PassOwnPtr (see http://webkit.org/coding/RefPtr.html).  [readability/pass_ptr] [5]
Total errors found: 2 in 23 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>812368</commentid>
    <comment_count>13</comment_count>
      <attachid>183828</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-21 13:44:45 -0800</bug_when>
    <thetext>Created attachment 183828
Updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812372</commentid>
    <comment_count>14</comment_count>
      <attachid>183828</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-01-21 13:47:23 -0800</bug_when>
    <thetext>Comment on attachment 183828
Updated patch.

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

&gt; Source/WebCore/platform/graphics/InbandTextTrackPrivateClient.h:95
&gt; +private:
&gt; +
&gt; +    double m_startTime;

Unnecessary newline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812373</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-21 13:49:15 -0800</bug_when>
    <thetext>Attachment 183828 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/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:307:  Extra space after ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 23 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>812375</commentid>
    <comment_count>16</comment_count>
      <attachid>183831</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-21 13:51:25 -0800</bug_when>
    <thetext>Created attachment 183831
One byte smaller this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812383</commentid>
    <comment_count>17</comment_count>
      <attachid>183831</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2013-01-21 14:05:49 -0800</bug_when>
    <thetext>Comment on attachment 183831
One byte smaller this time.

http://trac.webkit.org/changeset/140359</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>812385</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2013-01-21 14:07:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/13055333&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183034</attachid>
            <date>2013-01-16 14:18:51 -0800</date>
            <delta_ts>2013-01-16 14:52:26 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_22.txt</filename>
            <type>text/plain</type>
            <size>62191</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTg5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDEzLTAxLTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgbm9uLVdl
YlZUVCBjdWVzIGZyb20gaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVEaXNwbGF5KTogUGFzcyB2aWRlbyBzaXplIHRvIGdldERp
c3BsYXlUcmVlLgorCisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjphZGRHZW5lcmljQ3VlKTogTmV3LCBj
cmVhdGUgYSBnZW5lcmljIGN1ZSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgICAgICAg
IChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2s6OmFkZFdlYlZUVEN1ZSk6IFJlbmFtZWQgZnJvbSBh
ZGRDdWUuCisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaDoKKworICAgICAg
ICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFj
azo6aGFzQ3VlKTogTW92ZWQgZnJvbSBJbmJhbmRUZXh0VHJhY2suY3BwLCB1c2Ugb3BlcmF0b3Ig
PT0gaW5zdGVhZCBvZiBpbmxpbmUKKyAgICAgICAgICAgIGNvbXBhcmlzb24gc28gZGVyaXZlZCBU
ZXh0VHJhY2tDdWVzIGNhbiBiZSBjb21wYXJlZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRU
cmFjay5oOgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOiBJbnRlcmZh
Y2UgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUp
OiBEb24ndCBjcmVhdGUgdGhlIGRpc3BsYXkgdHJlZSBpbiB0aGUgY29uc3RydWN0b3IsIGl0IG1h
eQorICAgICAgICAgICAgbmV2ZXIgYmUgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRy
YWNrQ3VlOjpjcmVhdGVEaXNwbGF5VHJlZSk6IE5ldywgY3JlYXRlIHRoZSBkaXNwbGF5IHRyZWUu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmRpc3BsYXlUcmVlSW50ZXJuYWwpOiBE
aXNwbGF5IHRyZWUgYWNjZXNzb3IsIGFsbG93cyBpdCB0byBiZSBjcmVhdGVkIGxhemlseS4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0QWxpZ24pOiBBbGlnbm1lbnQgLT4gQ3Vl
QWxpZ25tZW50LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2ZSk6
IFVzZSBkaXNwbGF5VHJlZUludGVybmFsKCkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tD
dWU6OmdldERpc3BsYXlUcmVlKTogVXNlIGRpc3BsYXlUcmVlSW50ZXJuYWwoKSwgcGFzcyB2aWRl
byBzaXplIHRvIGFwcGx5Q1NTUHJvcGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFj
a0N1ZTo6cmVtb3ZlRGlzcGxheVRyZWUpOiBVc2UgZGlzcGxheVRyZWVJbnRlcm5hbCgpLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpvcGVyYXRvcj09KTogTmV3LgorICAgICAgICAq
IGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tD
dWU6OmdldEFsaWdubWVudCk6IEFsaWdubWVudCAtPiBDdWVBbGlnbm1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tDdWU6Om9wZXJhdG9yIT0pOiBOZXcuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2tDdWU6OmN1ZVR5cGUpOiBOZXcsIGN1ZSB0eXBlIGlkZW50aWZpZWQgbmVlZGVk
IGJ5IG9wZXJhdG9yPT0uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6Om93bmVyRG9j
dW1lbnQpOiBOZXcuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWNCb3g6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljQm94OjpUZXh0VHJh
Y2tDdWVHZW5lcmljQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWNC
b3g6OmFwcGx5Q1NTUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjo6VGV4dFRyYWNrQ3Vl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZURpc3BsYXlU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6Om9wZXJhdG9yPT0p
OgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjp+VGV4dFRyYWNrQ3VlR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpiYXNlRm9udFNpemVSZWxhdGl2ZVRv
VmlkZW9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0
QmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRUcmFja0N1ZUdlbmVyaWM6OmZvbnRTaXplTXVsdGlwbGllcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2tDdWVHZW5lcmljOjpzZXRGb250U2l6ZU11bHRpcGxpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6Zm9udE5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrQ3VlR2VuZXJpYzo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
VHJhY2tDdWVHZW5lcmljOjpjdWVUeXBlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRl
cyk6IENvcHkgY3VlIGF0dHJpYnV0ZXMgaW50byBHZW5lcmljQ3VlRGF0YQorICAgICAgICAgICAg
c3RydWN0IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNvbnZlcnQgdG8gV2ViVlRUIHNldHRpbmdzIHN0
cmluZy4gUHJvY2VzcyBmb250IHNpemUsZm9udCBiYXNlCisgICAgICAgICAgICBzaXplLCBmb250
IG5hbWUsIGFuZCB2ZXJ0aWNhbCBsYXlvdXQgYXR0cmlidXRlcywKKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUpOiBDcmVhdGUgc2VwYXJhdGUg
Y3VlcyBmb3IgZWFjaCBhdHRyaWJ1dGVkCisgICAgICAgICAgICBzdHJpbmcgaW4gdGhlIGFycmF5
IGJlY2F1c2UgZWFjaCBvbmUgY2FuIGJlIGF0IGEgZGlmZmVyZW50IHNjcmVlbiBsb2NhdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFs
dWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oOgorICAgICAgICAoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRik6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCk6IFJlc2V0IGFueSBwYXJ0aWFsbHkgYWNj
dW11bGF0ZWQgY3VlcworICAgICAgICAgICAgZGVsaXZlcmVkIHNpbmNlIHRoZSBzZWVrIHdhcyBz
dGFydGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjphZGRHZW5lcmljQ3VlKTogUmVuYW1lZCBmcm9tIGZsdXNoQ3VycmVudEN1ZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOiBX
aGl0ZXNwYWNlIGNsZWFudXAuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0NoYW5nZWQp
OiBUZWxsIGxlZ2libGUgb3V0cHV0IHRvIGRlbGl2ZXIgY3VlcworICAgICAgICAgICAgd2l0aG91
dCBhbnkgYWRkaXRpb25hbCBzdHlsaW5nIG5lZWRlZCBieSB0aGUgaW50ZXJuYWwgcmVuZGVyZXIu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpw
cm9jZXNzVGV4dFRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpzZXRDdXJyZW50VHJhY2spOiBEbyBub3RoaW5nIGlmIGFza2VkIHRv
IGNoYW5nZQorICAgICAgICAgICAgdG8gdGhlIHRyYWNrIHRoYXQgaXMgYWxyZWFkeSBjdXJyZW50
LgorICAgICAgICAoLVtXZWJDb3JlQVZGTW92aWVPYnNlcnZlciBsZWdpYmxlT3V0cHV0OmRpZE91
dHB1dEF0dHJpYnV0ZWRTdHJpbmdzOm5hdGl2ZVNhbXBsZUJ1ZmZlcnM6Zm9ySXRlbVRpbWU6XSk6
CisgICAgICAgICAgICBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2xpZW50IGNhbGxiYWNr
IGlzbid0IE5VTEwuCisKIDIwMTMtMDEtMTYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhl
LmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbZ3N0cmVhbWVyXSBTb21lIG1lZGlhIHRlc3Rz
IG9jY2FzaW9uYWxseSBjcmFzaCB3aXRoIGdzdHJlYW1lciAxLjAgYmFja2VuZApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDggQEAKIAkJMDcwNzU2REYx
NDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA3NTZEOTE0MjM5QjRDMDA0MTQxNjEg
LyogSlNUZXh0VHJhY2tDdWVMaXN0LmNwcCAqLzsgfTsKIAkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0
MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNr
Q3VlTGlzdC5oICovOyB9OwogCQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJp
bGl0eVNsaWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcwOUZDNEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsg
fTsKKwkJMDcxQTlFQzIxNjhGQkM0MzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzAx
NjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwICovOyB9OworCQkwNzFB
OUVDMzE2OEZCQzU1MDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzExNjhGQjU2QzAwMjYy
OUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJp
Y0V2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDcyMEIwOUUxNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCAq
LzsgfTsKIAkJMDcyMEIwQTAxNEQzMzIzNTAwNjQyOTU2IC8qIEdlc3R1cmVFdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMz
MjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLzsgfTsKIAkJMDcyMEIwQTExNEQzMzIz
NTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJp
Y0V2ZW50UXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzI3MSw2ICs3MjczLDggQEAKIAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8q
IEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1RleHRUcmFja0N1ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZD
NEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwNzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9s
cy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHRUcmFja0N1ZUdlbmVyaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzFB
OUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tDdWVHZW5lcmljLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZl
bnRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmlj
RXZlbnRRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTRE
MzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTYxNSw2ICsxOTYxOSw4IEBACiAJCQkJOTc1OUU5
MzgxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5jcHAgKi8sCiAJCQkJOTc1OUU5Mzkx
NEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5oICovLAogCQkJCTk3NTlFOTNBMTRFRjFD
RjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWUuaWRsICovLAorCQkJCTA3MUE5RUMwMTY4RkI1NkMw
MDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAqLywKKwkJCQkwNzFBOUVDMTE2OEZC
NTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oICovLAogCQkJCTk3NTlFOTNCMTRF
RjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCAqLywKIAkJCQk5NzU5RTkzQzE0
RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlTGlzdC5oICovLAogCQkJCTk3NTlFOTNEMTRF
RjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmlkbCAqLywKQEAgLTI1ODg0LDYgKzI1
ODkwLDcgQEAKIAkJCQlCMkMzREE0QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc1OUU5NDAxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc1OUU5NDMxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFj
a0N1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcxQTlFQzMxNjhGQkM1NTAwMjYyOUY5IC8qIFRl
eHRUcmFja0N1ZUdlbmVyaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTlFOTQ2MTRFRjFDRjgw
MDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzY5NzA4
NzE0NjNBRDg3MDBGNTAyQ0YgLyogVGV4dFRyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjFBRDRFNzQxM0ExMkE0NjAwODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yOTA1Myw2ICsyOTA2MCw3IEBACiAJCQkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2
IC8qIFRleHRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1OUU5M0YxNEVGMUNGODAw
MjZBMkREIC8qIFRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzU5RTk0MjE0RUYx
Q0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3MUE5
RUMyMTY4RkJDNDMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3NTlFOTQ1MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3Njk3MDg2MTQ2M0FEODcwMEY1MDJDRiAvKiBUZXh0VHJh
Y2tMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIxQUQ0RTczMTNBMTJBNDYwMDg0NkIyNyAv
KiBUZXh0VHJhY2tMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lv
biAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDQsOCArMTMwNCw3IEBAIHZvaWQgTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWUKICAgICAgICAgaWYgKCFjdWUtPnRyYWNrKCkg
fHwgIWN1ZS0+dHJhY2soKS0+aXNSZW5kZXJlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlz
cGxheVRyZWUoKTsKLQorICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94
ID0gY3VlLT5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpKTsKICAgICAg
ICAgaWYgKGRpc3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoc3RhdGljX2Nh
c3Q8Tm9kZSo+KGRpc3BsYXlCb3guZ2V0KCkpKSkKICAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBk
aXNwbGF5IHRyZWUgb2YgYSBjdWUgaXMgcmVtb3ZlZCB3aGVuIHRoZSBhY3RpdmUgZmxhZyBvZiB0
aGUgY3VlIGlzIHVuc2V0LgogICAgICAgICAgICAgbV9jdWVDb250YWluZXItPmFwcGVuZENoaWxk
KGRpc3BsYXlCb3gsIEFTU0VSVF9OT19FWENFUFRJT04sIGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAJKHJldmlzaW9uIDEzOTg5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlRl
eHRUcmFja0N1ZUdlbmVyaWMuaCIKICNpbmNsdWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCi0KKyNp
bmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTk4LDc0ICsxMDAsNTUgQEAgc2l6ZV90IEluYmFuZFRleHRUcmFjazo6
aW5iYW5kVHJhY2tJbmRleAogICAgIHJldHVybiBtX3ByaXZhdGUtPnRleHRUcmFja0luZGV4KCk7
CiB9CiAKLXZvaWQgSW5iYW5kVGV4dFRyYWNrOjphZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSogdHJhY2tQcml2YXRlLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYg
aWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncykKK3ZvaWQg
SW5iYW5kVGV4dFRyYWNrOjphZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRy
YWNrUHJpdmF0ZSwgY29uc3QgR2VuZXJpY0N1ZURhdGEmIGN1ZURhdGEpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRyYWNrUHJpdmF0ZSk7CiAgICAgQVNTRVJUKHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZh
dGUpOwogCi0gICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzdGFydCwgZW5kLCBjb250ZW50KTsKLSAgICBj
dWUtPnNldElkKGlkKTsKLSAgICBjdWUtPnNldEN1ZVNldHRpbmdzKHNldHRpbmdzKTsKLSAgICBj
dWUtPnNldFRyYWNrKHRoaXMpOworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUg
PSBUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBj
dWVEYXRhLnN0YXJ0VGltZSwgY3VlRGF0YS5lbmRUaW1lLCBjdWVEYXRhLmNvbnRlbnQpOwogCi0g
ICAgaWYgKCFtX2N1ZXMpCi0gICAgICAgIG1fY3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0
ZSgpOwotICAgIG1fY3Vlcy0+YWRkKGN1ZSk7Ci0gICAgCi0gICAgaWYgKGNsaWVudCgpKQotICAg
ICAgICBjbGllbnQoKS0+dGV4dFRyYWNrQWRkQ3Vlcyh0aGlzLCBtX2N1ZXMuZ2V0KCkpOworICAg
IGN1ZS0+c2V0SWQoY3VlRGF0YS5pZCk7CisgICAgY3VlLT5zZXRCYXNlRm9udFNpemVSZWxhdGl2
ZVRvVmlkZW9IZWlnaHQoY3VlRGF0YS5iYXNlRm9udFNpemUpOworICAgIGN1ZS0+c2V0Rm9udFNp
emVNdWx0aXBsaWVyKGN1ZURhdGEucmVsYXRpdmVGb250U2l6ZSk7CisgICAgY3VlLT5zZXRGb250
TmFtZShjdWVEYXRhLmZvbnROYW1lKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgaWYg
KGN1ZURhdGEucG9zaXRpb24gPiAwKQorICAgICAgICBjdWUtPnNldFBvc2l0aW9uKGxyb3VuZChj
dWVEYXRhLnBvc2l0aW9uKSwgZWMpOworICAgIGlmIChjdWVEYXRhLmxpbmUgPiAwKQorICAgICAg
ICBjdWUtPnNldExpbmUobHJvdW5kKGN1ZURhdGEubGluZSksIGVjKTsKKyAgICBpZiAoY3VlRGF0
YS5zaXplID4gMCkKKyAgICAgICAgY3VlLT5zZXRTaXplKGxyb3VuZChjdWVEYXRhLnNpemUpLCBl
Yyk7CisgICAgaWYgKGN1ZURhdGEuYWxpZ24gPT0gR2VuZXJpY0N1ZURhdGE6OlN0YXJ0KQorICAg
ICAgICBjdWUtPnNldEFsaWduKEFTQ0lJTGl0ZXJhbCgic3RhcnQiKSwgZWMpOworICAgIGVsc2Ug
aWYgKGN1ZURhdGEuYWxpZ24gPT0gR2VuZXJpY0N1ZURhdGE6Ok1pZGRsZSkKKyAgICAgICAgY3Vl
LT5zZXRBbGlnbihBU0NJSUxpdGVyYWwoIm1pZGRsZSIpLCBlYyk7CisgICAgZWxzZSBpZiAoY3Vl
RGF0YS5hbGlnbiA9PSBHZW5lcmljQ3VlRGF0YTo6RW5kKQorICAgICAgICBjdWUtPnNldEFsaWdu
KEFTQ0lJTGl0ZXJhbCgiZW5kIiksIGVjKTsKKyAgICBjdWUtPnNldFNuYXBUb0xpbmVzKGZhbHNl
KTsKKworICAgIGlmIChoYXNDdWUoY3VlLmdldCgpKSkgeworICAgICAgICBMT0coTWVkaWEsICJJ
bmJhbmRUZXh0VHJhY2s6OmFkZEdlbmVyaWNDdWUgaWdub3JpbmcgYWxyZWFkeSBhZGRlZCBjdWU6
IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBjb250ZW50PVwiJXNcIlxuIiwKKyAgICAgICAgICAgIGN1
ZURhdGEuc3RhcnRUaW1lLCBjdWVEYXRhLmVuZFRpbWUsIGN1ZURhdGEuY29udGVudC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFkZEN1ZShjdWUpOwogfQog
Ci1ib29sIEluYmFuZFRleHRUcmFjazo6aGFzQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBk
b3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0
VHJhY2s6OmFkZFdlYlZUVEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiB0cmFja1ByaXZhdGUs
IGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5n
JiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzKQogeworICAgIFVOVVNFRF9QQVJBTSh0
cmFja1ByaXZhdGUpOworICAgIEFTU0VSVCh0cmFja1ByaXZhdGUgPT0gbV9wcml2YXRlKTsKIAot
ICAgIGlmIChzdGFydFRpbWUgPCAwIHx8IGVuZFRpbWUgPCAwKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWN1ZXMoKS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHNpemVfdCBzZWFyY2hTdGFydCA9IDA7Ci0gICAgc2l6ZV90IHNlYXJjaEVuZCA9IGN1
ZXMoKS0+bGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBBU1NFUlQoc2VhcmNo
U3RhcnQgPD0gY3VlcygpLT5sZW5ndGgoKSk7Ci0gICAgICAgIEFTU0VSVChzZWFyY2hFbmQgPD0g
Y3VlcygpLT5sZW5ndGgoKSk7Ci0gICAgICAgIAotICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEN1ZXMgaW4gdGhlIFRleHRUcmFja0N1ZUxpc3QgYXJlIG1h
aW50YWluZWQgaW4gc3RhcnQgdGltZSBvcmRlci4KLSAgICAgICAgaWYgKHNlYXJjaFN0YXJ0ID09
IHNlYXJjaEVuZCkgewotICAgICAgICAgICAgaWYgKCFzZWFyY2hTdGFydCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGN1ZSA9IGN1ZXMo
KS0+aXRlbShzZWFyY2hTdGFydCAtIDEpOwotICAgICAgICAgICAgaWYgKCFjdWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+c3RhcnRUaW1lKCkg
IT0gc3RhcnRUaW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChjdWUtPmVuZFRpbWUoKSAhPSBlbmRUaW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChjdWUtPnRleHQoKSAhPSBjb250ZW50KQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdWUtPmN1ZVNldHRpbmdzKCkg
IT0gc2V0dGluZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKGN1ZS0+aWQoKSAhPSBpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBzaXplX3QgaW5kZXggPSAoc2VhcmNoU3RhcnQgKyBzZWFyY2hFbmQpIC8gMjsKLSAg
ICAgICAgY3VlID0gY3VlcygpLT5pdGVtKGluZGV4KTsKLSAgICAgICAgaWYgKHN0YXJ0VGltZSA8
IGN1ZS0+c3RhcnRUaW1lKCkgfHwgKHN0YXJ0VGltZSA9PSBjdWUtPnN0YXJ0VGltZSgpICYmIGVu
ZFRpbWUgPiBjdWUtPmVuZFRpbWUoKSkpCi0gICAgICAgICAgICBzZWFyY2hFbmQgPSBpbmRleDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoU3RhcnQgPSBpbmRleCArIDE7Ci0gICAg
fQorICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgY29udGVudCk7CisgICAgY3VlLT5z
ZXRJZChpZCk7CisgICAgY3VlLT5zZXRDdWVTZXR0aW5ncyhzZXR0aW5ncyk7CiAgICAgCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNDdWUo
Y3VlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYWRkQ3VlKGN1ZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmRUZXh0VHJhY2suaAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsOCArNTEsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEluYmFuZFRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgVGV4dFRyYWNrQ2xpZW50KiwgUGFzc1JlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
Pik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBk
b3VibGUsIGRvdWJsZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGhhc0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2
YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGRHZW5lcmljQ3VlKEluYmFu
ZFRleHRUcmFja1ByaXZhdGUqLCBjb25zdCBHZW5lcmljQ3VlRGF0YSYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBhZGRXZWJWVFRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJs
ZSwgZG91YmxlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBP
VkVSUklERTsKIAogICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiBtX3ByaXZhdGU7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNp
b24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMzksNiArMzM5LDY0IEBAIGludCBUZXh0VHJhY2s6
OnRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGUKICAgICByZXR1cm4gbV9yZW5kZXJlZFRyYWNrSW5k
ZXg7CiB9CiAKK2Jvb2wgVGV4dFRyYWNrOjpoYXNDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCit7Cisg
ICAgaWYgKGN1ZS0+c3RhcnRUaW1lKCkgPCAwIHx8IGN1ZS0+ZW5kVGltZSgpIDwgMCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghbV9jdWVzIHx8ICFtX2N1ZXMtPmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2l6ZV90IHNlYXJjaFN0YXJ0
ID0gMDsKKyAgICBzaXplX3Qgc2VhcmNoRW5kID0gbV9jdWVzLT5sZW5ndGgoKTsKKyAgICAKKyAg
ICB3aGlsZSAoMSkgeworICAgICAgICBBU1NFUlQoc2VhcmNoU3RhcnQgPD0gbV9jdWVzLT5sZW5n
dGgoKSk7CisgICAgICAgIEFTU0VSVChzZWFyY2hFbmQgPD0gbV9jdWVzLT5sZW5ndGgoKSk7Cisg
ICAgICAgIAorICAgICAgICBUZXh0VHJhY2tDdWUqIGV4aXN0aW5nQ3VlOworICAgICAgICAKKyAg
ICAgICAgLy8gQ3VlcyBpbiB0aGUgVGV4dFRyYWNrQ3VlTGlzdCBhcmUgbWFpbnRhaW5lZCBpbiBz
dGFydCB0aW1lIG9yZGVyLgorICAgICAgICBpZiAoc2VhcmNoU3RhcnQgPT0gc2VhcmNoRW5kKSB7
CisgICAgICAgICAgICBpZiAoIXNlYXJjaFN0YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjdWUgd2l0
aCB0aGUgc2FtZSBzdGFydCB0aW1lLCBiYWNrIHVwIHRvIGZpcnN0IG9uZSBzbyB3ZQorICAgICAg
ICAgICAgLy8gY29uc2lkZXIgYWxsIG9mIHRoZW0uCisgICAgICAgICAgICB3aGlsZSAoc2VhcmNo
U3RhcnQgPj0gMiAmJiBjdWUtPnN0YXJ0VGltZSgpID09IG1fY3Vlcy0+aXRlbShzZWFyY2hTdGFy
dCAtIDIpLT5zdGFydFRpbWUoKSkKKyAgICAgICAgICAgICAgICAtLXNlYXJjaFN0YXJ0OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBib29sIGZpcnN0Q29tcGFyZSA9IHRydWU7CisgICAgICAg
ICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmICghZmlyc3RDb21wYXJlKQorICAg
ICAgICAgICAgICAgICAgICArK3NlYXJjaFN0YXJ0OworICAgICAgICAgICAgICAgIGZpcnN0Q29t
cGFyZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChzZWFyY2hTdGFydCA+IG1fY3Vlcy0+
bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgICAgIGV4aXN0aW5nQ3VlID0gbV9jdWVzLT5pdGVtKHNlYXJjaFN0YXJ0IC0gMSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFleGlzdGluZ0N1ZSB8fCBjdWUtPnN0YXJ0VGltZSgpID4gZXhpc3Rp
bmdDdWUtPnN0YXJ0VGltZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICBpZiAoKmV4aXN0aW5nQ3VlICE9ICpjdWUpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzaXpl
X3QgaW5kZXggPSAoc2VhcmNoU3RhcnQgKyBzZWFyY2hFbmQpIC8gMjsKKyAgICAgICAgZXhpc3Rp
bmdDdWUgPSBtX2N1ZXMtPml0ZW0oaW5kZXgpOworICAgICAgICBpZiAoY3VlLT5zdGFydFRpbWUo
KSA8IGV4aXN0aW5nQ3VlLT5zdGFydFRpbWUoKSB8fCAoY3VlLT5zdGFydFRpbWUoKSA9PSBleGlz
dGluZ0N1ZS0+c3RhcnRUaW1lKCkgJiYgY3VlLT5lbmRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+ZW5k
VGltZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEVuZCA9IGluZGV4OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzZWFyY2hTdGFydCA9IGluZGV4ICsgMTsKKyAgICB9CisgICAgCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
ay5oCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDYgKzEwNSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgYWRkQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CiAgICAgdm9p
ZCByZW1vdmVDdWUoVGV4dFRyYWNrQ3VlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgaGFz
Q3VlKFRleHRUcmFja0N1ZSogY3VlKTsKIAogICAgIHZvaWQgY3VlV2lsbENoYW5nZShUZXh0VHJh
Y2tDdWUqKTsKICAgICB2b2lkIGN1ZURpZENoYW5nZShUZXh0VHJhY2tDdWUqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAJKHJldmlzaW9uIDEzOTg5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTEwNiw3ICsxMDYsNyBAQCBUZXh0VHJhY2tDdWUqIFRl
eHRUcmFja0N1ZUJveDo6Z2V0Q3VlKCkgCiAgICAgcmV0dXJuIG1fY3VlOwogfQogCi12b2lkIFRl
eHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0aWVzKCkKK3ZvaWQgVGV4dFRyYWNrQ3VlQm94
OjphcHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYpCiB7CiAgICAgLy8gRklYTUU6IEFw
cGx5IGFsbCB0aGUgaW5pdGlhbCBDU1MgcG9zaXRpb25pbmcgcHJvcGVydGllcy4gaHR0cDovL3dr
Yi51Zy83OTkxNgogCkBAIC0yMDksNyArMjA5LDYgQEAgVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tD
dWUoU2NyaXB0RXhlY3V0aQogICAgICwgbV9zbmFwVG9MaW5lcyh0cnVlKQogICAgICwgbV9hbGxE
b2N1bWVudE5vZGVzKEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihjb250ZXh0KSkpCiAgICAgLCBtX2Rpc3BsYXlUcmVlU2hvdWxkQ2hhbmdlKHRydWUpCi0gICAg
LCBtX2Rpc3BsYXlUcmVlKFRleHRUcmFja0N1ZUJveDo6Y3JlYXRlKHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSwgdGhpcykpCiB7CiAgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsKIApAQCAtMjI3LDYgKzIyNiwx
OCBAQCBUZXh0VHJhY2tDdWU6On5UZXh0VHJhY2tDdWUoKQogewogfQogCitQYXNzUmVmUHRyPFRl
eHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlOjpjcmVhdGVEaXNwbGF5VHJlZSgpCit7CisgICAg
cmV0dXJuIFRleHRUcmFja0N1ZUJveDo6Y3JlYXRlKG93bmVyRG9jdW1lbnQoKSwgdGhpcyk7Cit9
CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWU6OmRpc3BsYXlUcmVl
SW50ZXJuYWwoKQoreworICAgIGlmICghbV9kaXNwbGF5VHJlZSkKKyAgICAgICAgbV9kaXNwbGF5
VHJlZSA9IGNyZWF0ZURpc3BsYXlUcmVlKCk7CisgICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7Cit9
CisKIHZvaWQgVGV4dFRyYWNrQ3VlOjpjdWVXaWxsQ2hhbmdlKCkKIHsKICAgICBpZiAobV90cmFj
aykKQEAgLTQzNyw3ICs0NDgsNyBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0QWxpZ24oY29uc3Qg
U3RyaW5nCiAgICAgLy8gbWF0Y2ggZm9yIHRoZSBuZXcgdmFsdWUsIGlmIGFueS4gSWYgbm9uZSBv
ZiB0aGUgdmFsdWVzIG1hdGNoLCB0aGVuIHRoZSB1c2VyCiAgICAgLy8gYWdlbnQgbXVzdCBpbnN0
ZWFkIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLgogICAgIAotICAgIEFsaWdubWVudCBh
bGlnbm1lbnQgPSBtX2N1ZUFsaWdubWVudDsKKyAgICBDdWVBbGlnbm1lbnQgYWxpZ25tZW50ID0g
bV9jdWVBbGlnbm1lbnQ7CiAgICAgaWYgKHZhbHVlID09IHN0YXJ0S2V5d29yZCgpKQogICAgICAg
ICBhbGlnbm1lbnQgPSBTdGFydDsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSBtaWRkbGVLZXl3b3Jk
KCkpCkBAIC01NDQsOCArNTU1LDcgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldElzQWN0aXZlKGJv
b2wgYWN0aQogCiAgICAgaWYgKCFhY3RpdmUpIHsKICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXNw
bGF5IHRyZWUgYXMgc29vbiBhcyB0aGUgY3VlIGJlY29tZXMgaW5hY3RpdmUuCi0gICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIG1fZGlzcGxheVRyZWUtPnJlbW92ZShlYyk7CisgICAg
ICAgIGRpc3BsYXlUcmVlSW50ZXJuYWwoKS0+cmVtb3ZlKEFTU0VSVF9OT19FWENFUFRJT04pOwog
ICAgIH0KIH0KIApAQCAtNzIxLDEwICs3MzEsMTEgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnVwZGF0
ZURpc3BsYXlUcmVlKGZsbwogICAgIG1fYWxsRG9jdW1lbnROb2Rlcy0+YXBwZW5kQ2hpbGQocmVm
ZXJlbmNlVHJlZSk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tD
dWU6OmdldERpc3BsYXlUcmVlKCkKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJh
Y2tDdWU6OmdldERpc3BsYXlUcmVlKGNvbnN0IEludFNpemUmIHZpZGVvU2l6ZSkKIHsKKyAgICBS
ZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5VHJlZSA9IGRpc3BsYXlUcmVlSW50ZXJuYWwo
KTsKICAgICBpZiAoIW1fZGlzcGxheVRyZWVTaG91bGRDaGFuZ2UgfHwgIXRyYWNrKCktPmlzUmVu
ZGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CisgICAgICAgIHJldHVybiBk
aXNwbGF5VHJlZTsKIAogICAgIC8vIDEwLjEgLSAxMC4xMAogICAgIGNhbGN1bGF0ZURpc3BsYXlQ
YXJhbWV0ZXJzKCk7CkBAIC03MzIsNyArNzQzLDcgQEAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVC
b3g+IFRleHRUcmFja0N1ZQogICAgIC8vIDEwLjExLiBBcHBseSB0aGUgdGVybXMgb2YgdGhlIENT
UyBzcGVjaWZpY2F0aW9ucyB0byBub2RlcyB3aXRoaW4gdGhlCiAgICAgLy8gZm9sbG93aW5nIGNv
bnN0cmFpbnRzLCB0aHVzIG9idGFpbmluZyBhIHNldCBvZiBDU1MgYm94ZXMgcG9zaXRpb25lZAog
ICAgIC8vIHJlbGF0aXZlIHRvIGFuIGluaXRpYWwgY29udGFpbmluZyBibG9jazoKLSAgICBtX2Rp
c3BsYXlUcmVlLT5yZW1vdmVDaGlsZHJlbigpOworICAgIGRpc3BsYXlUcmVlLT5yZW1vdmVDaGls
ZHJlbigpOwogCiAgICAgLy8gVGhlIGRvY3VtZW50IHRyZWUgaXMgdGhlIHRyZWUgb2YgV2ViVlRU
IE5vZGUgT2JqZWN0cyByb290ZWQgYXQgbm9kZXMuCiAKQEAgLTc0Miw3ICs3NTMsNyBAQCBQYXNz
UmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlCiAKICAgICAvLyBOb3RlOiBUaGlz
IGlzIGNvbnRhaW5lZCBieSBkZWZhdWx0IGluIG1fYWxsRG9jdW1lbnROb2Rlcy4KICAgICBtX2Fs
bERvY3VtZW50Tm9kZXMtPnNldFBzZXVkbyhhbGxOb2Rlc1NoYWRvd1BzZXVkb0lkKCkpOwotICAg
IG1fZGlzcGxheVRyZWUtPmFwcGVuZENoaWxkKG1fYWxsRG9jdW1lbnROb2RlcywgQVNTRVJUX05P
X0VYQ0VQVElPTiwgdHJ1ZSk7CisgICAgZGlzcGxheVRyZWUtPmFwcGVuZENoaWxkKG1fYWxsRG9j
dW1lbnROb2RlcywgQVNTRVJUX05PX0VYQ0VQVElPTiwgdHJ1ZSk7CiAKICAgICAvLyBGSVhNRShC
VUcgNzk5MTYpOiBSdW5zIG9mIGNoaWxkcmVuIG9mIFdlYlZUVCBSdWJ5IE9iamVjdHMgdGhhdCBh
cmUgbm90CiAgICAgLy8gV2ViVlRUIFJ1YnkgVGV4dCBPYmplY3RzIG11c3QgYmUgd3JhcHBlZCBp
biBhbm9ueW1vdXMgYm94ZXMgd2hvc2UKQEAgLTc1NSwxOCArNzY2LDE4IEBAIFBhc3NSZWZQdHI8
VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWUKICAgICAvLyBpcyBubyBsaW5lIGJyZWFraW5n
IG9wcG9ydHVuaXR5LiAoVGh1cywgbm9ybWFsbHkgdGV4dCB3cmFwcyBhcyBuZWVkZWQsCiAgICAg
Ly8gYnV0IGlmIHRoZXJlIGlzIGEgcGFydGljdWxhcmx5IGxvbmcgd29yZCwgaXQgZG9lcyBub3Qg
b3ZlcmZsb3cgYXMgaXQKICAgICAvLyBub3JtYWxseSB3b3VsZCBpbiBDU1MsIGl0IGlzIGluc3Rl
YWQgZm9yY2libHkgd3JhcHBlZCBhdCB0aGUgYm94J3MgZWRnZS4pCi0gICAgbV9kaXNwbGF5VHJl
ZS0+YXBwbHlDU1NQcm9wZXJ0aWVzKCk7CisgICAgZGlzcGxheVRyZWUtPmFwcGx5Q1NTUHJvcGVy
dGllcyh2aWRlb1NpemUpOwogCiAgICAgbV9kaXNwbGF5VHJlZVNob3VsZENoYW5nZSA9IGZhbHNl
OwogCiAgICAgLy8gMTAuMTUuIExldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRl
IGhhdmUgdGhlIENTUyBib3hlcyBpbgogICAgIC8vIGJveGVzLgotICAgIHJldHVybiBtX2Rpc3Bs
YXlUcmVlOworICAgIHJldHVybiBkaXNwbGF5VHJlZTsKIH0KIAogdm9pZCBUZXh0VHJhY2tDdWU6
OnJlbW92ZURpc3BsYXlUcmVlKCkKIHsKLSAgICBtX2Rpc3BsYXlUcmVlLT5yZW1vdmUoQVNTRVJU
X05PX0VYQ0VQVElPTik7CisgICAgZGlzcGxheVRyZWVJbnRlcm5hbCgpLT5yZW1vdmUoQVNTRVJU
X05PX0VYQ0VQVElPTik7CiB9CiAKIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gVGV4dFRyYWNr
Q3VlOjpnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCkgY29uc3QKQEAgLTEwNjUsNiArMTA3NiwzMyBA
QCBFdmVudFRhcmdldERhdGEqIFRleHRUcmFja0N1ZTo6ZW5zdXJlRXZlCiAgICAgcmV0dXJuICZt
X2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAorYm9vbCBUZXh0VHJhY2tDdWU6Om9wZXJhdG9yPT0oY29u
c3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Cit7CisgICAgaWYgKGN1ZVR5cGUoKSAhPSBjdWUu
Y3VlVHlwZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9lbmRUaW1lICE9
IGN1ZS5lbmRUaW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zdGFydFRp
bWUgIT0gY3VlLnN0YXJ0VGltZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
Y29udGVudCAhPSBjdWUudGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
c2V0dGluZ3MgIT0gY3VlLmN1ZVNldHRpbmdzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9pZCAhPSBjdWUuaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3RleHRQb3NpdGlvbiAhPSBjdWUucG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX2xpbmVQb3NpdGlvbiAhPSBjdWUubGluZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fY3VlU2l6ZSAhPSBjdWUuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGFsaWduKCkgIT0gY3VlLmFsaWduKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAko
cmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tD
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTU3LDExICs1OCwxMSBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgVGV4dFRyYWNrQ3VlKiBnZXRDdWUoKSBjb25zdDsKLSAgICB2b2lkIGFwcGx5Q1NT
UHJvcGVydGllcygpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUNTU1Byb3BlcnRpZXMoY29uc3Qg
SW50U2l6ZSYgdmlkZW9TaXplKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRl
eHRUcmFja0N1ZUJveFNoYWRvd1BzZXVkb0lkKCk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAg
ICAgVGV4dFRyYWNrQ3VlQm94KERvY3VtZW50KiwgVGV4dFRyYWNrQ3VlKik7CiAKICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSopIE9WRVJSSURFOwpAQCAtMTUxLDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0
aXZlKCk7CiAgICAgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsKIAotICAgIFBhc3NSZWZQdHI8VGV4
dFRyYWNrQ3VlQm94PiBnZXREaXNwbGF5VHJlZSgpOworICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNr
Q3VlQm94PiBnZXREaXNwbGF5VHJlZShjb25zdCBJbnRTaXplJiB2aWRlb1NpemUpOwogICAgIHZv
aWQgdXBkYXRlRGlzcGxheVRyZWUoZmxvYXQpOwogICAgIHZvaWQgcmVtb3ZlRGlzcGxheVRyZWUo
KTsKICAgICB2b2lkIG1hcmtGdXR1cmVBbmRQYXN0Tm9kZXMoQ29udGFpbmVyTm9kZSosIGRvdWJs
ZSwgZG91YmxlKTsKQEAgLTE3Myw2ICsxNzQsMjUgQEAgcHVibGljOgogICAgIH07CiAgICAgV3Jp
dGluZ0RpcmVjdGlvbiBnZXRXcml0aW5nRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93cml0
aW5nRGlyZWN0aW9uOyB9CiAKKyAgICBlbnVtIEN1ZUFsaWdubWVudCB7CisgICAgICAgIFN0YXJ0
LAorICAgICAgICBNaWRkbGUsCisgICAgICAgIEVuZAorICAgIH07CisgICAgQ3VlQWxpZ25tZW50
IGdldEFsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VlQWxpZ25tZW50OyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IGN1ZSk7CisgICAgfQorICAgIAorICAgIGVu
dW0gQ3VlVHlwZSB7CisgICAgICAgIEdlbmVyaWMsCisgICAgICAgIFdlYlZUVAorICAgIH07Cisg
ICAgdmlydHVhbCBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBXZWJWVFQ7IH0KKwog
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW50ZXIpOwogICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXhpdCk7CiAKQEAgLTE4Myw5ICsyMDMsMTQgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsK
ICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAK
LXByaXZhdGU6CiAgICAgVGV4dFRyYWNrQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBkb3Vi
bGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAKKyAgICBEb2N1
bWVudCogb3duZXJEb2N1bWVudCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHRU
cmFja0N1ZUJveD4gY3JlYXRlRGlzcGxheVRyZWUoKTsKKyAgICBQYXNzUmVmUHRyPFRleHRUcmFj
a0N1ZUJveD4gZGlzcGxheVRyZWVJbnRlcm5hbCgpOworCitwcml2YXRlOgogICAgIHN0ZDo6cGFp
cjxkb3VibGUsIGRvdWJsZT4gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpIGNvbnN0OwogICAgIHZv
aWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKIApAQCAtMjEzLDggKzIzOCw3IEBAIHBy
aXZhdGU6CiAKICAgICBXcml0aW5nRGlyZWN0aW9uIG1fd3JpdGluZ0RpcmVjdGlvbjsKIAotICAg
IGVudW0gQWxpZ25tZW50IHsgU3RhcnQsIE1pZGRsZSwgRW5kIH07Ci0gICAgQWxpZ25tZW50IG1f
Y3VlQWxpZ25tZW50OworICAgIEN1ZUFsaWdubWVudCBtX2N1ZUFsaWdubWVudDsKIAogICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX3dlYlZUVE5vZGVUcmVlOwogICAgIFRleHRUcmFjayog
bV90cmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2Vu
ZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisKKyNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkhU
TUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRleHRUcmFja0N1ZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudCA6IHB1YmxpYyBUZXh0VHJh
Y2tDdWVCb3ggeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUdl
bmVyaWNCb3hFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUZXh0VHJhY2tDdWVH
ZW5lcmljKiBjdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFj
a0N1ZUdlbmVyaWNCb3hFbGVtZW50KGRvY3VtZW50LCBjdWUpKTsKKyAgICB9CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7
CisgICAgCitwcml2YXRlOgorICAgIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCwgVGV4dFRyYWNrQ3VlKiBjdWUpOworfTsKKworVGV4dFRyYWNrQ3VlR2Vu
ZXJpY0JveEVsZW1lbnQ6OlRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50KERvY3VtZW50KiBk
b2N1bWVudCwgVGV4dFRyYWNrQ3VlKiBjdWUpCisgICAgOiBUZXh0VHJhY2tDdWVCb3goZG9jdW1l
bnQsIGN1ZSkKK3sKK30KKwordm9pZCBUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudDo6YXBw
bHlDU1NQcm9wZXJ0aWVzKGNvbnN0IEludFNpemUmIHZpZGVvU2l6ZSkKK3sKKyAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5UG9zaXRpb24sIENTU1ZhbHVlQWJzb2x1dGUpOwor
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgQ1NTVmFs
dWVXZWJraXRQbGFpbnRleHQpOworICAgIAorICAgIFRleHRUcmFja0N1ZUdlbmVyaWMqIGN1ZSA9
IHN0YXRpY19jYXN0PFRleHRUcmFja0N1ZUdlbmVyaWMqPihnZXRDdWUoKSk7CisKKyAgICBzdGQ6
OnBhaXI8ZmxvYXQsIGZsb2F0PiBwb3NpdGlvbiA9IGN1ZS0+Z2V0Q1NTUG9zaXRpb24oKTsKKyAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5TGVmdCwgcG9zaXRpb24uZmlyc3Qs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgc2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgcG9zaXRpb24uc2Vjb25kLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpOworCisgICAgZG91YmxlIHNpemUgPSBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGN1ZS0+Z2V0Q1NTU2l6ZSgpKTsKKyAgICBpZiAoY3VlLT5nZXRXcml0aW5nRGlyZWN0aW9u
KCkgPT0gVGV4dFRyYWNrQ3VlOjpIb3Jpem9udGFsKSB7CisgICAgICAgIHNldElubGluZVN0eWxl
UHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKKyAgICAgICAgc2V0
SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBzaXplLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5SGVpZ2h0LCBDU1NWYWx1ZUF1dG8pOworICAgIH0gZWxzZSB7CisgICAgICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgQ1NTVmFsdWVBdXRvKTsKKyAg
ICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgc2l6ZSwgIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgfQorCisgICAgaWYgKGN1ZS0+
YmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkpIHsKKyAgICAgICAgZG91YmxlIGZv
bnRTaXplID0gdmlkZW9TaXplLmhlaWdodCgpICogY3VlLT5iYXNlRm9udFNpemVSZWxhdGl2ZVRv
VmlkZW9IZWlnaHQoKSAvIDEwMDsKKyAgICAgICAgaWYgKGN1ZS0+Zm9udFNpemVNdWx0aXBsaWVy
KCkpCisgICAgICAgICAgICBmb250U2l6ZSAqPSBjdWUtPmZvbnRTaXplTXVsdGlwbGllcigpIC8g
MTAwOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUs
IFN0cmluZzo6bnVtYmVyKGZvbnRTaXplKSArICJweCIpOworICAgIH0KKworICAgIGlmIChjdWUt
PmdldEFsaWdubWVudCgpID09IFRleHRUcmFja0N1ZTo6U3RhcnQpCisgICAgICAgIHNldElubGlu
ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVlU3RhcnQpOworICAg
IGVsc2UgaWYgKGN1ZS0+Z2V0QWxpZ25tZW50KCkgPT0gVGV4dFRyYWNrQ3VlOjpFbmQpCisgICAg
ICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVl
RW5kKTsKKyAgICBlbHNlCisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVy
dHlUZXh0QWxpZ24sIENTU1ZhbHVlQ2VudGVyKTsKKworICAgIHNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlXZWJraXRXcml0aW5nTW9kZSwgY3VlLT5nZXRDU1NXcml0aW5nTW9kZSgp
LCBmYWxzZSk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdoaXRlU3Bh
Y2UsIENTU1ZhbHVlUHJlV3JhcCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdvcmRCcmVhaywgQ1NTVmFsdWVOb3JtYWwpOworfQorCitUZXh0VHJhY2tDdWVHZW5lcmlj
OjpUZXh0VHJhY2tDdWVHZW5lcmljKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRv
dWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIDpUZXh0
VHJhY2tDdWUoY29udGV4dCwgc3RhcnQsIGVuZCwgY29udGVudCkKK3sKK30KKworUGFzc1JlZlB0
cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZURpc3BsYXlUcmVl
KCkKK3sKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQ6OmNyZWF0ZShv
d25lckRvY3VtZW50KCksIHRoaXMpOworfQorCitib29sIFRleHRUcmFja0N1ZUdlbmVyaWM6Om9w
ZXJhdG9yPT0oY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Cit7CisgICAgaWYgKGN1ZS5j
dWVUeXBlKCkgIT0gVGV4dFRyYWNrQ3VlOjpHZW5lcmljKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBUZXh0VHJhY2tDdWVHZW5lcmljKiBvdGhlciA9IHN0YXRpY19jYXN0PGNv
bnN0IFRleHRUcmFja0N1ZUdlbmVyaWMqPigmY3VlKTsKKworICAgIGlmIChtX2Jhc2VGb250U2l6
ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCAhPSBvdGhlci0+YmFzZUZvbnRTaXplUmVsYXRpdmVUb1Zp
ZGVvSGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mb250U2l6ZU11
bHRpcGxpZXIgIT0gb3RoZXItPmZvbnRTaXplTXVsdGlwbGllcigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKG1fZm9udE5hbWUgIT0gb3RoZXItPmZvbnROYW1lKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBUZXh0VHJhY2tDdWU6Om9wZXJhdG9yPT0oY3Vl
KTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRleHRUcmFj
a0N1ZUJveF9oCisjZGVmaW5lIFRleHRUcmFja0N1ZUJveF9oCisKKyNpZiBFTkFCTEUoVklERU9f
VFJBQ0spCisKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRUcmFja0N1
ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgR2VuZXJpY0N1ZURhdGE7CisK
K2NsYXNzIFRleHRUcmFja0N1ZUdlbmVyaWMgOiBwdWJsaWMgVGV4dFRyYWNrQ3VlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHRUcmFja0N1ZUdlbmVyaWMoY29udGV4dCwgc3RhcnQsIGVuZCwgY29udGVudCkpOworICAg
IH0KKyAgICAKKyAgICB2aXJ0dWFsIH5UZXh0VHJhY2tDdWVHZW5lcmljKCkgeyB9CisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBjcmVhdGVEaXNwbGF5VHJlZSgpIE9W
RVJSSURFOworCisgICAgZG91YmxlIGJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0OyB9Cisg
ICAgdm9pZCBzZXRCYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoZG91YmxlIHNpemUp
IHsgbV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQgPSBzaXplOyB9CisKKyAgICBk
b3VibGUgZm9udFNpemVNdWx0aXBsaWVyKCkgY29uc3QgeyByZXR1cm4gbV9mb250U2l6ZU11bHRp
cGxpZXI7IH0KKyAgICB2b2lkIHNldEZvbnRTaXplTXVsdGlwbGllcihkb3VibGUgc2l6ZSkgeyBt
X2ZvbnRTaXplTXVsdGlwbGllciA9IHNpemU7IH0KKworICAgIFN0cmluZyBmb250TmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udE5hbWU7IH0KKyAgICB2b2lkIHNldEZvbnROYW1lKFN0cmluZyBu
YW1lKSB7IG1fZm9udE5hbWUgPSBuYW1lOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QgT1ZFUlJJREUKKyAgICB7
CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IGN1ZSk7CisgICAgfQorCisgICAgdmlydHVhbCBU
ZXh0VHJhY2tDdWU6OkN1ZVR5cGUgY3VlVHlwZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIFRl
eHRUcmFja0N1ZTo6R2VuZXJpYzsgfQorCitwcml2YXRlOgorICAgIFRleHRUcmFja0N1ZUdlbmVy
aWMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgZG91YmxlIHN0YXJ0LCBkb3VibGUg
ZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOworICAgIAorICAgIGRvdWJsZSBtX2Jhc2VGb250
U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodDsKKyAgICBkb3VibGUgbV9mb250U2l6ZU11bHRpcGxp
ZXI7CisgICAgU3RyaW5nIG1fZm9udE5hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oCShy
ZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJh
bmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCw0NSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CiAK
K3N0cnVjdCBHZW5lcmljQ3VlRGF0YSB7CisgICAgR2VuZXJpY0N1ZURhdGEoKQorICAgICAgICA6
IHN0YXJ0VGltZSgwKQorICAgICAgICAsIGVuZFRpbWUoMCkKKyAgICAgICAgLCBsaW5lKC0xKQor
ICAgICAgICAsIHBvc2l0aW9uKC0xKQorICAgICAgICAsIHNpemUoLTEpCisgICAgICAgICwgYWxp
Z24oTm9uZSkKKyAgICAgICAgLCBiYXNlRm9udFNpemUoMCkKKyAgICAgICAgLCByZWxhdGl2ZUZv
bnRTaXplKDApCisgICAgeworICAgIH0KKworICAgIGVudW0gYWxpZ25tZW50IHsKKyAgICAgICAg
Tm9uZSwKKyAgICAgICAgU3RhcnQsCisgICAgICAgIE1pZGRsZSwKKyAgICAgICAgRW5kCisgICAg
fTsKKworICAgIGRvdWJsZSBzdGFydFRpbWU7CisgICAgZG91YmxlIGVuZFRpbWU7CisgICAgU3Ry
aW5nIGlkOworICAgIFN0cmluZyBjb250ZW50OworICAgIGRvdWJsZSBsaW5lOworICAgIGRvdWJs
ZSBwb3NpdGlvbjsKKyAgICBkb3VibGUgc2l6ZTsKKyAgICBhbGlnbm1lbnQgYWxpZ247CisgICAg
U3RyaW5nIGZvbnROYW1lOworICAgIGRvdWJsZSBiYXNlRm9udFNpemU7CisgICAgZG91YmxlIHJl
bGF0aXZlRm9udFNpemU7Cit9OworCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50KCkg
eyB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRl
KiwgZG91YmxlIC8qc3RhcnQqLywgZG91YmxlIC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCov
LCBjb25zdCBTdHJpbmcmIC8qY29udGVudCovLCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykg
PSAwOwotICAgIHZpcnR1YWwgYm9vbCBoYXNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRv
dWJsZSAvKnN0YXJ0Ki8sIGRvdWJsZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQqLywgY29u
c3QgU3RyaW5nJiAvKmNvbnRlbnQqLywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8pID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgYWRkV2ViVlRUQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBk
b3VibGUgLypzdGFydCovLCBkb3VibGUgLyplbmQqLywgY29uc3QgU3RyaW5nJiAvKmlkKi8sIGNv
bnN0IFN0cmluZyYgLypjb250ZW50Ki8sIGNvbnN0IFN0cmluZyYgLypzZXR0aW5ncyovKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSos
IGNvbnN0IEdlbmVyaWNDdWVEYXRhJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0lu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
LmNwcAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
LmgiCiAKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5o
IgogI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rl
ck5hbWVzLmg+CiAKIFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQogCkBA
IC01Miw2ICs1NCw5IEBAIFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0MK
IFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJp
YnV0ZV9WZXJ0aWNhbExheW91dCwgQ0ZTdHJpbmdSZWYpCiBTT0ZUX0xJTktfUE9JTlRFUl9PUFRJ
T05BTChDb3JlTWVkaWEsIGtDTVRleHRWZXJ0aWNhbExheW91dF9MZWZ0VG9SaWdodCwgQ0ZTdHJp
bmdSZWYpCiBTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDTVRleHRWZXJ0
aWNhbExheW91dF9SaWdodFRvTGVmdCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUl9P
UFRJT05BTChDb3JlTWVkaWEsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfQmFzZUZvbnRTaXplUGVy
Y2VudGFnZVJlbGF0aXZlVG9WaWRlb0hlaWdodCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9J
TlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVG
b250U2l6ZSwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVk
aWEsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUsIENGU3RyaW5nUmVmKQog
CiAjZGVmaW5lIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfQWxpZ25tZW50IGdldGtDTVRleHRNYXJr
dXBBdHRyaWJ1dGVfQWxpZ25tZW50KCkKICNkZWZpbmUga0NNVGV4dE1hcmt1cEFsaWdubWVudFR5
cGVfU3RhcnQgZ2V0a0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfU3RhcnQoKQpAQCAtNjYsNiAr
NzEsOSBAQCBTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDCiAjZGVmaW5l
IGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfVmVydGljYWxMYXlvdXQgZ2V0a0NNVGV4dE1hcmt1cEF0
dHJpYnV0ZV9WZXJ0aWNhbExheW91dCgpCiAjZGVmaW5lIGtDTVRleHRWZXJ0aWNhbExheW91dF9M
ZWZ0VG9SaWdodCBnZXRrQ01UZXh0VmVydGljYWxMYXlvdXRfTGVmdFRvUmlnaHQoKQogI2RlZmlu
ZSBrQ01UZXh0VmVydGljYWxMYXlvdXRfUmlnaHRUb0xlZnQgZ2V0a0NNVGV4dFZlcnRpY2FsTGF5
b3V0X1JpZ2h0VG9MZWZ0KCkKKyNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9u
dFNpemVQZXJjZW50YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0IGdldGtDTVRleHRNYXJrdXBBdHRy
aWJ1dGVfQmFzZUZvbnRTaXplUGVyY2VudGFnZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgpCisjZGVm
aW5lIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6ZSBnZXRrQ01UZXh0TWFy
a3VwQXR0cmlidXRlX1JlbGF0aXZlRm9udFNpemUoKQorI2RlZmluZSBrQ01UZXh0TWFya3VwQXR0
cmlidXRlX0ZvbnRGYW1pbHlOYW1lIGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfRm9udEZhbWls
eU5hbWUoKQogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC04NCw3ICs5Miw3IEBAIEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkY6On5JbmJhbmRUZXh0VHIKICAgICBkaXNjb25uZWN0KCk7CiB9
CiAKLXZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZUF0dHJpYnV0ZXMo
Q0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcsIFN0cmluZ0J1aWxkZXImIGNv
bnRlbnQsIFN0cmluZ0J1aWxkZXImIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmli
dXRlZFN0cmluZywgR2VuZXJpY0N1ZURhdGEqIGN1ZURhdGEpCiB7CiAgICAgLy8gU29tZSBvZiB0
aGUgYXR0cmlidXRlcyB3ZSB0cmFuc2xhdGUgaW50byBwZXItY3VlIFdlYlZUVCBzZXR0aW5ncyBh
cmUgYXJlIHJlcGVhdGVkIG9uIGVhY2ggcGFydCBvZiBhbiBhdHRyaWJ1dGVkIHN0cmluZyBzbyBv
bmx5CiAgICAgLy8gcHJvY2VzcyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWFjaC4KQEAgLTkzLDEw
ICsxMDEsMTIgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAg
ICAgICBQb3NpdGlvbiA9IDEgPDwgMSwKICAgICAgICAgU2l6ZSA9IDEgPDwgMiwKICAgICAgICAg
VmVydGljYWwgPSAxIDw8IDMsCi0gICAgICAgIEFsaWduID0gMSA8PCA0CisgICAgICAgIEFsaWdu
ID0gMSA8PCA0LAorICAgICAgICBGb250TmFtZSA9IDEgPDwgNQogICAgIH07CiAgICAgdW5zaWdu
ZWQgcHJvY2Vzc2VkID0gMDsKIAorICAgIFN0cmluZ0J1aWxkZXIgY29udGVudDsKICAgICBTdHJp
bmcgYXR0cmlidXRlZFN0cmluZ1ZhbHVlID0gQ0ZBdHRyaWJ1dGVkU3RyaW5nR2V0U3RyaW5nKGF0
dHJpYnV0ZWRTdHJpbmcpOwogICAgIENGSW5kZXggbGVuZ3RoID0gYXR0cmlidXRlZFN0cmluZ1Zh
bHVlLmxlbmd0aCgpOwogICAgIGlmICghbGVuZ3RoKQpAQCAtMTEwLDYgKzEyMCw3IEBAIHZvaWQg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0MKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIFN0cmluZ0J1aWxkZXIgdGFnU3RhcnQ7CisgICAgICAgIENGU3RyaW5nUmVm
IHZhbHVlU3RyaW5nOwogICAgICAgICBTdHJpbmcgdGFnRW5kOwogICAgICAgICBDRkluZGV4IGF0
dHJpYnV0ZUNvdW50ID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQoYXR0cmlidXRlcyk7CiAgICAgICAg
IFZlY3Rvcjxjb25zdCB2b2lkKj4ga2V5cyhhdHRyaWJ1dGVDb3VudCk7CkBAIC0xMjMsNyArMTM0
LDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwg
a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9BbGlnbm1lbnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRv
KSB7Ci0gICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgdmFsdWVTdHJpbmcgPSBzdGF0aWNfY2Fz
dDxDRlN0cmluZ1JlZj4odmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRU
eXBlSUQodmFsdWVTdHJpbmcpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0
TGVuZ3RoKHZhbHVlU3RyaW5nKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgaWYgKHByb2Nlc3NlZCAmIEFsaWduKQpAQCAtMTMxLDExICsxNDIsMTEgQEAg
dm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgICAg
IHByb2Nlc3NlZCB8PSBBbGlnbjsKIAogICAgICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBh
cmUodmFsdWVTdHJpbmcsIGtDTVRleHRNYXJrdXBBbGlnbm1lbnRUeXBlX1N0YXJ0LCAwKSA9PSBr
Q0ZDb21wYXJlRXF1YWxUbykKLSAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJh
bGlnbjpzdGFydCAiKTsKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+YWxpZ24gPSBHZW5l
cmljQ3VlRGF0YTo6U3RhcnQ7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZTdHJpbmdDb21w
YXJlKHZhbHVlU3RyaW5nLCBrQ01UZXh0TWFya3VwQWxpZ25tZW50VHlwZV9NaWRkbGUsIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQo
ImFsaWduOm1pZGRsZSAiKTsKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+YWxpZ24gPSBH
ZW5lcmljQ3VlRGF0YTo6TWlkZGxlOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5n
Q29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfRW5kLCAwKSA9
PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5k
KCJhbGlnbjplbmQgIik7CisgICAgICAgICAgICAgICAgICAgIGN1ZURhdGEtPmFsaWduID0gR2Vu
ZXJpY0N1ZURhdGE6OkVuZDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0xNzAsOSArMTgxLDYgQEAgdm9pZCBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9PcnRo
b2dvbmFsTGluZVBvc2l0aW9uUGVyY2VudGFnZVJlbGF0aXZlVG9Xcml0aW5nRGlyZWN0aW9uLCAw
KSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgewotICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGUg
bGluZSBwb3NpdGlvbiBpZiB0aGUgYXR0cmlidXRlcyBhbHNvIHNwZWNpZnkgInNpemUiIHNvIHdl
IGtlZXAgV2ViVlRUJ3MgZGVmYXVsdCBsaW5lIGxvZ2ljCi0gICAgICAgICAgICAgICAgaWYgKENG
RGljdGlvbmFyeUdldFZhbHVlKGF0dHJpYnV0ZXMsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfV3Jp
dGluZ0RpcmVjdGlvblNpemVQZXJjZW50YWdlKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRk51bWJlckdl
dFR5cGVJRCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICBpZiAocHJvY2Vzc2VkICYgTGluZSkKQEAgLTE4MCw5ICsxODgsNyBAQCB2b2lkIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9
IExpbmU7CiAKICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRp
Y19jYXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHBvc2l0
aW9uOwotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51
bWJlckZsb2F0NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmFw
cGVuZChTdHJpbmc6OmZvcm1hdCgibGluZTolbGQlJSAiLCBscmludChwb3NpdGlvbikpKTsKKyAg
ICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9h
dDY0VHlwZSwgJmN1ZURhdGEtPmxpbmUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQogCkBAIC0xOTQsOSArMjAwLDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB8PSBQb3NpdGlvbjsK
IAogICAgICAgICAgICAgICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8
Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0g
ICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxv
YXQ2NFR5cGUsICZwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKFN0
cmluZzo6Zm9ybWF0KCJwb3NpdGlvbjolbGQlJSAiLCBscmludChwb3NpdGlvbikpKTsKKyAgICAg
ICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0
VHlwZSwgJmN1ZURhdGEtPnBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgIH0KIApAQCAtMjA4LDE2ICsyMTIsNjAgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB8PSBTaXplOwog
CiAgICAgICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNfY2FzdDxD
Rk51bWJlclJlZj4odmFsdWUpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBwb3NpdGlvbjsKLSAg
ICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9h
dDY0VHlwZSwgJnBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoU3Ry
aW5nOjpmb3JtYXQoInNpemU6JWxkJSUgIiwgbHJpbnQocG9zaXRpb24pKSk7CisgICAgICAgICAg
ICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUs
ICZjdWVEYXRhLT5zaXplKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBB
dHRyaWJ1dGVfVmVydGljYWxMYXlvdXQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7CisgICAg
ICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUp
OworICAgICAgICAgICAgICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZVN0cmluZykgIT0gQ0ZTdHJp
bmdHZXRUeXBlSUQoKSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgodmFsdWVTdHJpbmcpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoQ0ZTdHJpbmdDb21wYXJlKHZhbHVlU3RyaW5nLCBrQ01UZXh0VmVydGljYWxMYXlvdXRf
TGVmdFRvUmlnaHQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICAgICAgICAgICAg
ICB0YWdTdGFydC5hcHBlbmQobGVmdFRvUmlnaHRNYXJrKTsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmIChDRlN0cmluZ0NvbXBhcmUodmFsdWVTdHJpbmcsIGtDTVRleHRWZXJ0aWNhbExheW91dF9S
aWdodFRvTGVmdCwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgICAgICAgICAg
IHRhZ1N0YXJ0LmFwcGVuZChyaWdodFRvTGVmdE1hcmspOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoQ0ZTdHJp
bmdDb21wYXJlKGtleSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50
YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAg
ICAgICAgICAgICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZSkgIT0gQ0ZOdW1iZXJHZXRUeXBlSUQo
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJl
clJlZj4odmFsdWUpOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1i
ZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmY3VlRGF0YS0+YmFzZUZvbnRTaXplKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVs
YXRpdmVGb250U2l6ZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1i
ZXJGbG9hdDY0VHlwZSwgJmN1ZURhdGEtPnJlbGF0aXZlRm9udFNpemUpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdD
b21wYXJlKGtleSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9Gb250RmFtaWx5TmFtZSwgMCkgPT0g
a0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IHN0YXRp
Y19jYXN0PENGU3RyaW5nUmVmPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlw
ZUlEKHZhbHVlU3RyaW5nKSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpIHx8ICFDRlN0cmluZ0dldExl
bmd0aCh2YWx1ZVN0cmluZykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIGlmIChwcm9jZXNzZWQgJiBGb250TmFtZSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IEZvbnROYW1lOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGN1ZURhdGEtPmZvbnROYW1lID0gdmFsdWVTdHJp
bmc7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
KwogICAgICAgICBjb250ZW50LmFwcGVuZCh0YWdTdGFydCk7CiAgICAgICAgIGNvbnRlbnQuYXBw
ZW5kKGF0dHJpYnV0ZWRTdHJpbmdWYWx1ZS5zdWJzdHJpbmcoZWZmZWN0aXZlUmFuZ2UubG9jYXRp
b24sIGVmZmVjdGl2ZVJhbmdlLmxlbmd0aCkpOwogICAgICAgICBjb250ZW50LmFwcGVuZCh0YWdF
bmQpOwogICAgIH0KKworICAgIGlmIChjb250ZW50Lmxlbmd0aCgpKQorICAgICAgICBjdWVEYXRh
LT5jb250ZW50ID0gY29udGVudC50b1N0cmluZygpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUoQ0ZBcnJheVJlZiBhdHRyaWJ1dGVkU3RyaW5ncywgZG91
YmxlIHRpbWUpCkBAIC0yMjgsMjEgKzI3Niw0NyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnByb2Nlc3NDCiAgICAgaWYgKG1faGF2ZVBhcnRpYWxDdWUpIHsKICAgICAgICAgLy8g
Q3VlcyBkbyBub3QgaGF2ZSBhbiBleHBsaWNpdCBkdXJhdGlvbiwgdGhleSBhcmUgZGlzcGxheWVk
IHVudGlsIHRoZSBuZXh0ICJjdWUiICh3aGljaCBtaWdodCBiZSBlbXB0eSkgaXMgZW1pdHRlZC4K
ICAgICAgICAgbV9jdXJyZW50Q3VlRW5kVGltZSA9IHRpbWU7Ci0gICAgICAgIExPRyhNZWRpYSwg
IkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFy
dD0lLjJmLCBlbmQ9JS4yZiwgc2V0dGluZ3M9XCIlc1wiLCBjb250ZW50PVwiJXNcIiBcbiIsCi0g
ICAgICAgICAgICBtX2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsCi0g
ICAgICAgICAgICBtX2N1cnJlbnRDdWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCks
IG1fY3VycmVudEN1ZUNvbnRlbnQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
bV9wbGF5ZXItPmZsdXNoQ3VycmVudEN1ZSh0aGlzKTsKKworICAgICAgICBpZiAobV9jdXJyZW50
Q3VlRW5kVGltZSA+PSBtX2N1cnJlbnRDdWVTdGFydFRpbWUpIHsKKyAgICAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jdWVzLnNpemUoKTsgaSsrKSB7CisKKyAgICAgICAgICAgICAg
ICBHZW5lcmljQ3VlRGF0YSogY3VlRGF0YSA9IG1fY3Vlc1tpXTsKKworICAgICAgICAgICAgICAg
IExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hp
bmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAorICAgICAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUs
IGN1ZURhdGEtPmNvbnRlbnQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKCFjdWVEYXRhLT5jb250ZW50Lmxlbmd0aCgpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjdWVE
YXRhLT5zdGFydFRpbWUgPSBtX2N1cnJlbnRDdWVTdGFydFRpbWU7CisgICAgICAgICAgICAgICAg
Y3VlRGF0YS0+ZW5kVGltZSA9IG1fY3VycmVudEN1ZUVuZFRpbWU7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgLy8gQVZGb3VuZGF0aW9uIGN1ZSAicG9zaXRpb24iIGlzIHRvIHRo
ZSBjZW50ZXIgb2YgdGhlIHRleHQgc28gYWRqdXN0IHJlbGF0aXZlIHRvIHRoZSBlZGdlIGJlY2F1
c2Ugd2Ugd2lsbCB1c2UgaXQgdG8KKyAgICAgICAgICAgICAgICAvLyBzZXQgQ1NTICJsZWZ0Ii4K
KyAgICAgICAgICAgICAgICBpZiAoY3VlRGF0YS0+cG9zaXRpb24gPj0gMCAmJiBjdWVEYXRhLT5z
aXplID4gMCkKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+cG9zaXRpb24gLT0gY3VlRGF0
YS0+c2l6ZSAvIDI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9wbGF5ZXIt
PmFkZEdlbmVyaWNDdWUodGhpcywgKmN1ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1By
aXZhdGVBVkY6OnByb2Nlc3NDdWUgbmVnYXRpdmUgbGVuZ3RoIGN1ZShzKSBpZ25vcmVkOiBzdGFy
dD0lLjJmLCBlbmQ9JS4yZlxuIiwgbV9jdXJyZW50Q3VlU3RhcnRUaW1lLCBtX2N1cnJlbnRDdWVF
bmRUaW1lKTsKKwogICAgICAgICByZXNldEN1ZVZhbHVlcygpOwogICAgIH0KIAogICAgIENGSW5k
ZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0cmlidXRlZFN0cmluZ3MpOworICAgIGlmICgh
Y291bnQpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKICAgICAgICAgQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJp
bmcgPSBzdGF0aWNfY2FzdDxDRkF0dHJpYnV0ZWRTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0
SW5kZXgoYXR0cmlidXRlZFN0cmluZ3MsIGkpKTsKIAogICAgICAgICBpZiAoIWF0dHJpYnV0ZWRT
dHJpbmcgfHwgIUNGQXR0cmlidXRlZFN0cmluZ0dldExlbmd0aChhdHRyaWJ1dGVkU3RyaW5nKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKGF0
dHJpYnV0ZWRTdHJpbmcsIG1fY3VycmVudEN1ZUNvbnRlbnQsIG1fY3VycmVudEN1ZVNldHRpbmdz
KTsKKyAgICAgICAgbV9jdWVzLmFwcGVuZChuZXcgR2VuZXJpY0N1ZURhdGEpOworICAgICAgICBw
cm9jZXNzQ3VlQXR0cmlidXRlcyhhdHRyaWJ1dGVkU3RyaW5nLCBtX2N1ZXNbaV0pOwogICAgICAg
ICBtX2N1cnJlbnRDdWVTdGFydFRpbWUgPSB0aW1lOwogICAgICAgICBtX2hhdmVQYXJ0aWFsQ3Vl
ID0gdHJ1ZTsKICAgICB9CkBAIC0yNTYsMTcgKzMzMCwxMyBAQCB2b2lkIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkY6OmRpc2Nvbm5lCiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6
cmVzZXRDdWVWYWx1ZXMoKQogewotICAgIGlmIChtX2hhdmVQYXJ0aWFsQ3VlICYmICFtX2N1cnJl
bnRDdWVFbmRUaW1lKSB7Ci0gICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnJlc2V0Q3VlVmFsdWVzIGZsdXNoaW5nIGRhdGEgZm9yIGN1ZTogc3RhcnQ9JS4yZiwg
ZW5kPSUuMmYsIHNldHRpbmdzPVwiJXNcIiwgY29udGVudD1cIiVzXCIgXG4iLAotICAgICAgICAg
ICAgbV9jdXJyZW50Q3VlU3RhcnRUaW1lLCBtX2N1cnJlbnRDdWVFbmRUaW1lLCBtX2N1cnJlbnRD
dWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fY3VycmVudEN1ZUNvbnRlbnQu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICB9CisgICAgaWYgKG1faGF2ZVBhcnRpYWxD
dWUgJiYgIW1fY3VycmVudEN1ZUVuZFRpbWUpCisgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFsdWVzIGZsdXNoaW5nIGRhdGEgZm9yIGN1ZXM6
IHN0YXJ0PSUuMmZcbiIsIG1fY3VycmVudEN1ZVN0YXJ0VGltZSk7CiAKKyAgICBtX2N1ZXMucmVz
aXplKDApOwogICAgIG1faGF2ZVBhcnRpYWxDdWUgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRDdWVJ
ZCA9IFN0cmluZygpOwogICAgIG1fY3VycmVudEN1ZVN0YXJ0VGltZSA9IDA7CiAgICAgbV9jdXJy
ZW50Q3VlRW5kVGltZSA9IDA7Ci0gICAgbV9jdXJyZW50Q3VlU2V0dGluZ3MuY2xlYXIoKTsKLSAg
ICBtX2N1cnJlbnRDdWVDb250ZW50LmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRjo6c2V0TW9kZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpNb2RlIG5ld01vZGUp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgJ
KHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1
LDIwICszNSwxMiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb247CitzdHJ1Y3QgR2VuZXJpY0N1ZURhdGE7CiAKIGNsYXNzIEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYgOiBwdWJsaWMgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSB7CiBw
dWJsaWM6Ci0gICAgfkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYoKTsKLQotICAgIFN0cmluZyBp
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1ZUlkOyB9Ci0gICAgZG91YmxlIHN0YXJ0KCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q3VlU3RhcnRUaW1lOyB9Ci0gICAgZG91YmxlIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1ZUVuZFRpbWU7IH0KLSAgICBTdHJpbmcgc2V0dGlu
Z3MoKSB7IHJldHVybiBtX2N1cnJlbnRDdWVTZXR0aW5ncy50b1N0cmluZygpOyB9Ci0gICAgU3Ry
aW5nIGNvbnRlbnQoKSB7IHJldHVybiBtX2N1cnJlbnRDdWVDb250ZW50LnRvU3RyaW5nKCk7IH0K
IAotICAgIHZvaWQgcHJvY2Vzc0N1ZShDRkFycmF5UmVmLCBkb3VibGUpOwotCi0gICAgdm9pZCBy
ZXNldEN1ZVZhbHVlcygpOworICAgIH5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0TW9kZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpNb2RlKSBPVkVS
UklERTsKIApAQCAtNjAsMTYgKzUyLDE4IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0JlZW5SZXBv
cnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQmVlblJlcG9ydGVkOyB9CiAgICAgdm9pZCBzZXRI
YXNCZWVuUmVwb3J0ZWQoYm9vbCByZXBvcnRlZCkgeyBtX2hhc0JlZW5SZXBvcnRlZCA9IHJlcG9y
dGVkOyB9CiAKKyAgICB2b2lkIHByb2Nlc3NDdWUoQ0ZBcnJheVJlZiwgZG91YmxlKTsKKyAgICB2
b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CisKIHByb3RlY3RlZDoKICAgICBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiopOwogCi0gICAgdm9pZCBw
cm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYsIFN0cmluZ0J1aWxkZXIm
IGNvbnRlbnQsIFN0cmluZ0J1aWxkZXImIHNldHRpbmdzKTsKKyAgICB2b2lkIHByb2Nlc3NDdWVB
dHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiwgR2VuZXJpY0N1ZURhdGEqKTsKIAotICAg
IFN0cmluZyBtX2N1cnJlbnRDdWVJZDsKICAgICBkb3VibGUgbV9jdXJyZW50Q3VlU3RhcnRUaW1l
OwogICAgIGRvdWJsZSBtX2N1cnJlbnRDdWVFbmRUaW1lOwotICAgIFN0cmluZ0J1aWxkZXIgbV9j
dXJyZW50Q3VlU2V0dGluZ3M7Ci0gICAgU3RyaW5nQnVpbGRlciBtX2N1cnJlbnRDdWVDb250ZW50
OworCisgICAgVmVjdG9yPEdlbmVyaWNDdWVEYXRhKj4gbV9jdWVzOwogCiAgICAgTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uKiBtX3BsYXllcjsKICAgICBpbnQgbV9pbmRleDsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b24uY3BwCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTgyLDYgKzU4MiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbjo6c2VlCiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpzZWVrQ29tcGxldGVkKCVwKSAtIGZpbmlzaGVkID0gJWQiLCB0aGlzLCBmaW5pc2hl
ZCk7CiAgICAgVU5VU0VEX1BBUkFNKGZpbmlzaGVkKTsKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9O
X1RFWFRfVFJBQ0tfU1VQUE9SVCkKKyAgICBpZiAoY3VycmVudFRyYWNrKCkpCisgICAgICAgIGN1
cnJlbnRUcmFjaygpLT5yZXNldEN1ZVZhbHVlcygpOworI2VuZGlmCisKICAgICBtX3NlZWtUbyA9
IE1lZGlhUGxheWVyOjppbnZhbGlkVGltZSgpOwogICAgIHVwZGF0ZVN0YXRlcygpOwogICAgIG1f
cGxheWVyLT50aW1lQ2hhbmdlZCgpOwpAQCAtODExLDE5ICs4MTYsMTMgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb246OmRpcwogfQogCiAjaWYgSEFWRShBVkZPVU5EQVRJT05f
VEVYVF9UUkFDS19TVVBQT1JUKQotdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OmZsdXNoQ3VycmVudEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKiB0cmFjaykKK3ZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjphZGRHZW5lcmljQ3VlKEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkYqIHRyYWNrLCBjb25zdCBHZW5lcmljQ3VlRGF0YSYgY3VlRGF0YSkKIHsK
ICAgICBpZiAoIXRyYWNrLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQVZG
b3VuZGF0aW9uIHJldHVybnMgYSBjdWUgZXZlcnkgdGltZSB0aGUgZGF0YSBpcyBidWZmZXJlZCwg
b25seSBhZGQgaXQgb25jZS4KLSAgICBpZiAodHJhY2stPmNsaWVudCgpLT5oYXNDdWUodHJhY2ss
IHRyYWNrLT5zdGFydCgpLCB0cmFjay0+ZW5kKCksIHRyYWNrLT5pZCgpLCB0cmFjay0+Y29udGVu
dCgpLCB0cmFjay0+c2V0dGluZ3MoKSkpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5
ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpmbHVzaEN1cnJlbnRDdWUoJXApIC0gYWxyZWFkeSBoYXZl
IGN1ZSBmb3IgdGltZSAlLjJmIiwgdGhpcywgdHJhY2stPnN0YXJ0KCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uOjpmbHVzaEN1cnJlbnRDdWUoJXApIC0gYWRkaW5nIGN1ZSBmb3IgdGltZSAlLjJmIiwgdGhp
cywgdHJhY2stPnN0YXJ0KCkpOwotICAgIHRyYWNrLT5jbGllbnQoKS0+YWRkQ3VlKHRyYWNrLCB0
cmFjay0+c3RhcnQoKSwgdHJhY2stPmVuZCgpLCB0cmFjay0+aWQoKSwgdHJhY2stPmNvbnRlbnQo
KSwgdHJhY2stPnNldHRpbmdzKCkpOworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6YWRkR2VuZXJpY0N1ZSglcCkgLSBhZGRpbmcgY3VlIGZvciB0aW1lICUu
MmYiLCB0aGlzLCBjdWVEYXRhLnN0YXJ0VGltZSk7CisgICAgdHJhY2stPmNsaWVudCgpLT5hZGRH
ZW5lcmljQ3VlKHRyYWNrLCBjdWVEYXRhKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb246OmNvbmZpZ3VyZUluYmFuZFRyYWNrcygpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiAx
Mzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRjsKK3N0cnVjdCBHZW5lcmljQ3VlRGF0YTsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uIDogcHVibGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiBw
dWJsaWM6CkBAIC0xMTgsNyArMTE5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJNYWluVGhy
ZWFkUGVuZGluZ0ZsYWcoKTsKIAogI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQ
UE9SVCkKLSAgICB2b2lkIGZsdXNoQ3VycmVudEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
Kik7CisgICAgdm9pZCBhZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqLCBj
b25zdCBHZW5lcmljQ3VlRGF0YSYpOwogICAgIHZvaWQgdHJhY2tNb2RlQ2hhbmdlZCgpOwogI2Vu
ZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMTM5ODkwKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYg
KzEwNiw3IEBAIFNPRlRfTElOS19DTEFTUyhBVkZvdW5kYXRpb24sIEFWTWVkaWFTZWwKIFNPRlRf
TElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJsZSwg
TlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVT
dWJ0aXRsZSwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZN
ZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzLCBOU1N0cmluZyAq
KQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVlBsYXllckl0ZW1MZWdpYmxlT3V0
cHV0VGV4dFN0eWxpbmdSZXNvbHV0aW9uU291cmNlQW5kUnVsZXNPbmx5LCBOU1N0cmluZyAqKQog
CiAjZGVmaW5lIEFWUGxheWVySXRlbUxlZ2libGVPdXRwdXQgZ2V0QVZQbGF5ZXJJdGVtTGVnaWJs
ZU91dHB1dENsYXNzKCkKICNkZWZpbmUgQVZNZWRpYVNlbGVjdGlvbkdyb3VwIGdldEFWTWVkaWFT
ZWxlY3Rpb25Hcm91cENsYXNzKCkKQEAgLTExMyw2ICsxMTQsNyBAQCBTT0ZUX0xJTktfUE9JTlRF
UihBVkZvdW5kYXRpb24sIEFWTWVkaWFDCiAjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xl
Z2libGUgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJsZSgpCiAjZGVmaW5lIEFWTWVkaWFU
eXBlU3VidGl0bGUgZ2V0QVZNZWRpYVR5cGVTdWJ0aXRsZSgpCiAjZGVmaW5lIEFWTWVkaWFDaGFy
YWN0ZXJpc3RpY0NvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlcyBnZXRBVk1lZGlhQ2hhcmFjdGVy
aXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMoKQorI2RlZmluZSBBVlBsYXllckl0ZW1M
ZWdpYmxlT3V0cHV0VGV4dFN0eWxpbmdSZXNvbHV0aW9uU291cmNlQW5kUnVsZXNPbmx5IGdldEFW
UGxheWVySXRlbUxlZ2libGVPdXRwdXRUZXh0U3R5bGluZ1Jlc29sdXRpb25Tb3VyY2VBbmRSdWxl
c09ubHkoKQogI2VuZGlmCiAKICNkZWZpbmUga0NNVGltZVplcm8gZ2V0a0NNVGltZVplcm8oKQpA
QCAtMzkxLDcgKzM5Myw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
QzoKICNpZiBIQVZFKEFWRk9VTkRBVElPTl9URVhUX1RSQUNLX1NVUFBPUlQpCiAgICAgW21fYXZQ
bGF5ZXIuZ2V0KCkgc2V0QXBwbGllc01lZGlhU2VsZWN0aW9uQ3JpdGVyaWFBdXRvbWF0aWNhbGx5
OllFU107CiAjZW5kaWYKLSAgICAKIAogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAgICAgICAg
W21fYXZQbGF5ZXIuZ2V0KCkgcmVwbGFjZUN1cnJlbnRJdGVtV2l0aFBsYXllckl0ZW06bV9hdlBs
YXllckl0ZW0uZ2V0KCldOwpAQCAtNDEwLDcgKzQxMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIC8vIENyZWF0ZSB0aGUgcGxheWVyIGl0ZW0gc28g
d2UgY2FuIGxvYWQgbWVkaWEgZGF0YS4gCiAgICAgbV9hdlBsYXllckl0ZW0uYWRvcHROUyhbW0FW
UGxheWVySXRlbSBhbGxvY10gaW5pdFdpdGhBc3NldDptX2F2QXNzZXQuZ2V0KCldKTsKLSAgICAK
KwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6
bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6QHNlbGVjdG9yKGRpZEVuZDopIG5hbWU6QVZQ
bGF5ZXJJdGVtRGlkUGxheVRvRW5kVGltZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9hdlBsYXllckl0
ZW0uZ2V0KCldOwogCiAgICAgZm9yIChOU1N0cmluZyAqa2V5TmFtZSBpbiBpdGVtS1ZPUHJvcGVy
dGllcygpKQpAQCAtODk3LDYgKzg5OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzoKIAogICAgICAgICBbbV9sZWdpYmxlT3V0cHV0LmdldCgpIHNldERlbGVnYXRl
Om1fb2JqY09ic2VydmVyLmdldCgpIHF1ZXVlOmRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCldOwog
ICAgICAgICBbbV9sZWdpYmxlT3V0cHV0LmdldCgpIHNldEFkdmFuY2VJbnRlcnZhbEZvckRlbGVn
YXRlSW52b2NhdGlvbjpOU1RpbWVJbnRlcnZhbFNpbmNlMTk3MF07CisgICAgICAgIFttX2xlZ2li
bGVPdXRwdXQuZ2V0KCkgc2V0VGV4dFN0eWxpbmdSZXNvbHV0aW9uOkFWUGxheWVySXRlbUxlZ2li
bGVPdXRwdXRUZXh0U3R5bGluZ1Jlc29sdXRpb25Tb3VyY2VBbmRSdWxlc09ubHldOwogICAgICAg
ICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0cHV0Om1fbGVnaWJsZU91dHB1dC5nZXQoKV07
CiAgICAgfQogI2VuZGlmCkBAIC0xMjEyLDcgKzEyMTQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OnByb2Nlc3NUZXh0VHJhY2tzKCVwKSAtIG5pbCBtZWRpYVNl
bGVjdGlvbkdyb3VwIiwgdGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICAKICAg
ICBWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY+ID4gcmVtb3ZlZFRleHRU
cmFja3MgPSBtX3RleHRUcmFja3M7CiAgICAgTlNBcnJheSAqbGVnaWJsZU9wdGlvbnMgPSBbQVZN
ZWRpYVNlbGVjdGlvbkdyb3VwIHBsYXlhYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zRnJvbUFycmF5
OltsZWdpYmxlR3JvdXAgb3B0aW9uc11dOwogICAgIGZvciAoQVZNZWRpYVNlbGVjdGlvbk9wdGlv
blR5cGUgKm9wdGlvbiBpbiBsZWdpYmxlT3B0aW9ucykgewpAQCAtMTIyOCwxMyArMTIzMCw4IEBA
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgaWYgKCFu
ZXdUcmFjaykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChbW29wdGlvbiBt
ZWRpYVR5cGVdIGlzRXF1YWxUb1N0cmluZzpBVk1lZGlhVHlwZVN1YnRpdGxlXSkgewotICAgICAg
ICAgICAgaWYgKCFbb3B0aW9uIGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3Rl
cmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzXSkgewotICAgICAgICAgICAgICAgIEFW
TWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlICpmb3JjZWRPbmx5T3B0aW9uID0gW29wdGlvbiBhc3Nv
Y2lhdGVkTWVkaWFTZWxlY3Rpb25PcHRpb25Jbk1lZGlhU2VsZWN0aW9uR3JvdXA6bGVnaWJsZUdy
b3VwXTsKLSAgICAgICAgICAgICAgICBpZiAoZm9yY2VkT25seU9wdGlvbikKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KFtbb3B0aW9uIG1lZGlhVHlwZV0gaXNFcXVhbFRvU3RyaW5nOkFWTWVkaWFUeXBlU3VidGl0bGVd
ICYmIFtvcHRpb24gaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWND
b250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXNdKQorICAgICAgICAgICAgY29udGludWU7CiAKICAg
ICAgICAgbV90ZXh0VHJhY2tzLmFwcGVuZChJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQzo6
Y3JlYXRlKHRoaXMsIG9wdGlvbikpOwogICAgIH0KQEAgLTEyNzUsNiArMTI3Miw5IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVudFRyYWNrKEluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYgKnRyYWNrKQogewogICAgIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDKiB0cmFj
a1ByaXZhdGUgPSBzdGF0aWNfY2FzdDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQyo+KHRy
YWNrKTsKKyAgICBpZiAobV9jdXJyZW50VHJhY2sgPT0gdHJhY2tQcml2YXRlKQorICAgICAgICBy
ZXR1cm47CisKICAgICBBVk1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZSAqbWVkaWFTZWxlY3Rpb25P
cHRpb24gPSB0cmFja1ByaXZhdGUgPyB0cmFja1ByaXZhdGUtPm1lZGlhU2VsZWN0aW9uT3B0aW9u
KCkgOiAwOwogCiAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzo6c2V0Q3VycmVudFRyYWNrKCVwKSAtIHNlbGVjdGluZyBtZWRpYSBvcHRpb24gJXAiLCB0
aGlzLCBtZWRpYVNlbGVjdGlvbk9wdGlvbik7CkBAIC0xNDI0LDYgKzE0MjQsOCBAQCAtICh2b2lk
KWxlZ2libGVPdXRwdXQ6KGlkKW91dHB1dCBkaWRPdXRwCiAgICAgICAgIHJldHVybjsKIAogICAg
IGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlm
ICghbV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9jYWxsYmFjay0+
cHJvY2Vzc0N1ZShzdHJpbmdzLCBDTVRpbWVHZXRTZWNvbmRzKGl0ZW1UaW1lKSk7CiAgICAgfSk7
CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183037</attachid>
            <date>2013-01-16 14:52:26 -0800</date>
            <delta_ts>2013-01-16 15:53:22 -0800</delta_ts>
            <desc>Update patch for my good friend the style bot.</desc>
            <filename>patch_23.txt</filename>
            <type>text/plain</type>
            <size>62161</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTg5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDEzLTAxLTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgbm9uLVdl
YlZUVCBjdWVzIGZyb20gaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6IEFkZCBuZXcgZmlsZXMuCisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tD
b250YWluZXJFbGVtZW50Ojp1cGRhdGVEaXNwbGF5KTogUGFzcyB2aWRlbyBzaXplIHRvIGdldERp
c3BsYXlUcmVlLgorCisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjphZGRHZW5lcmljQ3VlKTogTmV3LCBj
cmVhdGUgYSBnZW5lcmljIGN1ZSBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgICAgICAg
IChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2s6OmFkZFdlYlZUVEN1ZSk6IFJlbmFtZWQgZnJvbSBh
ZGRDdWUuCisgICAgICAgICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaDoKKworICAgICAg
ICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFj
azo6aGFzQ3VlKTogTW92ZWQgZnJvbSBJbmJhbmRUZXh0VHJhY2suY3BwLCB1c2Ugb3BlcmF0b3Ig
PT0gaW5zdGVhZCBvZiBpbmxpbmUKKyAgICAgICAgICAgIGNvbXBhcmlzb24gc28gZGVyaXZlZCBU
ZXh0VHJhY2tDdWVzIGNhbiBiZSBjb21wYXJlZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRU
cmFjay5oOgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOiBJbnRlcmZh
Y2UgY2hhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUp
OiBEb24ndCBjcmVhdGUgdGhlIGRpc3BsYXkgdHJlZSBpbiB0aGUgY29uc3RydWN0b3IsIGl0IG1h
eQorICAgICAgICAgICAgbmV2ZXIgYmUgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRy
YWNrQ3VlOjpjcmVhdGVEaXNwbGF5VHJlZSk6IE5ldywgY3JlYXRlIHRoZSBkaXNwbGF5IHRyZWUu
CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmRpc3BsYXlUcmVlSW50ZXJuYWwpOiBE
aXNwbGF5IHRyZWUgYWNjZXNzb3IsIGFsbG93cyBpdCB0byBiZSBjcmVhdGVkIGxhemlseS4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6c2V0QWxpZ24pOiBBbGlnbm1lbnQgLT4gQ3Vl
QWxpZ25tZW50LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2ZSk6
IFVzZSBkaXNwbGF5VHJlZUludGVybmFsKCkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tD
dWU6OmdldERpc3BsYXlUcmVlKTogVXNlIGRpc3BsYXlUcmVlSW50ZXJuYWwoKSwgcGFzcyB2aWRl
byBzaXplIHRvIGFwcGx5Q1NTUHJvcGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFj
a0N1ZTo6cmVtb3ZlRGlzcGxheVRyZWUpOiBVc2UgZGlzcGxheVRyZWVJbnRlcm5hbCgpLgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpvcGVyYXRvcj09KTogTmV3LgorICAgICAgICAq
IGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tD
dWU6OmdldEFsaWdubWVudCk6IEFsaWdubWVudCAtPiBDdWVBbGlnbm1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tDdWU6Om9wZXJhdG9yIT0pOiBOZXcuCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2tDdWU6OmN1ZVR5cGUpOiBOZXcsIGN1ZSB0eXBlIGlkZW50aWZpZWQgbmVlZGVk
IGJ5IG9wZXJhdG9yPT0uCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6Om93bmVyRG9j
dW1lbnQpOiBOZXcuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWNCb3g6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljQm94OjpUZXh0VHJh
Y2tDdWVHZW5lcmljQm94KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWNC
b3g6OmFwcGx5Q1NTUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjo6VGV4dFRyYWNrQ3Vl
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZURpc3BsYXlU
cmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6Om9wZXJhdG9yPT0p
OgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjp+VGV4dFRyYWNrQ3VlR2VuZXJpYyk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpiYXNlRm9udFNpemVSZWxhdGl2ZVRv
VmlkZW9IZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0
QmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRUcmFja0N1ZUdlbmVyaWM6OmZvbnRTaXplTXVsdGlwbGllcik6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0VHJhY2tDdWVHZW5lcmljOjpzZXRGb250U2l6ZU11bHRpcGxpZXIpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6Zm9udE5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
VGV4dFRyYWNrQ3VlR2VuZXJpYzo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
VHJhY2tDdWVHZW5lcmljOjpjdWVUeXBlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRl
cyk6IENvcHkgY3VlIGF0dHJpYnV0ZXMgaW50byBHZW5lcmljQ3VlRGF0YQorICAgICAgICAgICAg
c3RydWN0IGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNvbnZlcnQgdG8gV2ViVlRUIHNldHRpbmdzIHN0
cmluZy4gUHJvY2VzcyBmb250IHNpemUsZm9udCBiYXNlCisgICAgICAgICAgICBzaXplLCBmb250
IG5hbWUsIGFuZCB2ZXJ0aWNhbCBsYXlvdXQgYXR0cmlidXRlcywKKyAgICAgICAgKFdlYkNvcmU6
OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUpOiBDcmVhdGUgc2VwYXJhdGUg
Y3VlcyBmb3IgZWFjaCBhdHRyaWJ1dGVkCisgICAgICAgICAgICBzdHJpbmcgaW4gdGhlIGFycmF5
IGJlY2F1c2UgZWFjaCBvbmUgY2FuIGJlIGF0IGEgZGlmZmVyZW50IHNjcmVlbiBsb2NhdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFs
dWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRi5oOgorICAgICAgICAoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRik6
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbjo6c2Vla0NvbXBsZXRlZCk6IFJlc2V0IGFueSBwYXJ0aWFsbHkgYWNj
dW11bGF0ZWQgY3VlcworICAgICAgICAgICAgZGVsaXZlcmVkIHNpbmNlIHRoZSBzZWVrIHdhcyBz
dGFydGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjphZGRHZW5lcmljQ3VlKTogUmVuYW1lZCBmcm9tIGZsdXNoQ3VycmVudEN1ZS4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uLmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOiBX
aGl0ZXNwYWNlIGNsZWFudXAuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpjcmVhdGVBVlBsYXllckl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0NoYW5nZWQp
OiBUZWxsIGxlZ2libGUgb3V0cHV0IHRvIGRlbGl2ZXIgY3VlcworICAgICAgICAgICAgd2l0aG91
dCBhbnkgYWRkaXRpb25hbCBzdHlsaW5nIG5lZWRlZCBieSB0aGUgaW50ZXJuYWwgcmVuZGVyZXIu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpw
cm9jZXNzVGV4dFRyYWNrcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpzZXRDdXJyZW50VHJhY2spOiBEbyBub3RoaW5nIGlmIGFza2VkIHRv
IGNoYW5nZQorICAgICAgICAgICAgdG8gdGhlIHRyYWNrIHRoYXQgaXMgYWxyZWFkeSBjdXJyZW50
LgorICAgICAgICAoLVtXZWJDb3JlQVZGTW92aWVPYnNlcnZlciBsZWdpYmxlT3V0cHV0OmRpZE91
dHB1dEF0dHJpYnV0ZWRTdHJpbmdzOm5hdGl2ZVNhbXBsZUJ1ZmZlcnM6Zm9ySXRlbVRpbWU6XSk6
CisgICAgICAgICAgICBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY2xpZW50IGNhbGxiYWNr
IGlzbid0IE5VTEwuCisKIDIwMTMtMDEtMTYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhl
LmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbZ3N0cmVhbWVyXSBTb21lIG1lZGlhIHRlc3Rz
IG9jY2FzaW9uYWxseSBjcmFzaCB3aXRoIGdzdHJlYW1lciAxLjAgYmFja2VuZApJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2
aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNiArMTA4LDggQEAKIAkJMDcwNzU2REYx
NDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzA3NTZEOTE0MjM5QjRDMDA0MTQxNjEg
LyogSlNUZXh0VHJhY2tDdWVMaXN0LmNwcCAqLzsgfTsKIAkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0
MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNr
Q3VlTGlzdC5oICovOyB9OwogCQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJp
bGl0eVNsaWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcwOUZDNEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsg
fTsKKwkJMDcxQTlFQzIxNjhGQkM0MzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzAx
NjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwICovOyB9OworCQkwNzFB
OUVDMzE2OEZCQzU1MDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzExNjhGQjU2QzAwMjYy
OUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJp
Y0V2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMDcyMEIwOUUxNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCAq
LzsgfTsKIAkJMDcyMEIwQTAxNEQzMzIzNTAwNjQyOTU2IC8qIEdlc3R1cmVFdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMz
MjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLzsgfTsKIAkJMDcyMEIwQTExNEQzMzIz
NTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJp
Y0V2ZW50UXVldWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzI3MSw2ICs3MjczLDggQEAKIAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8q
IEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1RleHRUcmFja0N1ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZD
NEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNzaWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwNzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9s
cy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRl
eHRUcmFja0N1ZUdlbmVyaWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzFB
OUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tDdWVHZW5lcmljLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZl
bnRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmlj
RXZlbnRRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTRE
MzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xOTYxNSw2ICsxOTYxOSw4IEBACiAJCQkJOTc1OUU5
MzgxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5jcHAgKi8sCiAJCQkJOTc1OUU5Mzkx
NEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5oICovLAogCQkJCTk3NTlFOTNBMTRFRjFD
RjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWUuaWRsICovLAorCQkJCTA3MUE5RUMwMTY4RkI1NkMw
MDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAqLywKKwkJCQkwNzFBOUVDMTE2OEZC
NTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oICovLAogCQkJCTk3NTlFOTNCMTRF
RjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCAqLywKIAkJCQk5NzU5RTkzQzE0
RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlTGlzdC5oICovLAogCQkJCTk3NTlFOTNEMTRF
RjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmlkbCAqLywKQEAgLTI1ODg0LDYgKzI1
ODkwLDcgQEAKIAkJCQlCMkMzREE0QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc1OUU5NDAxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTc1OUU5NDMxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFj
a0N1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDcxQTlFQzMxNjhGQkM1NTAwMjYyOUY5IC8qIFRl
eHRUcmFja0N1ZUdlbmVyaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTlFOTQ2MTRFRjFDRjgw
MDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzY5NzA4
NzE0NjNBRDg3MDBGNTAyQ0YgLyogVGV4dFRyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjFBRDRFNzQxM0ExMkE0NjAwODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yOTA1Myw2ICsyOTA2MCw3IEBACiAJCQkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2
IC8qIFRleHRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1OUU5M0YxNEVGMUNGODAw
MjZBMkREIC8qIFRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzU5RTk0MjE0RUYx
Q0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3MUE5
RUMyMTY4RkJDNDMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3NTlFOTQ1MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTA3Njk3MDg2MTQ2M0FEODcwMEY1MDJDRiAvKiBUZXh0VHJh
Y2tMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIxQUQ0RTczMTNBMTJBNDYwMDg0NkIyNyAv
KiBUZXh0VHJhY2tMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lv
biAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMDQsOCArMTMwNCw3IEBAIHZvaWQgTWVkaWFD
b250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWUKICAgICAgICAgaWYgKCFjdWUtPnRyYWNrKCkg
fHwgIWN1ZS0+dHJhY2soKS0+aXNSZW5kZXJlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlz
cGxheVRyZWUoKTsKLQorICAgICAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94
ID0gY3VlLT5nZXREaXNwbGF5VHJlZShtX3ZpZGVvRGlzcGxheVNpemUuc2l6ZSgpKTsKICAgICAg
ICAgaWYgKGRpc3BsYXlCb3gtPmhhc0NoaWxkTm9kZXMoKSAmJiAhY29udGFpbnMoc3RhdGljX2Nh
c3Q8Tm9kZSo+KGRpc3BsYXlCb3guZ2V0KCkpKSkKICAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBk
aXNwbGF5IHRyZWUgb2YgYSBjdWUgaXMgcmVtb3ZlZCB3aGVuIHRoZSBhY3RpdmUgZmxhZyBvZiB0
aGUgY3VlIGlzIHVuc2V0LgogICAgICAgICAgICAgbV9jdWVDb250YWluZXItPmFwcGVuZENoaWxk
KGRpc3BsYXlCb3gsIEFTU0VSVF9OT19FWENFUFRJT04sIGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAJKHJldmlzaW9uIDEzOTg5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTEgQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlRl
eHRUcmFja0N1ZUdlbmVyaWMuaCIKICNpbmNsdWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCi0KKyNp
bmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTk4LDc0ICsxMDAsNTUgQEAgc2l6ZV90IEluYmFuZFRleHRUcmFjazo6
aW5iYW5kVHJhY2tJbmRleAogICAgIHJldHVybiBtX3ByaXZhdGUtPnRleHRUcmFja0luZGV4KCk7
CiB9CiAKLXZvaWQgSW5iYW5kVGV4dFRyYWNrOjphZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSogdHJhY2tQcml2YXRlLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYg
aWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncykKK3ZvaWQg
SW5iYW5kVGV4dFRyYWNrOjphZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRy
YWNrUHJpdmF0ZSwgY29uc3QgR2VuZXJpY0N1ZURhdGEmIGN1ZURhdGEpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHRyYWNrUHJpdmF0ZSk7CiAgICAgQVNTRVJUKHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZh
dGUpOwogCi0gICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzdGFydCwgZW5kLCBjb250ZW50KTsKLSAgICBj
dWUtPnNldElkKGlkKTsKLSAgICBjdWUtPnNldEN1ZVNldHRpbmdzKHNldHRpbmdzKTsKLSAgICBj
dWUtPnNldFRyYWNrKHRoaXMpOworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUg
PSBUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBj
dWVEYXRhLnN0YXJ0VGltZSwgY3VlRGF0YS5lbmRUaW1lLCBjdWVEYXRhLmNvbnRlbnQpOwogCi0g
ICAgaWYgKCFtX2N1ZXMpCi0gICAgICAgIG1fY3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0
ZSgpOwotICAgIG1fY3Vlcy0+YWRkKGN1ZSk7Ci0gICAgCi0gICAgaWYgKGNsaWVudCgpKQotICAg
ICAgICBjbGllbnQoKS0+dGV4dFRyYWNrQWRkQ3Vlcyh0aGlzLCBtX2N1ZXMuZ2V0KCkpOworICAg
IGN1ZS0+c2V0SWQoY3VlRGF0YS5pZCk7CisgICAgY3VlLT5zZXRCYXNlRm9udFNpemVSZWxhdGl2
ZVRvVmlkZW9IZWlnaHQoY3VlRGF0YS5iYXNlRm9udFNpemUpOworICAgIGN1ZS0+c2V0Rm9udFNp
emVNdWx0aXBsaWVyKGN1ZURhdGEucmVsYXRpdmVGb250U2l6ZSk7CisgICAgY3VlLT5zZXRGb250
TmFtZShjdWVEYXRhLmZvbnROYW1lKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgaWYg
KGN1ZURhdGEucG9zaXRpb24gPiAwKQorICAgICAgICBjdWUtPnNldFBvc2l0aW9uKGxyb3VuZChj
dWVEYXRhLnBvc2l0aW9uKSwgZWMpOworICAgIGlmIChjdWVEYXRhLmxpbmUgPiAwKQorICAgICAg
ICBjdWUtPnNldExpbmUobHJvdW5kKGN1ZURhdGEubGluZSksIGVjKTsKKyAgICBpZiAoY3VlRGF0
YS5zaXplID4gMCkKKyAgICAgICAgY3VlLT5zZXRTaXplKGxyb3VuZChjdWVEYXRhLnNpemUpLCBl
Yyk7CisgICAgaWYgKGN1ZURhdGEuYWxpZ24gPT0gR2VuZXJpY0N1ZURhdGE6OlN0YXJ0KQorICAg
ICAgICBjdWUtPnNldEFsaWduKEFTQ0lJTGl0ZXJhbCgic3RhcnQiKSwgZWMpOworICAgIGVsc2Ug
aWYgKGN1ZURhdGEuYWxpZ24gPT0gR2VuZXJpY0N1ZURhdGE6Ok1pZGRsZSkKKyAgICAgICAgY3Vl
LT5zZXRBbGlnbihBU0NJSUxpdGVyYWwoIm1pZGRsZSIpLCBlYyk7CisgICAgZWxzZSBpZiAoY3Vl
RGF0YS5hbGlnbiA9PSBHZW5lcmljQ3VlRGF0YTo6RW5kKQorICAgICAgICBjdWUtPnNldEFsaWdu
KEFTQ0lJTGl0ZXJhbCgiZW5kIiksIGVjKTsKKyAgICBjdWUtPnNldFNuYXBUb0xpbmVzKGZhbHNl
KTsKKworICAgIGlmIChoYXNDdWUoY3VlLmdldCgpKSkgeworICAgICAgICBMT0coTWVkaWEsICJJ
bmJhbmRUZXh0VHJhY2s6OmFkZEdlbmVyaWNDdWUgaWdub3JpbmcgYWxyZWFkeSBhZGRlZCBjdWU6
IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBjb250ZW50PVwiJXNcIlxuIiwKKyAgICAgICAgICAgIGN1
ZURhdGEuc3RhcnRUaW1lLCBjdWVEYXRhLmVuZFRpbWUsIGN1ZURhdGEuY29udGVudC51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFkZEN1ZShjdWUpOwogfQog
Ci1ib29sIEluYmFuZFRleHRUcmFjazo6aGFzQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBk
b3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5kVGltZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0
VHJhY2s6OmFkZFdlYlZUVEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiB0cmFja1ByaXZhdGUs
IGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5n
JiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzKQogeworICAgIFVOVVNFRF9QQVJBTSh0
cmFja1ByaXZhdGUpOworICAgIEFTU0VSVCh0cmFja1ByaXZhdGUgPT0gbV9wcml2YXRlKTsKIAot
ICAgIGlmIChzdGFydFRpbWUgPCAwIHx8IGVuZFRpbWUgPCAwKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWN1ZXMoKS0+bGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHNpemVfdCBzZWFyY2hTdGFydCA9IDA7Ci0gICAgc2l6ZV90IHNlYXJjaEVuZCA9IGN1
ZXMoKS0+bGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICBBU1NFUlQoc2VhcmNo
U3RhcnQgPD0gY3VlcygpLT5sZW5ndGgoKSk7Ci0gICAgICAgIEFTU0VSVChzZWFyY2hFbmQgPD0g
Y3VlcygpLT5sZW5ndGgoKSk7Ci0gICAgICAgIAotICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEN1ZXMgaW4gdGhlIFRleHRUcmFja0N1ZUxpc3QgYXJlIG1h
aW50YWluZWQgaW4gc3RhcnQgdGltZSBvcmRlci4KLSAgICAgICAgaWYgKHNlYXJjaFN0YXJ0ID09
IHNlYXJjaEVuZCkgewotICAgICAgICAgICAgaWYgKCFzZWFyY2hTdGFydCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGN1ZSA9IGN1ZXMo
KS0+aXRlbShzZWFyY2hTdGFydCAtIDEpOwotICAgICAgICAgICAgaWYgKCFjdWUpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+c3RhcnRUaW1lKCkg
IT0gc3RhcnRUaW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChjdWUtPmVuZFRpbWUoKSAhPSBlbmRUaW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGlmIChjdWUtPnRleHQoKSAhPSBjb250ZW50KQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdWUtPmN1ZVNldHRpbmdzKCkg
IT0gc2V0dGluZ3MpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKGN1ZS0+aWQoKSAhPSBpZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBzaXplX3QgaW5kZXggPSAoc2VhcmNoU3RhcnQgKyBzZWFyY2hFbmQpIC8gMjsKLSAg
ICAgICAgY3VlID0gY3VlcygpLT5pdGVtKGluZGV4KTsKLSAgICAgICAgaWYgKHN0YXJ0VGltZSA8
IGN1ZS0+c3RhcnRUaW1lKCkgfHwgKHN0YXJ0VGltZSA9PSBjdWUtPnN0YXJ0VGltZSgpICYmIGVu
ZFRpbWUgPiBjdWUtPmVuZFRpbWUoKSkpCi0gICAgICAgICAgICBzZWFyY2hFbmQgPSBpbmRleDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2VhcmNoU3RhcnQgPSBpbmRleCArIDE7Ci0gICAg
fQorICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgY29udGVudCk7CisgICAgY3VlLT5z
ZXRJZChpZCk7CisgICAgY3VlLT5zZXRDdWVTZXR0aW5ncyhzZXR0aW5ncyk7CiAgICAgCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNDdWUo
Y3VlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYWRkQ3VlKGN1ZSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5i
YW5kVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmRUZXh0VHJhY2suaAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTEsOCArNTEsOCBAQCBw
dWJsaWM6CiBwcml2YXRlOgogICAgIEluYmFuZFRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgVGV4dFRyYWNrQ2xpZW50KiwgUGFzc1JlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRl
Pik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBk
b3VibGUsIGRvdWJsZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBib29sIGhhc0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2
YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGRHZW5lcmljQ3VlKEluYmFu
ZFRleHRUcmFja1ByaXZhdGUqLCBjb25zdCBHZW5lcmljQ3VlRGF0YSYpIE9WRVJSSURFOworICAg
IHZpcnR1YWwgdm9pZCBhZGRXZWJWVFRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJs
ZSwgZG91YmxlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBP
VkVSUklERTsKIAogICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiBtX3ByaXZhdGU7
CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNp
b24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMzksNiArMzM5LDY0IEBAIGludCBUZXh0VHJhY2s6
OnRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGUKICAgICByZXR1cm4gbV9yZW5kZXJlZFRyYWNrSW5k
ZXg7CiB9CiAKK2Jvb2wgVGV4dFRyYWNrOjpoYXNDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCit7Cisg
ICAgaWYgKGN1ZS0+c3RhcnRUaW1lKCkgPCAwIHx8IGN1ZS0+ZW5kVGltZSgpIDwgMCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghbV9jdWVzIHx8ICFtX2N1ZXMtPmxlbmd0
aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc2l6ZV90IHNlYXJjaFN0YXJ0
ID0gMDsKKyAgICBzaXplX3Qgc2VhcmNoRW5kID0gbV9jdWVzLT5sZW5ndGgoKTsKKyAgICAKKyAg
ICB3aGlsZSAoMSkgeworICAgICAgICBBU1NFUlQoc2VhcmNoU3RhcnQgPD0gbV9jdWVzLT5sZW5n
dGgoKSk7CisgICAgICAgIEFTU0VSVChzZWFyY2hFbmQgPD0gbV9jdWVzLT5sZW5ndGgoKSk7Cisg
ICAgICAgIAorICAgICAgICBUZXh0VHJhY2tDdWUqIGV4aXN0aW5nQ3VlOworICAgICAgICAKKyAg
ICAgICAgLy8gQ3VlcyBpbiB0aGUgVGV4dFRyYWNrQ3VlTGlzdCBhcmUgbWFpbnRhaW5lZCBpbiBz
dGFydCB0aW1lIG9yZGVyLgorICAgICAgICBpZiAoc2VhcmNoU3RhcnQgPT0gc2VhcmNoRW5kKSB7
CisgICAgICAgICAgICBpZiAoIXNlYXJjaFN0YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjdWUgd2l0
aCB0aGUgc2FtZSBzdGFydCB0aW1lLCBiYWNrIHVwIHRvIGZpcnN0IG9uZSBzbyB3ZQorICAgICAg
ICAgICAgLy8gY29uc2lkZXIgYWxsIG9mIHRoZW0uCisgICAgICAgICAgICB3aGlsZSAoc2VhcmNo
U3RhcnQgPj0gMiAmJiBjdWUtPnN0YXJ0VGltZSgpID09IG1fY3Vlcy0+aXRlbShzZWFyY2hTdGFy
dCAtIDIpLT5zdGFydFRpbWUoKSkKKyAgICAgICAgICAgICAgICAtLXNlYXJjaFN0YXJ0OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBib29sIGZpcnN0Q29tcGFyZSA9IHRydWU7CisgICAgICAg
ICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAgIGlmICghZmlyc3RDb21wYXJlKQorICAg
ICAgICAgICAgICAgICAgICArK3NlYXJjaFN0YXJ0OworICAgICAgICAgICAgICAgIGZpcnN0Q29t
cGFyZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChzZWFyY2hTdGFydCA+IG1fY3Vlcy0+
bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgICAgIGV4aXN0aW5nQ3VlID0gbV9jdWVzLT5pdGVtKHNlYXJjaFN0YXJ0IC0gMSk7CisgICAg
ICAgICAgICAgICAgaWYgKCFleGlzdGluZ0N1ZSB8fCBjdWUtPnN0YXJ0VGltZSgpID4gZXhpc3Rp
bmdDdWUtPnN0YXJ0VGltZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICBpZiAoKmV4aXN0aW5nQ3VlICE9ICpjdWUpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzaXpl
X3QgaW5kZXggPSAoc2VhcmNoU3RhcnQgKyBzZWFyY2hFbmQpIC8gMjsKKyAgICAgICAgZXhpc3Rp
bmdDdWUgPSBtX2N1ZXMtPml0ZW0oaW5kZXgpOworICAgICAgICBpZiAoY3VlLT5zdGFydFRpbWUo
KSA8IGV4aXN0aW5nQ3VlLT5zdGFydFRpbWUoKSB8fCAoY3VlLT5zdGFydFRpbWUoKSA9PSBleGlz
dGluZ0N1ZS0+c3RhcnRUaW1lKCkgJiYgY3VlLT5lbmRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+ZW5k
VGltZSgpKSkKKyAgICAgICAgICAgIHNlYXJjaEVuZCA9IGluZGV4OworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBzZWFyY2hTdGFydCA9IGluZGV4ICsgMTsKKyAgICB9CisgICAgCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
ay5oCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRU
cmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA1LDYgKzEwNSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgYWRkQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CiAgICAgdm9p
ZCByZW1vdmVDdWUoVGV4dFRyYWNrQ3VlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgaGFz
Q3VlKFRleHRUcmFja0N1ZSogY3VlKTsKIAogICAgIHZvaWQgY3VlV2lsbENoYW5nZShUZXh0VHJh
Y2tDdWUqKTsKICAgICB2b2lkIGN1ZURpZENoYW5nZShUZXh0VHJhY2tDdWUqKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAJKHJldmlzaW9uIDEzOTg5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTEwNiw3ICsxMDYsNyBAQCBUZXh0VHJhY2tDdWUqIFRl
eHRUcmFja0N1ZUJveDo6Z2V0Q3VlKCkgCiAgICAgcmV0dXJuIG1fY3VlOwogfQogCi12b2lkIFRl
eHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0aWVzKCkKK3ZvaWQgVGV4dFRyYWNrQ3VlQm94
OjphcHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYpCiB7CiAgICAgLy8gRklYTUU6IEFw
cGx5IGFsbCB0aGUgaW5pdGlhbCBDU1MgcG9zaXRpb25pbmcgcHJvcGVydGllcy4gaHR0cDovL3dr
Yi51Zy83OTkxNgogCkBAIC0yMDksNyArMjA5LDYgQEAgVGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tD
dWUoU2NyaXB0RXhlY3V0aQogICAgICwgbV9zbmFwVG9MaW5lcyh0cnVlKQogICAgICwgbV9hbGxE
b2N1bWVudE5vZGVzKEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihjb250ZXh0KSkpCiAgICAgLCBtX2Rpc3BsYXlUcmVlU2hvdWxkQ2hhbmdlKHRydWUpCi0gICAg
LCBtX2Rpc3BsYXlUcmVlKFRleHRUcmFja0N1ZUJveDo6Y3JlYXRlKHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSwgdGhpcykpCiB7CiAgICAgQVNTRVJUKG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsKIApAQCAtMjI3LDYgKzIyNiwx
OCBAQCBUZXh0VHJhY2tDdWU6On5UZXh0VHJhY2tDdWUoKQogewogfQogCitQYXNzUmVmUHRyPFRl
eHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlOjpjcmVhdGVEaXNwbGF5VHJlZSgpCit7CisgICAg
cmV0dXJuIFRleHRUcmFja0N1ZUJveDo6Y3JlYXRlKG93bmVyRG9jdW1lbnQoKSwgdGhpcyk7Cit9
CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWU6OmRpc3BsYXlUcmVl
SW50ZXJuYWwoKQoreworICAgIGlmICghbV9kaXNwbGF5VHJlZSkKKyAgICAgICAgbV9kaXNwbGF5
VHJlZSA9IGNyZWF0ZURpc3BsYXlUcmVlKCk7CisgICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7Cit9
CisKIHZvaWQgVGV4dFRyYWNrQ3VlOjpjdWVXaWxsQ2hhbmdlKCkKIHsKICAgICBpZiAobV90cmFj
aykKQEAgLTQzNyw3ICs0NDgsNyBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0QWxpZ24oY29uc3Qg
U3RyaW5nCiAgICAgLy8gbWF0Y2ggZm9yIHRoZSBuZXcgdmFsdWUsIGlmIGFueS4gSWYgbm9uZSBv
ZiB0aGUgdmFsdWVzIG1hdGNoLCB0aGVuIHRoZSB1c2VyCiAgICAgLy8gYWdlbnQgbXVzdCBpbnN0
ZWFkIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLgogICAgIAotICAgIEFsaWdubWVudCBh
bGlnbm1lbnQgPSBtX2N1ZUFsaWdubWVudDsKKyAgICBDdWVBbGlnbm1lbnQgYWxpZ25tZW50ID0g
bV9jdWVBbGlnbm1lbnQ7CiAgICAgaWYgKHZhbHVlID09IHN0YXJ0S2V5d29yZCgpKQogICAgICAg
ICBhbGlnbm1lbnQgPSBTdGFydDsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSBtaWRkbGVLZXl3b3Jk
KCkpCkBAIC01NDQsOCArNTU1LDcgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldElzQWN0aXZlKGJv
b2wgYWN0aQogCiAgICAgaWYgKCFhY3RpdmUpIHsKICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXNw
bGF5IHRyZWUgYXMgc29vbiBhcyB0aGUgY3VlIGJlY29tZXMgaW5hY3RpdmUuCi0gICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIG1fZGlzcGxheVRyZWUtPnJlbW92ZShlYyk7CisgICAg
ICAgIGRpc3BsYXlUcmVlSW50ZXJuYWwoKS0+cmVtb3ZlKEFTU0VSVF9OT19FWENFUFRJT04pOwog
ICAgIH0KIH0KIApAQCAtNzIxLDEwICs3MzEsMTEgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnVwZGF0
ZURpc3BsYXlUcmVlKGZsbwogICAgIG1fYWxsRG9jdW1lbnROb2Rlcy0+YXBwZW5kQ2hpbGQocmVm
ZXJlbmNlVHJlZSk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tD
dWU6OmdldERpc3BsYXlUcmVlKCkKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJh
Y2tDdWU6OmdldERpc3BsYXlUcmVlKGNvbnN0IEludFNpemUmIHZpZGVvU2l6ZSkKIHsKKyAgICBS
ZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5VHJlZSA9IGRpc3BsYXlUcmVlSW50ZXJuYWwo
KTsKICAgICBpZiAoIW1fZGlzcGxheVRyZWVTaG91bGRDaGFuZ2UgfHwgIXRyYWNrKCktPmlzUmVu
ZGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CisgICAgICAgIHJldHVybiBk
aXNwbGF5VHJlZTsKIAogICAgIC8vIDEwLjEgLSAxMC4xMAogICAgIGNhbGN1bGF0ZURpc3BsYXlQ
YXJhbWV0ZXJzKCk7CkBAIC03MzIsNyArNzQzLDcgQEAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVC
b3g+IFRleHRUcmFja0N1ZQogICAgIC8vIDEwLjExLiBBcHBseSB0aGUgdGVybXMgb2YgdGhlIENT
UyBzcGVjaWZpY2F0aW9ucyB0byBub2RlcyB3aXRoaW4gdGhlCiAgICAgLy8gZm9sbG93aW5nIGNv
bnN0cmFpbnRzLCB0aHVzIG9idGFpbmluZyBhIHNldCBvZiBDU1MgYm94ZXMgcG9zaXRpb25lZAog
ICAgIC8vIHJlbGF0aXZlIHRvIGFuIGluaXRpYWwgY29udGFpbmluZyBibG9jazoKLSAgICBtX2Rp
c3BsYXlUcmVlLT5yZW1vdmVDaGlsZHJlbigpOworICAgIGRpc3BsYXlUcmVlLT5yZW1vdmVDaGls
ZHJlbigpOwogCiAgICAgLy8gVGhlIGRvY3VtZW50IHRyZWUgaXMgdGhlIHRyZWUgb2YgV2ViVlRU
IE5vZGUgT2JqZWN0cyByb290ZWQgYXQgbm9kZXMuCiAKQEAgLTc0Miw3ICs3NTMsNyBAQCBQYXNz
UmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlCiAKICAgICAvLyBOb3RlOiBUaGlz
IGlzIGNvbnRhaW5lZCBieSBkZWZhdWx0IGluIG1fYWxsRG9jdW1lbnROb2Rlcy4KICAgICBtX2Fs
bERvY3VtZW50Tm9kZXMtPnNldFBzZXVkbyhhbGxOb2Rlc1NoYWRvd1BzZXVkb0lkKCkpOwotICAg
IG1fZGlzcGxheVRyZWUtPmFwcGVuZENoaWxkKG1fYWxsRG9jdW1lbnROb2RlcywgQVNTRVJUX05P
X0VYQ0VQVElPTiwgdHJ1ZSk7CisgICAgZGlzcGxheVRyZWUtPmFwcGVuZENoaWxkKG1fYWxsRG9j
dW1lbnROb2RlcywgQVNTRVJUX05PX0VYQ0VQVElPTiwgdHJ1ZSk7CiAKICAgICAvLyBGSVhNRShC
VUcgNzk5MTYpOiBSdW5zIG9mIGNoaWxkcmVuIG9mIFdlYlZUVCBSdWJ5IE9iamVjdHMgdGhhdCBh
cmUgbm90CiAgICAgLy8gV2ViVlRUIFJ1YnkgVGV4dCBPYmplY3RzIG11c3QgYmUgd3JhcHBlZCBp
biBhbm9ueW1vdXMgYm94ZXMgd2hvc2UKQEAgLTc1NSwxOCArNzY2LDE4IEBAIFBhc3NSZWZQdHI8
VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWUKICAgICAvLyBpcyBubyBsaW5lIGJyZWFraW5n
IG9wcG9ydHVuaXR5LiAoVGh1cywgbm9ybWFsbHkgdGV4dCB3cmFwcyBhcyBuZWVkZWQsCiAgICAg
Ly8gYnV0IGlmIHRoZXJlIGlzIGEgcGFydGljdWxhcmx5IGxvbmcgd29yZCwgaXQgZG9lcyBub3Qg
b3ZlcmZsb3cgYXMgaXQKICAgICAvLyBub3JtYWxseSB3b3VsZCBpbiBDU1MsIGl0IGlzIGluc3Rl
YWQgZm9yY2libHkgd3JhcHBlZCBhdCB0aGUgYm94J3MgZWRnZS4pCi0gICAgbV9kaXNwbGF5VHJl
ZS0+YXBwbHlDU1NQcm9wZXJ0aWVzKCk7CisgICAgZGlzcGxheVRyZWUtPmFwcGx5Q1NTUHJvcGVy
dGllcyh2aWRlb1NpemUpOwogCiAgICAgbV9kaXNwbGF5VHJlZVNob3VsZENoYW5nZSA9IGZhbHNl
OwogCiAgICAgLy8gMTAuMTUuIExldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBkaXNwbGF5IHN0YXRl
IGhhdmUgdGhlIENTUyBib3hlcyBpbgogICAgIC8vIGJveGVzLgotICAgIHJldHVybiBtX2Rpc3Bs
YXlUcmVlOworICAgIHJldHVybiBkaXNwbGF5VHJlZTsKIH0KIAogdm9pZCBUZXh0VHJhY2tDdWU6
OnJlbW92ZURpc3BsYXlUcmVlKCkKIHsKLSAgICBtX2Rpc3BsYXlUcmVlLT5yZW1vdmUoQVNTRVJU
X05PX0VYQ0VQVElPTik7CisgICAgZGlzcGxheVRyZWVJbnRlcm5hbCgpLT5yZW1vdmUoQVNTRVJU
X05PX0VYQ0VQVElPTik7CiB9CiAKIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gVGV4dFRyYWNr
Q3VlOjpnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCkgY29uc3QKQEAgLTEwNjUsNiArMTA3NiwzMyBA
QCBFdmVudFRhcmdldERhdGEqIFRleHRUcmFja0N1ZTo6ZW5zdXJlRXZlCiAgICAgcmV0dXJuICZt
X2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAorYm9vbCBUZXh0VHJhY2tDdWU6Om9wZXJhdG9yPT0oY29u
c3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Cit7CisgICAgaWYgKGN1ZVR5cGUoKSAhPSBjdWUu
Y3VlVHlwZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9lbmRUaW1lICE9
IGN1ZS5lbmRUaW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zdGFydFRp
bWUgIT0gY3VlLnN0YXJ0VGltZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
Y29udGVudCAhPSBjdWUudGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1f
c2V0dGluZ3MgIT0gY3VlLmN1ZVNldHRpbmdzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9pZCAhPSBjdWUuaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICht
X3RleHRQb3NpdGlvbiAhPSBjdWUucG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX2xpbmVQb3NpdGlvbiAhPSBjdWUubGluZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKG1fY3VlU2l6ZSAhPSBjdWUuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKGFsaWduKCkgIT0gY3VlLmFsaWduKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAko
cmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tD
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTU3LDExICs1OCwxMSBAQCBwdWJsaWM6CiAgICAg
fQogCiAgICAgVGV4dFRyYWNrQ3VlKiBnZXRDdWUoKSBjb25zdDsKLSAgICB2b2lkIGFwcGx5Q1NT
UHJvcGVydGllcygpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUNTU1Byb3BlcnRpZXMoY29uc3Qg
SW50U2l6ZSYgdmlkZW9TaXplKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJpbmcmIHRl
eHRUcmFja0N1ZUJveFNoYWRvd1BzZXVkb0lkKCk7CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAg
ICAgVGV4dFRyYWNrQ3VlQm94KERvY3VtZW50KiwgVGV4dFRyYWNrQ3VlKik7CiAKICAgICB2aXJ0
dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSopIE9WRVJSSURFOwpAQCAtMTUxLDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQWN0
aXZlKCk7CiAgICAgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsKIAotICAgIFBhc3NSZWZQdHI8VGV4
dFRyYWNrQ3VlQm94PiBnZXREaXNwbGF5VHJlZSgpOworICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNr
Q3VlQm94PiBnZXREaXNwbGF5VHJlZShjb25zdCBJbnRTaXplJiB2aWRlb1NpemUpOwogICAgIHZv
aWQgdXBkYXRlRGlzcGxheVRyZWUoZmxvYXQpOwogICAgIHZvaWQgcmVtb3ZlRGlzcGxheVRyZWUo
KTsKICAgICB2b2lkIG1hcmtGdXR1cmVBbmRQYXN0Tm9kZXMoQ29udGFpbmVyTm9kZSosIGRvdWJs
ZSwgZG91YmxlKTsKQEAgLTE3Myw2ICsxNzQsMjUgQEAgcHVibGljOgogICAgIH07CiAgICAgV3Jp
dGluZ0RpcmVjdGlvbiBnZXRXcml0aW5nRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV93cml0
aW5nRGlyZWN0aW9uOyB9CiAKKyAgICBlbnVtIEN1ZUFsaWdubWVudCB7CisgICAgICAgIFN0YXJ0
LAorICAgICAgICBNaWRkbGUsCisgICAgICAgIEVuZAorICAgIH07CisgICAgQ3VlQWxpZ25tZW50
IGdldEFsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VlQWxpZ25tZW50OyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IGN1ZSk7CisgICAgfQorICAgIAorICAgIGVu
dW0gQ3VlVHlwZSB7CisgICAgICAgIEdlbmVyaWMsCisgICAgICAgIFdlYlZUVAorICAgIH07Cisg
ICAgdmlydHVhbCBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBXZWJWVFQ7IH0KKwog
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW50ZXIpOwogICAgIERFRklORV9B
VFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXhpdCk7CiAKQEAgLTE4Myw5ICsyMDMsMTQgQEAgcHJv
dGVjdGVkOgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdldERhdGEoKTsK
ICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CiAK
LXByaXZhdGU6CiAgICAgVGV4dFRyYWNrQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBkb3Vi
bGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAKKyAgICBEb2N1
bWVudCogb3duZXJEb2N1bWVudCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KTsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHRU
cmFja0N1ZUJveD4gY3JlYXRlRGlzcGxheVRyZWUoKTsKKyAgICBQYXNzUmVmUHRyPFRleHRUcmFj
a0N1ZUJveD4gZGlzcGxheVRyZWVJbnRlcm5hbCgpOworCitwcml2YXRlOgogICAgIHN0ZDo6cGFp
cjxkb3VibGUsIGRvdWJsZT4gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpIGNvbnN0OwogICAgIHZv
aWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKIApAQCAtMjEzLDggKzIzOCw3IEBAIHBy
aXZhdGU6CiAKICAgICBXcml0aW5nRGlyZWN0aW9uIG1fd3JpdGluZ0RpcmVjdGlvbjsKIAotICAg
IGVudW0gQWxpZ25tZW50IHsgU3RhcnQsIE1pZGRsZSwgRW5kIH07Ci0gICAgQWxpZ25tZW50IG1f
Y3VlQWxpZ25tZW50OworICAgIEN1ZUFsaWdubWVudCBtX2N1ZUFsaWdubWVudDsKIAogICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX3dlYlZUVE5vZGVUcmVlOwogICAgIFRleHRUcmFjayog
bV90cmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2Vu
ZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0sp
CisKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisKKyNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkhU
TUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2lu
Y2x1ZGUgIlJlbmRlclRleHRUcmFja0N1ZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudCA6IHB1YmxpYyBUZXh0VHJh
Y2tDdWVCb3ggeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUdl
bmVyaWNCb3hFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUZXh0VHJhY2tDdWVH
ZW5lcmljKiBjdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFj
a0N1ZUdlbmVyaWNCb3hFbGVtZW50KGRvY3VtZW50LCBjdWUpKTsKKyAgICB9CisgICAgCisgICAg
dmlydHVhbCB2b2lkIGFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJikgT1ZFUlJJREU7
CisgICAgCitwcml2YXRlOgorICAgIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50KERvY3Vt
ZW50KiwgVGV4dFRyYWNrQ3VlKik7Cit9OworCitUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVu
dDo6VGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBUZXh0
VHJhY2tDdWUqIGN1ZSkKKyAgICA6IFRleHRUcmFja0N1ZUJveChkb2N1bWVudCwgY3VlKQorewor
fQorCit2b2lkIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjphcHBseUNTU1Byb3BlcnRp
ZXMoY29uc3QgSW50U2l6ZSYgdmlkZW9TaXplKQoreworICAgIHNldElubGluZVN0eWxlUHJvcGVy
dHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CisgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZVdlYmtpdFBsYWlu
dGV4dCk7CisgICAgCisgICAgVGV4dFRyYWNrQ3VlR2VuZXJpYyogY3VlID0gc3RhdGljX2Nhc3Q8
VGV4dFRyYWNrQ3VlR2VuZXJpYyo+KGdldEN1ZSgpKTsKKworICAgIHN0ZDo6cGFpcjxmbG9hdCwg
ZmxvYXQ+IHBvc2l0aW9uID0gY3VlLT5nZXRDU1NQb3NpdGlvbigpOworICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBwb3NpdGlvbi5maXJzdCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1By
b3BlcnR5VG9wLCBwb3NpdGlvbi5zZWNvbmQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSk7CisKKyAgICBkb3VibGUgc2l6ZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oY3VlLT5nZXRD
U1NTaXplKCkpOworICAgIGlmIChjdWUtPmdldFdyaXRpbmdEaXJlY3Rpb24oKSA9PSBUZXh0VHJh
Y2tDdWU6Okhvcml6b250YWwpIHsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVMdHIpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVBy
b3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHNpemUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWln
aHQsIENTU1ZhbHVlQXV0byk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBDU1NWYWx1ZUF1dG8pOworICAgICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBzaXplLCAgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICB9CisKKyAgICBpZiAoY3VlLT5iYXNlRm9udFNpemVS
ZWxhdGl2ZVRvVmlkZW9IZWlnaHQoKSkgeworICAgICAgICBkb3VibGUgZm9udFNpemUgPSB2aWRl
b1NpemUuaGVpZ2h0KCkgKiBjdWUtPmJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgp
IC8gMTAwOworICAgICAgICBpZiAoY3VlLT5mb250U2l6ZU11bHRpcGxpZXIoKSkKKyAgICAgICAg
ICAgIGZvbnRTaXplICo9IGN1ZS0+Zm9udFNpemVNdWx0aXBsaWVyKCkgLyAxMDA7CisgICAgICAg
IHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgU3RyaW5nOjpudW1i
ZXIoZm9udFNpemUpICsgInB4Iik7CisgICAgfQorCisgICAgaWYgKGN1ZS0+Z2V0QWxpZ25tZW50
KCkgPT0gVGV4dFRyYWNrQ3VlOjpTdGFydCkKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRleHRBbGlnbiwgQ1NTVmFsdWVTdGFydCk7CisgICAgZWxzZSBpZiAoY3Vl
LT5nZXRBbGlnbm1lbnQoKSA9PSBUZXh0VHJhY2tDdWU6OkVuZCkKKyAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbiwgQ1NTVmFsdWVFbmQpOworICAgIGVs
c2UKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbiwg
Q1NTVmFsdWVDZW50ZXIpOworCisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0
eVdlYmtpdFdyaXRpbmdNb2RlLCBjdWUtPmdldENTU1dyaXRpbmdNb2RlKCksIGZhbHNlKTsKKyAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NTVmFsdWVQ
cmVXcmFwKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V29yZEJyZWFr
LCBDU1NWYWx1ZU5vcm1hbCk7Cit9CisKK1RleHRUcmFja0N1ZUdlbmVyaWM6OlRleHRUcmFja0N1
ZUdlbmVyaWMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgZG91YmxlIHN0YXJ0LCBk
b3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCisgICAgOlRleHRUcmFja0N1ZShjb250
ZXh0LCBzdGFydCwgZW5kLCBjb250ZW50KQoreworfQorCitQYXNzUmVmUHRyPFRleHRUcmFja0N1
ZUJveD4gVGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3JlYXRlRGlzcGxheVRyZWUoKQoreworICAgIHJl
dHVybiBUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudDo6Y3JlYXRlKG93bmVyRG9jdW1lbnQo
KSwgdGhpcyk7Cit9CisKK2Jvb2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6b3BlcmF0b3I9PShjb25z
dCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QKK3sKKyAgICBpZiAoY3VlLmN1ZVR5cGUoKSAhPSBU
ZXh0VHJhY2tDdWU6OkdlbmVyaWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0
IFRleHRUcmFja0N1ZUdlbmVyaWMqIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4dFRyYWNr
Q3VlR2VuZXJpYyo+KCZjdWUpOworCisgICAgaWYgKG1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1Zp
ZGVvSGVpZ2h0ICE9IG90aGVyLT5iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZvbnRTaXplTXVsdGlwbGllciAhPSBv
dGhlci0+Zm9udFNpemVNdWx0aXBsaWVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAobV9mb250TmFtZSAhPSBvdGhlci0+Zm9udE5hbWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIFRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PShjdWUpOworfQorICAgIAor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dFRyYWNrQ3VlR2VuZXJpY19o
CisjZGVmaW5lIFRleHRUcmFja0N1ZUdlbmVyaWNfaAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNL
KQorCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIK
KyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdlbmVyaWNDdWVEYXRhOworCitjbGFz
cyBUZXh0VHJhY2tDdWVHZW5lcmljIDogcHVibGljIFRleHRUcmFja0N1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0
VHJhY2tDdWVHZW5lcmljKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpKTsKKyAgICB9Cisg
ICAgCisgICAgdmlydHVhbCB+VGV4dFRyYWNrQ3VlR2VuZXJpYygpIHsgfQorCisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gY3JlYXRlRGlzcGxheVRyZWUoKSBPVkVSUklE
RTsKKworICAgIGRvdWJsZSBiYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodDsgfQorICAgIHZv
aWQgc2V0QmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KGRvdWJsZSBzaXplKSB7IG1f
YmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0ID0gc2l6ZTsgfQorCisgICAgZG91Ymxl
IGZvbnRTaXplTXVsdGlwbGllcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNpemVNdWx0aXBsaWVy
OyB9CisgICAgdm9pZCBzZXRGb250U2l6ZU11bHRpcGxpZXIoZG91YmxlIHNpemUpIHsgbV9mb250
U2l6ZU11bHRpcGxpZXIgPSBzaXplOyB9CisKKyAgICBTdHJpbmcgZm9udE5hbWUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnROYW1lOyB9CisgICAgdm9pZCBzZXRGb250TmFtZShTdHJpbmcgbmFtZSkg
eyBtX2ZvbnROYW1lID0gbmFtZTsgfQorCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29u
c3QgVGV4dFRyYWNrQ3VlJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yIT0oY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0IE9WRVJSSURFCisgICAgeworICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBjdWUpOworICAgIH0KKworICAgIHZpcnR1YWwgVGV4dFRy
YWNrQ3VlOjpDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBUZXh0VHJh
Y2tDdWU6OkdlbmVyaWM7IH0KKworcHJpdmF0ZToKKyAgICBUZXh0VHJhY2tDdWVHZW5lcmljKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0
cmluZyYpOworICAgIAorICAgIGRvdWJsZSBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hl
aWdodDsKKyAgICBkb3VibGUgbV9mb250U2l6ZU11bHRpcGxpZXI7CisgICAgU3RyaW5nIG1fZm9u
dE5hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2
YXRlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oCShyZXZpc2lvbiAxMzk4OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCw0NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CiAKK3N0cnVjdCBHZW5lcmljQ3VlRGF0
YSB7CisgICAgR2VuZXJpY0N1ZURhdGEoKQorICAgICAgICA6IHN0YXJ0VGltZSgwKQorICAgICAg
ICAsIGVuZFRpbWUoMCkKKyAgICAgICAgLCBsaW5lKC0xKQorICAgICAgICAsIHBvc2l0aW9uKC0x
KQorICAgICAgICAsIHNpemUoLTEpCisgICAgICAgICwgYWxpZ24oTm9uZSkKKyAgICAgICAgLCBi
YXNlRm9udFNpemUoMCkKKyAgICAgICAgLCByZWxhdGl2ZUZvbnRTaXplKDApCisgICAgeworICAg
IH0KKworICAgIGVudW0gYWxpZ25tZW50IHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgU3RhcnQs
CisgICAgICAgIE1pZGRsZSwKKyAgICAgICAgRW5kCisgICAgfTsKKworICAgIGRvdWJsZSBzdGFy
dFRpbWU7CisgICAgZG91YmxlIGVuZFRpbWU7CisgICAgU3RyaW5nIGlkOworICAgIFN0cmluZyBj
b250ZW50OworICAgIGRvdWJsZSBsaW5lOworICAgIGRvdWJsZSBwb3NpdGlvbjsKKyAgICBkb3Vi
bGUgc2l6ZTsKKyAgICBhbGlnbm1lbnQgYWxpZ247CisgICAgU3RyaW5nIGZvbnROYW1lOworICAg
IGRvdWJsZSBiYXNlRm9udFNpemU7CisgICAgZG91YmxlIHJlbGF0aXZlRm9udFNpemU7Cit9Owor
CiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50KCkgeyB9CiAgICAgCi0gICAgdmlydHVh
bCB2b2lkIGFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlIC8qc3RhcnQqLywg
ZG91YmxlIC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCovLCBjb25zdCBTdHJpbmcmIC8qY29u
dGVudCovLCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBoYXNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAvKnN0YXJ0Ki8sIGRvdWJs
ZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQqLywgY29uc3QgU3RyaW5nJiAvKmNvbnRlbnQq
LywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
V2ViVlRUQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUgLypzdGFydCovLCBkb3Vi
bGUgLyplbmQqLywgY29uc3QgU3RyaW5nJiAvKmlkKi8sIGNvbnN0IFN0cmluZyYgLypjb250ZW50
Ki8sIGNvbnN0IFN0cmluZyYgLypzZXR0aW5ncyovKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGFk
ZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGNvbnN0IEdlbmVyaWNDdWVEYXRh
JikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVB
VkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkocmV2aXNpb24gMTM5ODkw
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAK
ICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgiCiAKKyNpbmNsdWRlICJJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1
ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oIgogI2luY2x1ZGUgIlNvZnRMaW5r
aW5nLmgiCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIFNPRlRfTElO
S19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQogCkBAIC01Miw2ICs1NCw5IEBAIFNPRlRf
TElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0MKIFNPRlRfTElOS19QT0lOVEVSX09Q
VElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0aWNhbExheW91dCwg
Q0ZTdHJpbmdSZWYpCiBTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDTVRl
eHRWZXJ0aWNhbExheW91dF9MZWZ0VG9SaWdodCwgQ0ZTdHJpbmdSZWYpCiBTT0ZUX0xJTktfUE9J
TlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDTVRleHRWZXJ0aWNhbExheW91dF9SaWdodFRvTGVm
dCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtD
TVRleHRNYXJrdXBBdHRyaWJ1dGVfQmFzZUZvbnRTaXplUGVyY2VudGFnZVJlbGF0aXZlVG9WaWRl
b0hlaWdodCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVk
aWEsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6ZSwgQ0ZTdHJpbmdSZWYp
CitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDTVRleHRNYXJrdXBBdHRy
aWJ1dGVfRm9udEZhbWlseU5hbWUsIENGU3RyaW5nUmVmKQogCiAjZGVmaW5lIGtDTVRleHRNYXJr
dXBBdHRyaWJ1dGVfQWxpZ25tZW50IGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfQWxpZ25tZW50
KCkKICNkZWZpbmUga0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfU3RhcnQgZ2V0a0NNVGV4dE1h
cmt1cEFsaWdubWVudFR5cGVfU3RhcnQoKQpAQCAtNjYsNiArNzEsOSBAQCBTT0ZUX0xJTktfUE9J
TlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDCiAjZGVmaW5lIGtDTVRleHRNYXJrdXBBdHRyaWJ1
dGVfVmVydGljYWxMYXlvdXQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0aWNhbExheW91
dCgpCiAjZGVmaW5lIGtDTVRleHRWZXJ0aWNhbExheW91dF9MZWZ0VG9SaWdodCBnZXRrQ01UZXh0
VmVydGljYWxMYXlvdXRfTGVmdFRvUmlnaHQoKQogI2RlZmluZSBrQ01UZXh0VmVydGljYWxMYXlv
dXRfUmlnaHRUb0xlZnQgZ2V0a0NNVGV4dFZlcnRpY2FsTGF5b3V0X1JpZ2h0VG9MZWZ0KCkKKyNk
ZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdlUmVsYXRp
dmVUb1ZpZGVvSGVpZ2h0IGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfQmFzZUZvbnRTaXplUGVy
Y2VudGFnZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgpCisjZGVmaW5lIGtDTVRleHRNYXJrdXBBdHRy
aWJ1dGVfUmVsYXRpdmVGb250U2l6ZSBnZXRrQ01UZXh0TWFya3VwQXR0cmlidXRlX1JlbGF0aXZl
Rm9udFNpemUoKQorI2RlZmluZSBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0ZvbnRGYW1pbHlOYW1l
IGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUoKQogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogCkBAIC04NCw3ICs5Miw3IEBAIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6
On5JbmJhbmRUZXh0VHIKICAgICBkaXNjb25uZWN0KCk7CiB9CiAKLXZvaWQgSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZUF0dHJpYnV0ZXMoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVm
IGF0dHJpYnV0ZWRTdHJpbmcsIFN0cmluZ0J1aWxkZXImIGNvbnRlbnQsIFN0cmluZ0J1aWxkZXIm
IHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0
cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZywgR2VuZXJpY0N1
ZURhdGEqIGN1ZURhdGEpCiB7CiAgICAgLy8gU29tZSBvZiB0aGUgYXR0cmlidXRlcyB3ZSB0cmFu
c2xhdGUgaW50byBwZXItY3VlIFdlYlZUVCBzZXR0aW5ncyBhcmUgYXJlIHJlcGVhdGVkIG9uIGVh
Y2ggcGFydCBvZiBhbiBhdHRyaWJ1dGVkIHN0cmluZyBzbyBvbmx5CiAgICAgLy8gcHJvY2VzcyB0
aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWFjaC4KQEAgLTkzLDEwICsxMDEsMTIgQEAgdm9pZCBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICBQb3NpdGlvbiA9IDEgPDwg
MSwKICAgICAgICAgU2l6ZSA9IDEgPDwgMiwKICAgICAgICAgVmVydGljYWwgPSAxIDw8IDMsCi0g
ICAgICAgIEFsaWduID0gMSA8PCA0CisgICAgICAgIEFsaWduID0gMSA8PCA0LAorICAgICAgICBG
b250TmFtZSA9IDEgPDwgNQogICAgIH07CiAgICAgdW5zaWduZWQgcHJvY2Vzc2VkID0gMDsKIAor
ICAgIFN0cmluZ0J1aWxkZXIgY29udGVudDsKICAgICBTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1Zh
bHVlID0gQ0ZBdHRyaWJ1dGVkU3RyaW5nR2V0U3RyaW5nKGF0dHJpYnV0ZWRTdHJpbmcpOwogICAg
IENGSW5kZXggbGVuZ3RoID0gYXR0cmlidXRlZFN0cmluZ1ZhbHVlLmxlbmd0aCgpOwogICAgIGlm
ICghbGVuZ3RoKQpAQCAtMTEwLDYgKzEyMCw3IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRjo6cHJvY2Vzc0MKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFN0cmluZ0J1
aWxkZXIgdGFnU3RhcnQ7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlU3RyaW5nOwogICAgICAg
ICBTdHJpbmcgdGFnRW5kOwogICAgICAgICBDRkluZGV4IGF0dHJpYnV0ZUNvdW50ID0gQ0ZEaWN0
aW9uYXJ5R2V0Q291bnQoYXR0cmlidXRlcyk7CiAgICAgICAgIFZlY3Rvcjxjb25zdCB2b2lkKj4g
a2V5cyhhdHRyaWJ1dGVDb3VudCk7CkBAIC0xMjMsNyArMTM0LDcgQEAgdm9pZCBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAg
ICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0
ZV9BbGlnbm1lbnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7Ci0gICAgICAgICAgICAgICAg
Q0ZTdHJpbmdSZWYgdmFsdWVTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUp
OworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+
KHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWVTdHJpbmcpICE9
IENGU3RyaW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZhbHVlU3RyaW5nKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKHByb2Nl
c3NlZCAmIEFsaWduKQpAQCAtMTMxLDExICsxNDIsMTEgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB8PSBBbGlnbjsK
IAogICAgICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUodmFsdWVTdHJpbmcsIGtDTVRl
eHRNYXJrdXBBbGlnbm1lbnRUeXBlX1N0YXJ0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAg
ICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjpzdGFydCAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgY3VlRGF0YS0+YWxpZ24gPSBHZW5lcmljQ3VlRGF0YTo6U3RhcnQ7CiAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZTdHJpbmdDb21wYXJlKHZhbHVlU3RyaW5nLCBrQ01U
ZXh0TWFya3VwQWxpZ25tZW50VHlwZV9NaWRkbGUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQot
ICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoImFsaWduOm1pZGRsZSAiKTsKKyAg
ICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+YWxpZ24gPSBHZW5lcmljQ3VlRGF0YTo6TWlkZGxl
OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywg
a0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfRW5kLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykK
LSAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjplbmQgIik7CisgICAg
ICAgICAgICAgICAgICAgIGN1ZURhdGEtPmFsaWduID0gR2VuZXJpY0N1ZURhdGE6OkVuZDsKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogCkBAIC0xNzAsOSArMTgxLDYgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
Ojpwcm9jZXNzQwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21w
YXJlKGtleSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9PcnRob2dvbmFsTGluZVBvc2l0aW9uUGVy
Y2VudGFnZVJlbGF0aXZlVG9Xcml0aW5nRGlyZWN0aW9uLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxU
bykgewotICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgbGluZSBwb3NpdGlvbiBpZiB0aGUg
YXR0cmlidXRlcyBhbHNvIHNwZWNpZnkgInNpemUiIHNvIHdlIGtlZXAgV2ViVlRUJ3MgZGVmYXVs
dCBsaW5lIGxvZ2ljCi0gICAgICAgICAgICAgICAgaWYgKENGRGljdGlvbmFyeUdldFZhbHVlKGF0
dHJpYnV0ZXMsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfV3JpdGluZ0RpcmVjdGlvblNpemVQZXJj
ZW50YWdlKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRk51bWJlckdldFR5cGVJRCgpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkICYgTGlu
ZSkKQEAgLTE4MCw5ICsxODgsNyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnBy
b2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IExpbmU7CiAKICAgICAgICAgICAg
ICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPih2
YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHBvc2l0aW9uOwotICAgICAgICAgICAgICAg
IENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmcG9z
aXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgi
bGluZTolbGQlJSAiLCBscmludChwb3NpdGlvbikpKTsKKyAgICAgICAgICAgICAgICBDRk51bWJl
ckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJmN1ZURhdGEtPmxp
bmUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0xOTQs
OSArMjAwLDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAg
ICAgICAgICAgICAgIHByb2Nlc3NlZCB8PSBQb3NpdGlvbjsKIAogICAgICAgICAgICAgICAgIENG
TnVtYmVyUmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsK
LSAgICAgICAgICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgICAgICAgICAgQ0ZOdW1i
ZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZwb3NpdGlvbik7
Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJwb3NpdGlv
bjolbGQlJSAiLCBscmludChwb3NpdGlvbikpKTsKKyAgICAgICAgICAgICAgICBDRk51bWJlckdl
dFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJmN1ZURhdGEtPnBvc2l0
aW9uKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtMjA4
LDE2ICsyMTIsNjAgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwog
ICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB8PSBTaXplOwogCiAgICAgICAgICAgICAgICAgQ0ZO
dW1iZXJSZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4odmFsdWUpOwot
ICAgICAgICAgICAgICAgIGRvdWJsZSBwb3NpdGlvbjsKLSAgICAgICAgICAgICAgICBDRk51bWJl
ckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnBvc2l0aW9uKTsK
LSAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInNpemU6JWxk
JSUgIiwgbHJpbnQocG9zaXRpb24pKSk7CisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1
ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZjdWVEYXRhLT5zaXplKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfVmVydGljYWxMYXlv
dXQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7CisgICAgICAgICAgICAgICAgdmFsdWVTdHJp
bmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUpOworICAgICAgICAgICAgICAgIGlm
IChDRkdldFR5cGVJRCh2YWx1ZVN0cmluZykgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSB8fCAhQ0ZT
dHJpbmdHZXRMZW5ndGgodmFsdWVTdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJl
KHZhbHVlU3RyaW5nLCBrQ01UZXh0VmVydGljYWxMYXlvdXRfTGVmdFRvUmlnaHQsIDApID09IGtD
RkNvbXBhcmVFcXVhbFRvKQorICAgICAgICAgICAgICAgICAgICB0YWdTdGFydC5hcHBlbmQobGVm
dFRvUmlnaHRNYXJrKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChDRlN0cmluZ0NvbXBhcmUo
dmFsdWVTdHJpbmcsIGtDTVRleHRWZXJ0aWNhbExheW91dF9SaWdodFRvTGVmdCwgMCkgPT0ga0NG
Q29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgICAgICAgICAgIHRhZ1N0YXJ0LmFwcGVuZChyaWdo
dFRvTGVmdE1hcmspOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwga0NNVGV4
dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdlUmVsYXRpdmVUb1ZpZGVvSGVp
Z2h0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgICAgIGlmIChDRkdl
dFR5cGVJRCh2YWx1ZSkgIT0gQ0ZOdW1iZXJHZXRUeXBlSUQoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJS
ZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4odmFsdWUpOworICAgICAg
ICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJlckZsb2F0NjRU
eXBlLCAmY3VlRGF0YS0+YmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29t
cGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6ZSwgMCkgPT0g
a0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFs
dWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVyUmVmIHZhbHVlTnVt
YmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBD
Rk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJmN1ZURh
dGEtPnJlbGF0aXZlRm9udFNpemUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwga0NNVGV4dE1h
cmt1cEF0dHJpYnV0ZV9Gb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsK
KyAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPih2
YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlU3RyaW5nKSAhPSBD
RlN0cmluZ0dldFR5cGVJRCgpIHx8ICFDRlN0cmluZ0dldExlbmd0aCh2YWx1ZVN0cmluZykpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChwcm9jZXNz
ZWQgJiBGb250TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgcHJvY2Vzc2VkIHw9IEZvbnROYW1lOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGN1ZURhdGEtPmZvbnROYW1lID0gdmFsdWVTdHJpbmc7CiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBjb250ZW50LmFw
cGVuZCh0YWdTdGFydCk7CiAgICAgICAgIGNvbnRlbnQuYXBwZW5kKGF0dHJpYnV0ZWRTdHJpbmdW
YWx1ZS5zdWJzdHJpbmcoZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24sIGVmZmVjdGl2ZVJhbmdlLmxl
bmd0aCkpOwogICAgICAgICBjb250ZW50LmFwcGVuZCh0YWdFbmQpOwogICAgIH0KKworICAgIGlm
IChjb250ZW50Lmxlbmd0aCgpKQorICAgICAgICBjdWVEYXRhLT5jb250ZW50ID0gY29udGVudC50
b1N0cmluZygpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3ND
dWUoQ0ZBcnJheVJlZiBhdHRyaWJ1dGVkU3RyaW5ncywgZG91YmxlIHRpbWUpCkBAIC0yMjgsMjEg
KzI3Niw0NiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAg
aWYgKG1faGF2ZVBhcnRpYWxDdWUpIHsKICAgICAgICAgLy8gQ3VlcyBkbyBub3QgaGF2ZSBhbiBl
eHBsaWNpdCBkdXJhdGlvbiwgdGhleSBhcmUgZGlzcGxheWVkIHVudGlsIHRoZSBuZXh0ICJjdWUi
ICh3aGljaCBtaWdodCBiZSBlbXB0eSkgaXMgZW1pdHRlZC4KICAgICAgICAgbV9jdXJyZW50Q3Vl
RW5kVGltZSA9IHRpbWU7Ci0gICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgc2V0
dGluZ3M9XCIlc1wiLCBjb250ZW50PVwiJXNcIiBcbiIsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fY3VycmVudEN1ZUNvbnRlbnQu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPmZsdXNoQ3VycmVu
dEN1ZSh0aGlzKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Q3VlRW5kVGltZSA+PSBtX2N1cnJl
bnRDdWVTdGFydFRpbWUpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
dWVzLnNpemUoKTsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBHZW5lcmljQ3VlRGF0YSogY3Vl
RGF0YSA9IG1fY3Vlc1tpXTsKKworICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0lLjJmLCBl
bmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAorICAgICAgICAgICAgICAgICAgICBtX2N1cnJl
bnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIGN1ZURhdGEtPmNvbnRlbnQudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCFjdWVE
YXRhLT5jb250ZW50Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjdWVEYXRhLT5zdGFydFRpbWUgPSBtX2N1
cnJlbnRDdWVTdGFydFRpbWU7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+ZW5kVGltZSA9IG1f
Y3VycmVudEN1ZUVuZFRpbWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8g
QVZGb3VuZGF0aW9uIGN1ZSAicG9zaXRpb24iIGlzIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHRleHQg
c28gYWRqdXN0IHJlbGF0aXZlIHRvIHRoZSBlZGdlIGJlY2F1c2Ugd2Ugd2lsbCB1c2UgaXQgdG8K
KyAgICAgICAgICAgICAgICAvLyBzZXQgQ1NTICJsZWZ0Ii4KKyAgICAgICAgICAgICAgICBpZiAo
Y3VlRGF0YS0+cG9zaXRpb24gPj0gMCAmJiBjdWVEYXRhLT5zaXplID4gMCkKKyAgICAgICAgICAg
ICAgICAgICAgY3VlRGF0YS0+cG9zaXRpb24gLT0gY3VlRGF0YS0+c2l6ZSAvIDI7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9wbGF5ZXItPmFkZEdlbmVyaWNDdWUodGhpcywg
KmN1ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIExP
RyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgbmVnYXRpdmUg
bGVuZ3RoIGN1ZShzKSBpZ25vcmVkOiBzdGFydD0lLjJmLCBlbmQ9JS4yZlxuIiwgbV9jdXJyZW50
Q3VlU3RhcnRUaW1lLCBtX2N1cnJlbnRDdWVFbmRUaW1lKTsKKwogICAgICAgICByZXNldEN1ZVZh
bHVlcygpOwogICAgIH0KIAogICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0
cmlidXRlZFN0cmluZ3MpOworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybjsKKwogICAg
IGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgQ0ZBdHRyaWJ1
dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRkF0dHJpYnV0ZWRT
dHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0cmlidXRlZFN0cmluZ3MsIGkpKTsK
IAogICAgICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcgfHwgIUNGQXR0cmlidXRlZFN0cmluZ0dl
dExlbmd0aChhdHRyaWJ1dGVkU3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZWRTdHJpbmcsIG1fY3VycmVudEN1ZUNv
bnRlbnQsIG1fY3VycmVudEN1ZVNldHRpbmdzKTsKKyAgICAgICAgbV9jdWVzLmFwcGVuZChuZXcg
R2VuZXJpY0N1ZURhdGEpOworICAgICAgICBwcm9jZXNzQ3VlQXR0cmlidXRlcyhhdHRyaWJ1dGVk
U3RyaW5nLCBtX2N1ZXNbaV0pOwogICAgICAgICBtX2N1cnJlbnRDdWVTdGFydFRpbWUgPSB0aW1l
OwogICAgICAgICBtX2hhdmVQYXJ0aWFsQ3VlID0gdHJ1ZTsKICAgICB9CkBAIC0yNTYsMTcgKzMy
OSwxMyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OmRpc2Nvbm5lCiAKIHZvaWQg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWVWYWx1ZXMoKQogewotICAgIGlmICht
X2hhdmVQYXJ0aWFsQ3VlICYmICFtX2N1cnJlbnRDdWVFbmRUaW1lKSB7Ci0gICAgICAgIExPRyhN
ZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFsdWVzIGZsdXNoaW5n
IGRhdGEgZm9yIGN1ZTogc3RhcnQ9JS4yZiwgZW5kPSUuMmYsIHNldHRpbmdzPVwiJXNcIiwgY29u
dGVudD1cIiVzXCIgXG4iLAotICAgICAgICAgICAgbV9jdXJyZW50Q3VlU3RhcnRUaW1lLCBtX2N1
cnJlbnRDdWVFbmRUaW1lLCBtX2N1cnJlbnRDdWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5k
YXRhKCksIG1fY3VycmVudEN1ZUNvbnRlbnQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICB9CisgICAgaWYgKG1faGF2ZVBhcnRpYWxDdWUgJiYgIW1fY3VycmVudEN1ZUVuZFRpbWUpCisg
ICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFs
dWVzIGZsdXNoaW5nIGRhdGEgZm9yIGN1ZXM6IHN0YXJ0PSUuMmZcbiIsIG1fY3VycmVudEN1ZVN0
YXJ0VGltZSk7CiAKKyAgICBtX2N1ZXMucmVzaXplKDApOwogICAgIG1faGF2ZVBhcnRpYWxDdWUg
PSBmYWxzZTsKLSAgICBtX2N1cnJlbnRDdWVJZCA9IFN0cmluZygpOwogICAgIG1fY3VycmVudEN1
ZVN0YXJ0VGltZSA9IDA7CiAgICAgbV9jdXJyZW50Q3VlRW5kVGltZSA9IDA7Ci0gICAgbV9jdXJy
ZW50Q3VlU2V0dGluZ3MuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRDdWVDb250ZW50LmNsZWFyKCk7
CiB9CiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6c2V0TW9kZShJbmJhbmRUZXh0
VHJhY2tQcml2YXRlOjpNb2RlIG5ld01vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDIwICszNSwxMiBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb247CitzdHJ1Y3QgR2Vu
ZXJpY0N1ZURhdGE7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgOiBwdWJsaWMg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgfkluYmFuZFRleHRUcmFja1By
aXZhdGVBVkYoKTsKLQotICAgIFN0cmluZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1
ZUlkOyB9Ci0gICAgZG91YmxlIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q3VlU3Rh
cnRUaW1lOyB9Ci0gICAgZG91YmxlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1ZUVu
ZFRpbWU7IH0KLSAgICBTdHJpbmcgc2V0dGluZ3MoKSB7IHJldHVybiBtX2N1cnJlbnRDdWVTZXR0
aW5ncy50b1N0cmluZygpOyB9Ci0gICAgU3RyaW5nIGNvbnRlbnQoKSB7IHJldHVybiBtX2N1cnJl
bnRDdWVDb250ZW50LnRvU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgcHJvY2Vzc0N1ZShDRkFycmF5
UmVmLCBkb3VibGUpOwotCi0gICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOworICAgIH5JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TW9kZShJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlOjpNb2RlKSBPVkVSUklERTsKIApAQCAtNjAsMTYgKzUyLDE4IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0JlZW5SZXBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQmVl
blJlcG9ydGVkOyB9CiAgICAgdm9pZCBzZXRIYXNCZWVuUmVwb3J0ZWQoYm9vbCByZXBvcnRlZCkg
eyBtX2hhc0JlZW5SZXBvcnRlZCA9IHJlcG9ydGVkOyB9CiAKKyAgICB2b2lkIHByb2Nlc3NDdWUo
Q0ZBcnJheVJlZiwgZG91YmxlKTsKKyAgICB2b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CisKIHByb3Rl
Y3RlZDoKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbiopOwogCi0gICAgdm9pZCBwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0
ZWRTdHJpbmdSZWYsIFN0cmluZ0J1aWxkZXImIGNvbnRlbnQsIFN0cmluZ0J1aWxkZXImIHNldHRp
bmdzKTsKKyAgICB2b2lkIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1Jl
ZiwgR2VuZXJpY0N1ZURhdGEqKTsKIAotICAgIFN0cmluZyBtX2N1cnJlbnRDdWVJZDsKICAgICBk
b3VibGUgbV9jdXJyZW50Q3VlU3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2N1cnJlbnRDdWVFbmRU
aW1lOwotICAgIFN0cmluZ0J1aWxkZXIgbV9jdXJyZW50Q3VlU2V0dGluZ3M7Ci0gICAgU3RyaW5n
QnVpbGRlciBtX2N1cnJlbnRDdWVDb250ZW50OworCisgICAgVmVjdG9yPEdlbmVyaWNDdWVEYXRh
Kj4gbV9jdWVzOwogCiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKiBtX3BsYXll
cjsKICAgICBpbnQgbV9pbmRleDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9N
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxMzk4OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDYgKzU4MiwxMSBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVkKCVwKSAtIGZp
bmlzaGVkID0gJWQiLCB0aGlzLCBmaW5pc2hlZCk7CiAgICAgVU5VU0VEX1BBUkFNKGZpbmlzaGVk
KTsKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkKKyAgICBpZiAo
Y3VycmVudFRyYWNrKCkpCisgICAgICAgIGN1cnJlbnRUcmFjaygpLT5yZXNldEN1ZVZhbHVlcygp
OworI2VuZGlmCisKICAgICBtX3NlZWtUbyA9IE1lZGlhUGxheWVyOjppbnZhbGlkVGltZSgpOwog
ICAgIHVwZGF0ZVN0YXRlcygpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwpAQCAtODEx
LDE5ICs4MTYsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmRpcwog
fQogCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQT1JUKQotdm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmZsdXNoQ3VycmVudEN1ZShJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGKiB0cmFjaykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjphZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqIHRyYWNrLCBjb25zdCBH
ZW5lcmljQ3VlRGF0YSYgY3VlRGF0YSkKIHsKICAgICBpZiAoIXRyYWNrLT5jbGllbnQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gQVZGb3VuZGF0aW9uIHJldHVybnMgYSBjdWUgZXZlcnkg
dGltZSB0aGUgZGF0YSBpcyBidWZmZXJlZCwgb25seSBhZGQgaXQgb25jZS4KLSAgICBpZiAodHJh
Y2stPmNsaWVudCgpLT5oYXNDdWUodHJhY2ssIHRyYWNrLT5zdGFydCgpLCB0cmFjay0+ZW5kKCks
IHRyYWNrLT5pZCgpLCB0cmFjay0+Y29udGVudCgpLCB0cmFjay0+c2V0dGluZ3MoKSkpIHsKLSAg
ICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpmbHVzaEN1
cnJlbnRDdWUoJXApIC0gYWxyZWFkeSBoYXZlIGN1ZSBmb3IgdGltZSAlLjJmIiwgdGhpcywgdHJh
Y2stPnN0YXJ0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTE9HKE1lZGlhLCAi
TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpmbHVzaEN1cnJlbnRDdWUoJXApIC0gYWRk
aW5nIGN1ZSBmb3IgdGltZSAlLjJmIiwgdGhpcywgdHJhY2stPnN0YXJ0KCkpOwotICAgIHRyYWNr
LT5jbGllbnQoKS0+YWRkQ3VlKHRyYWNrLCB0cmFjay0+c3RhcnQoKSwgdHJhY2stPmVuZCgpLCB0
cmFjay0+aWQoKSwgdHJhY2stPmNvbnRlbnQoKSwgdHJhY2stPnNldHRpbmdzKCkpOworICAgIExP
RyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YWRkR2VuZXJpY0N1ZSgl
cCkgLSBhZGRpbmcgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCBjdWVEYXRhLnN0YXJ0VGltZSk7
CisgICAgdHJhY2stPmNsaWVudCgpLT5hZGRHZW5lcmljQ3VlKHRyYWNrLCBjdWVEYXRhKTsKIH0K
IAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmNvbmZpZ3VyZUluYmFuZFRy
YWNrcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjsKK3N0cnVjdCBHZW5lcmljQ3VlRGF0
YTsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC0xMTgsNyArMTE5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgY2xlYXJNYWluVGhyZWFkUGVuZGluZ0ZsYWcoKTsKIAogI2lmIEhBVkUo
QVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkKLSAgICB2b2lkIGZsdXNoQ3VycmVudEN1
ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKik7CisgICAgdm9pZCBhZGRHZW5lcmljQ3VlKElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkYqLCBjb25zdCBHZW5lcmljQ3VlRGF0YSYpOwogICAgIHZv
aWQgdHJhY2tNb2RlQ2hhbmdlZCgpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2Jq
Qy5tbQkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5t
bQkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBAIFNPRlRfTElOS19DTEFTUyhBVkZv
dW5kYXRpb24sIEFWTWVkaWFTZWwKIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZN
ZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJsZSwgTlNTdHJpbmcgKikKIFNPRlRfTElOS19QT0lOVEVS
KEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVTdWJ0aXRsZSwgTlNTdHJpbmcgKikKIFNPRlRfTElO
S19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5
Rm9yY2VkU3VidGl0bGVzLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0
aW9uLCBBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxpbmdSZXNvbHV0aW9uU291cmNl
QW5kUnVsZXNPbmx5LCBOU1N0cmluZyAqKQogCiAjZGVmaW5lIEFWUGxheWVySXRlbUxlZ2libGVP
dXRwdXQgZ2V0QVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dENsYXNzKCkKICNkZWZpbmUgQVZNZWRp
YVNlbGVjdGlvbkdyb3VwIGdldEFWTWVkaWFTZWxlY3Rpb25Hcm91cENsYXNzKCkKQEAgLTExMyw2
ICsxMTQsNyBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFDCiAjZGVm
aW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xlZ2libGUgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGlj
TGVnaWJsZSgpCiAjZGVmaW5lIEFWTWVkaWFUeXBlU3VidGl0bGUgZ2V0QVZNZWRpYVR5cGVTdWJ0
aXRsZSgpCiAjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25seUZvcmNlZFN1
YnRpdGxlcyBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0aXRs
ZXMoKQorI2RlZmluZSBBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxpbmdSZXNvbHV0
aW9uU291cmNlQW5kUnVsZXNPbmx5IGdldEFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRUZXh0U3R5
bGluZ1Jlc29sdXRpb25Tb3VyY2VBbmRSdWxlc09ubHkoKQogI2VuZGlmCiAKICNkZWZpbmUga0NN
VGltZVplcm8gZ2V0a0NNVGltZVplcm8oKQpAQCAtMzkxLDcgKzM5Myw2IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICNpZiBIQVZFKEFWRk9VTkRBVElPTl9URVhU
X1RSQUNLX1NVUFBPUlQpCiAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0QXBwbGllc01lZGlhU2Vs
ZWN0aW9uQ3JpdGVyaWFBdXRvbWF0aWNhbGx5OllFU107CiAjZW5kaWYKLSAgICAKIAogICAgIGlm
IChtX2F2UGxheWVySXRlbSkKICAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVwbGFjZUN1cnJl
bnRJdGVtV2l0aFBsYXllckl0ZW06bV9hdlBsYXllckl0ZW0uZ2V0KCldOwpAQCAtNDEwLDcgKzQx
MSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgIC8v
IENyZWF0ZSB0aGUgcGxheWVyIGl0ZW0gc28gd2UgY2FuIGxvYWQgbWVkaWEgZGF0YS4gCiAgICAg
bV9hdlBsYXllckl0ZW0uYWRvcHROUyhbW0FWUGxheWVySXRlbSBhbGxvY10gaW5pdFdpdGhBc3Nl
dDptX2F2QXNzZXQuZ2V0KCldKTsKLSAgICAKKwogICAgIFtbTlNOb3RpZmljYXRpb25DZW50ZXIg
ZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgc2VsZWN0b3I6
QHNlbGVjdG9yKGRpZEVuZDopIG5hbWU6QVZQbGF5ZXJJdGVtRGlkUGxheVRvRW5kVGltZU5vdGlm
aWNhdGlvbiBvYmplY3Q6bV9hdlBsYXllckl0ZW0uZ2V0KCldOwogCiAgICAgZm9yIChOU1N0cmlu
ZyAqa2V5TmFtZSBpbiBpdGVtS1ZPUHJvcGVydGllcygpKQpAQCAtODk3LDYgKzg5OCw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgICAgICBbbV9sZWdp
YmxlT3V0cHV0LmdldCgpIHNldERlbGVnYXRlOm1fb2JqY09ic2VydmVyLmdldCgpIHF1ZXVlOmRp
c3BhdGNoX2dldF9tYWluX3F1ZXVlKCldOwogICAgICAgICBbbV9sZWdpYmxlT3V0cHV0LmdldCgp
IHNldEFkdmFuY2VJbnRlcnZhbEZvckRlbGVnYXRlSW52b2NhdGlvbjpOU1RpbWVJbnRlcnZhbFNp
bmNlMTk3MF07CisgICAgICAgIFttX2xlZ2libGVPdXRwdXQuZ2V0KCkgc2V0VGV4dFN0eWxpbmdS
ZXNvbHV0aW9uOkFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRUZXh0U3R5bGluZ1Jlc29sdXRpb25T
b3VyY2VBbmRSdWxlc09ubHldOwogICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0KCkgYWRkT3V0
cHV0Om1fbGVnaWJsZU91dHB1dC5nZXQoKV07CiAgICAgfQogI2VuZGlmCkBAIC0xMjEyLDcgKzEy
MTQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAgICAgICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnByb2Nlc3NU
ZXh0VHJhY2tzKCVwKSAtIG5pbCBtZWRpYVNlbGVjdGlvbkdyb3VwIiwgdGhpcyk7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0KKyAgICAKICAgICBWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkY+ID4gcmVtb3ZlZFRleHRUcmFja3MgPSBtX3RleHRUcmFja3M7CiAgICAgTlNB
cnJheSAqbGVnaWJsZU9wdGlvbnMgPSBbQVZNZWRpYVNlbGVjdGlvbkdyb3VwIHBsYXlhYmxlTWVk
aWFTZWxlY3Rpb25PcHRpb25zRnJvbUFycmF5OltsZWdpYmxlR3JvdXAgb3B0aW9uc11dOwogICAg
IGZvciAoQVZNZWRpYVNlbGVjdGlvbk9wdGlvblR5cGUgKm9wdGlvbiBpbiBsZWdpYmxlT3B0aW9u
cykgewpAQCAtMTIyOCwxMyArMTIzMCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzoKICAgICAgICAgaWYgKCFuZXdUcmFjaykKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChbW29wdGlvbiBtZWRpYVR5cGVdIGlzRXF1YWxUb1N0cmluZzpBVk1l
ZGlhVHlwZVN1YnRpdGxlXSkgewotICAgICAgICAgICAgaWYgKCFbb3B0aW9uIGhhc01lZGlhQ2hh
cmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0
bGVzXSkgewotICAgICAgICAgICAgICAgIEFWTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlICpmb3Jj
ZWRPbmx5T3B0aW9uID0gW29wdGlvbiBhc3NvY2lhdGVkTWVkaWFTZWxlY3Rpb25PcHRpb25Jbk1l
ZGlhU2VsZWN0aW9uR3JvdXA6bGVnaWJsZUdyb3VwXTsKLSAgICAgICAgICAgICAgICBpZiAoZm9y
Y2VkT25seU9wdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFtbb3B0aW9uIG1lZGlhVHlwZV0gaXNFcXVhbFRv
U3RyaW5nOkFWTWVkaWFUeXBlU3VidGl0bGVdICYmIFtvcHRpb24gaGFzTWVkaWFDaGFyYWN0ZXJp
c3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXNdKQor
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbV90ZXh0VHJhY2tzLmFwcGVuZChJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQzo6Y3JlYXRlKHRoaXMsIG9wdGlvbikpOwogICAgIH0K
QEAgLTEyNzUsNiArMTI3Miw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
T2JqQzoKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVu
dFRyYWNrKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgKnRyYWNrKQogewogICAgIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZPYmpDKiB0cmFja1ByaXZhdGUgPSBzdGF0aWNfY2FzdDxJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGT2JqQyo+KHRyYWNrKTsKKyAgICBpZiAobV9jdXJyZW50VHJhY2sg
PT0gdHJhY2tQcml2YXRlKQorICAgICAgICByZXR1cm47CisKICAgICBBVk1lZGlhU2VsZWN0aW9u
T3B0aW9uVHlwZSAqbWVkaWFTZWxlY3Rpb25PcHRpb24gPSB0cmFja1ByaXZhdGUgPyB0cmFja1By
aXZhdGUtPm1lZGlhU2VsZWN0aW9uT3B0aW9uKCkgOiAwOwogCiAgICAgTE9HKE1lZGlhLCAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVudFRyYWNrKCVwKSAtIHNl
bGVjdGluZyBtZWRpYSBvcHRpb24gJXAiLCB0aGlzLCBtZWRpYVNlbGVjdGlvbk9wdGlvbik7CkBA
IC0xNDI0LDYgKzE0MjQsOCBAQCAtICh2b2lkKWxlZ2libGVPdXRwdXQ6KGlkKW91dHB1dCBkaWRP
dXRwCiAgICAgICAgIHJldHVybjsKIAogICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghbV9jYWxsYmFjaykKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgbV9jYWxsYmFjay0+cHJvY2Vzc0N1ZShzdHJpbmdzLCBDTVRpbWVHZXRT
ZWNvbmRzKGl0ZW1UaW1lKSk7CiAgICAgfSk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="201279"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183050</attachid>
            <date>2013-01-16 15:53:22 -0800</date>
            <delta_ts>2013-01-16 17:55:16 -0800</delta_ts>
            <desc>Add new files to other port build systems.</desc>
            <filename>patch_24.txt</filename>
            <type>text/plain</type>
            <size>64581</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTg5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDEzLTAxLTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgbm9uLVdl
YlZUVCBjdWVzIGZyb20gaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3
IGZpbGVzLgorICAgICAgICAqIFRhcmdldC5wcmk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUu
Z3lwaTogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6IERp
dHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8u
CisKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50Ojp1cGRh
dGVEaXNwbGF5KTogUGFzcyB2aWRlbyBzaXplIHRvIGdldERpc3BsYXlUcmVlLgorCisgICAgICAg
ICogaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5i
YW5kVGV4dFRyYWNrOjphZGRHZW5lcmljQ3VlKTogTmV3LCBjcmVhdGUgYSBnZW5lcmljIGN1ZSBp
ZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0
VHJhY2s6OmFkZFdlYlZUVEN1ZSk6IFJlbmFtZWQgZnJvbSBhZGRDdWUuCisgICAgICAgICogaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRy
YWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6aGFzQ3VlKTogTW92ZWQgZnJv
bSBJbmJhbmRUZXh0VHJhY2suY3BwLCB1c2Ugb3BlcmF0b3IgPT0gaW5zdGVhZCBvZiBpbmxpbmUK
KyAgICAgICAgICAgIGNvbXBhcmlzb24gc28gZGVyaXZlZCBUZXh0VHJhY2tDdWVzIGNhbiBiZSBj
b21wYXJlZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorCisgICAgICAgICog
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOiBJbnRlcmZhY2UgY2hhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpUZXh0VHJhY2tDdWUpOiBEb24ndCBjcmVhdGUgdGhlIGRp
c3BsYXkgdHJlZSBpbiB0aGUgY29uc3RydWN0b3IsIGl0IG1heQorICAgICAgICAgICAgbmV2ZXIg
YmUgbmVlZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpjcmVhdGVEaXNwbGF5
VHJlZSk6IE5ldywgY3JlYXRlIHRoZSBkaXNwbGF5IHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0VHJhY2tDdWU6OmRpc3BsYXlUcmVlSW50ZXJuYWwpOiBEaXNwbGF5IHRyZWUgYWNjZXNzb3Is
IGFsbG93cyBpdCB0byBiZSBjcmVhdGVkIGxhemlseS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFja0N1ZTo6c2V0QWxpZ24pOiBBbGlnbm1lbnQgLT4gQ3VlQWxpZ25tZW50LgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpzZXRJc0FjdGl2ZSk6IFVzZSBkaXNwbGF5VHJlZUludGVy
bmFsKCkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmdldERpc3BsYXlUcmVlKTog
VXNlIGRpc3BsYXlUcmVlSW50ZXJuYWwoKSwgcGFzcyB2aWRlbyBzaXplIHRvIGFwcGx5Q1NTUHJv
cGVydGllcy4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6cmVtb3ZlRGlzcGxheVRy
ZWUpOiBVc2UgZGlzcGxheVRyZWVJbnRlcm5hbCgpLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRy
YWNrQ3VlOjpvcGVyYXRvcj09KTogTmV3LgorICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmdldEFsaWdubWVudCk6IEFs
aWdubWVudCAtPiBDdWVBbGlnbm1lbnQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6
Om9wZXJhdG9yIT0pOiBOZXcuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OmN1ZVR5
cGUpOiBOZXcsIGN1ZSB0eXBlIGlkZW50aWZpZWQgbmVlZGVkIGJ5IG9wZXJhdG9yPT0uCisgICAg
ICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6Om93bmVyRG9jdW1lbnQpOiBOZXcuCisKKyAgICAg
ICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWNCb3g6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljQm94OjpUZXh0VHJhY2tDdWVHZW5lcmljQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWNCb3g6OmFwcGx5Q1NTUHJvcGVydGll
cyk6CisgICAgICAgIChXZWJDb3JlOjo6VGV4dFRyYWNrQ3VlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRUcmFja0N1ZUdlbmVyaWM6OmNyZWF0ZURpc3BsYXlUcmVlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIGh0bWwvdHJh
Y2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRU
cmFja0N1ZUdlbmVyaWM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVH
ZW5lcmljOjp+VGV4dFRyYWNrQ3VlR2VuZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tDdWVHZW5lcmljOjpiYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0QmFzZUZvbnRTaXplUmVsYXRpdmVU
b1ZpZGVvSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmZv
bnRTaXplTXVsdGlwbGllcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmlj
OjpzZXRGb250U2l6ZU11bHRpcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3Vl
R2VuZXJpYzo6Zm9udE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJp
Yzo6c2V0Rm9udE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6
b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpjdWVU
eXBlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0luYmFuZFRleHRUcmFja1ByaXZh
dGVDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyk6IENvcHkgY3VlIGF0dHJpYnV0
ZXMgaW50byBHZW5lcmljQ3VlRGF0YQorICAgICAgICAgICAgc3RydWN0IGluc3RlYWQgb2YgdHJ5
aW5nIHRvIGNvbnZlcnQgdG8gV2ViVlRUIHNldHRpbmdzIHN0cmluZy4gUHJvY2VzcyBmb250IHNp
emUsZm9udCBiYXNlCisgICAgICAgICAgICBzaXplLCBmb250IG5hbWUsIGFuZCB2ZXJ0aWNhbCBs
YXlvdXQgYXR0cmlidXRlcywKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnByb2Nlc3NDdWUpOiBDcmVhdGUgc2VwYXJhdGUgY3VlcyBmb3IgZWFjaCBhdHRyaWJ1
dGVkCisgICAgICAgICAgICBzdHJpbmcgaW4gdGhlIGFycmF5IGJlY2F1c2UgZWFjaCBvbmUgY2Fu
IGJlIGF0IGEgZGlmZmVyZW50IHNjcmVlbiBsb2NhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Oklu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFsdWVzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oOgor
ICAgICAgICAoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRik6CisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2Vl
a0NvbXBsZXRlZCk6IFJlc2V0IGFueSBwYXJ0aWFsbHkgYWNjdW11bGF0ZWQgY3VlcworICAgICAg
ICAgICAgZGVsaXZlcmVkIHNpbmNlIHRoZSBzZWVrIHdhcyBzdGFydGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjphZGRHZW5lcmljQ3VlKTogUmVu
YW1lZCBmcm9tIGZsdXNoQ3VycmVudEN1ZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmg6CisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXIpOiBXaGl0ZXNwYWNlIGNsZWFudXAuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpjcmVh
dGVBVlBsYXllckl0ZW0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakM6OnRyYWNrc0NoYW5nZWQpOiBUZWxsIGxlZ2libGUgb3V0cHV0
IHRvIGRlbGl2ZXIgY3VlcworICAgICAgICAgICAgd2l0aG91dCBhbnkgYWRkaXRpb25hbCBzdHls
aW5nIG5lZWRlZCBieSB0aGUgaW50ZXJuYWwgcmVuZGVyZXIuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcm9jZXNzVGV4dFRyYWNrcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRD
dXJyZW50VHJhY2spOiBEbyBub3RoaW5nIGlmIGFza2VkIHRvIGNoYW5nZQorICAgICAgICAgICAg
dG8gdGhlIHRyYWNrIHRoYXQgaXMgYWxyZWFkeSBjdXJyZW50LgorICAgICAgICAoLVtXZWJDb3Jl
QVZGTW92aWVPYnNlcnZlciBsZWdpYmxlT3V0cHV0OmRpZE91dHB1dEF0dHJpYnV0ZWRTdHJpbmdz
Om5hdGl2ZVNhbXBsZUJ1ZmZlcnM6Zm9ySXRlbVRpbWU6XSk6CisgICAgICAgICAgICBDaGVjayB0
byBtYWtlIHN1cmUgdGhhdCB0aGUgY2xpZW50IGNhbGxiYWNrIGlzbid0IE5VTEwuCisKIDIwMTMt
MDEtMTYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAog
ICAgICAgICBbZ3N0cmVhbWVyXSBTb21lIG1lZGlhIHRlc3RzIG9jY2FzaW9uYWxseSBjcmFzaCB3
aXRoIGdzdHJlYW1lciAxLjAgYmFja2VuZApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjYxLDYgKzM2NjEsOCBAQCB3ZWJjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggXAogCVNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2tDdWUuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWVHZW5lcmljLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWVHZW5lcmljLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
TGlzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQkod29ya2luZyBjb3B5KQpAQCAtMTkxMSw2ICsxOTExLDcgQEAgSEVBREVSUyArPSBcCiAgICAg
aHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oIFwKICAgICBodG1sL3RyYWNrL1RleHRUcmFj
ay5oIFwKICAgICBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oIFwKKyAgICBodG1sL3RyYWNrL1Rl
eHRUcmFja0N1ZUdlbmVyaWMuaCBcCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0Lmgg
XAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oIFwKICAgICBodG1sL3RyYWNrL1RyYWNr
QmFzZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQzNyw2ICszNDM3LDgg
QEAKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFjay5oJywKICAgICAgICAgICAgICdo
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmgnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJp
Yy5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oJywK
ICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwJywKICAgICAgICAg
ICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaCcsCiAgICAgICAgICAgICAnaHRtbC90
cmFjay9UZXh0VHJhY2tMaXN0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY1MDM3
LDYgKzY1MDM3LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwIgorCQkJCQk+
CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRtbFx0cmFj
a1xUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUK
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUxpc3QuY3BwIgog
CQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDgsNiArMTA4LDggQEAKIAkJMDcwNzU2REYxNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRy
YWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzA3NTZEOTE0MjM5QjRDMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVMaXN0LmNwcCAq
LzsgfTsKIAkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwNzU2REEx
NDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovOyB9OwogCQkwNzA5RkM0
RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwOUZDNEQxMDI1REVFMzAwNTlDREJB
IC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsgfTsKKwkJMDcxQTlFQzIxNjhGQkM0MzAwMjYy
OUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzAxNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFj
a0N1ZUdlbmVyaWMuY3BwICovOyB9OworCQkwNzFBOUVDMzE2OEZCQzU1MDAyNjI5RjkgLyogVGV4
dFRyYWNrQ3VlR2VuZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMDcxQTlFQzExNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwNzIw
QjBBMDE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMEIwOUUxNEQzMzIzNTAwNjQy
OTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCAqLzsgfTsKIAkJMDcyMEIwQTAxNEQzMzIzNTAw
NjQyOTU2IC8qIEdlc3R1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50
LmNwcCAqLzsgfTsKIAkJMDcyMEIwQTExNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1
ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIw
QjA5RjE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzI3MSw2ICs3MjczLDggQEAK
IAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RleHRUcmFja0N1ZUxpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZDNEQxMDI1REVFMzAwNTlDREJBIC8qIEFjY2Vz
c2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWNjZXNz
aWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzBERDhGNTBG
MDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3MUE5
RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4
dFRyYWNrQ3VlR2VuZXJpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0
VHJhY2tDdWVHZW5lcmljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlF
MTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZl
bnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljRXZlbnRR
dWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0RDMzMjM1MDA2
NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
OTYxNSw2ICsxOTYxOSw4IEBACiAJCQkJOTc1OUU5MzgxNEVGMUNGODAwMjZBMkREIC8qIFRleHRU
cmFja0N1ZS5jcHAgKi8sCiAJCQkJOTc1OUU5MzkxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFj
a0N1ZS5oICovLAogCQkJCTk3NTlFOTNBMTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWUu
aWRsICovLAorCQkJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5l
cmljLmNwcCAqLywKKwkJCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5oICovLAogCQkJCTk3NTlFOTNCMTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tD
dWVMaXN0LmNwcCAqLywKIAkJCQk5NzU5RTkzQzE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNr
Q3VlTGlzdC5oICovLAogCQkJCTk3NTlFOTNEMTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tD
dWVMaXN0LmlkbCAqLywKQEAgLTI1ODg0LDYgKzI1ODkwLDcgQEAKIAkJCQlCMkMzREE0QjBEMDA2
QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc1OUU5NDAx
NEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc1OUU5
NDMxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MDcxQTlFQzMxNjhGQkM1NTAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk3NTlFOTQ2MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzY5NzA4NzE0NjNBRDg3MDBGNTAyQ0YgLyogVGV4dFRy
YWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjFBRDRFNzQxM0ExMkE0NjAwODQ2QjI3IC8q
IFRleHRUcmFja0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTA1Myw2ICsyOTA2MCw3IEBA
CiAJCQkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTc1OUU5M0YxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFjay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk5NzU5RTk0MjE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3Vl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3MUE5RUMyMTY4RkJDNDMwMDI2MjlGOSAvKiBUZXh0
VHJhY2tDdWVHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NTlFOTQ1MTRFRjFDRjgw
MDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3Njk3
MDg2MTQ2M0FEODcwMEY1MDJDRiAvKiBUZXh0VHJhY2tMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIxQUQ0RTczMTNBMTJBNDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMDQsOCArMTMwNCw3IEBAIHZvaWQgTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxl
bWUKICAgICAgICAgaWYgKCFjdWUtPnRyYWNrKCkgfHwgIWN1ZS0+dHJhY2soKS0+aXNSZW5kZXJl
ZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1
ZUJveD4gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUoKTsKLQorICAgICAgICBSZWZQ
dHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZShtX3Zp
ZGVvRGlzcGxheVNpemUuc2l6ZSgpKTsKICAgICAgICAgaWYgKGRpc3BsYXlCb3gtPmhhc0NoaWxk
Tm9kZXMoKSAmJiAhY29udGFpbnMoc3RhdGljX2Nhc3Q8Tm9kZSo+KGRpc3BsYXlCb3guZ2V0KCkp
KSkKICAgICAgICAgICAgIC8vIE5vdGU6IHRoZSBkaXNwbGF5IHRyZWUgb2YgYSBjdWUgaXMgcmVt
b3ZlZCB3aGVuIHRoZSBhY3RpdmUgZmxhZyBvZiB0aGUgY3VlIGlzIHVuc2V0LgogICAgICAgICAg
ICAgbV9jdWVDb250YWluZXItPmFwcGVuZENoaWxkKGRpc3BsYXlCb3gsIEFTU0VSVF9OT19FWENF
UFRJT04sIGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4
dFRyYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFu
ZFRleHRUcmFjay5jcHAJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTEg
QEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAi
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlRleHRUcmFja0N1ZUdlbmVyaWMuaCIKICNpbmNs
dWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCi0KKyNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8
d3RmL1VudXNlZFBhcmFtLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTk4LDc0ICsxMDAs
NTUgQEAgc2l6ZV90IEluYmFuZFRleHRUcmFjazo6aW5iYW5kVHJhY2tJbmRleAogICAgIHJldHVy
biBtX3ByaXZhdGUtPnRleHRUcmFja0luZGV4KCk7CiB9CiAKLXZvaWQgSW5iYW5kVGV4dFRyYWNr
OjphZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSogdHJhY2tQcml2YXRlLCBkb3VibGUgc3Rh
cnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwg
Y29uc3QgU3RyaW5nJiBzZXR0aW5ncykKK3ZvaWQgSW5iYW5kVGV4dFRyYWNrOjphZGRHZW5lcmlj
Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0ZSwgY29uc3QgR2VuZXJpY0N1
ZURhdGEmIGN1ZURhdGEpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHRyYWNrUHJpdmF0ZSk7CiAgICAg
QVNTRVJUKHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZhdGUpOwogCi0gICAgUmVmUHRyPFRleHRUcmFj
a0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LCBzdGFydCwgZW5kLCBjb250ZW50KTsKLSAgICBjdWUtPnNldElkKGlkKTsKLSAgICBjdWUtPnNl
dEN1ZVNldHRpbmdzKHNldHRpbmdzKTsKLSAgICBjdWUtPnNldFRyYWNrKHRoaXMpOworICAgIFJl
ZlB0cjxUZXh0VHJhY2tDdWVHZW5lcmljPiBjdWUgPSBUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVh
dGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBjdWVEYXRhLnN0YXJ0VGltZSwgY3VlRGF0YS5l
bmRUaW1lLCBjdWVEYXRhLmNvbnRlbnQpOwogCi0gICAgaWYgKCFtX2N1ZXMpCi0gICAgICAgIG1f
Y3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0ZSgpOwotICAgIG1fY3Vlcy0+YWRkKGN1ZSk7
Ci0gICAgCi0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICBjbGllbnQoKS0+dGV4dFRyYWNrQWRk
Q3Vlcyh0aGlzLCBtX2N1ZXMuZ2V0KCkpOworICAgIGN1ZS0+c2V0SWQoY3VlRGF0YS5pZCk7Cisg
ICAgY3VlLT5zZXRCYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoY3VlRGF0YS5iYXNl
Rm9udFNpemUpOworICAgIGN1ZS0+c2V0Rm9udFNpemVNdWx0aXBsaWVyKGN1ZURhdGEucmVsYXRp
dmVGb250U2l6ZSk7CisgICAgY3VlLT5zZXRGb250TmFtZShjdWVEYXRhLmZvbnROYW1lKTsKKwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgaWYgKGN1ZURhdGEucG9zaXRpb24gPiAwKQorICAg
ICAgICBjdWUtPnNldFBvc2l0aW9uKGxyb3VuZChjdWVEYXRhLnBvc2l0aW9uKSwgZWMpOworICAg
IGlmIChjdWVEYXRhLmxpbmUgPiAwKQorICAgICAgICBjdWUtPnNldExpbmUobHJvdW5kKGN1ZURh
dGEubGluZSksIGVjKTsKKyAgICBpZiAoY3VlRGF0YS5zaXplID4gMCkKKyAgICAgICAgY3VlLT5z
ZXRTaXplKGxyb3VuZChjdWVEYXRhLnNpemUpLCBlYyk7CisgICAgaWYgKGN1ZURhdGEuYWxpZ24g
PT0gR2VuZXJpY0N1ZURhdGE6OlN0YXJ0KQorICAgICAgICBjdWUtPnNldEFsaWduKEFTQ0lJTGl0
ZXJhbCgic3RhcnQiKSwgZWMpOworICAgIGVsc2UgaWYgKGN1ZURhdGEuYWxpZ24gPT0gR2VuZXJp
Y0N1ZURhdGE6Ok1pZGRsZSkKKyAgICAgICAgY3VlLT5zZXRBbGlnbihBU0NJSUxpdGVyYWwoIm1p
ZGRsZSIpLCBlYyk7CisgICAgZWxzZSBpZiAoY3VlRGF0YS5hbGlnbiA9PSBHZW5lcmljQ3VlRGF0
YTo6RW5kKQorICAgICAgICBjdWUtPnNldEFsaWduKEFTQ0lJTGl0ZXJhbCgiZW5kIiksIGVjKTsK
KyAgICBjdWUtPnNldFNuYXBUb0xpbmVzKGZhbHNlKTsKKworICAgIGlmIChoYXNDdWUoY3VlLmdl
dCgpKSkgeworICAgICAgICBMT0coTWVkaWEsICJJbmJhbmRUZXh0VHJhY2s6OmFkZEdlbmVyaWND
dWUgaWdub3JpbmcgYWxyZWFkeSBhZGRlZCBjdWU6IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBjb250
ZW50PVwiJXNcIlxuIiwKKyAgICAgICAgICAgIGN1ZURhdGEuc3RhcnRUaW1lLCBjdWVEYXRhLmVu
ZFRpbWUsIGN1ZURhdGEuY29udGVudC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGFkZEN1ZShjdWUpOwogfQogCi1ib29sIEluYmFuZFRleHRUcmFjazo6aGFz
Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUgc3RhcnRUaW1lLCBkb3VibGUgZW5k
VGltZSwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJp
bmcmIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0VHJhY2s6OmFkZFdlYlZUVEN1ZShJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlKiB0cmFja1ByaXZhdGUsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwg
Y29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNl
dHRpbmdzKQogeworICAgIFVOVVNFRF9QQVJBTSh0cmFja1ByaXZhdGUpOworICAgIEFTU0VSVCh0
cmFja1ByaXZhdGUgPT0gbV9wcml2YXRlKTsKIAotICAgIGlmIChzdGFydFRpbWUgPCAwIHx8IGVu
ZFRpbWUgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWN1ZXMoKS0+bGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNpemVfdCBzZWFyY2hTdGFydCA9
IDA7Ci0gICAgc2l6ZV90IHNlYXJjaEVuZCA9IGN1ZXMoKS0+bGVuZ3RoKCk7Ci0KLSAgICB3aGls
ZSAoMSkgewotICAgICAgICBBU1NFUlQoc2VhcmNoU3RhcnQgPD0gY3VlcygpLT5sZW5ndGgoKSk7
Ci0gICAgICAgIEFTU0VSVChzZWFyY2hFbmQgPD0gY3VlcygpLT5sZW5ndGgoKSk7Ci0gICAgICAg
IAotICAgICAgICBUZXh0VHJhY2tDdWUqIGN1ZTsKLSAgICAgICAgCi0gICAgICAgIC8vIEN1ZXMg
aW4gdGhlIFRleHRUcmFja0N1ZUxpc3QgYXJlIG1haW50YWluZWQgaW4gc3RhcnQgdGltZSBvcmRl
ci4KLSAgICAgICAgaWYgKHNlYXJjaFN0YXJ0ID09IHNlYXJjaEVuZCkgewotICAgICAgICAgICAg
aWYgKCFzZWFyY2hTdGFydCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGN1ZSA9IGN1ZXMoKS0+aXRlbShzZWFyY2hTdGFydCAtIDEpOwot
ICAgICAgICAgICAgaWYgKCFjdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgaWYgKGN1ZS0+c3RhcnRUaW1lKCkgIT0gc3RhcnRUaW1lKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdWUtPmVuZFRpbWUoKSAhPSBlbmRU
aW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdWUt
PnRleHQoKSAhPSBjb250ZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChjdWUtPmN1ZVNldHRpbmdzKCkgIT0gc2V0dGluZ3MpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+aWQoKSAhPSBpZCkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzaXplX3QgaW5kZXggPSAoc2Vh
cmNoU3RhcnQgKyBzZWFyY2hFbmQpIC8gMjsKLSAgICAgICAgY3VlID0gY3VlcygpLT5pdGVtKGlu
ZGV4KTsKLSAgICAgICAgaWYgKHN0YXJ0VGltZSA8IGN1ZS0+c3RhcnRUaW1lKCkgfHwgKHN0YXJ0
VGltZSA9PSBjdWUtPnN0YXJ0VGltZSgpICYmIGVuZFRpbWUgPiBjdWUtPmVuZFRpbWUoKSkpCi0g
ICAgICAgICAgICBzZWFyY2hFbmQgPSBpbmRleDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2VhcmNoU3RhcnQgPSBpbmRleCArIDE7Ci0gICAgfQorICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+
IGN1ZSA9IFRleHRUcmFja0N1ZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3Rh
cnQsIGVuZCwgY29udGVudCk7CisgICAgY3VlLT5zZXRJZChpZCk7CisgICAgY3VlLT5zZXRDdWVT
ZXR0aW5ncyhzZXR0aW5ncyk7CiAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNDdWUoY3VlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYWRkQ3VlKGN1ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAkocmV2aXNpb24g
MTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTEsOCArNTEsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEluYmFu
ZFRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGV4dFRyYWNrQ2xpZW50KiwgUGFz
c1JlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUsIGRvdWJsZSwgY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCBi
b29sIGhhc0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgdm9pZCBhZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBjb25zdCBH
ZW5lcmljQ3VlRGF0YSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhZGRXZWJWVFRDdWUo
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSwgZG91YmxlLCBjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKIAogICAgIFJlZlB0cjxJbmJh
bmRUZXh0VHJhY2tQcml2YXRlPiBtX3ByaXZhdGU7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrLmNwcAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
MzksNiArMzM5LDY0IEBAIGludCBUZXh0VHJhY2s6OnRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGUK
ICAgICByZXR1cm4gbV9yZW5kZXJlZFRyYWNrSW5kZXg7CiB9CiAKK2Jvb2wgVGV4dFRyYWNrOjpo
YXNDdWUoVGV4dFRyYWNrQ3VlKiBjdWUpCit7CisgICAgaWYgKGN1ZS0+c3RhcnRUaW1lKCkgPCAw
IHx8IGN1ZS0+ZW5kVGltZSgpIDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGlmICghbV9jdWVzIHx8ICFtX2N1ZXMtPmxlbmd0aCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgc2l6ZV90IHNlYXJjaFN0YXJ0ID0gMDsKKyAgICBzaXplX3Qgc2VhcmNoRW5k
ID0gbV9jdWVzLT5sZW5ndGgoKTsKKyAgICAKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBBU1NF
UlQoc2VhcmNoU3RhcnQgPD0gbV9jdWVzLT5sZW5ndGgoKSk7CisgICAgICAgIEFTU0VSVChzZWFy
Y2hFbmQgPD0gbV9jdWVzLT5sZW5ndGgoKSk7CisgICAgICAgIAorICAgICAgICBUZXh0VHJhY2tD
dWUqIGV4aXN0aW5nQ3VlOworICAgICAgICAKKyAgICAgICAgLy8gQ3VlcyBpbiB0aGUgVGV4dFRy
YWNrQ3VlTGlzdCBhcmUgbWFpbnRhaW5lZCBpbiBzdGFydCB0aW1lIG9yZGVyLgorICAgICAgICBp
ZiAoc2VhcmNoU3RhcnQgPT0gc2VhcmNoRW5kKSB7CisgICAgICAgICAgICBpZiAoIXNlYXJjaFN0
YXJ0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gSWYg
dGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjdWUgd2l0aCB0aGUgc2FtZSBzdGFydCB0aW1lLCBiYWNr
IHVwIHRvIGZpcnN0IG9uZSBzbyB3ZQorICAgICAgICAgICAgLy8gY29uc2lkZXIgYWxsIG9mIHRo
ZW0uCisgICAgICAgICAgICB3aGlsZSAoc2VhcmNoU3RhcnQgPj0gMiAmJiBjdWUtPnN0YXJ0VGlt
ZSgpID09IG1fY3Vlcy0+aXRlbShzZWFyY2hTdGFydCAtIDIpLT5zdGFydFRpbWUoKSkKKyAgICAg
ICAgICAgICAgICAtLXNlYXJjaFN0YXJ0OworICAgICAgICAgICAgCisgICAgICAgICAgICBib29s
IGZpcnN0Q29tcGFyZSA9IHRydWU7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAg
ICAgICAgIGlmICghZmlyc3RDb21wYXJlKQorICAgICAgICAgICAgICAgICAgICArK3NlYXJjaFN0
YXJ0OworICAgICAgICAgICAgICAgIGZpcnN0Q29tcGFyZSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmIChzZWFyY2hTdGFydCA+IG1fY3Vlcy0+bGVuZ3RoKCkpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGV4aXN0aW5nQ3VlID0gbV9jdWVz
LT5pdGVtKHNlYXJjaFN0YXJ0IC0gMSk7CisgICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ0N1
ZSB8fCBjdWUtPnN0YXJ0VGltZSgpID4gZXhpc3RpbmdDdWUtPnN0YXJ0VGltZSgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBpZiAoKmV4aXN0
aW5nQ3VlICE9ICpjdWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzaXplX3QgaW5kZXggPSAoc2VhcmNoU3RhcnQgKyBz
ZWFyY2hFbmQpIC8gMjsKKyAgICAgICAgZXhpc3RpbmdDdWUgPSBtX2N1ZXMtPml0ZW0oaW5kZXgp
OworICAgICAgICBpZiAoY3VlLT5zdGFydFRpbWUoKSA8IGV4aXN0aW5nQ3VlLT5zdGFydFRpbWUo
KSB8fCAoY3VlLT5zdGFydFRpbWUoKSA9PSBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkgJiYgY3Vl
LT5lbmRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+ZW5kVGltZSgpKSkKKyAgICAgICAgICAgIHNlYXJj
aEVuZCA9IGluZGV4OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZWFyY2hTdGFydCA9IGlu
ZGV4ICsgMTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCShyZXZpc2lvbiAxMzk4OTApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTA1LDYgKzEwNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQ3VlKFBhc3NS
ZWZQdHI8VGV4dFRyYWNrQ3VlPik7CiAgICAgdm9pZCByZW1vdmVDdWUoVGV4dFRyYWNrQ3VlKiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgaGFzQ3VlKFRleHRUcmFja0N1ZSopOwogCiAgICAg
dm9pZCBjdWVXaWxsQ2hhbmdlKFRleHRUcmFja0N1ZSopOwogICAgIHZvaWQgY3VlRGlkQ2hhbmdl
KFRleHRUcmFja0N1ZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlLmNwcAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2tDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMTA2LDcg
KzEwNiw3IEBAIFRleHRUcmFja0N1ZSogVGV4dFRyYWNrQ3VlQm94OjpnZXRDdWUoKSAKICAgICBy
ZXR1cm4gbV9jdWU7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlQm94OjphcHBseUNTU1Byb3BlcnRp
ZXMoKQordm9pZCBUZXh0VHJhY2tDdWVCb3g6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRT
aXplJikKIHsKICAgICAvLyBGSVhNRTogQXBwbHkgYWxsIHRoZSBpbml0aWFsIENTUyBwb3NpdGlv
bmluZyBwcm9wZXJ0aWVzLiBodHRwOi8vd2tiLnVnLzc5OTE2CiAKQEAgLTIwOSw3ICsyMDksNiBA
QCBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpCiAgICAgLCBtX3NuYXBU
b0xpbmVzKHRydWUpCiAgICAgLCBtX2FsbERvY3VtZW50Tm9kZXMoSFRNTERpdkVsZW1lbnQ6OmNy
ZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpKSkKICAgICAsIG1fZGlzcGxheVRy
ZWVTaG91bGRDaGFuZ2UodHJ1ZSkKLSAgICAsIG1fZGlzcGxheVRyZWUoVGV4dFRyYWNrQ3VlQm94
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
LCB0aGlzKSkKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0RvY3Vt
ZW50KCkpOwogCkBAIC0yMjcsNiArMjI2LDE4IEBAIFRleHRUcmFja0N1ZTo6flRleHRUcmFja0N1
ZSgpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWU6OmNy
ZWF0ZURpc3BsYXlUcmVlKCkKK3sKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlQm94OjpjcmVhdGUo
b3duZXJEb2N1bWVudCgpLCB0aGlzKTsKK30KKworUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+
IFRleHRUcmFja0N1ZTo6ZGlzcGxheVRyZWVJbnRlcm5hbCgpCit7CisgICAgaWYgKCFtX2Rpc3Bs
YXlUcmVlKQorICAgICAgICBtX2Rpc3BsYXlUcmVlID0gY3JlYXRlRGlzcGxheVRyZWUoKTsKKyAg
ICByZXR1cm4gbV9kaXNwbGF5VHJlZTsKK30KKwogdm9pZCBUZXh0VHJhY2tDdWU6OmN1ZVdpbGxD
aGFuZ2UoKQogewogICAgIGlmIChtX3RyYWNrKQpAQCAtNDM3LDcgKzQ0OCw3IEBAIHZvaWQgVGV4
dFRyYWNrQ3VlOjpzZXRBbGlnbihjb25zdCBTdHJpbmcKICAgICAvLyBtYXRjaCBmb3IgdGhlIG5l
dyB2YWx1ZSwgaWYgYW55LiBJZiBub25lIG9mIHRoZSB2YWx1ZXMgbWF0Y2gsIHRoZW4gdGhlIHVz
ZXIKICAgICAvLyBhZ2VudCBtdXN0IGluc3RlYWQgdGhyb3cgYSBTeW50YXhFcnJvciBleGNlcHRp
b24uCiAgICAgCi0gICAgQWxpZ25tZW50IGFsaWdubWVudCA9IG1fY3VlQWxpZ25tZW50OworICAg
IEN1ZUFsaWdubWVudCBhbGlnbm1lbnQgPSBtX2N1ZUFsaWdubWVudDsKICAgICBpZiAodmFsdWUg
PT0gc3RhcnRLZXl3b3JkKCkpCiAgICAgICAgIGFsaWdubWVudCA9IFN0YXJ0OwogICAgIGVsc2Ug
aWYgKHZhbHVlID09IG1pZGRsZUtleXdvcmQoKSkKQEAgLTU0NCw4ICs1NTUsNyBAQCB2b2lkIFRl
eHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpCiAKICAgICBpZiAoIWFjdGl2ZSkgewog
ICAgICAgICAvLyBSZW1vdmUgdGhlIGRpc3BsYXkgdHJlZSBhcyBzb29uIGFzIHRoZSBjdWUgYmVj
b21lcyBpbmFjdGl2ZS4KLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgbV9kaXNw
bGF5VHJlZS0+cmVtb3ZlKGVjKTsKKyAgICAgICAgZGlzcGxheVRyZWVJbnRlcm5hbCgpLT5yZW1v
dmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgfQogfQogCkBAIC03MjEsMTAgKzczMSwxMSBA
QCB2b2lkIFRleHRUcmFja0N1ZTo6dXBkYXRlRGlzcGxheVRyZWUoZmxvCiAgICAgbV9hbGxEb2N1
bWVudE5vZGVzLT5hcHBlbmRDaGlsZChyZWZlcmVuY2VUcmVlKTsKIH0KIAotUGFzc1JlZlB0cjxU
ZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoKQorUGFzc1JlZlB0
cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoY29uc3QgSW50
U2l6ZSYgdmlkZW9TaXplKQogeworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3BsYXlU
cmVlID0gZGlzcGxheVRyZWVJbnRlcm5hbCgpOwogICAgIGlmICghbV9kaXNwbGF5VHJlZVNob3Vs
ZENoYW5nZSB8fCAhdHJhY2soKS0+aXNSZW5kZXJlZCgpKQotICAgICAgICByZXR1cm4gbV9kaXNw
bGF5VHJlZTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlUcmVlOwogCiAgICAgLy8gMTAuMSAtIDEw
LjEwCiAgICAgY2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMoKTsKQEAgLTczMiw3ICs3NDMsNyBA
QCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlCiAgICAgLy8gMTAuMTEu
IEFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgQ1NTIHNwZWNpZmljYXRpb25zIHRvIG5vZGVzIHdpdGhp
biB0aGUKICAgICAvLyBmb2xsb3dpbmcgY29uc3RyYWludHMsIHRodXMgb2J0YWluaW5nIGEgc2V0
IG9mIENTUyBib3hlcyBwb3NpdGlvbmVkCiAgICAgLy8gcmVsYXRpdmUgdG8gYW4gaW5pdGlhbCBj
b250YWluaW5nIGJsb2NrOgotICAgIG1fZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7Cisg
ICAgZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7CiAKICAgICAvLyBUaGUgZG9jdW1lbnQg
dHJlZSBpcyB0aGUgdHJlZSBvZiBXZWJWVFQgTm9kZSBPYmplY3RzIHJvb3RlZCBhdCBub2Rlcy4K
IApAQCAtNzQyLDcgKzc1Myw3IEBAIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJh
Y2tDdWUKIAogICAgIC8vIE5vdGU6IFRoaXMgaXMgY29udGFpbmVkIGJ5IGRlZmF1bHQgaW4gbV9h
bGxEb2N1bWVudE5vZGVzLgogICAgIG1fYWxsRG9jdW1lbnROb2Rlcy0+c2V0UHNldWRvKGFsbE5v
ZGVzU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgbV9kaXNwbGF5VHJlZS0+YXBwZW5kQ2hpbGQobV9h
bGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCB0cnVlKTsKKyAgICBkaXNwbGF5
VHJlZS0+YXBwZW5kQ2hpbGQobV9hbGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBUSU9O
LCB0cnVlKTsKIAogICAgIC8vIEZJWE1FKEJVRyA3OTkxNik6IFJ1bnMgb2YgY2hpbGRyZW4gb2Yg
V2ViVlRUIFJ1YnkgT2JqZWN0cyB0aGF0IGFyZSBub3QKICAgICAvLyBXZWJWVFQgUnVieSBUZXh0
IE9iamVjdHMgbXVzdCBiZSB3cmFwcGVkIGluIGFub255bW91cyBib3hlcyB3aG9zZQpAQCAtNzU1
LDE4ICs3NjYsMTggQEAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZQog
ICAgIC8vIGlzIG5vIGxpbmUgYnJlYWtpbmcgb3Bwb3J0dW5pdHkuIChUaHVzLCBub3JtYWxseSB0
ZXh0IHdyYXBzIGFzIG5lZWRlZCwKICAgICAvLyBidXQgaWYgdGhlcmUgaXMgYSBwYXJ0aWN1bGFy
bHkgbG9uZyB3b3JkLCBpdCBkb2VzIG5vdCBvdmVyZmxvdyBhcyBpdAogICAgIC8vIG5vcm1hbGx5
IHdvdWxkIGluIENTUywgaXQgaXMgaW5zdGVhZCBmb3JjaWJseSB3cmFwcGVkIGF0IHRoZSBib3gn
cyBlZGdlLikKLSAgICBtX2Rpc3BsYXlUcmVlLT5hcHBseUNTU1Byb3BlcnRpZXMoKTsKKyAgICBk
aXNwbGF5VHJlZS0+YXBwbHlDU1NQcm9wZXJ0aWVzKHZpZGVvU2l6ZSk7CiAKICAgICBtX2Rpc3Bs
YXlUcmVlU2hvdWxkQ2hhbmdlID0gZmFsc2U7CiAKICAgICAvLyAxMC4xNS4gTGV0IGN1ZSdzIHRl
eHQgdHJhY2sgY3VlIGRpc3BsYXkgc3RhdGUgaGF2ZSB0aGUgQ1NTIGJveGVzIGluCiAgICAgLy8g
Ym94ZXMuCi0gICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CisgICAgcmV0dXJuIGRpc3BsYXlUcmVl
OwogfQogCiB2b2lkIFRleHRUcmFja0N1ZTo6cmVtb3ZlRGlzcGxheVRyZWUoKQogewotICAgIG1f
ZGlzcGxheVRyZWUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBkaXNwbGF5VHJl
ZUludGVybmFsKCktPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIH0KIAogc3RkOjpwYWly
PGRvdWJsZSwgZG91YmxlPiBUZXh0VHJhY2tDdWU6OmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMoKSBj
b25zdApAQCAtMTA2NSw2ICsxMDc2LDMzIEBAIEV2ZW50VGFyZ2V0RGF0YSogVGV4dFRyYWNrQ3Vl
OjplbnN1cmVFdmUKICAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCitib29sIFRl
eHRUcmFja0N1ZTo6b3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QKK3sK
KyAgICBpZiAoY3VlVHlwZSgpICE9IGN1ZS5jdWVUeXBlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGlmIChtX2VuZFRpbWUgIT0gY3VlLmVuZFRpbWUoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX3N0YXJ0VGltZSAhPSBjdWUuc3RhcnRUaW1lKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jb250ZW50ICE9IGN1ZS50ZXh0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zZXR0aW5ncyAhPSBjdWUuY3VlU2V0dGluZ3MoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lkICE9IGN1ZS5pZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdGV4dFBvc2l0aW9uICE9IGN1ZS5wb3NpdGlvbigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbGluZVBvc2l0aW9uICE9IGN1ZS5s
aW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jdWVTaXplICE9IGN1ZS5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYWxpZ24oKSAhPSBjdWUuYWxp
Z24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNTcs
MTEgKzU4LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBUZXh0VHJhY2tDdWUqIGdldEN1ZSgp
IGNvbnN0OwotICAgIHZvaWQgYXBwbHlDU1NQcm9wZXJ0aWVzKCk7CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1NpemUpOwogCiAgICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgdGV4dFRyYWNrQ3VlQm94U2hhZG93UHNldWRvSWQoKTsK
IAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBUZXh0VHJhY2tDdWVCb3goRG9jdW1lbnQqLCBU
ZXh0VHJhY2tDdWUqKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJl
cihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgT1ZFUlJJREU7CkBAIC0xNTEsNyArMTUyLDcg
QEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2b2lkIHNldElzQWN0aXZlKGJv
b2wpOwogCi0gICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlUcmVlKCk7
CisgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlUcmVlKGNvbnN0IElu
dFNpemUmIHZpZGVvU2l6ZSk7CiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5VHJlZShmbG9hdCk7CiAg
ICAgdm9pZCByZW1vdmVEaXNwbGF5VHJlZSgpOwogICAgIHZvaWQgbWFya0Z1dHVyZUFuZFBhc3RO
b2RlcyhDb250YWluZXJOb2RlKiwgZG91YmxlLCBkb3VibGUpOwpAQCAtMTczLDYgKzE3NCwyNSBA
QCBwdWJsaWM6CiAgICAgfTsKICAgICBXcml0aW5nRGlyZWN0aW9uIGdldFdyaXRpbmdEaXJlY3Rp
b24oKSBjb25zdCB7IHJldHVybiBtX3dyaXRpbmdEaXJlY3Rpb247IH0KIAorICAgIGVudW0gQ3Vl
QWxpZ25tZW50IHsKKyAgICAgICAgU3RhcnQsCisgICAgICAgIE1pZGRsZSwKKyAgICAgICAgRW5k
CisgICAgfTsKKyAgICBDdWVBbGlnbm1lbnQgZ2V0QWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4g
bV9jdWVBbGlnbm1lbnQ7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRl
eHRUcmFja0N1ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRl
eHRUcmFja0N1ZSYgY3VlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
Y3VlKTsKKyAgICB9CisgICAgCisgICAgZW51bSBDdWVUeXBlIHsKKyAgICAgICAgR2VuZXJpYywK
KyAgICAgICAgV2ViVlRUCisgICAgfTsKKyAgICB2aXJ0dWFsIEN1ZVR5cGUgY3VlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIFdlYlZUVDsgfQorCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNU
RU5FUihlbnRlcik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihleGl0KTsK
IApAQCAtMTgzLDkgKzIwMywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBFdmVudFRhcmdl
dERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBl
bnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotcHJpdmF0ZToKICAgICBUZXh0VHJhY2tDdWUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50KTsKIAorICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOyB9CisKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBjcmVhdGVEaXNwbGF5VHJlZSgp
OworICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5VHJlZUludGVybmFsKCk7
CisKK3ByaXZhdGU6CiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRQb3NpdGlvbkNv
b3JkaW5hdGVzKCkgY29uc3Q7CiAgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0cmluZyYp
OwogCkBAIC0yMTMsOCArMjM4LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRpbmdEaXJlY3Rpb24g
bV93cml0aW5nRGlyZWN0aW9uOwogCi0gICAgZW51bSBBbGlnbm1lbnQgeyBTdGFydCwgTWlkZGxl
LCBFbmQgfTsKLSAgICBBbGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAgQ3VlQWxpZ25tZW50
IG1fY3VlQWxpZ25tZW50OwogCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fd2ViVlRU
Tm9kZVRyZWU7CiAgICAgVGV4dFRyYWNrKiBtX3RyYWNrOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIlRleHRUcmFja0N1ZUdlbmVy
aWMuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NWYWx1
ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFRyYWNrQ3VlLmgiCisj
aW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRUcmFja0N1
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRUcmFja0N1ZUdlbmVyaWNC
b3hFbGVtZW50IDogcHVibGljIFRleHRUcmFja0N1ZUJveCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQ+IGNyZWF0ZShEb2N1bWVu
dCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZUdlbmVyaWMqIGN1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoZG9jdW1lbnQs
IGN1ZSkpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDU1NQcm9wZXJ0aWVz
KGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICAKK3ByaXZhdGU6CisgICAgVGV4dFRyYWNr
Q3VlR2VuZXJpY0JveEVsZW1lbnQoRG9jdW1lbnQqLCBUZXh0VHJhY2tDdWUqKTsKK307CisKK1Rl
eHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjpUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVu
dChEb2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZSogY3VlKQorICAgIDogVGV4dFRyYWNr
Q3VlQm94KGRvY3VtZW50LCBjdWUpCit7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlR2VuZXJpY0Jv
eEVsZW1lbnQ6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1NpemUpCit7
CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBDU1NWYWx1
ZUFic29sdXRlKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29k
ZUJpZGksIENTU1ZhbHVlV2Via2l0UGxhaW50ZXh0KTsKKyAgICAKKyAgICBUZXh0VHJhY2tDdWVH
ZW5lcmljKiBjdWUgPSBzdGF0aWNfY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljKj4oZ2V0Q3VlKCkp
OworCisgICAgc3RkOjpwYWlyPGZsb2F0LCBmbG9hdD4gcG9zaXRpb24gPSBjdWUtPmdldENTU1Bv
c2l0aW9uKCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUxlZnQsIHBv
c2l0aW9uLmZpcnN0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUb3AsIHBvc2l0aW9uLnNlY29uZCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKworICAgIGRvdWJsZSBzaXplID0gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihjdWUtPmdldENTU1NpemUoKSk7CisgICAgaWYgKGN1ZS0+Z2V0V3Jp
dGluZ0RpcmVjdGlvbigpID09IFRleHRUcmFja0N1ZTo6SG9yaXpvbnRhbCkgeworICAgICAgICBz
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0aW9uLCBDU1NWYWx1ZUx0cik7
CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgc2l6ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICAgICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgQ1NTVmFsdWVBdXRvKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIENTU1Zh
bHVlQXV0byk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlIZWln
aHQsIHNpemUsICBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIH0KKwor
ICAgIGlmIChjdWUtPmJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgpKSB7CisgICAg
ICAgIGRvdWJsZSBmb250U2l6ZSA9IHZpZGVvU2l6ZS5oZWlnaHQoKSAqIGN1ZS0+YmFzZUZvbnRT
aXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkgLyAxMDA7CisgICAgICAgIGlmIChjdWUtPmZvbnRT
aXplTXVsdGlwbGllcigpKQorICAgICAgICAgICAgZm9udFNpemUgKj0gY3VlLT5mb250U2l6ZU11
bHRpcGxpZXIoKSAvIDEwMDsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUZvbnRTaXplLCBTdHJpbmc6Om51bWJlcihmb250U2l6ZSkgKyAicHgiKTsKKyAgICB9CisK
KyAgICBpZiAoY3VlLT5nZXRBbGlnbm1lbnQoKSA9PSBUZXh0VHJhY2tDdWU6OlN0YXJ0KQorICAg
ICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFsaWduLCBDU1NWYWx1
ZVN0YXJ0KTsKKyAgICBlbHNlIGlmIChjdWUtPmdldEFsaWdubWVudCgpID09IFRleHRUcmFja0N1
ZTo6RW5kKQorICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4dEFs
aWduLCBDU1NWYWx1ZUVuZCk7CisgICAgZWxzZQorICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5VGV4dEFsaWduLCBDU1NWYWx1ZUNlbnRlcik7CisKKyAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0V3JpdGluZ01vZGUsIGN1ZS0+Z2V0Q1NT
V3JpdGluZ01vZGUoKSwgZmFsc2UpOworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlXaGl0ZVNwYWNlLCBDU1NWYWx1ZVByZVdyYXApOworICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlXb3JkQnJlYWssIENTU1ZhbHVlTm9ybWFsKTsKK30KKworVGV4dFRy
YWNrQ3VlR2VuZXJpYzo6VGV4dFRyYWNrQ3VlR2VuZXJpYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKKyAgICA6VGV4dFRyYWNrQ3VlKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpCit7Cit9
CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVh
dGVEaXNwbGF5VHJlZSgpCit7CisgICAgcmV0dXJuIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVt
ZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpLCB0aGlzKTsKK30KKworYm9vbCBUZXh0VHJhY2tD
dWVHZW5lcmljOjpvcGVyYXRvcj09KGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAorewor
ICAgIGlmIChjdWUuY3VlVHlwZSgpICE9IFRleHRUcmFja0N1ZTo6R2VuZXJpYykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgVGV4dFRyYWNrQ3VlR2VuZXJpYyogb3RoZXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0VHJhY2tDdWVHZW5lcmljKj4oJmN1ZSk7CisKKyAgICBpZiAo
bV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQgIT0gb3RoZXItPmJhc2VGb250U2l6
ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KG1fZm9udFNpemVNdWx0aXBsaWVyICE9IG90aGVyLT5mb250U2l6ZU11bHRpcGxpZXIoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZvbnROYW1lICE9IG90aGVyLT5mb250TmFt
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlOjpv
cGVyYXRvcj09KGN1ZSk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5l
cmljLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
a0N1ZUdlbmVyaWMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBUZXh0VHJhY2tDdWVHZW5lcmljX2gKKyNkZWZpbmUgVGV4dFRyYWNrQ3VlR2VuZXJpY19o
CisKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgor
I2luY2x1ZGUgIlRleHRUcmFja0N1ZS5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1
Y3QgR2VuZXJpY0N1ZURhdGE7CisKK2NsYXNzIFRleHRUcmFja0N1ZUdlbmVyaWMgOiBwdWJsaWMg
VGV4dFRyYWNrQ3VlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0VHJhY2tD
dWVHZW5lcmljPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgZG91Ymxl
IHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRleHRUcmFja0N1ZUdlbmVyaWMoY29udGV4dCwgc3RhcnQs
IGVuZCwgY29udGVudCkpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5UZXh0VHJhY2tDdWVH
ZW5lcmljKCkgeyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBj
cmVhdGVEaXNwbGF5VHJlZSgpIE9WRVJSSURFOworCisgICAgZG91YmxlIGJhc2VGb250U2l6ZVJl
bGF0aXZlVG9WaWRlb0hlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZUZvbnRTaXplUmVsYXRp
dmVUb1ZpZGVvSGVpZ2h0OyB9CisgICAgdm9pZCBzZXRCYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlk
ZW9IZWlnaHQoZG91YmxlIHNpemUpIHsgbV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWln
aHQgPSBzaXplOyB9CisKKyAgICBkb3VibGUgZm9udFNpemVNdWx0aXBsaWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250U2l6ZU11bHRpcGxpZXI7IH0KKyAgICB2b2lkIHNldEZvbnRTaXplTXVsdGlw
bGllcihkb3VibGUgc2l6ZSkgeyBtX2ZvbnRTaXplTXVsdGlwbGllciA9IHNpemU7IH0KKworICAg
IFN0cmluZyBmb250TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE5hbWU7IH0KKyAgICB2b2lk
IHNldEZvbnROYW1lKFN0cmluZyBuYW1lKSB7IG1fZm9udE5hbWUgPSBuYW1lOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25zdCBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkg
Y29uc3QgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IGN1ZSk7Cisg
ICAgfQorCisgICAgdmlydHVhbCBUZXh0VHJhY2tDdWU6OkN1ZVR5cGUgY3VlVHlwZSgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIFRleHRUcmFja0N1ZTo6R2VuZXJpYzsgfQorCitwcml2YXRlOgor
ICAgIFRleHRUcmFja0N1ZUdlbmVyaWMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGRvdWJsZSBz
dGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJik7CisgICAgCisgICAgZG91YmxlIG1fYmFz
ZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0OworICAgIGRvdWJsZSBtX2ZvbnRTaXplTXVs
dGlwbGllcjsKKyAgICBTdHJpbmcgbV9mb250TmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50
LmgJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0luYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTIgKzM0
LDQ1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZTsKIAorc3RydWN0IEdlbmVyaWNDdWVEYXRhIHsKKyAgICBHZW5lcmljQ3VlRGF0YSgpCisgICAg
ICAgIDogc3RhcnRUaW1lKDApCisgICAgICAgICwgZW5kVGltZSgwKQorICAgICAgICAsIGxpbmUo
LTEpCisgICAgICAgICwgcG9zaXRpb24oLTEpCisgICAgICAgICwgc2l6ZSgtMSkKKyAgICAgICAg
LCBhbGlnbihOb25lKQorICAgICAgICAsIGJhc2VGb250U2l6ZSgwKQorICAgICAgICAsIHJlbGF0
aXZlRm9udFNpemUoMCkKKyAgICB7CisgICAgfQorCisgICAgZW51bSBhbGlnbm1lbnQgeworICAg
ICAgICBOb25lLAorICAgICAgICBTdGFydCwKKyAgICAgICAgTWlkZGxlLAorICAgICAgICBFbmQK
KyAgICB9OworCisgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBkb3VibGUgZW5kVGltZTsKKyAg
ICBTdHJpbmcgaWQ7CisgICAgU3RyaW5nIGNvbnRlbnQ7CisgICAgZG91YmxlIGxpbmU7CisgICAg
ZG91YmxlIHBvc2l0aW9uOworICAgIGRvdWJsZSBzaXplOworICAgIGFsaWdubWVudCBhbGlnbjsK
KyAgICBTdHJpbmcgZm9udE5hbWU7CisgICAgZG91YmxlIGJhc2VGb250U2l6ZTsKKyAgICBkb3Vi
bGUgcmVsYXRpdmVGb250U2l6ZTsKK307CisKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVD
bGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgfkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGll
bnQoKSB7IH0KICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ3VlKEluYmFuZFRleHRUcmFja1By
aXZhdGUqLCBkb3VibGUgLypzdGFydCovLCBkb3VibGUgLyplbmQqLywgY29uc3QgU3RyaW5nJiAv
KmlkKi8sIGNvbnN0IFN0cmluZyYgLypjb250ZW50Ki8sIGNvbnN0IFN0cmluZyYgLypzZXR0aW5n
cyovKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGhhc0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRl
KiwgZG91YmxlIC8qc3RhcnQqLywgZG91YmxlIC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCov
LCBjb25zdCBTdHJpbmcmIC8qY29udGVudCovLCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRXZWJWVFRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSosIGRvdWJsZSAvKnN0YXJ0Ki8sIGRvdWJsZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQq
LywgY29uc3QgU3RyaW5nJiAvKmNvbnRlbnQqLywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkR2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2
YXRlKiwgY29uc3QgR2VuZXJpY0N1ZURhdGEmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYuY3BwCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYuaCIKIAorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIKQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNs
dWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hh
cmFjdGVyTmFtZXMuaD4KIAogU09GVF9MSU5LX0ZSQU1FV09SS19PUFRJT05BTChDb3JlTWVkaWEp
CiAKQEAgLTUyLDYgKzU0LDkgQEAgU09GVF9MSU5LX1BPSU5URVJfT1BUSU9OQUwoQ29yZU1lZGlh
LCBrQwogU09GVF9MSU5LX1BPSU5URVJfT1BUSU9OQUwoQ29yZU1lZGlhLCBrQ01UZXh0TWFya3Vw
QXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0LCBDRlN0cmluZ1JlZikKIFNPRlRfTElOS19QT0lOVEVS
X09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dFZlcnRpY2FsTGF5b3V0X0xlZnRUb1JpZ2h0LCBD
RlN0cmluZ1JlZikKIFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4
dFZlcnRpY2FsTGF5b3V0X1JpZ2h0VG9MZWZ0LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lO
VEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNp
emVQZXJjZW50YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0LCBDRlN0cmluZ1JlZikKK1NPRlRfTElO
S19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9SZWxh
dGl2ZUZvbnRTaXplLCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENv
cmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9Gb250RmFtaWx5TmFtZSwgQ0ZTdHJpbmdS
ZWYpCiAKICNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9BbGlnbm1lbnQgZ2V0a0NNVGV4
dE1hcmt1cEF0dHJpYnV0ZV9BbGlnbm1lbnQoKQogI2RlZmluZSBrQ01UZXh0TWFya3VwQWxpZ25t
ZW50VHlwZV9TdGFydCBnZXRrQ01UZXh0TWFya3VwQWxpZ25tZW50VHlwZV9TdGFydCgpCkBAIC02
Niw2ICs3MSw5IEBAIFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0MKICNk
ZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0aWNhbExheW91dCBnZXRrQ01UZXh0TWFy
a3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0KCkKICNkZWZpbmUga0NNVGV4dFZlcnRpY2FsTGF5
b3V0X0xlZnRUb1JpZ2h0IGdldGtDTVRleHRWZXJ0aWNhbExheW91dF9MZWZ0VG9SaWdodCgpCiAj
ZGVmaW5lIGtDTVRleHRWZXJ0aWNhbExheW91dF9SaWdodFRvTGVmdCBnZXRrQ01UZXh0VmVydGlj
YWxMYXlvdXRfUmlnaHRUb0xlZnQoKQorI2RlZmluZSBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0Jh
c2VGb250U2l6ZVBlcmNlbnRhZ2VSZWxhdGl2ZVRvVmlkZW9IZWlnaHQgZ2V0a0NNVGV4dE1hcmt1
cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkK
KyNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9SZWxhdGl2ZUZvbnRTaXplIGdldGtDTVRl
eHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6ZSgpCisjZGVmaW5lIGtDTVRleHRNYXJr
dXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9Gb250
RmFtaWx5TmFtZSgpCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTg0LDcgKzkyLDcgQEAg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFuZFRleHRUcgogICAgIGRpc2Nvbm5lY3Qo
KTsKIH0KIAotdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmli
dXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZywgU3RyaW5nQnVpbGRl
ciYgY29udGVudCwgU3RyaW5nQnVpbGRlciYgc2V0dGluZ3MpCit2b2lkIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiBh
dHRyaWJ1dGVkU3RyaW5nLCBHZW5lcmljQ3VlRGF0YSogY3VlRGF0YSkKIHsKICAgICAvLyBTb21l
IG9mIHRoZSBhdHRyaWJ1dGVzIHdlIHRyYW5zbGF0ZSBpbnRvIHBlci1jdWUgV2ViVlRUIHNldHRp
bmdzIGFyZSBhcmUgcmVwZWF0ZWQgb24gZWFjaCBwYXJ0IG9mIGFuIGF0dHJpYnV0ZWQgc3RyaW5n
IHNvIG9ubHkKICAgICAvLyBwcm9jZXNzIHRoZSBmaXJzdCBpbnN0YW5jZSBvZiBlYWNoLgpAQCAt
OTMsMTAgKzEwMSwxMiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3ND
CiAgICAgICAgIFBvc2l0aW9uID0gMSA8PCAxLAogICAgICAgICBTaXplID0gMSA8PCAyLAogICAg
ICAgICBWZXJ0aWNhbCA9IDEgPDwgMywKLSAgICAgICAgQWxpZ24gPSAxIDw8IDQKKyAgICAgICAg
QWxpZ24gPSAxIDw8IDQsCisgICAgICAgIEZvbnROYW1lID0gMSA8PCA1CiAgICAgfTsKICAgICB1
bnNpZ25lZCBwcm9jZXNzZWQgPSAwOwogCisgICAgU3RyaW5nQnVpbGRlciBjb250ZW50OwogICAg
IFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nVmFsdWUgPSBDRkF0dHJpYnV0ZWRTdHJpbmdHZXRTdHJp
bmcoYXR0cmlidXRlZFN0cmluZyk7CiAgICAgQ0ZJbmRleCBsZW5ndGggPSBhdHRyaWJ1dGVkU3Ry
aW5nVmFsdWUubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5ndGgpCkBAIC0xMTAsNiArMTIwLDcgQEAg
dm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgU3RyaW5nQnVpbGRlciB0YWdTdGFydDsKKyAgICAgICAgQ0ZTdHJp
bmdSZWYgdmFsdWVTdHJpbmc7CiAgICAgICAgIFN0cmluZyB0YWdFbmQ7CiAgICAgICAgIENGSW5k
ZXggYXR0cmlidXRlQ291bnQgPSBDRkRpY3Rpb25hcnlHZXRDb3VudChhdHRyaWJ1dGVzKTsKICAg
ICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBrZXlzKGF0dHJpYnV0ZUNvdW50KTsKQEAgLTEyMyw3
ICsxMzQsNyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUo
a2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0FsaWdubWVudCwgMCkgPT0ga0NGQ29tcGFyZUVx
dWFsVG8pIHsKLSAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiB2YWx1ZVN0cmluZyA9IHN0YXRp
Y19jYXN0PENGU3RyaW5nUmVmPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcg
PSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUpOwogICAgICAgICAgICAgICAgIGlmIChD
RkdldFR5cGVJRCh2YWx1ZVN0cmluZykgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQoKSB8fCAhQ0ZTdHJp
bmdHZXRMZW5ndGgodmFsdWVTdHJpbmcpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkICYgQWxpZ24pCkBAIC0xMzEsMTEgKzE0Miwx
MSBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAg
ICAgICAgcHJvY2Vzc2VkIHw9IEFsaWduOwogCiAgICAgICAgICAgICAgICAgaWYgKENGU3RyaW5n
Q29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfU3RhcnQsIDAp
ID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBl
bmQoImFsaWduOnN0YXJ0ICIpOworICAgICAgICAgICAgICAgICAgICBjdWVEYXRhLT5hbGlnbiA9
IEdlbmVyaWNDdWVEYXRhOjpTdGFydDsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChDRlN0cmlu
Z0NvbXBhcmUodmFsdWVTdHJpbmcsIGtDTVRleHRNYXJrdXBBbGlnbm1lbnRUeXBlX01pZGRsZSwg
MCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCi0gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmFw
cGVuZCgiYWxpZ246bWlkZGxlICIpOworICAgICAgICAgICAgICAgICAgICBjdWVEYXRhLT5hbGln
biA9IEdlbmVyaWNDdWVEYXRhOjpNaWRkbGU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZT
dHJpbmdDb21wYXJlKHZhbHVlU3RyaW5nLCBrQ01UZXh0TWFya3VwQWxpZ25tZW50VHlwZV9FbmQs
IDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5h
cHBlbmQoImFsaWduOmVuZCAiKTsKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+YWxpZ24g
PSBHZW5lcmljQ3VlRGF0YTo6RW5kOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKQEAgLTE3MCw5ICsxODEsNiBAQCB2b2lk
IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRl
X09ydGhvZ29uYWxMaW5lUG9zaXRpb25QZXJjZW50YWdlUmVsYXRpdmVUb1dyaXRpbmdEaXJlY3Rp
b24sIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWdub3Jl
IHRoZSBsaW5lIHBvc2l0aW9uIGlmIHRoZSBhdHRyaWJ1dGVzIGFsc28gc3BlY2lmeSAic2l6ZSIg
c28gd2Uga2VlcCBXZWJWVFQncyBkZWZhdWx0IGxpbmUgbG9naWMKLSAgICAgICAgICAgICAgICBp
ZiAoQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoYXR0cmlidXRlcywga0NNVGV4dE1hcmt1cEF0dHJpYnV0
ZV9Xcml0aW5nRGlyZWN0aW9uU2l6ZVBlcmNlbnRhZ2UpKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9IENGTnVt
YmVyR2V0VHlwZUlEKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIGlmIChwcm9jZXNzZWQgJiBMaW5lKQpAQCAtMTgwLDkgKzE4OCw3IEBAIHZvaWQgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0MKICAgICAgICAgICAgICAgICBwcm9jZXNz
ZWQgfD0gTGluZTsKIAogICAgICAgICAgICAgICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0g
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBkb3VibGUg
cG9zaXRpb247Ci0gICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwg
a0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZwb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgc2V0dGlu
Z3MuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJsaW5lOiVsZCUlICIsIGxyaW50KHBvc2l0aW9uKSkp
OworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJl
ckZsb2F0NjRUeXBlLCAmY3VlRGF0YS0+bGluZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAKQEAgLTE5NCw5ICsyMDAsNyBAQCB2b2lkIEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IFBvc2l0
aW9uOwogCiAgICAgICAgICAgICAgICAgQ0ZOdW1iZXJSZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNf
Y2FzdDxDRk51bWJlclJlZj4odmFsdWUpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBwb3NpdGlv
bjsKLSAgICAgICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1i
ZXJGbG9hdDY0VHlwZSwgJnBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBl
bmQoU3RyaW5nOjpmb3JtYXQoInBvc2l0aW9uOiVsZCUlICIsIGxyaW50KHBvc2l0aW9uKSkpOwor
ICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJlckZs
b2F0NjRUeXBlLCAmY3VlRGF0YS0+cG9zaXRpb24pOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogCkBAIC0yMDgsMTYgKzIxMiw2MCBAQCB2b2lkIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IFNp
emU7CiAKICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRpY19j
YXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHBvc2l0aW9u
OwotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJl
ckZsb2F0NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmFwcGVu
ZChTdHJpbmc6OmZvcm1hdCgic2l6ZTolbGQlJSAiLCBscmludChwb3NpdGlvbikpKTsKKyAgICAg
ICAgICAgICAgICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0
VHlwZSwgJmN1ZURhdGEtPnNpemUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwga0NNVGV4dE1h
cmt1cEF0dHJpYnV0ZV9WZXJ0aWNhbExheW91dCwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsK
KyAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPih2
YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlU3RyaW5nKSAhPSBD
RlN0cmluZ0dldFR5cGVJRCgpIHx8ICFDRlN0cmluZ0dldExlbmd0aCh2YWx1ZVN0cmluZykpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUodmFsdWVTdHJpbmcsIGtDTVRleHRWZXJ0aWNhbExh
eW91dF9MZWZ0VG9SaWdodCwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgICAg
ICAgICAgIHRhZ1N0YXJ0LmFwcGVuZChsZWZ0VG9SaWdodE1hcmspOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dFZlcnRpY2FsTGF5
b3V0X1JpZ2h0VG9MZWZ0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKKyAgICAgICAgICAgICAg
ICAgICAgdGFnU3RhcnQuYXBwZW5kKHJpZ2h0VG9MZWZ0TWFyayk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChD
RlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0Jhc2VGb250U2l6ZVBl
cmNlbnRhZ2VSZWxhdGl2ZVRvVmlkZW9IZWlnaHQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7
CisgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRk51bWJlckdldFR5
cGVJRCgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRpY19jYXN0PENG
TnVtYmVyUmVmPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1
ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZjdWVEYXRhLT5iYXNlRm9udFNpemUpOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0
ZV9SZWxhdGl2ZUZvbnRTaXplLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICAg
ICAgICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZSkgIT0gQ0ZOdW1iZXJHZXRUeXBlSUQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgQ0ZOdW1iZXJSZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
dmFsdWUpOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtD
Rk51bWJlckZsb2F0NjRUeXBlLCAmY3VlRGF0YS0+cmVsYXRpdmVGb250U2l6ZSk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChDRlN0
cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0ZvbnRGYW1pbHlOYW1lLCAw
KSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0g
c3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZH
ZXRUeXBlSUQodmFsdWVTdHJpbmcpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5n
R2V0TGVuZ3RoKHZhbHVlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZCAmIEZvbnROYW1lKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzZWQgfD0gRm9udE5hbWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VlRGF0YS0+Zm9udE5hbWUgPSB2YWx1
ZVN0cmluZzsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQorCiAgICAgICAgIGNvbnRlbnQuYXBwZW5kKHRhZ1N0YXJ0KTsKICAgICAgICAgY29udGVu
dC5hcHBlbmQoYXR0cmlidXRlZFN0cmluZ1ZhbHVlLnN1YnN0cmluZyhlZmZlY3RpdmVSYW5nZS5s
b2NhdGlvbiwgZWZmZWN0aXZlUmFuZ2UubGVuZ3RoKSk7CiAgICAgICAgIGNvbnRlbnQuYXBwZW5k
KHRhZ0VuZCk7CiAgICAgfQorCisgICAgaWYgKGNvbnRlbnQubGVuZ3RoKCkpCisgICAgICAgIGN1
ZURhdGEtPmNvbnRlbnQgPSBjb250ZW50LnRvU3RyaW5nKCk7CiB9CiAKIHZvaWQgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZShDRkFycmF5UmVmIGF0dHJpYnV0ZWRTdHJpbmdz
LCBkb3VibGUgdGltZSkKQEAgLTIyOCwyMSArMjc2LDQ2IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRjo6cHJvY2Vzc0MKICAgICBpZiAobV9oYXZlUGFydGlhbEN1ZSkgewogICAgICAg
ICAvLyBDdWVzIGRvIG5vdCBoYXZlIGFuIGV4cGxpY2l0IGR1cmF0aW9uLCB0aGV5IGFyZSBkaXNw
bGF5ZWQgdW50aWwgdGhlIG5leHQgImN1ZSIgKHdoaWNoIG1pZ2h0IGJlIGVtcHR5KSBpcyBlbWl0
dGVkLgogICAgICAgICBtX2N1cnJlbnRDdWVFbmRUaW1lID0gdGltZTsKLSAgICAgICAgTE9HKE1l
ZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZSBmbHVzaGluZyBjdWU6
IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBzZXR0aW5ncz1cIiVzXCIsIGNvbnRlbnQ9XCIlc1wiIFxu
IiwKLSAgICAgICAgICAgIG1fY3VycmVudEN1ZVN0YXJ0VGltZSwgbV9jdXJyZW50Q3VlRW5kVGlt
ZSwKLSAgICAgICAgICAgIG1fY3VycmVudEN1ZVNldHRpbmdzLnRvU3RyaW5nKCkudXRmOCgpLmRh
dGEoKSwgbV9jdXJyZW50Q3VlQ29udGVudC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICAgICBtX3BsYXllci0+Zmx1c2hDdXJyZW50Q3VlKHRoaXMpOworCisgICAgICAgIGlmIChtX2N1
cnJlbnRDdWVFbmRUaW1lID49IG1fY3VycmVudEN1ZVN0YXJ0VGltZSkgeworICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2N1ZXMuc2l6ZSgpOyBpKyspIHsKKworICAgICAgICAg
ICAgICAgIEdlbmVyaWNDdWVEYXRhKiBjdWVEYXRhID0gbV9jdWVzW2ldOworCisgICAgICAgICAg
ICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZSBm
bHVzaGluZyBjdWU6IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBjb250ZW50PVwiJXNcIiBcbiIsCisg
ICAgICAgICAgICAgICAgICAgIG1fY3VycmVudEN1ZVN0YXJ0VGltZSwgbV9jdXJyZW50Q3VlRW5k
VGltZSwgY3VlRGF0YS0+Y29udGVudC51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoIWN1ZURhdGEtPmNvbnRlbnQubGVuZ3RoKCkpCisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGN1ZURhdGEtPnN0YXJ0VGltZSA9IG1fY3VycmVudEN1ZVN0YXJ0VGltZTsKKyAgICAgICAgICAg
ICAgICBjdWVEYXRhLT5lbmRUaW1lID0gbV9jdXJyZW50Q3VlRW5kVGltZTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBBVkZvdW5kYXRpb24gY3VlICJwb3NpdGlvbiIgaXMg
dG8gdGhlIGNlbnRlciBvZiB0aGUgdGV4dCBzbyBhZGp1c3QgcmVsYXRpdmUgdG8gdGhlIGVkZ2Ug
YmVjYXVzZSB3ZSB3aWxsIHVzZSBpdCB0bworICAgICAgICAgICAgICAgIC8vIHNldCBDU1MgImxl
ZnQiLgorICAgICAgICAgICAgICAgIGlmIChjdWVEYXRhLT5wb3NpdGlvbiA+PSAwICYmIGN1ZURh
dGEtPnNpemUgPiAwKQorICAgICAgICAgICAgICAgICAgICBjdWVEYXRhLT5wb3NpdGlvbiAtPSBj
dWVEYXRhLT5zaXplIC8gMjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3Bs
YXllci0+YWRkR2VuZXJpY0N1ZSh0aGlzLCAqY3VlRGF0YSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRjo6cHJvY2Vzc0N1ZSBuZWdhdGl2ZSBsZW5ndGggY3VlKHMpIGlnbm9yZWQ6IHN0YXJ0PSUu
MmYsIGVuZD0lLjJmXG4iLCBtX2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRp
bWUpOworCiAgICAgICAgIHJlc2V0Q3VlVmFsdWVzKCk7CiAgICAgfQogCiAgICAgQ0ZJbmRleCBj
b3VudCA9IENGQXJyYXlHZXRDb3VudChhdHRyaWJ1dGVkU3RyaW5ncyk7CisgICAgaWYgKCFjb3Vu
dCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykgewogICAgICAgICBDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZyA9
IHN0YXRpY19jYXN0PENGQXR0cmlidXRlZFN0cmluZ1JlZj4oQ0ZBcnJheUdldFZhbHVlQXRJbmRl
eChhdHRyaWJ1dGVkU3RyaW5ncywgaSkpOwogCiAgICAgICAgIGlmICghYXR0cmlidXRlZFN0cmlu
ZyB8fCAhQ0ZBdHRyaWJ1dGVkU3RyaW5nR2V0TGVuZ3RoKGF0dHJpYnV0ZWRTdHJpbmcpKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgcHJvY2Vzc0N1ZUF0dHJpYnV0ZXMoYXR0cmli
dXRlZFN0cmluZywgbV9jdXJyZW50Q3VlQ29udGVudCwgbV9jdXJyZW50Q3VlU2V0dGluZ3MpOwor
ICAgICAgICBtX2N1ZXMuYXBwZW5kKG5ldyBHZW5lcmljQ3VlRGF0YSk7CisgICAgICAgIHByb2Nl
c3NDdWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZWRTdHJpbmcsIG1fY3Vlc1tpXSk7CiAgICAgICAgIG1f
Y3VycmVudEN1ZVN0YXJ0VGltZSA9IHRpbWU7CiAgICAgICAgIG1faGF2ZVBhcnRpYWxDdWUgPSB0
cnVlOwogICAgIH0KQEAgLTI1NiwxNyArMzI5LDEzIEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRjo6ZGlzY29ubmUKIAogdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpyZXNl
dEN1ZVZhbHVlcygpCiB7Ci0gICAgaWYgKG1faGF2ZVBhcnRpYWxDdWUgJiYgIW1fY3VycmVudEN1
ZUVuZFRpbWUpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
Rjo6cmVzZXRDdWVWYWx1ZXMgZmx1c2hpbmcgZGF0YSBmb3IgY3VlOiBzdGFydD0lLjJmLCBlbmQ9
JS4yZiwgc2V0dGluZ3M9XCIlc1wiLCBjb250ZW50PVwiJXNcIiBcbiIsCi0gICAgICAgICAgICBt
X2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIG1fY3VycmVudEN1ZVNl
dHRpbmdzLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9jdXJyZW50Q3VlQ29udGVudC50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KKyAgICBpZiAobV9oYXZlUGFydGlhbEN1ZSAm
JiAhbV9jdXJyZW50Q3VlRW5kVGltZSkKKyAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWVWYWx1ZXMgZmx1c2hpbmcgZGF0YSBmb3IgY3Vlczogc3Rh
cnQ9JS4yZlxuIiwgbV9jdXJyZW50Q3VlU3RhcnRUaW1lKTsKIAorICAgIG1fY3Vlcy5yZXNpemUo
MCk7CiAgICAgbV9oYXZlUGFydGlhbEN1ZSA9IGZhbHNlOwotICAgIG1fY3VycmVudEN1ZUlkID0g
U3RyaW5nKCk7CiAgICAgbV9jdXJyZW50Q3VlU3RhcnRUaW1lID0gMDsKICAgICBtX2N1cnJlbnRD
dWVFbmRUaW1lID0gMDsKLSAgICBtX2N1cnJlbnRDdWVTZXR0aW5ncy5jbGVhcigpOwotICAgIG1f
Y3VycmVudEN1ZUNvbnRlbnQuY2xlYXIoKTsKIH0KIAogdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGOjpzZXRNb2RlKEluYmFuZFRleHRUcmFja1ByaXZhdGU6Ok1vZGUgbmV3TW9kZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAkocmV2
aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMjAg
KzM1LDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjsKK3N0cnVjdCBHZW5lcmljQ3VlRGF0YTsKIAogY2xhc3MgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRiA6IHB1YmxpYyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlIHsKIHB1Ymxp
YzoKLSAgICB+SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRigpOwotCi0gICAgU3RyaW5nIGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q3VlSWQ7IH0KLSAgICBkb3VibGUgc3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX2N1cnJlbnRDdWVTdGFydFRpbWU7IH0KLSAgICBkb3VibGUgZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50Q3VlRW5kVGltZTsgfQotICAgIFN0cmluZyBzZXR0aW5ncygp
IHsgcmV0dXJuIG1fY3VycmVudEN1ZVNldHRpbmdzLnRvU3RyaW5nKCk7IH0KLSAgICBTdHJpbmcg
Y29udGVudCgpIHsgcmV0dXJuIG1fY3VycmVudEN1ZUNvbnRlbnQudG9TdHJpbmcoKTsgfQogCi0g
ICAgdm9pZCBwcm9jZXNzQ3VlKENGQXJyYXlSZWYsIGRvdWJsZSk7Ci0KLSAgICB2b2lkIHJlc2V0
Q3VlVmFsdWVzKCk7CisgICAgfkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYoKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRNb2RlKEluYmFuZFRleHRUcmFja1ByaXZhdGU6Ok1vZGUpIE9WRVJSSURF
OwogCkBAIC02MCwxNiArNTIsMTggQEAgcHVibGljOgogICAgIGJvb2wgaGFzQmVlblJlcG9ydGVk
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNCZWVuUmVwb3J0ZWQ7IH0KICAgICB2b2lkIHNldEhhc0Jl
ZW5SZXBvcnRlZChib29sIHJlcG9ydGVkKSB7IG1faGFzQmVlblJlcG9ydGVkID0gcmVwb3J0ZWQ7
IH0KIAorICAgIHZvaWQgcHJvY2Vzc0N1ZShDRkFycmF5UmVmLCBkb3VibGUpOworICAgIHZvaWQg
cmVzZXRDdWVWYWx1ZXMoKTsKKwogcHJvdGVjdGVkOgogICAgIEluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYoTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uKik7CiAKLSAgICB2b2lkIHByb2Nl
c3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiwgU3RyaW5nQnVpbGRlciYgY29u
dGVudCwgU3RyaW5nQnVpbGRlciYgc2V0dGluZ3MpOworICAgIHZvaWQgcHJvY2Vzc0N1ZUF0dHJp
YnV0ZXMoQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmLCBHZW5lcmljQ3VlRGF0YSopOwogCi0gICAgU3Ry
aW5nIG1fY3VycmVudEN1ZUlkOwogICAgIGRvdWJsZSBtX2N1cnJlbnRDdWVTdGFydFRpbWU7CiAg
ICAgZG91YmxlIG1fY3VycmVudEN1ZUVuZFRpbWU7Ci0gICAgU3RyaW5nQnVpbGRlciBtX2N1cnJl
bnRDdWVTZXR0aW5nczsKLSAgICBTdHJpbmdCdWlsZGVyIG1fY3VycmVudEN1ZUNvbnRlbnQ7CisK
KyAgICBWZWN0b3I8R2VuZXJpY0N1ZURhdGEqPiBtX2N1ZXM7CiAKICAgICBNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb24qIG1fcGxheWVyOwogICAgIGludCBtX2luZGV4OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5j
cHAJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01ODIsNiArNTgyLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uOjpzZWUKICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OnNlZWtDb21wbGV0ZWQoJXApIC0gZmluaXNoZWQgPSAlZCIsIHRoaXMsIGZpbmlzaGVkKTsK
ICAgICBVTlVTRURfUEFSQU0oZmluaXNoZWQpOwogCisjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVY
VF9UUkFDS19TVVBQT1JUKQorICAgIGlmIChjdXJyZW50VHJhY2soKSkKKyAgICAgICAgY3VycmVu
dFRyYWNrKCktPnJlc2V0Q3VlVmFsdWVzKCk7CisjZW5kaWYKKwogICAgIG1fc2Vla1RvID0gTWVk
aWFQbGF5ZXI6OmludmFsaWRUaW1lKCk7CiAgICAgdXBkYXRlU3RhdGVzKCk7CiAgICAgbV9wbGF5
ZXItPnRpbWVDaGFuZ2VkKCk7CkBAIC04MTEsMTkgKzgxNiwxMyBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbjo6ZGlzCiB9CiAKICNpZiBIQVZFKEFWRk9VTkRBVElPTl9URVhU
X1RSQUNLX1NVUFBPUlQpCi12b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Zmx1
c2hDdXJyZW50Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqIHRyYWNrKQordm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRiogdHJhY2ssIGNvbnN0IEdlbmVyaWNDdWVEYXRhJiBjdWVEYXRhKQogewogICAg
IGlmICghdHJhY2stPmNsaWVudCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBBVkZvdW5k
YXRpb24gcmV0dXJucyBhIGN1ZSBldmVyeSB0aW1lIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLCBvbmx5
IGFkZCBpdCBvbmNlLgotICAgIGlmICh0cmFjay0+Y2xpZW50KCktPmhhc0N1ZSh0cmFjaywgdHJh
Y2stPnN0YXJ0KCksIHRyYWNrLT5lbmQoKSwgdHJhY2stPmlkKCksIHRyYWNrLT5jb250ZW50KCks
IHRyYWNrLT5zZXR0aW5ncygpKSkgewotICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclBy
aXZhdGVBVkZvdW5kYXRpb246OmZsdXNoQ3VycmVudEN1ZSglcCkgLSBhbHJlYWR5IGhhdmUgY3Vl
IGZvciB0aW1lICUuMmYiLCB0aGlzLCB0cmFjay0+c3RhcnQoKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246
OmZsdXNoQ3VycmVudEN1ZSglcCkgLSBhZGRpbmcgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCB0
cmFjay0+c3RhcnQoKSk7Ci0gICAgdHJhY2stPmNsaWVudCgpLT5hZGRDdWUodHJhY2ssIHRyYWNr
LT5zdGFydCgpLCB0cmFjay0+ZW5kKCksIHRyYWNrLT5pZCgpLCB0cmFjay0+Y29udGVudCgpLCB0
cmFjay0+c2V0dGluZ3MoKSk7CisgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjphZGRHZW5lcmljQ3VlKCVwKSAtIGFkZGluZyBjdWUgZm9yIHRpbWUgJS4yZiIs
IHRoaXMsIGN1ZURhdGEuc3RhcnRUaW1lKTsKKyAgICB0cmFjay0+Y2xpZW50KCktPmFkZEdlbmVy
aWNDdWUodHJhY2ssIGN1ZURhdGEpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbjo6Y29uZmlndXJlSW5iYW5kVHJhY2tzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDEzOTg5
MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGOworc3RydWN0IEdlbmVyaWNDdWVEYXRhOwogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb24gOiBwdWJsaWMgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIHB1Ymxp
YzoKQEAgLTExOCw3ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhck1haW5UaHJlYWRQ
ZW5kaW5nRmxhZygpOwogCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQT1JU
KQotICAgIHZvaWQgZmx1c2hDdXJyZW50Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqKTsK
KyAgICB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRiosIGNvbnN0
IEdlbmVyaWNDdWVEYXRhJik7CiAgICAgdm9pZCB0cmFja01vZGVDaGFuZ2VkKCk7CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2
LDcgQEAgU09GVF9MSU5LX0NMQVNTKEFWRm91bmRhdGlvbiwgQVZNZWRpYVNlbAogU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNMZWdpYmxlLCBOU1N0
cmluZyAqKQogU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVN1YnRp
dGxlLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlh
Q2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXMsIE5TU3RyaW5nICopCitT
T0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRU
ZXh0U3R5bGluZ1Jlc29sdXRpb25Tb3VyY2VBbmRSdWxlc09ubHksIE5TU3RyaW5nICopCiAKICNk
ZWZpbmUgQVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dCBnZXRBVlBsYXllckl0ZW1MZWdpYmxlT3V0
cHV0Q2xhc3MoKQogI2RlZmluZSBBVk1lZGlhU2VsZWN0aW9uR3JvdXAgZ2V0QVZNZWRpYVNlbGVj
dGlvbkdyb3VwQ2xhc3MoKQpAQCAtMTEzLDYgKzExNCw3IEBAIFNPRlRfTElOS19QT0lOVEVSKEFW
Rm91bmRhdGlvbiwgQVZNZWRpYUMKICNkZWZpbmUgQVZNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJs
ZSBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNMZWdpYmxlKCkKICNkZWZpbmUgQVZNZWRpYVR5cGVT
dWJ0aXRsZSBnZXRBVk1lZGlhVHlwZVN1YnRpdGxlKCkKICNkZWZpbmUgQVZNZWRpYUNoYXJhY3Rl
cmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3Rp
Y0NvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlcygpCisjZGVmaW5lIEFWUGxheWVySXRlbUxlZ2li
bGVPdXRwdXRUZXh0U3R5bGluZ1Jlc29sdXRpb25Tb3VyY2VBbmRSdWxlc09ubHkgZ2V0QVZQbGF5
ZXJJdGVtTGVnaWJsZU91dHB1dFRleHRTdHlsaW5nUmVzb2x1dGlvblNvdXJjZUFuZFJ1bGVzT25s
eSgpCiAjZW5kaWYKIAogI2RlZmluZSBrQ01UaW1lWmVybyBnZXRrQ01UaW1lWmVybygpCkBAIC0z
OTEsNyArMzkzLDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgog
I2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkKICAgICBbbV9hdlBsYXll
ci5nZXQoKSBzZXRBcHBsaWVzTWVkaWFTZWxlY3Rpb25Dcml0ZXJpYUF1dG9tYXRpY2FsbHk6WUVT
XTsKICNlbmRpZgotICAgIAogCiAgICAgaWYgKG1fYXZQbGF5ZXJJdGVtKQogICAgICAgICBbbV9h
dlBsYXllci5nZXQoKSByZXBsYWNlQ3VycmVudEl0ZW1XaXRoUGxheWVySXRlbTptX2F2UGxheWVy
SXRlbS5nZXQoKV07CkBAIC00MTAsNyArNDExLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOgogCiAgICAgLy8gQ3JlYXRlIHRoZSBwbGF5ZXIgaXRlbSBzbyB3ZSBj
YW4gbG9hZCBtZWRpYSBkYXRhLiAKICAgICBtX2F2UGxheWVySXRlbS5hZG9wdE5TKFtbQVZQbGF5
ZXJJdGVtIGFsbG9jXSBpbml0V2l0aEFzc2V0Om1fYXZBc3NldC5nZXQoKV0pOwotICAgIAorCiAg
ICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBkZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29i
amNPYnNlcnZlci5nZXQoKSBzZWxlY3RvcjpAc2VsZWN0b3IoZGlkRW5kOikgbmFtZTpBVlBsYXll
ckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZpY2F0aW9uIG9iamVjdDptX2F2UGxheWVySXRlbS5n
ZXQoKV07CiAKICAgICBmb3IgKE5TU3RyaW5nICprZXlOYW1lIGluIGl0ZW1LVk9Qcm9wZXJ0aWVz
KCkpCkBAIC04OTcsNiArODk4LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDOgogCiAgICAgICAgIFttX2xlZ2libGVPdXRwdXQuZ2V0KCkgc2V0RGVsZWdhdGU6bV9v
YmpjT2JzZXJ2ZXIuZ2V0KCkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKV07CiAgICAg
ICAgIFttX2xlZ2libGVPdXRwdXQuZ2V0KCkgc2V0QWR2YW5jZUludGVydmFsRm9yRGVsZWdhdGVJ
bnZvY2F0aW9uOk5TVGltZUludGVydmFsU2luY2UxOTcwXTsKKyAgICAgICAgW21fbGVnaWJsZU91
dHB1dC5nZXQoKSBzZXRUZXh0U3R5bGluZ1Jlc29sdXRpb246QVZQbGF5ZXJJdGVtTGVnaWJsZU91
dHB1dFRleHRTdHlsaW5nUmVzb2x1dGlvblNvdXJjZUFuZFJ1bGVzT25seV07CiAgICAgICAgIFtt
X2F2UGxheWVySXRlbS5nZXQoKSBhZGRPdXRwdXQ6bV9sZWdpYmxlT3V0cHV0LmdldCgpXTsKICAg
ICB9CiAjZW5kaWYKQEAgLTEyMTIsNyArMTIxNCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRl
QVZGb3VuZGF0aW9uT2JqQzo6cHJvY2Vzc1RleHRUcmFja3MoJXApIC0gbmlsIG1lZGlhU2VsZWN0
aW9uR3JvdXAiLCB0aGlzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQorICAgIAogICAgIFZl
Y3RvcjxSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRj4gPiByZW1vdmVkVGV4dFRyYWNr
cyA9IG1fdGV4dFRyYWNrczsKICAgICBOU0FycmF5ICpsZWdpYmxlT3B0aW9ucyA9IFtBVk1lZGlh
U2VsZWN0aW9uR3JvdXAgcGxheWFibGVNZWRpYVNlbGVjdGlvbk9wdGlvbnNGcm9tQXJyYXk6W2xl
Z2libGVHcm91cCBvcHRpb25zXV07CiAgICAgZm9yIChBVk1lZGlhU2VsZWN0aW9uT3B0aW9uVHlw
ZSAqb3B0aW9uIGluIGxlZ2libGVPcHRpb25zKSB7CkBAIC0xMjI4LDEzICsxMjMwLDggQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgICAgICBpZiAoIW5ld1Ry
YWNrKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKFtbb3B0aW9uIG1lZGlh
VHlwZV0gaXNFcXVhbFRvU3RyaW5nOkFWTWVkaWFUeXBlU3VidGl0bGVdKSB7Ci0gICAgICAgICAg
ICBpZiAoIVtvcHRpb24gaGFzTWVkaWFDaGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0
aWNDb250YWluc09ubHlGb3JjZWRTdWJ0aXRsZXNdKSB7Ci0gICAgICAgICAgICAgICAgQVZNZWRp
YVNlbGVjdGlvbk9wdGlvblR5cGUgKmZvcmNlZE9ubHlPcHRpb24gPSBbb3B0aW9uIGFzc29jaWF0
ZWRNZWRpYVNlbGVjdGlvbk9wdGlvbkluTWVkaWFTZWxlY3Rpb25Hcm91cDpsZWdpYmxlR3JvdXBd
OwotICAgICAgICAgICAgICAgIGlmIChmb3JjZWRPbmx5T3B0aW9uKQotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICBpZiAoW1tv
cHRpb24gbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5cGVTdWJ0aXRsZV0gJiYg
W29wdGlvbiBoYXNNZWRpYUNoYXJhY3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRh
aW5zT25seUZvcmNlZFN1YnRpdGxlc10pCisgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBtX3RleHRUcmFja3MuYXBwZW5kKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDOjpjcmVh
dGUodGhpcywgb3B0aW9uKSk7CiAgICAgfQpAQCAtMTI3NSw2ICsxMjcyLDkgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogdm9pZCBNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb25PYmpDOjpzZXRDdXJyZW50VHJhY2soSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
RiAqdHJhY2spCiB7CiAgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRk9iakMqIHRyYWNrUHJp
dmF0ZSA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDKj4odHJhY2sp
OworICAgIGlmIChtX2N1cnJlbnRUcmFjayA9PSB0cmFja1ByaXZhdGUpCisgICAgICAgIHJldHVy
bjsKKwogICAgIEFWTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlICptZWRpYVNlbGVjdGlvbk9wdGlv
biA9IHRyYWNrUHJpdmF0ZSA/IHRyYWNrUHJpdmF0ZS0+bWVkaWFTZWxlY3Rpb25PcHRpb24oKSA6
IDA7CiAKICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
OjpzZXRDdXJyZW50VHJhY2soJXApIC0gc2VsZWN0aW5nIG1lZGlhIG9wdGlvbiAlcCIsIHRoaXMs
IG1lZGlhU2VsZWN0aW9uT3B0aW9uKTsKQEAgLTE0MjQsNiArMTQyNCw4IEBAIC0gKHZvaWQpbGVn
aWJsZU91dHB1dDooaWQpb3V0cHV0IGRpZE91dHAKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGlz
cGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFt
X2NhbGxiYWNrKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2NhbGxiYWNrLT5wcm9j
ZXNzQ3VlKHN0cmluZ3MsIENNVGltZUdldFNlY29uZHMoaXRlbVRpbWUpKTsKICAgICB9KTsKIH0K
</data>
<flag name="commit-queue"
          id="201308"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183074</attachid>
            <date>2013-01-16 17:55:16 -0800</date>
            <delta_ts>2013-01-21 13:24:04 -0800</delta_ts>
            <desc>Another patch, another build system.</desc>
            <filename>patch_25.txt</filename>
            <type>text/plain</type>
            <size>65077</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzOTk0MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBACisyMDEzLTAxLTE2ICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgbm9uLVdl
YlZUVCBjdWVzIGZyb20gaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxl
cy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJn
ZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAgICogaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6IFBhc3MgdmlkZW8g
c2l6ZSB0byBnZXREaXNwbGF5VHJlZS4KKworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4
dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJp
Y0N1ZSk6IE5ldywgY3JlYXRlIGEgZ2VuZXJpYyBjdWUgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4
aXN0LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjphZGRXZWJWVFRDdWUpOiBS
ZW5hbWVkIGZyb20gYWRkQ3VlLgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNr
Lmg6CisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2s6Omhhc0N1ZSk6IE1vdmVkIGZyb20gSW5iYW5kVGV4dFRyYWNrLmNwcCwg
dXNlIG9wZXJhdG9yID09IGluc3RlYWQgb2YgaW5saW5lCisgICAgICAgICAgICBjb21wYXJpc29u
IHNvIGRlcml2ZWQgVGV4dFRyYWNrQ3VlcyBjYW4gYmUgY29tcGFyZWQuCisgICAgICAgICogaHRt
bC90cmFjay9UZXh0VHJhY2suaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0
aWVzKTogSW50ZXJmYWNlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
VGV4dFRyYWNrQ3VlKTogRG9uJ3QgY3JlYXRlIHRoZSBkaXNwbGF5IHRyZWUgaW4gdGhlIGNvbnN0
cnVjdG9yLCBpdCBtYXkKKyAgICAgICAgICAgIG5ldmVyIGJlIG5lZWRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFja0N1ZTo6Y3JlYXRlRGlzcGxheVRyZWUpOiBOZXcsIGNyZWF0ZSB0aGUg
ZGlzcGxheSB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkaXNwbGF5VHJl
ZUludGVybmFsKTogRGlzcGxheSB0cmVlIGFjY2Vzc29yLCBhbGxvd3MgaXQgdG8gYmUgY3JlYXRl
ZCBsYXppbHkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNldEFsaWduKTogQWxp
Z25tZW50IC0+IEN1ZUFsaWdubWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
c2V0SXNBY3RpdmUpOiBVc2UgZGlzcGxheVRyZWVJbnRlcm5hbCgpLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXREaXNwbGF5VHJlZSk6IFVzZSBkaXNwbGF5VHJlZUludGVybmFs
KCksIHBhc3MgdmlkZW8gc2l6ZSB0byBhcHBseUNTU1Byb3BlcnRpZXMuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWU6OnJlbW92ZURpc3BsYXlUcmVlKTogVXNlIGRpc3BsYXlUcmVlSW50
ZXJuYWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PSk6IE5l
dy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXRBbGlnbm1lbnQpOiBBbGlnbm1lbnQgLT4gQ3VlQWxpZ25tZW50
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpvcGVyYXRvciE9KTogTmV3LgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpjdWVUeXBlKTogTmV3LCBjdWUgdHlwZSBpZGVu
dGlmaWVkIG5lZWRlZCBieSBvcGVyYXRvcj09LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlOjpvd25lckRvY3VtZW50KTogTmV3LgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVH
ZW5lcmljQm94OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJp
Y0JveDo6VGV4dFRyYWNrQ3VlR2VuZXJpY0JveCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tDdWVHZW5lcmljQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
OlRleHRUcmFja0N1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpj
cmVhdGVEaXNwbGF5VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmlj
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6flRleHRUcmFja0N1ZUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6YmFzZUZvbnRT
aXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZUdlbmVyaWM6OnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpmb250U2l6ZU11bHRpcGxpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udFNpemVNdWx0aXBsaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmZvbnROYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnNldEZvbnROYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3VlVHlwZSk6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vz
c0N1ZUF0dHJpYnV0ZXMpOiBDb3B5IGN1ZSBhdHRyaWJ1dGVzIGludG8gR2VuZXJpY0N1ZURhdGEK
KyAgICAgICAgICAgIHN0cnVjdCBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb252ZXJ0IHRvIFdlYlZU
VCBzZXR0aW5ncyBzdHJpbmcuIFByb2Nlc3MgZm9udCBzaXplLGZvbnQgYmFzZQorICAgICAgICAg
ICAgc2l6ZSwgZm9udCBuYW1lLCBhbmQgdmVydGljYWwgbGF5b3V0IGF0dHJpYnV0ZXMsCisgICAg
ICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlKTogQ3Jl
YXRlIHNlcGFyYXRlIGN1ZXMgZm9yIGVhY2ggYXR0cmlidXRlZAorICAgICAgICAgICAgc3RyaW5n
IGluIHRoZSBhcnJheSBiZWNhdXNlIGVhY2ggb25lIGNhbiBiZSBhdCBhIGRpZmZlcmVudCBzY3Jl
ZW4gbG9jYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
OjpyZXNldEN1ZVZhbHVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaDoKKyAgICAgICAgKEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQpOiBSZXNldCBhbnkg
cGFydGlhbGx5IGFjY3VtdWxhdGVkIGN1ZXMKKyAgICAgICAgICAgIGRlbGl2ZXJlZCBzaW5jZSB0
aGUgc2VlayB3YXMgc3RhcnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6YWRkR2VuZXJpY0N1ZSk6IFJlbmFtZWQgZnJvbSBmbHVzaEN1cnJlbnRD
dWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbi5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0
ZUFWUGxheWVyKTogV2hpdGVzcGFjZSBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0
cmFja3NDaGFuZ2VkKTogVGVsbCBsZWdpYmxlIG91dHB1dCB0byBkZWxpdmVyIGN1ZXMKKyAgICAg
ICAgICAgIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgc3R5bGluZyBuZWVkZWQgYnkgdGhlIGludGVy
bmFsIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6cHJvY2Vzc1RleHRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVudFRyYWNrKTogRG8gbm90aGlu
ZyBpZiBhc2tlZCB0byBjaGFuZ2UKKyAgICAgICAgICAgIHRvIHRoZSB0cmFjayB0aGF0IGlzIGFs
cmVhZHkgY3VycmVudC4KKyAgICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgbGVnaWJs
ZU91dHB1dDpkaWRPdXRwdXRBdHRyaWJ1dGVkU3RyaW5nczpuYXRpdmVTYW1wbGVCdWZmZXJzOmZv
ckl0ZW1UaW1lOl0pOgorICAgICAgICAgICAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNs
aWVudCBjYWxsYmFjayBpc24ndCBOVUxMLgorCiAyMDEzLTAxLTE2ICBNT1JJVEEgSGFqaW1lICA8
bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYkNvcmU6OlNjcmlwdFJ1bm5lcjo6dGlt
ZXJGaXJlZCgpIGlzIHJlcG9ydGVkIHRvIGNyYXNoLgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJ
KHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTc0LDYgKzE1NzQsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAg
aHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAKICAgICBodG1sL3RyYWNrL1RleHRUcmFj
ay5jcHAKICAgICBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAKKyAgICBodG1sL3RyYWNrL1Rl
eHRUcmFja0N1ZUdlbmVyaWMuY3BwCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmNw
cAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAKICAgICBodG1sL3RyYWNrL1RyYWNr
QmFzZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkocmV2aXNpb24gMTM5
ODkwKQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5
KQpAQCAtMzY2MSw2ICszNjYxLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L1RleHRUcmFja0N1ZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmggXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5j
cHAgXAorCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaCBcCiAJU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHJldmlz
aW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkK
QEAgLTE5MTEsNiArMTkxMSw3IEBAIEhFQURFUlMgKz0gXAogICAgIGh0bWwvdHJhY2svTG9hZGFi
bGVUZXh0VHJhY2suaCBcCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2suaCBcCiAgICAgaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuaCBcCisgICAgaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmlj
LmggXAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlTGlzdC5oIFwKICAgICBodG1sL3RyYWNr
L1RleHRUcmFja0xpc3QuaCBcCiAgICAgaHRtbC90cmFjay9UcmFja0Jhc2UuaCBcCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0MzcsNiArMzQzNyw4IEBACiAgICAgICAgICAgICAn
aHRtbC90cmFjay9UZXh0VHJhY2suaCcsCiAgICAgICAgICAgICAnaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuY3BwJywKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oJywKKyAg
ICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwJywKKyAgICAgICAg
ICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaCcsCiAgICAgICAgICAgICAnaHRt
bC90cmFjay9UZXh0VHJhY2tDdWVMaXN0LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWVMaXN0LmgnLAogICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNrTGlz
dC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTAzNyw2ICs2NTAzNywxNCBAQAog
CQkJCQk+CiAJCQkJPC9GaWxlPgogCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5caHRt
bFx0cmFja1xUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCIKKwkJCQkJPgorCQkJCTwvRmlsZT4KKwkJ
CQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGh0bWxcdHJhY2tcVGV4dFRyYWNrQ3VlR2Vu
ZXJpYy5oIgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0
aD0iLi5caHRtbFx0cmFja1xUZXh0VHJhY2tDdWVMaXN0LmNwcCIKIAkJCQkJPgogCQkJCTwvRmls
ZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA4LDYgKzEwOCw4IEBA
CiAJCTA3MDc1NkRGMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwNzU2RDkxNDIz
OUI0QzAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgKi87IH07CiAJCTA3MDc1NkUw
MTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkRBMTQyMzlCNEUwMDQxNDE2MSAv
KiBKU1RleHRUcmFja0N1ZUxpc3QuaCAqLzsgfTsKIAkJMDcwOUZDNEUxMDI1REVFMzAwNTlDREJB
IC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nlc3NpYmlsaXR5
U2xpZGVyLmggKi87IH07CisJCTA3MUE5RUMyMTY4RkJDNDMwMDI2MjlGOSAvKiBUZXh0VHJhY2tD
dWVHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAq
LzsgfTsKKwkJMDcxQTlFQzMxNjhGQkM1NTAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MUE5RUMx
MTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDcyMEIwQTAxNEQzMzIzNTAwNjQy
OTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjBCMDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZl
bnRRdWV1ZS5jcHAgKi87IH07CiAJCTA3MjBCMEEwMTREMzMyMzUwMDY0Mjk1NiAvKiBHZXN0dXJl
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDcyMEIwOUYxNEQzMzIzNTAwNjQyOTU2IC8qIEdlc3R1cmVFdmVudC5jcHAgKi87IH07CiAJCTA3
MjBCMEExMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMEIwOUYxNEQzMzIzNTAwNjQy
OTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcyNzEsNiArNzI3Myw4IEBACiAJCTA3MDc1NkRBMTQyMzlC
NEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNUZXh0VHJhY2tDdWVMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAvKiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlTbGlkZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwREQ4RjUwRjAxODY4MDAwNzI3REVCIC8q
IG1lZGlhQ29udHJvbHMuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IG1lZGlhQ29udHJvbHMu
Y3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzFBOUVDMDE2OEZCNTZDMDAyNjI5
RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMDcxQTlFQzExNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFRyYWNrQ3VlR2VuZXJpYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RTE0RDMzMjM1MDA2NDI5NTUg
LyogR2VuZXJpY0V2ZW50UXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR2VuZXJpY0V2ZW50UXVldWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2VuZXJpY0V2ZW50UXVldWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcyMEIwOUYxNEQzMzIzNTAwNjQyOTU2IC8qIEdlc3R1cmVF
dmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZXN0dXJlRXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk2MTUsNiArMTk2MTksOCBA
QAogCQkJCTk3NTlFOTM4MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWUuY3BwICovLAog
CQkJCTk3NTlFOTM5MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWUuaCAqLywKIAkJCQk5
NzU5RTkzQTE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlLmlkbCAqLywKKwkJCQkwNzFB
OUVDMDE2OEZCNTZDMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAgKi8sCisJCQkJ
MDcxQTlFQzExNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuaCAqLywKIAkJ
CQk5NzU5RTkzQjE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlTGlzdC5jcHAgKi8sCiAJ
CQkJOTc1OUU5M0MxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZUxpc3QuaCAqLywKIAkJ
CQk5NzU5RTkzRDE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlTGlzdC5pZGwgKi8sCkBA
IC0yNTg4NCw2ICsyNTg5MCw3IEBACiAJCQkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRl
eHRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTlFOTQwMTRFRjFDRjgwMDI2QTJERCAv
KiBUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTlFOTQzMTRFRjFDRjgwMDI2QTJE
RCAvKiBUZXh0VHJhY2tDdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MUE5RUMzMTY4RkJDNTUw
MDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzU5
RTk0NjE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrQ3VlTGlzdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDc2OTcwODcxNDYzQUQ4NzAwRjUwMkNGIC8qIFRleHRUcmFja0xpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIxQUQ0RTc0MTNBMTJBNDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMjkwNTMsNiArMjkwNjAsNyBAQAogCQkJCUIyQzNEQTRBMEQw
MDZDMUQwMEVGNkYyNiAvKiBUZXh0U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NTlF
OTNGMTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTc1OUU5NDIxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwNzFBOUVDMjE2OEZCQzQzMDAyNjI5RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzU5RTk0NTE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRy
YWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzY5NzA4NjE0NjNBRDg3MDBGNTAy
Q0YgLyogVGV4dFRyYWNrTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMUFENEU3MzEzQTEy
QTQ2MDA4NDZCMjcgLyogVGV4dFRyYWNrTG9hZGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA0LDggKzEzMDQsNyBA
QCB2b2lkIE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lCiAgICAgICAgIGlmICgh
Y3VlLT50cmFjaygpIHx8ICFjdWUtPnRyYWNrKCktPmlzUmVuZGVyZWQoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3BsYXlCb3gg
PSBjdWUtPmdldERpc3BsYXlUcmVlKCk7Ci0KKyAgICAgICAgUmVmUHRyPFRleHRUcmFja0N1ZUJv
eD4gZGlzcGxheUJveCA9IGN1ZS0+Z2V0RGlzcGxheVRyZWUobV92aWRlb0Rpc3BsYXlTaXplLnNp
emUoKSk7CiAgICAgICAgIGlmIChkaXNwbGF5Qm94LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWNvbnRh
aW5zKHN0YXRpY19jYXN0PE5vZGUqPihkaXNwbGF5Qm94LmdldCgpKSkpCiAgICAgICAgICAgICAv
LyBOb3RlOiB0aGUgZGlzcGxheSB0cmVlIG9mIGEgY3VlIGlzIHJlbW92ZWQgd2hlbiB0aGUgYWN0
aXZlIGZsYWcgb2YgdGhlIGN1ZSBpcyB1bnNldC4KICAgICAgICAgICAgIG1fY3VlQ29udGFpbmVy
LT5hcHBlbmRDaGlsZChkaXNwbGF5Qm94LCBBU1NFUlRfTk9fRVhDRVBUSU9OLCBmYWxzZSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCShy
ZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRU
cmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDExIEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1By
aXZhdGUuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIK
KyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrQ3Vl
TGlzdC5oIgotCisjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05OCw3NCArMTAwLDU1IEBAIHNpemVfdCBJbmJh
bmRUZXh0VHJhY2s6OmluYmFuZFRyYWNrSW5kZXgKICAgICByZXR1cm4gbV9wcml2YXRlLT50ZXh0
VHJhY2tJbmRleCgpOwogfQogCi12b2lkIEluYmFuZFRleHRUcmFjazo6YWRkQ3VlKEluYmFuZFRl
eHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0ZSwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBj
b25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0IFN0cmluZyYgc2V0
dGluZ3MpCit2b2lkIEluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlKiB0cmFja1ByaXZhdGUsIGNvbnN0IEdlbmVyaWNDdWVEYXRhJiBjdWVEYXRhKQog
ewogICAgIFVOVVNFRF9QQVJBTSh0cmFja1ByaXZhdGUpOwogICAgIEFTU0VSVCh0cmFja1ByaXZh
dGUgPT0gbV9wcml2YXRlKTsKIAotICAgIFJlZlB0cjxUZXh0VHJhY2tDdWU+IGN1ZSA9IFRleHRU
cmFja0N1ZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgc3RhcnQsIGVuZCwgY29u
dGVudCk7Ci0gICAgY3VlLT5zZXRJZChpZCk7Ci0gICAgY3VlLT5zZXRDdWVTZXR0aW5ncyhzZXR0
aW5ncyk7Ci0gICAgY3VlLT5zZXRUcmFjayh0aGlzKTsKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3Vl
R2VuZXJpYz4gY3VlID0gVGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSwgY3VlRGF0YS5zdGFydFRpbWUsIGN1ZURhdGEuZW5kVGltZSwgY3VlRGF0YS5j
b250ZW50KTsKIAotICAgIGlmICghbV9jdWVzKQotICAgICAgICBtX2N1ZXMgPSBUZXh0VHJhY2tD
dWVMaXN0OjpjcmVhdGUoKTsKLSAgICBtX2N1ZXMtPmFkZChjdWUpOwotICAgIAotICAgIGlmIChj
bGllbnQoKSkKLSAgICAgICAgY2xpZW50KCktPnRleHRUcmFja0FkZEN1ZXModGhpcywgbV9jdWVz
LmdldCgpKTsKKyAgICBjdWUtPnNldElkKGN1ZURhdGEuaWQpOworICAgIGN1ZS0+c2V0QmFzZUZv
bnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KGN1ZURhdGEuYmFzZUZvbnRTaXplKTsKKyAgICBj
dWUtPnNldEZvbnRTaXplTXVsdGlwbGllcihjdWVEYXRhLnJlbGF0aXZlRm9udFNpemUpOworICAg
IGN1ZS0+c2V0Rm9udE5hbWUoY3VlRGF0YS5mb250TmFtZSk7CisKKyAgICBFeGNlcHRpb25Db2Rl
IGVjOworICAgIGlmIChjdWVEYXRhLnBvc2l0aW9uID4gMCkKKyAgICAgICAgY3VlLT5zZXRQb3Np
dGlvbihscm91bmQoY3VlRGF0YS5wb3NpdGlvbiksIGVjKTsKKyAgICBpZiAoY3VlRGF0YS5saW5l
ID4gMCkKKyAgICAgICAgY3VlLT5zZXRMaW5lKGxyb3VuZChjdWVEYXRhLmxpbmUpLCBlYyk7Cisg
ICAgaWYgKGN1ZURhdGEuc2l6ZSA+IDApCisgICAgICAgIGN1ZS0+c2V0U2l6ZShscm91bmQoY3Vl
RGF0YS5zaXplKSwgZWMpOworICAgIGlmIChjdWVEYXRhLmFsaWduID09IEdlbmVyaWNDdWVEYXRh
OjpTdGFydCkKKyAgICAgICAgY3VlLT5zZXRBbGlnbihBU0NJSUxpdGVyYWwoInN0YXJ0IiksIGVj
KTsKKyAgICBlbHNlIGlmIChjdWVEYXRhLmFsaWduID09IEdlbmVyaWNDdWVEYXRhOjpNaWRkbGUp
CisgICAgICAgIGN1ZS0+c2V0QWxpZ24oQVNDSUlMaXRlcmFsKCJtaWRkbGUiKSwgZWMpOworICAg
IGVsc2UgaWYgKGN1ZURhdGEuYWxpZ24gPT0gR2VuZXJpY0N1ZURhdGE6OkVuZCkKKyAgICAgICAg
Y3VlLT5zZXRBbGlnbihBU0NJSUxpdGVyYWwoImVuZCIpLCBlYyk7CisgICAgY3VlLT5zZXRTbmFw
VG9MaW5lcyhmYWxzZSk7CisKKyAgICBpZiAoaGFzQ3VlKGN1ZS5nZXQoKSkpIHsKKyAgICAgICAg
TE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrOjphZGRHZW5lcmljQ3VlIGlnbm9yaW5nIGFscmVh
ZHkgYWRkZWQgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCJcbiIsCisg
ICAgICAgICAgICBjdWVEYXRhLnN0YXJ0VGltZSwgY3VlRGF0YS5lbmRUaW1lLCBjdWVEYXRhLmNv
bnRlbnQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhZGRD
dWUoY3VlKTsKIH0KIAotYm9vbCBJbmJhbmRUZXh0VHJhY2s6Omhhc0N1ZShJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlKiwgZG91YmxlIHN0YXJ0VGltZSwgZG91YmxlIGVuZFRpbWUsIGNvbnN0IFN0cmlu
ZyYgaWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncykKK3Zv
aWQgSW5iYW5kVGV4dFRyYWNrOjphZGRXZWJWVFRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSog
dHJhY2tQcml2YXRlLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgaWQs
IGNvbnN0IFN0cmluZyYgY29udGVudCwgY29uc3QgU3RyaW5nJiBzZXR0aW5ncykKIHsKKyAgICBV
TlVTRURfUEFSQU0odHJhY2tQcml2YXRlKTsKKyAgICBBU1NFUlQodHJhY2tQcml2YXRlID09IG1f
cHJpdmF0ZSk7CiAKLSAgICBpZiAoc3RhcnRUaW1lIDwgMCB8fCBlbmRUaW1lIDwgMCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjdWVzKCktPmxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBzaXplX3Qgc2VhcmNoU3RhcnQgPSAwOwotICAgIHNpemVfdCBz
ZWFyY2hFbmQgPSBjdWVzKCktPmxlbmd0aCgpOwotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAg
QVNTRVJUKHNlYXJjaFN0YXJ0IDw9IGN1ZXMoKS0+bGVuZ3RoKCkpOwotICAgICAgICBBU1NFUlQo
c2VhcmNoRW5kIDw9IGN1ZXMoKS0+bGVuZ3RoKCkpOwotICAgICAgICAKLSAgICAgICAgVGV4dFRy
YWNrQ3VlKiBjdWU7Ci0gICAgICAgIAotICAgICAgICAvLyBDdWVzIGluIHRoZSBUZXh0VHJhY2tD
dWVMaXN0IGFyZSBtYWludGFpbmVkIGluIHN0YXJ0IHRpbWUgb3JkZXIuCi0gICAgICAgIGlmIChz
ZWFyY2hTdGFydCA9PSBzZWFyY2hFbmQpIHsKLSAgICAgICAgICAgIGlmICghc2VhcmNoU3RhcnQp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBjdWUgPSBjdWVzKCktPml0ZW0oc2VhcmNoU3RhcnQgLSAxKTsKLSAgICAgICAgICAgIGlmICgh
Y3VlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmIChjdWUt
PnN0YXJ0VGltZSgpICE9IHN0YXJ0VGltZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBpZiAoY3VlLT5lbmRUaW1lKCkgIT0gZW5kVGltZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT50ZXh0KCkgIT0gY29udGVu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT5j
dWVTZXR0aW5ncygpICE9IHNldHRpbmdzKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGlmIChjdWUtPmlkKCkgIT0gaWQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gKHNlYXJjaFN0YXJ0ICsgc2VhcmNo
RW5kKSAvIDI7Ci0gICAgICAgIGN1ZSA9IGN1ZXMoKS0+aXRlbShpbmRleCk7Ci0gICAgICAgIGlm
IChzdGFydFRpbWUgPCBjdWUtPnN0YXJ0VGltZSgpIHx8IChzdGFydFRpbWUgPT0gY3VlLT5zdGFy
dFRpbWUoKSAmJiBlbmRUaW1lID4gY3VlLT5lbmRUaW1lKCkpKQotICAgICAgICAgICAgc2VhcmNo
RW5kID0gaW5kZXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlYXJjaFN0YXJ0ID0gaW5k
ZXggKyAxOwotICAgIH0KKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0VHJhY2tD
dWU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIGNvbnRlbnQp
OworICAgIGN1ZS0+c2V0SWQoaWQpOworICAgIGN1ZS0+c2V0Q3VlU2V0dGluZ3Moc2V0dGluZ3Mp
OwogICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoaGFzQ3VlKGN1ZS5nZXQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIGFkZEN1ZShj
dWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUx
LDggKzUxLDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJbmJhbmRUZXh0VHJhY2soU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFRleHRUcmFja0NsaWVudCosIFBhc3NSZWZQdHI8SW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZT4pOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEN1ZShJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgYm9vbCBoYXNDdWUoSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSwgZG91YmxlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkR2Vu
ZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgY29uc3QgR2VuZXJpY0N1ZURhdGEmKSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkV2ViVlRUQ3VlKEluYmFuZFRleHRUcmFja1By
aXZhdGUqLCBkb3VibGUsIGRvdWJsZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJikgT1ZFUlJJREU7CiAKICAgICBSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZT4gbV9wcml2YXRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFj
ay5jcHAJKHJldmlzaW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzM5LDYgKzMzOSw2NCBAQCBp
bnQgVGV4dFRyYWNrOjp0cmFja0luZGV4UmVsYXRpdmVUb1JlbmRlCiAgICAgcmV0dXJuIG1fcmVu
ZGVyZWRUcmFja0luZGV4OwogfQogCitib29sIFRleHRUcmFjazo6aGFzQ3VlKFRleHRUcmFja0N1
ZSogY3VlKQoreworICAgIGlmIChjdWUtPnN0YXJ0VGltZSgpIDwgMCB8fCBjdWUtPmVuZFRpbWUo
KSA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fY3VlcyB8fCAh
bV9jdWVzLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHNpemVf
dCBzZWFyY2hTdGFydCA9IDA7CisgICAgc2l6ZV90IHNlYXJjaEVuZCA9IG1fY3Vlcy0+bGVuZ3Ro
KCk7CisgICAgCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgQVNTRVJUKHNlYXJjaFN0YXJ0IDw9
IG1fY3Vlcy0+bGVuZ3RoKCkpOworICAgICAgICBBU1NFUlQoc2VhcmNoRW5kIDw9IG1fY3Vlcy0+
bGVuZ3RoKCkpOworICAgICAgICAKKyAgICAgICAgVGV4dFRyYWNrQ3VlKiBleGlzdGluZ0N1ZTsK
KyAgICAgICAgCisgICAgICAgIC8vIEN1ZXMgaW4gdGhlIFRleHRUcmFja0N1ZUxpc3QgYXJlIG1h
aW50YWluZWQgaW4gc3RhcnQgdGltZSBvcmRlci4KKyAgICAgICAgaWYgKHNlYXJjaFN0YXJ0ID09
IHNlYXJjaEVuZCkgeworICAgICAgICAgICAgaWYgKCFzZWFyY2hTdGFydCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgdGhh
biBvbmUgY3VlIHdpdGggdGhlIHNhbWUgc3RhcnQgdGltZSwgYmFjayB1cCB0byBmaXJzdCBvbmUg
c28gd2UKKyAgICAgICAgICAgIC8vIGNvbnNpZGVyIGFsbCBvZiB0aGVtLgorICAgICAgICAgICAg
d2hpbGUgKHNlYXJjaFN0YXJ0ID49IDIgJiYgY3VlLT5zdGFydFRpbWUoKSA9PSBtX2N1ZXMtPml0
ZW0oc2VhcmNoU3RhcnQgLSAyKS0+c3RhcnRUaW1lKCkpCisgICAgICAgICAgICAgICAgLS1zZWFy
Y2hTdGFydDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBmaXJzdENvbXBhcmUgPSB0
cnVlOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0
Q29tcGFyZSkKKyAgICAgICAgICAgICAgICAgICAgKytzZWFyY2hTdGFydDsKKyAgICAgICAgICAg
ICAgICBmaXJzdENvbXBhcmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoc2VhcmNoU3Rh
cnQgPiBtX2N1ZXMtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgICAgICAgICBleGlzdGluZ0N1ZSA9IG1fY3Vlcy0+aXRlbShzZWFyY2hTdGFy
dCAtIDEpOworICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdDdWUgfHwgY3VlLT5zdGFydFRp
bWUoKSA+IGV4aXN0aW5nQ3VlLT5zdGFydFRpbWUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgaWYgKCpleGlzdGluZ0N1ZSAhPSAqY3VlKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgc2l6ZV90IGluZGV4ID0gKHNlYXJjaFN0YXJ0ICsgc2VhcmNoRW5kKSAvIDI7Cisg
ICAgICAgIGV4aXN0aW5nQ3VlID0gbV9jdWVzLT5pdGVtKGluZGV4KTsKKyAgICAgICAgaWYgKGN1
ZS0+c3RhcnRUaW1lKCkgPCBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkgfHwgKGN1ZS0+c3RhcnRU
aW1lKCkgPT0gZXhpc3RpbmdDdWUtPnN0YXJ0VGltZSgpICYmIGN1ZS0+ZW5kVGltZSgpID4gZXhp
c3RpbmdDdWUtPmVuZFRpbWUoKSkpCisgICAgICAgICAgICBzZWFyY2hFbmQgPSBpbmRleDsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2VhcmNoU3RhcnQgPSBpbmRleCArIDE7CisgICAgfQor
ICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2suaAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9UZXh0VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNSw2ICsx
MDUsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZEN1ZShQYXNzUmVmUHRyPFRleHRUcmFja0N1
ZT4pOwogICAgIHZvaWQgcmVtb3ZlQ3VlKFRleHRUcmFja0N1ZSosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBib29sIGhhc0N1ZShUZXh0VHJhY2tDdWUqKTsKIAogICAgIHZvaWQgY3VlV2lsbENoYW5n
ZShUZXh0VHJhY2tDdWUqKTsKICAgICB2b2lkIGN1ZURpZENoYW5nZShUZXh0VHJhY2tDdWUqKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAJKHJldmlz
aW9uIDEzOTg5MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTEwNiw3ICsxMDYsNyBAQCBUZXh0VHJh
Y2tDdWUqIFRleHRUcmFja0N1ZUJveDo6Z2V0Q3VlKCkgCiAgICAgcmV0dXJuIG1fY3VlOwogfQog
Ci12b2lkIFRleHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0aWVzKCkKK3ZvaWQgVGV4dFRy
YWNrQ3VlQm94OjphcHBseUNTU1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYpCiB7CiAgICAgLy8g
RklYTUU6IEFwcGx5IGFsbCB0aGUgaW5pdGlhbCBDU1MgcG9zaXRpb25pbmcgcHJvcGVydGllcy4g
aHR0cDovL3drYi51Zy83OTkxNgogCkBAIC0yMDksNyArMjA5LDYgQEAgVGV4dFRyYWNrQ3VlOjpU
ZXh0VHJhY2tDdWUoU2NyaXB0RXhlY3V0aQogICAgICwgbV9zbmFwVG9MaW5lcyh0cnVlKQogICAg
ICwgbV9hbGxEb2N1bWVudE5vZGVzKEhUTUxEaXZFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8
RG9jdW1lbnQqPihjb250ZXh0KSkpCiAgICAgLCBtX2Rpc3BsYXlUcmVlU2hvdWxkQ2hhbmdlKHRy
dWUpCi0gICAgLCBtX2Rpc3BsYXlUcmVlKFRleHRUcmFja0N1ZUJveDo6Y3JlYXRlKHN0YXRpY19j
YXN0PERvY3VtZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KSwgdGhpcykpCiB7CiAgICAg
QVNTRVJUKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNEb2N1bWVudCgpKTsKIApAQCAtMjI3
LDYgKzIyNiwxOCBAQCBUZXh0VHJhY2tDdWU6On5UZXh0VHJhY2tDdWUoKQogewogfQogCitQYXNz
UmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlOjpjcmVhdGVEaXNwbGF5VHJlZSgp
Cit7CisgICAgcmV0dXJuIFRleHRUcmFja0N1ZUJveDo6Y3JlYXRlKG93bmVyRG9jdW1lbnQoKSwg
dGhpcyk7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWU6OmRp
c3BsYXlUcmVlSW50ZXJuYWwoKQoreworICAgIGlmICghbV9kaXNwbGF5VHJlZSkKKyAgICAgICAg
bV9kaXNwbGF5VHJlZSA9IGNyZWF0ZURpc3BsYXlUcmVlKCk7CisgICAgcmV0dXJuIG1fZGlzcGxh
eVRyZWU7Cit9CisKIHZvaWQgVGV4dFRyYWNrQ3VlOjpjdWVXaWxsQ2hhbmdlKCkKIHsKICAgICBp
ZiAobV90cmFjaykKQEAgLTQzNyw3ICs0NDgsNyBAQCB2b2lkIFRleHRUcmFja0N1ZTo6c2V0QWxp
Z24oY29uc3QgU3RyaW5nCiAgICAgLy8gbWF0Y2ggZm9yIHRoZSBuZXcgdmFsdWUsIGlmIGFueS4g
SWYgbm9uZSBvZiB0aGUgdmFsdWVzIG1hdGNoLCB0aGVuIHRoZSB1c2VyCiAgICAgLy8gYWdlbnQg
bXVzdCBpbnN0ZWFkIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLgogICAgIAotICAgIEFs
aWdubWVudCBhbGlnbm1lbnQgPSBtX2N1ZUFsaWdubWVudDsKKyAgICBDdWVBbGlnbm1lbnQgYWxp
Z25tZW50ID0gbV9jdWVBbGlnbm1lbnQ7CiAgICAgaWYgKHZhbHVlID09IHN0YXJ0S2V5d29yZCgp
KQogICAgICAgICBhbGlnbm1lbnQgPSBTdGFydDsKICAgICBlbHNlIGlmICh2YWx1ZSA9PSBtaWRk
bGVLZXl3b3JkKCkpCkBAIC01NDQsOCArNTU1LDcgQEAgdm9pZCBUZXh0VHJhY2tDdWU6OnNldElz
QWN0aXZlKGJvb2wgYWN0aQogCiAgICAgaWYgKCFhY3RpdmUpIHsKICAgICAgICAgLy8gUmVtb3Zl
IHRoZSBkaXNwbGF5IHRyZWUgYXMgc29vbiBhcyB0aGUgY3VlIGJlY29tZXMgaW5hY3RpdmUuCi0g
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgICAgIG1fZGlzcGxheVRyZWUtPnJlbW92ZShl
Yyk7CisgICAgICAgIGRpc3BsYXlUcmVlSW50ZXJuYWwoKS0+cmVtb3ZlKEFTU0VSVF9OT19FWENF
UFRJT04pOwogICAgIH0KIH0KIApAQCAtNzIxLDEwICs3MzEsMTEgQEAgdm9pZCBUZXh0VHJhY2tD
dWU6OnVwZGF0ZURpc3BsYXlUcmVlKGZsbwogICAgIG1fYWxsRG9jdW1lbnROb2Rlcy0+YXBwZW5k
Q2hpbGQocmVmZXJlbmNlVHJlZSk7CiB9CiAKLVBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBU
ZXh0VHJhY2tDdWU6OmdldERpc3BsYXlUcmVlKCkKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94
PiBUZXh0VHJhY2tDdWU6OmdldERpc3BsYXlUcmVlKGNvbnN0IEludFNpemUmIHZpZGVvU2l6ZSkK
IHsKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5VHJlZSA9IGRpc3BsYXlUcmVl
SW50ZXJuYWwoKTsKICAgICBpZiAoIW1fZGlzcGxheVRyZWVTaG91bGRDaGFuZ2UgfHwgIXRyYWNr
KCktPmlzUmVuZGVyZWQoKSkKLSAgICAgICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CisgICAgICAg
IHJldHVybiBkaXNwbGF5VHJlZTsKIAogICAgIC8vIDEwLjEgLSAxMC4xMAogICAgIGNhbGN1bGF0
ZURpc3BsYXlQYXJhbWV0ZXJzKCk7CkBAIC03MzIsNyArNzQzLDcgQEAgUGFzc1JlZlB0cjxUZXh0
VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZQogICAgIC8vIDEwLjExLiBBcHBseSB0aGUgdGVybXMg
b2YgdGhlIENTUyBzcGVjaWZpY2F0aW9ucyB0byBub2RlcyB3aXRoaW4gdGhlCiAgICAgLy8gZm9s
bG93aW5nIGNvbnN0cmFpbnRzLCB0aHVzIG9idGFpbmluZyBhIHNldCBvZiBDU1MgYm94ZXMgcG9z
aXRpb25lZAogICAgIC8vIHJlbGF0aXZlIHRvIGFuIGluaXRpYWwgY29udGFpbmluZyBibG9jazoK
LSAgICBtX2Rpc3BsYXlUcmVlLT5yZW1vdmVDaGlsZHJlbigpOworICAgIGRpc3BsYXlUcmVlLT5y
ZW1vdmVDaGlsZHJlbigpOwogCiAgICAgLy8gVGhlIGRvY3VtZW50IHRyZWUgaXMgdGhlIHRyZWUg
b2YgV2ViVlRUIE5vZGUgT2JqZWN0cyByb290ZWQgYXQgbm9kZXMuCiAKQEAgLTc0Miw3ICs3NTMs
NyBAQCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlCiAKICAgICAvLyBO
b3RlOiBUaGlzIGlzIGNvbnRhaW5lZCBieSBkZWZhdWx0IGluIG1fYWxsRG9jdW1lbnROb2Rlcy4K
ICAgICBtX2FsbERvY3VtZW50Tm9kZXMtPnNldFBzZXVkbyhhbGxOb2Rlc1NoYWRvd1BzZXVkb0lk
KCkpOwotICAgIG1fZGlzcGxheVRyZWUtPmFwcGVuZENoaWxkKG1fYWxsRG9jdW1lbnROb2Rlcywg
QVNTRVJUX05PX0VYQ0VQVElPTiwgdHJ1ZSk7CisgICAgZGlzcGxheVRyZWUtPmFwcGVuZENoaWxk
KG1fYWxsRG9jdW1lbnROb2RlcywgQVNTRVJUX05PX0VYQ0VQVElPTiwgdHJ1ZSk7CiAKICAgICAv
LyBGSVhNRShCVUcgNzk5MTYpOiBSdW5zIG9mIGNoaWxkcmVuIG9mIFdlYlZUVCBSdWJ5IE9iamVj
dHMgdGhhdCBhcmUgbm90CiAgICAgLy8gV2ViVlRUIFJ1YnkgVGV4dCBPYmplY3RzIG11c3QgYmUg
d3JhcHBlZCBpbiBhbm9ueW1vdXMgYm94ZXMgd2hvc2UKQEAgLTc1NSwxOCArNzY2LDE4IEBAIFBh
c3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWUKICAgICAvLyBpcyBubyBsaW5l
IGJyZWFraW5nIG9wcG9ydHVuaXR5LiAoVGh1cywgbm9ybWFsbHkgdGV4dCB3cmFwcyBhcyBuZWVk
ZWQsCiAgICAgLy8gYnV0IGlmIHRoZXJlIGlzIGEgcGFydGljdWxhcmx5IGxvbmcgd29yZCwgaXQg
ZG9lcyBub3Qgb3ZlcmZsb3cgYXMgaXQKICAgICAvLyBub3JtYWxseSB3b3VsZCBpbiBDU1MsIGl0
IGlzIGluc3RlYWQgZm9yY2libHkgd3JhcHBlZCBhdCB0aGUgYm94J3MgZWRnZS4pCi0gICAgbV9k
aXNwbGF5VHJlZS0+YXBwbHlDU1NQcm9wZXJ0aWVzKCk7CisgICAgZGlzcGxheVRyZWUtPmFwcGx5
Q1NTUHJvcGVydGllcyh2aWRlb1NpemUpOwogCiAgICAgbV9kaXNwbGF5VHJlZVNob3VsZENoYW5n
ZSA9IGZhbHNlOwogCiAgICAgLy8gMTAuMTUuIExldCBjdWUncyB0ZXh0IHRyYWNrIGN1ZSBkaXNw
bGF5IHN0YXRlIGhhdmUgdGhlIENTUyBib3hlcyBpbgogICAgIC8vIGJveGVzLgotICAgIHJldHVy
biBtX2Rpc3BsYXlUcmVlOworICAgIHJldHVybiBkaXNwbGF5VHJlZTsKIH0KIAogdm9pZCBUZXh0
VHJhY2tDdWU6OnJlbW92ZURpc3BsYXlUcmVlKCkKIHsKLSAgICBtX2Rpc3BsYXlUcmVlLT5yZW1v
dmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgZGlzcGxheVRyZWVJbnRlcm5hbCgpLT5yZW1v
dmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CiB9CiAKIHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4g
VGV4dFRyYWNrQ3VlOjpnZXRQb3NpdGlvbkNvb3JkaW5hdGVzKCkgY29uc3QKQEAgLTEwNjUsNiAr
MTA3NiwzMyBAQCBFdmVudFRhcmdldERhdGEqIFRleHRUcmFja0N1ZTo6ZW5zdXJlRXZlCiAgICAg
cmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAorYm9vbCBUZXh0VHJhY2tDdWU6Om9wZXJh
dG9yPT0oY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0Cit7CisgICAgaWYgKGN1ZVR5cGUo
KSAhPSBjdWUuY3VlVHlwZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAobV9l
bmRUaW1lICE9IGN1ZS5lbmRUaW1lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
bV9zdGFydFRpbWUgIT0gY3VlLnN0YXJ0VGltZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fY29udGVudCAhPSBjdWUudGV4dCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKG1fc2V0dGluZ3MgIT0gY3VlLmN1ZVNldHRpbmdzKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9pZCAhPSBjdWUuaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChtX3RleHRQb3NpdGlvbiAhPSBjdWUucG9zaXRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChtX2xpbmVQb3NpdGlvbiAhPSBjdWUubGluZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY3VlU2l6ZSAhPSBjdWUuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKGFsaWduKCkgIT0gY3VlLmFsaWduKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWUuaAkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9U
ZXh0VHJhY2tDdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTU3LDExICs1OCwxMSBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgVGV4dFRyYWNrQ3VlKiBnZXRDdWUoKSBjb25zdDsKLSAgICB2b2lk
IGFwcGx5Q1NTUHJvcGVydGllcygpOworICAgIHZpcnR1YWwgdm9pZCBhcHBseUNTU1Byb3BlcnRp
ZXMoY29uc3QgSW50U2l6ZSYgdmlkZW9TaXplKTsKIAogICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIHRleHRUcmFja0N1ZUJveFNoYWRvd1BzZXVkb0lkKCk7CiAKLXByaXZhdGU6Citwcm90
ZWN0ZWQ6CiAgICAgVGV4dFRyYWNrQ3VlQm94KERvY3VtZW50KiwgVGV4dFRyYWNrQ3VlKik7CiAK
ICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBS
ZW5kZXJTdHlsZSopIE9WRVJSSURFOwpAQCAtMTUxLDcgKzE1Miw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzQWN0aXZlKCk7CiAgICAgdm9pZCBzZXRJc0FjdGl2ZShib29sKTsKIAotICAgIFBhc3NS
ZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBnZXREaXNwbGF5VHJlZSgpOworICAgIFBhc3NSZWZQdHI8
VGV4dFRyYWNrQ3VlQm94PiBnZXREaXNwbGF5VHJlZShjb25zdCBJbnRTaXplJiB2aWRlb1NpemUp
OwogICAgIHZvaWQgdXBkYXRlRGlzcGxheVRyZWUoZmxvYXQpOwogICAgIHZvaWQgcmVtb3ZlRGlz
cGxheVRyZWUoKTsKICAgICB2b2lkIG1hcmtGdXR1cmVBbmRQYXN0Tm9kZXMoQ29udGFpbmVyTm9k
ZSosIGRvdWJsZSwgZG91YmxlKTsKQEAgLTE3Myw2ICsxNzQsMjUgQEAgcHVibGljOgogICAgIH07
CiAgICAgV3JpdGluZ0RpcmVjdGlvbiBnZXRXcml0aW5nRGlyZWN0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV93cml0aW5nRGlyZWN0aW9uOyB9CiAKKyAgICBlbnVtIEN1ZUFsaWdubWVudCB7CisgICAg
ICAgIFN0YXJ0LAorICAgICAgICBNaWRkbGUsCisgICAgICAgIEVuZAorICAgIH07CisgICAgQ3Vl
QWxpZ25tZW50IGdldEFsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VlQWxpZ25tZW50OyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IGN1ZSk7CisgICAgfQorICAg
IAorICAgIGVudW0gQ3VlVHlwZSB7CisgICAgICAgIEdlbmVyaWMsCisgICAgICAgIFdlYlZUVAor
ICAgIH07CisgICAgdmlydHVhbCBDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCB7IHJldHVybiBXZWJW
VFQ7IH0KKwogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZW50ZXIpOwogICAg
IERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoZXhpdCk7CiAKQEAgLTE4Myw5ICsyMDMs
MTQgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdl
dERhdGEoKTsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXRE
YXRhKCk7CiAKLXByaXZhdGU6CiAgICAgVGV4dFRyYWNrQ3VlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgY29udGVudCk7CiAK
KyAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIHsgcmV0dXJuIHN0YXRpY19jYXN0PERvY3Vt
ZW50Kj4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsgfQorCisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFRleHRUcmFja0N1ZUJveD4gY3JlYXRlRGlzcGxheVRyZWUoKTsKKyAgICBQYXNzUmVmUHRy
PFRleHRUcmFja0N1ZUJveD4gZGlzcGxheVRyZWVJbnRlcm5hbCgpOworCitwcml2YXRlOgogICAg
IHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4gZ2V0UG9zaXRpb25Db29yZGluYXRlcygpIGNvbnN0
OwogICAgIHZvaWQgcGFyc2VTZXR0aW5ncyhjb25zdCBTdHJpbmcmKTsKIApAQCAtMjEzLDggKzIz
OCw3IEBAIHByaXZhdGU6CiAKICAgICBXcml0aW5nRGlyZWN0aW9uIG1fd3JpdGluZ0RpcmVjdGlv
bjsKIAotICAgIGVudW0gQWxpZ25tZW50IHsgU3RhcnQsIE1pZGRsZSwgRW5kIH07Ci0gICAgQWxp
Z25tZW50IG1fY3VlQWxpZ25tZW50OworICAgIEN1ZUFsaWdubWVudCBtX2N1ZUFsaWdubWVudDsK
IAogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX3dlYlZUVE5vZGVUcmVlOwogICAgIFRl
eHRUcmFjayogbV90cmFjazsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRy
YWNrQ3VlR2VuZXJpYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisKKyNpbmNsdWRl
ICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2lu
Y2x1ZGUgIkhUTUxEaXZFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRUcmFja0N1ZS5oIgorI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0VHJhY2tDdWUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudCA6IHB1Ymxp
YyBUZXh0VHJhY2tDdWVCb3ggeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRleHRU
cmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50PiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBUZXh0
VHJhY2tDdWVHZW5lcmljKiBjdWUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50KGRvY3VtZW50LCBjdWUpKTsKKyAgICB9Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIGFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJikg
T1ZFUlJJREU7CisgICAgCitwcml2YXRlOgorICAgIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVt
ZW50KERvY3VtZW50KiwgVGV4dFRyYWNrQ3VlKik7Cit9OworCitUZXh0VHJhY2tDdWVHZW5lcmlj
Qm94RWxlbWVudDo6VGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBUZXh0VHJhY2tDdWUqIGN1ZSkKKyAgICA6IFRleHRUcmFja0N1ZUJveChkb2N1bWVudCwg
Y3VlKQoreworfQorCit2b2lkIFRleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjphcHBseUNT
U1Byb3BlcnRpZXMoY29uc3QgSW50U2l6ZSYgdmlkZW9TaXplKQoreworICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlQb3NpdGlvbiwgQ1NTVmFsdWVBYnNvbHV0ZSk7CisgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZVdl
YmtpdFBsYWludGV4dCk7CisgICAgCisgICAgVGV4dFRyYWNrQ3VlR2VuZXJpYyogY3VlID0gc3Rh
dGljX2Nhc3Q8VGV4dFRyYWNrQ3VlR2VuZXJpYyo+KGdldEN1ZSgpKTsKKworICAgIHN0ZDo6cGFp
cjxmbG9hdCwgZmxvYXQ+IHBvc2l0aW9uID0gY3VlLT5nZXRDU1NQb3NpdGlvbigpOworICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBwb3NpdGlvbi5maXJzdCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5VG9wLCBwb3NpdGlvbi5zZWNvbmQsIENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfUEVSQ0VOVEFHRSk7CisKKyAgICBkb3VibGUgc2l6ZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
Y3VlLT5nZXRDU1NTaXplKCkpOworICAgIGlmIChjdWUtPmdldFdyaXRpbmdEaXJlY3Rpb24oKSA9
PSBUZXh0VHJhY2tDdWU6Okhvcml6b250YWwpIHsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgQ1NTVmFsdWVMdHIpOworICAgICAgICBzZXRJbmxp
bmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2lkdGgsIHNpemUsIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlIZWlnaHQsIENTU1ZhbHVlQXV0byk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2V0SW5s
aW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBDU1NWYWx1ZUF1dG8pOworICAgICAg
ICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0LCBzaXplLCAgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAgICB9CisKKyAgICBpZiAoY3VlLT5iYXNl
Rm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoKSkgeworICAgICAgICBkb3VibGUgZm9udFNp
emUgPSB2aWRlb1NpemUuaGVpZ2h0KCkgKiBjdWUtPmJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRl
b0hlaWdodCgpIC8gMTAwOworICAgICAgICBpZiAoY3VlLT5mb250U2l6ZU11bHRpcGxpZXIoKSkK
KyAgICAgICAgICAgIGZvbnRTaXplICo9IGN1ZS0+Zm9udFNpemVNdWx0aXBsaWVyKCkgLyAxMDA7
CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSwgU3Ry
aW5nOjpudW1iZXIoZm9udFNpemUpICsgInB4Iik7CisgICAgfQorCisgICAgaWYgKGN1ZS0+Z2V0
QWxpZ25tZW50KCkgPT0gVGV4dFRyYWNrQ3VlOjpTdGFydCkKKyAgICAgICAgc2V0SW5saW5lU3R5
bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbiwgQ1NTVmFsdWVTdGFydCk7CisgICAgZWxz
ZSBpZiAoY3VlLT5nZXRBbGlnbm1lbnQoKSA9PSBUZXh0VHJhY2tDdWU6OkVuZCkKKyAgICAgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbiwgQ1NTVmFsdWVFbmQp
OworICAgIGVsc2UKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRl
eHRBbGlnbiwgQ1NTVmFsdWVDZW50ZXIpOworCisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShD
U1NQcm9wZXJ0eVdlYmtpdFdyaXRpbmdNb2RlLCBjdWUtPmdldENTU1dyaXRpbmdNb2RlKCksIGZh
bHNlKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5V2hpdGVTcGFjZSwg
Q1NTVmFsdWVQcmVXcmFwKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
V29yZEJyZWFrLCBDU1NWYWx1ZU5vcm1hbCk7Cit9CisKK1RleHRUcmFja0N1ZUdlbmVyaWM6OlRl
eHRUcmFja0N1ZUdlbmVyaWMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgZG91Ymxl
IHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpCisgICAgOlRleHRUcmFj
a0N1ZShjb250ZXh0LCBzdGFydCwgZW5kLCBjb250ZW50KQoreworfQorCitQYXNzUmVmUHRyPFRl
eHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3JlYXRlRGlzcGxheVRyZWUoKQor
eworICAgIHJldHVybiBUZXh0VHJhY2tDdWVHZW5lcmljQm94RWxlbWVudDo6Y3JlYXRlKG93bmVy
RG9jdW1lbnQoKSwgdGhpcyk7Cit9CisKK2Jvb2wgVGV4dFRyYWNrQ3VlR2VuZXJpYzo6b3BlcmF0
b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QKK3sKKyAgICBpZiAoY3VlLmN1ZVR5
cGUoKSAhPSBUZXh0VHJhY2tDdWU6OkdlbmVyaWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGNvbnN0IFRleHRUcmFja0N1ZUdlbmVyaWMqIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
VGV4dFRyYWNrQ3VlR2VuZXJpYyo+KCZjdWUpOworCisgICAgaWYgKG1fYmFzZUZvbnRTaXplUmVs
YXRpdmVUb1ZpZGVvSGVpZ2h0ICE9IG90aGVyLT5iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9I
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2ZvbnRTaXplTXVsdGlw
bGllciAhPSBvdGhlci0+Zm9udFNpemVNdWx0aXBsaWVyKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9mb250TmFtZSAhPSBvdGhlci0+Zm9udE5hbWUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIFRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PShjdWUpOwor
fQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGV4dFRyYWNrQ3Vl
R2VuZXJpY19oCisjZGVmaW5lIFRleHRUcmFja0N1ZUdlbmVyaWNfaAorCisjaWYgRU5BQkxFKFZJ
REVPX1RSQUNLKQorCisjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUZXh0VHJh
Y2tDdWUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEdlbmVyaWNDdWVEYXRh
OworCitjbGFzcyBUZXh0VHJhY2tDdWVHZW5lcmljIDogcHVibGljIFRleHRUcmFja0N1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVu
ZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBUZXh0VHJhY2tDdWVHZW5lcmljKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpKTsK
KyAgICB9CisgICAgCisgICAgdmlydHVhbCB+VGV4dFRyYWNrQ3VlR2VuZXJpYygpIHsgfQorCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gY3JlYXRlRGlzcGxheVRyZWUo
KSBPVkVSUklERTsKKworICAgIGRvdWJsZSBiYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWln
aHQoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodDsg
fQorICAgIHZvaWQgc2V0QmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KGRvdWJsZSBz
aXplKSB7IG1fYmFzZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0ID0gc2l6ZTsgfQorCisg
ICAgZG91YmxlIGZvbnRTaXplTXVsdGlwbGllcigpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNpemVN
dWx0aXBsaWVyOyB9CisgICAgdm9pZCBzZXRGb250U2l6ZU11bHRpcGxpZXIoZG91YmxlIHNpemUp
IHsgbV9mb250U2l6ZU11bHRpcGxpZXIgPSBzaXplOyB9CisKKyAgICBTdHJpbmcgZm9udE5hbWUo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnROYW1lOyB9CisgICAgdm9pZCBzZXRGb250TmFtZShTdHJp
bmcgbmFtZSkgeyBtX2ZvbnROYW1lID0gbmFtZTsgfQorCisgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgVGV4dFRyYWNrQ3VlJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVhbCBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVGV4dFRyYWNrQ3VlJiBjdWUpIGNvbnN0IE9WRVJSSURFCisg
ICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBjdWUpOworICAgIH0KKworICAgIHZpcnR1
YWwgVGV4dFRyYWNrQ3VlOjpDdWVUeXBlIGN1ZVR5cGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVy
biBUZXh0VHJhY2tDdWU6OkdlbmVyaWM7IH0KKworcHJpdmF0ZToKKyAgICBUZXh0VHJhY2tDdWVH
ZW5lcmljKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBkb3VibGUgc3RhcnQsIGRvdWJsZSBlbmQs
IGNvbnN0IFN0cmluZyYpOworICAgIAorICAgIGRvdWJsZSBtX2Jhc2VGb250U2l6ZVJlbGF0aXZl
VG9WaWRlb0hlaWdodDsKKyAgICBkb3VibGUgbV9mb250U2l6ZU11bHRpcGxpZXI7CisgICAgU3Ry
aW5nIG1fZm9udE5hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oCShyZXZpc2lvbiAxMzk4
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDEyICszNCw0NSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CiAKK3N0cnVjdCBHZW5l
cmljQ3VlRGF0YSB7CisgICAgR2VuZXJpY0N1ZURhdGEoKQorICAgICAgICA6IHN0YXJ0VGltZSgw
KQorICAgICAgICAsIGVuZFRpbWUoMCkKKyAgICAgICAgLCBsaW5lKC0xKQorICAgICAgICAsIHBv
c2l0aW9uKC0xKQorICAgICAgICAsIHNpemUoLTEpCisgICAgICAgICwgYWxpZ24oTm9uZSkKKyAg
ICAgICAgLCBiYXNlRm9udFNpemUoMCkKKyAgICAgICAgLCByZWxhdGl2ZUZvbnRTaXplKDApCisg
ICAgeworICAgIH0KKworICAgIGVudW0gYWxpZ25tZW50IHsKKyAgICAgICAgTm9uZSwKKyAgICAg
ICAgU3RhcnQsCisgICAgICAgIE1pZGRsZSwKKyAgICAgICAgRW5kCisgICAgfTsKKworICAgIGRv
dWJsZSBzdGFydFRpbWU7CisgICAgZG91YmxlIGVuZFRpbWU7CisgICAgU3RyaW5nIGlkOworICAg
IFN0cmluZyBjb250ZW50OworICAgIGRvdWJsZSBsaW5lOworICAgIGRvdWJsZSBwb3NpdGlvbjsK
KyAgICBkb3VibGUgc2l6ZTsKKyAgICBhbGlnbm1lbnQgYWxpZ247CisgICAgU3RyaW5nIGZvbnRO
YW1lOworICAgIGRvdWJsZSBiYXNlRm9udFNpemU7CisgICAgZG91YmxlIHJlbGF0aXZlRm9udFNp
emU7Cit9OworCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50IHsKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50KCkgeyB9CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIGFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlIC8q
c3RhcnQqLywgZG91YmxlIC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCovLCBjb25zdCBTdHJp
bmcmIC8qY29udGVudCovLCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykgPSAwOwotICAgIHZp
cnR1YWwgYm9vbCBoYXNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAvKnN0YXJ0
Ki8sIGRvdWJsZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQqLywgY29uc3QgU3RyaW5nJiAv
KmNvbnRlbnQqLywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8pID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkV2ViVlRUQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUgLypzdGFy
dCovLCBkb3VibGUgLyplbmQqLywgY29uc3QgU3RyaW5nJiAvKmlkKi8sIGNvbnN0IFN0cmluZyYg
Lypjb250ZW50Ki8sIGNvbnN0IFN0cmluZyYgLypzZXR0aW5ncyovKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGNvbnN0IEdlbmVy
aWNDdWVEYXRhJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkocmV2aXNp
b24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsy
OSw3IEBACiAKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgiCiAKKyNpbmNs
dWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oIgogI2luY2x1ZGUg
IlNvZnRMaW5raW5nLmgiCkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8d3RmL1VudXNlZFBh
cmFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAK
IFNPRlRfTElOS19GUkFNRVdPUktfT1BUSU9OQUwoQ29yZU1lZGlhKQogCkBAIC01Miw2ICs1NCw5
IEBAIFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0MKIFNPRlRfTElOS19Q
T0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0aWNh
bExheW91dCwgQ0ZTdHJpbmdSZWYpCiBTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVk
aWEsIGtDTVRleHRWZXJ0aWNhbExheW91dF9MZWZ0VG9SaWdodCwgQ0ZTdHJpbmdSZWYpCiBTT0ZU
X0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDTVRleHRWZXJ0aWNhbExheW91dF9S
aWdodFRvTGVmdCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3Jl
TWVkaWEsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfQmFzZUZvbnRTaXplUGVyY2VudGFnZVJlbGF0
aXZlVG9WaWRlb0hlaWdodCwgQ0ZTdHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05B
TChDb3JlTWVkaWEsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6ZSwgQ0ZT
dHJpbmdSZWYpCitTT0ZUX0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDTVRleHRN
YXJrdXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUsIENGU3RyaW5nUmVmKQogCiAjZGVmaW5lIGtD
TVRleHRNYXJrdXBBdHRyaWJ1dGVfQWxpZ25tZW50IGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVf
QWxpZ25tZW50KCkKICNkZWZpbmUga0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfU3RhcnQgZ2V0
a0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfU3RhcnQoKQpAQCAtNjYsNiArNzEsOSBAQCBTT0ZU
X0xJTktfUE9JTlRFUl9PUFRJT05BTChDb3JlTWVkaWEsIGtDCiAjZGVmaW5lIGtDTVRleHRNYXJr
dXBBdHRyaWJ1dGVfVmVydGljYWxMYXlvdXQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0
aWNhbExheW91dCgpCiAjZGVmaW5lIGtDTVRleHRWZXJ0aWNhbExheW91dF9MZWZ0VG9SaWdodCBn
ZXRrQ01UZXh0VmVydGljYWxMYXlvdXRfTGVmdFRvUmlnaHQoKQogI2RlZmluZSBrQ01UZXh0VmVy
dGljYWxMYXlvdXRfUmlnaHRUb0xlZnQgZ2V0a0NNVGV4dFZlcnRpY2FsTGF5b3V0X1JpZ2h0VG9M
ZWZ0KCkKKyNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50
YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0IGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfQmFzZUZv
bnRTaXplUGVyY2VudGFnZVJlbGF0aXZlVG9WaWRlb0hlaWdodCgpCisjZGVmaW5lIGtDTVRleHRN
YXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6ZSBnZXRrQ01UZXh0TWFya3VwQXR0cmlidXRl
X1JlbGF0aXZlRm9udFNpemUoKQorI2RlZmluZSBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0ZvbnRG
YW1pbHlOYW1lIGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUoKQogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC04NCw3ICs5Miw3IEBAIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkY6On5JbmJhbmRUZXh0VHIKICAgICBkaXNjb25uZWN0KCk7CiB9CiAKLXZvaWQgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0N1ZUF0dHJpYnV0ZXMoQ0ZBdHRyaWJ1dGVk
U3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcsIFN0cmluZ0J1aWxkZXImIGNvbnRlbnQsIFN0cmlu
Z0J1aWxkZXImIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9j
ZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmluZywg
R2VuZXJpY0N1ZURhdGEqIGN1ZURhdGEpCiB7CiAgICAgLy8gU29tZSBvZiB0aGUgYXR0cmlidXRl
cyB3ZSB0cmFuc2xhdGUgaW50byBwZXItY3VlIFdlYlZUVCBzZXR0aW5ncyBhcmUgYXJlIHJlcGVh
dGVkIG9uIGVhY2ggcGFydCBvZiBhbiBhdHRyaWJ1dGVkIHN0cmluZyBzbyBvbmx5CiAgICAgLy8g
cHJvY2VzcyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgZWFjaC4KQEAgLTkzLDEwICsxMDEsMTIgQEAg
dm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICBQb3NpdGlv
biA9IDEgPDwgMSwKICAgICAgICAgU2l6ZSA9IDEgPDwgMiwKICAgICAgICAgVmVydGljYWwgPSAx
IDw8IDMsCi0gICAgICAgIEFsaWduID0gMSA8PCA0CisgICAgICAgIEFsaWduID0gMSA8PCA0LAor
ICAgICAgICBGb250TmFtZSA9IDEgPDwgNQogICAgIH07CiAgICAgdW5zaWduZWQgcHJvY2Vzc2Vk
ID0gMDsKIAorICAgIFN0cmluZ0J1aWxkZXIgY29udGVudDsKICAgICBTdHJpbmcgYXR0cmlidXRl
ZFN0cmluZ1ZhbHVlID0gQ0ZBdHRyaWJ1dGVkU3RyaW5nR2V0U3RyaW5nKGF0dHJpYnV0ZWRTdHJp
bmcpOwogICAgIENGSW5kZXggbGVuZ3RoID0gYXR0cmlidXRlZFN0cmluZ1ZhbHVlLmxlbmd0aCgp
OwogICAgIGlmICghbGVuZ3RoKQpAQCAtMTEwLDYgKzEyMCw3IEBAIHZvaWQgSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0MKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFN0cmluZ0J1aWxkZXIgdGFnU3RhcnQ7CisgICAgICAgIENGU3RyaW5nUmVmIHZhbHVlU3RyaW5n
OwogICAgICAgICBTdHJpbmcgdGFnRW5kOwogICAgICAgICBDRkluZGV4IGF0dHJpYnV0ZUNvdW50
ID0gQ0ZEaWN0aW9uYXJ5R2V0Q291bnQoYXR0cmlidXRlcyk7CiAgICAgICAgIFZlY3Rvcjxjb25z
dCB2b2lkKj4ga2V5cyhhdHRyaWJ1dGVDb3VudCk7CkBAIC0xMjMsNyArMTM0LDcgQEAgdm9pZCBJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwga0NNVGV4dE1hcmt1
cEF0dHJpYnV0ZV9BbGlnbm1lbnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7Ci0gICAgICAg
ICAgICAgICAgQ0ZTdHJpbmdSZWYgdmFsdWVTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1Jl
Zj4odmFsdWUpOworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8Q0ZT
dHJpbmdSZWY+KHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWVT
dHJpbmcpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZhbHVl
U3RyaW5nKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
aWYgKHByb2Nlc3NlZCAmIEFsaWduKQpAQCAtMTMxLDExICsxNDIsMTEgQEAgdm9pZCBJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB8
PSBBbGlnbjsKIAogICAgICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUodmFsdWVTdHJp
bmcsIGtDTVRleHRNYXJrdXBBbGlnbm1lbnRUeXBlX1N0YXJ0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbykKLSAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjpzdGFydCAi
KTsKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+YWxpZ24gPSBHZW5lcmljQ3VlRGF0YTo6
U3RhcnQ7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZTdHJpbmdDb21wYXJlKHZhbHVlU3Ry
aW5nLCBrQ01UZXh0TWFya3VwQWxpZ25tZW50VHlwZV9NaWRkbGUsIDApID09IGtDRkNvbXBhcmVF
cXVhbFRvKQotICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoImFsaWduOm1pZGRs
ZSAiKTsKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+YWxpZ24gPSBHZW5lcmljQ3VlRGF0
YTo6TWlkZGxlOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1
ZVN0cmluZywga0NNVGV4dE1hcmt1cEFsaWdubWVudFR5cGVfRW5kLCAwKSA9PSBrQ0ZDb21wYXJl
RXF1YWxUbykKLSAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjplbmQg
Iik7CisgICAgICAgICAgICAgICAgICAgIGN1ZURhdGEtPmFsaWduID0gR2VuZXJpY0N1ZURhdGE6
OkVuZDsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogCkBAIC0xNzAsOSArMTgxLDYgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGOjpwcm9jZXNzQwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoQ0ZT
dHJpbmdDb21wYXJlKGtleSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9PcnRob2dvbmFsTGluZVBv
c2l0aW9uUGVyY2VudGFnZVJlbGF0aXZlVG9Xcml0aW5nRGlyZWN0aW9uLCAwKSA9PSBrQ0ZDb21w
YXJlRXF1YWxUbykgewotICAgICAgICAgICAgICAgIC8vIElnbm9yZSB0aGUgbGluZSBwb3NpdGlv
biBpZiB0aGUgYXR0cmlidXRlcyBhbHNvIHNwZWNpZnkgInNpemUiIHNvIHdlIGtlZXAgV2ViVlRU
J3MgZGVmYXVsdCBsaW5lIGxvZ2ljCi0gICAgICAgICAgICAgICAgaWYgKENGRGljdGlvbmFyeUdl
dFZhbHVlKGF0dHJpYnV0ZXMsIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfV3JpdGluZ0RpcmVjdGlv
blNpemVQZXJjZW50YWdlKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlKSAhPSBDRk51bWJlckdldFR5cGVJRCgpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vz
c2VkICYgTGluZSkKQEAgLTE4MCw5ICsxODgsNyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IExpbmU7CiAKICAg
ICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRpY19jYXN0PENGTnVt
YmVyUmVmPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlIHBvc2l0aW9uOwotICAgICAg
ICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJlckZsb2F0NjRU
eXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmFwcGVuZChTdHJpbmc6
OmZvcm1hdCgibGluZTolbGQlJSAiLCBscmludChwb3NpdGlvbikpKTsKKyAgICAgICAgICAgICAg
ICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJmN1
ZURhdGEtPmxpbmUpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQog
CkBAIC0xOTQsOSArMjAwLDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9j
ZXNzQwogICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB8PSBQb3NpdGlvbjsKIAogICAgICAgICAg
ICAgICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+
KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgICAgICAg
ICAgQ0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZw
b3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKFN0cmluZzo6Zm9ybWF0
KCJwb3NpdGlvbjolbGQlJSAiLCBscmludChwb3NpdGlvbikpKTsKKyAgICAgICAgICAgICAgICBD
Rk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJmN1ZURh
dGEtPnBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
IApAQCAtMjA4LDE2ICsyMTIsNjAgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpw
cm9jZXNzQwogICAgICAgICAgICAgICAgIHByb2Nlc3NlZCB8PSBTaXplOwogCiAgICAgICAgICAg
ICAgICAgQ0ZOdW1iZXJSZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4o
dmFsdWUpOwotICAgICAgICAgICAgICAgIGRvdWJsZSBwb3NpdGlvbjsKLSAgICAgICAgICAgICAg
ICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnBv
c2l0aW9uKTsKLSAgICAgICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoU3RyaW5nOjpmb3JtYXQo
InNpemU6JWxkJSUgIiwgbHJpbnQocG9zaXRpb24pKSk7CisgICAgICAgICAgICAgICAgQ0ZOdW1i
ZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZjdWVEYXRhLT5z
aXplKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfVmVy
dGljYWxMYXlvdXQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSB7CisgICAgICAgICAgICAgICAg
dmFsdWVTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUpOworICAgICAgICAg
ICAgICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZVN0cmluZykgIT0gQ0ZTdHJpbmdHZXRUeXBlSUQo
KSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgodmFsdWVTdHJpbmcpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoQ0ZTdHJp
bmdDb21wYXJlKHZhbHVlU3RyaW5nLCBrQ01UZXh0VmVydGljYWxMYXlvdXRfTGVmdFRvUmlnaHQs
IDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQorICAgICAgICAgICAgICAgICAgICB0YWdTdGFydC5h
cHBlbmQobGVmdFRvUmlnaHRNYXJrKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChDRlN0cmlu
Z0NvbXBhcmUodmFsdWVTdHJpbmcsIGtDTVRleHRWZXJ0aWNhbExheW91dF9SaWdodFRvTGVmdCwg
MCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pCisgICAgICAgICAgICAgICAgICAgIHRhZ1N0YXJ0LmFw
cGVuZChyaWdodFRvTGVmdE1hcmspOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtl
eSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdlUmVsYXRpdmVU
b1ZpZGVvSGVpZ2h0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICAgICAgICAg
IGlmIChDRkdldFR5cGVJRCh2YWx1ZSkgIT0gQ0ZOdW1iZXJHZXRUeXBlSUQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Q0ZOdW1iZXJSZWYgdmFsdWVOdW1iZXIgPSBzdGF0aWNfY2FzdDxDRk51bWJlclJlZj4odmFsdWUp
OworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJl
ckZsb2F0NjRUeXBlLCAmY3VlRGF0YS0+YmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKENG
U3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6
ZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRU
eXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVyUmVm
IHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICBDRk51bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlw
ZSwgJmN1ZURhdGEtPnJlbGF0aXZlRm9udFNpemUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKGtleSwg
a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9Gb250RmFtaWx5TmFtZSwgMCkgPT0ga0NGQ29tcGFyZUVx
dWFsVG8pIHsKKyAgICAgICAgICAgICAgICB2YWx1ZVN0cmluZyA9IHN0YXRpY19jYXN0PENGU3Ry
aW5nUmVmPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKENGR2V0VHlwZUlEKHZhbHVlU3Ry
aW5nKSAhPSBDRlN0cmluZ0dldFR5cGVJRCgpIHx8ICFDRlN0cmluZ0dldExlbmd0aCh2YWx1ZVN0
cmluZykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlm
IChwcm9jZXNzZWQgJiBGb250TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IEZvbnROYW1lOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGN1ZURhdGEtPmZvbnROYW1lID0gdmFsdWVTdHJpbmc7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKwogICAgICAgICBj
b250ZW50LmFwcGVuZCh0YWdTdGFydCk7CiAgICAgICAgIGNvbnRlbnQuYXBwZW5kKGF0dHJpYnV0
ZWRTdHJpbmdWYWx1ZS5zdWJzdHJpbmcoZWZmZWN0aXZlUmFuZ2UubG9jYXRpb24sIGVmZmVjdGl2
ZVJhbmdlLmxlbmd0aCkpOwogICAgICAgICBjb250ZW50LmFwcGVuZCh0YWdFbmQpOwogICAgIH0K
KworICAgIGlmIChjb250ZW50Lmxlbmd0aCgpKQorICAgICAgICBjdWVEYXRhLT5jb250ZW50ID0g
Y29udGVudC50b1N0cmluZygpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6
OnByb2Nlc3NDdWUoQ0ZBcnJheVJlZiBhdHRyaWJ1dGVkU3RyaW5ncywgZG91YmxlIHRpbWUpCkBA
IC0yMjgsMjEgKzI3Niw0NiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nl
c3NDCiAgICAgaWYgKG1faGF2ZVBhcnRpYWxDdWUpIHsKICAgICAgICAgLy8gQ3VlcyBkbyBub3Qg
aGF2ZSBhbiBleHBsaWNpdCBkdXJhdGlvbiwgdGhleSBhcmUgZGlzcGxheWVkIHVudGlsIHRoZSBu
ZXh0ICJjdWUiICh3aGljaCBtaWdodCBiZSBlbXB0eSkgaXMgZW1pdHRlZC4KICAgICAgICAgbV9j
dXJyZW50Q3VlRW5kVGltZSA9IHRpbWU7Ci0gICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9
JS4yZiwgc2V0dGluZ3M9XCIlc1wiLCBjb250ZW50PVwiJXNcIiBcbiIsCi0gICAgICAgICAgICBt
X2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsCi0gICAgICAgICAgICBt
X2N1cnJlbnRDdWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fY3VycmVudEN1
ZUNvbnRlbnQudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPmZs
dXNoQ3VycmVudEN1ZSh0aGlzKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Q3VlRW5kVGltZSA+
PSBtX2N1cnJlbnRDdWVTdGFydFRpbWUpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jdWVzLnNpemUoKTsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBHZW5lcmljQ3Vl
RGF0YSogY3VlRGF0YSA9IG1fY3Vlc1tpXTsKKworICAgICAgICAgICAgICAgIExPRyhNZWRpYSwg
IkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFy
dD0lLjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAorICAgICAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIGN1ZURhdGEtPmNv
bnRlbnQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKCFjdWVEYXRhLT5jb250ZW50Lmxlbmd0aCgpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjdWVEYXRhLT5zdGFydFRp
bWUgPSBtX2N1cnJlbnRDdWVTdGFydFRpbWU7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+ZW5k
VGltZSA9IG1fY3VycmVudEN1ZUVuZFRpbWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gQVZGb3VuZGF0aW9uIGN1ZSAicG9zaXRpb24iIGlzIHRvIHRoZSBjZW50ZXIgb2Yg
dGhlIHRleHQgc28gYWRqdXN0IHJlbGF0aXZlIHRvIHRoZSBlZGdlIGJlY2F1c2Ugd2Ugd2lsbCB1
c2UgaXQgdG8KKyAgICAgICAgICAgICAgICAvLyBzZXQgQ1NTICJsZWZ0Ii4KKyAgICAgICAgICAg
ICAgICBpZiAoY3VlRGF0YS0+cG9zaXRpb24gPj0gMCAmJiBjdWVEYXRhLT5zaXplID4gMCkKKyAg
ICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+cG9zaXRpb24gLT0gY3VlRGF0YS0+c2l6ZSAvIDI7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9wbGF5ZXItPmFkZEdlbmVyaWND
dWUodGhpcywgKmN1ZURhdGEpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUg
bmVnYXRpdmUgbGVuZ3RoIGN1ZShzKSBpZ25vcmVkOiBzdGFydD0lLjJmLCBlbmQ9JS4yZlxuIiwg
bV9jdXJyZW50Q3VlU3RhcnRUaW1lLCBtX2N1cnJlbnRDdWVFbmRUaW1lKTsKKwogICAgICAgICBy
ZXNldEN1ZVZhbHVlcygpOwogICAgIH0KIAogICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0
Q291bnQoYXR0cmlidXRlZFN0cmluZ3MpOworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAg
Q0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0dHJpYnV0ZWRTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRkF0
dHJpYnV0ZWRTdHJpbmdSZWY+KENGQXJyYXlHZXRWYWx1ZUF0SW5kZXgoYXR0cmlidXRlZFN0cmlu
Z3MsIGkpKTsKIAogICAgICAgICBpZiAoIWF0dHJpYnV0ZWRTdHJpbmcgfHwgIUNGQXR0cmlidXRl
ZFN0cmluZ0dldExlbmd0aChhdHRyaWJ1dGVkU3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZWRTdHJpbmcsIG1fY3Vy
cmVudEN1ZUNvbnRlbnQsIG1fY3VycmVudEN1ZVNldHRpbmdzKTsKKyAgICAgICAgbV9jdWVzLmFw
cGVuZChuZXcgR2VuZXJpY0N1ZURhdGEpOworICAgICAgICBwcm9jZXNzQ3VlQXR0cmlidXRlcyhh
dHRyaWJ1dGVkU3RyaW5nLCBtX2N1ZXNbaV0pOwogICAgICAgICBtX2N1cnJlbnRDdWVTdGFydFRp
bWUgPSB0aW1lOwogICAgICAgICBtX2hhdmVQYXJ0aWFsQ3VlID0gdHJ1ZTsKICAgICB9CkBAIC0y
NTYsMTcgKzMyOSwxMyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OmRpc2Nvbm5l
CiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWVWYWx1ZXMoKQogewot
ICAgIGlmIChtX2hhdmVQYXJ0aWFsQ3VlICYmICFtX2N1cnJlbnRDdWVFbmRUaW1lKSB7Ci0gICAg
ICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFsdWVz
IGZsdXNoaW5nIGRhdGEgZm9yIGN1ZTogc3RhcnQ9JS4yZiwgZW5kPSUuMmYsIHNldHRpbmdzPVwi
JXNcIiwgY29udGVudD1cIiVzXCIgXG4iLAotICAgICAgICAgICAgbV9jdXJyZW50Q3VlU3RhcnRU
aW1lLCBtX2N1cnJlbnRDdWVFbmRUaW1lLCBtX2N1cnJlbnRDdWVTZXR0aW5ncy50b1N0cmluZygp
LnV0ZjgoKS5kYXRhKCksIG1fY3VycmVudEN1ZUNvbnRlbnQudG9TdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICB9CisgICAgaWYgKG1faGF2ZVBhcnRpYWxDdWUgJiYgIW1fY3VycmVudEN1ZUVu
ZFRpbWUpCisgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJl
c2V0Q3VlVmFsdWVzIGZsdXNoaW5nIGRhdGEgZm9yIGN1ZXM6IHN0YXJ0PSUuMmZcbiIsIG1fY3Vy
cmVudEN1ZVN0YXJ0VGltZSk7CiAKKyAgICBtX2N1ZXMucmVzaXplKDApOwogICAgIG1faGF2ZVBh
cnRpYWxDdWUgPSBmYWxzZTsKLSAgICBtX2N1cnJlbnRDdWVJZCA9IFN0cmluZygpOwogICAgIG1f
Y3VycmVudEN1ZVN0YXJ0VGltZSA9IDA7CiAgICAgbV9jdXJyZW50Q3VlRW5kVGltZSA9IDA7Ci0g
ICAgbV9jdXJyZW50Q3VlU2V0dGluZ3MuY2xlYXIoKTsKLSAgICBtX2N1cnJlbnRDdWVDb250ZW50
LmNsZWFyKCk7CiB9CiAKIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6c2V0TW9kZShJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlOjpNb2RlIG5ld01vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
Ri5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgJKHJldmlzaW9uIDEzOTg5MCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDIwICszNSwxMiBAQAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb247Citz
dHJ1Y3QgR2VuZXJpY0N1ZURhdGE7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYg
OiBwdWJsaWMgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgfkluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkYoKTsKLQotICAgIFN0cmluZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y3VycmVudEN1ZUlkOyB9Ci0gICAgZG91YmxlIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJy
ZW50Q3VlU3RhcnRUaW1lOyB9Ci0gICAgZG91YmxlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudEN1ZUVuZFRpbWU7IH0KLSAgICBTdHJpbmcgc2V0dGluZ3MoKSB7IHJldHVybiBtX2N1cnJl
bnRDdWVTZXR0aW5ncy50b1N0cmluZygpOyB9Ci0gICAgU3RyaW5nIGNvbnRlbnQoKSB7IHJldHVy
biBtX2N1cnJlbnRDdWVDb250ZW50LnRvU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgcHJvY2Vzc0N1
ZShDRkFycmF5UmVmLCBkb3VibGUpOwotCi0gICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOworICAg
IH5JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TW9k
ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpNb2RlKSBPVkVSUklERTsKIApAQCAtNjAsMTYgKzUy
LDE4IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0JlZW5SZXBvcnRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faGFzQmVlblJlcG9ydGVkOyB9CiAgICAgdm9pZCBzZXRIYXNCZWVuUmVwb3J0ZWQoYm9vbCBy
ZXBvcnRlZCkgeyBtX2hhc0JlZW5SZXBvcnRlZCA9IHJlcG9ydGVkOyB9CiAKKyAgICB2b2lkIHBy
b2Nlc3NDdWUoQ0ZBcnJheVJlZiwgZG91YmxlKTsKKyAgICB2b2lkIHJlc2V0Q3VlVmFsdWVzKCk7
CisKIHByb3RlY3RlZDoKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbiopOwogCi0gICAgdm9pZCBwcm9jZXNzQ3VlQXR0cmlidXRlcyhD
RkF0dHJpYnV0ZWRTdHJpbmdSZWYsIFN0cmluZ0J1aWxkZXImIGNvbnRlbnQsIFN0cmluZ0J1aWxk
ZXImIHNldHRpbmdzKTsKKyAgICB2b2lkIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRl
ZFN0cmluZ1JlZiwgR2VuZXJpY0N1ZURhdGEqKTsKIAotICAgIFN0cmluZyBtX2N1cnJlbnRDdWVJ
ZDsKICAgICBkb3VibGUgbV9jdXJyZW50Q3VlU3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2N1cnJl
bnRDdWVFbmRUaW1lOwotICAgIFN0cmluZ0J1aWxkZXIgbV9jdXJyZW50Q3VlU2V0dGluZ3M7Ci0g
ICAgU3RyaW5nQnVpbGRlciBtX2N1cnJlbnRDdWVDb250ZW50OworCisgICAgVmVjdG9yPEdlbmVy
aWNDdWVEYXRhKj4gbV9jdWVzOwogCiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
KiBtX3BsYXllcjsKICAgICBpbnQgbV9pbmRleDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxMzk4
OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDYg
KzU4MiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVk
KCVwKSAtIGZpbmlzaGVkID0gJWQiLCB0aGlzLCBmaW5pc2hlZCk7CiAgICAgVU5VU0VEX1BBUkFN
KGZpbmlzaGVkKTsKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkK
KyAgICBpZiAoY3VycmVudFRyYWNrKCkpCisgICAgICAgIGN1cnJlbnRUcmFjaygpLT5yZXNldEN1
ZVZhbHVlcygpOworI2VuZGlmCisKICAgICBtX3NlZWtUbyA9IE1lZGlhUGxheWVyOjppbnZhbGlk
VGltZSgpOwogICAgIHVwZGF0ZVN0YXRlcygpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgp
OwpAQCAtODExLDE5ICs4MTYsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OmRpcwogfQogCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQT1JUKQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmZsdXNoQ3VycmVudEN1ZShJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGKiB0cmFjaykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjphZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqIHRyYWNr
LCBjb25zdCBHZW5lcmljQ3VlRGF0YSYgY3VlRGF0YSkKIHsKICAgICBpZiAoIXRyYWNrLT5jbGll
bnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQVZGb3VuZGF0aW9uIHJldHVybnMgYSBj
dWUgZXZlcnkgdGltZSB0aGUgZGF0YSBpcyBidWZmZXJlZCwgb25seSBhZGQgaXQgb25jZS4KLSAg
ICBpZiAodHJhY2stPmNsaWVudCgpLT5oYXNDdWUodHJhY2ssIHRyYWNrLT5zdGFydCgpLCB0cmFj
ay0+ZW5kKCksIHRyYWNrLT5pZCgpLCB0cmFjay0+Y29udGVudCgpLCB0cmFjay0+c2V0dGluZ3Mo
KSkpIHsKLSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
OjpmbHVzaEN1cnJlbnRDdWUoJXApIC0gYWxyZWFkeSBoYXZlIGN1ZSBmb3IgdGltZSAlLjJmIiwg
dGhpcywgdHJhY2stPnN0YXJ0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpmbHVzaEN1cnJlbnRDdWUo
JXApIC0gYWRkaW5nIGN1ZSBmb3IgdGltZSAlLjJmIiwgdGhpcywgdHJhY2stPnN0YXJ0KCkpOwot
ICAgIHRyYWNrLT5jbGllbnQoKS0+YWRkQ3VlKHRyYWNrLCB0cmFjay0+c3RhcnQoKSwgdHJhY2st
PmVuZCgpLCB0cmFjay0+aWQoKSwgdHJhY2stPmNvbnRlbnQoKSwgdHJhY2stPnNldHRpbmdzKCkp
OworICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YWRkR2Vu
ZXJpY0N1ZSglcCkgLSBhZGRpbmcgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCBjdWVEYXRhLnN0
YXJ0VGltZSk7CisgICAgdHJhY2stPmNsaWVudCgpLT5hZGRHZW5lcmljQ3VlKHRyYWNrLCBjdWVE
YXRhKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmNvbmZpZ3Vy
ZUluYmFuZFRyYWNrcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiAxMzk4OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjsKK3N0cnVjdCBHZW5l
cmljQ3VlRGF0YTsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uIDogcHVi
bGljIE1lZGlhUGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiBwdWJsaWM6CkBAIC0xMTgsNyArMTE5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJNYWluVGhyZWFkUGVuZGluZ0ZsYWcoKTsKIAog
I2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkKLSAgICB2b2lkIGZsdXNo
Q3VycmVudEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKik7CisgICAgdm9pZCBhZGRHZW5l
cmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqLCBjb25zdCBHZW5lcmljQ3VlRGF0YSYp
OwogICAgIHZvaWQgdHJhY2tNb2RlQ2hhbmdlZCgpOwogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZUFWRm91bmRhdGlvbk9iakMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5tbQkocmV2aXNpb24gMTM5ODkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0
aW9uT2JqQy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBAIFNPRlRfTElOS19D
TEFTUyhBVkZvdW5kYXRpb24sIEFWTWVkaWFTZWwKIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRh
dGlvbiwgQVZNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJsZSwgTlNTdHJpbmcgKikKIFNPRlRfTElO
S19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYVR5cGVTdWJ0aXRsZSwgTlNTdHJpbmcgKikK
IFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYUNoYXJhY3RlcmlzdGljQ29u
dGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzLCBOU1N0cmluZyAqKQorU09GVF9MSU5LX1BPSU5URVIo
QVZGb3VuZGF0aW9uLCBBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxpbmdSZXNvbHV0
aW9uU291cmNlQW5kUnVsZXNPbmx5LCBOU1N0cmluZyAqKQogCiAjZGVmaW5lIEFWUGxheWVySXRl
bUxlZ2libGVPdXRwdXQgZ2V0QVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dENsYXNzKCkKICNkZWZp
bmUgQVZNZWRpYVNlbGVjdGlvbkdyb3VwIGdldEFWTWVkaWFTZWxlY3Rpb25Hcm91cENsYXNzKCkK
QEAgLTExMyw2ICsxMTQsNyBAQCBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVk
aWFDCiAjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xlZ2libGUgZ2V0QVZNZWRpYUNoYXJh
Y3RlcmlzdGljTGVnaWJsZSgpCiAjZGVmaW5lIEFWTWVkaWFUeXBlU3VidGl0bGUgZ2V0QVZNZWRp
YVR5cGVTdWJ0aXRsZSgpCiAjZGVmaW5lIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25s
eUZvcmNlZFN1YnRpdGxlcyBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3Jj
ZWRTdWJ0aXRsZXMoKQorI2RlZmluZSBBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxp
bmdSZXNvbHV0aW9uU291cmNlQW5kUnVsZXNPbmx5IGdldEFWUGxheWVySXRlbUxlZ2libGVPdXRw
dXRUZXh0U3R5bGluZ1Jlc29sdXRpb25Tb3VyY2VBbmRSdWxlc09ubHkoKQogI2VuZGlmCiAKICNk
ZWZpbmUga0NNVGltZVplcm8gZ2V0a0NNVGltZVplcm8oKQpAQCAtMzkxLDcgKzM5Myw2IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICNpZiBIQVZFKEFWRk9VTkRB
VElPTl9URVhUX1RSQUNLX1NVUFBPUlQpCiAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgc2V0QXBwbGll
c01lZGlhU2VsZWN0aW9uQ3JpdGVyaWFBdXRvbWF0aWNhbGx5OllFU107CiAjZW5kaWYKLSAgICAK
IAogICAgIGlmIChtX2F2UGxheWVySXRlbSkKICAgICAgICAgW21fYXZQbGF5ZXIuZ2V0KCkgcmVw
bGFjZUN1cnJlbnRJdGVtV2l0aFBsYXllckl0ZW06bV9hdlBsYXllckl0ZW0uZ2V0KCldOwpAQCAt
NDEwLDcgKzQxMSw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoK
IAogICAgIC8vIENyZWF0ZSB0aGUgcGxheWVyIGl0ZW0gc28gd2UgY2FuIGxvYWQgbWVkaWEgZGF0
YS4gCiAgICAgbV9hdlBsYXllckl0ZW0uYWRvcHROUyhbW0FWUGxheWVySXRlbSBhbGxvY10gaW5p
dFdpdGhBc3NldDptX2F2QXNzZXQuZ2V0KCldKTsKLSAgICAKKwogICAgIFtbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl0gYWRkT2JzZXJ2ZXI6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkg
c2VsZWN0b3I6QHNlbGVjdG9yKGRpZEVuZDopIG5hbWU6QVZQbGF5ZXJJdGVtRGlkUGxheVRvRW5k
VGltZU5vdGlmaWNhdGlvbiBvYmplY3Q6bV9hdlBsYXllckl0ZW0uZ2V0KCldOwogCiAgICAgZm9y
IChOU1N0cmluZyAqa2V5TmFtZSBpbiBpdGVtS1ZPUHJvcGVydGllcygpKQpAQCAtODk3LDYgKzg5
OCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKIAogICAgICAg
ICBbbV9sZWdpYmxlT3V0cHV0LmdldCgpIHNldERlbGVnYXRlOm1fb2JqY09ic2VydmVyLmdldCgp
IHF1ZXVlOmRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCldOwogICAgICAgICBbbV9sZWdpYmxlT3V0
cHV0LmdldCgpIHNldEFkdmFuY2VJbnRlcnZhbEZvckRlbGVnYXRlSW52b2NhdGlvbjpOU1RpbWVJ
bnRlcnZhbFNpbmNlMTk3MF07CisgICAgICAgIFttX2xlZ2libGVPdXRwdXQuZ2V0KCkgc2V0VGV4
dFN0eWxpbmdSZXNvbHV0aW9uOkFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRUZXh0U3R5bGluZ1Jl
c29sdXRpb25Tb3VyY2VBbmRSdWxlc09ubHldOwogICAgICAgICBbbV9hdlBsYXllckl0ZW0uZ2V0
KCkgYWRkT3V0cHV0Om1fbGVnaWJsZU91dHB1dC5nZXQoKV07CiAgICAgfQogI2VuZGlmCkBAIC0x
MjEyLDcgKzEyMTQsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
CiAgICAgICAgIExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
OnByb2Nlc3NUZXh0VHJhY2tzKCVwKSAtIG5pbCBtZWRpYVNlbGVjdGlvbkdyb3VwIiwgdGhpcyk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICAKICAgICBWZWN0b3I8UmVmUHRyPEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkY+ID4gcmVtb3ZlZFRleHRUcmFja3MgPSBtX3RleHRUcmFja3M7
CiAgICAgTlNBcnJheSAqbGVnaWJsZU9wdGlvbnMgPSBbQVZNZWRpYVNlbGVjdGlvbkdyb3VwIHBs
YXlhYmxlTWVkaWFTZWxlY3Rpb25PcHRpb25zRnJvbUFycmF5OltsZWdpYmxlR3JvdXAgb3B0aW9u
c11dOwogICAgIGZvciAoQVZNZWRpYVNlbGVjdGlvbk9wdGlvblR5cGUgKm9wdGlvbiBpbiBsZWdp
YmxlT3B0aW9ucykgewpAQCAtMTIyOCwxMyArMTIzMCw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAgaWYgKCFuZXdUcmFjaykKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChbW29wdGlvbiBtZWRpYVR5cGVdIGlzRXF1YWxUb1N0
cmluZzpBVk1lZGlhVHlwZVN1YnRpdGxlXSkgewotICAgICAgICAgICAgaWYgKCFbb3B0aW9uIGhh
c01lZGlhQ2hhcmFjdGVyaXN0aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9y
Y2VkU3VidGl0bGVzXSkgewotICAgICAgICAgICAgICAgIEFWTWVkaWFTZWxlY3Rpb25PcHRpb25U
eXBlICpmb3JjZWRPbmx5T3B0aW9uID0gW29wdGlvbiBhc3NvY2lhdGVkTWVkaWFTZWxlY3Rpb25P
cHRpb25Jbk1lZGlhU2VsZWN0aW9uR3JvdXA6bGVnaWJsZUdyb3VwXTsKLSAgICAgICAgICAgICAg
ICBpZiAoZm9yY2VkT25seU9wdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFtbb3B0aW9uIG1lZGlhVHlwZV0g
aXNFcXVhbFRvU3RyaW5nOkFWTWVkaWFUeXBlU3VidGl0bGVdICYmIFtvcHRpb24gaGFzTWVkaWFD
aGFyYWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0
aXRsZXNdKQorICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbV90ZXh0VHJhY2tzLmFw
cGVuZChJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQzo6Y3JlYXRlKHRoaXMsIG9wdGlvbikp
OwogICAgIH0KQEAgLTEyNzUsNiArMTI3Miw5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uT2JqQzoKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6
c2V0Q3VycmVudFRyYWNrKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgKnRyYWNrKQogewogICAg
IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDKiB0cmFja1ByaXZhdGUgPSBzdGF0aWNfY2Fz
dDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGT2JqQyo+KHRyYWNrKTsKKyAgICBpZiAobV9jdXJy
ZW50VHJhY2sgPT0gdHJhY2tQcml2YXRlKQorICAgICAgICByZXR1cm47CisKICAgICBBVk1lZGlh
U2VsZWN0aW9uT3B0aW9uVHlwZSAqbWVkaWFTZWxlY3Rpb25PcHRpb24gPSB0cmFja1ByaXZhdGUg
PyB0cmFja1ByaXZhdGUtPm1lZGlhU2VsZWN0aW9uT3B0aW9uKCkgOiAwOwogCiAgICAgTE9HKE1l
ZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVudFRyYWNr
KCVwKSAtIHNlbGVjdGluZyBtZWRpYSBvcHRpb24gJXAiLCB0aGlzLCBtZWRpYVNlbGVjdGlvbk9w
dGlvbik7CkBAIC0xNDI0LDYgKzE0MjQsOCBAQCAtICh2b2lkKWxlZ2libGVPdXRwdXQ6KGlkKW91
dHB1dCBkaWRPdXRwCiAgICAgICAgIHJldHVybjsKIAogICAgIGRpc3BhdGNoX2FzeW5jKGRpc3Bh
dGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgIGlmICghbV9jYWxsYmFjaykKKyAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgbV9jYWxsYmFjay0+cHJvY2Vzc0N1ZShzdHJpbmdzLCBD
TVRpbWVHZXRTZWNvbmRzKGl0ZW1UaW1lKSk7CiAgICAgfSk7CiB9Cg==
</data>
<flag name="review"
          id="201323"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183826</attachid>
            <date>2013-01-21 13:24:04 -0800</date>
            <delta_ts>2013-01-21 13:44:45 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch_28.txt</filename>
            <type>text/plain</type>
            <size>69110</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBACisyMDEzLTAxLTIxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgbm9uLVdl
YlZUVCBjdWVzIGZyb20gaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxl
cy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJn
ZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAgICogaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6IFBhc3MgdmlkZW8g
c2l6ZSB0byBnZXREaXNwbGF5VHJlZS4KKworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4
dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJp
Y0N1ZSk6IE5ldywgY3JlYXRlIGEgZ2VuZXJpYyBjdWUgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4
aXN0LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjphZGRXZWJWVFRDdWUpOiBS
ZW5hbWVkIGZyb20gYWRkQ3VlLgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNr
Lmg6CisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2s6Omhhc0N1ZSk6IE1vdmVkIGZyb20gSW5iYW5kVGV4dFRyYWNrLmNwcCwg
dXNlIG9wZXJhdG9yID09IGluc3RlYWQgb2YgaW5saW5lCisgICAgICAgICAgICBjb21wYXJpc29u
IHNvIGRlcml2ZWQgVGV4dFRyYWNrQ3VlcyBjYW4gYmUgY29tcGFyZWQuCisgICAgICAgICogaHRt
bC90cmFjay9UZXh0VHJhY2suaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0
aWVzKTogSW50ZXJmYWNlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
VGV4dFRyYWNrQ3VlKTogRG9uJ3QgY3JlYXRlIHRoZSBkaXNwbGF5IHRyZWUgaW4gdGhlIGNvbnN0
cnVjdG9yLCBpdCBtYXkKKyAgICAgICAgICAgIG5ldmVyIGJlIG5lZWRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFja0N1ZTo6Y3JlYXRlRGlzcGxheVRyZWUpOiBOZXcsIGNyZWF0ZSB0aGUg
ZGlzcGxheSB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkaXNwbGF5VHJl
ZUludGVybmFsKTogRGlzcGxheSB0cmVlIGFjY2Vzc29yLCBhbGxvd3MgaXQgdG8gYmUgY3JlYXRl
ZCBsYXppbHkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNldEFsaWduKTogQWxp
Z25tZW50IC0+IEN1ZUFsaWdubWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
c2V0SXNBY3RpdmUpOiBVc2UgZGlzcGxheVRyZWVJbnRlcm5hbCgpLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXREaXNwbGF5VHJlZSk6IFVzZSBkaXNwbGF5VHJlZUludGVybmFs
KCksIHBhc3MgdmlkZW8gc2l6ZSB0byBhcHBseUNTU1Byb3BlcnRpZXMuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWU6OnJlbW92ZURpc3BsYXlUcmVlKTogVXNlIGRpc3BsYXlUcmVlSW50
ZXJuYWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PSk6IE5l
dy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXRBbGlnbm1lbnQpOiBBbGlnbm1lbnQgLT4gQ3VlQWxpZ25tZW50
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpvcGVyYXRvciE9KTogTmV3LgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpjdWVUeXBlKTogTmV3LCBjdWUgdHlwZSBpZGVu
dGlmaWVkIG5lZWRlZCBieSBvcGVyYXRvcj09LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlOjpvd25lckRvY3VtZW50KTogTmV3LgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVH
ZW5lcmljQm94OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJp
Y0JveDo6VGV4dFRyYWNrQ3VlR2VuZXJpY0JveCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tDdWVHZW5lcmljQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
OlRleHRUcmFja0N1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpj
cmVhdGVEaXNwbGF5VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmlj
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6flRleHRUcmFja0N1ZUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6YmFzZUZvbnRT
aXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZUdlbmVyaWM6OnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpmb250U2l6ZU11bHRpcGxpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udFNpemVNdWx0aXBsaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmZvbnROYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnNldEZvbnROYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3VlVHlwZSk6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vz
c0N1ZUF0dHJpYnV0ZXMpOiBDb3B5IGN1ZSBhdHRyaWJ1dGVzIGludG8gR2VuZXJpY0N1ZURhdGEK
KyAgICAgICAgICAgIHN0cnVjdCBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb252ZXJ0IHRvIFdlYlZU
VCBzZXR0aW5ncyBzdHJpbmcuIFByb2Nlc3MgZm9udCBzaXplLGZvbnQgYmFzZQorICAgICAgICAg
ICAgc2l6ZSwgZm9udCBuYW1lLCBhbmQgdmVydGljYWwgbGF5b3V0IGF0dHJpYnV0ZXMsCisgICAg
ICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlKTogQ3Jl
YXRlIHNlcGFyYXRlIGN1ZXMgZm9yIGVhY2ggYXR0cmlidXRlZAorICAgICAgICAgICAgc3RyaW5n
IGluIHRoZSBhcnJheSBiZWNhdXNlIGVhY2ggb25lIGNhbiBiZSBhdCBhIGRpZmZlcmVudCBzY3Jl
ZW4gbG9jYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
OjpyZXNldEN1ZVZhbHVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaDoKKyAgICAgICAgKEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQpOiBSZXNldCBhbnkg
cGFydGlhbGx5IGFjY3VtdWxhdGVkIGN1ZXMKKyAgICAgICAgICAgIGRlbGl2ZXJlZCBzaW5jZSB0
aGUgc2VlayB3YXMgc3RhcnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6YWRkR2VuZXJpY0N1ZSk6IFJlbmFtZWQgZnJvbSBmbHVzaEN1cnJlbnRD
dWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbi5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0
ZUFWUGxheWVyKTogV2hpdGVzcGFjZSBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0
cmFja3NDaGFuZ2VkKTogVGVsbCBsZWdpYmxlIG91dHB1dCB0byBkZWxpdmVyIGN1ZXMKKyAgICAg
ICAgICAgIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgc3R5bGluZyBuZWVkZWQgYnkgdGhlIGludGVy
bmFsIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6cHJvY2Vzc1RleHRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVudFRyYWNrKTogRG8gbm90aGlu
ZyBpZiBhc2tlZCB0byBjaGFuZ2UKKyAgICAgICAgICAgIHRvIHRoZSB0cmFjayB0aGF0IGlzIGFs
cmVhZHkgY3VycmVudC4KKyAgICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgbGVnaWJs
ZU91dHB1dDpkaWRPdXRwdXRBdHRyaWJ1dGVkU3RyaW5nczpuYXRpdmVTYW1wbGVCdWZmZXJzOmZv
ckl0ZW1UaW1lOl0pOgorICAgICAgICAgICAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNs
aWVudCBjYWxsYmFjayBpc24ndCBOVUxMLgorCiAyMDEzLTAxLTIxICBWbGFkaXNsYXYgS2F6bmFj
aGVldiAgPGthem5hY2hlZXZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtJbnNwZWN0b3JdIExh
eW91dCBFbGVtZW50cyBwYW5lbCBpbiBhIHNpbmdsZSBjb2x1bW4gd2hlbiBkb2NrZWQgcmlnaHQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1ODEsNiArMTU4MSw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNw
cAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmNwcAorICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAKICAgICBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0
LmNwcAogICAgIGh0bWwvdHJhY2svVHJhY2tCYXNlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcyLDYgKzM2NzIsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2tDdWVHZW5lcmljLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3Bw
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTkxNSw2ICsxOTE1LDcgQEAgSEVBREVSUyAr
PSBcCiAgICAgaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oIFwKICAgICBodG1sL3RyYWNr
L1RleHRUcmFjay5oIFwKICAgICBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oIFwKKyAgICBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaCBcCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tD
dWVMaXN0LmggXAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oIFwKICAgICBodG1sL3Ry
YWNrL1RyYWNrQmFzZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ1Nyw2
ICszNDU3LDggQEAKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFjay5oJywKICAgICAg
ICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
dHJhY2svVGV4dFRyYWNrQ3VlLmgnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlR2VuZXJpYy5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2Vu
ZXJpYy5oJywKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwJywK
ICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaCcsCiAgICAgICAgICAg
ICAnaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTQwMzM0KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTY1MjY1LDYgKzY1MjY1LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUdlbmVyaWMuY3Bw
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFx0cmFja1xUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUxp
c3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQwMzM0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNiArMTA4LDggQEAKIAkJMDcwNzU2REYxNDIzOUI0RTAwNDE0MTYxIC8q
IEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzA3NTZEOTE0MjM5QjRDMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVM
aXN0LmNwcCAqLzsgfTsKIAkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNr
Q3VlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovOyB9Owog
CQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwOUZDNEQxMDI1REVF
MzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsgfTsKKwkJMDcxQTlFQzIxNjhG
QkM0MzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzAxNjhGQjU2QzAwMjYyOUY5IC8q
IFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwICovOyB9OworCQkwNzFBOUVDMzE2OEZCQzU1MDAyNjI5
RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzExNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1
ZUdlbmVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMEIwOUUxNEQz
MzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCAqLzsgfTsKIAkJMDcyMEIwQTAx
NEQzMzIzNTAwNjQyOTU2IC8qIEdlc3R1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTYgLyogR2Vz
dHVyZUV2ZW50LmNwcCAqLzsgfTsKIAkJMDcyMEIwQTExNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVy
aWNFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzMwMyw2ICs3
MzA1LDggQEAKIAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RleHRUcmFja0N1ZUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZDNEQxMDI1REVFMzAwNTlDREJB
IC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5
RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0VHJhY2tDdWVHZW5lcmljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA3MjBCMDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBH
ZW5lcmljRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5l
cmljRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0
RDMzMjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTc0NCw2ICsxOTc0OCw4IEBACiAJCQkJOTc1OUU5MzgxNEVGMUNGODAwMjZBMkRE
IC8qIFRleHRUcmFja0N1ZS5jcHAgKi8sCiAJCQkJOTc1OUU5MzkxNEVGMUNGODAwMjZBMkREIC8q
IFRleHRUcmFja0N1ZS5oICovLAogCQkJCTk3NTlFOTNBMTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0
VHJhY2tDdWUuaWRsICovLAorCQkJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcCAqLywKKwkJCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4
dFRyYWNrQ3VlR2VuZXJpYy5oICovLAogCQkJCTk3NTlFOTNCMTRFRjFDRjgwMDI2QTJERCAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmNwcCAqLywKIAkJCQk5NzU5RTkzQzE0RUYxQ0Y4MDAyNkEyREQgLyog
VGV4dFRyYWNrQ3VlTGlzdC5oICovLAogCQkJCTk3NTlFOTNEMTRFRjFDRjgwMDI2QTJERCAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmlkbCAqLywKQEAgLTI2MDI3LDYgKzI2MDMzLDcgQEAKIAkJCQlCMkMz
REE0QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTc1OUU5NDAxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc1OUU5NDMxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMDcxQTlFQzMxNjhGQkM1NTAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTlFOTQ2MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJh
Y2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzY5NzA4NzE0NjNBRDg3MDBGNTAyQ0Yg
LyogVGV4dFRyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjFBRDRFNzQxM0ExMkE0NjAw
ODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTIxMSw2ICsy
OTIxOCw3IEBACiAJCQkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1OUU5M0YxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzU5RTk0MjE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4
dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3MUE5RUMyMTY4RkJDNDMwMDI2MjlG
OSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NTlFOTQ1
MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3Njk3MDg2MTQ2M0FEODcwMEY1MDJDRiAvKiBUZXh0VHJhY2tMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIxQUQ0RTczMTNBMTJBNDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTksNiArMzgxOSwxMSBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIoCiAKICAgICBtX3BlbmRpbmdMb2Fk
RmxhZ3MgJj0gfmZsYWdzOwogICAgIG1fbG9hZFN0YXRlID0gV2FpdGluZ0ZvclNvdXJjZTsKKwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBpZiAobV90ZXh0VHJhY2tzKQorICAgICAgICBj
b25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCk7CisjZW5kaWYKIH0KIAogYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpjYW5TdXNwZW5kKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwNCw4ICsxMzA0LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZQogICAgICAgICBpZiAoIWN1ZS0+dHJhY2soKSB8fCAhY3VlLT50
cmFjaygpLT5pc1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBS
ZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZSgp
OwotCisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3BsYXlCb3ggPSBjdWUtPmdl
dERpc3BsYXlUcmVlKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkpOwogICAgICAgICBpZiAoZGlz
cGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhzdGF0aWNfY2FzdDxOb2RlKj4o
ZGlzcGxheUJveC5nZXQoKSkpKQogICAgICAgICAgICAgLy8gTm90ZTogdGhlIGRpc3BsYXkgdHJl
ZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhlIGFjdGl2ZSBmbGFnIG9mIHRoZSBjdWUgaXMg
dW5zZXQuCiAgICAgICAgICAgICBtX2N1ZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZGlzcGxheUJv
eCwgQVNTRVJUX05PX0VYQ0VQVElPTiwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAkocmV2aXNpb24gMTQwMzM0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw5ICszMiwxMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKLQorI2luY2x1ZGUgPG1h
dGguaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtOTgsNzQgKzEwMCw1NSBAQCBzaXplX3QgSW5iYW5kVGV4dFRyYWNrOjppbmJhbmRUcmFj
a0luZGV4CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dFRyYWNrSW5kZXgoKTsKIH0KIAotdm9p
ZCBJbmJhbmRUZXh0VHJhY2s6OmFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiB0cmFja1By
aXZhdGUsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0
VHJhY2s6OmFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSogdHJhY2tQcml2YXRl
LCBHZW5lcmljQ3VlRGF0YSogY3VlRGF0YSkKIHsKICAgICBVTlVTRURfUEFSQU0odHJhY2tQcml2
YXRlKTsKICAgICBBU1NFUlQodHJhY2tQcml2YXRlID09IG1fcHJpdmF0ZSk7CiAKLSAgICBSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIGNvbnRlbnQpOwotICAgIGN1ZS0+c2V0SWQoaWQpOwot
ICAgIGN1ZS0+c2V0Q3VlU2V0dGluZ3Moc2V0dGluZ3MpOwotICAgIGN1ZS0+c2V0VHJhY2sodGhp
cyk7CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVyaWM+IGN1ZSA9IFRleHRUcmFja0N1ZUdl
bmVyaWM6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGN1ZURhdGEtPnN0YXJ0VGlt
ZSgpLCBjdWVEYXRhLT5lbmRUaW1lKCksIGN1ZURhdGEtPmNvbnRlbnQoKSk7CiAKLSAgICBpZiAo
IW1fY3VlcykKLSAgICAgICAgbV9jdWVzID0gVGV4dFRyYWNrQ3VlTGlzdDo6Y3JlYXRlKCk7Ci0g
ICAgbV9jdWVzLT5hZGQoY3VlKTsKLSAgICAKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNs
aWVudCgpLT50ZXh0VHJhY2tBZGRDdWVzKHRoaXMsIG1fY3Vlcy5nZXQoKSk7CisgICAgY3VlLT5z
ZXRJZChjdWVEYXRhLT5pZCgpKTsKKyAgICBjdWUtPnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9W
aWRlb0hlaWdodChjdWVEYXRhLT5iYXNlRm9udFNpemUoKSk7CisgICAgY3VlLT5zZXRGb250U2l6
ZU11bHRpcGxpZXIoY3VlRGF0YS0+cmVsYXRpdmVGb250U2l6ZSgpKTsKKyAgICBjdWUtPnNldEZv
bnROYW1lKGN1ZURhdGEtPmZvbnROYW1lKCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICBpZiAoY3VlRGF0YS0+cG9zaXRpb24oKSA+IDApCisgICAgICAgIGN1ZS0+c2V0UG9zaXRpb24o
bHJvdW5kKGN1ZURhdGEtPnBvc2l0aW9uKCkpLCBlYyk7CisgICAgaWYgKGN1ZURhdGEtPmxpbmUo
KSA+IDApCisgICAgICAgIGN1ZS0+c2V0TGluZShscm91bmQoY3VlRGF0YS0+bGluZSgpKSwgZWMp
OworICAgIGlmIChjdWVEYXRhLT5zaXplKCkgPiAwKQorICAgICAgICBjdWUtPnNldFNpemUobHJv
dW5kKGN1ZURhdGEtPnNpemUoKSksIGVjKTsKKyAgICBpZiAoY3VlRGF0YS0+YWxpZ24oKSA9PSBH
ZW5lcmljQ3VlRGF0YTo6U3RhcnQpCisgICAgICAgIGN1ZS0+c2V0QWxpZ24oQVNDSUlMaXRlcmFs
KCJzdGFydCIpLCBlYyk7CisgICAgZWxzZSBpZiAoY3VlRGF0YS0+YWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6TWlkZGxlKQorICAgICAgICBjdWUtPnNldEFsaWduKEFTQ0lJTGl0ZXJhbCgibWlk
ZGxlIiksIGVjKTsKKyAgICBlbHNlIGlmIChjdWVEYXRhLT5hbGlnbigpID09IEdlbmVyaWNDdWVE
YXRhOjpFbmQpCisgICAgICAgIGN1ZS0+c2V0QWxpZ24oQVNDSUlMaXRlcmFsKCJlbmQiKSwgZWMp
OworICAgIGN1ZS0+c2V0U25hcFRvTGluZXMoZmFsc2UpOworCisgICAgaWYgKGhhc0N1ZShjdWUu
Z2V0KCkpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJp
Y0N1ZSBpZ25vcmluZyBhbHJlYWR5IGFkZGVkIGN1ZTogc3RhcnQ9JS4yZiwgZW5kPSUuMmYsIGNv
bnRlbnQ9XCIlc1wiXG4iLAorICAgICAgICAgICAgY3VlRGF0YS0+c3RhcnRUaW1lKCksIGN1ZURh
dGEtPmVuZFRpbWUoKSwgY3VlRGF0YS0+Y29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYWRkQ3VlKGN1ZSk7CiB9CiAKLWJvb2wgSW5iYW5kVGV4
dFRyYWNrOjpoYXNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSBzdGFydFRpbWUs
IGRvdWJsZSBlbmRUaW1lLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCit2b2lkIEluYmFuZFRleHRUcmFjazo6YWRkV2ViVlRU
Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0ZSwgZG91YmxlIHN0YXJ0LCBk
b3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0
IFN0cmluZyYgc2V0dGluZ3MpCiB7CisgICAgVU5VU0VEX1BBUkFNKHRyYWNrUHJpdmF0ZSk7Cisg
ICAgQVNTRVJUKHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZhdGUpOwogCi0gICAgaWYgKHN0YXJ0VGlt
ZSA8IDAgfHwgZW5kVGltZSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
Y3VlcygpLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZV90IHNl
YXJjaFN0YXJ0ID0gMDsKLSAgICBzaXplX3Qgc2VhcmNoRW5kID0gY3VlcygpLT5sZW5ndGgoKTsK
LQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIEFTU0VSVChzZWFyY2hTdGFydCA8PSBjdWVzKCkt
Pmxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKHNlYXJjaEVuZCA8PSBjdWVzKCktPmxlbmd0aCgp
KTsKLSAgICAgICAgCi0gICAgICAgIFRleHRUcmFja0N1ZSogY3VlOwotICAgICAgICAKLSAgICAg
ICAgLy8gQ3VlcyBpbiB0aGUgVGV4dFRyYWNrQ3VlTGlzdCBhcmUgbWFpbnRhaW5lZCBpbiBzdGFy
dCB0aW1lIG9yZGVyLgotICAgICAgICBpZiAoc2VhcmNoU3RhcnQgPT0gc2VhcmNoRW5kKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNlYXJjaFN0YXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY3VlID0gY3VlcygpLT5pdGVtKHNlYXJjaFN0
YXJ0IC0gMSk7Ci0gICAgICAgICAgICBpZiAoIWN1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT5zdGFydFRpbWUoKSAhPSBzdGFydFRpbWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+ZW5kVGlt
ZSgpICE9IGVuZFRpbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgaWYgKGN1ZS0+dGV4dCgpICE9IGNvbnRlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+Y3VlU2V0dGluZ3MoKSAhPSBzZXR0aW5ncykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT5pZCgpICE9
IGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBp
bmRleCA9IChzZWFyY2hTdGFydCArIHNlYXJjaEVuZCkgLyAyOwotICAgICAgICBjdWUgPSBjdWVz
KCktPml0ZW0oaW5kZXgpOwotICAgICAgICBpZiAoc3RhcnRUaW1lIDwgY3VlLT5zdGFydFRpbWUo
KSB8fCAoc3RhcnRUaW1lID09IGN1ZS0+c3RhcnRUaW1lKCkgJiYgZW5kVGltZSA+IGN1ZS0+ZW5k
VGltZSgpKSkKLSAgICAgICAgICAgIHNlYXJjaEVuZCA9IGluZGV4OwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZWFyY2hTdGFydCA9IGluZGV4ICsgMTsKLSAgICB9CisgICAgUmVmUHRyPFRl
eHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBzdGFydCwgZW5kLCBjb250ZW50KTsKKyAgICBjdWUtPnNldElkKGlkKTsKKyAgICBj
dWUtPnNldEN1ZVNldHRpbmdzKHNldHRpbmdzKTsKICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0N1ZShjdWUuZ2V0KCkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhZGRDdWUoY3VlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5o
CShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRl
eHRUcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW5iYW5kVGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBUZXh0VHJhY2tD
bGllbnQqLCBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+KTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSwgZG91YmxlLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUsIGRv
dWJsZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSosIEdlbmVyaWNDdWVEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZFdlYlZU
VEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwogCiAgICAgUmVmUHRy
PEluYmFuZFRleHRUcmFja1ByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTMzOSw2ICszMzksNjQgQEAgaW50IFRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9S
ZW5kZQogICAgIHJldHVybiBtX3JlbmRlcmVkVHJhY2tJbmRleDsKIH0KIAorYm9vbCBUZXh0VHJh
Y2s6Omhhc0N1ZShUZXh0VHJhY2tDdWUqIGN1ZSkKK3sKKyAgICBpZiAoY3VlLT5zdGFydFRpbWUo
KSA8IDAgfHwgY3VlLT5lbmRUaW1lKCkgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKCFtX2N1ZXMgfHwgIW1fY3Vlcy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzaXplX3Qgc2VhcmNoU3RhcnQgPSAwOworICAgIHNpemVfdCBzZWFy
Y2hFbmQgPSBtX2N1ZXMtPmxlbmd0aCgpOworICAgIAorICAgIHdoaWxlICgxKSB7CisgICAgICAg
IEFTU0VSVChzZWFyY2hTdGFydCA8PSBtX2N1ZXMtPmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJU
KHNlYXJjaEVuZCA8PSBtX2N1ZXMtPmxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIFRleHRU
cmFja0N1ZSogZXhpc3RpbmdDdWU7CisgICAgICAgIAorICAgICAgICAvLyBDdWVzIGluIHRoZSBU
ZXh0VHJhY2tDdWVMaXN0IGFyZSBtYWludGFpbmVkIGluIHN0YXJ0IHRpbWUgb3JkZXIuCisgICAg
ICAgIGlmIChzZWFyY2hTdGFydCA9PSBzZWFyY2hFbmQpIHsKKyAgICAgICAgICAgIGlmICghc2Vh
cmNoU3RhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAv
LyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGN1ZSB3aXRoIHRoZSBzYW1lIHN0YXJ0IHRpbWUs
IGJhY2sgdXAgdG8gZmlyc3Qgb25lIHNvIHdlCisgICAgICAgICAgICAvLyBjb25zaWRlciBhbGwg
b2YgdGhlbS4KKyAgICAgICAgICAgIHdoaWxlIChzZWFyY2hTdGFydCA+PSAyICYmIGN1ZS0+c3Rh
cnRUaW1lKCkgPT0gbV9jdWVzLT5pdGVtKHNlYXJjaFN0YXJ0IC0gMiktPnN0YXJ0VGltZSgpKQor
ICAgICAgICAgICAgICAgIC0tc2VhcmNoU3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgZmlyc3RDb21wYXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdENvbXBhcmUpCisgICAgICAgICAgICAgICAgICAgICsrc2Vh
cmNoU3RhcnQ7CisgICAgICAgICAgICAgICAgZmlyc3RDb21wYXJlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaWYgKHNlYXJjaFN0YXJ0ID4gbV9jdWVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgZXhpc3RpbmdDdWUgPSBt
X2N1ZXMtPml0ZW0oc2VhcmNoU3RhcnQgLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4aXN0
aW5nQ3VlIHx8IGN1ZS0+c3RhcnRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGlmICgq
ZXhpc3RpbmdDdWUgIT0gKmN1ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBpbmRleCA9IChzZWFyY2hTdGFy
dCArIHNlYXJjaEVuZCkgLyAyOworICAgICAgICBleGlzdGluZ0N1ZSA9IG1fY3Vlcy0+aXRlbShp
bmRleCk7CisgICAgICAgIGlmIChjdWUtPnN0YXJ0VGltZSgpIDwgZXhpc3RpbmdDdWUtPnN0YXJ0
VGltZSgpIHx8IChjdWUtPnN0YXJ0VGltZSgpID09IGV4aXN0aW5nQ3VlLT5zdGFydFRpbWUoKSAm
JiBjdWUtPmVuZFRpbWUoKSA+IGV4aXN0aW5nQ3VlLT5lbmRUaW1lKCkpKQorICAgICAgICAgICAg
c2VhcmNoRW5kID0gaW5kZXg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlYXJjaFN0YXJ0
ID0gaW5kZXggKyAxOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05OSw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQ3VlKFBh
c3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CiAgICAgdm9pZCByZW1vdmVDdWUoVGV4dFRyYWNrQ3Vl
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgaGFzQ3VlKFRleHRUcmFja0N1ZSopOwogCiAg
ICAgdm9pZCBjdWVXaWxsQ2hhbmdlKFRleHRUcmFja0N1ZSopOwogICAgIHZvaWQgY3VlRGlkQ2hh
bmdlKFRleHRUcmFja0N1ZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmNwcAkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMTA3
LDcgKzEwNyw3IEBAIFRleHRUcmFja0N1ZSogVGV4dFRyYWNrQ3VlQm94OjpnZXRDdWUoKSAKICAg
ICByZXR1cm4gbV9jdWU7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlQm94OjphcHBseUNTU1Byb3Bl
cnRpZXMoKQordm9pZCBUZXh0VHJhY2tDdWVCb3g6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJ
bnRTaXplJikKIHsKICAgICAvLyBGSVhNRTogQXBwbHkgYWxsIHRoZSBpbml0aWFsIENTUyBwb3Np
dGlvbmluZyBwcm9wZXJ0aWVzLiBodHRwOi8vd2tiLnVnLzc5OTE2CiAKQEAgLTIxMCw3ICsyMTAs
NiBAQCBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpCiAgICAgLCBtX3Nu
YXBUb0xpbmVzKHRydWUpCiAgICAgLCBtX2FsbERvY3VtZW50Tm9kZXMoSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpKSkKICAgICAsIG1fZGlzcGxh
eVRyZWVTaG91bGRDaGFuZ2UodHJ1ZSkKLSAgICAsIG1fZGlzcGxheVRyZWUoVGV4dFRyYWNrQ3Vl
Qm94OjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpLCB0aGlzKSkKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Rv
Y3VtZW50KCkpOwogCkBAIC0yMjgsNiArMjI3LDE4IEBAIFRleHRUcmFja0N1ZTo6flRleHRUcmFj
a0N1ZSgpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWU6
OmNyZWF0ZURpc3BsYXlUcmVlKCkKK3sKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlQm94OjpjcmVh
dGUob3duZXJEb2N1bWVudCgpLCB0aGlzKTsKK30KKworUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVC
b3g+IFRleHRUcmFja0N1ZTo6ZGlzcGxheVRyZWVJbnRlcm5hbCgpCit7CisgICAgaWYgKCFtX2Rp
c3BsYXlUcmVlKQorICAgICAgICBtX2Rpc3BsYXlUcmVlID0gY3JlYXRlRGlzcGxheVRyZWUoKTsK
KyAgICByZXR1cm4gbV9kaXNwbGF5VHJlZTsKK30KKwogdm9pZCBUZXh0VHJhY2tDdWU6OmN1ZVdp
bGxDaGFuZ2UoKQogewogICAgIGlmIChtX3RyYWNrKQpAQCAtNDM4LDcgKzQ0OSw3IEBAIHZvaWQg
VGV4dFRyYWNrQ3VlOjpzZXRBbGlnbihjb25zdCBTdHJpbmcKICAgICAvLyBtYXRjaCBmb3IgdGhl
IG5ldyB2YWx1ZSwgaWYgYW55LiBJZiBub25lIG9mIHRoZSB2YWx1ZXMgbWF0Y2gsIHRoZW4gdGhl
IHVzZXIKICAgICAvLyBhZ2VudCBtdXN0IGluc3RlYWQgdGhyb3cgYSBTeW50YXhFcnJvciBleGNl
cHRpb24uCiAgICAgCi0gICAgQWxpZ25tZW50IGFsaWdubWVudCA9IG1fY3VlQWxpZ25tZW50Owor
ICAgIEN1ZUFsaWdubWVudCBhbGlnbm1lbnQgPSBtX2N1ZUFsaWdubWVudDsKICAgICBpZiAodmFs
dWUgPT0gc3RhcnRLZXl3b3JkKCkpCiAgICAgICAgIGFsaWdubWVudCA9IFN0YXJ0OwogICAgIGVs
c2UgaWYgKHZhbHVlID09IG1pZGRsZUtleXdvcmQoKSkKQEAgLTU0NSw4ICs1NTYsNyBAQCB2b2lk
IFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpCiAKICAgICBpZiAoIWFjdGl2ZSkg
ewogICAgICAgICAvLyBSZW1vdmUgdGhlIGRpc3BsYXkgdHJlZSBhcyBzb29uIGFzIHRoZSBjdWUg
YmVjb21lcyBpbmFjdGl2ZS4KLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgbV9k
aXNwbGF5VHJlZS0+cmVtb3ZlKGVjKTsKKyAgICAgICAgZGlzcGxheVRyZWVJbnRlcm5hbCgpLT5y
ZW1vdmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgfQogfQogCkBAIC03MjIsMTAgKzczMiwx
MSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6dXBkYXRlRGlzcGxheVRyZWUoZmxvCiAgICAgbV9hbGxE
b2N1bWVudE5vZGVzLT5hcHBlbmRDaGlsZChyZWZlcmVuY2VUcmVlKTsKIH0KIAotUGFzc1JlZlB0
cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoKQorUGFzc1Jl
ZlB0cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoY29uc3Qg
SW50U2l6ZSYgdmlkZW9TaXplKQogeworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3Bs
YXlUcmVlID0gZGlzcGxheVRyZWVJbnRlcm5hbCgpOwogICAgIGlmICghbV9kaXNwbGF5VHJlZVNo
b3VsZENoYW5nZSB8fCAhdHJhY2soKS0+aXNSZW5kZXJlZCgpKQotICAgICAgICByZXR1cm4gbV9k
aXNwbGF5VHJlZTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlUcmVlOwogCiAgICAgLy8gMTAuMSAt
IDEwLjEwCiAgICAgY2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMoKTsKQEAgLTczMyw3ICs3NDQs
NyBAQCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlCiAgICAgLy8gMTAu
MTEuIEFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgQ1NTIHNwZWNpZmljYXRpb25zIHRvIG5vZGVzIHdp
dGhpbiB0aGUKICAgICAvLyBmb2xsb3dpbmcgY29uc3RyYWludHMsIHRodXMgb2J0YWluaW5nIGEg
c2V0IG9mIENTUyBib3hlcyBwb3NpdGlvbmVkCiAgICAgLy8gcmVsYXRpdmUgdG8gYW4gaW5pdGlh
bCBjb250YWluaW5nIGJsb2NrOgotICAgIG1fZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7
CisgICAgZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7CiAKICAgICAvLyBUaGUgZG9jdW1l
bnQgdHJlZSBpcyB0aGUgdHJlZSBvZiBXZWJWVFQgTm9kZSBPYmplY3RzIHJvb3RlZCBhdCBub2Rl
cy4KIApAQCAtNzQzLDcgKzc1NCw3IEBAIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0
VHJhY2tDdWUKIAogICAgIC8vIE5vdGU6IFRoaXMgaXMgY29udGFpbmVkIGJ5IGRlZmF1bHQgaW4g
bV9hbGxEb2N1bWVudE5vZGVzLgogICAgIG1fYWxsRG9jdW1lbnROb2Rlcy0+c2V0UHNldWRvKGFs
bE5vZGVzU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgbV9kaXNwbGF5VHJlZS0+YXBwZW5kQ2hpbGQo
bV9hbGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCB0cnVlKTsKKyAgICBkaXNw
bGF5VHJlZS0+YXBwZW5kQ2hpbGQobV9hbGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBU
SU9OLCB0cnVlKTsKIAogICAgIC8vIEZJWE1FKEJVRyA3OTkxNik6IFJ1bnMgb2YgY2hpbGRyZW4g
b2YgV2ViVlRUIFJ1YnkgT2JqZWN0cyB0aGF0IGFyZSBub3QKICAgICAvLyBXZWJWVFQgUnVieSBU
ZXh0IE9iamVjdHMgbXVzdCBiZSB3cmFwcGVkIGluIGFub255bW91cyBib3hlcyB3aG9zZQpAQCAt
NzU2LDE4ICs3NjcsMTggQEAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1
ZQogICAgIC8vIGlzIG5vIGxpbmUgYnJlYWtpbmcgb3Bwb3J0dW5pdHkuIChUaHVzLCBub3JtYWxs
eSB0ZXh0IHdyYXBzIGFzIG5lZWRlZCwKICAgICAvLyBidXQgaWYgdGhlcmUgaXMgYSBwYXJ0aWN1
bGFybHkgbG9uZyB3b3JkLCBpdCBkb2VzIG5vdCBvdmVyZmxvdyBhcyBpdAogICAgIC8vIG5vcm1h
bGx5IHdvdWxkIGluIENTUywgaXQgaXMgaW5zdGVhZCBmb3JjaWJseSB3cmFwcGVkIGF0IHRoZSBi
b3gncyBlZGdlLikKLSAgICBtX2Rpc3BsYXlUcmVlLT5hcHBseUNTU1Byb3BlcnRpZXMoKTsKKyAg
ICBkaXNwbGF5VHJlZS0+YXBwbHlDU1NQcm9wZXJ0aWVzKHZpZGVvU2l6ZSk7CiAKICAgICBtX2Rp
c3BsYXlUcmVlU2hvdWxkQ2hhbmdlID0gZmFsc2U7CiAKICAgICAvLyAxMC4xNS4gTGV0IGN1ZSdz
IHRleHQgdHJhY2sgY3VlIGRpc3BsYXkgc3RhdGUgaGF2ZSB0aGUgQ1NTIGJveGVzIGluCiAgICAg
Ly8gYm94ZXMuCi0gICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CisgICAgcmV0dXJuIGRpc3BsYXlU
cmVlOwogfQogCiB2b2lkIFRleHRUcmFja0N1ZTo6cmVtb3ZlRGlzcGxheVRyZWUoKQogewotICAg
IG1fZGlzcGxheVRyZWUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBkaXNwbGF5
VHJlZUludGVybmFsKCktPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIH0KIAogc3RkOjpw
YWlyPGRvdWJsZSwgZG91YmxlPiBUZXh0VHJhY2tDdWU6OmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMo
KSBjb25zdApAQCAtMTA2Niw2ICsxMDc3LDMzIEBAIEV2ZW50VGFyZ2V0RGF0YSogVGV4dFRyYWNr
Q3VlOjplbnN1cmVFdmUKICAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCitib29s
IFRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QK
K3sKKyAgICBpZiAoY3VlVHlwZSgpICE9IGN1ZS5jdWVUeXBlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChtX2VuZFRpbWUgIT0gY3VlLmVuZFRpbWUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXJ0VGltZSAhPSBjdWUuc3RhcnRUaW1lKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jb250ZW50ICE9IGN1ZS50ZXh0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zZXR0aW5ncyAhPSBjdWUuY3VlU2V0dGluZ3Mo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lkICE9IGN1ZS5pZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdGV4dFBvc2l0aW9uICE9IGN1ZS5wb3NpdGlv
bigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbGluZVBvc2l0aW9uICE9IGN1
ZS5saW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jdWVTaXplICE9IGN1
ZS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYWxpZ24oKSAhPSBjdWUu
YWxpZ24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
NTcsMTEgKzU4LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBUZXh0VHJhY2tDdWUqIGdldEN1
ZSgpIGNvbnN0OwotICAgIHZvaWQgYXBwbHlDU1NQcm9wZXJ0aWVzKCk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1NpemUpOwogCiAgICAg
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgdGV4dFRyYWNrQ3VlQm94U2hhZG93UHNldWRvSWQo
KTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBUZXh0VHJhY2tDdWVCb3goRG9jdW1lbnQq
LCBUZXh0VHJhY2tDdWUqKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgT1ZFUlJJREU7CkBAIC0xMjIsMTMgKzEy
MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTbmFwVG9MaW5lcyhib29sKTsKIAogICAgIGlu
dCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9saW5lUG9zaXRpb247IH0KLSAgICB2b2lkIHNldExp
bmUoaW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmUoaW50LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBpbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRQb3NpdGlvbjsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oaW50LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGludCwgRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2N1ZVNpemU7IH0KLSAgICB2b2lkIHNldFNp
emUoaW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoaW50LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBjb25zdCBTdHJpbmcmIGFsaWduKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNTEsNyAr
MTUyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2b2lkIHNldElzQWN0
aXZlKGJvb2wpOwogCi0gICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlU
cmVlKCk7CisgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlUcmVlKGNv
bnN0IEludFNpemUmIHZpZGVvU2l6ZSk7CiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5VHJlZShmbG9h
dCk7CiAgICAgdm9pZCByZW1vdmVEaXNwbGF5VHJlZSgpOwogICAgIHZvaWQgbWFya0Z1dHVyZUFu
ZFBhc3ROb2RlcyhDb250YWluZXJOb2RlKiwgZG91YmxlLCBkb3VibGUpOwpAQCAtMTczLDYgKzE3
NCwyNSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXcml0aW5nRGlyZWN0aW9uIGdldFdyaXRpbmdE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dyaXRpbmdEaXJlY3Rpb247IH0KIAorICAgIGVu
dW0gQ3VlQWxpZ25tZW50IHsKKyAgICAgICAgU3RhcnQsCisgICAgICAgIE1pZGRsZSwKKyAgICAg
ICAgRW5kCisgICAgfTsKKyAgICBDdWVBbGlnbm1lbnQgZ2V0QWxpZ25tZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdWVBbGlnbm1lbnQ7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gY3VlKTsKKyAgICB9CisgICAgCisgICAgZW51bSBDdWVUeXBlIHsKKyAgICAgICAgR2Vu
ZXJpYywKKyAgICAgICAgV2ViVlRUCisgICAgfTsKKyAgICB2aXJ0dWFsIEN1ZVR5cGUgY3VlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFdlYlZUVDsgfQorCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihlbnRlcik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihl
eGl0KTsKIApAQCAtMTgzLDkgKzIwMywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBFdmVu
dFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRE
YXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotcHJpdmF0ZToKICAgICBUZXh0VHJhY2tD
dWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50KTsKIAorICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOyB9
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBjcmVhdGVEaXNwbGF5
VHJlZSgpOworICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5VHJlZUludGVy
bmFsKCk7CisKK3ByaXZhdGU6CiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRQb3Np
dGlvbkNvb3JkaW5hdGVzKCkgY29uc3Q7CiAgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0
cmluZyYpOwogCkBAIC0yMTMsOCArMjM4LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRpbmdEaXJl
Y3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOwogCi0gICAgZW51bSBBbGlnbm1lbnQgeyBTdGFydCwg
TWlkZGxlLCBFbmQgfTsKLSAgICBBbGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAgQ3VlQWxp
Z25tZW50IG1fY3VlQWxpZ25tZW50OwogCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1f
d2ViVlRUTm9kZVRyZWU7CiAgICAgVGV4dFRyYWNrKiBtX3RyYWNrOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIlRleHRUcmFja0N1
ZUdlbmVyaWMuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFRyYWNrQ3Vl
LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRU
cmFja0N1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRUcmFja0N1ZUdl
bmVyaWNCb3hFbGVtZW50IDogcHVibGljIFRleHRUcmFja0N1ZUJveCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQ+IGNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZUdlbmVyaWMqIGN1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoZG9j
dW1lbnQsIGN1ZSkpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDU1NQcm9w
ZXJ0aWVzKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICAKK3ByaXZhdGU6CisgICAgVGV4
dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoRG9jdW1lbnQqLCBUZXh0VHJhY2tDdWUqKTsKK307
CisKK1RleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjpUZXh0VHJhY2tDdWVHZW5lcmljQm94
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZSogY3VlKQorICAgIDogVGV4
dFRyYWNrQ3VlQm94KGRvY3VtZW50LCBjdWUpCit7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlR2Vu
ZXJpY0JveEVsZW1lbnQ6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1Np
emUpCit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBD
U1NWYWx1ZUFic29sdXRlKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
VW5pY29kZUJpZGksIENTU1ZhbHVlV2Via2l0UGxhaW50ZXh0KTsKKyAgICAKKyAgICBUZXh0VHJh
Y2tDdWVHZW5lcmljKiBjdWUgPSBzdGF0aWNfY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljKj4oZ2V0
Q3VlKCkpOworCisgICAgaWYgKGN1ZS0+dXNlRGVmYXVsdFBvc2l0aW9uKCkpIHsKKyAgICAgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgIjAiKTsKKyAgICAgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgMS4wLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y3VlLT5wb3NpdGlvbigpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAg
ICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGN1ZS0+bGluZSgpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsK
KyAgICB9CisKKyAgICBmbG9hdCBzaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN1ZS0+Z2V0Q1NT
U2l6ZSgpKTsKKyAgICBpZiAoY3VlLT5nZXRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVGV4dFRyYWNr
Q3VlOjpIb3Jpem9udGFsKSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBzaXplLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0
LCBDU1NWYWx1ZUF1dG8pOworICAgIH0gZWxzZSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgc2l6ZSwgIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgfQorCisgICAgaWYgKGN1ZS0+YmFzZUZvbnRTaXplUmVs
YXRpdmVUb1ZpZGVvSGVpZ2h0KCkpIHsKKyAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmlkZW9T
aXplLmhlaWdodCgpICogY3VlLT5iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoKSAv
IDEwMDsKKyAgICAgICAgaWYgKGN1ZS0+Zm9udFNpemVNdWx0aXBsaWVyKCkpCisgICAgICAgICAg
ICBmb250U2l6ZSAqPSBjdWUtPmZvbnRTaXplTXVsdGlwbGllcigpIC8gMTAwOworICAgICAgICBz
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIFN0cmluZzo6bnVtYmVy
KGZvbnRTaXplKSArICJweCIpOworICAgIH0KKworICAgIGlmIChjdWUtPmdldEFsaWdubWVudCgp
ID09IFRleHRUcmFja0N1ZTo6U3RhcnQpCisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVlU3RhcnQpOworICAgIGVsc2UgaWYgKGN1ZS0+
Z2V0QWxpZ25tZW50KCkgPT0gVGV4dFRyYWNrQ3VlOjpFbmQpCisgICAgICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVlRW5kKTsKKyAgICBlbHNl
CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENT
U1ZhbHVlQ2VudGVyKTsKKworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRXcml0aW5nTW9kZSwgY3VlLT5nZXRDU1NXcml0aW5nTW9kZSgpLCBmYWxzZSk7CisgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlUHJl
V3JhcCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdvcmRCcmVhaywg
Q1NTVmFsdWVOb3JtYWwpOworfQorCitUZXh0VHJhY2tDdWVHZW5lcmljOjpUZXh0VHJhY2tDdWVH
ZW5lcmljKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRl
eHQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpCisgICAgLCBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9W
aWRlb0hlaWdodCgwKQorICAgICwgbV9mb250U2l6ZU11bHRpcGxpZXIoMCkKKyAgICAsIG1fZGVm
YXVsdFBvc2l0aW9uKHRydWUpCit7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBU
ZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGVEaXNwbGF5VHJlZSgpCit7CisgICAgcmV0dXJuIFRl
eHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpLCB0aGlz
KTsKK30KKwordm9pZCBUZXh0VHJhY2tDdWVHZW5lcmljOjpzZXRMaW5lKGludCBsaW5lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBtX2RlZmF1bHRQb3NpdGlvbiA9IGZhbHNlOworICAgIFRl
eHRUcmFja0N1ZTo6c2V0TGluZShsaW5lLCBlYyk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlR2Vu
ZXJpYzo6c2V0UG9zaXRpb24oaW50IHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBtX2RlZmF1bHRQb3NpdGlvbiA9IGZhbHNlOworICAgIFRleHRUcmFja0N1ZTo6c2V0UG9zaXRp
b24ocG9zaXRpb24sIGVjKTsKK30KKworYm9vbCBUZXh0VHJhY2tDdWVHZW5lcmljOjpvcGVyYXRv
cj09KGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAoreworICAgIGlmIChjdWUuY3VlVHlw
ZSgpICE9IFRleHRUcmFja0N1ZTo6R2VuZXJpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY29uc3QgVGV4dFRyYWNrQ3VlR2VuZXJpYyogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBU
ZXh0VHJhY2tDdWVHZW5lcmljKj4oJmN1ZSk7CisKKyAgICBpZiAobV9iYXNlRm9udFNpemVSZWxh
dGl2ZVRvVmlkZW9IZWlnaHQgIT0gb3RoZXItPmJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hl
aWdodCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZm9udFNpemVNdWx0aXBs
aWVyICE9IG90aGVyLT5mb250U2l6ZU11bHRpcGxpZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX2ZvbnROYW1lICE9IG90aGVyLT5mb250TmFtZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlOjpvcGVyYXRvcj09KGN1ZSk7Cit9
CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0VHJhY2tDdWVH
ZW5lcmljX2gKKyNkZWZpbmUgVGV4dFRyYWNrQ3VlR2VuZXJpY19oCisKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRUcmFj
a0N1ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR2VuZXJpY0N1ZURhdGE7CisKKy8vIEEgImdlbmVyaWMiIGN1ZSBpcyBhIG5v
bi1XZWJWVFQgY3VlLCBzbyBpdCBpcyBub3QgcG9zaXRpb25lZC9zaXplZCB3aXRoIHRoZSBXZWJW
VFQgbG9naWMuCitjbGFzcyBUZXh0VHJhY2tDdWVHZW5lcmljIDogcHVibGljIFRleHRUcmFja0N1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0VHJhY2tDdWVHZW5lcmljKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGNvbnRl
bnQpKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+VGV4dFRyYWNrQ3VlR2VuZXJpYygpIHsg
fQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gY3JlYXRlRGlzcGxh
eVRyZWUoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lKGludCwgRXhjZXB0
aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihpbnQsIEV4
Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKworICAgIGJvb2wgdXNlRGVmYXVsdFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UG9zaXRpb247IH0KKyAgICAKKyAgICBkb3VibGUgYmFz
ZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRm9u
dFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQ7IH0KKyAgICB2b2lkIHNldEJhc2VGb250U2l6ZVJl
bGF0aXZlVG9WaWRlb0hlaWdodChkb3VibGUgc2l6ZSkgeyBtX2Jhc2VGb250U2l6ZVJlbGF0aXZl
VG9WaWRlb0hlaWdodCA9IHNpemU7IH0KKworICAgIGRvdWJsZSBmb250U2l6ZU11bHRpcGxpZXIo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTaXplTXVsdGlwbGllcjsgfQorICAgIHZvaWQgc2V0Rm9u
dFNpemVNdWx0aXBsaWVyKGRvdWJsZSBzaXplKSB7IG1fZm9udFNpemVNdWx0aXBsaWVyID0gc2l6
ZTsgfQorCisgICAgU3RyaW5nIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mb250TmFtZTsg
fQorICAgIHZvaWQgc2V0Rm9udE5hbWUoU3RyaW5nIG5hbWUpIHsgbV9mb250TmFtZSA9IG5hbWU7
IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRUcmFja0N1ZSYpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRUcmFj
a0N1ZSYgY3VlKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gY3VlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFRleHRUcmFja0N1ZTo6Q3VlVHlwZSBjdWVU
eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gVGV4dFRyYWNrQ3VlOjpHZW5lcmljOyB9CisK
K3ByaXZhdGU6CisgICAgVGV4dFRyYWNrQ3VlR2VuZXJpYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICBk
b3VibGUgbV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQ7CisgICAgZG91YmxlIG1f
Zm9udFNpemVNdWx0aXBsaWVyOworICAgIFN0cmluZyBtX2ZvbnROYW1lOworICAgIGJvb2wgbV9k
ZWZhdWx0UG9zaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oCShyZXZpc2lvbiAxNDAz
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudF9oCiAjZGVmaW5lIEluYmFuZFRleHRUcmFja1ByaXZh
dGVDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC0zNCwxMiAr
MzUsODIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlOwogCitjbGFzcyBHZW5lcmljQ3VlRGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R2VuZXJpY0N1ZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBH
ZW5lcmljQ3VlRGF0YSgpCisgICAgICAgIDogbV9zdGFydFRpbWUoMCkKKyAgICAgICAgLCBtX2Vu
ZFRpbWUoMCkKKyAgICAgICAgLCBtX2xpbmUoLTEpCisgICAgICAgICwgbV9wb3NpdGlvbigtMSkK
KyAgICAgICAgLCBtX3NpemUoLTEpCisgICAgICAgICwgbV9hbGlnbihOb25lKQorICAgICAgICAs
IG1fYmFzZUZvbnRTaXplKDApCisgICAgICAgICwgbV9yZWxhdGl2ZUZvbnRTaXplKDApCisgICAg
eworICAgIH0KKyAgICB2aXJ0dWFsIH5HZW5lcmljQ3VlRGF0YSgpIHsgfQorCisgICAgZG91Ymxl
IHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAgdm9pZCBzZXRT
dGFydFRpbWUoZG91YmxlIHN0YXJ0VGltZSkgeyBtX3N0YXJ0VGltZSA9IHN0YXJ0VGltZTsgfQor
CisgICAgZG91YmxlIGVuZFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2VuZFRpbWU7IH0KKyAgICB2
b2lkIHNldEVuZFRpbWUoZG91YmxlIGVuZFRpbWUpIHsgbV9lbmRUaW1lID0gZW5kVGltZTsgfQor
CisgICAgU3RyaW5nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHZvaWQgc2V0SWQo
U3RyaW5nIGlkKSB7IG1faWQgPSBpZDsgfQorCisgICAgU3RyaW5nIGNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnQ7IH0KKyAgICB2b2lkIHNldENvbnRlbnQoU3RyaW5nIGNvbnRlbnQp
IHsgbV9jb250ZW50ID0gY29udGVudDsgfQorCisgICAgZG91YmxlIGxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmU7IH0KKyAgICB2b2lkIHNldExpbmUoZG91YmxlIGxpbmUpIHsgbV9saW5lID0g
bGluZTsgfQorCisgICAgZG91YmxlIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24g
PSBwb3NpdGlvbjsgfQorCisgICAgZG91YmxlIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICB2b2lkIHNldFNpemUoZG91YmxlIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorCisg
ICAgZW51bSBBbGlnbm1lbnQgeworICAgICAgICBOb25lLAorICAgICAgICBTdGFydCwKKyAgICAg
ICAgTWlkZGxlLAorICAgICAgICBFbmQKKyAgICB9OworICAgIEFsaWdubWVudCBhbGlnbigpIGNv
bnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KKyAgICB2b2lkIHNldEFsaWduKEFsaWdubWVudCBhbGln
bikgeyBtX2FsaWduID0gYWxpZ247IH0KKworICAgIFN0cmluZyBmb250TmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE5hbWU7IH0KKyAgICB2b2lkIHNldEZvbnROYW1lKFN0cmluZyBmb250TmFt
ZSkgeyBtX2ZvbnROYW1lID0gZm9udE5hbWU7IH0KKworICAgIGRvdWJsZSBiYXNlRm9udFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2Jhc2VGb250U2l6ZTsgfQorICAgIHZvaWQgc2V0QmFzZUZvbnRT
aXplKGRvdWJsZSBiYXNlRm9udFNpemUpIHsgbV9iYXNlRm9udFNpemUgPSBiYXNlRm9udFNpemU7
IH0KKworICAgIGRvdWJsZSByZWxhdGl2ZUZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZWxh
dGl2ZUZvbnRTaXplOyB9CisgICAgdm9pZCBzZXRSZWxhdGl2ZUZvbnRTaXplKGRvdWJsZSByZWxh
dGl2ZUZvbnRTaXplKSB7IG1fcmVsYXRpdmVGb250U2l6ZSA9IHJlbGF0aXZlRm9udFNpemU7IH0K
KyAgICAKK3ByaXZhdGU6CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgZG91YmxlIG1f
ZW5kVGltZTsKKyAgICBTdHJpbmcgbV9pZDsKKyAgICBTdHJpbmcgbV9jb250ZW50OworICAgIGRv
dWJsZSBtX2xpbmU7CisgICAgZG91YmxlIG1fcG9zaXRpb247CisgICAgZG91YmxlIG1fc2l6ZTsK
KyAgICBBbGlnbm1lbnQgbV9hbGlnbjsKKyAgICBTdHJpbmcgbV9mb250TmFtZTsKKyAgICBkb3Vi
bGUgbV9iYXNlRm9udFNpemU7CisgICAgZG91YmxlIG1fcmVsYXRpdmVGb250U2l6ZTsKK307CisK
IGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1
YWwgfkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQoKSB7IH0KICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRkQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUgLypzdGFydCovLCBk
b3VibGUgLyplbmQqLywgY29uc3QgU3RyaW5nJiAvKmlkKi8sIGNvbnN0IFN0cmluZyYgLypjb250
ZW50Ki8sIGNvbnN0IFN0cmluZyYgLypzZXR0aW5ncyovKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGhhc0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlIC8qc3RhcnQqLywgZG91Ymxl
IC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCovLCBjb25zdCBTdHJpbmcmIC8qY29udGVudCov
LCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRX
ZWJWVFRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAvKnN0YXJ0Ki8sIGRvdWJs
ZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQqLywgY29uc3QgU3RyaW5nJiAvKmNvbnRlbnQq
LywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
R2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgR2VuZXJpY0N1ZURhdGEqKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAxNDAzMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKIAorI2luY2x1ZGUgIkluYmFuZFRleHRU
cmFja1ByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIK
QEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogU09GVF9MSU5LX0ZSQU1F
V09SS19PUFRJT05BTChDb3JlTWVkaWEpCiAKQEAgLTUyLDYgKzU0LDkgQEAgU09GVF9MSU5LX1BP
SU5URVJfT1BUSU9OQUwoQ29yZU1lZGlhLCBrQwogU09GVF9MSU5LX1BPSU5URVJfT1BUSU9OQUwo
Q29yZU1lZGlhLCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0LCBDRlN0cmlu
Z1JlZikKIFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dFZlcnRp
Y2FsTGF5b3V0X0xlZnRUb1JpZ2h0LCBDRlN0cmluZ1JlZikKIFNPRlRfTElOS19QT0lOVEVSX09Q
VElPTkFMKENvcmVNZWRpYSwga0NNVGV4dFZlcnRpY2FsTGF5b3V0X1JpZ2h0VG9MZWZ0LCBDRlN0
cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1h
cmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0
LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NN
VGV4dE1hcmt1cEF0dHJpYnV0ZV9SZWxhdGl2ZUZvbnRTaXplLCBDRlN0cmluZ1JlZikKK1NPRlRf
TElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9G
b250RmFtaWx5TmFtZSwgQ0ZTdHJpbmdSZWYpCiAKICNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJp
YnV0ZV9BbGlnbm1lbnQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9BbGlnbm1lbnQoKQogI2Rl
ZmluZSBrQ01UZXh0TWFya3VwQWxpZ25tZW50VHlwZV9TdGFydCBnZXRrQ01UZXh0TWFya3VwQWxp
Z25tZW50VHlwZV9TdGFydCgpCkBAIC02Niw2ICs3MSw5IEBAIFNPRlRfTElOS19QT0lOVEVSX09Q
VElPTkFMKENvcmVNZWRpYSwga0MKICNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0
aWNhbExheW91dCBnZXRrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0KCkKICNk
ZWZpbmUga0NNVGV4dFZlcnRpY2FsTGF5b3V0X0xlZnRUb1JpZ2h0IGdldGtDTVRleHRWZXJ0aWNh
bExheW91dF9MZWZ0VG9SaWdodCgpCiAjZGVmaW5lIGtDTVRleHRWZXJ0aWNhbExheW91dF9SaWdo
dFRvTGVmdCBnZXRrQ01UZXh0VmVydGljYWxMYXlvdXRfUmlnaHRUb0xlZnQoKQorI2RlZmluZSBr
Q01UZXh0TWFya3VwQXR0cmlidXRlX0Jhc2VGb250U2l6ZVBlcmNlbnRhZ2VSZWxhdGl2ZVRvVmlk
ZW9IZWlnaHQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdl
UmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkKKyNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9S
ZWxhdGl2ZUZvbnRTaXplIGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6
ZSgpCisjZGVmaW5lIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUgZ2V0a0NN
VGV4dE1hcmt1cEF0dHJpYnV0ZV9Gb250RmFtaWx5TmFtZSgpCiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKQEAgLTg0LDcgKzkyLDcgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFu
ZFRleHRUcgogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmli
dXRlZFN0cmluZywgU3RyaW5nQnVpbGRlciYgY29udGVudCwgU3RyaW5nQnVpbGRlciYgc2V0dGlu
Z3MpCit2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVz
KENGQXR0cmlidXRlZFN0cmluZ1JlZiBhdHRyaWJ1dGVkU3RyaW5nLCBHZW5lcmljQ3VlRGF0YSog
Y3VlRGF0YSkKIHsKICAgICAvLyBTb21lIG9mIHRoZSBhdHRyaWJ1dGVzIHdlIHRyYW5zbGF0ZSBp
bnRvIHBlci1jdWUgV2ViVlRUIHNldHRpbmdzIGFyZSBhcmUgcmVwZWF0ZWQgb24gZWFjaCBwYXJ0
IG9mIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIHNvIG9ubHkKICAgICAvLyBwcm9jZXNzIHRoZSBmaXJz
dCBpbnN0YW5jZSBvZiBlYWNoLgpAQCAtOTMsMTAgKzEwMSwxMiBAQCB2b2lkIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgIFBvc2l0aW9uID0gMSA8PCAxLAogICAg
ICAgICBTaXplID0gMSA8PCAyLAogICAgICAgICBWZXJ0aWNhbCA9IDEgPDwgMywKLSAgICAgICAg
QWxpZ24gPSAxIDw8IDQKKyAgICAgICAgQWxpZ24gPSAxIDw8IDQsCisgICAgICAgIEZvbnROYW1l
ID0gMSA8PCA1CiAgICAgfTsKICAgICB1bnNpZ25lZCBwcm9jZXNzZWQgPSAwOwogCisgICAgU3Ry
aW5nQnVpbGRlciBjb250ZW50OwogICAgIFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nVmFsdWUgPSBD
RkF0dHJpYnV0ZWRTdHJpbmdHZXRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CiAgICAgQ0ZJbmRl
eCBsZW5ndGggPSBhdHRyaWJ1dGVkU3RyaW5nVmFsdWUubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5n
dGgpCkBAIC0xMTAsNiArMTIwLDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpw
cm9jZXNzQwogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgU3RyaW5nQnVpbGRlciB0
YWdTdGFydDsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgdmFsdWVTdHJpbmc7CiAgICAgICAgIFN0cmlu
ZyB0YWdFbmQ7CiAgICAgICAgIENGSW5kZXggYXR0cmlidXRlQ291bnQgPSBDRkRpY3Rpb25hcnlH
ZXRDb3VudChhdHRyaWJ1dGVzKTsKICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBrZXlzKGF0
dHJpYnV0ZUNvdW50KTsKQEAgLTEyMyw3ICsxMzQsNyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0FsaWdu
bWVudCwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKLSAgICAgICAgICAgICAgICBDRlN0cmlu
Z1JlZiB2YWx1ZVN0cmluZyA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPih2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUp
OwogICAgICAgICAgICAgICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZVN0cmluZykgIT0gQ0ZTdHJp
bmdHZXRUeXBlSUQoKSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgodmFsdWVTdHJpbmcpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkICYg
QWxpZ24pCkBAIC0xMzEsMTEgKzE0MiwxMSBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IEFsaWduOwogCiAgICAg
ICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1hcmt1
cEFsaWdubWVudFR5cGVfU3RhcnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAg
ICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoImFsaWduOnN0YXJ0ICIpOworICAgICAgICAgICAg
ICAgICAgICBjdWVEYXRhLT5zZXRBbGlnbihHZW5lcmljQ3VlRGF0YTo6U3RhcnQpOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1h
cmt1cEFsaWdubWVudFR5cGVfTWlkZGxlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAg
ICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjptaWRkbGUgIik7CisgICAgICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldEFsaWduKEdlbmVyaWNDdWVEYXRhOjpNaWRkbGUpOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NN
VGV4dE1hcmt1cEFsaWdubWVudFR5cGVfRW5kLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAg
ICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjplbmQgIik7CisgICAgICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldEFsaWduKEdlbmVyaWNDdWVEYXRhOjpFbmQpOwogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKQEAgLTE3MCw5ICsxODEsNiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6
OnByb2Nlc3NDCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBh
cmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX09ydGhvZ29uYWxMaW5lUG9zaXRpb25QZXJj
ZW50YWdlUmVsYXRpdmVUb1dyaXRpbmdEaXJlY3Rpb24sIDApID09IGtDRkNvbXBhcmVFcXVhbFRv
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBsaW5lIHBvc2l0aW9uIGlmIHRoZSBh
dHRyaWJ1dGVzIGFsc28gc3BlY2lmeSAic2l6ZSIgc28gd2Uga2VlcCBXZWJWVFQncyBkZWZhdWx0
IGxpbmUgbG9naWMKLSAgICAgICAgICAgICAgICBpZiAoQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoYXR0
cmlidXRlcywga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9Xcml0aW5nRGlyZWN0aW9uU2l6ZVBlcmNl
bnRhZ2UpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBp
ZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWQgJiBMaW5l
KQpAQCAtMTgwLDkgKzE4OCw5IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJv
Y2Vzc0MKICAgICAgICAgICAgICAgICBwcm9jZXNzZWQgfD0gTGluZTsKIAogICAgICAgICAgICAg
ICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZh
bHVlKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgICAgICAgICAg
Q0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZwb3Np
dGlvbik7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJs
aW5lOiVsZCUlICIsIGxyaW50KHBvc2l0aW9uKSkpOworICAgICAgICAgICAgICAgIGRvdWJsZSBs
aW5lOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51
bWJlckZsb2F0NjRUeXBlLCAmbGluZSk7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0TGlu
ZShsaW5lKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAt
MTk2LDcgKzIwNCw3IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0MK
ICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRpY19jYXN0PENG
TnVtYmVyUmVmPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgZG91YmxlIHBvc2l0aW9uOwogICAg
ICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJlckZsb2F0
NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgicG9zaXRpb246JWxkJSUgIiwgbHJpbnQocG9zaXRpb24pKSk7CisgICAgICAg
ICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0yMDgsMTYgKzIxNiw2NiBAQCB2b2lkIElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vz
c2VkIHw9IFNpemU7CiAKICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9
IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IHBvc2l0aW9uOwotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIs
IGtDRk51bWJlckZsb2F0NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRp
bmdzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgic2l6ZTolbGQlJSAiLCBscmludChwb3NpdGlvbikp
KTsKKyAgICAgICAgICAgICAgICBkb3VibGUgc2l6ZTsKKyAgICAgICAgICAgICAgICBDRk51bWJl
ckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnNpemUpOworICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldFNpemUoc2l6ZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUo
a2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0LCAwKSA9PSBrQ0ZDb21w
YXJlRXF1YWxUbykgeworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8
Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFs
dWVTdHJpbmcpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZh
bHVlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NN
VGV4dFZlcnRpY2FsTGF5b3V0X0xlZnRUb1JpZ2h0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykK
KyAgICAgICAgICAgICAgICAgICAgdGFnU3RhcnQuYXBwZW5kKGxlZnRUb1JpZ2h0TWFyayk7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZTdHJpbmdDb21wYXJlKHZhbHVlU3RyaW5nLCBrQ01U
ZXh0VmVydGljYWxMYXlvdXRfUmlnaHRUb0xlZnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQor
ICAgICAgICAgICAgICAgICAgICB0YWdTdGFydC5hcHBlbmQocmlnaHRUb0xlZnRNYXJrKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVf
QmFzZUZvbnRTaXplUGVyY2VudGFnZVJlbGF0aXZlVG9WaWRlb0hlaWdodCwgMCkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9
IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0g
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBkb3VibGUg
YmFzZUZvbnRTaXplOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1i
ZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmYmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAg
ICBjdWVEYXRhLT5zZXRCYXNlRm9udFNpemUoYmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250
U2l6ZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZH
ZXRUeXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVy
UmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBkb3VibGUgcmVsYXRpdmVGb250U2l6ZTsKKyAgICAgICAgICAgICAgICBDRk51
bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnJlbGF0aXZl
Rm9udFNpemUpOworICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldFJlbGF0aXZlRm9udFNpemUo
cmVsYXRpdmVGb250U2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3Vw
QXR0cmlidXRlX0ZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAg
ICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWVTdHJpbmcpICE9IENGU3Ry
aW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZhbHVlU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZCAm
IEZvbnROYW1lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzZWQgfD0gRm9udE5hbWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY3VlRGF0YS0+c2V0Rm9udE5hbWUodmFsdWVTdHJpbmcpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgY29udGVudC5hcHBl
bmQodGFnU3RhcnQpOwogICAgICAgICBjb250ZW50LmFwcGVuZChhdHRyaWJ1dGVkU3RyaW5nVmFs
dWUuc3Vic3RyaW5nKGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uLCBlZmZlY3RpdmVSYW5nZS5sZW5n
dGgpKTsKICAgICAgICAgY29udGVudC5hcHBlbmQodGFnRW5kKTsKICAgICB9CisKKyAgICBpZiAo
Y29udGVudC5sZW5ndGgoKSkKKyAgICAgICAgY3VlRGF0YS0+c2V0Q29udGVudChjb250ZW50LnRv
U3RyaW5nKCkpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3ND
dWUoQ0ZBcnJheVJlZiBhdHRyaWJ1dGVkU3RyaW5ncywgZG91YmxlIHRpbWUpCkBAIC0yMjgsMjEg
KzI4Niw0NyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAg
aWYgKG1faGF2ZVBhcnRpYWxDdWUpIHsKICAgICAgICAgLy8gQ3VlcyBkbyBub3QgaGF2ZSBhbiBl
eHBsaWNpdCBkdXJhdGlvbiwgdGhleSBhcmUgZGlzcGxheWVkIHVudGlsIHRoZSBuZXh0ICJjdWUi
ICh3aGljaCBtaWdodCBiZSBlbXB0eSkgaXMgZW1pdHRlZC4KICAgICAgICAgbV9jdXJyZW50Q3Vl
RW5kVGltZSA9IHRpbWU7Ci0gICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgc2V0
dGluZ3M9XCIlc1wiLCBjb250ZW50PVwiJXNcIiBcbiIsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fY3VycmVudEN1ZUNvbnRlbnQu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPmZsdXNoQ3VycmVu
dEN1ZSh0aGlzKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Q3VlRW5kVGltZSA+PSBtX2N1cnJl
bnRDdWVTdGFydFRpbWUpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
dWVzLnNpemUoKTsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBHZW5lcmljQ3VlRGF0YSogY3Vl
RGF0YSA9IG1fY3Vlc1tpXS5nZXQoKTsKKworICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIklu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0l
LjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAorICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIGN1ZURhdGEtPmNvbnRl
bnQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIWN1ZURhdGEtPmNvbnRlbnQoKS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0U3Rh
cnRUaW1lKG1fY3VycmVudEN1ZVN0YXJ0VGltZSk7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+
c2V0RW5kVGltZShtX2N1cnJlbnRDdWVFbmRUaW1lKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBBVkZvdW5kYXRpb24gY3VlICJwb3NpdGlvbiIgaXMgdG8gdGhlIGNlbnRl
ciBvZiB0aGUgdGV4dCBzbyBhZGp1c3QgcmVsYXRpdmUgdG8gdGhlIGVkZ2UgYmVjYXVzZSB3ZSB3
aWxsIHVzZSBpdCB0bworICAgICAgICAgICAgICAgIC8vIHNldCBDU1MgImxlZnQiLgorICAgICAg
ICAgICAgICAgIGlmIChjdWVEYXRhLT5wb3NpdGlvbigpID49IDAgJiYgY3VlRGF0YS0+c2l6ZSgp
ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24oIGN1ZURhdGEt
PnBvc2l0aW9uKCkgLSBjdWVEYXRhLT5zaXplKCkgLyAyKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX3BsYXllci0+YWRkR2VuZXJpY0N1ZSh0aGlzLCBjdWVEYXRhKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBMT0coTWVkaWEsICJJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlIG5lZ2F0aXZlIGxlbmd0aCBjdWUocykg
aWdub3JlZDogc3RhcnQ9JS4yZiwgZW5kPSUuMmZcbiIsIG1fY3VycmVudEN1ZVN0YXJ0VGltZSwg
bV9jdXJyZW50Q3VlRW5kVGltZSk7CisKICAgICAgICAgcmVzZXRDdWVWYWx1ZXMoKTsKICAgICB9
CiAKICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dHJpYnV0ZWRTdHJpbmdz
KTsKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisKICAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIENGQXR0cmlidXRlZFN0cmluZ1JlZiBh
dHRyaWJ1dGVkU3RyaW5nID0gc3RhdGljX2Nhc3Q8Q0ZBdHRyaWJ1dGVkU3RyaW5nUmVmPihDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGF0dHJpYnV0ZWRTdHJpbmdzLCBpKSk7CiAKICAgICAgICAgaWYg
KCFhdHRyaWJ1dGVkU3RyaW5nIHx8ICFDRkF0dHJpYnV0ZWRTdHJpbmdHZXRMZW5ndGgoYXR0cmli
dXRlZFN0cmluZykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBwcm9jZXNzQ3Vl
QXR0cmlidXRlcyhhdHRyaWJ1dGVkU3RyaW5nLCBtX2N1cnJlbnRDdWVDb250ZW50LCBtX2N1cnJl
bnRDdWVTZXR0aW5ncyk7CisgICAgICAgIFBhc3NPd25QdHI8R2VuZXJpY0N1ZURhdGE+IGN1ZURh
dGEgPSBhZG9wdFB0cihuZXcgR2VuZXJpY0N1ZURhdGEpOworICAgICAgICBwcm9jZXNzQ3VlQXR0
cmlidXRlcyhhdHRyaWJ1dGVkU3RyaW5nLCBjdWVEYXRhLmdldCgpKTsKKyAgICAgICAgbV9jdWVz
LmFwcGVuZChjdWVEYXRhKTsKICAgICAgICAgbV9jdXJyZW50Q3VlU3RhcnRUaW1lID0gdGltZTsK
ICAgICAgICAgbV9oYXZlUGFydGlhbEN1ZSA9IHRydWU7CiAgICAgfQpAQCAtMjU2LDE3ICszNDAs
MTMgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpkaXNjb25uZQogCiB2b2lkIElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFsdWVzKCkKIHsKLSAgICBpZiAobV9o
YXZlUGFydGlhbEN1ZSAmJiAhbV9jdXJyZW50Q3VlRW5kVGltZSkgewotICAgICAgICBMT0coTWVk
aWEsICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpyZXNldEN1ZVZhbHVlcyBmbHVzaGluZyBk
YXRhIGZvciBjdWU6IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBzZXR0aW5ncz1cIiVzXCIsIGNvbnRl
bnQ9XCIlc1wiIFxuIiwKLSAgICAgICAgICAgIG1fY3VycmVudEN1ZVN0YXJ0VGltZSwgbV9jdXJy
ZW50Q3VlRW5kVGltZSwgbV9jdXJyZW50Q3VlU2V0dGluZ3MudG9TdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCBtX2N1cnJlbnRDdWVDb250ZW50LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAg
fQorICAgIGlmIChtX2hhdmVQYXJ0aWFsQ3VlICYmICFtX2N1cnJlbnRDdWVFbmRUaW1lKQorICAg
ICAgICBMT0coTWVkaWEsICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpyZXNldEN1ZVZhbHVl
cyBmbHVzaGluZyBkYXRhIGZvciBjdWVzOiBzdGFydD0lLjJmXG4iLCBtX2N1cnJlbnRDdWVTdGFy
dFRpbWUpOwogCisgICAgbV9jdWVzLnJlc2l6ZSgwKTsKICAgICBtX2hhdmVQYXJ0aWFsQ3VlID0g
ZmFsc2U7Ci0gICAgbV9jdXJyZW50Q3VlSWQgPSBTdHJpbmcoKTsKICAgICBtX2N1cnJlbnRDdWVT
dGFydFRpbWUgPSAwOwogICAgIG1fY3VycmVudEN1ZUVuZFRpbWUgPSAwOwotICAgIG1fY3VycmVu
dEN1ZVNldHRpbmdzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50Q3VlQ29udGVudC5jbGVhcigpOwog
fQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnNldE1vZGUoSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZTo6TW9kZSBuZXdNb2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwyMCArMzUsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOworY2xhc3MgR2VuZXJp
Y0N1ZURhdGE7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgOiBwdWJsaWMgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgfkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYoKTsKLQotICAgIFN0cmluZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1ZUlk
OyB9Ci0gICAgZG91YmxlIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q3VlU3RhcnRU
aW1lOyB9Ci0gICAgZG91YmxlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1ZUVuZFRp
bWU7IH0KLSAgICBTdHJpbmcgc2V0dGluZ3MoKSB7IHJldHVybiBtX2N1cnJlbnRDdWVTZXR0aW5n
cy50b1N0cmluZygpOyB9Ci0gICAgU3RyaW5nIGNvbnRlbnQoKSB7IHJldHVybiBtX2N1cnJlbnRD
dWVDb250ZW50LnRvU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgcHJvY2Vzc0N1ZShDRkFycmF5UmVm
LCBkb3VibGUpOwotCi0gICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOworICAgIH5JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TW9kZShJbmJhbmRUZXh0
VHJhY2tQcml2YXRlOjpNb2RlKSBPVkVSUklERTsKIApAQCAtNjAsMTYgKzUyLDE4IEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc0JlZW5SZXBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQmVlblJl
cG9ydGVkOyB9CiAgICAgdm9pZCBzZXRIYXNCZWVuUmVwb3J0ZWQoYm9vbCByZXBvcnRlZCkgeyBt
X2hhc0JlZW5SZXBvcnRlZCA9IHJlcG9ydGVkOyB9CiAKKyAgICB2b2lkIHByb2Nlc3NDdWUoQ0ZB
cnJheVJlZiwgZG91YmxlKTsKKyAgICB2b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CisKIHByb3RlY3Rl
ZDoKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbiopOwogCi0gICAgdm9pZCBwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRT
dHJpbmdSZWYsIFN0cmluZ0J1aWxkZXImIGNvbnRlbnQsIFN0cmluZ0J1aWxkZXImIHNldHRpbmdz
KTsKKyAgICB2b2lkIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1JlZiwg
R2VuZXJpY0N1ZURhdGEqKTsKIAotICAgIFN0cmluZyBtX2N1cnJlbnRDdWVJZDsKICAgICBkb3Vi
bGUgbV9jdXJyZW50Q3VlU3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2N1cnJlbnRDdWVFbmRUaW1l
OwotICAgIFN0cmluZ0J1aWxkZXIgbV9jdXJyZW50Q3VlU2V0dGluZ3M7Ci0gICAgU3RyaW5nQnVp
bGRlciBtX2N1cnJlbnRDdWVDb250ZW50OworCisgICAgVmVjdG9yPE93blB0cjxHZW5lcmljQ3Vl
RGF0YT4gPiBtX2N1ZXM7CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24qIG1f
cGxheWVyOwogICAgIGludCBtX2luZGV4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODIsNiArNTgy
LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWUKICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQoJXAp
IC0gZmluaXNoZWQgPSAlZCIsIHRoaXMsIGZpbmlzaGVkKTsKICAgICBVTlVTRURfUEFSQU0oZmlu
aXNoZWQpOwogCisjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQT1JUKQorICAg
IGlmIChjdXJyZW50VHJhY2soKSkKKyAgICAgICAgY3VycmVudFRyYWNrKCktPnJlc2V0Q3VlVmFs
dWVzKCk7CisjZW5kaWYKKwogICAgIG1fc2Vla1RvID0gTWVkaWFQbGF5ZXI6OmludmFsaWRUaW1l
KCk7CiAgICAgdXBkYXRlU3RhdGVzKCk7CiAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CkBA
IC04MTEsMTkgKzgxNiwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6
ZGlzCiB9CiAKICNpZiBIQVZFKEFWRk9VTkRBVElPTl9URVhUX1RSQUNLX1NVUFBPUlQpCi12b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Zmx1c2hDdXJyZW50Q3VlKEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkYqIHRyYWNrKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb246OmFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRiogdHJhY2ssIEdl
bmVyaWNDdWVEYXRhKiBjdWVEYXRhKQogewogICAgIGlmICghdHJhY2stPmNsaWVudCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBBVkZvdW5kYXRpb24gcmV0dXJucyBhIGN1ZSBldmVyeSB0
aW1lIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLCBvbmx5IGFkZCBpdCBvbmNlLgotICAgIGlmICh0cmFj
ay0+Y2xpZW50KCktPmhhc0N1ZSh0cmFjaywgdHJhY2stPnN0YXJ0KCksIHRyYWNrLT5lbmQoKSwg
dHJhY2stPmlkKCksIHRyYWNrLT5jb250ZW50KCksIHRyYWNrLT5zZXR0aW5ncygpKSkgewotICAg
ICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmZsdXNoQ3Vy
cmVudEN1ZSglcCkgLSBhbHJlYWR5IGhhdmUgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCB0cmFj
ay0+c3RhcnQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMT0coTWVkaWEsICJN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmZsdXNoQ3VycmVudEN1ZSglcCkgLSBhZGRp
bmcgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCB0cmFjay0+c3RhcnQoKSk7Ci0gICAgdHJhY2st
PmNsaWVudCgpLT5hZGRDdWUodHJhY2ssIHRyYWNrLT5zdGFydCgpLCB0cmFjay0+ZW5kKCksIHRy
YWNrLT5pZCgpLCB0cmFjay0+Y29udGVudCgpLCB0cmFjay0+c2V0dGluZ3MoKSk7CisgICAgTE9H
KE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjphZGRHZW5lcmljQ3VlKCVw
KSAtIGFkZGluZyBjdWUgZm9yIHRpbWUgJS4yZiIsIHRoaXMsIGN1ZURhdGEtPnN0YXJ0VGltZSgp
KTsKKyAgICB0cmFjay0+Y2xpZW50KCktPmFkZEdlbmVyaWNDdWUodHJhY2ssIGN1ZURhdGEpOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Y29uZmlndXJlSW5iYW5k
VHJhY2tzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2
YXRlQVZGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOworY2xhc3MgR2VuZXJpY0N1ZURh
dGE7CiAKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiA6IHB1YmxpYyBNZWRp
YVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogcHVibGljOgpAQCAtMTE4LDcgKzExOSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGNsZWFyTWFpblRocmVhZFBlbmRpbmdGbGFnKCk7CiAKICNpZiBIQVZF
KEFWRk9VTkRBVElPTl9URVhUX1RSQUNLX1NVUFBPUlQpCi0gICAgdm9pZCBmbHVzaEN1cnJlbnRD
dWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRiopOworICAgIHZvaWQgYWRkR2VuZXJpY0N1ZShJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKiwgR2VuZXJpY0N1ZURhdGEqKTsKICAgICB2b2lkIHRy
YWNrTW9kZUNoYW5nZWQoKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0J
KHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBTT0ZUX0xJTktfQ0xBU1MoQVZGb3VuZGF0
aW9uLCBBVk1lZGlhU2VsCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFD
aGFyYWN0ZXJpc3RpY0xlZ2libGUsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZv
dW5kYXRpb24sIEFWTWVkaWFUeXBlU3VidGl0bGUsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9J
TlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25seUZvcmNl
ZFN1YnRpdGxlcywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwg
QVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dFRleHRTdHlsaW5nUmVzb2x1dGlvblNvdXJjZUFuZFJ1
bGVzT25seSwgTlNTdHJpbmcgKikKIAogI2RlZmluZSBBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0
IGdldEFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRDbGFzcygpCiAjZGVmaW5lIEFWTWVkaWFTZWxl
Y3Rpb25Hcm91cCBnZXRBVk1lZGlhU2VsZWN0aW9uR3JvdXBDbGFzcygpCkBAIC0xMTMsNiArMTE0
LDcgQEAgU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQwogI2RlZmluZSBB
Vk1lZGlhQ2hhcmFjdGVyaXN0aWNMZWdpYmxlIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xlZ2li
bGUoKQogI2RlZmluZSBBVk1lZGlhVHlwZVN1YnRpdGxlIGdldEFWTWVkaWFUeXBlU3VidGl0bGUo
KQogI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0aXRs
ZXMgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzKCkK
KyNkZWZpbmUgQVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dFRleHRTdHlsaW5nUmVzb2x1dGlvblNv
dXJjZUFuZFJ1bGVzT25seSBnZXRBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxpbmdS
ZXNvbHV0aW9uU291cmNlQW5kUnVsZXNPbmx5KCkKICNlbmRpZgogCiAjZGVmaW5lIGtDTVRpbWVa
ZXJvIGdldGtDTVRpbWVaZXJvKCkKQEAgLTM5MSw3ICszOTMsNiBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFD
S19TVVBQT1JUKQogICAgIFttX2F2UGxheWVyLmdldCgpIHNldEFwcGxpZXNNZWRpYVNlbGVjdGlv
bkNyaXRlcmlhQXV0b21hdGljYWxseTpZRVNdOwogI2VuZGlmCi0gICAgCiAKICAgICBpZiAobV9h
dlBsYXllckl0ZW0pCiAgICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlcGxhY2VDdXJyZW50SXRl
bVdpdGhQbGF5ZXJJdGVtOm1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKQEAgLTQxMCw3ICs0MTEsNyBA
QCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKICAgICAvLyBDcmVh
dGUgdGhlIHBsYXllciBpdGVtIHNvIHdlIGNhbiBsb2FkIG1lZGlhIGRhdGEuIAogICAgIG1fYXZQ
bGF5ZXJJdGVtLmFkb3B0TlMoW1tBVlBsYXllckl0ZW0gYWxsb2NdIGluaXRXaXRoQXNzZXQ6bV9h
dkFzc2V0LmdldCgpXSk7Ci0gICAgCisKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1
bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIHNlbGVjdG9yOkBzZWxl
Y3RvcihkaWRFbmQ6KSBuYW1lOkFWUGxheWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3RpZmljYXRp
b24gb2JqZWN0Om1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKIAogICAgIGZvciAoTlNTdHJpbmcgKmtl
eU5hbWUgaW4gaXRlbUtWT1Byb3BlcnRpZXMoKSkKQEAgLTg5Nyw2ICs4OTgsNyBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKICAgICAgICAgW21fbGVnaWJsZU91
dHB1dC5nZXQoKSBzZXREZWxlZ2F0ZTptX29iamNPYnNlcnZlci5nZXQoKSBxdWV1ZTpkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpXTsKICAgICAgICAgW21fbGVnaWJsZU91dHB1dC5nZXQoKSBzZXRB
ZHZhbmNlSW50ZXJ2YWxGb3JEZWxlZ2F0ZUludm9jYXRpb246TlNUaW1lSW50ZXJ2YWxTaW5jZTE5
NzBdOworICAgICAgICBbbV9sZWdpYmxlT3V0cHV0LmdldCgpIHNldFRleHRTdHlsaW5nUmVzb2x1
dGlvbjpBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxpbmdSZXNvbHV0aW9uU291cmNl
QW5kUnVsZXNPbmx5XTsKICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE91dHB1dDpt
X2xlZ2libGVPdXRwdXQuZ2V0KCldOwogICAgIH0KICNlbmRpZgpAQCAtMTIxMiw3ICsxMjE0LDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgICAgICBMT0co
TWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcm9jZXNzVGV4dFRy
YWNrcyglcCkgLSBuaWwgbWVkaWFTZWxlY3Rpb25Hcm91cCIsIHRoaXMpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotCisgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGPiA+IHJlbW92ZWRUZXh0VHJhY2tzID0gbV90ZXh0VHJhY2tzOwogICAgIE5TQXJyYXkg
KmxlZ2libGVPcHRpb25zID0gW0FWTWVkaWFTZWxlY3Rpb25Hcm91cCBwbGF5YWJsZU1lZGlhU2Vs
ZWN0aW9uT3B0aW9uc0Zyb21BcnJheTpbbGVnaWJsZUdyb3VwIG9wdGlvbnNdXTsKICAgICBmb3Ig
KEFWTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlICpvcHRpb24gaW4gbGVnaWJsZU9wdGlvbnMpIHsK
QEAgLTEyMjgsMTMgKzEyMzAsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bk9iakM6CiAgICAgICAgIGlmICghbmV3VHJhY2spCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAoW1tvcHRpb24gbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRpYVR5
cGVTdWJ0aXRsZV0pIHsKLSAgICAgICAgICAgIGlmICghW29wdGlvbiBoYXNNZWRpYUNoYXJhY3Rl
cmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlc10p
IHsKLSAgICAgICAgICAgICAgICBBVk1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZSAqZm9yY2VkT25s
eU9wdGlvbiA9IFtvcHRpb24gYXNzb2NpYXRlZE1lZGlhU2VsZWN0aW9uT3B0aW9uSW5NZWRpYVNl
bGVjdGlvbkdyb3VwOmxlZ2libGVHcm91cF07Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmNlZE9u
bHlPcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9CisgICAgICAgIGlmIChbW29wdGlvbiBtZWRpYVR5cGVdIGlzRXF1YWxUb1N0cmlu
ZzpBVk1lZGlhVHlwZVN1YnRpdGxlXSAmJiBbb3B0aW9uIGhhc01lZGlhQ2hhcmFjdGVyaXN0aWM6
QVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzXSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG1fdGV4dFRyYWNrcy5hcHBlbmQoSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSh0aGlzLCBvcHRpb24pKTsKICAgICB9CkBAIC0x
Mjc1LDYgKzEyNzIsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6
CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUcmFj
ayhJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGICp0cmFjaykKIHsKICAgICBJbmJhbmRUZXh0VHJh
Y2tQcml2YXRlQVZGT2JqQyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRk9iakMqPih0cmFjayk7CisgICAgaWYgKG1fY3VycmVudFRyYWNrID09IHRy
YWNrUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQVZNZWRpYVNlbGVjdGlvbk9wdGlv
blR5cGUgKm1lZGlhU2VsZWN0aW9uT3B0aW9uID0gdHJhY2tQcml2YXRlID8gdHJhY2tQcml2YXRl
LT5tZWRpYVNlbGVjdGlvbk9wdGlvbigpIDogMDsKIAogICAgIExPRyhNZWRpYSwgIk1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUcmFjayglcCkgLSBzZWxlY3Rp
bmcgbWVkaWEgb3B0aW9uICVwIiwgdGhpcywgbWVkaWFTZWxlY3Rpb25PcHRpb24pOwpAQCAtMTQy
NCw2ICsxNDI0LDggQEAgLSAodm9pZClsZWdpYmxlT3V0cHV0OihpZClvdXRwdXQgZGlkT3V0cAog
ICAgICAgICByZXR1cm47CiAKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9x
dWV1ZSgpLCBeeworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIG1fY2FsbGJhY2stPnByb2Nlc3NDdWUoc3RyaW5ncywgQ01UaW1lR2V0U2Vjb25k
cyhpdGVtVGltZSkpOwogICAgIH0pOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183828</attachid>
            <date>2013-01-21 13:44:45 -0800</date>
            <delta_ts>2013-01-21 13:51:25 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>patch_29.txt</filename>
            <type>text/plain</type>
            <size>69057</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBACisyMDEzLTAxLTIxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgbm9uLVdl
YlZUVCBjdWVzIGZyb20gaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxl
cy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJn
ZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAgICogaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6IFBhc3MgdmlkZW8g
c2l6ZSB0byBnZXREaXNwbGF5VHJlZS4KKworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4
dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJp
Y0N1ZSk6IE5ldywgY3JlYXRlIGEgZ2VuZXJpYyBjdWUgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4
aXN0LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjphZGRXZWJWVFRDdWUpOiBS
ZW5hbWVkIGZyb20gYWRkQ3VlLgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNr
Lmg6CisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2s6Omhhc0N1ZSk6IE1vdmVkIGZyb20gSW5iYW5kVGV4dFRyYWNrLmNwcCwg
dXNlIG9wZXJhdG9yID09IGluc3RlYWQgb2YgaW5saW5lCisgICAgICAgICAgICBjb21wYXJpc29u
IHNvIGRlcml2ZWQgVGV4dFRyYWNrQ3VlcyBjYW4gYmUgY29tcGFyZWQuCisgICAgICAgICogaHRt
bC90cmFjay9UZXh0VHJhY2suaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0
aWVzKTogSW50ZXJmYWNlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
VGV4dFRyYWNrQ3VlKTogRG9uJ3QgY3JlYXRlIHRoZSBkaXNwbGF5IHRyZWUgaW4gdGhlIGNvbnN0
cnVjdG9yLCBpdCBtYXkKKyAgICAgICAgICAgIG5ldmVyIGJlIG5lZWRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFja0N1ZTo6Y3JlYXRlRGlzcGxheVRyZWUpOiBOZXcsIGNyZWF0ZSB0aGUg
ZGlzcGxheSB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkaXNwbGF5VHJl
ZUludGVybmFsKTogRGlzcGxheSB0cmVlIGFjY2Vzc29yLCBhbGxvd3MgaXQgdG8gYmUgY3JlYXRl
ZCBsYXppbHkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNldEFsaWduKTogQWxp
Z25tZW50IC0+IEN1ZUFsaWdubWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
c2V0SXNBY3RpdmUpOiBVc2UgZGlzcGxheVRyZWVJbnRlcm5hbCgpLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXREaXNwbGF5VHJlZSk6IFVzZSBkaXNwbGF5VHJlZUludGVybmFs
KCksIHBhc3MgdmlkZW8gc2l6ZSB0byBhcHBseUNTU1Byb3BlcnRpZXMuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWU6OnJlbW92ZURpc3BsYXlUcmVlKTogVXNlIGRpc3BsYXlUcmVlSW50
ZXJuYWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PSk6IE5l
dy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXRBbGlnbm1lbnQpOiBBbGlnbm1lbnQgLT4gQ3VlQWxpZ25tZW50
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpvcGVyYXRvciE9KTogTmV3LgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpjdWVUeXBlKTogTmV3LCBjdWUgdHlwZSBpZGVu
dGlmaWVkIG5lZWRlZCBieSBvcGVyYXRvcj09LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlOjpvd25lckRvY3VtZW50KTogTmV3LgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVH
ZW5lcmljQm94OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJp
Y0JveDo6VGV4dFRyYWNrQ3VlR2VuZXJpY0JveCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tDdWVHZW5lcmljQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
OlRleHRUcmFja0N1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpj
cmVhdGVEaXNwbGF5VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmlj
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6flRleHRUcmFja0N1ZUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6YmFzZUZvbnRT
aXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZUdlbmVyaWM6OnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpmb250U2l6ZU11bHRpcGxpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udFNpemVNdWx0aXBsaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmZvbnROYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnNldEZvbnROYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3VlVHlwZSk6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vz
c0N1ZUF0dHJpYnV0ZXMpOiBDb3B5IGN1ZSBhdHRyaWJ1dGVzIGludG8gR2VuZXJpY0N1ZURhdGEK
KyAgICAgICAgICAgIHN0cnVjdCBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb252ZXJ0IHRvIFdlYlZU
VCBzZXR0aW5ncyBzdHJpbmcuIFByb2Nlc3MgZm9udCBzaXplLGZvbnQgYmFzZQorICAgICAgICAg
ICAgc2l6ZSwgZm9udCBuYW1lLCBhbmQgdmVydGljYWwgbGF5b3V0IGF0dHJpYnV0ZXMsCisgICAg
ICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlKTogQ3Jl
YXRlIHNlcGFyYXRlIGN1ZXMgZm9yIGVhY2ggYXR0cmlidXRlZAorICAgICAgICAgICAgc3RyaW5n
IGluIHRoZSBhcnJheSBiZWNhdXNlIGVhY2ggb25lIGNhbiBiZSBhdCBhIGRpZmZlcmVudCBzY3Jl
ZW4gbG9jYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
OjpyZXNldEN1ZVZhbHVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaDoKKyAgICAgICAgKEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQpOiBSZXNldCBhbnkg
cGFydGlhbGx5IGFjY3VtdWxhdGVkIGN1ZXMKKyAgICAgICAgICAgIGRlbGl2ZXJlZCBzaW5jZSB0
aGUgc2VlayB3YXMgc3RhcnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6YWRkR2VuZXJpY0N1ZSk6IFJlbmFtZWQgZnJvbSBmbHVzaEN1cnJlbnRD
dWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbi5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0
ZUFWUGxheWVyKTogV2hpdGVzcGFjZSBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0
cmFja3NDaGFuZ2VkKTogVGVsbCBsZWdpYmxlIG91dHB1dCB0byBkZWxpdmVyIGN1ZXMKKyAgICAg
ICAgICAgIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgc3R5bGluZyBuZWVkZWQgYnkgdGhlIGludGVy
bmFsIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6cHJvY2Vzc1RleHRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVudFRyYWNrKTogRG8gbm90aGlu
ZyBpZiBhc2tlZCB0byBjaGFuZ2UKKyAgICAgICAgICAgIHRvIHRoZSB0cmFjayB0aGF0IGlzIGFs
cmVhZHkgY3VycmVudC4KKyAgICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgbGVnaWJs
ZU91dHB1dDpkaWRPdXRwdXRBdHRyaWJ1dGVkU3RyaW5nczpuYXRpdmVTYW1wbGVCdWZmZXJzOmZv
ckl0ZW1UaW1lOl0pOgorICAgICAgICAgICAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNs
aWVudCBjYWxsYmFjayBpc24ndCBOVUxMLgorCiAyMDEzLTAxLTIxICBWbGFkaXNsYXYgS2F6bmFj
aGVldiAgPGthem5hY2hlZXZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtJbnNwZWN0b3JdIExh
eW91dCBFbGVtZW50cyBwYW5lbCBpbiBhIHNpbmdsZSBjb2x1bW4gd2hlbiBkb2NrZWQgcmlnaHQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1ODEsNiArMTU4MSw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNw
cAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmNwcAorICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAKICAgICBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0
LmNwcAogICAgIGh0bWwvdHJhY2svVHJhY2tCYXNlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcyLDYgKzM2NzIsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2tDdWVHZW5lcmljLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3Bw
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTkxNSw2ICsxOTE1LDcgQEAgSEVBREVSUyAr
PSBcCiAgICAgaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oIFwKICAgICBodG1sL3RyYWNr
L1RleHRUcmFjay5oIFwKICAgICBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oIFwKKyAgICBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaCBcCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tD
dWVMaXN0LmggXAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oIFwKICAgICBodG1sL3Ry
YWNrL1RyYWNrQmFzZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ1Nyw2
ICszNDU3LDggQEAKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFjay5oJywKICAgICAg
ICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
dHJhY2svVGV4dFRyYWNrQ3VlLmgnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlR2VuZXJpYy5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2Vu
ZXJpYy5oJywKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwJywK
ICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaCcsCiAgICAgICAgICAg
ICAnaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTQwMzM0KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTY1MjY1LDYgKzY1MjY1LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUdlbmVyaWMuY3Bw
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFx0cmFja1xUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUxp
c3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQwMzM0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNiArMTA4LDggQEAKIAkJMDcwNzU2REYxNDIzOUI0RTAwNDE0MTYxIC8q
IEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzA3NTZEOTE0MjM5QjRDMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVM
aXN0LmNwcCAqLzsgfTsKIAkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNr
Q3VlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovOyB9Owog
CQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwOUZDNEQxMDI1REVF
MzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsgfTsKKwkJMDcxQTlFQzIxNjhG
QkM0MzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzAxNjhGQjU2QzAwMjYyOUY5IC8q
IFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwICovOyB9OworCQkwNzFBOUVDMzE2OEZCQzU1MDAyNjI5
RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzExNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1
ZUdlbmVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMEIwOUUxNEQz
MzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCAqLzsgfTsKIAkJMDcyMEIwQTAx
NEQzMzIzNTAwNjQyOTU2IC8qIEdlc3R1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTYgLyogR2Vz
dHVyZUV2ZW50LmNwcCAqLzsgfTsKIAkJMDcyMEIwQTExNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVy
aWNFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzMwMyw2ICs3
MzA1LDggQEAKIAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RleHRUcmFja0N1ZUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZDNEQxMDI1REVFMzAwNTlDREJB
IC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5
RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0VHJhY2tDdWVHZW5lcmljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA3MjBCMDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBH
ZW5lcmljRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5l
cmljRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0
RDMzMjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTc0NCw2ICsxOTc0OCw4IEBACiAJCQkJOTc1OUU5MzgxNEVGMUNGODAwMjZBMkRE
IC8qIFRleHRUcmFja0N1ZS5jcHAgKi8sCiAJCQkJOTc1OUU5MzkxNEVGMUNGODAwMjZBMkREIC8q
IFRleHRUcmFja0N1ZS5oICovLAogCQkJCTk3NTlFOTNBMTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0
VHJhY2tDdWUuaWRsICovLAorCQkJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcCAqLywKKwkJCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4
dFRyYWNrQ3VlR2VuZXJpYy5oICovLAogCQkJCTk3NTlFOTNCMTRFRjFDRjgwMDI2QTJERCAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmNwcCAqLywKIAkJCQk5NzU5RTkzQzE0RUYxQ0Y4MDAyNkEyREQgLyog
VGV4dFRyYWNrQ3VlTGlzdC5oICovLAogCQkJCTk3NTlFOTNEMTRFRjFDRjgwMDI2QTJERCAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmlkbCAqLywKQEAgLTI2MDI3LDYgKzI2MDMzLDcgQEAKIAkJCQlCMkMz
REE0QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTc1OUU5NDAxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc1OUU5NDMxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMDcxQTlFQzMxNjhGQkM1NTAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTlFOTQ2MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJh
Y2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzY5NzA4NzE0NjNBRDg3MDBGNTAyQ0Yg
LyogVGV4dFRyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjFBRDRFNzQxM0ExMkE0NjAw
ODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTIxMSw2ICsy
OTIxOCw3IEBACiAJCQkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1OUU5M0YxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzU5RTk0MjE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4
dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3MUE5RUMyMTY4RkJDNDMwMDI2MjlG
OSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NTlFOTQ1
MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3Njk3MDg2MTQ2M0FEODcwMEY1MDJDRiAvKiBUZXh0VHJhY2tMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIxQUQ0RTczMTNBMTJBNDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTksNiArMzgxOSwxMSBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIoCiAKICAgICBtX3BlbmRpbmdMb2Fk
RmxhZ3MgJj0gfmZsYWdzOwogICAgIG1fbG9hZFN0YXRlID0gV2FpdGluZ0ZvclNvdXJjZTsKKwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBpZiAobV90ZXh0VHJhY2tzKQorICAgICAgICBj
b25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCk7CisjZW5kaWYKIH0KIAogYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpjYW5TdXNwZW5kKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwNCw4ICsxMzA0LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZQogICAgICAgICBpZiAoIWN1ZS0+dHJhY2soKSB8fCAhY3VlLT50
cmFjaygpLT5pc1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBS
ZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZSgp
OwotCisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3BsYXlCb3ggPSBjdWUtPmdl
dERpc3BsYXlUcmVlKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkpOwogICAgICAgICBpZiAoZGlz
cGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhzdGF0aWNfY2FzdDxOb2RlKj4o
ZGlzcGxheUJveC5nZXQoKSkpKQogICAgICAgICAgICAgLy8gTm90ZTogdGhlIGRpc3BsYXkgdHJl
ZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhlIGFjdGl2ZSBmbGFnIG9mIHRoZSBjdWUgaXMg
dW5zZXQuCiAgICAgICAgICAgICBtX2N1ZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZGlzcGxheUJv
eCwgQVNTRVJUX05PX0VYQ0VQVElPTiwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAkocmV2aXNpb24gMTQwMzM0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw5ICszMiwxMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKLQorI2luY2x1ZGUgPG1h
dGguaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtOTgsNzQgKzEwMCw1NSBAQCBzaXplX3QgSW5iYW5kVGV4dFRyYWNrOjppbmJhbmRUcmFj
a0luZGV4CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dFRyYWNrSW5kZXgoKTsKIH0KIAotdm9p
ZCBJbmJhbmRUZXh0VHJhY2s6OmFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiB0cmFja1By
aXZhdGUsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0
VHJhY2s6OmFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSogdHJhY2tQcml2YXRl
LCBHZW5lcmljQ3VlRGF0YSogY3VlRGF0YSkKIHsKICAgICBVTlVTRURfUEFSQU0odHJhY2tQcml2
YXRlKTsKICAgICBBU1NFUlQodHJhY2tQcml2YXRlID09IG1fcHJpdmF0ZSk7CiAKLSAgICBSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIGNvbnRlbnQpOwotICAgIGN1ZS0+c2V0SWQoaWQpOwot
ICAgIGN1ZS0+c2V0Q3VlU2V0dGluZ3Moc2V0dGluZ3MpOwotICAgIGN1ZS0+c2V0VHJhY2sodGhp
cyk7CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVyaWM+IGN1ZSA9IFRleHRUcmFja0N1ZUdl
bmVyaWM6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGN1ZURhdGEtPnN0YXJ0VGlt
ZSgpLCBjdWVEYXRhLT5lbmRUaW1lKCksIGN1ZURhdGEtPmNvbnRlbnQoKSk7CiAKLSAgICBpZiAo
IW1fY3VlcykKLSAgICAgICAgbV9jdWVzID0gVGV4dFRyYWNrQ3VlTGlzdDo6Y3JlYXRlKCk7Ci0g
ICAgbV9jdWVzLT5hZGQoY3VlKTsKLSAgICAKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNs
aWVudCgpLT50ZXh0VHJhY2tBZGRDdWVzKHRoaXMsIG1fY3Vlcy5nZXQoKSk7CisgICAgY3VlLT5z
ZXRJZChjdWVEYXRhLT5pZCgpKTsKKyAgICBjdWUtPnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9W
aWRlb0hlaWdodChjdWVEYXRhLT5iYXNlRm9udFNpemUoKSk7CisgICAgY3VlLT5zZXRGb250U2l6
ZU11bHRpcGxpZXIoY3VlRGF0YS0+cmVsYXRpdmVGb250U2l6ZSgpKTsKKyAgICBjdWUtPnNldEZv
bnROYW1lKGN1ZURhdGEtPmZvbnROYW1lKCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICBpZiAoY3VlRGF0YS0+cG9zaXRpb24oKSA+IDApCisgICAgICAgIGN1ZS0+c2V0UG9zaXRpb24o
bHJvdW5kKGN1ZURhdGEtPnBvc2l0aW9uKCkpLCBlYyk7CisgICAgaWYgKGN1ZURhdGEtPmxpbmUo
KSA+IDApCisgICAgICAgIGN1ZS0+c2V0TGluZShscm91bmQoY3VlRGF0YS0+bGluZSgpKSwgZWMp
OworICAgIGlmIChjdWVEYXRhLT5zaXplKCkgPiAwKQorICAgICAgICBjdWUtPnNldFNpemUobHJv
dW5kKGN1ZURhdGEtPnNpemUoKSksIGVjKTsKKyAgICBpZiAoY3VlRGF0YS0+YWxpZ24oKSA9PSBH
ZW5lcmljQ3VlRGF0YTo6U3RhcnQpCisgICAgICAgIGN1ZS0+c2V0QWxpZ24oQVNDSUlMaXRlcmFs
KCJzdGFydCIpLCBlYyk7CisgICAgZWxzZSBpZiAoY3VlRGF0YS0+YWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6TWlkZGxlKQorICAgICAgICBjdWUtPnNldEFsaWduKEFTQ0lJTGl0ZXJhbCgibWlk
ZGxlIiksIGVjKTsKKyAgICBlbHNlIGlmIChjdWVEYXRhLT5hbGlnbigpID09IEdlbmVyaWNDdWVE
YXRhOjpFbmQpCisgICAgICAgIGN1ZS0+c2V0QWxpZ24oQVNDSUlMaXRlcmFsKCJlbmQiKSwgZWMp
OworICAgIGN1ZS0+c2V0U25hcFRvTGluZXMoZmFsc2UpOworCisgICAgaWYgKGhhc0N1ZShjdWUu
Z2V0KCkpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJp
Y0N1ZSBpZ25vcmluZyBhbHJlYWR5IGFkZGVkIGN1ZTogc3RhcnQ9JS4yZiwgZW5kPSUuMmYsIGNv
bnRlbnQ9XCIlc1wiXG4iLAorICAgICAgICAgICAgY3VlRGF0YS0+c3RhcnRUaW1lKCksIGN1ZURh
dGEtPmVuZFRpbWUoKSwgY3VlRGF0YS0+Y29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYWRkQ3VlKGN1ZSk7CiB9CiAKLWJvb2wgSW5iYW5kVGV4
dFRyYWNrOjpoYXNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSBzdGFydFRpbWUs
IGRvdWJsZSBlbmRUaW1lLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCit2b2lkIEluYmFuZFRleHRUcmFjazo6YWRkV2ViVlRU
Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0ZSwgZG91YmxlIHN0YXJ0LCBk
b3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0
IFN0cmluZyYgc2V0dGluZ3MpCiB7CisgICAgVU5VU0VEX1BBUkFNKHRyYWNrUHJpdmF0ZSk7Cisg
ICAgQVNTRVJUKHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZhdGUpOwogCi0gICAgaWYgKHN0YXJ0VGlt
ZSA8IDAgfHwgZW5kVGltZSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
Y3VlcygpLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZV90IHNl
YXJjaFN0YXJ0ID0gMDsKLSAgICBzaXplX3Qgc2VhcmNoRW5kID0gY3VlcygpLT5sZW5ndGgoKTsK
LQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIEFTU0VSVChzZWFyY2hTdGFydCA8PSBjdWVzKCkt
Pmxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKHNlYXJjaEVuZCA8PSBjdWVzKCktPmxlbmd0aCgp
KTsKLSAgICAgICAgCi0gICAgICAgIFRleHRUcmFja0N1ZSogY3VlOwotICAgICAgICAKLSAgICAg
ICAgLy8gQ3VlcyBpbiB0aGUgVGV4dFRyYWNrQ3VlTGlzdCBhcmUgbWFpbnRhaW5lZCBpbiBzdGFy
dCB0aW1lIG9yZGVyLgotICAgICAgICBpZiAoc2VhcmNoU3RhcnQgPT0gc2VhcmNoRW5kKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNlYXJjaFN0YXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY3VlID0gY3VlcygpLT5pdGVtKHNlYXJjaFN0
YXJ0IC0gMSk7Ci0gICAgICAgICAgICBpZiAoIWN1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT5zdGFydFRpbWUoKSAhPSBzdGFydFRpbWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+ZW5kVGlt
ZSgpICE9IGVuZFRpbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgaWYgKGN1ZS0+dGV4dCgpICE9IGNvbnRlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+Y3VlU2V0dGluZ3MoKSAhPSBzZXR0aW5ncykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT5pZCgpICE9
IGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBp
bmRleCA9IChzZWFyY2hTdGFydCArIHNlYXJjaEVuZCkgLyAyOwotICAgICAgICBjdWUgPSBjdWVz
KCktPml0ZW0oaW5kZXgpOwotICAgICAgICBpZiAoc3RhcnRUaW1lIDwgY3VlLT5zdGFydFRpbWUo
KSB8fCAoc3RhcnRUaW1lID09IGN1ZS0+c3RhcnRUaW1lKCkgJiYgZW5kVGltZSA+IGN1ZS0+ZW5k
VGltZSgpKSkKLSAgICAgICAgICAgIHNlYXJjaEVuZCA9IGluZGV4OwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZWFyY2hTdGFydCA9IGluZGV4ICsgMTsKLSAgICB9CisgICAgUmVmUHRyPFRl
eHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBzdGFydCwgZW5kLCBjb250ZW50KTsKKyAgICBjdWUtPnNldElkKGlkKTsKKyAgICBj
dWUtPnNldEN1ZVNldHRpbmdzKHNldHRpbmdzKTsKICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0N1ZShjdWUuZ2V0KCkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhZGRDdWUoY3VlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5o
CShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRl
eHRUcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW5iYW5kVGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBUZXh0VHJhY2tD
bGllbnQqLCBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+KTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSwgZG91YmxlLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUsIGRv
dWJsZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSosIEdlbmVyaWNDdWVEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZFdlYlZU
VEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwogCiAgICAgUmVmUHRy
PEluYmFuZFRleHRUcmFja1ByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTMzOSw2ICszMzksNjQgQEAgaW50IFRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9S
ZW5kZQogICAgIHJldHVybiBtX3JlbmRlcmVkVHJhY2tJbmRleDsKIH0KIAorYm9vbCBUZXh0VHJh
Y2s6Omhhc0N1ZShUZXh0VHJhY2tDdWUqIGN1ZSkKK3sKKyAgICBpZiAoY3VlLT5zdGFydFRpbWUo
KSA8IDAgfHwgY3VlLT5lbmRUaW1lKCkgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKCFtX2N1ZXMgfHwgIW1fY3Vlcy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzaXplX3Qgc2VhcmNoU3RhcnQgPSAwOworICAgIHNpemVfdCBzZWFy
Y2hFbmQgPSBtX2N1ZXMtPmxlbmd0aCgpOworICAgIAorICAgIHdoaWxlICgxKSB7CisgICAgICAg
IEFTU0VSVChzZWFyY2hTdGFydCA8PSBtX2N1ZXMtPmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJU
KHNlYXJjaEVuZCA8PSBtX2N1ZXMtPmxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIFRleHRU
cmFja0N1ZSogZXhpc3RpbmdDdWU7CisgICAgICAgIAorICAgICAgICAvLyBDdWVzIGluIHRoZSBU
ZXh0VHJhY2tDdWVMaXN0IGFyZSBtYWludGFpbmVkIGluIHN0YXJ0IHRpbWUgb3JkZXIuCisgICAg
ICAgIGlmIChzZWFyY2hTdGFydCA9PSBzZWFyY2hFbmQpIHsKKyAgICAgICAgICAgIGlmICghc2Vh
cmNoU3RhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAv
LyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGN1ZSB3aXRoIHRoZSBzYW1lIHN0YXJ0IHRpbWUs
IGJhY2sgdXAgdG8gZmlyc3Qgb25lIHNvIHdlCisgICAgICAgICAgICAvLyBjb25zaWRlciBhbGwg
b2YgdGhlbS4KKyAgICAgICAgICAgIHdoaWxlIChzZWFyY2hTdGFydCA+PSAyICYmIGN1ZS0+c3Rh
cnRUaW1lKCkgPT0gbV9jdWVzLT5pdGVtKHNlYXJjaFN0YXJ0IC0gMiktPnN0YXJ0VGltZSgpKQor
ICAgICAgICAgICAgICAgIC0tc2VhcmNoU3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgZmlyc3RDb21wYXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdENvbXBhcmUpCisgICAgICAgICAgICAgICAgICAgICsrc2Vh
cmNoU3RhcnQ7CisgICAgICAgICAgICAgICAgZmlyc3RDb21wYXJlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaWYgKHNlYXJjaFN0YXJ0ID4gbV9jdWVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgZXhpc3RpbmdDdWUgPSBt
X2N1ZXMtPml0ZW0oc2VhcmNoU3RhcnQgLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4aXN0
aW5nQ3VlIHx8IGN1ZS0+c3RhcnRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGlmICgq
ZXhpc3RpbmdDdWUgIT0gKmN1ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBpbmRleCA9IChzZWFyY2hTdGFy
dCArIHNlYXJjaEVuZCkgLyAyOworICAgICAgICBleGlzdGluZ0N1ZSA9IG1fY3Vlcy0+aXRlbShp
bmRleCk7CisgICAgICAgIGlmIChjdWUtPnN0YXJ0VGltZSgpIDwgZXhpc3RpbmdDdWUtPnN0YXJ0
VGltZSgpIHx8IChjdWUtPnN0YXJ0VGltZSgpID09IGV4aXN0aW5nQ3VlLT5zdGFydFRpbWUoKSAm
JiBjdWUtPmVuZFRpbWUoKSA+IGV4aXN0aW5nQ3VlLT5lbmRUaW1lKCkpKQorICAgICAgICAgICAg
c2VhcmNoRW5kID0gaW5kZXg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlYXJjaFN0YXJ0
ID0gaW5kZXggKyAxOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05OSw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQ3VlKFBh
c3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CiAgICAgdm9pZCByZW1vdmVDdWUoVGV4dFRyYWNrQ3Vl
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgaGFzQ3VlKFRleHRUcmFja0N1ZSopOwogCiAg
ICAgdm9pZCBjdWVXaWxsQ2hhbmdlKFRleHRUcmFja0N1ZSopOwogICAgIHZvaWQgY3VlRGlkQ2hh
bmdlKFRleHRUcmFja0N1ZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmNwcAkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMTA3
LDcgKzEwNyw3IEBAIFRleHRUcmFja0N1ZSogVGV4dFRyYWNrQ3VlQm94OjpnZXRDdWUoKSAKICAg
ICByZXR1cm4gbV9jdWU7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlQm94OjphcHBseUNTU1Byb3Bl
cnRpZXMoKQordm9pZCBUZXh0VHJhY2tDdWVCb3g6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJ
bnRTaXplJikKIHsKICAgICAvLyBGSVhNRTogQXBwbHkgYWxsIHRoZSBpbml0aWFsIENTUyBwb3Np
dGlvbmluZyBwcm9wZXJ0aWVzLiBodHRwOi8vd2tiLnVnLzc5OTE2CiAKQEAgLTIxMCw3ICsyMTAs
NiBAQCBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpCiAgICAgLCBtX3Nu
YXBUb0xpbmVzKHRydWUpCiAgICAgLCBtX2FsbERvY3VtZW50Tm9kZXMoSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpKSkKICAgICAsIG1fZGlzcGxh
eVRyZWVTaG91bGRDaGFuZ2UodHJ1ZSkKLSAgICAsIG1fZGlzcGxheVRyZWUoVGV4dFRyYWNrQ3Vl
Qm94OjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpLCB0aGlzKSkKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Rv
Y3VtZW50KCkpOwogCkBAIC0yMjgsNiArMjI3LDE4IEBAIFRleHRUcmFja0N1ZTo6flRleHRUcmFj
a0N1ZSgpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWU6
OmNyZWF0ZURpc3BsYXlUcmVlKCkKK3sKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlQm94OjpjcmVh
dGUob3duZXJEb2N1bWVudCgpLCB0aGlzKTsKK30KKworUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVC
b3g+IFRleHRUcmFja0N1ZTo6ZGlzcGxheVRyZWVJbnRlcm5hbCgpCit7CisgICAgaWYgKCFtX2Rp
c3BsYXlUcmVlKQorICAgICAgICBtX2Rpc3BsYXlUcmVlID0gY3JlYXRlRGlzcGxheVRyZWUoKTsK
KyAgICByZXR1cm4gbV9kaXNwbGF5VHJlZTsKK30KKwogdm9pZCBUZXh0VHJhY2tDdWU6OmN1ZVdp
bGxDaGFuZ2UoKQogewogICAgIGlmIChtX3RyYWNrKQpAQCAtNDM4LDcgKzQ0OSw3IEBAIHZvaWQg
VGV4dFRyYWNrQ3VlOjpzZXRBbGlnbihjb25zdCBTdHJpbmcKICAgICAvLyBtYXRjaCBmb3IgdGhl
IG5ldyB2YWx1ZSwgaWYgYW55LiBJZiBub25lIG9mIHRoZSB2YWx1ZXMgbWF0Y2gsIHRoZW4gdGhl
IHVzZXIKICAgICAvLyBhZ2VudCBtdXN0IGluc3RlYWQgdGhyb3cgYSBTeW50YXhFcnJvciBleGNl
cHRpb24uCiAgICAgCi0gICAgQWxpZ25tZW50IGFsaWdubWVudCA9IG1fY3VlQWxpZ25tZW50Owor
ICAgIEN1ZUFsaWdubWVudCBhbGlnbm1lbnQgPSBtX2N1ZUFsaWdubWVudDsKICAgICBpZiAodmFs
dWUgPT0gc3RhcnRLZXl3b3JkKCkpCiAgICAgICAgIGFsaWdubWVudCA9IFN0YXJ0OwogICAgIGVs
c2UgaWYgKHZhbHVlID09IG1pZGRsZUtleXdvcmQoKSkKQEAgLTU0NSw4ICs1NTYsNyBAQCB2b2lk
IFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpCiAKICAgICBpZiAoIWFjdGl2ZSkg
ewogICAgICAgICAvLyBSZW1vdmUgdGhlIGRpc3BsYXkgdHJlZSBhcyBzb29uIGFzIHRoZSBjdWUg
YmVjb21lcyBpbmFjdGl2ZS4KLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgbV9k
aXNwbGF5VHJlZS0+cmVtb3ZlKGVjKTsKKyAgICAgICAgZGlzcGxheVRyZWVJbnRlcm5hbCgpLT5y
ZW1vdmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgfQogfQogCkBAIC03MjIsMTAgKzczMiwx
MSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6dXBkYXRlRGlzcGxheVRyZWUoZmxvCiAgICAgbV9hbGxE
b2N1bWVudE5vZGVzLT5hcHBlbmRDaGlsZChyZWZlcmVuY2VUcmVlKTsKIH0KIAotUGFzc1JlZlB0
cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoKQorUGFzc1Jl
ZlB0cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoY29uc3Qg
SW50U2l6ZSYgdmlkZW9TaXplKQogeworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3Bs
YXlUcmVlID0gZGlzcGxheVRyZWVJbnRlcm5hbCgpOwogICAgIGlmICghbV9kaXNwbGF5VHJlZVNo
b3VsZENoYW5nZSB8fCAhdHJhY2soKS0+aXNSZW5kZXJlZCgpKQotICAgICAgICByZXR1cm4gbV9k
aXNwbGF5VHJlZTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlUcmVlOwogCiAgICAgLy8gMTAuMSAt
IDEwLjEwCiAgICAgY2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMoKTsKQEAgLTczMyw3ICs3NDQs
NyBAQCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlCiAgICAgLy8gMTAu
MTEuIEFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgQ1NTIHNwZWNpZmljYXRpb25zIHRvIG5vZGVzIHdp
dGhpbiB0aGUKICAgICAvLyBmb2xsb3dpbmcgY29uc3RyYWludHMsIHRodXMgb2J0YWluaW5nIGEg
c2V0IG9mIENTUyBib3hlcyBwb3NpdGlvbmVkCiAgICAgLy8gcmVsYXRpdmUgdG8gYW4gaW5pdGlh
bCBjb250YWluaW5nIGJsb2NrOgotICAgIG1fZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7
CisgICAgZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7CiAKICAgICAvLyBUaGUgZG9jdW1l
bnQgdHJlZSBpcyB0aGUgdHJlZSBvZiBXZWJWVFQgTm9kZSBPYmplY3RzIHJvb3RlZCBhdCBub2Rl
cy4KIApAQCAtNzQzLDcgKzc1NCw3IEBAIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0
VHJhY2tDdWUKIAogICAgIC8vIE5vdGU6IFRoaXMgaXMgY29udGFpbmVkIGJ5IGRlZmF1bHQgaW4g
bV9hbGxEb2N1bWVudE5vZGVzLgogICAgIG1fYWxsRG9jdW1lbnROb2Rlcy0+c2V0UHNldWRvKGFs
bE5vZGVzU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgbV9kaXNwbGF5VHJlZS0+YXBwZW5kQ2hpbGQo
bV9hbGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCB0cnVlKTsKKyAgICBkaXNw
bGF5VHJlZS0+YXBwZW5kQ2hpbGQobV9hbGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBU
SU9OLCB0cnVlKTsKIAogICAgIC8vIEZJWE1FKEJVRyA3OTkxNik6IFJ1bnMgb2YgY2hpbGRyZW4g
b2YgV2ViVlRUIFJ1YnkgT2JqZWN0cyB0aGF0IGFyZSBub3QKICAgICAvLyBXZWJWVFQgUnVieSBU
ZXh0IE9iamVjdHMgbXVzdCBiZSB3cmFwcGVkIGluIGFub255bW91cyBib3hlcyB3aG9zZQpAQCAt
NzU2LDE4ICs3NjcsMTggQEAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1
ZQogICAgIC8vIGlzIG5vIGxpbmUgYnJlYWtpbmcgb3Bwb3J0dW5pdHkuIChUaHVzLCBub3JtYWxs
eSB0ZXh0IHdyYXBzIGFzIG5lZWRlZCwKICAgICAvLyBidXQgaWYgdGhlcmUgaXMgYSBwYXJ0aWN1
bGFybHkgbG9uZyB3b3JkLCBpdCBkb2VzIG5vdCBvdmVyZmxvdyBhcyBpdAogICAgIC8vIG5vcm1h
bGx5IHdvdWxkIGluIENTUywgaXQgaXMgaW5zdGVhZCBmb3JjaWJseSB3cmFwcGVkIGF0IHRoZSBi
b3gncyBlZGdlLikKLSAgICBtX2Rpc3BsYXlUcmVlLT5hcHBseUNTU1Byb3BlcnRpZXMoKTsKKyAg
ICBkaXNwbGF5VHJlZS0+YXBwbHlDU1NQcm9wZXJ0aWVzKHZpZGVvU2l6ZSk7CiAKICAgICBtX2Rp
c3BsYXlUcmVlU2hvdWxkQ2hhbmdlID0gZmFsc2U7CiAKICAgICAvLyAxMC4xNS4gTGV0IGN1ZSdz
IHRleHQgdHJhY2sgY3VlIGRpc3BsYXkgc3RhdGUgaGF2ZSB0aGUgQ1NTIGJveGVzIGluCiAgICAg
Ly8gYm94ZXMuCi0gICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CisgICAgcmV0dXJuIGRpc3BsYXlU
cmVlOwogfQogCiB2b2lkIFRleHRUcmFja0N1ZTo6cmVtb3ZlRGlzcGxheVRyZWUoKQogewotICAg
IG1fZGlzcGxheVRyZWUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBkaXNwbGF5
VHJlZUludGVybmFsKCktPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIH0KIAogc3RkOjpw
YWlyPGRvdWJsZSwgZG91YmxlPiBUZXh0VHJhY2tDdWU6OmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMo
KSBjb25zdApAQCAtMTA2Niw2ICsxMDc3LDMzIEBAIEV2ZW50VGFyZ2V0RGF0YSogVGV4dFRyYWNr
Q3VlOjplbnN1cmVFdmUKICAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCitib29s
IFRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QK
K3sKKyAgICBpZiAoY3VlVHlwZSgpICE9IGN1ZS5jdWVUeXBlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChtX2VuZFRpbWUgIT0gY3VlLmVuZFRpbWUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXJ0VGltZSAhPSBjdWUuc3RhcnRUaW1lKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jb250ZW50ICE9IGN1ZS50ZXh0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zZXR0aW5ncyAhPSBjdWUuY3VlU2V0dGluZ3Mo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lkICE9IGN1ZS5pZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdGV4dFBvc2l0aW9uICE9IGN1ZS5wb3NpdGlv
bigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbGluZVBvc2l0aW9uICE9IGN1
ZS5saW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jdWVTaXplICE9IGN1
ZS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYWxpZ24oKSAhPSBjdWUu
YWxpZ24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
NTcsMTEgKzU4LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBUZXh0VHJhY2tDdWUqIGdldEN1
ZSgpIGNvbnN0OwotICAgIHZvaWQgYXBwbHlDU1NQcm9wZXJ0aWVzKCk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1NpemUpOwogCiAgICAg
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgdGV4dFRyYWNrQ3VlQm94U2hhZG93UHNldWRvSWQo
KTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBUZXh0VHJhY2tDdWVCb3goRG9jdW1lbnQq
LCBUZXh0VHJhY2tDdWUqKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgT1ZFUlJJREU7CkBAIC0xMjIsMTMgKzEy
MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTbmFwVG9MaW5lcyhib29sKTsKIAogICAgIGlu
dCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9saW5lUG9zaXRpb247IH0KLSAgICB2b2lkIHNldExp
bmUoaW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmUoaW50LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBpbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRQb3NpdGlvbjsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oaW50LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGludCwgRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2N1ZVNpemU7IH0KLSAgICB2b2lkIHNldFNp
emUoaW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoaW50LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBjb25zdCBTdHJpbmcmIGFsaWduKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNTEsNyAr
MTUyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2b2lkIHNldElzQWN0
aXZlKGJvb2wpOwogCi0gICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlU
cmVlKCk7CisgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlUcmVlKGNv
bnN0IEludFNpemUmIHZpZGVvU2l6ZSk7CiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5VHJlZShmbG9h
dCk7CiAgICAgdm9pZCByZW1vdmVEaXNwbGF5VHJlZSgpOwogICAgIHZvaWQgbWFya0Z1dHVyZUFu
ZFBhc3ROb2RlcyhDb250YWluZXJOb2RlKiwgZG91YmxlLCBkb3VibGUpOwpAQCAtMTczLDYgKzE3
NCwyNSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXcml0aW5nRGlyZWN0aW9uIGdldFdyaXRpbmdE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dyaXRpbmdEaXJlY3Rpb247IH0KIAorICAgIGVu
dW0gQ3VlQWxpZ25tZW50IHsKKyAgICAgICAgU3RhcnQsCisgICAgICAgIE1pZGRsZSwKKyAgICAg
ICAgRW5kCisgICAgfTsKKyAgICBDdWVBbGlnbm1lbnQgZ2V0QWxpZ25tZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdWVBbGlnbm1lbnQ7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gY3VlKTsKKyAgICB9CisgICAgCisgICAgZW51bSBDdWVUeXBlIHsKKyAgICAgICAgR2Vu
ZXJpYywKKyAgICAgICAgV2ViVlRUCisgICAgfTsKKyAgICB2aXJ0dWFsIEN1ZVR5cGUgY3VlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFdlYlZUVDsgfQorCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihlbnRlcik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihl
eGl0KTsKIApAQCAtMTgzLDkgKzIwMywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBFdmVu
dFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRE
YXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotcHJpdmF0ZToKICAgICBUZXh0VHJhY2tD
dWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50KTsKIAorICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOyB9
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBjcmVhdGVEaXNwbGF5
VHJlZSgpOworICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5VHJlZUludGVy
bmFsKCk7CisKK3ByaXZhdGU6CiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRQb3Np
dGlvbkNvb3JkaW5hdGVzKCkgY29uc3Q7CiAgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0
cmluZyYpOwogCkBAIC0yMTMsOCArMjM4LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRpbmdEaXJl
Y3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOwogCi0gICAgZW51bSBBbGlnbm1lbnQgeyBTdGFydCwg
TWlkZGxlLCBFbmQgfTsKLSAgICBBbGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAgQ3VlQWxp
Z25tZW50IG1fY3VlQWxpZ25tZW50OwogCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1f
d2ViVlRUTm9kZVRyZWU7CiAgICAgVGV4dFRyYWNrKiBtX3RyYWNrOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIlRleHRUcmFja0N1
ZUdlbmVyaWMuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFRyYWNrQ3Vl
LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRU
cmFja0N1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRUcmFja0N1ZUdl
bmVyaWNCb3hFbGVtZW50IDogcHVibGljIFRleHRUcmFja0N1ZUJveCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQ+IGNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZUdlbmVyaWMqIGN1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoZG9j
dW1lbnQsIGN1ZSkpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDU1NQcm9w
ZXJ0aWVzKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICAKK3ByaXZhdGU6CisgICAgVGV4
dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoRG9jdW1lbnQqLCBUZXh0VHJhY2tDdWUqKTsKK307
CisKK1RleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjpUZXh0VHJhY2tDdWVHZW5lcmljQm94
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZSogY3VlKQorICAgIDogVGV4
dFRyYWNrQ3VlQm94KGRvY3VtZW50LCBjdWUpCit7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlR2Vu
ZXJpY0JveEVsZW1lbnQ6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1Np
emUpCit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBD
U1NWYWx1ZUFic29sdXRlKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
VW5pY29kZUJpZGksIENTU1ZhbHVlV2Via2l0UGxhaW50ZXh0KTsKKyAgICAKKyAgICBUZXh0VHJh
Y2tDdWVHZW5lcmljKiBjdWUgPSBzdGF0aWNfY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljKj4oZ2V0
Q3VlKCkpOworCisgICAgaWYgKGN1ZS0+dXNlRGVmYXVsdFBvc2l0aW9uKCkpIHsKKyAgICAgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgIjAiKTsKKyAgICAgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgMS4wLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y3VlLT5wb3NpdGlvbigpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAg
ICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGN1ZS0+bGluZSgpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsK
KyAgICB9CisKKyAgICBmbG9hdCBzaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN1ZS0+Z2V0Q1NT
U2l6ZSgpKTsKKyAgICBpZiAoY3VlLT5nZXRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVGV4dFRyYWNr
Q3VlOjpIb3Jpem9udGFsKSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBzaXplLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0
LCBDU1NWYWx1ZUF1dG8pOworICAgIH0gZWxzZSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgc2l6ZSwgIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgfQorCisgICAgaWYgKGN1ZS0+YmFzZUZvbnRTaXplUmVs
YXRpdmVUb1ZpZGVvSGVpZ2h0KCkpIHsKKyAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmlkZW9T
aXplLmhlaWdodCgpICogY3VlLT5iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoKSAv
IDEwMDsKKyAgICAgICAgaWYgKGN1ZS0+Zm9udFNpemVNdWx0aXBsaWVyKCkpCisgICAgICAgICAg
ICBmb250U2l6ZSAqPSBjdWUtPmZvbnRTaXplTXVsdGlwbGllcigpIC8gMTAwOworICAgICAgICBz
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIFN0cmluZzo6bnVtYmVy
KGZvbnRTaXplKSArICJweCIpOworICAgIH0KKworICAgIGlmIChjdWUtPmdldEFsaWdubWVudCgp
ID09IFRleHRUcmFja0N1ZTo6U3RhcnQpCisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVlU3RhcnQpOworICAgIGVsc2UgaWYgKGN1ZS0+
Z2V0QWxpZ25tZW50KCkgPT0gVGV4dFRyYWNrQ3VlOjpFbmQpCisgICAgICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVlRW5kKTsKKyAgICBlbHNl
CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENT
U1ZhbHVlQ2VudGVyKTsKKworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRXcml0aW5nTW9kZSwgY3VlLT5nZXRDU1NXcml0aW5nTW9kZSgpLCBmYWxzZSk7CisgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlUHJl
V3JhcCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdvcmRCcmVhaywg
Q1NTVmFsdWVOb3JtYWwpOworfQorCitUZXh0VHJhY2tDdWVHZW5lcmljOjpUZXh0VHJhY2tDdWVH
ZW5lcmljKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRl
eHQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpCisgICAgLCBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9W
aWRlb0hlaWdodCgwKQorICAgICwgbV9mb250U2l6ZU11bHRpcGxpZXIoMCkKKyAgICAsIG1fZGVm
YXVsdFBvc2l0aW9uKHRydWUpCit7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBU
ZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGVEaXNwbGF5VHJlZSgpCit7CisgICAgcmV0dXJuIFRl
eHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpLCB0aGlz
KTsKK30KKwordm9pZCBUZXh0VHJhY2tDdWVHZW5lcmljOjpzZXRMaW5lKGludCBsaW5lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBtX2RlZmF1bHRQb3NpdGlvbiA9IGZhbHNlOworICAgIFRl
eHRUcmFja0N1ZTo6c2V0TGluZShsaW5lLCBlYyk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlR2Vu
ZXJpYzo6c2V0UG9zaXRpb24oaW50IHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBtX2RlZmF1bHRQb3NpdGlvbiA9IGZhbHNlOworICAgIFRleHRUcmFja0N1ZTo6c2V0UG9zaXRp
b24ocG9zaXRpb24sIGVjKTsKK30KKworYm9vbCBUZXh0VHJhY2tDdWVHZW5lcmljOjpvcGVyYXRv
cj09KGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAoreworICAgIGlmIChjdWUuY3VlVHlw
ZSgpICE9IFRleHRUcmFja0N1ZTo6R2VuZXJpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY29uc3QgVGV4dFRyYWNrQ3VlR2VuZXJpYyogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBU
ZXh0VHJhY2tDdWVHZW5lcmljKj4oJmN1ZSk7CisKKyAgICBpZiAobV9iYXNlRm9udFNpemVSZWxh
dGl2ZVRvVmlkZW9IZWlnaHQgIT0gb3RoZXItPmJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hl
aWdodCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZm9udFNpemVNdWx0aXBs
aWVyICE9IG90aGVyLT5mb250U2l6ZU11bHRpcGxpZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX2ZvbnROYW1lICE9IG90aGVyLT5mb250TmFtZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlOjpvcGVyYXRvcj09KGN1ZSk7Cit9
CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0VHJhY2tDdWVH
ZW5lcmljX2gKKyNkZWZpbmUgVGV4dFRyYWNrQ3VlR2VuZXJpY19oCisKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRUcmFj
a0N1ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR2VuZXJpY0N1ZURhdGE7CisKKy8vIEEgImdlbmVyaWMiIGN1ZSBpcyBhIG5v
bi1XZWJWVFQgY3VlLCBzbyBpdCBpcyBub3QgcG9zaXRpb25lZC9zaXplZCB3aXRoIHRoZSBXZWJW
VFQgbG9naWMuCitjbGFzcyBUZXh0VHJhY2tDdWVHZW5lcmljIDogcHVibGljIFRleHRUcmFja0N1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0VHJhY2tDdWVHZW5lcmljKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGNvbnRl
bnQpKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+VGV4dFRyYWNrQ3VlR2VuZXJpYygpIHsg
fQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gY3JlYXRlRGlzcGxh
eVRyZWUoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lKGludCwgRXhjZXB0
aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihpbnQsIEV4
Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKworICAgIGJvb2wgdXNlRGVmYXVsdFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UG9zaXRpb247IH0KKyAgICAKKyAgICBkb3VibGUgYmFz
ZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRm9u
dFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQ7IH0KKyAgICB2b2lkIHNldEJhc2VGb250U2l6ZVJl
bGF0aXZlVG9WaWRlb0hlaWdodChkb3VibGUgc2l6ZSkgeyBtX2Jhc2VGb250U2l6ZVJlbGF0aXZl
VG9WaWRlb0hlaWdodCA9IHNpemU7IH0KKworICAgIGRvdWJsZSBmb250U2l6ZU11bHRpcGxpZXIo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTaXplTXVsdGlwbGllcjsgfQorICAgIHZvaWQgc2V0Rm9u
dFNpemVNdWx0aXBsaWVyKGRvdWJsZSBzaXplKSB7IG1fZm9udFNpemVNdWx0aXBsaWVyID0gc2l6
ZTsgfQorCisgICAgU3RyaW5nIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mb250TmFtZTsg
fQorICAgIHZvaWQgc2V0Rm9udE5hbWUoU3RyaW5nIG5hbWUpIHsgbV9mb250TmFtZSA9IG5hbWU7
IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRUcmFja0N1ZSYpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRUcmFj
a0N1ZSYgY3VlKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gY3VlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFRleHRUcmFja0N1ZTo6Q3VlVHlwZSBjdWVU
eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gVGV4dFRyYWNrQ3VlOjpHZW5lcmljOyB9CisK
K3ByaXZhdGU6CisgICAgVGV4dFRyYWNrQ3VlR2VuZXJpYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICBk
b3VibGUgbV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQ7CisgICAgZG91YmxlIG1f
Zm9udFNpemVNdWx0aXBsaWVyOworICAgIFN0cmluZyBtX2ZvbnROYW1lOworICAgIGJvb2wgbV9k
ZWZhdWx0UG9zaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oCShyZXZpc2lvbiAxNDAz
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudF9oCiAjZGVmaW5lIEluYmFuZFRleHRUcmFja1ByaXZh
dGVDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC0zNCwxMiAr
MzUsODIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlOwogCitjbGFzcyBHZW5lcmljQ3VlRGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R2VuZXJpY0N1ZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBH
ZW5lcmljQ3VlRGF0YSgpCisgICAgICAgIDogbV9zdGFydFRpbWUoMCkKKyAgICAgICAgLCBtX2Vu
ZFRpbWUoMCkKKyAgICAgICAgLCBtX2xpbmUoLTEpCisgICAgICAgICwgbV9wb3NpdGlvbigtMSkK
KyAgICAgICAgLCBtX3NpemUoLTEpCisgICAgICAgICwgbV9hbGlnbihOb25lKQorICAgICAgICAs
IG1fYmFzZUZvbnRTaXplKDApCisgICAgICAgICwgbV9yZWxhdGl2ZUZvbnRTaXplKDApCisgICAg
eworICAgIH0KKyAgICB2aXJ0dWFsIH5HZW5lcmljQ3VlRGF0YSgpIHsgfQorCisgICAgZG91Ymxl
IHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAgdm9pZCBzZXRT
dGFydFRpbWUoZG91YmxlIHN0YXJ0VGltZSkgeyBtX3N0YXJ0VGltZSA9IHN0YXJ0VGltZTsgfQor
CisgICAgZG91YmxlIGVuZFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2VuZFRpbWU7IH0KKyAgICB2
b2lkIHNldEVuZFRpbWUoZG91YmxlIGVuZFRpbWUpIHsgbV9lbmRUaW1lID0gZW5kVGltZTsgfQor
CisgICAgU3RyaW5nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHZvaWQgc2V0SWQo
U3RyaW5nIGlkKSB7IG1faWQgPSBpZDsgfQorCisgICAgU3RyaW5nIGNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnQ7IH0KKyAgICB2b2lkIHNldENvbnRlbnQoU3RyaW5nIGNvbnRlbnQp
IHsgbV9jb250ZW50ID0gY29udGVudDsgfQorCisgICAgZG91YmxlIGxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmU7IH0KKyAgICB2b2lkIHNldExpbmUoZG91YmxlIGxpbmUpIHsgbV9saW5lID0g
bGluZTsgfQorCisgICAgZG91YmxlIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24g
PSBwb3NpdGlvbjsgfQorCisgICAgZG91YmxlIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICB2b2lkIHNldFNpemUoZG91YmxlIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorCisg
ICAgZW51bSBBbGlnbm1lbnQgeworICAgICAgICBOb25lLAorICAgICAgICBTdGFydCwKKyAgICAg
ICAgTWlkZGxlLAorICAgICAgICBFbmQKKyAgICB9OworICAgIEFsaWdubWVudCBhbGlnbigpIGNv
bnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KKyAgICB2b2lkIHNldEFsaWduKEFsaWdubWVudCBhbGln
bikgeyBtX2FsaWduID0gYWxpZ247IH0KKworICAgIFN0cmluZyBmb250TmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE5hbWU7IH0KKyAgICB2b2lkIHNldEZvbnROYW1lKFN0cmluZyBmb250TmFt
ZSkgeyBtX2ZvbnROYW1lID0gZm9udE5hbWU7IH0KKworICAgIGRvdWJsZSBiYXNlRm9udFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2Jhc2VGb250U2l6ZTsgfQorICAgIHZvaWQgc2V0QmFzZUZvbnRT
aXplKGRvdWJsZSBiYXNlRm9udFNpemUpIHsgbV9iYXNlRm9udFNpemUgPSBiYXNlRm9udFNpemU7
IH0KKworICAgIGRvdWJsZSByZWxhdGl2ZUZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZWxh
dGl2ZUZvbnRTaXplOyB9CisgICAgdm9pZCBzZXRSZWxhdGl2ZUZvbnRTaXplKGRvdWJsZSByZWxh
dGl2ZUZvbnRTaXplKSB7IG1fcmVsYXRpdmVGb250U2l6ZSA9IHJlbGF0aXZlRm9udFNpemU7IH0K
KyAgICAKK3ByaXZhdGU6CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgZG91YmxlIG1f
ZW5kVGltZTsKKyAgICBTdHJpbmcgbV9pZDsKKyAgICBTdHJpbmcgbV9jb250ZW50OworICAgIGRv
dWJsZSBtX2xpbmU7CisgICAgZG91YmxlIG1fcG9zaXRpb247CisgICAgZG91YmxlIG1fc2l6ZTsK
KyAgICBBbGlnbm1lbnQgbV9hbGlnbjsKKyAgICBTdHJpbmcgbV9mb250TmFtZTsKKyAgICBkb3Vi
bGUgbV9iYXNlRm9udFNpemU7CisgICAgZG91YmxlIG1fcmVsYXRpdmVGb250U2l6ZTsKK307CisK
IGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1
YWwgfkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQoKSB7IH0KICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRkQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUgLypzdGFydCovLCBk
b3VibGUgLyplbmQqLywgY29uc3QgU3RyaW5nJiAvKmlkKi8sIGNvbnN0IFN0cmluZyYgLypjb250
ZW50Ki8sIGNvbnN0IFN0cmluZyYgLypzZXR0aW5ncyovKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGhhc0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlIC8qc3RhcnQqLywgZG91Ymxl
IC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCovLCBjb25zdCBTdHJpbmcmIC8qY29udGVudCov
LCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRX
ZWJWVFRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAvKnN0YXJ0Ki8sIGRvdWJs
ZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQqLywgY29uc3QgU3RyaW5nJiAvKmNvbnRlbnQq
LywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
R2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgR2VuZXJpY0N1ZURhdGEqKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAxNDAzMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKIAorI2luY2x1ZGUgIkluYmFuZFRleHRU
cmFja1ByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIK
QEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogU09GVF9MSU5LX0ZSQU1F
V09SS19PUFRJT05BTChDb3JlTWVkaWEpCiAKQEAgLTUyLDYgKzU0LDkgQEAgU09GVF9MSU5LX1BP
SU5URVJfT1BUSU9OQUwoQ29yZU1lZGlhLCBrQwogU09GVF9MSU5LX1BPSU5URVJfT1BUSU9OQUwo
Q29yZU1lZGlhLCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0LCBDRlN0cmlu
Z1JlZikKIFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dFZlcnRp
Y2FsTGF5b3V0X0xlZnRUb1JpZ2h0LCBDRlN0cmluZ1JlZikKIFNPRlRfTElOS19QT0lOVEVSX09Q
VElPTkFMKENvcmVNZWRpYSwga0NNVGV4dFZlcnRpY2FsTGF5b3V0X1JpZ2h0VG9MZWZ0LCBDRlN0
cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1h
cmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0
LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NN
VGV4dE1hcmt1cEF0dHJpYnV0ZV9SZWxhdGl2ZUZvbnRTaXplLCBDRlN0cmluZ1JlZikKK1NPRlRf
TElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9G
b250RmFtaWx5TmFtZSwgQ0ZTdHJpbmdSZWYpCiAKICNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJp
YnV0ZV9BbGlnbm1lbnQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9BbGlnbm1lbnQoKQogI2Rl
ZmluZSBrQ01UZXh0TWFya3VwQWxpZ25tZW50VHlwZV9TdGFydCBnZXRrQ01UZXh0TWFya3VwQWxp
Z25tZW50VHlwZV9TdGFydCgpCkBAIC02Niw2ICs3MSw5IEBAIFNPRlRfTElOS19QT0lOVEVSX09Q
VElPTkFMKENvcmVNZWRpYSwga0MKICNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0
aWNhbExheW91dCBnZXRrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0KCkKICNk
ZWZpbmUga0NNVGV4dFZlcnRpY2FsTGF5b3V0X0xlZnRUb1JpZ2h0IGdldGtDTVRleHRWZXJ0aWNh
bExheW91dF9MZWZ0VG9SaWdodCgpCiAjZGVmaW5lIGtDTVRleHRWZXJ0aWNhbExheW91dF9SaWdo
dFRvTGVmdCBnZXRrQ01UZXh0VmVydGljYWxMYXlvdXRfUmlnaHRUb0xlZnQoKQorI2RlZmluZSBr
Q01UZXh0TWFya3VwQXR0cmlidXRlX0Jhc2VGb250U2l6ZVBlcmNlbnRhZ2VSZWxhdGl2ZVRvVmlk
ZW9IZWlnaHQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdl
UmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkKKyNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9S
ZWxhdGl2ZUZvbnRTaXplIGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6
ZSgpCisjZGVmaW5lIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUgZ2V0a0NN
VGV4dE1hcmt1cEF0dHJpYnV0ZV9Gb250RmFtaWx5TmFtZSgpCiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKQEAgLTg0LDcgKzkyLDcgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFu
ZFRleHRUcgogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmli
dXRlZFN0cmluZywgU3RyaW5nQnVpbGRlciYgY29udGVudCwgU3RyaW5nQnVpbGRlciYgc2V0dGlu
Z3MpCit2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVz
KENGQXR0cmlidXRlZFN0cmluZ1JlZiBhdHRyaWJ1dGVkU3RyaW5nLCBHZW5lcmljQ3VlRGF0YSog
Y3VlRGF0YSkKIHsKICAgICAvLyBTb21lIG9mIHRoZSBhdHRyaWJ1dGVzIHdlIHRyYW5zbGF0ZSBp
bnRvIHBlci1jdWUgV2ViVlRUIHNldHRpbmdzIGFyZSBhcmUgcmVwZWF0ZWQgb24gZWFjaCBwYXJ0
IG9mIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIHNvIG9ubHkKICAgICAvLyBwcm9jZXNzIHRoZSBmaXJz
dCBpbnN0YW5jZSBvZiBlYWNoLgpAQCAtOTMsMTAgKzEwMSwxMiBAQCB2b2lkIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgIFBvc2l0aW9uID0gMSA8PCAxLAogICAg
ICAgICBTaXplID0gMSA8PCAyLAogICAgICAgICBWZXJ0aWNhbCA9IDEgPDwgMywKLSAgICAgICAg
QWxpZ24gPSAxIDw8IDQKKyAgICAgICAgQWxpZ24gPSAxIDw8IDQsCisgICAgICAgIEZvbnROYW1l
ID0gMSA8PCA1CiAgICAgfTsKICAgICB1bnNpZ25lZCBwcm9jZXNzZWQgPSAwOwogCisgICAgU3Ry
aW5nQnVpbGRlciBjb250ZW50OwogICAgIFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nVmFsdWUgPSBD
RkF0dHJpYnV0ZWRTdHJpbmdHZXRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CiAgICAgQ0ZJbmRl
eCBsZW5ndGggPSBhdHRyaWJ1dGVkU3RyaW5nVmFsdWUubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5n
dGgpCkBAIC0xMTAsNiArMTIwLDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpw
cm9jZXNzQwogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgU3RyaW5nQnVpbGRlciB0
YWdTdGFydDsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgdmFsdWVTdHJpbmc7CiAgICAgICAgIFN0cmlu
ZyB0YWdFbmQ7CiAgICAgICAgIENGSW5kZXggYXR0cmlidXRlQ291bnQgPSBDRkRpY3Rpb25hcnlH
ZXRDb3VudChhdHRyaWJ1dGVzKTsKICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBrZXlzKGF0
dHJpYnV0ZUNvdW50KTsKQEAgLTEyMyw3ICsxMzQsNyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0FsaWdu
bWVudCwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKLSAgICAgICAgICAgICAgICBDRlN0cmlu
Z1JlZiB2YWx1ZVN0cmluZyA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPih2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUp
OwogICAgICAgICAgICAgICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZVN0cmluZykgIT0gQ0ZTdHJp
bmdHZXRUeXBlSUQoKSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgodmFsdWVTdHJpbmcpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkICYg
QWxpZ24pCkBAIC0xMzEsMTEgKzE0MiwxMSBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IEFsaWduOwogCiAgICAg
ICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1hcmt1
cEFsaWdubWVudFR5cGVfU3RhcnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAg
ICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoImFsaWduOnN0YXJ0ICIpOworICAgICAgICAgICAg
ICAgICAgICBjdWVEYXRhLT5zZXRBbGlnbihHZW5lcmljQ3VlRGF0YTo6U3RhcnQpOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1h
cmt1cEFsaWdubWVudFR5cGVfTWlkZGxlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAg
ICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjptaWRkbGUgIik7CisgICAgICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldEFsaWduKEdlbmVyaWNDdWVEYXRhOjpNaWRkbGUpOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NN
VGV4dE1hcmt1cEFsaWdubWVudFR5cGVfRW5kLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAg
ICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjplbmQgIik7CisgICAgICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldEFsaWduKEdlbmVyaWNDdWVEYXRhOjpFbmQpOwogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKQEAgLTE3MCw5ICsxODEsNiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6
OnByb2Nlc3NDCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBh
cmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX09ydGhvZ29uYWxMaW5lUG9zaXRpb25QZXJj
ZW50YWdlUmVsYXRpdmVUb1dyaXRpbmdEaXJlY3Rpb24sIDApID09IGtDRkNvbXBhcmVFcXVhbFRv
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBsaW5lIHBvc2l0aW9uIGlmIHRoZSBh
dHRyaWJ1dGVzIGFsc28gc3BlY2lmeSAic2l6ZSIgc28gd2Uga2VlcCBXZWJWVFQncyBkZWZhdWx0
IGxpbmUgbG9naWMKLSAgICAgICAgICAgICAgICBpZiAoQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoYXR0
cmlidXRlcywga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9Xcml0aW5nRGlyZWN0aW9uU2l6ZVBlcmNl
bnRhZ2UpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBp
ZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWQgJiBMaW5l
KQpAQCAtMTgwLDkgKzE4OCw5IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJv
Y2Vzc0MKICAgICAgICAgICAgICAgICBwcm9jZXNzZWQgfD0gTGluZTsKIAogICAgICAgICAgICAg
ICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZh
bHVlKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgICAgICAgICAg
Q0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZwb3Np
dGlvbik7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJs
aW5lOiVsZCUlICIsIGxyaW50KHBvc2l0aW9uKSkpOworICAgICAgICAgICAgICAgIGRvdWJsZSBs
aW5lOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51
bWJlckZsb2F0NjRUeXBlLCAmbGluZSk7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0TGlu
ZShsaW5lKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAt
MTk2LDcgKzIwNCw3IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0MK
ICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRpY19jYXN0PENG
TnVtYmVyUmVmPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgZG91YmxlIHBvc2l0aW9uOwogICAg
ICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJlckZsb2F0
NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgicG9zaXRpb246JWxkJSUgIiwgbHJpbnQocG9zaXRpb24pKSk7CisgICAgICAg
ICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0yMDgsMTYgKzIxNiw2NiBAQCB2b2lkIElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vz
c2VkIHw9IFNpemU7CiAKICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9
IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IHBvc2l0aW9uOwotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIs
IGtDRk51bWJlckZsb2F0NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRp
bmdzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgic2l6ZTolbGQlJSAiLCBscmludChwb3NpdGlvbikp
KTsKKyAgICAgICAgICAgICAgICBkb3VibGUgc2l6ZTsKKyAgICAgICAgICAgICAgICBDRk51bWJl
ckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnNpemUpOworICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldFNpemUoc2l6ZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUo
a2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0LCAwKSA9PSBrQ0ZDb21w
YXJlRXF1YWxUbykgeworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8
Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFs
dWVTdHJpbmcpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZh
bHVlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NN
VGV4dFZlcnRpY2FsTGF5b3V0X0xlZnRUb1JpZ2h0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykK
KyAgICAgICAgICAgICAgICAgICAgdGFnU3RhcnQuYXBwZW5kKGxlZnRUb1JpZ2h0TWFyayk7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZTdHJpbmdDb21wYXJlKHZhbHVlU3RyaW5nLCBrQ01U
ZXh0VmVydGljYWxMYXlvdXRfUmlnaHRUb0xlZnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQor
ICAgICAgICAgICAgICAgICAgICB0YWdTdGFydC5hcHBlbmQocmlnaHRUb0xlZnRNYXJrKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVf
QmFzZUZvbnRTaXplUGVyY2VudGFnZVJlbGF0aXZlVG9WaWRlb0hlaWdodCwgMCkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9
IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0g
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBkb3VibGUg
YmFzZUZvbnRTaXplOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1i
ZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmYmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAg
ICBjdWVEYXRhLT5zZXRCYXNlRm9udFNpemUoYmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250
U2l6ZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZH
ZXRUeXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVy
UmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBkb3VibGUgcmVsYXRpdmVGb250U2l6ZTsKKyAgICAgICAgICAgICAgICBDRk51
bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnJlbGF0aXZl
Rm9udFNpemUpOworICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldFJlbGF0aXZlRm9udFNpemUo
cmVsYXRpdmVGb250U2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3Vw
QXR0cmlidXRlX0ZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAg
ICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWVTdHJpbmcpICE9IENGU3Ry
aW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZhbHVlU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZCAm
IEZvbnROYW1lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzZWQgfD0gRm9udE5hbWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY3VlRGF0YS0+c2V0Rm9udE5hbWUodmFsdWVTdHJpbmcpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgY29udGVudC5hcHBl
bmQodGFnU3RhcnQpOwogICAgICAgICBjb250ZW50LmFwcGVuZChhdHRyaWJ1dGVkU3RyaW5nVmFs
dWUuc3Vic3RyaW5nKGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uLCBlZmZlY3RpdmVSYW5nZS5sZW5n
dGgpKTsKICAgICAgICAgY29udGVudC5hcHBlbmQodGFnRW5kKTsKICAgICB9CisKKyAgICBpZiAo
Y29udGVudC5sZW5ndGgoKSkKKyAgICAgICAgY3VlRGF0YS0+c2V0Q29udGVudChjb250ZW50LnRv
U3RyaW5nKCkpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3ND
dWUoQ0ZBcnJheVJlZiBhdHRyaWJ1dGVkU3RyaW5ncywgZG91YmxlIHRpbWUpCkBAIC0yMjgsMjEg
KzI4Niw0NiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAg
aWYgKG1faGF2ZVBhcnRpYWxDdWUpIHsKICAgICAgICAgLy8gQ3VlcyBkbyBub3QgaGF2ZSBhbiBl
eHBsaWNpdCBkdXJhdGlvbiwgdGhleSBhcmUgZGlzcGxheWVkIHVudGlsIHRoZSBuZXh0ICJjdWUi
ICh3aGljaCBtaWdodCBiZSBlbXB0eSkgaXMgZW1pdHRlZC4KICAgICAgICAgbV9jdXJyZW50Q3Vl
RW5kVGltZSA9IHRpbWU7Ci0gICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgc2V0
dGluZ3M9XCIlc1wiLCBjb250ZW50PVwiJXNcIiBcbiIsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fY3VycmVudEN1ZUNvbnRlbnQu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPmZsdXNoQ3VycmVu
dEN1ZSh0aGlzKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Q3VlRW5kVGltZSA+PSBtX2N1cnJl
bnRDdWVTdGFydFRpbWUpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
dWVzLnNpemUoKTsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBHZW5lcmljQ3VlRGF0YSogY3Vl
RGF0YSA9IG1fY3Vlc1tpXS5nZXQoKTsKKworICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIklu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0l
LjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAorICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIGN1ZURhdGEtPmNvbnRl
bnQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIWN1ZURhdGEtPmNvbnRlbnQoKS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0U3Rh
cnRUaW1lKG1fY3VycmVudEN1ZVN0YXJ0VGltZSk7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+
c2V0RW5kVGltZShtX2N1cnJlbnRDdWVFbmRUaW1lKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBBVkZvdW5kYXRpb24gY3VlICJwb3NpdGlvbiIgaXMgdG8gdGhlIGNlbnRl
ciBvZiB0aGUgdGV4dCBzbyBhZGp1c3QgcmVsYXRpdmUgdG8gdGhlIGVkZ2UgYmVjYXVzZSB3ZSB3
aWxsIHVzZSBpdCB0bworICAgICAgICAgICAgICAgIC8vIHNldCBDU1MgImxlZnQiLgorICAgICAg
ICAgICAgICAgIGlmIChjdWVEYXRhLT5wb3NpdGlvbigpID49IDAgJiYgY3VlRGF0YS0+c2l6ZSgp
ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24oIGN1ZURhdGEt
PnBvc2l0aW9uKCkgLSBjdWVEYXRhLT5zaXplKCkgLyAyKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBtX3BsYXllci0+YWRkR2VuZXJpY0N1ZSh0aGlzLCBjdWVEYXRhKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBMT0coTWVkaWEsICJJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlIG5lZ2F0aXZlIGxlbmd0aCBjdWUocykg
aWdub3JlZDogc3RhcnQ9JS4yZiwgZW5kPSUuMmZcbiIsIG1fY3VycmVudEN1ZVN0YXJ0VGltZSwg
bV9jdXJyZW50Q3VlRW5kVGltZSk7CisKICAgICAgICAgcmVzZXRDdWVWYWx1ZXMoKTsKICAgICB9
CiAKICAgICBDRkluZGV4IGNvdW50ID0gQ0ZBcnJheUdldENvdW50KGF0dHJpYnV0ZWRTdHJpbmdz
KTsKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisKICAgICBmb3IgKENGSW5kZXgg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgICAgIENGQXR0cmlidXRlZFN0cmluZ1JlZiBh
dHRyaWJ1dGVkU3RyaW5nID0gc3RhdGljX2Nhc3Q8Q0ZBdHRyaWJ1dGVkU3RyaW5nUmVmPihDRkFy
cmF5R2V0VmFsdWVBdEluZGV4KGF0dHJpYnV0ZWRTdHJpbmdzLCBpKSk7CiAKICAgICAgICAgaWYg
KCFhdHRyaWJ1dGVkU3RyaW5nIHx8ICFDRkF0dHJpYnV0ZWRTdHJpbmdHZXRMZW5ndGgoYXR0cmli
dXRlZFN0cmluZykpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBwcm9jZXNzQ3Vl
QXR0cmlidXRlcyhhdHRyaWJ1dGVkU3RyaW5nLCBtX2N1cnJlbnRDdWVDb250ZW50LCBtX2N1cnJl
bnRDdWVTZXR0aW5ncyk7CisgICAgICAgIG1fY3Vlcy5hcHBlbmQoYWRvcHRQdHIobmV3IEdlbmVy
aWNDdWVEYXRhKSk7CisgICAgICAgIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZWRTdHJp
bmcsIG1fY3Vlc1tpXS5nZXQoKSk7CiAgICAgICAgIG1fY3VycmVudEN1ZVN0YXJ0VGltZSA9IHRp
bWU7CiAgICAgICAgIG1faGF2ZVBhcnRpYWxDdWUgPSB0cnVlOwogICAgIH0KQEAgLTI1NiwxNyAr
MzM5LDEzIEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6ZGlzY29ubmUKIAogdm9p
ZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpyZXNldEN1ZVZhbHVlcygpCiB7Ci0gICAgaWYg
KG1faGF2ZVBhcnRpYWxDdWUgJiYgIW1fY3VycmVudEN1ZUVuZFRpbWUpIHsKLSAgICAgICAgTE9H
KE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWVWYWx1ZXMgZmx1c2hp
bmcgZGF0YSBmb3IgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgc2V0dGluZ3M9XCIlc1wiLCBj
b250ZW50PVwiJXNcIiBcbiIsCi0gICAgICAgICAgICBtX2N1cnJlbnRDdWVTdGFydFRpbWUsIG1f
Y3VycmVudEN1ZUVuZFRpbWUsIG1fY3VycmVudEN1ZVNldHRpbmdzLnRvU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgbV9jdXJyZW50Q3VlQ29udGVudC50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIH0KKyAgICBpZiAobV9oYXZlUGFydGlhbEN1ZSAmJiAhbV9jdXJyZW50Q3VlRW5kVGltZSkK
KyAgICAgICAgTE9HKE1lZGlhLCAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cmVzZXRDdWVW
YWx1ZXMgZmx1c2hpbmcgZGF0YSBmb3IgY3Vlczogc3RhcnQ9JS4yZlxuIiwgbV9jdXJyZW50Q3Vl
U3RhcnRUaW1lKTsKIAorICAgIG1fY3Vlcy5yZXNpemUoMCk7CiAgICAgbV9oYXZlUGFydGlhbEN1
ZSA9IGZhbHNlOwotICAgIG1fY3VycmVudEN1ZUlkID0gU3RyaW5nKCk7CiAgICAgbV9jdXJyZW50
Q3VlU3RhcnRUaW1lID0gMDsKICAgICBtX2N1cnJlbnRDdWVFbmRUaW1lID0gMDsKLSAgICBtX2N1
cnJlbnRDdWVTZXR0aW5ncy5jbGVhcigpOwotICAgIG1fY3VycmVudEN1ZUNvbnRlbnQuY2xlYXIo
KTsKIH0KIAogdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpzZXRNb2RlKEluYmFuZFRl
eHRUcmFja1ByaXZhdGU6Ok1vZGUgbmV3TW9kZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1By
aXZhdGVBVkYuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMjAgKzM1LDEyIEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjsKK2NsYXNzIEdl
bmVyaWNDdWVEYXRhOwogCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGIDogcHVibGlj
IEluYmFuZFRleHRUcmFja1ByaXZhdGUgewogcHVibGljOgotICAgIH5JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGKCk7Ci0KLSAgICBTdHJpbmcgaWQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRD
dWVJZDsgfQotICAgIGRvdWJsZSBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1ZVN0
YXJ0VGltZTsgfQotICAgIGRvdWJsZSBlbmQoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRDdWVF
bmRUaW1lOyB9Ci0gICAgU3RyaW5nIHNldHRpbmdzKCkgeyByZXR1cm4gbV9jdXJyZW50Q3VlU2V0
dGluZ3MudG9TdHJpbmcoKTsgfQotICAgIFN0cmluZyBjb250ZW50KCkgeyByZXR1cm4gbV9jdXJy
ZW50Q3VlQ29udGVudC50b1N0cmluZygpOyB9CiAKLSAgICB2b2lkIHByb2Nlc3NDdWUoQ0ZBcnJh
eVJlZiwgZG91YmxlKTsKLQotICAgIHZvaWQgcmVzZXRDdWVWYWx1ZXMoKTsKKyAgICB+SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRigpOwogCiAgICAgdmlydHVhbCB2b2lkIHNldE1vZGUoSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZTo6TW9kZSkgT1ZFUlJJREU7CiAKQEAgLTYwLDE2ICs1MiwxOCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNCZWVuUmVwb3J0ZWQoKSBjb25zdCB7IHJldHVybiBtX2hhc0Jl
ZW5SZXBvcnRlZDsgfQogICAgIHZvaWQgc2V0SGFzQmVlblJlcG9ydGVkKGJvb2wgcmVwb3J0ZWQp
IHsgbV9oYXNCZWVuUmVwb3J0ZWQgPSByZXBvcnRlZDsgfQogCisgICAgdm9pZCBwcm9jZXNzQ3Vl
KENGQXJyYXlSZWYsIGRvdWJsZSk7CisgICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOworCiBwcm90
ZWN0ZWQ6CiAgICAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRihNZWRpYVBsYXllclByaXZhdGVB
VkZvdW5kYXRpb24qKTsKIAotICAgIHZvaWQgcHJvY2Vzc0N1ZUF0dHJpYnV0ZXMoQ0ZBdHRyaWJ1
dGVkU3RyaW5nUmVmLCBTdHJpbmdCdWlsZGVyJiBjb250ZW50LCBTdHJpbmdCdWlsZGVyJiBzZXR0
aW5ncyk7CisgICAgdm9pZCBwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdS
ZWYsIEdlbmVyaWNDdWVEYXRhKik7CiAKLSAgICBTdHJpbmcgbV9jdXJyZW50Q3VlSWQ7CiAgICAg
ZG91YmxlIG1fY3VycmVudEN1ZVN0YXJ0VGltZTsKICAgICBkb3VibGUgbV9jdXJyZW50Q3VlRW5k
VGltZTsKLSAgICBTdHJpbmdCdWlsZGVyIG1fY3VycmVudEN1ZVNldHRpbmdzOwotICAgIFN0cmlu
Z0J1aWxkZXIgbV9jdXJyZW50Q3VlQ29udGVudDsKKworICAgIFZlY3RvcjxPd25QdHI8R2VuZXJp
Y0N1ZURhdGE+ID4gbV9jdWVzOwogCiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9u
KiBtX3BsYXllcjsKICAgICBpbnQgbV9pbmRleDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCShyZXZpc2lvbiAxNDAz
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgyLDYg
KzU4MiwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6c2VlCiAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWVrQ29tcGxldGVk
KCVwKSAtIGZpbmlzaGVkID0gJWQiLCB0aGlzLCBmaW5pc2hlZCk7CiAgICAgVU5VU0VEX1BBUkFN
KGZpbmlzaGVkKTsKIAorI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRfVFJBQ0tfU1VQUE9SVCkK
KyAgICBpZiAoY3VycmVudFRyYWNrKCkpCisgICAgICAgIGN1cnJlbnRUcmFjaygpLT5yZXNldEN1
ZVZhbHVlcygpOworI2VuZGlmCisKICAgICBtX3NlZWtUbyA9IE1lZGlhUGxheWVyOjppbnZhbGlk
VGltZSgpOwogICAgIHVwZGF0ZVN0YXRlcygpOwogICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgp
OwpAQCAtODExLDE5ICs4MTYsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRp
b246OmRpcwogfQogCiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQT1JUKQot
dm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmZsdXNoQ3VycmVudEN1ZShJbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGKiB0cmFjaykKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZG
b3VuZGF0aW9uOjphZGRHZW5lcmljQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqIHRyYWNr
LCBHZW5lcmljQ3VlRGF0YSogY3VlRGF0YSkKIHsKICAgICBpZiAoIXRyYWNrLT5jbGllbnQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQVZGb3VuZGF0aW9uIHJldHVybnMgYSBjdWUgZXZl
cnkgdGltZSB0aGUgZGF0YSBpcyBidWZmZXJlZCwgb25seSBhZGQgaXQgb25jZS4KLSAgICBpZiAo
dHJhY2stPmNsaWVudCgpLT5oYXNDdWUodHJhY2ssIHRyYWNrLT5zdGFydCgpLCB0cmFjay0+ZW5k
KCksIHRyYWNrLT5pZCgpLCB0cmFjay0+Y29udGVudCgpLCB0cmFjay0+c2V0dGluZ3MoKSkpIHsK
LSAgICAgICAgTE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpmbHVz
aEN1cnJlbnRDdWUoJXApIC0gYWxyZWFkeSBoYXZlIGN1ZSBmb3IgdGltZSAlLjJmIiwgdGhpcywg
dHJhY2stPnN0YXJ0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTE9HKE1lZGlh
LCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpmbHVzaEN1cnJlbnRDdWUoJXApIC0g
YWRkaW5nIGN1ZSBmb3IgdGltZSAlLjJmIiwgdGhpcywgdHJhY2stPnN0YXJ0KCkpOwotICAgIHRy
YWNrLT5jbGllbnQoKS0+YWRkQ3VlKHRyYWNrLCB0cmFjay0+c3RhcnQoKSwgdHJhY2stPmVuZCgp
LCB0cmFjay0+aWQoKSwgdHJhY2stPmNvbnRlbnQoKSwgdHJhY2stPnNldHRpbmdzKCkpOworICAg
IExPRyhNZWRpYSwgIk1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6YWRkR2VuZXJpY0N1
ZSglcCkgLSBhZGRpbmcgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCBjdWVEYXRhLT5zdGFydFRp
bWUoKSk7CisgICAgdHJhY2stPmNsaWVudCgpLT5hZGRHZW5lcmljQ3VlKHRyYWNrLCBjdWVEYXRh
KTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmNvbmZpZ3VyZUlu
YmFuZFRyYWNrcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbi5oCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjsKK2NsYXNzIEdlbmVyaWND
dWVEYXRhOwogCiBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24gOiBwdWJsaWMg
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlIHsKIHB1YmxpYzoKQEAgLTExOCw3ICsxMTksNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhck1haW5UaHJlYWRQZW5kaW5nRmxhZygpOwogCiAjaWYg
SEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQT1JUKQotICAgIHZvaWQgZmx1c2hDdXJy
ZW50Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYqKTsKKyAgICB2b2lkIGFkZEdlbmVyaWND
dWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRiosIEdlbmVyaWNDdWVEYXRhKik7CiAgICAgdm9p
ZCB0cmFja01vZGVDaGFuZ2VkKCk7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpD
Lm1tCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgU09GVF9MSU5LX0NMQVNTKEFWRm91
bmRhdGlvbiwgQVZNZWRpYVNlbAogU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1l
ZGlhQ2hhcmFjdGVyaXN0aWNMZWdpYmxlLCBOU1N0cmluZyAqKQogU09GVF9MSU5LX1BPSU5URVIo
QVZGb3VuZGF0aW9uLCBBVk1lZGlhVHlwZVN1YnRpdGxlLCBOU1N0cmluZyAqKQogU09GVF9MSU5L
X1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlG
b3JjZWRTdWJ0aXRsZXMsIE5TU3RyaW5nICopCitTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRp
b24sIEFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRUZXh0U3R5bGluZ1Jlc29sdXRpb25Tb3VyY2VB
bmRSdWxlc09ubHksIE5TU3RyaW5nICopCiAKICNkZWZpbmUgQVZQbGF5ZXJJdGVtTGVnaWJsZU91
dHB1dCBnZXRBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0Q2xhc3MoKQogI2RlZmluZSBBVk1lZGlh
U2VsZWN0aW9uR3JvdXAgZ2V0QVZNZWRpYVNlbGVjdGlvbkdyb3VwQ2xhc3MoKQpAQCAtMTEzLDYg
KzExNCw3IEBAIFNPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlvbiwgQVZNZWRpYUMKICNkZWZp
bmUgQVZNZWRpYUNoYXJhY3RlcmlzdGljTGVnaWJsZSBnZXRBVk1lZGlhQ2hhcmFjdGVyaXN0aWNM
ZWdpYmxlKCkKICNkZWZpbmUgQVZNZWRpYVR5cGVTdWJ0aXRsZSBnZXRBVk1lZGlhVHlwZVN1YnRp
dGxlKCkKICNkZWZpbmUgQVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3Vi
dGl0bGVzIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxl
cygpCisjZGVmaW5lIEFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRUZXh0U3R5bGluZ1Jlc29sdXRp
b25Tb3VyY2VBbmRSdWxlc09ubHkgZ2V0QVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dFRleHRTdHls
aW5nUmVzb2x1dGlvblNvdXJjZUFuZFJ1bGVzT25seSgpCiAjZW5kaWYKIAogI2RlZmluZSBrQ01U
aW1lWmVybyBnZXRrQ01UaW1lWmVybygpCkBAIC0zOTEsNyArMzkzLDYgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogI2lmIEhBVkUoQVZGT1VOREFUSU9OX1RFWFRf
VFJBQ0tfU1VQUE9SVCkKICAgICBbbV9hdlBsYXllci5nZXQoKSBzZXRBcHBsaWVzTWVkaWFTZWxl
Y3Rpb25Dcml0ZXJpYUF1dG9tYXRpY2FsbHk6WUVTXTsKICNlbmRpZgotICAgIAogCiAgICAgaWYg
KG1fYXZQbGF5ZXJJdGVtKQogICAgICAgICBbbV9hdlBsYXllci5nZXQoKSByZXBsYWNlQ3VycmVu
dEl0ZW1XaXRoUGxheWVySXRlbTptX2F2UGxheWVySXRlbS5nZXQoKV07CkBAIC00MTAsNyArNDEx
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgLy8g
Q3JlYXRlIHRoZSBwbGF5ZXIgaXRlbSBzbyB3ZSBjYW4gbG9hZCBtZWRpYSBkYXRhLiAKICAgICBt
X2F2UGxheWVySXRlbS5hZG9wdE5TKFtbQVZQbGF5ZXJJdGVtIGFsbG9jXSBpbml0V2l0aEFzc2V0
Om1fYXZBc3NldC5nZXQoKV0pOwotICAgIAorCiAgICAgW1tOU05vdGlmaWNhdGlvbkNlbnRlciBk
ZWZhdWx0Q2VudGVyXSBhZGRPYnNlcnZlcjptX29iamNPYnNlcnZlci5nZXQoKSBzZWxlY3RvcjpA
c2VsZWN0b3IoZGlkRW5kOikgbmFtZTpBVlBsYXllckl0ZW1EaWRQbGF5VG9FbmRUaW1lTm90aWZp
Y2F0aW9uIG9iamVjdDptX2F2UGxheWVySXRlbS5nZXQoKV07CiAKICAgICBmb3IgKE5TU3RyaW5n
ICprZXlOYW1lIGluIGl0ZW1LVk9Qcm9wZXJ0aWVzKCkpCkBAIC04OTcsNiArODk4LDcgQEAgdm9p
ZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogCiAgICAgICAgIFttX2xlZ2li
bGVPdXRwdXQuZ2V0KCkgc2V0RGVsZWdhdGU6bV9vYmpjT2JzZXJ2ZXIuZ2V0KCkgcXVldWU6ZGlz
cGF0Y2hfZ2V0X21haW5fcXVldWUoKV07CiAgICAgICAgIFttX2xlZ2libGVPdXRwdXQuZ2V0KCkg
c2V0QWR2YW5jZUludGVydmFsRm9yRGVsZWdhdGVJbnZvY2F0aW9uOk5TVGltZUludGVydmFsU2lu
Y2UxOTcwXTsKKyAgICAgICAgW21fbGVnaWJsZU91dHB1dC5nZXQoKSBzZXRUZXh0U3R5bGluZ1Jl
c29sdXRpb246QVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dFRleHRTdHlsaW5nUmVzb2x1dGlvblNv
dXJjZUFuZFJ1bGVzT25seV07CiAgICAgICAgIFttX2F2UGxheWVySXRlbS5nZXQoKSBhZGRPdXRw
dXQ6bV9sZWdpYmxlT3V0cHV0LmdldCgpXTsKICAgICB9CiAjZW5kaWYKQEAgLTEyMTIsNyArMTIx
NCw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzoKICAgICAgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6cHJvY2Vzc1Rl
eHRUcmFja3MoJXApIC0gbmlsIG1lZGlhU2VsZWN0aW9uR3JvdXAiLCB0aGlzKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLQorICAgIAogICAgIFZlY3RvcjxSZWZQdHI8SW5iYW5kVGV4dFRyYWNr
UHJpdmF0ZUFWRj4gPiByZW1vdmVkVGV4dFRyYWNrcyA9IG1fdGV4dFRyYWNrczsKICAgICBOU0Fy
cmF5ICpsZWdpYmxlT3B0aW9ucyA9IFtBVk1lZGlhU2VsZWN0aW9uR3JvdXAgcGxheWFibGVNZWRp
YVNlbGVjdGlvbk9wdGlvbnNGcm9tQXJyYXk6W2xlZ2libGVHcm91cCBvcHRpb25zXV07CiAgICAg
Zm9yIChBVk1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZSAqb3B0aW9uIGluIGxlZ2libGVPcHRpb25z
KSB7CkBAIC0xMjI4LDEzICsxMjMwLDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDOgogICAgICAgICBpZiAoIW5ld1RyYWNrKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgaWYgKFtbb3B0aW9uIG1lZGlhVHlwZV0gaXNFcXVhbFRvU3RyaW5nOkFWTWVk
aWFUeXBlU3VidGl0bGVdKSB7Ci0gICAgICAgICAgICBpZiAoIVtvcHRpb24gaGFzTWVkaWFDaGFy
YWN0ZXJpc3RpYzpBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0aXRs
ZXNdKSB7Ci0gICAgICAgICAgICAgICAgQVZNZWRpYVNlbGVjdGlvbk9wdGlvblR5cGUgKmZvcmNl
ZE9ubHlPcHRpb24gPSBbb3B0aW9uIGFzc29jaWF0ZWRNZWRpYVNlbGVjdGlvbk9wdGlvbkluTWVk
aWFTZWxlY3Rpb25Hcm91cDpsZWdpYmxlR3JvdXBdOwotICAgICAgICAgICAgICAgIGlmIChmb3Jj
ZWRPbmx5T3B0aW9uKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQorICAgICAgICBpZiAoW1tvcHRpb24gbWVkaWFUeXBlXSBpc0VxdWFsVG9T
dHJpbmc6QVZNZWRpYVR5cGVTdWJ0aXRsZV0gJiYgW29wdGlvbiBoYXNNZWRpYUNoYXJhY3Rlcmlz
dGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxlc10pCisg
ICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBtX3RleHRUcmFja3MuYXBwZW5kKEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcywgb3B0aW9uKSk7CiAgICAgfQpA
QCAtMTI3NSw2ICsxMjcyLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25P
YmpDOgogdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDdXJyZW50
VHJhY2soSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRiAqdHJhY2spCiB7CiAgICAgSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRk9iakMqIHRyYWNrUHJpdmF0ZSA9IHN0YXRpY19jYXN0PEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkZPYmpDKj4odHJhY2spOworICAgIGlmIChtX2N1cnJlbnRUcmFjayA9
PSB0cmFja1ByaXZhdGUpCisgICAgICAgIHJldHVybjsKKwogICAgIEFWTWVkaWFTZWxlY3Rpb25P
cHRpb25UeXBlICptZWRpYVNlbGVjdGlvbk9wdGlvbiA9IHRyYWNrUHJpdmF0ZSA/IHRyYWNrUHJp
dmF0ZS0+bWVkaWFTZWxlY3Rpb25PcHRpb24oKSA6IDA7CiAKICAgICBMT0coTWVkaWEsICJNZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpzZXRDdXJyZW50VHJhY2soJXApIC0gc2Vs
ZWN0aW5nIG1lZGlhIG9wdGlvbiAlcCIsIHRoaXMsIG1lZGlhU2VsZWN0aW9uT3B0aW9uKTsKQEAg
LTE0MjQsNiArMTQyNCw4IEBAIC0gKHZvaWQpbGVnaWJsZU91dHB1dDooaWQpb3V0cHV0IGRpZE91
dHAKICAgICAgICAgcmV0dXJuOwogCiAgICAgZGlzcGF0Y2hfYXN5bmMoZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSwgXnsKKyAgICAgICAgaWYgKCFtX2NhbGxiYWNrKQorICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBtX2NhbGxiYWNrLT5wcm9jZXNzQ3VlKHN0cmluZ3MsIENNVGltZUdldFNl
Y29uZHMoaXRlbVRpbWUpKTsKICAgICB9KTsKIH0K
</data>
<flag name="review"
          id="202358"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183831</attachid>
            <date>2013-01-21 13:51:25 -0800</date>
            <delta_ts>2013-01-21 14:05:49 -0800</delta_ts>
            <desc>One byte smaller this time.</desc>
            <filename>patch_30.txt</filename>
            <type>text/plain</type>
            <size>69056</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk0IEBACisyMDEzLTAxLTIxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgbm9uLVdl
YlZUVCBjdWVzIGZyb20gaW4tYmFuZCB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MDQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBmaWxl
cy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJn
ZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorCisgICAgICAgICogaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250
cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6dXBkYXRlRGlzcGxheSk6IFBhc3MgdmlkZW8g
c2l6ZSB0byBnZXREaXNwbGF5VHJlZS4KKworICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4
dFRyYWNrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJp
Y0N1ZSk6IE5ldywgY3JlYXRlIGEgZ2VuZXJpYyBjdWUgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4
aXN0LgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrOjphZGRXZWJWVFRDdWUpOiBS
ZW5hbWVkIGZyb20gYWRkQ3VlLgorICAgICAgICAqIGh0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNr
Lmg6CisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2s6Omhhc0N1ZSk6IE1vdmVkIGZyb20gSW5iYW5kVGV4dFRyYWNrLmNwcCwg
dXNlIG9wZXJhdG9yID09IGluc3RlYWQgb2YgaW5saW5lCisgICAgICAgICAgICBjb21wYXJpc29u
IHNvIGRlcml2ZWQgVGV4dFRyYWNrQ3VlcyBjYW4gYmUgY29tcGFyZWQuCisgICAgICAgICogaHRt
bC90cmFjay9UZXh0VHJhY2suaDoKKworICAgICAgICAqIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3Vl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUJveDo6YXBwbHlDU1NQcm9wZXJ0
aWVzKTogSW50ZXJmYWNlIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
VGV4dFRyYWNrQ3VlKTogRG9uJ3QgY3JlYXRlIHRoZSBkaXNwbGF5IHRyZWUgaW4gdGhlIGNvbnN0
cnVjdG9yLCBpdCBtYXkKKyAgICAgICAgICAgIG5ldmVyIGJlIG5lZWRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlRleHRUcmFja0N1ZTo6Y3JlYXRlRGlzcGxheVRyZWUpOiBOZXcsIGNyZWF0ZSB0aGUg
ZGlzcGxheSB0cmVlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpkaXNwbGF5VHJl
ZUludGVybmFsKTogRGlzcGxheSB0cmVlIGFjY2Vzc29yLCBhbGxvd3MgaXQgdG8gYmUgY3JlYXRl
ZCBsYXppbHkuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWU6OnNldEFsaWduKTogQWxp
Z25tZW50IC0+IEN1ZUFsaWdubWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6
c2V0SXNBY3RpdmUpOiBVc2UgZGlzcGxheVRyZWVJbnRlcm5hbCgpLgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXREaXNwbGF5VHJlZSk6IFVzZSBkaXNwbGF5VHJlZUludGVybmFs
KCksIHBhc3MgdmlkZW8gc2l6ZSB0byBhcHBseUNTU1Byb3BlcnRpZXMuCisgICAgICAgIChXZWJD
b3JlOjpUZXh0VHJhY2tDdWU6OnJlbW92ZURpc3BsYXlUcmVlKTogVXNlIGRpc3BsYXlUcmVlSW50
ZXJuYWwoKS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PSk6IE5l
dy4KKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFRyYWNrQ3VlOjpnZXRBbGlnbm1lbnQpOiBBbGlnbm1lbnQgLT4gQ3VlQWxpZ25tZW50
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpvcGVyYXRvciE9KTogTmV3LgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlOjpjdWVUeXBlKTogTmV3LCBjdWUgdHlwZSBpZGVu
dGlmaWVkIG5lZWRlZCBieSBvcGVyYXRvcj09LgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNr
Q3VlOjpvd25lckRvY3VtZW50KTogTmV3LgorCisgICAgICAgICogaHRtbC90cmFjay9UZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVH
ZW5lcmljQm94OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJp
Y0JveDo6VGV4dFRyYWNrQ3VlR2VuZXJpY0JveCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJh
Y2tDdWVHZW5lcmljQm94OjphcHBseUNTU1Byb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
OlRleHRUcmFja0N1ZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpj
cmVhdGVEaXNwbGF5VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmlj
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6flRleHRUcmFja0N1ZUdl
bmVyaWMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6YmFzZUZvbnRT
aXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1
ZUdlbmVyaWM6OnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hlaWdodCk6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0VHJhY2tDdWVHZW5lcmljOjpmb250U2l6ZU11bHRpcGxpZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6c2V0Rm9udFNpemVNdWx0aXBsaWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OmZvbnROYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6OnNldEZvbnROYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRUcmFja0N1ZUdlbmVyaWM6Om9wZXJhdG9yIT0pOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFRyYWNrQ3VlR2VuZXJpYzo6Y3VlVHlwZSk6CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vz
c0N1ZUF0dHJpYnV0ZXMpOiBDb3B5IGN1ZSBhdHRyaWJ1dGVzIGludG8gR2VuZXJpY0N1ZURhdGEK
KyAgICAgICAgICAgIHN0cnVjdCBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb252ZXJ0IHRvIFdlYlZU
VCBzZXR0aW5ncyBzdHJpbmcuIFByb2Nlc3MgZm9udCBzaXplLGZvbnQgYmFzZQorICAgICAgICAg
ICAgc2l6ZSwgZm9udCBuYW1lLCBhbmQgdmVydGljYWwgbGF5b3V0IGF0dHJpYnV0ZXMsCisgICAg
ICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpwcm9jZXNzQ3VlKTogQ3Jl
YXRlIHNlcGFyYXRlIGN1ZXMgZm9yIGVhY2ggYXR0cmlidXRlZAorICAgICAgICAgICAgc3RyaW5n
IGluIHRoZSBhcnJheSBiZWNhdXNlIGVhY2ggb25lIGNhbiBiZSBhdCBhIGRpZmZlcmVudCBzY3Jl
ZW4gbG9jYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZG
OjpyZXNldEN1ZVZhbHVlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaDoKKyAgICAgICAgKEluYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYpOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQpOiBSZXNldCBhbnkg
cGFydGlhbGx5IGFjY3VtdWxhdGVkIGN1ZXMKKyAgICAgICAgICAgIGRlbGl2ZXJlZCBzaW5jZSB0
aGUgc2VlayB3YXMgc3RhcnRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUFWRm91bmRhdGlvbjo6YWRkR2VuZXJpY0N1ZSk6IFJlbmFtZWQgZnJvbSBmbHVzaEN1cnJlbnRD
dWUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVy
UHJpdmF0ZUFWRm91bmRhdGlvbi5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQy5tbToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OmNyZWF0
ZUFWUGxheWVyKTogV2hpdGVzcGFjZSBjbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6Y3JlYXRlQVZQbGF5ZXJJdGVtKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjp0
cmFja3NDaGFuZ2VkKTogVGVsbCBsZWdpYmxlIG91dHB1dCB0byBkZWxpdmVyIGN1ZXMKKyAgICAg
ICAgICAgIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgc3R5bGluZyBuZWVkZWQgYnkgdGhlIGludGVy
bmFsIHJlbmRlcmVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uT2JqQzo6cHJvY2Vzc1RleHRUcmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uT2JqQzo6c2V0Q3VycmVudFRyYWNrKTogRG8gbm90aGlu
ZyBpZiBhc2tlZCB0byBjaGFuZ2UKKyAgICAgICAgICAgIHRvIHRoZSB0cmFjayB0aGF0IGlzIGFs
cmVhZHkgY3VycmVudC4KKyAgICAgICAgKC1bV2ViQ29yZUFWRk1vdmllT2JzZXJ2ZXIgbGVnaWJs
ZU91dHB1dDpkaWRPdXRwdXRBdHRyaWJ1dGVkU3RyaW5nczpuYXRpdmVTYW1wbGVCdWZmZXJzOmZv
ckl0ZW1UaW1lOl0pOgorICAgICAgICAgICAgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNs
aWVudCBjYWxsYmFjayBpc24ndCBOVUxMLgorCiAyMDEzLTAxLTIxICBWbGFkaXNsYXYgS2F6bmFj
aGVldiAgPGthem5hY2hlZXZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtJbnNwZWN0b3JdIExh
eW91dCBFbGVtZW50cyBwYW5lbCBpbiBhIHNpbmdsZSBjb2x1bW4gd2hlbiBkb2NrZWQgcmlnaHQu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1ODEsNiArMTU4MSw3IEBA
IHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRyYWNrLmNw
cAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlLmNwcAorICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2VuZXJpYy5jcHAKICAgICBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0
LmNwcAogICAgIGh0bWwvdHJhY2svVHJhY2tCYXNlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zNjcyLDYgKzM2NzIsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmggXAog
CVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBcCisJU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2tDdWVHZW5lcmljLmggXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlTGlzdC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlTGlzdC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3Bw
IFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTkxNSw2ICsxOTE1LDcgQEAgSEVBREVSUyAr
PSBcCiAgICAgaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5oIFwKICAgICBodG1sL3RyYWNr
L1RleHRUcmFjay5oIFwKICAgICBodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oIFwKKyAgICBodG1s
L3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaCBcCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2tD
dWVMaXN0LmggXAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oIFwKICAgICBodG1sL3Ry
YWNrL1RyYWNrQmFzZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMzQ1Nyw2
ICszNDU3LDggQEAKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFjay5oJywKICAgICAg
ICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZS5jcHAnLAogICAgICAgICAgICAgJ2h0bWwv
dHJhY2svVGV4dFRyYWNrQ3VlLmgnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNr
Q3VlR2VuZXJpYy5jcHAnLAorICAgICAgICAgICAgJ2h0bWwvdHJhY2svVGV4dFRyYWNrQ3VlR2Vu
ZXJpYy5oJywKICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuY3BwJywK
ICAgICAgICAgICAgICdodG1sL3RyYWNrL1RleHRUcmFja0N1ZUxpc3QuaCcsCiAgICAgICAgICAg
ICAnaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gMTQwMzM0KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTY1MjY1LDYgKzY1MjY1LDE0IEBACiAJCQkJCT4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUK
KwkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUdlbmVyaWMuY3Bw
IgorCQkJCQk+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aHRtbFx0cmFja1xUZXh0VHJhY2tDdWVHZW5lcmljLmgiCisJCQkJCT4KKwkJCQk8L0ZpbGU+CisJ
CQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxodG1sXHRyYWNrXFRleHRUcmFja0N1ZUxp
c3QuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQwMzM0KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsNiArMTA4LDggQEAKIAkJMDcwNzU2REYxNDIzOUI0RTAwNDE0MTYxIC8q
IEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwNzA3NTZEOTE0MjM5QjRDMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVM
aXN0LmNwcCAqLzsgfTsKIAkJMDcwNzU2RTAxNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNr
Q3VlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5oICovOyB9Owog
CQkwNzA5RkM0RTEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNsaWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcwOUZDNEQxMDI1REVF
MzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLzsgfTsKKwkJMDcxQTlFQzIxNjhG
QkM0MzAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzAxNjhGQjU2QzAwMjYyOUY5IC8q
IFRleHRUcmFja0N1ZUdlbmVyaWMuY3BwICovOyB9OworCQkwNzFBOUVDMzE2OEZCQzU1MDAyNjI5
RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDcxQTlFQzExNjhGQjU2QzAwMjYyOUY5IC8qIFRleHRUcmFja0N1
ZUdlbmVyaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDcyMEIwOUUxNEQz
MzIzNTAwNjQyOTU1IC8qIEdlbmVyaWNFdmVudFF1ZXVlLmNwcCAqLzsgfTsKIAkJMDcyMEIwQTAx
NEQzMzIzNTAwNjQyOTU2IC8qIEdlc3R1cmVFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTYgLyogR2Vz
dHVyZUV2ZW50LmNwcCAqLzsgfTsKIAkJMDcyMEIwQTExNEQzMzIzNTAwNjQyOTU1IC8qIEdlbmVy
aWNFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwNzIwQjA5RjE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzMwMyw2ICs3
MzA1LDggQEAKIAkJMDcwNzU2REExNDIzOUI0RTAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlz
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1RleHRUcmFja0N1ZUxpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDcwOUZDNEQxMDI1REVFMzAwNTlDREJB
IC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQWNjZXNzaWJpbGl0eVNsaWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
NzBERDhGNTBGMDE4NjgwMDA3MjdERUIgLyogbWVkaWFDb250cm9scy5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gbWVkaWFDb250cm9scy5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRUcmFja0N1ZUdlbmVyaWMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5
RjkgLyogVGV4dFRyYWNrQ3VlR2VuZXJpYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0VHJhY2tDdWVHZW5lcmljLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTA3MjBCMDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBH
ZW5lcmljRXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5l
cmljRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0
RDMzMjM1MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xOTc0NCw2ICsxOTc0OCw4IEBACiAJCQkJOTc1OUU5MzgxNEVGMUNGODAwMjZBMkRE
IC8qIFRleHRUcmFja0N1ZS5jcHAgKi8sCiAJCQkJOTc1OUU5MzkxNEVGMUNGODAwMjZBMkREIC8q
IFRleHRUcmFja0N1ZS5oICovLAogCQkJCTk3NTlFOTNBMTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0
VHJhY2tDdWUuaWRsICovLAorCQkJCTA3MUE5RUMwMTY4RkI1NkMwMDI2MjlGOSAvKiBUZXh0VHJh
Y2tDdWVHZW5lcmljLmNwcCAqLywKKwkJCQkwNzFBOUVDMTE2OEZCNTZDMDAyNjI5RjkgLyogVGV4
dFRyYWNrQ3VlR2VuZXJpYy5oICovLAogCQkJCTk3NTlFOTNCMTRFRjFDRjgwMDI2QTJERCAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmNwcCAqLywKIAkJCQk5NzU5RTkzQzE0RUYxQ0Y4MDAyNkEyREQgLyog
VGV4dFRyYWNrQ3VlTGlzdC5oICovLAogCQkJCTk3NTlFOTNEMTRFRjFDRjgwMDI2QTJERCAvKiBU
ZXh0VHJhY2tDdWVMaXN0LmlkbCAqLywKQEAgLTI2MDI3LDYgKzI2MDMzLDcgQEAKIAkJCQlCMkMz
REE0QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTc1OUU5NDAxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFjay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc1OUU5NDMxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFja0N1ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMDcxQTlFQzMxNjhGQkM1NTAwMjYyOUY5IC8qIFRleHRUcmFja0N1ZUdlbmVyaWMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3NTlFOTQ2MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJh
Y2tDdWVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzY5NzA4NzE0NjNBRDg3MDBGNTAyQ0Yg
LyogVGV4dFRyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjFBRDRFNzQxM0ExMkE0NjAw
ODQ2QjI3IC8qIFRleHRUcmFja0xvYWRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTIxMSw2ICsy
OTIxOCw3IEBACiAJCQkJQjJDM0RBNEEwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTc1OUU5M0YxNEVGMUNGODAwMjZBMkREIC8qIFRleHRUcmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzU5RTk0MjE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4
dFRyYWNrQ3VlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTA3MUE5RUMyMTY4RkJDNDMwMDI2MjlG
OSAvKiBUZXh0VHJhY2tDdWVHZW5lcmljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3NTlFOTQ1
MTRFRjFDRjgwMDI2QTJERCAvKiBUZXh0VHJhY2tDdWVMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTA3Njk3MDg2MTQ2M0FEODcwMEY1MDJDRiAvKiBUZXh0VHJhY2tMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIxQUQ0RTczMTNBMTJBNDYwMDg0NkIyNyAvKiBUZXh0VHJhY2tMb2FkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4MTksNiArMzgxOSwxMSBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIoCiAKICAgICBtX3BlbmRpbmdMb2Fk
RmxhZ3MgJj0gfmZsYWdzOwogICAgIG1fbG9hZFN0YXRlID0gV2FpdGluZ0ZvclNvdXJjZTsKKwor
I2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBpZiAobV90ZXh0VHJhY2tzKQorICAgICAgICBj
b25maWd1cmVUZXh0VHJhY2tEaXNwbGF5KCk7CisjZW5kaWYKIH0KIAogYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpjYW5TdXNwZW5kKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMwNCw4ICsxMzA0LDcgQEAgdm9pZCBNZWRpYUNvbnRyb2xUZXh0
VHJhY2tDb250YWluZXJFbGVtZQogICAgICAgICBpZiAoIWN1ZS0+dHJhY2soKSB8fCAhY3VlLT50
cmFjaygpLT5pc1JlbmRlcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBS
ZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5Qm94ID0gY3VlLT5nZXREaXNwbGF5VHJlZSgp
OwotCisgICAgICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3BsYXlCb3ggPSBjdWUtPmdl
dERpc3BsYXlUcmVlKG1fdmlkZW9EaXNwbGF5U2l6ZS5zaXplKCkpOwogICAgICAgICBpZiAoZGlz
cGxheUJveC0+aGFzQ2hpbGROb2RlcygpICYmICFjb250YWlucyhzdGF0aWNfY2FzdDxOb2RlKj4o
ZGlzcGxheUJveC5nZXQoKSkpKQogICAgICAgICAgICAgLy8gTm90ZTogdGhlIGRpc3BsYXkgdHJl
ZSBvZiBhIGN1ZSBpcyByZW1vdmVkIHdoZW4gdGhlIGFjdGl2ZSBmbGFnIG9mIHRoZSBjdWUgaXMg
dW5zZXQuCiAgICAgICAgICAgICBtX2N1ZUNvbnRhaW5lci0+YXBwZW5kQ2hpbGQoZGlzcGxheUJv
eCwgQVNTRVJUX05PX0VYQ0VQVElPTiwgZmFsc2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmNwcAkocmV2aXNpb24gMTQwMzM0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw5ICszMiwxMSBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZl
bnQuaCIKICNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCisjaW5jbHVkZSAiVGV4dFRyYWNrQ3Vl
R2VuZXJpYy5oIgogI2luY2x1ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKLQorI2luY2x1ZGUgPG1h
dGguaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtOTgsNzQgKzEwMCw1NSBAQCBzaXplX3QgSW5iYW5kVGV4dFRyYWNrOjppbmJhbmRUcmFj
a0luZGV4CiAgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dFRyYWNrSW5kZXgoKTsKIH0KIAotdm9p
ZCBJbmJhbmRUZXh0VHJhY2s6OmFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiB0cmFja1By
aXZhdGUsIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBpZCwgY29uc3Qg
U3RyaW5nJiBjb250ZW50LCBjb25zdCBTdHJpbmcmIHNldHRpbmdzKQordm9pZCBJbmJhbmRUZXh0
VHJhY2s6OmFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSogdHJhY2tQcml2YXRl
LCBHZW5lcmljQ3VlRGF0YSogY3VlRGF0YSkKIHsKICAgICBVTlVTRURfUEFSQU0odHJhY2tQcml2
YXRlKTsKICAgICBBU1NFUlQodHJhY2tQcml2YXRlID09IG1fcHJpdmF0ZSk7CiAKLSAgICBSZWZQ
dHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBUZXh0VHJhY2tDdWU6OmNyZWF0ZShzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCksIHN0YXJ0LCBlbmQsIGNvbnRlbnQpOwotICAgIGN1ZS0+c2V0SWQoaWQpOwot
ICAgIGN1ZS0+c2V0Q3VlU2V0dGluZ3Moc2V0dGluZ3MpOwotICAgIGN1ZS0+c2V0VHJhY2sodGhp
cyk7CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZUdlbmVyaWM+IGN1ZSA9IFRleHRUcmFja0N1ZUdl
bmVyaWM6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGN1ZURhdGEtPnN0YXJ0VGlt
ZSgpLCBjdWVEYXRhLT5lbmRUaW1lKCksIGN1ZURhdGEtPmNvbnRlbnQoKSk7CiAKLSAgICBpZiAo
IW1fY3VlcykKLSAgICAgICAgbV9jdWVzID0gVGV4dFRyYWNrQ3VlTGlzdDo6Y3JlYXRlKCk7Ci0g
ICAgbV9jdWVzLT5hZGQoY3VlKTsKLSAgICAKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIGNs
aWVudCgpLT50ZXh0VHJhY2tBZGRDdWVzKHRoaXMsIG1fY3Vlcy5nZXQoKSk7CisgICAgY3VlLT5z
ZXRJZChjdWVEYXRhLT5pZCgpKTsKKyAgICBjdWUtPnNldEJhc2VGb250U2l6ZVJlbGF0aXZlVG9W
aWRlb0hlaWdodChjdWVEYXRhLT5iYXNlRm9udFNpemUoKSk7CisgICAgY3VlLT5zZXRGb250U2l6
ZU11bHRpcGxpZXIoY3VlRGF0YS0+cmVsYXRpdmVGb250U2l6ZSgpKTsKKyAgICBjdWUtPnNldEZv
bnROYW1lKGN1ZURhdGEtPmZvbnROYW1lKCkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAg
ICBpZiAoY3VlRGF0YS0+cG9zaXRpb24oKSA+IDApCisgICAgICAgIGN1ZS0+c2V0UG9zaXRpb24o
bHJvdW5kKGN1ZURhdGEtPnBvc2l0aW9uKCkpLCBlYyk7CisgICAgaWYgKGN1ZURhdGEtPmxpbmUo
KSA+IDApCisgICAgICAgIGN1ZS0+c2V0TGluZShscm91bmQoY3VlRGF0YS0+bGluZSgpKSwgZWMp
OworICAgIGlmIChjdWVEYXRhLT5zaXplKCkgPiAwKQorICAgICAgICBjdWUtPnNldFNpemUobHJv
dW5kKGN1ZURhdGEtPnNpemUoKSksIGVjKTsKKyAgICBpZiAoY3VlRGF0YS0+YWxpZ24oKSA9PSBH
ZW5lcmljQ3VlRGF0YTo6U3RhcnQpCisgICAgICAgIGN1ZS0+c2V0QWxpZ24oQVNDSUlMaXRlcmFs
KCJzdGFydCIpLCBlYyk7CisgICAgZWxzZSBpZiAoY3VlRGF0YS0+YWxpZ24oKSA9PSBHZW5lcmlj
Q3VlRGF0YTo6TWlkZGxlKQorICAgICAgICBjdWUtPnNldEFsaWduKEFTQ0lJTGl0ZXJhbCgibWlk
ZGxlIiksIGVjKTsKKyAgICBlbHNlIGlmIChjdWVEYXRhLT5hbGlnbigpID09IEdlbmVyaWNDdWVE
YXRhOjpFbmQpCisgICAgICAgIGN1ZS0+c2V0QWxpZ24oQVNDSUlMaXRlcmFsKCJlbmQiKSwgZWMp
OworICAgIGN1ZS0+c2V0U25hcFRvTGluZXMoZmFsc2UpOworCisgICAgaWYgKGhhc0N1ZShjdWUu
Z2V0KCkpKSB7CisgICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFjazo6YWRkR2VuZXJp
Y0N1ZSBpZ25vcmluZyBhbHJlYWR5IGFkZGVkIGN1ZTogc3RhcnQ9JS4yZiwgZW5kPSUuMmYsIGNv
bnRlbnQ9XCIlc1wiXG4iLAorICAgICAgICAgICAgY3VlRGF0YS0+c3RhcnRUaW1lKCksIGN1ZURh
dGEtPmVuZFRpbWUoKSwgY3VlRGF0YS0+Y29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYWRkQ3VlKGN1ZSk7CiB9CiAKLWJvb2wgSW5iYW5kVGV4
dFRyYWNrOjpoYXNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSBzdGFydFRpbWUs
IGRvdWJsZSBlbmRUaW1lLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCit2b2lkIEluYmFuZFRleHRUcmFjazo6YWRkV2ViVlRU
Q3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqIHRyYWNrUHJpdmF0ZSwgZG91YmxlIHN0YXJ0LCBk
b3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGNvbnN0
IFN0cmluZyYgc2V0dGluZ3MpCiB7CisgICAgVU5VU0VEX1BBUkFNKHRyYWNrUHJpdmF0ZSk7Cisg
ICAgQVNTRVJUKHRyYWNrUHJpdmF0ZSA9PSBtX3ByaXZhdGUpOwogCi0gICAgaWYgKHN0YXJ0VGlt
ZSA8IDAgfHwgZW5kVGltZSA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
Y3VlcygpLT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2l6ZV90IHNl
YXJjaFN0YXJ0ID0gMDsKLSAgICBzaXplX3Qgc2VhcmNoRW5kID0gY3VlcygpLT5sZW5ndGgoKTsK
LQotICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIEFTU0VSVChzZWFyY2hTdGFydCA8PSBjdWVzKCkt
Pmxlbmd0aCgpKTsKLSAgICAgICAgQVNTRVJUKHNlYXJjaEVuZCA8PSBjdWVzKCktPmxlbmd0aCgp
KTsKLSAgICAgICAgCi0gICAgICAgIFRleHRUcmFja0N1ZSogY3VlOwotICAgICAgICAKLSAgICAg
ICAgLy8gQ3VlcyBpbiB0aGUgVGV4dFRyYWNrQ3VlTGlzdCBhcmUgbWFpbnRhaW5lZCBpbiBzdGFy
dCB0aW1lIG9yZGVyLgotICAgICAgICBpZiAoc2VhcmNoU3RhcnQgPT0gc2VhcmNoRW5kKSB7Ci0g
ICAgICAgICAgICBpZiAoIXNlYXJjaFN0YXJ0KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgY3VlID0gY3VlcygpLT5pdGVtKHNlYXJjaFN0
YXJ0IC0gMSk7Ci0gICAgICAgICAgICBpZiAoIWN1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT5zdGFydFRpbWUoKSAhPSBzdGFydFRpbWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+ZW5kVGlt
ZSgpICE9IGVuZFRpbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAg
ICAgaWYgKGN1ZS0+dGV4dCgpICE9IGNvbnRlbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgaWYgKGN1ZS0+Y3VlU2V0dGluZ3MoKSAhPSBzZXR0aW5ncykKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY3VlLT5pZCgpICE9
IGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBp
bmRleCA9IChzZWFyY2hTdGFydCArIHNlYXJjaEVuZCkgLyAyOwotICAgICAgICBjdWUgPSBjdWVz
KCktPml0ZW0oaW5kZXgpOwotICAgICAgICBpZiAoc3RhcnRUaW1lIDwgY3VlLT5zdGFydFRpbWUo
KSB8fCAoc3RhcnRUaW1lID09IGN1ZS0+c3RhcnRUaW1lKCkgJiYgZW5kVGltZSA+IGN1ZS0+ZW5k
VGltZSgpKSkKLSAgICAgICAgICAgIHNlYXJjaEVuZCA9IGluZGV4OwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzZWFyY2hTdGFydCA9IGluZGV4ICsgMTsKLSAgICB9CisgICAgUmVmUHRyPFRl
eHRUcmFja0N1ZT4gY3VlID0gVGV4dFRyYWNrQ3VlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLCBzdGFydCwgZW5kLCBjb250ZW50KTsKKyAgICBjdWUtPnNldElkKGlkKTsKKyAgICBj
dWUtPnNldEN1ZVNldHRpbmdzKHNldHRpbmdzKTsKICAgICAKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0N1ZShjdWUuZ2V0KCkpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhZGRDdWUoY3VlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5o
CShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRl
eHRUcmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MSw4ICs1MSw4IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSW5iYW5kVGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBUZXh0VHJhY2tD
bGllbnQqLCBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+KTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSwgZG91YmxlLCBj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBPVkVSUklERTsKLSAg
ICB2aXJ0dWFsIGJvb2wgaGFzQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUsIGRv
dWJsZSwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZSosIEdlbmVyaWNDdWVEYXRhKikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFkZFdlYlZU
VEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlLCBkb3VibGUsIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIE9WRVJSSURFOwogCiAgICAgUmVmUHRy
PEluYmFuZFRleHRUcmFja1ByaXZhdGU+IG1fcHJpdmF0ZTsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2suY3BwCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
QEAgLTMzOSw2ICszMzksNjQgQEAgaW50IFRleHRUcmFjazo6dHJhY2tJbmRleFJlbGF0aXZlVG9S
ZW5kZQogICAgIHJldHVybiBtX3JlbmRlcmVkVHJhY2tJbmRleDsKIH0KIAorYm9vbCBUZXh0VHJh
Y2s6Omhhc0N1ZShUZXh0VHJhY2tDdWUqIGN1ZSkKK3sKKyAgICBpZiAoY3VlLT5zdGFydFRpbWUo
KSA8IDAgfHwgY3VlLT5lbmRUaW1lKCkgPCAwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKCFtX2N1ZXMgfHwgIW1fY3Vlcy0+bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBzaXplX3Qgc2VhcmNoU3RhcnQgPSAwOworICAgIHNpemVfdCBzZWFy
Y2hFbmQgPSBtX2N1ZXMtPmxlbmd0aCgpOworICAgIAorICAgIHdoaWxlICgxKSB7CisgICAgICAg
IEFTU0VSVChzZWFyY2hTdGFydCA8PSBtX2N1ZXMtPmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJU
KHNlYXJjaEVuZCA8PSBtX2N1ZXMtPmxlbmd0aCgpKTsKKyAgICAgICAgCisgICAgICAgIFRleHRU
cmFja0N1ZSogZXhpc3RpbmdDdWU7CisgICAgICAgIAorICAgICAgICAvLyBDdWVzIGluIHRoZSBU
ZXh0VHJhY2tDdWVMaXN0IGFyZSBtYWludGFpbmVkIGluIHN0YXJ0IHRpbWUgb3JkZXIuCisgICAg
ICAgIGlmIChzZWFyY2hTdGFydCA9PSBzZWFyY2hFbmQpIHsKKyAgICAgICAgICAgIGlmICghc2Vh
cmNoU3RhcnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAv
LyBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGN1ZSB3aXRoIHRoZSBzYW1lIHN0YXJ0IHRpbWUs
IGJhY2sgdXAgdG8gZmlyc3Qgb25lIHNvIHdlCisgICAgICAgICAgICAvLyBjb25zaWRlciBhbGwg
b2YgdGhlbS4KKyAgICAgICAgICAgIHdoaWxlIChzZWFyY2hTdGFydCA+PSAyICYmIGN1ZS0+c3Rh
cnRUaW1lKCkgPT0gbV9jdWVzLT5pdGVtKHNlYXJjaFN0YXJ0IC0gMiktPnN0YXJ0VGltZSgpKQor
ICAgICAgICAgICAgICAgIC0tc2VhcmNoU3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJvb2wgZmlyc3RDb21wYXJlID0gdHJ1ZTsKKyAgICAgICAgICAgIHdoaWxlICgxKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFmaXJzdENvbXBhcmUpCisgICAgICAgICAgICAgICAgICAgICsrc2Vh
cmNoU3RhcnQ7CisgICAgICAgICAgICAgICAgZmlyc3RDb21wYXJlID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaWYgKHNlYXJjaFN0YXJ0ID4gbV9jdWVzLT5sZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgZXhpc3RpbmdDdWUgPSBt
X2N1ZXMtPml0ZW0oc2VhcmNoU3RhcnQgLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4aXN0
aW5nQ3VlIHx8IGN1ZS0+c3RhcnRUaW1lKCkgPiBleGlzdGluZ0N1ZS0+c3RhcnRUaW1lKCkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgIGlmICgq
ZXhpc3RpbmdDdWUgIT0gKmN1ZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNpemVfdCBpbmRleCA9IChzZWFyY2hTdGFy
dCArIHNlYXJjaEVuZCkgLyAyOworICAgICAgICBleGlzdGluZ0N1ZSA9IG1fY3Vlcy0+aXRlbShp
bmRleCk7CisgICAgICAgIGlmIChjdWUtPnN0YXJ0VGltZSgpIDwgZXhpc3RpbmdDdWUtPnN0YXJ0
VGltZSgpIHx8IChjdWUtPnN0YXJ0VGltZSgpID09IGV4aXN0aW5nQ3VlLT5zdGFydFRpbWUoKSAm
JiBjdWUtPmVuZFRpbWUoKSA+IGV4aXN0aW5nQ3VlLT5lbmRUaW1lKCkpKQorICAgICAgICAgICAg
c2VhcmNoRW5kID0gaW5kZXg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlYXJjaFN0YXJ0
ID0gaW5kZXggKyAxOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHJldmlzaW9uIDE0MDMzNCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC05OSw2ICs5OSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQ3VlKFBh
c3NSZWZQdHI8VGV4dFRyYWNrQ3VlPik7CiAgICAgdm9pZCByZW1vdmVDdWUoVGV4dFRyYWNrQ3Vl
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIGJvb2wgaGFzQ3VlKFRleHRUcmFja0N1ZSopOwogCiAg
ICAgdm9pZCBjdWVXaWxsQ2hhbmdlKFRleHRUcmFja0N1ZSopOwogICAgIHZvaWQgY3VlRGlkQ2hh
bmdlKFRleHRUcmFja0N1ZSopOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0
VHJhY2tDdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmNwcAkocmV2aXNpb24gMTQwMzM0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tDdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMTA3
LDcgKzEwNyw3IEBAIFRleHRUcmFja0N1ZSogVGV4dFRyYWNrQ3VlQm94OjpnZXRDdWUoKSAKICAg
ICByZXR1cm4gbV9jdWU7CiB9CiAKLXZvaWQgVGV4dFRyYWNrQ3VlQm94OjphcHBseUNTU1Byb3Bl
cnRpZXMoKQordm9pZCBUZXh0VHJhY2tDdWVCb3g6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJ
bnRTaXplJikKIHsKICAgICAvLyBGSVhNRTogQXBwbHkgYWxsIHRoZSBpbml0aWFsIENTUyBwb3Np
dGlvbmluZyBwcm9wZXJ0aWVzLiBodHRwOi8vd2tiLnVnLzc5OTE2CiAKQEAgLTIxMCw3ICsyMTAs
NiBAQCBUZXh0VHJhY2tDdWU6OlRleHRUcmFja0N1ZShTY3JpcHRFeGVjdXRpCiAgICAgLCBtX3Nu
YXBUb0xpbmVzKHRydWUpCiAgICAgLCBtX2FsbERvY3VtZW50Tm9kZXMoSFRNTERpdkVsZW1lbnQ6
OmNyZWF0ZShzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpKSkKICAgICAsIG1fZGlzcGxh
eVRyZWVTaG91bGRDaGFuZ2UodHJ1ZSkKLSAgICAsIG1fZGlzcGxheVRyZWUoVGV4dFRyYWNrQ3Vl
Qm94OjpjcmVhdGUoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQpLCB0aGlzKSkKIHsKICAgICBBU1NFUlQobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0Rv
Y3VtZW50KCkpOwogCkBAIC0yMjgsNiArMjI3LDE4IEBAIFRleHRUcmFja0N1ZTo6flRleHRUcmFj
a0N1ZSgpCiB7CiB9CiAKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0VHJhY2tDdWU6
OmNyZWF0ZURpc3BsYXlUcmVlKCkKK3sKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlQm94OjpjcmVh
dGUob3duZXJEb2N1bWVudCgpLCB0aGlzKTsKK30KKworUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVC
b3g+IFRleHRUcmFja0N1ZTo6ZGlzcGxheVRyZWVJbnRlcm5hbCgpCit7CisgICAgaWYgKCFtX2Rp
c3BsYXlUcmVlKQorICAgICAgICBtX2Rpc3BsYXlUcmVlID0gY3JlYXRlRGlzcGxheVRyZWUoKTsK
KyAgICByZXR1cm4gbV9kaXNwbGF5VHJlZTsKK30KKwogdm9pZCBUZXh0VHJhY2tDdWU6OmN1ZVdp
bGxDaGFuZ2UoKQogewogICAgIGlmIChtX3RyYWNrKQpAQCAtNDM4LDcgKzQ0OSw3IEBAIHZvaWQg
VGV4dFRyYWNrQ3VlOjpzZXRBbGlnbihjb25zdCBTdHJpbmcKICAgICAvLyBtYXRjaCBmb3IgdGhl
IG5ldyB2YWx1ZSwgaWYgYW55LiBJZiBub25lIG9mIHRoZSB2YWx1ZXMgbWF0Y2gsIHRoZW4gdGhl
IHVzZXIKICAgICAvLyBhZ2VudCBtdXN0IGluc3RlYWQgdGhyb3cgYSBTeW50YXhFcnJvciBleGNl
cHRpb24uCiAgICAgCi0gICAgQWxpZ25tZW50IGFsaWdubWVudCA9IG1fY3VlQWxpZ25tZW50Owor
ICAgIEN1ZUFsaWdubWVudCBhbGlnbm1lbnQgPSBtX2N1ZUFsaWdubWVudDsKICAgICBpZiAodmFs
dWUgPT0gc3RhcnRLZXl3b3JkKCkpCiAgICAgICAgIGFsaWdubWVudCA9IFN0YXJ0OwogICAgIGVs
c2UgaWYgKHZhbHVlID09IG1pZGRsZUtleXdvcmQoKSkKQEAgLTU0NSw4ICs1NTYsNyBAQCB2b2lk
IFRleHRUcmFja0N1ZTo6c2V0SXNBY3RpdmUoYm9vbCBhY3RpCiAKICAgICBpZiAoIWFjdGl2ZSkg
ewogICAgICAgICAvLyBSZW1vdmUgdGhlIGRpc3BsYXkgdHJlZSBhcyBzb29uIGFzIHRoZSBjdWUg
YmVjb21lcyBpbmFjdGl2ZS4KLSAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICAgICAgbV9k
aXNwbGF5VHJlZS0+cmVtb3ZlKGVjKTsKKyAgICAgICAgZGlzcGxheVRyZWVJbnRlcm5hbCgpLT5y
ZW1vdmUoQVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgfQogfQogCkBAIC03MjIsMTAgKzczMiwx
MSBAQCB2b2lkIFRleHRUcmFja0N1ZTo6dXBkYXRlRGlzcGxheVRyZWUoZmxvCiAgICAgbV9hbGxE
b2N1bWVudE5vZGVzLT5hcHBlbmRDaGlsZChyZWZlcmVuY2VUcmVlKTsKIH0KIAotUGFzc1JlZlB0
cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoKQorUGFzc1Jl
ZlB0cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1ZTo6Z2V0RGlzcGxheVRyZWUoY29uc3Qg
SW50U2l6ZSYgdmlkZW9TaXplKQogeworICAgIFJlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGRpc3Bs
YXlUcmVlID0gZGlzcGxheVRyZWVJbnRlcm5hbCgpOwogICAgIGlmICghbV9kaXNwbGF5VHJlZVNo
b3VsZENoYW5nZSB8fCAhdHJhY2soKS0+aXNSZW5kZXJlZCgpKQotICAgICAgICByZXR1cm4gbV9k
aXNwbGF5VHJlZTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlUcmVlOwogCiAgICAgLy8gMTAuMSAt
IDEwLjEwCiAgICAgY2FsY3VsYXRlRGlzcGxheVBhcmFtZXRlcnMoKTsKQEAgLTczMyw3ICs3NDQs
NyBAQCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gVGV4dFRyYWNrQ3VlCiAgICAgLy8gMTAu
MTEuIEFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgQ1NTIHNwZWNpZmljYXRpb25zIHRvIG5vZGVzIHdp
dGhpbiB0aGUKICAgICAvLyBmb2xsb3dpbmcgY29uc3RyYWludHMsIHRodXMgb2J0YWluaW5nIGEg
c2V0IG9mIENTUyBib3hlcyBwb3NpdGlvbmVkCiAgICAgLy8gcmVsYXRpdmUgdG8gYW4gaW5pdGlh
bCBjb250YWluaW5nIGJsb2NrOgotICAgIG1fZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7
CisgICAgZGlzcGxheVRyZWUtPnJlbW92ZUNoaWxkcmVuKCk7CiAKICAgICAvLyBUaGUgZG9jdW1l
bnQgdHJlZSBpcyB0aGUgdHJlZSBvZiBXZWJWVFQgTm9kZSBPYmplY3RzIHJvb3RlZCBhdCBub2Rl
cy4KIApAQCAtNzQzLDcgKzc1NCw3IEBAIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBUZXh0
VHJhY2tDdWUKIAogICAgIC8vIE5vdGU6IFRoaXMgaXMgY29udGFpbmVkIGJ5IGRlZmF1bHQgaW4g
bV9hbGxEb2N1bWVudE5vZGVzLgogICAgIG1fYWxsRG9jdW1lbnROb2Rlcy0+c2V0UHNldWRvKGFs
bE5vZGVzU2hhZG93UHNldWRvSWQoKSk7Ci0gICAgbV9kaXNwbGF5VHJlZS0+YXBwZW5kQ2hpbGQo
bV9hbGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBUSU9OLCB0cnVlKTsKKyAgICBkaXNw
bGF5VHJlZS0+YXBwZW5kQ2hpbGQobV9hbGxEb2N1bWVudE5vZGVzLCBBU1NFUlRfTk9fRVhDRVBU
SU9OLCB0cnVlKTsKIAogICAgIC8vIEZJWE1FKEJVRyA3OTkxNik6IFJ1bnMgb2YgY2hpbGRyZW4g
b2YgV2ViVlRUIFJ1YnkgT2JqZWN0cyB0aGF0IGFyZSBub3QKICAgICAvLyBXZWJWVFQgUnVieSBU
ZXh0IE9iamVjdHMgbXVzdCBiZSB3cmFwcGVkIGluIGFub255bW91cyBib3hlcyB3aG9zZQpAQCAt
NzU2LDE4ICs3NjcsMTggQEAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IFRleHRUcmFja0N1
ZQogICAgIC8vIGlzIG5vIGxpbmUgYnJlYWtpbmcgb3Bwb3J0dW5pdHkuIChUaHVzLCBub3JtYWxs
eSB0ZXh0IHdyYXBzIGFzIG5lZWRlZCwKICAgICAvLyBidXQgaWYgdGhlcmUgaXMgYSBwYXJ0aWN1
bGFybHkgbG9uZyB3b3JkLCBpdCBkb2VzIG5vdCBvdmVyZmxvdyBhcyBpdAogICAgIC8vIG5vcm1h
bGx5IHdvdWxkIGluIENTUywgaXQgaXMgaW5zdGVhZCBmb3JjaWJseSB3cmFwcGVkIGF0IHRoZSBi
b3gncyBlZGdlLikKLSAgICBtX2Rpc3BsYXlUcmVlLT5hcHBseUNTU1Byb3BlcnRpZXMoKTsKKyAg
ICBkaXNwbGF5VHJlZS0+YXBwbHlDU1NQcm9wZXJ0aWVzKHZpZGVvU2l6ZSk7CiAKICAgICBtX2Rp
c3BsYXlUcmVlU2hvdWxkQ2hhbmdlID0gZmFsc2U7CiAKICAgICAvLyAxMC4xNS4gTGV0IGN1ZSdz
IHRleHQgdHJhY2sgY3VlIGRpc3BsYXkgc3RhdGUgaGF2ZSB0aGUgQ1NTIGJveGVzIGluCiAgICAg
Ly8gYm94ZXMuCi0gICAgcmV0dXJuIG1fZGlzcGxheVRyZWU7CisgICAgcmV0dXJuIGRpc3BsYXlU
cmVlOwogfQogCiB2b2lkIFRleHRUcmFja0N1ZTo6cmVtb3ZlRGlzcGxheVRyZWUoKQogewotICAg
IG1fZGlzcGxheVRyZWUtPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICBkaXNwbGF5
VHJlZUludGVybmFsKCktPnJlbW92ZShBU1NFUlRfTk9fRVhDRVBUSU9OKTsKIH0KIAogc3RkOjpw
YWlyPGRvdWJsZSwgZG91YmxlPiBUZXh0VHJhY2tDdWU6OmdldFBvc2l0aW9uQ29vcmRpbmF0ZXMo
KSBjb25zdApAQCAtMTA2Niw2ICsxMDc3LDMzIEBAIEV2ZW50VGFyZ2V0RGF0YSogVGV4dFRyYWNr
Q3VlOjplbnN1cmVFdmUKICAgICByZXR1cm4gJm1fZXZlbnRUYXJnZXREYXRhOwogfQogCitib29s
IFRleHRUcmFja0N1ZTo6b3BlcmF0b3I9PShjb25zdCBUZXh0VHJhY2tDdWUmIGN1ZSkgY29uc3QK
K3sKKyAgICBpZiAoY3VlVHlwZSgpICE9IGN1ZS5jdWVUeXBlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGlmIChtX2VuZFRpbWUgIT0gY3VlLmVuZFRpbWUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX3N0YXJ0VGltZSAhPSBjdWUuc3RhcnRUaW1lKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jb250ZW50ICE9IGN1ZS50ZXh0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9zZXR0aW5ncyAhPSBjdWUuY3VlU2V0dGluZ3Mo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX2lkICE9IGN1ZS5pZCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fdGV4dFBvc2l0aW9uICE9IGN1ZS5wb3NpdGlv
bigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fbGluZVBvc2l0aW9uICE9IGN1
ZS5saW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jdWVTaXplICE9IGN1
ZS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYWxpZ24oKSAhPSBjdWUu
YWxpZ24oKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAt
NTcsMTEgKzU4LDExIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBUZXh0VHJhY2tDdWUqIGdldEN1
ZSgpIGNvbnN0OwotICAgIHZvaWQgYXBwbHlDU1NQcm9wZXJ0aWVzKCk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1NpemUpOwogCiAgICAg
c3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgdGV4dFRyYWNrQ3VlQm94U2hhZG93UHNldWRvSWQo
KTsKIAotcHJpdmF0ZToKK3Byb3RlY3RlZDoKICAgICBUZXh0VHJhY2tDdWVCb3goRG9jdW1lbnQq
LCBUZXh0VHJhY2tDdWUqKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKikgT1ZFUlJJREU7CkBAIC0xMjIsMTMgKzEy
MywxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTbmFwVG9MaW5lcyhib29sKTsKIAogICAgIGlu
dCBsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9saW5lUG9zaXRpb247IH0KLSAgICB2b2lkIHNldExp
bmUoaW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHNldExpbmUoaW50LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBpbnQgcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Rl
eHRQb3NpdGlvbjsgfQotICAgIHZvaWQgc2V0UG9zaXRpb24oaW50LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdmlydHVhbCB2b2lkIHNldFBvc2l0aW9uKGludCwgRXhjZXB0aW9uQ29kZSYpOwogCiAg
ICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2N1ZVNpemU7IH0KLSAgICB2b2lkIHNldFNp
emUoaW50LCBFeGNlcHRpb25Db2RlJik7CisgICAgdmlydHVhbCB2b2lkIHNldFNpemUoaW50LCBF
eGNlcHRpb25Db2RlJik7CiAKICAgICBjb25zdCBTdHJpbmcmIGFsaWduKCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRBbGlnbihjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CkBAIC0xNTEsNyAr
MTUyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNBY3RpdmUoKTsKICAgICB2b2lkIHNldElzQWN0
aXZlKGJvb2wpOwogCi0gICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlU
cmVlKCk7CisgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2tDdWVCb3g+IGdldERpc3BsYXlUcmVlKGNv
bnN0IEludFNpemUmIHZpZGVvU2l6ZSk7CiAgICAgdm9pZCB1cGRhdGVEaXNwbGF5VHJlZShmbG9h
dCk7CiAgICAgdm9pZCByZW1vdmVEaXNwbGF5VHJlZSgpOwogICAgIHZvaWQgbWFya0Z1dHVyZUFu
ZFBhc3ROb2RlcyhDb250YWluZXJOb2RlKiwgZG91YmxlLCBkb3VibGUpOwpAQCAtMTczLDYgKzE3
NCwyNSBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBXcml0aW5nRGlyZWN0aW9uIGdldFdyaXRpbmdE
aXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3dyaXRpbmdEaXJlY3Rpb247IH0KIAorICAgIGVu
dW0gQ3VlQWxpZ25tZW50IHsKKyAgICAgICAgU3RhcnQsCisgICAgICAgIE1pZGRsZSwKKyAgICAg
ICAgRW5kCisgICAgfTsKKyAgICBDdWVBbGlnbm1lbnQgZ2V0QWxpZ25tZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdWVBbGlnbm1lbnQ7IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRleHRUcmFja0N1ZSYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gY3VlKTsKKyAgICB9CisgICAgCisgICAgZW51bSBDdWVUeXBlIHsKKyAgICAgICAgR2Vu
ZXJpYywKKyAgICAgICAgV2ViVlRUCisgICAgfTsKKyAgICB2aXJ0dWFsIEN1ZVR5cGUgY3VlVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIFdlYlZUVDsgfQorCiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVO
VF9MSVNURU5FUihlbnRlcik7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihl
eGl0KTsKIApAQCAtMTgzLDkgKzIwMywxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBFdmVu
dFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRE
YXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKTsKIAotcHJpdmF0ZToKICAgICBUZXh0VHJhY2tD
dWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGRvdWJsZSBzdGFydCwgZG91YmxlIGVuZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50KTsKIAorICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOyB9
CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBjcmVhdGVEaXNwbGF5
VHJlZSgpOworICAgIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBkaXNwbGF5VHJlZUludGVy
bmFsKCk7CisKK3ByaXZhdGU6CiAgICAgc3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPiBnZXRQb3Np
dGlvbkNvb3JkaW5hdGVzKCkgY29uc3Q7CiAgICAgdm9pZCBwYXJzZVNldHRpbmdzKGNvbnN0IFN0
cmluZyYpOwogCkBAIC0yMTMsOCArMjM4LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRpbmdEaXJl
Y3Rpb24gbV93cml0aW5nRGlyZWN0aW9uOwogCi0gICAgZW51bSBBbGlnbm1lbnQgeyBTdGFydCwg
TWlkZGxlLCBFbmQgfTsKLSAgICBBbGlnbm1lbnQgbV9jdWVBbGlnbm1lbnQ7CisgICAgQ3VlQWxp
Z25tZW50IG1fY3VlQWxpZ25tZW50OwogCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1f
d2ViVlRUTm9kZVRyZWU7CiAgICAgVGV4dFRyYWNrKiBtX3RyYWNrOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIlRleHRUcmFja0N1
ZUdlbmVyaWMuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiSFRNTERpdkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQ2xpZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFRyYWNrQ3Vl
LmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRU
cmFja0N1ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFRleHRUcmFja0N1ZUdl
bmVyaWNCb3hFbGVtZW50IDogcHVibGljIFRleHRUcmFja0N1ZUJveCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQ+IGNyZWF0ZShE
b2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZUdlbmVyaWMqIGN1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgVGV4dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoZG9j
dW1lbnQsIGN1ZSkpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlDU1NQcm9w
ZXJ0aWVzKGNvbnN0IEludFNpemUmKSBPVkVSUklERTsKKyAgICAKK3ByaXZhdGU6CisgICAgVGV4
dFRyYWNrQ3VlR2VuZXJpY0JveEVsZW1lbnQoRG9jdW1lbnQqLCBUZXh0VHJhY2tDdWUqKTsKK307
CisKK1RleHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjpUZXh0VHJhY2tDdWVHZW5lcmljQm94
RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQsIFRleHRUcmFja0N1ZSogY3VlKQorICAgIDogVGV4
dFRyYWNrQ3VlQm94KGRvY3VtZW50LCBjdWUpCit7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlR2Vu
ZXJpY0JveEVsZW1lbnQ6OmFwcGx5Q1NTUHJvcGVydGllcyhjb25zdCBJbnRTaXplJiB2aWRlb1Np
emUpCit7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVBvc2l0aW9uLCBD
U1NWYWx1ZUFic29sdXRlKTsKKyAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5
VW5pY29kZUJpZGksIENTU1ZhbHVlV2Via2l0UGxhaW50ZXh0KTsKKyAgICAKKyAgICBUZXh0VHJh
Y2tDdWVHZW5lcmljKiBjdWUgPSBzdGF0aWNfY2FzdDxUZXh0VHJhY2tDdWVHZW5lcmljKj4oZ2V0
Q3VlKCkpOworCisgICAgaWYgKGN1ZS0+dXNlRGVmYXVsdFBvc2l0aW9uKCkpIHsKKyAgICAgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvdHRvbSwgIjAiKTsKKyAgICAgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgMS4wLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNl
dElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlMZWZ0LCBzdGF0aWNfY2FzdDxmbG9hdD4o
Y3VlLT5wb3NpdGlvbigpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKKyAg
ICAgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRvcCwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGN1ZS0+bGluZSgpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsK
KyAgICB9CisKKyAgICBmbG9hdCBzaXplID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGN1ZS0+Z2V0Q1NT
U2l6ZSgpKTsKKyAgICBpZiAoY3VlLT5nZXRXcml0aW5nRGlyZWN0aW9uKCkgPT0gVGV4dFRyYWNr
Q3VlOjpIb3Jpem9udGFsKSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJv
cGVydHlEaXJlY3Rpb24sIENTU1ZhbHVlTHRyKTsKKyAgICAgICAgc2V0SW5saW5lU3R5bGVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdpZHRoLCBzaXplLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNF
TlRBR0UpOworICAgICAgICBzZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5SGVpZ2h0
LCBDU1NWYWx1ZUF1dG8pOworICAgIH0gZWxzZSB7CisgICAgICAgIHNldElubGluZVN0eWxlUHJv
cGVydHkoQ1NTUHJvcGVydHlXaWR0aCwgQ1NTVmFsdWVBdXRvKTsKKyAgICAgICAgc2V0SW5saW5l
U3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eUhlaWdodCwgc2l6ZSwgIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUEVSQ0VOVEFHRSk7CisgICAgfQorCisgICAgaWYgKGN1ZS0+YmFzZUZvbnRTaXplUmVs
YXRpdmVUb1ZpZGVvSGVpZ2h0KCkpIHsKKyAgICAgICAgZG91YmxlIGZvbnRTaXplID0gdmlkZW9T
aXplLmhlaWdodCgpICogY3VlLT5iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQoKSAv
IDEwMDsKKyAgICAgICAgaWYgKGN1ZS0+Zm9udFNpemVNdWx0aXBsaWVyKCkpCisgICAgICAgICAg
ICBmb250U2l6ZSAqPSBjdWUtPmZvbnRTaXplTXVsdGlwbGllcigpIC8gMTAwOworICAgICAgICBz
ZXRJbmxpbmVTdHlsZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIFN0cmluZzo6bnVtYmVy
KGZvbnRTaXplKSArICJweCIpOworICAgIH0KKworICAgIGlmIChjdWUtPmdldEFsaWdubWVudCgp
ID09IFRleHRUcmFja0N1ZTo6U3RhcnQpCisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHko
Q1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVlU3RhcnQpOworICAgIGVsc2UgaWYgKGN1ZS0+
Z2V0QWxpZ25tZW50KCkgPT0gVGV4dFRyYWNrQ3VlOjpFbmQpCisgICAgICAgIHNldElubGluZVN0
eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENTU1ZhbHVlRW5kKTsKKyAgICBlbHNl
CisgICAgICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0QWxpZ24sIENT
U1ZhbHVlQ2VudGVyKTsKKworICAgIHNldElubGluZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlX
ZWJraXRXcml0aW5nTW9kZSwgY3VlLT5nZXRDU1NXcml0aW5nTW9kZSgpLCBmYWxzZSk7CisgICAg
c2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlUHJl
V3JhcCk7CisgICAgc2V0SW5saW5lU3R5bGVQcm9wZXJ0eShDU1NQcm9wZXJ0eVdvcmRCcmVhaywg
Q1NTVmFsdWVOb3JtYWwpOworfQorCitUZXh0VHJhY2tDdWVHZW5lcmljOjpUZXh0VHJhY2tDdWVH
ZW5lcmljKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIDogVGV4dFRyYWNrQ3VlKGNvbnRl
eHQsIHN0YXJ0LCBlbmQsIGNvbnRlbnQpCisgICAgLCBtX2Jhc2VGb250U2l6ZVJlbGF0aXZlVG9W
aWRlb0hlaWdodCgwKQorICAgICwgbV9mb250U2l6ZU11bHRpcGxpZXIoMCkKKyAgICAsIG1fZGVm
YXVsdFBvc2l0aW9uKHRydWUpCit7Cit9CisKK1Bhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlQm94PiBU
ZXh0VHJhY2tDdWVHZW5lcmljOjpjcmVhdGVEaXNwbGF5VHJlZSgpCit7CisgICAgcmV0dXJuIFRl
eHRUcmFja0N1ZUdlbmVyaWNCb3hFbGVtZW50OjpjcmVhdGUob3duZXJEb2N1bWVudCgpLCB0aGlz
KTsKK30KKwordm9pZCBUZXh0VHJhY2tDdWVHZW5lcmljOjpzZXRMaW5lKGludCBsaW5lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBtX2RlZmF1bHRQb3NpdGlvbiA9IGZhbHNlOworICAgIFRl
eHRUcmFja0N1ZTo6c2V0TGluZShsaW5lLCBlYyk7Cit9CisKK3ZvaWQgVGV4dFRyYWNrQ3VlR2Vu
ZXJpYzo6c2V0UG9zaXRpb24oaW50IHBvc2l0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBtX2RlZmF1bHRQb3NpdGlvbiA9IGZhbHNlOworICAgIFRleHRUcmFja0N1ZTo6c2V0UG9zaXRp
b24ocG9zaXRpb24sIGVjKTsKK30KKworYm9vbCBUZXh0VHJhY2tDdWVHZW5lcmljOjpvcGVyYXRv
cj09KGNvbnN0IFRleHRUcmFja0N1ZSYgY3VlKSBjb25zdAoreworICAgIGlmIChjdWUuY3VlVHlw
ZSgpICE9IFRleHRUcmFja0N1ZTo6R2VuZXJpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgY29uc3QgVGV4dFRyYWNrQ3VlR2VuZXJpYyogb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBU
ZXh0VHJhY2tDdWVHZW5lcmljKj4oJmN1ZSk7CisKKyAgICBpZiAobV9iYXNlRm9udFNpemVSZWxh
dGl2ZVRvVmlkZW9IZWlnaHQgIT0gb3RoZXItPmJhc2VGb250U2l6ZVJlbGF0aXZlVG9WaWRlb0hl
aWdodCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZm9udFNpemVNdWx0aXBs
aWVyICE9IG90aGVyLT5mb250U2l6ZU11bHRpcGxpZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChtX2ZvbnROYW1lICE9IG90aGVyLT5mb250TmFtZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gVGV4dFRyYWNrQ3VlOjpvcGVyYXRvcj09KGN1ZSk7Cit9
CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tDdWVHZW5lcmljLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0N1ZUdlbmVyaWMuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUZXh0VHJhY2tDdWVH
ZW5lcmljX2gKKyNkZWZpbmUgVGV4dFRyYWNrQ3VlR2VuZXJpY19oCisKKyNpZiBFTkFCTEUoVklE
RU9fVFJBQ0spCisKKyNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlRleHRUcmFj
a0N1ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR2VuZXJpY0N1ZURhdGE7CisKKy8vIEEgImdlbmVyaWMiIGN1ZSBpcyBhIG5v
bi1XZWJWVFQgY3VlLCBzbyBpdCBpcyBub3QgcG9zaXRpb25lZC9zaXplZCB3aXRoIHRoZSBXZWJW
VFQgbG9naWMuCitjbGFzcyBUZXh0VHJhY2tDdWVHZW5lcmljIDogcHVibGljIFRleHRUcmFja0N1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlR2VuZXJpYz4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGRvdWJsZSBzdGFydCwgZG91
YmxlIGVuZCwgY29uc3QgU3RyaW5nJiBjb250ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBUZXh0VHJhY2tDdWVHZW5lcmljKGNvbnRleHQsIHN0YXJ0LCBlbmQsIGNvbnRl
bnQpKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+VGV4dFRyYWNrQ3VlR2VuZXJpYygpIHsg
fQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFRleHRUcmFja0N1ZUJveD4gY3JlYXRlRGlzcGxh
eVRyZWUoKSBPVkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRMaW5lKGludCwgRXhjZXB0
aW9uQ29kZSYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzZXRQb3NpdGlvbihpbnQsIEV4
Y2VwdGlvbkNvZGUmKSBPVkVSUklERTsKKworICAgIGJvb2wgdXNlRGVmYXVsdFBvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWZhdWx0UG9zaXRpb247IH0KKyAgICAKKyAgICBkb3VibGUgYmFz
ZUZvbnRTaXplUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9iYXNlRm9u
dFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQ7IH0KKyAgICB2b2lkIHNldEJhc2VGb250U2l6ZVJl
bGF0aXZlVG9WaWRlb0hlaWdodChkb3VibGUgc2l6ZSkgeyBtX2Jhc2VGb250U2l6ZVJlbGF0aXZl
VG9WaWRlb0hlaWdodCA9IHNpemU7IH0KKworICAgIGRvdWJsZSBmb250U2l6ZU11bHRpcGxpZXIo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnRTaXplTXVsdGlwbGllcjsgfQorICAgIHZvaWQgc2V0Rm9u
dFNpemVNdWx0aXBsaWVyKGRvdWJsZSBzaXplKSB7IG1fZm9udFNpemVNdWx0aXBsaWVyID0gc2l6
ZTsgfQorCisgICAgU3RyaW5nIGZvbnROYW1lKCkgY29uc3QgeyByZXR1cm4gbV9mb250TmFtZTsg
fQorICAgIHZvaWQgc2V0Rm9udE5hbWUoU3RyaW5nIG5hbWUpIHsgbV9mb250TmFtZSA9IG5hbWU7
IH0KKworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRleHRUcmFja0N1ZSYpIGNv
bnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRleHRUcmFj
a0N1ZSYgY3VlKSBjb25zdCBPVkVSUklERQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gY3VlKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFRleHRUcmFja0N1ZTo6Q3VlVHlwZSBjdWVU
eXBlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gVGV4dFRyYWNrQ3VlOjpHZW5lcmljOyB9CisK
K3ByaXZhdGU6CisgICAgVGV4dFRyYWNrQ3VlR2VuZXJpYyhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgZG91YmxlIHN0YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICBk
b3VibGUgbV9iYXNlRm9udFNpemVSZWxhdGl2ZVRvVmlkZW9IZWlnaHQ7CisgICAgZG91YmxlIG1f
Zm9udFNpemVNdWx0aXBsaWVyOworICAgIFN0cmluZyBtX2ZvbnROYW1lOworICAgIGJvb2wgbV9k
ZWZhdWx0UG9zaXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0
VHJhY2tQcml2YXRlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudC5oCShyZXZpc2lvbiAxNDAz
MzQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgSW5i
YW5kVGV4dFRyYWNrUHJpdmF0ZUNsaWVudF9oCiAjZGVmaW5lIEluYmFuZFRleHRUcmFja1ByaXZh
dGVDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCkBAIC0zNCwxMiAr
MzUsODIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlOwogCitjbGFzcyBHZW5lcmljQ3VlRGF0YSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
R2VuZXJpY0N1ZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBH
ZW5lcmljQ3VlRGF0YSgpCisgICAgICAgIDogbV9zdGFydFRpbWUoMCkKKyAgICAgICAgLCBtX2Vu
ZFRpbWUoMCkKKyAgICAgICAgLCBtX2xpbmUoLTEpCisgICAgICAgICwgbV9wb3NpdGlvbigtMSkK
KyAgICAgICAgLCBtX3NpemUoLTEpCisgICAgICAgICwgbV9hbGlnbihOb25lKQorICAgICAgICAs
IG1fYmFzZUZvbnRTaXplKDApCisgICAgICAgICwgbV9yZWxhdGl2ZUZvbnRTaXplKDApCisgICAg
eworICAgIH0KKyAgICB2aXJ0dWFsIH5HZW5lcmljQ3VlRGF0YSgpIHsgfQorCisgICAgZG91Ymxl
IHN0YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAgdm9pZCBzZXRT
dGFydFRpbWUoZG91YmxlIHN0YXJ0VGltZSkgeyBtX3N0YXJ0VGltZSA9IHN0YXJ0VGltZTsgfQor
CisgICAgZG91YmxlIGVuZFRpbWUoKSBjb25zdCB7IHJldHVybiBtX2VuZFRpbWU7IH0KKyAgICB2
b2lkIHNldEVuZFRpbWUoZG91YmxlIGVuZFRpbWUpIHsgbV9lbmRUaW1lID0gZW5kVGltZTsgfQor
CisgICAgU3RyaW5nIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIHZvaWQgc2V0SWQo
U3RyaW5nIGlkKSB7IG1faWQgPSBpZDsgfQorCisgICAgU3RyaW5nIGNvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRlbnQ7IH0KKyAgICB2b2lkIHNldENvbnRlbnQoU3RyaW5nIGNvbnRlbnQp
IHsgbV9jb250ZW50ID0gY29udGVudDsgfQorCisgICAgZG91YmxlIGxpbmUoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmU7IH0KKyAgICB2b2lkIHNldExpbmUoZG91YmxlIGxpbmUpIHsgbV9saW5lID0g
bGluZTsgfQorCisgICAgZG91YmxlIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlv
bjsgfQorICAgIHZvaWQgc2V0UG9zaXRpb24oZG91YmxlIHBvc2l0aW9uKSB7IG1fcG9zaXRpb24g
PSBwb3NpdGlvbjsgfQorCisgICAgZG91YmxlIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKyAgICB2b2lkIHNldFNpemUoZG91YmxlIHNpemUpIHsgbV9zaXplID0gc2l6ZTsgfQorCisg
ICAgZW51bSBBbGlnbm1lbnQgeworICAgICAgICBOb25lLAorICAgICAgICBTdGFydCwKKyAgICAg
ICAgTWlkZGxlLAorICAgICAgICBFbmQKKyAgICB9OworICAgIEFsaWdubWVudCBhbGlnbigpIGNv
bnN0IHsgcmV0dXJuIG1fYWxpZ247IH0KKyAgICB2b2lkIHNldEFsaWduKEFsaWdubWVudCBhbGln
bikgeyBtX2FsaWduID0gYWxpZ247IH0KKworICAgIFN0cmluZyBmb250TmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udE5hbWU7IH0KKyAgICB2b2lkIHNldEZvbnROYW1lKFN0cmluZyBmb250TmFt
ZSkgeyBtX2ZvbnROYW1lID0gZm9udE5hbWU7IH0KKworICAgIGRvdWJsZSBiYXNlRm9udFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2Jhc2VGb250U2l6ZTsgfQorICAgIHZvaWQgc2V0QmFzZUZvbnRT
aXplKGRvdWJsZSBiYXNlRm9udFNpemUpIHsgbV9iYXNlRm9udFNpemUgPSBiYXNlRm9udFNpemU7
IH0KKworICAgIGRvdWJsZSByZWxhdGl2ZUZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9yZWxh
dGl2ZUZvbnRTaXplOyB9CisgICAgdm9pZCBzZXRSZWxhdGl2ZUZvbnRTaXplKGRvdWJsZSByZWxh
dGl2ZUZvbnRTaXplKSB7IG1fcmVsYXRpdmVGb250U2l6ZSA9IHJlbGF0aXZlRm9udFNpemU7IH0K
KyAgICAKK3ByaXZhdGU6CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWU7CisgICAgZG91YmxlIG1f
ZW5kVGltZTsKKyAgICBTdHJpbmcgbV9pZDsKKyAgICBTdHJpbmcgbV9jb250ZW50OworICAgIGRv
dWJsZSBtX2xpbmU7CisgICAgZG91YmxlIG1fcG9zaXRpb247CisgICAgZG91YmxlIG1fc2l6ZTsK
KyAgICBBbGlnbm1lbnQgbV9hbGlnbjsKKyAgICBTdHJpbmcgbV9mb250TmFtZTsKKyAgICBkb3Vi
bGUgbV9iYXNlRm9udFNpemU7CisgICAgZG91YmxlIG1fcmVsYXRpdmVGb250U2l6ZTsKK307CisK
IGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1
YWwgfkluYmFuZFRleHRUcmFja1ByaXZhdGVDbGllbnQoKSB7IH0KICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgYWRkQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUgLypzdGFydCovLCBk
b3VibGUgLyplbmQqLywgY29uc3QgU3RyaW5nJiAvKmlkKi8sIGNvbnN0IFN0cmluZyYgLypjb250
ZW50Ki8sIGNvbnN0IFN0cmluZyYgLypzZXR0aW5ncyovKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGhhc0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlIC8qc3RhcnQqLywgZG91Ymxl
IC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCovLCBjb25zdCBTdHJpbmcmIC8qY29udGVudCov
LCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRX
ZWJWVFRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAvKnN0YXJ0Ki8sIGRvdWJs
ZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQqLywgY29uc3QgU3RyaW5nJiAvKmNvbnRlbnQq
LywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRk
R2VuZXJpY0N1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgR2VuZXJpY0N1ZURhdGEqKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCShyZXZpc2lvbiAxNDAzMzQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZUFWRi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1
ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCIKIAorI2luY2x1ZGUgIkluYmFuZFRleHRU
cmFja1ByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmgiCiAjaW5jbHVkZSAiU29mdExpbmtpbmcuaCIK
QEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAogU09GVF9MSU5LX0ZSQU1F
V09SS19PUFRJT05BTChDb3JlTWVkaWEpCiAKQEAgLTUyLDYgKzU0LDkgQEAgU09GVF9MSU5LX1BP
SU5URVJfT1BUSU9OQUwoQ29yZU1lZGlhLCBrQwogU09GVF9MSU5LX1BPSU5URVJfT1BUSU9OQUwo
Q29yZU1lZGlhLCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0LCBDRlN0cmlu
Z1JlZikKIFNPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dFZlcnRp
Y2FsTGF5b3V0X0xlZnRUb1JpZ2h0LCBDRlN0cmluZ1JlZikKIFNPRlRfTElOS19QT0lOVEVSX09Q
VElPTkFMKENvcmVNZWRpYSwga0NNVGV4dFZlcnRpY2FsTGF5b3V0X1JpZ2h0VG9MZWZ0LCBDRlN0
cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1h
cmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdlUmVsYXRpdmVUb1ZpZGVvSGVpZ2h0
LCBDRlN0cmluZ1JlZikKK1NPRlRfTElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NN
VGV4dE1hcmt1cEF0dHJpYnV0ZV9SZWxhdGl2ZUZvbnRTaXplLCBDRlN0cmluZ1JlZikKK1NPRlRf
TElOS19QT0lOVEVSX09QVElPTkFMKENvcmVNZWRpYSwga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9G
b250RmFtaWx5TmFtZSwgQ0ZTdHJpbmdSZWYpCiAKICNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJp
YnV0ZV9BbGlnbm1lbnQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9BbGlnbm1lbnQoKQogI2Rl
ZmluZSBrQ01UZXh0TWFya3VwQWxpZ25tZW50VHlwZV9TdGFydCBnZXRrQ01UZXh0TWFya3VwQWxp
Z25tZW50VHlwZV9TdGFydCgpCkBAIC02Niw2ICs3MSw5IEBAIFNPRlRfTElOS19QT0lOVEVSX09Q
VElPTkFMKENvcmVNZWRpYSwga0MKICNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9WZXJ0
aWNhbExheW91dCBnZXRrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0KCkKICNk
ZWZpbmUga0NNVGV4dFZlcnRpY2FsTGF5b3V0X0xlZnRUb1JpZ2h0IGdldGtDTVRleHRWZXJ0aWNh
bExheW91dF9MZWZ0VG9SaWdodCgpCiAjZGVmaW5lIGtDTVRleHRWZXJ0aWNhbExheW91dF9SaWdo
dFRvTGVmdCBnZXRrQ01UZXh0VmVydGljYWxMYXlvdXRfUmlnaHRUb0xlZnQoKQorI2RlZmluZSBr
Q01UZXh0TWFya3VwQXR0cmlidXRlX0Jhc2VGb250U2l6ZVBlcmNlbnRhZ2VSZWxhdGl2ZVRvVmlk
ZW9IZWlnaHQgZ2V0a0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9CYXNlRm9udFNpemVQZXJjZW50YWdl
UmVsYXRpdmVUb1ZpZGVvSGVpZ2h0KCkKKyNkZWZpbmUga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9S
ZWxhdGl2ZUZvbnRTaXplIGdldGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250U2l6
ZSgpCisjZGVmaW5lIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfRm9udEZhbWlseU5hbWUgZ2V0a0NN
VGV4dE1hcmt1cEF0dHJpYnV0ZV9Gb250RmFtaWx5TmFtZSgpCiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKQEAgLTg0LDcgKzkyLDcgQEAgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6fkluYmFu
ZFRleHRUcgogICAgIGRpc2Nvbm5lY3QoKTsKIH0KIAotdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGOjpwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmli
dXRlZFN0cmluZywgU3RyaW5nQnVpbGRlciYgY29udGVudCwgU3RyaW5nQnVpbGRlciYgc2V0dGlu
Z3MpCit2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVz
KENGQXR0cmlidXRlZFN0cmluZ1JlZiBhdHRyaWJ1dGVkU3RyaW5nLCBHZW5lcmljQ3VlRGF0YSog
Y3VlRGF0YSkKIHsKICAgICAvLyBTb21lIG9mIHRoZSBhdHRyaWJ1dGVzIHdlIHRyYW5zbGF0ZSBp
bnRvIHBlci1jdWUgV2ViVlRUIHNldHRpbmdzIGFyZSBhcmUgcmVwZWF0ZWQgb24gZWFjaCBwYXJ0
IG9mIGFuIGF0dHJpYnV0ZWQgc3RyaW5nIHNvIG9ubHkKICAgICAvLyBwcm9jZXNzIHRoZSBmaXJz
dCBpbnN0YW5jZSBvZiBlYWNoLgpAQCAtOTMsMTAgKzEwMSwxMiBAQCB2b2lkIEluYmFuZFRleHRU
cmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgIFBvc2l0aW9uID0gMSA8PCAxLAogICAg
ICAgICBTaXplID0gMSA8PCAyLAogICAgICAgICBWZXJ0aWNhbCA9IDEgPDwgMywKLSAgICAgICAg
QWxpZ24gPSAxIDw8IDQKKyAgICAgICAgQWxpZ24gPSAxIDw8IDQsCisgICAgICAgIEZvbnROYW1l
ID0gMSA8PCA1CiAgICAgfTsKICAgICB1bnNpZ25lZCBwcm9jZXNzZWQgPSAwOwogCisgICAgU3Ry
aW5nQnVpbGRlciBjb250ZW50OwogICAgIFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nVmFsdWUgPSBD
RkF0dHJpYnV0ZWRTdHJpbmdHZXRTdHJpbmcoYXR0cmlidXRlZFN0cmluZyk7CiAgICAgQ0ZJbmRl
eCBsZW5ndGggPSBhdHRyaWJ1dGVkU3RyaW5nVmFsdWUubGVuZ3RoKCk7CiAgICAgaWYgKCFsZW5n
dGgpCkBAIC0xMTAsNiArMTIwLDcgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpw
cm9jZXNzQwogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgU3RyaW5nQnVpbGRlciB0
YWdTdGFydDsKKyAgICAgICAgQ0ZTdHJpbmdSZWYgdmFsdWVTdHJpbmc7CiAgICAgICAgIFN0cmlu
ZyB0YWdFbmQ7CiAgICAgICAgIENGSW5kZXggYXR0cmlidXRlQ291bnQgPSBDRkRpY3Rpb25hcnlH
ZXRDb3VudChhdHRyaWJ1dGVzKTsKICAgICAgICAgVmVjdG9yPGNvbnN0IHZvaWQqPiBrZXlzKGF0
dHJpYnV0ZUNvdW50KTsKQEAgLTEyMyw3ICsxMzQsNyBAQCB2b2lkIEluYmFuZFRleHRUcmFja1By
aXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX0FsaWdu
bWVudCwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKLSAgICAgICAgICAgICAgICBDRlN0cmlu
Z1JlZiB2YWx1ZVN0cmluZyA9IHN0YXRpY19jYXN0PENGU3RyaW5nUmVmPih2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgdmFsdWVTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4odmFsdWUp
OwogICAgICAgICAgICAgICAgIGlmIChDRkdldFR5cGVJRCh2YWx1ZVN0cmluZykgIT0gQ0ZTdHJp
bmdHZXRUeXBlSUQoKSB8fCAhQ0ZTdHJpbmdHZXRMZW5ndGgodmFsdWVTdHJpbmcpKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkICYg
QWxpZ24pCkBAIC0xMzEsMTEgKzE0MiwxMSBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVB
VkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkIHw9IEFsaWduOwogCiAgICAg
ICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1hcmt1
cEFsaWdubWVudFR5cGVfU3RhcnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQotICAgICAgICAg
ICAgICAgICAgICBzZXR0aW5ncy5hcHBlbmQoImFsaWduOnN0YXJ0ICIpOworICAgICAgICAgICAg
ICAgICAgICBjdWVEYXRhLT5zZXRBbGlnbihHZW5lcmljQ3VlRGF0YTo6U3RhcnQpOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NNVGV4dE1h
cmt1cEFsaWdubWVudFR5cGVfTWlkZGxlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAgICAg
ICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjptaWRkbGUgIik7CisgICAgICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldEFsaWduKEdlbmVyaWNDdWVEYXRhOjpNaWRkbGUpOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NN
VGV4dE1hcmt1cEFsaWdubWVudFR5cGVfRW5kLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykKLSAg
ICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKCJhbGlnbjplbmQgIik7CisgICAgICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldEFsaWduKEdlbmVyaWNDdWVEYXRhOjpFbmQpOwogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKQEAgLTE3MCw5ICsxODEsNiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6
OnByb2Nlc3NDCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBh
cmUoa2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX09ydGhvZ29uYWxMaW5lUG9zaXRpb25QZXJj
ZW50YWdlUmVsYXRpdmVUb1dyaXRpbmdEaXJlY3Rpb24sIDApID09IGtDRkNvbXBhcmVFcXVhbFRv
KSB7Ci0gICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBsaW5lIHBvc2l0aW9uIGlmIHRoZSBh
dHRyaWJ1dGVzIGFsc28gc3BlY2lmeSAic2l6ZSIgc28gd2Uga2VlcCBXZWJWVFQncyBkZWZhdWx0
IGxpbmUgbG9naWMKLSAgICAgICAgICAgICAgICBpZiAoQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoYXR0
cmlidXRlcywga0NNVGV4dE1hcmt1cEF0dHJpYnV0ZV9Xcml0aW5nRGlyZWN0aW9uU2l6ZVBlcmNl
bnRhZ2UpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBp
ZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZWQgJiBMaW5l
KQpAQCAtMTgwLDkgKzE4OCw5IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJv
Y2Vzc0MKICAgICAgICAgICAgICAgICBwcm9jZXNzZWQgfD0gTGluZTsKIAogICAgICAgICAgICAg
ICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZh
bHVlKTsKLSAgICAgICAgICAgICAgICBkb3VibGUgcG9zaXRpb247Ci0gICAgICAgICAgICAgICAg
Q0ZOdW1iZXJHZXRWYWx1ZSh2YWx1ZU51bWJlciwga0NGTnVtYmVyRmxvYXQ2NFR5cGUsICZwb3Np
dGlvbik7Ci0gICAgICAgICAgICAgICAgc2V0dGluZ3MuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJs
aW5lOiVsZCUlICIsIGxyaW50KHBvc2l0aW9uKSkpOworICAgICAgICAgICAgICAgIGRvdWJsZSBs
aW5lOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51
bWJlckZsb2F0NjRUeXBlLCAmbGluZSk7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0TGlu
ZShsaW5lKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAt
MTk2LDcgKzIwNCw3IEBAIHZvaWQgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRjo6cHJvY2Vzc0MK
ICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9IHN0YXRpY19jYXN0PENG
TnVtYmVyUmVmPih2YWx1ZSk7CiAgICAgICAgICAgICAgICAgZG91YmxlIHBvc2l0aW9uOwogICAg
ICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIsIGtDRk51bWJlckZsb2F0
NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRpbmdzLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgicG9zaXRpb246JWxkJSUgIiwgbHJpbnQocG9zaXRpb24pKSk7CisgICAgICAg
ICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0yMDgsMTYgKzIxNiw2NiBAQCB2b2lkIElu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAgICAgICAgICAgICAgcHJvY2Vz
c2VkIHw9IFNpemU7CiAKICAgICAgICAgICAgICAgICBDRk51bWJlclJlZiB2YWx1ZU51bWJlciA9
IHN0YXRpY19jYXN0PENGTnVtYmVyUmVmPih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
IHBvc2l0aW9uOwotICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1iZXIs
IGtDRk51bWJlckZsb2F0NjRUeXBlLCAmcG9zaXRpb24pOwotICAgICAgICAgICAgICAgIHNldHRp
bmdzLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgic2l6ZTolbGQlJSAiLCBscmludChwb3NpdGlvbikp
KTsKKyAgICAgICAgICAgICAgICBkb3VibGUgc2l6ZTsKKyAgICAgICAgICAgICAgICBDRk51bWJl
ckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnNpemUpOworICAg
ICAgICAgICAgICAgIGN1ZURhdGEtPnNldFNpemUoc2l6ZSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUo
a2V5LCBrQ01UZXh0TWFya3VwQXR0cmlidXRlX1ZlcnRpY2FsTGF5b3V0LCAwKSA9PSBrQ0ZDb21w
YXJlRXF1YWxUbykgeworICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8
Q0ZTdHJpbmdSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFs
dWVTdHJpbmcpICE9IENGU3RyaW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZh
bHVlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZSh2YWx1ZVN0cmluZywga0NN
VGV4dFZlcnRpY2FsTGF5b3V0X0xlZnRUb1JpZ2h0LCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykK
KyAgICAgICAgICAgICAgICAgICAgdGFnU3RhcnQuYXBwZW5kKGxlZnRUb1JpZ2h0TWFyayk7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoQ0ZTdHJpbmdDb21wYXJlKHZhbHVlU3RyaW5nLCBrQ01U
ZXh0VmVydGljYWxMYXlvdXRfUmlnaHRUb0xlZnQsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKQor
ICAgICAgICAgICAgICAgICAgICB0YWdTdGFydC5hcHBlbmQocmlnaHRUb0xlZnRNYXJrKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVf
QmFzZUZvbnRTaXplUGVyY2VudGFnZVJlbGF0aXZlVG9WaWRlb0hlaWdodCwgMCkgPT0ga0NGQ29t
cGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWUpICE9
IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVyUmVmIHZhbHVlTnVtYmVyID0g
c3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBkb3VibGUg
YmFzZUZvbnRTaXplOworICAgICAgICAgICAgICAgIENGTnVtYmVyR2V0VmFsdWUodmFsdWVOdW1i
ZXIsIGtDRk51bWJlckZsb2F0NjRUeXBlLCAmYmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAg
ICBjdWVEYXRhLT5zZXRCYXNlRm9udFNpemUoYmFzZUZvbnRTaXplKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KENGU3RyaW5nQ29tcGFyZShrZXksIGtDTVRleHRNYXJrdXBBdHRyaWJ1dGVfUmVsYXRpdmVGb250
U2l6ZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZH
ZXRUeXBlSUQodmFsdWUpICE9IENGTnVtYmVyR2V0VHlwZUlEKCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIENGTnVtYmVy
UmVmIHZhbHVlTnVtYmVyID0gc3RhdGljX2Nhc3Q8Q0ZOdW1iZXJSZWY+KHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBkb3VibGUgcmVsYXRpdmVGb250U2l6ZTsKKyAgICAgICAgICAgICAgICBDRk51
bWJlckdldFZhbHVlKHZhbHVlTnVtYmVyLCBrQ0ZOdW1iZXJGbG9hdDY0VHlwZSwgJnJlbGF0aXZl
Rm9udFNpemUpOworICAgICAgICAgICAgICAgIGN1ZURhdGEtPnNldFJlbGF0aXZlRm9udFNpemUo
cmVsYXRpdmVGb250U2l6ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoa2V5LCBrQ01UZXh0TWFya3Vw
QXR0cmlidXRlX0ZvbnRGYW1pbHlOYW1lLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAg
ICAgICAgICAgICAgIHZhbHVlU3RyaW5nID0gc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBpZiAoQ0ZHZXRUeXBlSUQodmFsdWVTdHJpbmcpICE9IENGU3Ry
aW5nR2V0VHlwZUlEKCkgfHwgIUNGU3RyaW5nR2V0TGVuZ3RoKHZhbHVlU3RyaW5nKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZCAm
IEZvbnROYW1lKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICBwcm9jZXNzZWQgfD0gRm9udE5hbWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY3VlRGF0YS0+c2V0Rm9udE5hbWUodmFsdWVTdHJpbmcpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKICAgICAgICAgY29udGVudC5hcHBl
bmQodGFnU3RhcnQpOwogICAgICAgICBjb250ZW50LmFwcGVuZChhdHRyaWJ1dGVkU3RyaW5nVmFs
dWUuc3Vic3RyaW5nKGVmZmVjdGl2ZVJhbmdlLmxvY2F0aW9uLCBlZmZlY3RpdmVSYW5nZS5sZW5n
dGgpKTsKICAgICAgICAgY29udGVudC5hcHBlbmQodGFnRW5kKTsKICAgICB9CisKKyAgICBpZiAo
Y29udGVudC5sZW5ndGgoKSkKKyAgICAgICAgY3VlRGF0YS0+c2V0Q29udGVudChjb250ZW50LnRv
U3RyaW5nKCkpOwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3ND
dWUoQ0ZBcnJheVJlZiBhdHRyaWJ1dGVkU3RyaW5ncywgZG91YmxlIHRpbWUpCkBAIC0yMjgsMjEg
KzI4Niw0NiBAQCB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDCiAgICAg
aWYgKG1faGF2ZVBhcnRpYWxDdWUpIHsKICAgICAgICAgLy8gQ3VlcyBkbyBub3QgaGF2ZSBhbiBl
eHBsaWNpdCBkdXJhdGlvbiwgdGhleSBhcmUgZGlzcGxheWVkIHVudGlsIHRoZSBuZXh0ICJjdWUi
ICh3aGljaCBtaWdodCBiZSBlbXB0eSkgaXMgZW1pdHRlZC4KICAgICAgICAgbV9jdXJyZW50Q3Vl
RW5kVGltZSA9IHRpbWU7Ci0gICAgICAgIExPRyhNZWRpYSwgIkluYmFuZFRleHRUcmFja1ByaXZh
dGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0lLjJmLCBlbmQ9JS4yZiwgc2V0
dGluZ3M9XCIlc1wiLCBjb250ZW50PVwiJXNcIiBcbiIsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsCi0gICAgICAgICAgICBtX2N1cnJlbnRD
dWVTZXR0aW5ncy50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1fY3VycmVudEN1ZUNvbnRlbnQu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgbV9wbGF5ZXItPmZsdXNoQ3VycmVu
dEN1ZSh0aGlzKTsKKworICAgICAgICBpZiAobV9jdXJyZW50Q3VlRW5kVGltZSA+PSBtX2N1cnJl
bnRDdWVTdGFydFRpbWUpIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9j
dWVzLnNpemUoKTsgaSsrKSB7CisKKyAgICAgICAgICAgICAgICBHZW5lcmljQ3VlRGF0YSogY3Vl
RGF0YSA9IG1fY3Vlc1tpXS5nZXQoKTsKKworICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIklu
YmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgZmx1c2hpbmcgY3VlOiBzdGFydD0l
LjJmLCBlbmQ9JS4yZiwgY29udGVudD1cIiVzXCIgXG4iLAorICAgICAgICAgICAgICAgICAgICBt
X2N1cnJlbnRDdWVTdGFydFRpbWUsIG1fY3VycmVudEN1ZUVuZFRpbWUsIGN1ZURhdGEtPmNvbnRl
bnQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIWN1ZURhdGEtPmNvbnRlbnQoKS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0U3Rh
cnRUaW1lKG1fY3VycmVudEN1ZVN0YXJ0VGltZSk7CisgICAgICAgICAgICAgICAgY3VlRGF0YS0+
c2V0RW5kVGltZShtX2N1cnJlbnRDdWVFbmRUaW1lKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBBVkZvdW5kYXRpb24gY3VlICJwb3NpdGlvbiIgaXMgdG8gdGhlIGNlbnRl
ciBvZiB0aGUgdGV4dCBzbyBhZGp1c3QgcmVsYXRpdmUgdG8gdGhlIGVkZ2UgYmVjYXVzZSB3ZSB3
aWxsIHVzZSBpdCB0bworICAgICAgICAgICAgICAgIC8vIHNldCBDU1MgImxlZnQiLgorICAgICAg
ICAgICAgICAgIGlmIChjdWVEYXRhLT5wb3NpdGlvbigpID49IDAgJiYgY3VlRGF0YS0+c2l6ZSgp
ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgY3VlRGF0YS0+c2V0UG9zaXRpb24oY3VlRGF0YS0+
cG9zaXRpb24oKSAtIGN1ZURhdGEtPnNpemUoKSAvIDIpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIG1fcGxheWVyLT5hZGRHZW5lcmljQ3VlKHRoaXMsIGN1ZURhdGEpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWUgbmVnYXRpdmUgbGVuZ3RoIGN1ZShzKSBp
Z25vcmVkOiBzdGFydD0lLjJmLCBlbmQ9JS4yZlxuIiwgbV9jdXJyZW50Q3VlU3RhcnRUaW1lLCBt
X2N1cnJlbnRDdWVFbmRUaW1lKTsKKwogICAgICAgICByZXNldEN1ZVZhbHVlcygpOwogICAgIH0K
IAogICAgIENGSW5kZXggY291bnQgPSBDRkFycmF5R2V0Q291bnQoYXR0cmlidXRlZFN0cmluZ3Mp
OworICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoQ0ZJbmRleCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgQ0ZBdHRyaWJ1dGVkU3RyaW5nUmVmIGF0
dHJpYnV0ZWRTdHJpbmcgPSBzdGF0aWNfY2FzdDxDRkF0dHJpYnV0ZWRTdHJpbmdSZWY+KENGQXJy
YXlHZXRWYWx1ZUF0SW5kZXgoYXR0cmlidXRlZFN0cmluZ3MsIGkpKTsKIAogICAgICAgICBpZiAo
IWF0dHJpYnV0ZWRTdHJpbmcgfHwgIUNGQXR0cmlidXRlZFN0cmluZ0dldExlbmd0aChhdHRyaWJ1
dGVkU3RyaW5nKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHByb2Nlc3NDdWVB
dHRyaWJ1dGVzKGF0dHJpYnV0ZWRTdHJpbmcsIG1fY3VycmVudEN1ZUNvbnRlbnQsIG1fY3VycmVu
dEN1ZVNldHRpbmdzKTsKKyAgICAgICAgbV9jdWVzLmFwcGVuZChhZG9wdFB0cihuZXcgR2VuZXJp
Y0N1ZURhdGEpKTsKKyAgICAgICAgcHJvY2Vzc0N1ZUF0dHJpYnV0ZXMoYXR0cmlidXRlZFN0cmlu
ZywgbV9jdWVzW2ldLmdldCgpKTsKICAgICAgICAgbV9jdXJyZW50Q3VlU3RhcnRUaW1lID0gdGlt
ZTsKICAgICAgICAgbV9oYXZlUGFydGlhbEN1ZSA9IHRydWU7CiAgICAgfQpAQCAtMjU2LDE3ICsz
MzksMTMgQEAgdm9pZCBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpkaXNjb25uZQogCiB2b2lk
IEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnJlc2V0Q3VlVmFsdWVzKCkKIHsKLSAgICBpZiAo
bV9oYXZlUGFydGlhbEN1ZSAmJiAhbV9jdXJyZW50Q3VlRW5kVGltZSkgewotICAgICAgICBMT0co
TWVkaWEsICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpyZXNldEN1ZVZhbHVlcyBmbHVzaGlu
ZyBkYXRhIGZvciBjdWU6IHN0YXJ0PSUuMmYsIGVuZD0lLjJmLCBzZXR0aW5ncz1cIiVzXCIsIGNv
bnRlbnQ9XCIlc1wiIFxuIiwKLSAgICAgICAgICAgIG1fY3VycmVudEN1ZVN0YXJ0VGltZSwgbV9j
dXJyZW50Q3VlRW5kVGltZSwgbV9jdXJyZW50Q3VlU2V0dGluZ3MudG9TdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBtX2N1cnJlbnRDdWVDb250ZW50LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgfQorICAgIGlmIChtX2hhdmVQYXJ0aWFsQ3VlICYmICFtX2N1cnJlbnRDdWVFbmRUaW1lKQor
ICAgICAgICBMT0coTWVkaWEsICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpyZXNldEN1ZVZh
bHVlcyBmbHVzaGluZyBkYXRhIGZvciBjdWVzOiBzdGFydD0lLjJmXG4iLCBtX2N1cnJlbnRDdWVT
dGFydFRpbWUpOwogCisgICAgbV9jdWVzLnJlc2l6ZSgwKTsKICAgICBtX2hhdmVQYXJ0aWFsQ3Vl
ID0gZmFsc2U7Ci0gICAgbV9jdXJyZW50Q3VlSWQgPSBTdHJpbmcoKTsKICAgICBtX2N1cnJlbnRD
dWVTdGFydFRpbWUgPSAwOwogICAgIG1fY3VycmVudEN1ZUVuZFRpbWUgPSAwOwotICAgIG1fY3Vy
cmVudEN1ZVNldHRpbmdzLmNsZWFyKCk7Ci0gICAgbV9jdXJyZW50Q3VlQ29udGVudC5jbGVhcigp
OwogfQogCiB2b2lkIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkY6OnNldE1vZGUoSW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZTo6TW9kZSBuZXdNb2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oCShyZXZpc2lvbiAxNDAzMzQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZUFWRi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwyMCArMzUsMTIgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOworY2xhc3MgR2Vu
ZXJpY0N1ZURhdGE7CiAKIGNsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYgOiBwdWJsaWMg
SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgfkluYmFuZFRleHRUcmFja1By
aXZhdGVBVkYoKTsKLQotICAgIFN0cmluZyBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1
ZUlkOyB9Ci0gICAgZG91YmxlIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q3VlU3Rh
cnRUaW1lOyB9Ci0gICAgZG91YmxlIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEN1ZUVu
ZFRpbWU7IH0KLSAgICBTdHJpbmcgc2V0dGluZ3MoKSB7IHJldHVybiBtX2N1cnJlbnRDdWVTZXR0
aW5ncy50b1N0cmluZygpOyB9Ci0gICAgU3RyaW5nIGNvbnRlbnQoKSB7IHJldHVybiBtX2N1cnJl
bnRDdWVDb250ZW50LnRvU3RyaW5nKCk7IH0KIAotICAgIHZvaWQgcHJvY2Vzc0N1ZShDRkFycmF5
UmVmLCBkb3VibGUpOwotCi0gICAgdm9pZCByZXNldEN1ZVZhbHVlcygpOworICAgIH5JbmJhbmRU
ZXh0VHJhY2tQcml2YXRlQVZGKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TW9kZShJbmJhbmRU
ZXh0VHJhY2tQcml2YXRlOjpNb2RlKSBPVkVSUklERTsKIApAQCAtNjAsMTYgKzUyLDE4IEBAIHB1
YmxpYzoKICAgICBib29sIGhhc0JlZW5SZXBvcnRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQmVl
blJlcG9ydGVkOyB9CiAgICAgdm9pZCBzZXRIYXNCZWVuUmVwb3J0ZWQoYm9vbCByZXBvcnRlZCkg
eyBtX2hhc0JlZW5SZXBvcnRlZCA9IHJlcG9ydGVkOyB9CiAKKyAgICB2b2lkIHByb2Nlc3NDdWUo
Q0ZBcnJheVJlZiwgZG91YmxlKTsKKyAgICB2b2lkIHJlc2V0Q3VlVmFsdWVzKCk7CisKIHByb3Rl
Y3RlZDoKICAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKE1lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbiopOwogCi0gICAgdm9pZCBwcm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0
ZWRTdHJpbmdSZWYsIFN0cmluZ0J1aWxkZXImIGNvbnRlbnQsIFN0cmluZ0J1aWxkZXImIHNldHRp
bmdzKTsKKyAgICB2b2lkIHByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmluZ1Jl
ZiwgR2VuZXJpY0N1ZURhdGEqKTsKIAotICAgIFN0cmluZyBtX2N1cnJlbnRDdWVJZDsKICAgICBk
b3VibGUgbV9jdXJyZW50Q3VlU3RhcnRUaW1lOwogICAgIGRvdWJsZSBtX2N1cnJlbnRDdWVFbmRU
aW1lOwotICAgIFN0cmluZ0J1aWxkZXIgbV9jdXJyZW50Q3VlU2V0dGluZ3M7Ci0gICAgU3RyaW5n
QnVpbGRlciBtX2N1cnJlbnRDdWVDb250ZW50OworCisgICAgVmVjdG9yPE93blB0cjxHZW5lcmlj
Q3VlRGF0YT4gPiBtX2N1ZXM7CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24q
IG1fcGxheWVyOwogICAgIGludCBtX2luZGV4OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAJKHJldmlzaW9uIDE0MDMz
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRp
YVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01ODIsNiAr
NTgyLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpzZWUKICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnNlZWtDb21wbGV0ZWQo
JXApIC0gZmluaXNoZWQgPSAlZCIsIHRoaXMsIGZpbmlzaGVkKTsKICAgICBVTlVTRURfUEFSQU0o
ZmluaXNoZWQpOwogCisjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9UUkFDS19TVVBQT1JUKQor
ICAgIGlmIChjdXJyZW50VHJhY2soKSkKKyAgICAgICAgY3VycmVudFRyYWNrKCktPnJlc2V0Q3Vl
VmFsdWVzKCk7CisjZW5kaWYKKwogICAgIG1fc2Vla1RvID0gTWVkaWFQbGF5ZXI6OmludmFsaWRU
aW1lKCk7CiAgICAgdXBkYXRlU3RhdGVzKCk7CiAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7
CkBAIC04MTEsMTkgKzgxNiwxMyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlv
bjo6ZGlzCiB9CiAKICNpZiBIQVZFKEFWRk9VTkRBVElPTl9URVhUX1RSQUNLX1NVUFBPUlQpCi12
b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Zmx1c2hDdXJyZW50Q3VlKEluYmFu
ZFRleHRUcmFja1ByaXZhdGVBVkYqIHRyYWNrKQordm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OmFkZEdlbmVyaWNDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRiogdHJhY2ss
IEdlbmVyaWNDdWVEYXRhKiBjdWVEYXRhKQogewogICAgIGlmICghdHJhY2stPmNsaWVudCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICAvLyBBVkZvdW5kYXRpb24gcmV0dXJucyBhIGN1ZSBldmVy
eSB0aW1lIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLCBvbmx5IGFkZCBpdCBvbmNlLgotICAgIGlmICh0
cmFjay0+Y2xpZW50KCktPmhhc0N1ZSh0cmFjaywgdHJhY2stPnN0YXJ0KCksIHRyYWNrLT5lbmQo
KSwgdHJhY2stPmlkKCksIHRyYWNrLT5jb250ZW50KCksIHRyYWNrLT5zZXR0aW5ncygpKSkgewot
ICAgICAgICBMT0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmZsdXNo
Q3VycmVudEN1ZSglcCkgLSBhbHJlYWR5IGhhdmUgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCB0
cmFjay0+c3RhcnQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBMT0coTWVkaWEs
ICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OmZsdXNoQ3VycmVudEN1ZSglcCkgLSBh
ZGRpbmcgY3VlIGZvciB0aW1lICUuMmYiLCB0aGlzLCB0cmFjay0+c3RhcnQoKSk7Ci0gICAgdHJh
Y2stPmNsaWVudCgpLT5hZGRDdWUodHJhY2ssIHRyYWNrLT5zdGFydCgpLCB0cmFjay0+ZW5kKCks
IHRyYWNrLT5pZCgpLCB0cmFjay0+Y29udGVudCgpLCB0cmFjay0+c2V0dGluZ3MoKSk7CisgICAg
TE9HKE1lZGlhLCAiTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjphZGRHZW5lcmljQ3Vl
KCVwKSAtIGFkZGluZyBjdWUgZm9yIHRpbWUgJS4yZiIsIHRoaXMsIGN1ZURhdGEtPnN0YXJ0VGlt
ZSgpKTsKKyAgICB0cmFjay0+Y2xpZW50KCktPmFkZEdlbmVyaWNDdWUodHJhY2ssIGN1ZURhdGEp
OwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6Y29uZmlndXJlSW5i
YW5kVHJhY2tzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmgJKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOworY2xhc3MgR2VuZXJpY0N1
ZURhdGE7CiAKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbiA6IHB1YmxpYyBN
ZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2UgewogcHVibGljOgpAQCAtMTE4LDcgKzExOSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTWFpblRocmVhZFBlbmRpbmdGbGFnKCk7CiAKICNpZiBI
QVZFKEFWRk9VTkRBVElPTl9URVhUX1RSQUNLX1NVUFBPUlQpCi0gICAgdm9pZCBmbHVzaEN1cnJl
bnRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRiopOworICAgIHZvaWQgYWRkR2VuZXJpY0N1
ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGKiwgR2VuZXJpY0N1ZURhdGEqKTsKICAgICB2b2lk
IHRyYWNrTW9kZUNoYW5nZWQoKTsKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5k
YXRpb25PYmpDLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMu
bW0JKHJldmlzaW9uIDE0MDMzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBTT0ZUX0xJTktfQ0xBU1MoQVZGb3Vu
ZGF0aW9uLCBBVk1lZGlhU2VsCiBTT0ZUX0xJTktfUE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVk
aWFDaGFyYWN0ZXJpc3RpY0xlZ2libGUsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktfUE9JTlRFUihB
VkZvdW5kYXRpb24sIEFWTWVkaWFUeXBlU3VidGl0bGUsIE5TU3RyaW5nICopCiBTT0ZUX0xJTktf
UE9JTlRFUihBVkZvdW5kYXRpb24sIEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25seUZv
cmNlZFN1YnRpdGxlcywgTlNTdHJpbmcgKikKK1NPRlRfTElOS19QT0lOVEVSKEFWRm91bmRhdGlv
biwgQVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dFRleHRTdHlsaW5nUmVzb2x1dGlvblNvdXJjZUFu
ZFJ1bGVzT25seSwgTlNTdHJpbmcgKikKIAogI2RlZmluZSBBVlBsYXllckl0ZW1MZWdpYmxlT3V0
cHV0IGdldEFWUGxheWVySXRlbUxlZ2libGVPdXRwdXRDbGFzcygpCiAjZGVmaW5lIEFWTWVkaWFT
ZWxlY3Rpb25Hcm91cCBnZXRBVk1lZGlhU2VsZWN0aW9uR3JvdXBDbGFzcygpCkBAIC0xMTMsNiAr
MTE0LDcgQEAgU09GVF9MSU5LX1BPSU5URVIoQVZGb3VuZGF0aW9uLCBBVk1lZGlhQwogI2RlZmlu
ZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNMZWdpYmxlIGdldEFWTWVkaWFDaGFyYWN0ZXJpc3RpY0xl
Z2libGUoKQogI2RlZmluZSBBVk1lZGlhVHlwZVN1YnRpdGxlIGdldEFWTWVkaWFUeXBlU3VidGl0
bGUoKQogI2RlZmluZSBBVk1lZGlhQ2hhcmFjdGVyaXN0aWNDb250YWluc09ubHlGb3JjZWRTdWJ0
aXRsZXMgZ2V0QVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVz
KCkKKyNkZWZpbmUgQVZQbGF5ZXJJdGVtTGVnaWJsZU91dHB1dFRleHRTdHlsaW5nUmVzb2x1dGlv
blNvdXJjZUFuZFJ1bGVzT25seSBnZXRBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxp
bmdSZXNvbHV0aW9uU291cmNlQW5kUnVsZXNPbmx5KCkKICNlbmRpZgogCiAjZGVmaW5lIGtDTVRp
bWVaZXJvIGdldGtDTVRpbWVaZXJvKCkKQEAgLTM5MSw3ICszOTMsNiBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAjaWYgSEFWRShBVkZPVU5EQVRJT05fVEVYVF9U
UkFDS19TVVBQT1JUKQogICAgIFttX2F2UGxheWVyLmdldCgpIHNldEFwcGxpZXNNZWRpYVNlbGVj
dGlvbkNyaXRlcmlhQXV0b21hdGljYWxseTpZRVNdOwogI2VuZGlmCi0gICAgCiAKICAgICBpZiAo
bV9hdlBsYXllckl0ZW0pCiAgICAgICAgIFttX2F2UGxheWVyLmdldCgpIHJlcGxhY2VDdXJyZW50
SXRlbVdpdGhQbGF5ZXJJdGVtOm1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKQEAgLTQxMCw3ICs0MTEs
NyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKICAgICAvLyBD
cmVhdGUgdGhlIHBsYXllciBpdGVtIHNvIHdlIGNhbiBsb2FkIG1lZGlhIGRhdGEuIAogICAgIG1f
YXZQbGF5ZXJJdGVtLmFkb3B0TlMoW1tBVlBsYXllckl0ZW0gYWxsb2NdIGluaXRXaXRoQXNzZXQ6
bV9hdkFzc2V0LmdldCgpXSk7Ci0gICAgCisKICAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRl
ZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOm1fb2JqY09ic2VydmVyLmdldCgpIHNlbGVjdG9yOkBz
ZWxlY3RvcihkaWRFbmQ6KSBuYW1lOkFWUGxheWVySXRlbURpZFBsYXlUb0VuZFRpbWVOb3RpZmlj
YXRpb24gb2JqZWN0Om1fYXZQbGF5ZXJJdGVtLmdldCgpXTsKIAogICAgIGZvciAoTlNTdHJpbmcg
KmtleU5hbWUgaW4gaXRlbUtWT1Byb3BlcnRpZXMoKSkKQEAgLTg5Nyw2ICs4OTgsNyBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6CiAKICAgICAgICAgW21fbGVnaWJs
ZU91dHB1dC5nZXQoKSBzZXREZWxlZ2F0ZTptX29iamNPYnNlcnZlci5nZXQoKSBxdWV1ZTpkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpXTsKICAgICAgICAgW21fbGVnaWJsZU91dHB1dC5nZXQoKSBz
ZXRBZHZhbmNlSW50ZXJ2YWxGb3JEZWxlZ2F0ZUludm9jYXRpb246TlNUaW1lSW50ZXJ2YWxTaW5j
ZTE5NzBdOworICAgICAgICBbbV9sZWdpYmxlT3V0cHV0LmdldCgpIHNldFRleHRTdHlsaW5nUmVz
b2x1dGlvbjpBVlBsYXllckl0ZW1MZWdpYmxlT3V0cHV0VGV4dFN0eWxpbmdSZXNvbHV0aW9uU291
cmNlQW5kUnVsZXNPbmx5XTsKICAgICAgICAgW21fYXZQbGF5ZXJJdGVtLmdldCgpIGFkZE91dHB1
dDptX2xlZ2libGVPdXRwdXQuZ2V0KCldOwogICAgIH0KICNlbmRpZgpAQCAtMTIxMiw3ICsxMjE0
LDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOgogICAgICAgICBM
T0coTWVkaWEsICJNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25PYmpDOjpwcm9jZXNzVGV4
dFRyYWNrcyglcCkgLSBuaWwgbWVkaWFTZWxlY3Rpb25Hcm91cCIsIHRoaXMpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotCisgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQ
cml2YXRlQVZGPiA+IHJlbW92ZWRUZXh0VHJhY2tzID0gbV90ZXh0VHJhY2tzOwogICAgIE5TQXJy
YXkgKmxlZ2libGVPcHRpb25zID0gW0FWTWVkaWFTZWxlY3Rpb25Hcm91cCBwbGF5YWJsZU1lZGlh
U2VsZWN0aW9uT3B0aW9uc0Zyb21BcnJheTpbbGVnaWJsZUdyb3VwIG9wdGlvbnNdXTsKICAgICBm
b3IgKEFWTWVkaWFTZWxlY3Rpb25PcHRpb25UeXBlICpvcHRpb24gaW4gbGVnaWJsZU9wdGlvbnMp
IHsKQEAgLTEyMjgsMTMgKzEyMzAsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRh
dGlvbk9iakM6CiAgICAgICAgIGlmICghbmV3VHJhY2spCiAgICAgICAgICAgICBjb250aW51ZTsK
IAotICAgICAgICBpZiAoW1tvcHRpb24gbWVkaWFUeXBlXSBpc0VxdWFsVG9TdHJpbmc6QVZNZWRp
YVR5cGVTdWJ0aXRsZV0pIHsKLSAgICAgICAgICAgIGlmICghW29wdGlvbiBoYXNNZWRpYUNoYXJh
Y3RlcmlzdGljOkFWTWVkaWFDaGFyYWN0ZXJpc3RpY0NvbnRhaW5zT25seUZvcmNlZFN1YnRpdGxl
c10pIHsKLSAgICAgICAgICAgICAgICBBVk1lZGlhU2VsZWN0aW9uT3B0aW9uVHlwZSAqZm9yY2Vk
T25seU9wdGlvbiA9IFtvcHRpb24gYXNzb2NpYXRlZE1lZGlhU2VsZWN0aW9uT3B0aW9uSW5NZWRp
YVNlbGVjdGlvbkdyb3VwOmxlZ2libGVHcm91cF07Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmNl
ZE9ubHlPcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9CisgICAgICAgIGlmIChbW29wdGlvbiBtZWRpYVR5cGVdIGlzRXF1YWxUb1N0
cmluZzpBVk1lZGlhVHlwZVN1YnRpdGxlXSAmJiBbb3B0aW9uIGhhc01lZGlhQ2hhcmFjdGVyaXN0
aWM6QVZNZWRpYUNoYXJhY3RlcmlzdGljQ29udGFpbnNPbmx5Rm9yY2VkU3VidGl0bGVzXSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG1fdGV4dFRyYWNrcy5hcHBlbmQoSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSh0aGlzLCBvcHRpb24pKTsKICAgICB9CkBA
IC0xMjc1LDYgKzEyNzIsOSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9i
akM6CiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEN1cnJlbnRU
cmFjayhJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGICp0cmFjaykKIHsKICAgICBJbmJhbmRUZXh0
VHJhY2tQcml2YXRlQVZGT2JqQyogdHJhY2tQcml2YXRlID0gc3RhdGljX2Nhc3Q8SW5iYW5kVGV4
dFRyYWNrUHJpdmF0ZUFWRk9iakMqPih0cmFjayk7CisgICAgaWYgKG1fY3VycmVudFRyYWNrID09
IHRyYWNrUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQVZNZWRpYVNlbGVjdGlvbk9w
dGlvblR5cGUgKm1lZGlhU2VsZWN0aW9uT3B0aW9uID0gdHJhY2tQcml2YXRlID8gdHJhY2tQcml2
YXRlLT5tZWRpYVNlbGVjdGlvbk9wdGlvbigpIDogMDsKIAogICAgIExPRyhNZWRpYSwgIk1lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbk9iakM6OnNldEN1cnJlbnRUcmFjayglcCkgLSBzZWxl
Y3RpbmcgbWVkaWEgb3B0aW9uICVwIiwgdGhpcywgbWVkaWFTZWxlY3Rpb25PcHRpb24pOwpAQCAt
MTQyNCw2ICsxNDI0LDggQEAgLSAodm9pZClsZWdpYmxlT3V0cHV0OihpZClvdXRwdXQgZGlkT3V0
cAogICAgICAgICByZXR1cm47CiAKICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFp
bl9xdWV1ZSgpLCBeeworICAgICAgICBpZiAoIW1fY2FsbGJhY2spCisgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIG1fY2FsbGJhY2stPnByb2Nlc3NDdWUoc3RyaW5ncywgQ01UaW1lR2V0U2Vj
b25kcyhpdGVtVGltZSkpOwogICAgIH0pOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>