<?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>64333</bug_id>
          
          <creation_ts>2011-07-11 18:01:49 -0700</creation_ts>
          <short_desc>Rename AutoFill -&gt; Autofill</short_desc>
          <delta_ts>2011-07-14 09:43:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Sherman">isherman</reporter>
          <assigned_to name="Ilya Sherman">isherman</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>isherman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>435353</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Sherman">isherman</who>
    <bug_when>2011-07-11 18:01:49 -0700</bug_when>
    <thetext>Rename AutoFill -&gt; Autofill</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435357</commentid>
    <comment_count>1</comment_count>
      <attachid>100397</attachid>
    <who name="Ilya Sherman">isherman</who>
    <bug_when>2011-07-11 18:04:14 -0700</bug_when>
    <thetext>Created attachment 100397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435398</commentid>
    <comment_count>2</comment_count>
      <attachid>100397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-11 18:25:46 -0700</bug_when>
    <thetext>Comment on attachment 100397
Patch

Attachment 100397 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9021003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435462</commentid>
    <comment_count>3</comment_count>
      <attachid>100397</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-11 20:38:33 -0700</bug_when>
    <thetext>Comment on attachment 100397
Patch

Attachment 100397 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9021035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435719</commentid>
    <comment_count>4</comment_count>
      <attachid>100397</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-07-12 10:18:04 -0700</bug_when>
    <thetext>Comment on attachment 100397
Patch

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

&gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:926
&gt; +    if &apos;/wtf/&apos; in filename:

wait, is this change really intended to be part of this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436102</commentid>
    <comment_count>5</comment_count>
      <attachid>100594</attachid>
    <who name="Ilya Sherman">isherman</who>
    <bug_when>2011-07-12 17:23:52 -0700</bug_when>
    <thetext>Created attachment 100594
Full diff, I hope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436104</commentid>
    <comment_count>6</comment_count>
    <who name="Ilya Sherman">isherman</who>
    <bug_when>2011-07-12 17:27:19 -0700</bug_when>
    <thetext>Re-uploaded the patch by hand, including the renamed files that &quot;webkit-patch upload&quot; dropped.  Sorry for not noticing that sooner.

(In reply to comment #4)
&gt; (From update of attachment 100397 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100397&amp;action=review
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:926
&gt; &gt; +    if &apos;/wtf/&apos; in filename:
&gt; 
&gt; wait, is this change really intended to be part of this patch?

Yes.  I can split this out to a separate patch if preferable; but the style checker was (incorrectly) complaining that the header guards in the renamed files were incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436476</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-07-13 09:47:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Re-uploaded the patch by hand, including the renamed files that &quot;webkit-patch upload&quot; dropped.  Sorry for not noticing that sooner.
&gt; 
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 100397 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100397&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Tools/Scripts/webkitpy/style/checkers/cpp.py:926
&gt; &gt; &gt; +    if &apos;/wtf/&apos; in filename:
&gt; &gt; 
&gt; &gt; wait, is this change really intended to be part of this patch?
&gt; 
&gt; Yes.  I can split this out to a separate patch if preferable; but the style checker was (incorrectly) complaining that the header guards in the renamed files were incorrect.

^^^ Yes, it is usually good to separate out separate issues into separate patches.  In this case, I&apos;m not the best reviewer for anything under webkitpy, and the bugzilla does not make it easy to request review from multiple people.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436774</commentid>
    <comment_count>8</comment_count>
      <attachid>100732</attachid>
    <who name="Ilya Sherman">isherman</who>
    <bug_when>2011-07-13 17:01:49 -0700</bug_when>
    <thetext>Created attachment 100732
patch

Split out the style checker change to a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437133</commentid>
    <comment_count>9</comment_count>
      <attachid>100732</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 09:43:05 -0700</bug_when>
    <thetext>Comment on attachment 100732
patch

Clearing flags on attachment: 100732

Committed r91004: &lt;http://trac.webkit.org/changeset/91004&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437134</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-14 09:43:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100397</attachid>
            <date>2011-07-11 18:04:14 -0700</date>
            <delta_ts>2011-07-12 17:23:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64333-20110711180413.patch</filename>
            <type>text/plain</type>
            <size>29434</size>
            <attacher name="Ilya Sherman">isherman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA3NTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
OTA4MTAzYTRkODNmNjAyNTY4ZTY1NzBkYzQ2OWZiMjkxOGFjZWYxZC4uYTA1OWVkYjgyY2UwMTZi
YmU3ZDdhYzFjZTg3MDNkMWZjYzk1Y2IxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw5MiBAQAorMjAxMS0wNy0xMSAgSWx5YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBBdXRvRmlsbCAtPiBBdXRvZmlsbCBhbmQgYXV0b0Zp
bGwgLT4gYXV0b2ZpbGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0MzMzCisgICAgICAgIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9p
c3N1ZXMvZGV0YWlsP2lkPTcyNzU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJBdXRvZmls
bENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvZmlsbENsaWVudDo6ZGlkQWNjZXB0
QXV0b2ZpbGxTdWdnZXN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6
OmRpZFNlbGVjdEF1dG9maWxsU3VnZ2VzdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkF1dG9m
aWxsQ2xpZW50OjpkaWRDbGVhckF1dG9maWxsU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQXV0b2ZpbGxDbGllbnQ6OnJlbW92ZUF1dG9jb21wbGV0ZVN1Z2dlc3Rpb24pOgorICAgICAg
ICAoV2ViS2l0OjpXZWJBdXRvZmlsbENsaWVudDo6dGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6OnRleHRGaWVsZERpZEVuZEVkaXRp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvZmlsbENsaWVudDo6dGV4dEZpZWxkRGlkQ2hh
bmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6OnRleHRGaWVsZERpZFJl
Y2VpdmVLZXlEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6On5XZWJB
dXRvZmlsbENsaWVudCk6CisgICAgICAgICogcHVibGljL1dlYk5vZGUuaDoKKyAgICAgICAgKiBw
dWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpBdXRvZmlsbFBv
cHVwTWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50
Ojp+QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBv
cHVwTWVudUNsaWVudDo6Z2V0U3VnZ2VzdGlvbnNDb3VudCk6CisgICAgICAgIChXZWJLaXQ6OkF1
dG9maWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6
QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldExhYmVsKToKKyAgICAgICAgKFdlYktpdDo6QXV0
b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldEljb24pOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmls
bFBvcHVwTWVudUNsaWVudDo6cmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Y2FuUmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgp
OgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNlbGVjdGlvbkNo
YW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0
aW9uQ2xlYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojpp
dGVtVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVt
TGFiZWwpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUlj
b24pOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUlzRW5h
YmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtU3R5
bGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6bWVudVN0eWxl
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRp
bmdMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVu
dFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50
Ojpwb3B1cERpZEhpZGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVu
dDo6aXRlbUlzU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVD
bGllbnQ6Oml0ZW1Jc1dhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9w
dXBNZW51Q2xpZW50Ojpob3N0V2luZG93KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxs
UG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3Rpb25zKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2Zp
bGxQb3B1cE1lbnVDbGllbnQ6OmNvbnZlcnRMaXN0SW5kZXhUb0ludGVybmFsSW5kZXgpOgorICAg
ICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0V2ViVmlldyk6CisgICAg
ICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojp0ZXh0RmllbGRTdHlsZSk6Cisg
ICAgICAgICogc3JjL0F1dG9maWxsUG9wdXBNZW51Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6
OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVG9vbFRpcCk6CisgICAgICAgIChXZWJLaXQ6
OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtQWNjZXNzaWJpbGl0eVRleHQpOgorICAgICAg
ICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Y2xpZW50SW5zZXRMZWZ0KToKKyAg
ICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudEluc2V0UmlnaHQp
OgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6bGlzdFNpemUpOgor
ICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0ZWRJbmRleCk6
CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSXNMYWJlbCk6
CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSXNTZWxlY3Rl
ZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpzaG91bGRQb3BP
dmVyKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OnZhbHVlU2hv
dWxkQ2hhbmdlT25Ib3RUcmFjayk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51
Q2xpZW50OjpnZXRUZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudDo6Z2V0U2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9w
dXBNZW51Q2xpZW50OjpzZXRTZWxlY3RlZEluZGV4KToKKyAgICAgICAgKiBzcmMvRWRpdG9yQ2xp
ZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OnRleHRGaWVs
ZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6OkVkaXRvckNsaWVudEltcGw6OnRl
eHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBs
Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAgICAoV2ViS2l0OjpFZGl0b3JDbGll
bnRJbXBsOjpkb0F1dG9maWxsKToKKyAgICAgICAgKFdlYktpdDo6RWRpdG9yQ2xpZW50SW1wbDo6
ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAgICAgKiBzcmMvV2ViSW5wdXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRFbGVtZW50OjpzZXRBdXRvZmlsbGVk
KToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJW
aWV3SW1wbDo6c2V0QXV0b2ZpbGxDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1w
bDo6V2ViVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6bW91c2VEb3du
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9jb21wbGV0ZUhhbmRsZUtleUV2
ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmhpZGVBdXRvZmlsbFBvcHVwKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEZvY3VzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OmFwcGx5QXV0b2ZpbGxTdWdnZXN0aW9ucyk6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpoaWRlUG9wdXBzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0lt
cGw6OnJlZnJlc2hBdXRvZmlsbFBvcHVwKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9maWxsQ2xpZW50KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9maWxsUG9wdXBEaWRIaWRlKToKKwogMjAxMS0wNy0w
OCAgTmF0ZSBDaGFwaW4gIDxqYXBoZXRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIENoZWNrIGFj
dGl2ZURvY3VtZW50TG9hZGVyKCkgaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAy
YTM0NmQwOTE2NmQ5Yzg3YjgyOWRmMmY1ZGVmZGZjOWVjZGUxZjEyLi44ZWE0MmZiOWJlNmY5ZWNk
ZTdiZmQ0ZGY3M2ZiMzI4OTFhNDk1MDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF1ZGlvQnVzLmgnLAogICAgICAgICAgICAg
ICAgICdwdWJsaWMvV2ViQXVkaW9EZXZpY2UuaCcsCi0gICAgICAgICAgICAgICAgJ3B1YmxpYy9X
ZWJBdXRvRmlsbENsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkF1dG9maWxs
Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmluZGluZ3MuaCcsCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iRGF0YS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkJsb2JSZWdpc3RyeS5oJywKQEAgLTMxMCw4ICszMTAsOCBAQAogICAgICAgICAgICAg
ICAgICdzcmMvQXN5bmNGaWxlV3JpdGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0F1
ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5oJywKLSAgICAgICAgICAgICAgICAnc3JjL0F1dG9GaWxs
UG9wdXBNZW51Q2xpZW50LmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9BdXRvRmlsbFBvcHVw
TWVudUNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL0F1dG9maWxsUG9wdXBNZW51Q2xp
ZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5o
JywKICAgICAgICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlzdENocm9taXVtLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJOb2RlLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJOb2RlLmgKaW5kZXggYzZiYWExMmIzOGI3MTI2NGU5OGFmMDY0Njk4NTA1MjU1
Yzc3OTlmYS4uZWQ4MGI3ZDU5MWJjYWMyNTAzYjBiODQxYzU4NjViMWI1ZWZlY2FlNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUuaApAQCAtMzUsNiArMzUsOSBAQAogI2lu
Y2x1ZGUgIldlYlByaXZhdGVQdHIuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKIAorLy8gVE9E
Tyhpc2hlcm1hbik6IFJlbW92ZSB0aGlzIG9uY2UgdGhlIENocm9taXVtIHNpZGUgaXMgdXBkYXRl
ZC4KKyNkZWZpbmUgQ1JCVUdfNzI3NThfRklYRUQKKwogbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFz
cyBOb2RlOyB9CiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmlldy5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVmlldy5oCmluZGV4IDRhM2FiNTgzOTI2OGI2MTE4MzAxMWYyZDFkODdiYzFhMWMzNDlj
MmEuLjkxNDhkNzAzYmFmOWRkOGE0ZjA0OGE2NmIzNjllMjAxZTVlZDI5MmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKQEAgLTQwLDcgKzQwLDcgQEAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0OwotY2xhc3MgV2ViQXV0
b0ZpbGxDbGllbnQ7CitjbGFzcyBXZWJBdXRvZmlsbENsaWVudDsKIGNsYXNzIFdlYkRldlRvb2xz
QWdlbnQ7CiBjbGFzcyBXZWJEZXZUb29sc0FnZW50Q2xpZW50OwogY2xhc3MgV2ViRHJhZ0RhdGE7
CkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZU1h
aW5GcmFtZShXZWJGcmFtZUNsaWVudCopID0gMDsKIAogICAgIC8vIEluaXRpYWxpemVzIHRoZSB2
YXJpb3VzIGNsaWVudCBpbnRlcmZhY2VzLgotICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvRmlsbENs
aWVudChXZWJBdXRvRmlsbENsaWVudCopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b2Zp
bGxDbGllbnQoV2ViQXV0b2ZpbGxDbGllbnQqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldERl
dlRvb2xzQWdlbnRDbGllbnQoV2ViRGV2VG9vbHNBZ2VudENsaWVudCopID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UGVybWlzc2lvbkNsaWVudChXZWJQZXJtaXNzaW9uQ2xpZW50KikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVsbENoZWNrQ2xpZW50KFdlYlNwZWxsQ2hlY2tDbGllbnQq
KSA9IDA7CkBAIC0yNzcsMTYgKzI3NywxNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlPYmplY3QoKSA9IDA7CiAKIAotICAgIC8vIEF1
dG9GaWxsICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIC8vIEF1dG9maWxsICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgLy8gTm90aWZpZXMgdGhlIFdl
YlZpZXcgdGhhdCBBdXRvRmlsbCBzdWdnZXN0aW9ucyBhcmUgYXZhaWxhYmxlIGZvciBhIG5vZGUu
CisgICAgLy8gTm90aWZpZXMgdGhlIFdlYlZpZXcgdGhhdCBBdXRvZmlsbCBzdWdnZXN0aW9ucyBh
cmUgYXZhaWxhYmxlIGZvciBhIG5vZGUuCiAgICAgLy8gfHVuaXF1ZUlEc3wgaXMgYSB2ZWN0b3Ig
b2YgSURzIHRoYXQgcmVwcmVzZW50IHRoZSB1bmlxdWUgSUQgb2YgZWFjaAotICAgIC8vIEF1dG9G
aWxsIHByb2ZpbGUgaW4gdGhlIHN1Z2dlc3Rpb25zIHBvcHVwLiAgSWYgYSB1bmlxdWUgSUQgaXMg
MCwgdGhlbiB0aGUKLSAgICAvLyBjb3JyZXNwb25kaW5nIHN1Z2dlc3Rpb24gY29tZXMgZnJvbSBB
dXRvY29tcGxldGUgcmF0aGVyIHRoYW4gQXV0b0ZpbGwuCisgICAgLy8gQXV0b2ZpbGwgcHJvZmls
ZSBpbiB0aGUgc3VnZ2VzdGlvbnMgcG9wdXAuIElmIGEgdW5pcXVlIElEIGlzIDAsIHRoZW4gdGhl
CisgICAgLy8gY29ycmVzcG9uZGluZyBzdWdnZXN0aW9uIGNvbWVzIGZyb20gQXV0b2NvbXBsZXRl
IHJhdGhlciB0aGFuIEF1dG9maWxsLgogICAgIC8vIElmIGEgdW5pcXVlIElEIGlzIG5lZ2F0aXZl
LCB0aGVuIHRoZSBjb3JyZXNwb25kaW5nICJzdWdnZXN0aW9uIiBpcwotICAgIC8vIGFjdHVhbGx5
IGEgdXNlci1mYWNpbmcgd2FybmluZywgZS5nLiBleHBsYWluaW5nIHdoeSBBdXRvRmlsbCBpcwor
ICAgIC8vIGFjdHVhbGx5IGEgdXNlci1mYWNpbmcgd2FybmluZywgZS5nLiBleHBsYWluaW5nIHdo
eSBBdXRvZmlsbCBpcwogICAgIC8vIHVuYXZhaWxhYmxlIGZvciB0aGUgY3VycmVudCBmb3JtLgot
ICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1dG9GaWxsU3VnZ2VzdGlvbnMoCisgICAgdmlydHVhbCB2
b2lkIGFwcGx5QXV0b2ZpbGxTdWdnZXN0aW9ucygKICAgICAgICAgY29uc3QgV2ViTm9kZSYsCiAg
ICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKICAgICAgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0VkaXRvckNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAKaW5kZXggMTAyZmVmMDRlMGRmZmQ2ZGNhMmE0YmE5
NWIxZTViY2Y3MjMzYzhkNi4uY2E4ZDRmOTllOTdjMThjY2Y2MTBkNmJmMmRiYjkyMTQxMzczYTdl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5j
cHAKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJTcGVsbENoZWNrZXIuaCIKIAogI2luY2x1
ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJBdXRvRmlsbENsaWVudC5o
IgorI2luY2x1ZGUgIldlYkF1dG9maWxsQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViRWRpdGluZ0Fj
dGlvbi5oIgogI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVu
dC5oIgpAQCAtNjY0LDE1ICs2NjQsMTUgQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBsOjpoYW5kbGVJ
bnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCoga2V5RXZlbnQpCiB2b2lkIEVkaXRvckNs
aWVudEltcGw6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogewog
ICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChl
bGVtZW50KTsKLSAgICBpZiAobV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpICYmIGlucHV0RWxl
bWVudCkKLSAgICAgICAgbV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpLT50ZXh0RmllbGREaWRC
ZWdpbkVkaXRpbmcoV2ViSW5wdXRFbGVtZW50KGlucHV0RWxlbWVudCkpOworICAgIGlmIChtX3dl
YlZpZXctPmF1dG9maWxsQ2xpZW50KCkgJiYgaW5wdXRFbGVtZW50KQorICAgICAgICBtX3dlYlZp
ZXctPmF1dG9maWxsQ2xpZW50KCktPnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhXZWJJbnB1dEVs
ZW1lbnQoaW5wdXRFbGVtZW50KSk7CiB9CiAKIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6dGV4dEZp
ZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50KQogewogICAgIEhUTUxJbnB1dEVsZW1l
bnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAo
bV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpICYmIGlucHV0RWxlbWVudCkKLSAgICAgICAgbV93
ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKFdlYklucHV0
RWxlbWVudChpbnB1dEVsZW1lbnQpKTsKKyAgICBpZiAobV93ZWJWaWV3LT5hdXRvZmlsbENsaWVu
dCgpICYmIGlucHV0RWxlbWVudCkKKyAgICAgICAgbV93ZWJWaWV3LT5hdXRvZmlsbENsaWVudCgp
LT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKFdlYklucHV0RWxlbWVudChpbnB1dEVsZW1lbnQpKTsK
IAogICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0IGZvY3VzIHdhcyBsb3N0LiAgQmUgY2FyZWZ1bCB3
aXRoIHRoaXMsIGl0J3MgYWxzbyBzZW50CiAgICAgLy8gd2hlbiB0aGUgcGFnZSBpcyBiZWluZyBj
bG9zZWQuCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBsOjp0ZXh0Rmll
bGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgbV9hdXRvZmlsbFRpbWVyLnN0
b3AoKTsKIAogICAgIC8vIEhpZGUgYW55IHNob3dpbmcgcG9wdXAuCi0gICAgbV93ZWJWaWV3LT5o
aWRlQXV0b0ZpbGxQb3B1cCgpOworICAgIG1fd2ViVmlldy0+aGlkZUF1dG9maWxsUG9wdXAoKTsK
IAogICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuOyAvLyBUaGUg
cGFnZSBpcyBnZXR0aW5nIGNsb3NlZCwgZG9uJ3QgZmlsbCB0aGUgcGFzc3dvcmQuCkBAIC03MDYs
OCArNzA2LDggQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBsOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0Rmll
bGQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NFUlQoZWxlbWVudC0+aGFzTG9jYWxOYW1l
KEhUTUxOYW1lczo6aW5wdXRUYWcpKTsKICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgaWYgKG1f
d2ViVmlldy0+YXV0b0ZpbGxDbGllbnQoKSkKLSAgICAgICAgbV93ZWJWaWV3LT5hdXRvRmlsbENs
aWVudCgpLT50ZXh0RmllbGREaWRDaGFuZ2UoV2ViSW5wdXRFbGVtZW50KGlucHV0RWxlbWVudCkp
OworICAgIGlmIChtX3dlYlZpZXctPmF1dG9maWxsQ2xpZW50KCkpCisgICAgICAgIG1fd2ViVmll
dy0+YXV0b2ZpbGxDbGllbnQoKS0+dGV4dEZpZWxkRGlkQ2hhbmdlKFdlYklucHV0RWxlbWVudChp
bnB1dEVsZW1lbnQpKTsKIAogICAgIC8vIE5vdGUgdGhhdCB3ZSBvbmx5IHNob3cgdGhlIGF1dG9m
aWxsIHBvcHVwIGluIHRoaXMgY2FzZSBpZiB0aGUgY2FyZXQgaXMgYXQKICAgICAvLyB0aGUgZW5k
LiAgVGhpcyBtYXRjaGVzIEZpcmVGb3ggYW5kIFNhZmFyaSBidXQgbm90IElFLgpAQCAtNzc4LDcg
Kzc3OCw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6ZG9BdXRvZmlsbChUaW1lcjxFZGl0b3JD
bGllbnRJbXBsPiogdGltZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICYmIGlucHV0RWxlbWVu
dC0+c2VsZWN0aW9uRW5kKCkgPT0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZS5sZW5ndGgoKSk7CiAK
ICAgICBpZiAoKCFhcmdzLT5hdXRvZmlsbE9uRW1wdHlWYWx1ZSAmJiB2YWx1ZS5pc0VtcHR5KCkp
IHx8ICFpc0NhcmV0QXRFbmQpIHsKLSAgICAgICAgbV93ZWJWaWV3LT5oaWRlQXV0b0ZpbGxQb3B1
cCgpOworICAgICAgICBtX3dlYlZpZXctPmhpZGVBdXRvZmlsbFBvcHVwKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTgxMCw4ICs4MTAsOCBAQCBib29sIEVkaXRvckNsaWVudEltcGw6
OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVtZW50KiBlbGVtZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5w
dXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmIChtX3dlYlZpZXctPmF1dG9GaWxsQ2xpZW50KCkg
JiYgaW5wdXRFbGVtZW50KSB7Ci0gICAgICAgIG1fd2ViVmlldy0+YXV0b0ZpbGxDbGllbnQoKS0+
dGV4dEZpZWxkRGlkUmVjZWl2ZUtleURvd24oV2ViSW5wdXRFbGVtZW50KGlucHV0RWxlbWVudCks
CisgICAgaWYgKG1fd2ViVmlldy0+YXV0b2ZpbGxDbGllbnQoKSAmJiBpbnB1dEVsZW1lbnQpIHsK
KyAgICAgICAgbV93ZWJWaWV3LT5hdXRvZmlsbENsaWVudCgpLT50ZXh0RmllbGREaWRSZWNlaXZl
S2V5RG93bihXZWJJbnB1dEVsZW1lbnQoaW5wdXRFbGVtZW50KSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLZXlib2Fy
ZEV2ZW50QnVpbGRlcigqZXZlbnQpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDEzNDE2YmUxZjA3ZjEwZTYzNGQ0YmZm
NjlmYWEzZmFjNjhkMjU5MjAuLjVlN2ExY2ZiZTZmYTU5MDcxZTAzOWRjYjFmOWU1YzI4N2Y2YWM0
OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNw
cApAQCAtMTIwLDkgKzEyMCw5IEBAIGJvb2wgV2ViSW5wdXRFbGVtZW50Ojppc0F1dG9maWxsZWQo
KSBjb25zdAogICAgIHJldHVybiBjb25zdFVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5pc0F1
dG9maWxsZWQoKTsKIH0KIAotdm9pZCBXZWJJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQoYm9v
bCBhdXRvRmlsbGVkKQordm9pZCBXZWJJbnB1dEVsZW1lbnQ6OnNldEF1dG9maWxsZWQoYm9vbCBh
dXRvZmlsbGVkKQogewotICAgIHVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5zZXRBdXRvZmls
bGVkKGF1dG9GaWxsZWQpOworICAgIHVud3JhcDxIVE1MSW5wdXRFbGVtZW50PigpLT5zZXRBdXRv
ZmlsbGVkKGF1dG9maWxsZWQpOwogfQogCiB2b2lkIFdlYklucHV0RWxlbWVudDo6c2V0U2VsZWN0
aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVmlld0ltcGwuY3BwCmluZGV4IDI0OTczMzRiNDlhNTAyNGJlNjZlYjBjYjI3YmRiNjlhYzgx
YWQ0NTIuLmNkOTk1ZDI5MTY5YWY4MjBlYjhlZTA1MjM5ZWI3NjE2NTZjMjliNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCi0jaW5jbHVk
ZSAiQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCIKKyNpbmNsdWRlICJBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudC5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9y
d2FyZExpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKQEAgLTk5
LDcgKzk5LDcgQEAKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2luY2x1ZGUg
IlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNpbmNsdWRl
ICJXZWJBdXRvRmlsbENsaWVudC5oIgorI2luY2x1ZGUgIldlYkF1dG9maWxsQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0Fn
ZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkRyYWdEYXRhLmgiCkBAIC0yMDUsNyArMjA1LDcg
QEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uTW92ZSk7CiBDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKERyYWdPcGVyYXRpb25EZWxldGUpOwogQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uRXZlcnkpOwogCi1zdGF0aWMgY29uc3Qg
UG9wdXBDb250YWluZXJTZXR0aW5ncyBhdXRvRmlsbFBvcHVwU2V0dGluZ3MgPSB7CitzdGF0aWMg
Y29uc3QgUG9wdXBDb250YWluZXJTZXR0aW5ncyBhdXRvZmlsbFBvcHVwU2V0dGluZ3MgPSB7CiAg
ICAgZmFsc2UsIC8vIHNldFRleHRPbkluZGV4Q2hhbmdlCiAgICAgZmFsc2UsIC8vIGFjY2VwdE9u
QWJhbmRvbgogICAgIHRydWUsIC8vIGxvb3BTZWxlY3Rpb25OYXZpZ2F0aW9uCkBAIC0yNzUsOSAr
Mjc1LDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6aW5pdGlhbGl6ZU1haW5GcmFtZShXZWJGcmFtZUNs
aWVudCogZnJhbWVDbGllbnQpCiAgICAgU2VjdXJpdHlPcmlnaW46OnNldExvY2FsTG9hZFBvbGlj
eShTZWN1cml0eU9yaWdpbjo6QWxsb3dMb2NhbExvYWRzRm9yTG9jYWxPbmx5KTsKIH0KIAotdm9p
ZCBXZWJWaWV3SW1wbDo6c2V0QXV0b0ZpbGxDbGllbnQoV2ViQXV0b0ZpbGxDbGllbnQqIGF1dG9G
aWxsQ2xpZW50KQordm9pZCBXZWJWaWV3SW1wbDo6c2V0QXV0b2ZpbGxDbGllbnQoV2ViQXV0b2Zp
bGxDbGllbnQqIGF1dG9maWxsQ2xpZW50KQogewotICAgIG1fYXV0b0ZpbGxDbGllbnQgPSBhdXRv
RmlsbENsaWVudDsKKyAgICBtX2F1dG9maWxsQ2xpZW50ID0gYXV0b2ZpbGxDbGllbnQ7CiB9CiAK
IHZvaWQgV2ViVmlld0ltcGw6OnNldERldlRvb2xzQWdlbnRDbGllbnQoV2ViRGV2VG9vbHNBZ2Vu
dENsaWVudCogZGV2VG9vbHNDbGllbnQpIApAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OnNldFNwZWxsQ2hlY2tDbGllbnQoV2ViU3BlbGxDaGVja0NsaWVudCogc3BlbGxDaGVj
a0NsaWVudCkKIAogV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQqIGNsaWVu
dCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fYXV0b0ZpbGxDbGllbnQoMCkKKyAg
ICAsIG1fYXV0b2ZpbGxDbGllbnQoMCkKICAgICAsIG1fcGVybWlzc2lvbkNsaWVudCgwKQogICAg
ICwgbV9zcGVsbENoZWNrQ2xpZW50KDApCiAgICAgLCBtX2Nocm9tZUNsaWVudEltcGwodGhpcykK
QEAgLTMyMyw4ICszMjMsOCBAQCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmlld0NsaWVu
dCogY2xpZW50KQogICAgICwgbV9pbWVBY2NlcHRFdmVudHModHJ1ZSkKICAgICAsIG1fb3BlcmF0
aW9uc0FsbG93ZWQoV2ViRHJhZ09wZXJhdGlvbk5vbmUpCiAgICAgLCBtX2RyYWdPcGVyYXRpb24o
V2ViRHJhZ09wZXJhdGlvbk5vbmUpCi0gICAgLCBtX2F1dG9GaWxsUG9wdXBTaG93aW5nKGZhbHNl
KQotICAgICwgbV9hdXRvRmlsbFBvcHVwKDApCisgICAgLCBtX2F1dG9maWxsUG9wdXBTaG93aW5n
KGZhbHNlKQorICAgICwgbV9hdXRvZmlsbFBvcHVwKDApCiAgICAgLCBtX2lzVHJhbnNwYXJlbnQo
ZmFsc2UpCiAgICAgLCBtX3RhYnNUb0xpbmtzKGZhbHNlKQogICAgICwgbV9kcmFnU2Nyb2xsVGlt
ZXIoYWRvcHRQdHIobmV3IERyYWdTY3JvbGxUaW1lcikpCkBAIC00NjAsNyArNDYwLDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogICAg
ICAgICAgICAgbV9tb3VzZUNhcHR1cmVOb2RlID0gaGl0Tm9kZTsKIAogICAgICAgICAvLyBJZiBh
IHRleHQgZmllbGQgdGhhdCBoYXMgZm9jdXMgaXMgY2xpY2tlZCBhZ2Fpbiwgd2Ugc2hvdWxkIGRp
c3BsYXkgdGhlCi0gICAgICAgIC8vIEF1dG9GaWxsIHBvcHVwLgorICAgICAgICAvLyBBdXRvZmls
bCBwb3B1cC4KICAgICAgICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNlZFdlYkNv
cmVOb2RlKCk7CiAgICAgICAgIGlmIChmb2N1c2VkTm9kZS5nZXQoKSAmJiB0b0hUTUxJbnB1dEVs
ZW1lbnQoZm9jdXNlZE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoaGl0Tm9kZSA9PSBm
b2N1c2VkTm9kZSkgewpAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6Om1vdXNl
RG93bihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKICAgICAgICAgUGxhdGZvcm1Nb3VzZUV2
ZW50QnVpbGRlcihtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLCBldmVudCkpOwogCiAgICAg
aWYgKGNsaWNrZWROb2RlLmdldCgpICYmIGNsaWNrZWROb2RlID09IGZvY3VzZWRXZWJDb3JlTm9k
ZSgpKSB7Ci0gICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUgQXV0b0Zp
bGwgcG9wdXAuCisgICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUgQXV0
b2ZpbGwgcG9wdXAuCiAgICAgICAgIHN0YXRpY19jYXN0PEVkaXRvckNsaWVudEltcGwqPihtX3Bh
Z2UtPmVkaXRvckNsaWVudCgpKS0+CiAgICAgICAgICAgICBzaG93Rm9ybUF1dG9maWxsRm9yTm9k
ZShjbGlja2VkTm9kZS5nZXQoKSk7CiAgICAgfQpAQCAtNjU1LDcgKzY1NSw3IEBAIGJvb2wgV2Vi
Vmlld0ltcGw6OmtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogCiBib29s
IFdlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2Fy
ZEV2ZW50JiBldmVudCkKIHsKLSAgICBpZiAoIW1fYXV0b0ZpbGxQb3B1cFNob3dpbmcKKyAgICBp
ZiAoIW1fYXV0b2ZpbGxQb3B1cFNob3dpbmcKICAgICAgICAgLy8gSG9tZSBhbmQgRW5kIHNob3Vs
ZCBiZSBsZWZ0IHRvIHRoZSB0ZXh0IGZpZWxkIHRvIHByb2Nlc3MuCiAgICAgICAgIHx8IGV2ZW50
LndpbmRvd3NLZXlDb2RlID09IFZLRVlfSE9NRQogICAgICAgICB8fCBldmVudC53aW5kb3dzS2V5
Q29kZSA9PSBWS0VZX0VORCkKQEAgLTY2Myw3ICs2NjMsNyBAQCBib29sIFdlYlZpZXdJbXBsOjph
dXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkK
IAogICAgIC8vIFByZXNzaW5nIGRlbGV0ZSB0cmlnZ2VycyB0aGUgcmVtb3ZhbCBvZiB0aGUgc2Vs
ZWN0ZWQgc3VnZ2VzdGlvbiBmcm9tIHRoZSBEQi4KICAgICBpZiAoZXZlbnQud2luZG93c0tleUNv
ZGUgPT0gVktFWV9ERUxFVEUKLSAgICAgICAgJiYgbV9hdXRvRmlsbFBvcHVwLT5zZWxlY3RlZElu
ZGV4KCkgIT0gLTEpIHsKKyAgICAgICAgJiYgbV9hdXRvZmlsbFBvcHVwLT5zZWxlY3RlZEluZGV4
KCkgIT0gLTEpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGZvY3VzZWRXZWJDb3JlTm9kZSgpOwog
ICAgICAgICBpZiAoIW5vZGUgfHwgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9O
T0RFKSkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02NzUsMjUgKzY3
NSwyNSBAQCBib29sIFdlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25z
dCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gbV9hdXRvRmlsbFBvcHVwLT5z
ZWxlY3RlZEluZGV4KCk7CisgICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gbV9hdXRvZmlsbFBv
cHVwLT5zZWxlY3RlZEluZGV4KCk7CiAKLSAgICAgICAgaWYgKCFtX2F1dG9GaWxsUG9wdXBDbGll
bnQtPmNhblJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KHNlbGVjdGVkSW5kZXgpKQorICAgICAgICBp
ZiAoIW1fYXV0b2ZpbGxQb3B1cENsaWVudC0+Y2FuUmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2Vs
ZWN0ZWRJbmRleCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgV2ViU3Ry
aW5nIG5hbWUgPSBXZWJJbnB1dEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+
KGVsZW1lbnQpKS5uYW1lRm9yQXV0b2ZpbGwoKTsKLSAgICAgICAgV2ViU3RyaW5nIHZhbHVlID0g
bV9hdXRvRmlsbFBvcHVwQ2xpZW50LT5pdGVtVGV4dChzZWxlY3RlZEluZGV4KTsKLSAgICAgICAg
bV9hdXRvRmlsbENsaWVudC0+cmVtb3ZlQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbihuYW1lLCB2YWx1
ZSk7CisgICAgICAgIFdlYlN0cmluZyB2YWx1ZSA9IG1fYXV0b2ZpbGxQb3B1cENsaWVudC0+aXRl
bVRleHQoc2VsZWN0ZWRJbmRleCk7CisgICAgICAgIG1fYXV0b2ZpbGxDbGllbnQtPnJlbW92ZUF1
dG9jb21wbGV0ZVN1Z2dlc3Rpb24obmFtZSwgdmFsdWUpOwogICAgICAgICAvLyBVcGRhdGUgdGhl
IGVudHJpZXMgaW4gdGhlIGN1cnJlbnRseSBzaG93aW5nIHBvcHVwIHRvIHJlZmxlY3QgdGhlCiAg
ICAgICAgIC8vIGRlbGV0aW9uLgotICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPnJlbW92
ZVN1Z2dlc3Rpb25BdEluZGV4KHNlbGVjdGVkSW5kZXgpOwotICAgICAgICByZWZyZXNoQXV0b0Zp
bGxQb3B1cCgpOworICAgICAgICBtX2F1dG9maWxsUG9wdXBDbGllbnQtPnJlbW92ZVN1Z2dlc3Rp
b25BdEluZGV4KHNlbGVjdGVkSW5kZXgpOworICAgICAgICByZWZyZXNoQXV0b2ZpbGxQb3B1cCgp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFtX2F1dG9GaWxsUG9w
dXAtPmlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXkoZXZlbnQud2luZG93c0tleUNvZGUpKQorICAg
IGlmICghbV9hdXRvZmlsbFBvcHVwLT5pc0ludGVyZXN0ZWRJbkV2ZW50Rm9yS2V5KGV2ZW50Lndp
bmRvd3NLZXlDb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1fYXV0b0Zp
bGxQb3B1cC0+aGFuZGxlS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVu
dCkpKSB7CisgICAgaWYgKG1fYXV0b2ZpbGxQb3B1cC0+aGFuZGxlS2V5RXZlbnQoUGxhdGZvcm1L
ZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCkpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gaWdu
b3JlIHRoZSBuZXh0IENoYXIgZXZlbnQgYWZ0ZXIgdGhpcyBvdGhlcndpc2UgcHJlc3NpbmcKICAg
ICAgICAgLy8gZW50ZXIgd2hlbiBzZWxlY3RpbmcgYW4gaXRlbSBpbiB0aGUgbWVudSB3aWxsIGdv
IHRvIHRoZSBwYWdlLgogICAgICAgICBpZiAoV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93biA9PSBl
dmVudC50eXBlKQpAQCAtOTI2LDExICs5MjYsMTEgQEAgdm9pZCAgV2ViVmlld0ltcGw6OnBvcHVw
Q2xvc2VkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lcikKICAgICB9CiB9
CiAKLXZvaWQgV2ViVmlld0ltcGw6OmhpZGVBdXRvRmlsbFBvcHVwKCkKK3ZvaWQgV2ViVmlld0lt
cGw6OmhpZGVBdXRvZmlsbFBvcHVwKCkKIHsKLSAgICBpZiAobV9hdXRvRmlsbFBvcHVwU2hvd2lu
ZykgewotICAgICAgICBtX2F1dG9GaWxsUG9wdXAtPmhpZGVQb3B1cCgpOwotICAgICAgICBtX2F1
dG9GaWxsUG9wdXBTaG93aW5nID0gZmFsc2U7CisgICAgaWYgKG1fYXV0b2ZpbGxQb3B1cFNob3dp
bmcpIHsKKyAgICAgICAgbV9hdXRvZmlsbFBvcHVwLT5oaWRlUG9wdXAoKTsKKyAgICAgICAgbV9h
dXRvZmlsbFBvcHVwU2hvd2luZyA9IGZhbHNlOwogICAgIH0KIH0KIApAQCAtMTMzMCw3ICsxMzMw
LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCiAgICAgICAgIH0K
ICAgICAgICAgbV9pbWVBY2NlcHRFdmVudHMgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGhpZGVBdXRvRmlsbFBvcHVwKCk7CisgICAgICAgIGhpZGVBdXRvZmlsbFBvcHVwKCk7CiAgICAg
ICAgIGhpZGVTZWxlY3RQb3B1cCgpOwogCiAgICAgICAgIC8vIENsZWFyIGZvY3VzIG9uIHRoZSBj
dXJyZW50bHkgZm9jdXNlZCBmcmFtZSBpZiBhbnkuCkBAIC0yMDY3LDcgKzIwNjcsNyBAQCBXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0IFdlYlZpZXdJbXBsOjphY2Nlc3NpYmlsaXR5T2JqZWN0KCkKICAg
ICAgICAgZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZG9jdW1lbnQtPnJl
bmRlcmVyKCkpKTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1Z2dlc3Rp
b25zKAordm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvZmlsbFN1Z2dlc3Rpb25zKAogICAgIGNv
bnN0IFdlYk5vZGUmIG5vZGUsCiAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5hbWVz
LAogICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCkBAIC0yMDgwLDQ4ICsy
MDgwLDQ4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0b0ZpbGxTdWdnZXN0aW9ucygKICAg
ICBBU1NFUlQoc2VwYXJhdG9ySW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG5hbWVzLnNpemUoKSkp
OwogCiAgICAgaWYgKG5hbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBoaWRlQXV0b0ZpbGxQb3B1
cCgpOworICAgICAgICBoaWRlQXV0b2ZpbGxQb3B1cCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNlZFdlYkNvcmVOb2RlKCk7
Ci0gICAgLy8gSWYgdGhlIG5vZGUgZm9yIHdoaWNoIHdlIHF1ZXJpZWQgdGhlIEF1dG9GaWxsIHN1
Z2dlc3Rpb25zIGlzIG5vdCB0aGUKKyAgICAvLyBJZiB0aGUgbm9kZSBmb3Igd2hpY2ggd2UgcXVl
cmllZCB0aGUgQXV0b2ZpbGwgc3VnZ2VzdGlvbnMgaXMgbm90IHRoZQogICAgIC8vIGZvY3VzZWQg
bm9kZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uICBGSVhNRTogYWxzbyBjaGVjayB0aGUK
ICAgICAvLyBjYXJldCBpcyBhdCB0aGUgZW5kIGFuZCB0aGF0IHRoZSB0ZXh0IGhhcyBub3QgY2hh
bmdlZC4KICAgICBpZiAoIWZvY3VzZWROb2RlIHx8IGZvY3VzZWROb2RlICE9IFBhc3NSZWZQdHI8
Tm9kZT4obm9kZSkpIHsKLSAgICAgICAgaGlkZUF1dG9GaWxsUG9wdXAoKTsKKyAgICAgICAgaGlk
ZUF1dG9maWxsUG9wdXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGlucHV0RWxlbSA9CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1l
bnQqPihmb2N1c2VkTm9kZS5nZXQoKSk7CiAKLSAgICAvLyBUaGUgZmlyc3QgdGltZSB0aGUgQXV0
b0ZpbGwgcG9wdXAgaXMgc2hvd24gd2UnbGwgY3JlYXRlIHRoZSBjbGllbnQgYW5kCisgICAgLy8g
VGhlIGZpcnN0IHRpbWUgdGhlIEF1dG9maWxsIHBvcHVwIGlzIHNob3duIHdlJ2xsIGNyZWF0ZSB0
aGUgY2xpZW50IGFuZAogICAgIC8vIHRoZSBwb3B1cC4KLSAgICBpZiAoIW1fYXV0b0ZpbGxQb3B1
cENsaWVudCkKLSAgICAgICAgbV9hdXRvRmlsbFBvcHVwQ2xpZW50ID0gYWRvcHRQdHIobmV3IEF1
dG9GaWxsUG9wdXBNZW51Q2xpZW50KTsKKyAgICBpZiAoIW1fYXV0b2ZpbGxQb3B1cENsaWVudCkK
KyAgICAgICAgbV9hdXRvZmlsbFBvcHVwQ2xpZW50ID0gYWRvcHRQdHIobmV3IEF1dG9maWxsUG9w
dXBNZW51Q2xpZW50KTsKIAotICAgIG1fYXV0b0ZpbGxQb3B1cENsaWVudC0+aW5pdGlhbGl6ZSgK
KyAgICBtX2F1dG9maWxsUG9wdXBDbGllbnQtPmluaXRpYWxpemUoCiAgICAgICAgIGlucHV0RWxl
bSwgbmFtZXMsIGxhYmVscywgaWNvbnMsIHVuaXF1ZUlEcywgc2VwYXJhdG9ySW5kZXgpOwogCi0g
ICAgaWYgKCFtX2F1dG9GaWxsUG9wdXAuZ2V0KCkpIHsKLSAgICAgICAgbV9hdXRvRmlsbFBvcHVw
ID0gUG9wdXBDb250YWluZXI6OmNyZWF0ZShtX2F1dG9GaWxsUG9wdXBDbGllbnQuZ2V0KCksCisg
ICAgaWYgKCFtX2F1dG9maWxsUG9wdXAuZ2V0KCkpIHsKKyAgICAgICAgbV9hdXRvZmlsbFBvcHVw
ID0gUG9wdXBDb250YWluZXI6OmNyZWF0ZShtX2F1dG9maWxsUG9wdXBDbGllbnQuZ2V0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9wdXBDb250
YWluZXI6OlN1Z2dlc3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXV0b0ZpbGxQb3B1cFNldHRpbmdzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZmlsbFBvcHVwU2V0dGluZ3MpOwogICAg
IH0KIAotICAgIGlmIChtX2F1dG9GaWxsUG9wdXBTaG93aW5nKSB7Ci0gICAgICAgIHJlZnJlc2hB
dXRvRmlsbFBvcHVwKCk7CisgICAgaWYgKG1fYXV0b2ZpbGxQb3B1cFNob3dpbmcpIHsKKyAgICAg
ICAgcmVmcmVzaEF1dG9maWxsUG9wdXAoKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2F1dG9G
aWxsUG9wdXAtPnNob3dJblJlY3QoZm9jdXNlZE5vZGUtPmdldFJlY3QoKSwgZm9jdXNlZE5vZGUt
Pm93bmVyRG9jdW1lbnQoKS0+dmlldygpLCAwKTsKLSAgICAgICAgbV9hdXRvRmlsbFBvcHVwU2hv
d2luZyA9IHRydWU7CisgICAgICAgIG1fYXV0b2ZpbGxQb3B1cC0+c2hvd0luUmVjdChmb2N1c2Vk
Tm9kZS0+Z2V0UmVjdCgpLCBmb2N1c2VkTm9kZS0+b3duZXJEb2N1bWVudCgpLT52aWV3KCksIDAp
OworICAgICAgICBtX2F1dG9maWxsUG9wdXBTaG93aW5nID0gdHJ1ZTsKICAgICB9CiB9CiAKIHZv
aWQgV2ViVmlld0ltcGw6OmhpZGVQb3B1cHMoKQogewogICAgIGhpZGVTZWxlY3RQb3B1cCgpOwot
ICAgIGhpZGVBdXRvRmlsbFBvcHVwKCk7CisgICAgaGlkZUF1dG9maWxsUG9wdXAoKTsKIH0KIAog
dm9pZCBXZWJWaWV3SW1wbDo6cGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVuc2lnbmVk
IGFjdGlvbikKQEAgLTIzNDcsMjMgKzIzNDcsMjMgQEAgTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bCogV2ViVmlld0ltcGw6Om5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKQogfQogI2VuZGlmCiAK
LXZvaWQgV2ViVmlld0ltcGw6OnJlZnJlc2hBdXRvRmlsbFBvcHVwKCkKK3ZvaWQgV2ViVmlld0lt
cGw6OnJlZnJlc2hBdXRvZmlsbFBvcHVwKCkKIHsKLSAgICBBU1NFUlQobV9hdXRvRmlsbFBvcHVw
U2hvd2luZyk7CisgICAgQVNTRVJUKG1fYXV0b2ZpbGxQb3B1cFNob3dpbmcpOwogCiAgICAgLy8g
SGlkZSB0aGUgcG9wdXAgaWYgaXQgaGFzIGJlY29tZSBlbXB0eS4KLSAgICBpZiAoIW1fYXV0b0Zp
bGxQb3B1cENsaWVudC0+bGlzdFNpemUoKSkgewotICAgICAgICBoaWRlQXV0b0ZpbGxQb3B1cCgp
OworICAgIGlmICghbV9hdXRvZmlsbFBvcHVwQ2xpZW50LT5saXN0U2l6ZSgpKSB7CisgICAgICAg
IGhpZGVBdXRvZmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRS
ZWN0IG9sZEJvdW5kcyA9IG1fYXV0b0ZpbGxQb3B1cC0+ZnJhbWVSZWN0KCk7Ci0gICAgbV9hdXRv
RmlsbFBvcHVwLT5yZWZyZXNoKGZvY3VzZWRXZWJDb3JlTm9kZSgpLT5nZXRSZWN0KCkpOwotICAg
IEludFJlY3QgbmV3Qm91bmRzID0gbV9hdXRvRmlsbFBvcHVwLT5mcmFtZVJlY3QoKTsKKyAgICBJ
bnRSZWN0IG9sZEJvdW5kcyA9IG1fYXV0b2ZpbGxQb3B1cC0+ZnJhbWVSZWN0KCk7CisgICAgbV9h
dXRvZmlsbFBvcHVwLT5yZWZyZXNoKGZvY3VzZWRXZWJDb3JlTm9kZSgpLT5nZXRSZWN0KCkpOwor
ICAgIEludFJlY3QgbmV3Qm91bmRzID0gbV9hdXRvZmlsbFBvcHVwLT5mcmFtZVJlY3QoKTsKICAg
ICAvLyBMZXQncyByZXNpemUgdGhlIGJhY2tpbmcgd2luZG93IGlmIG5lY2Vzc2FyeS4KICAgICBp
ZiAob2xkQm91bmRzICE9IG5ld0JvdW5kcykgewogICAgICAgICBXZWJQb3B1cE1lbnVJbXBsKiBw
b3B1cE1lbnUgPQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViUG9wdXBNZW51SW1wbCo+KG1f
YXV0b0ZpbGxQb3B1cC0+Y2xpZW50KCkpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViUG9w
dXBNZW51SW1wbCo+KG1fYXV0b2ZpbGxQb3B1cC0+Y2xpZW50KCkpOwogICAgICAgICBpZiAocG9w
dXBNZW51KQogICAgICAgICAgICAgcG9wdXBNZW51LT5jbGllbnQoKS0+c2V0V2luZG93UmVjdCht
X2Nocm9tZUNsaWVudEltcGwud2luZG93VG9TY3JlZW4obmV3Qm91bmRzKSk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggNjU1M2I1OGIwYzBkYzEx
YjBlMzAwNDEyMTg3NThkODNhOWRlZGY3NC4uYWEwYjNkOGYwZTQzYmIzYjQ3NTQ3NGU5Nzc0YWRh
OWE5NTYzNmViOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBA
IC03MSw3ICs3MSw3IEBAIGNsYXNzIFdpZGdldDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBBdXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ7Ci1jbGFzcyBBdXRvRmlsbFBvcHVwTWVudUNs
aWVudDsKK2NsYXNzIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OwogY2xhc3MgQ29udGV4dE1lbnVD
bGllbnRJbXBsOwogY2xhc3MgRGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eTsKIGNsYXNzIERy
YWdTY3JvbGxUaW1lcjsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBXZWJW
aWV3IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVNYWluRnJhbWUoV2ViRnJh
bWVDbGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b0ZpbGxDbGllbnQoV2ViQXV0b0Zp
bGxDbGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b2ZpbGxDbGllbnQoV2ViQXV0b2Zp
bGxDbGllbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2VG9vbHNBZ2VudENsaWVudChXZWJE
ZXZUb29sc0FnZW50Q2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFBlcm1pc3Npb25DbGll
bnQoV2ViUGVybWlzc2lvbkNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVsbENoZWNr
Q2xpZW50KFdlYlNwZWxsQ2hlY2tDbGllbnQqKTsKQEAgLTE4Niw3ICsxODYsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB2
YWx1ZSk7CiAgICAgdmlydHVhbCBXZWJEZXZUb29sc0FnZW50KiBkZXZUb29sc0FnZW50KCk7CiAg
ICAgdmlydHVhbCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlPYmplY3QoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKAorICAgIHZpcnR1YWwg
dm9pZCBhcHBseUF1dG9maWxsU3VnZ2VzdGlvbnMoCiAgICAgICAgIGNvbnN0IFdlYk5vZGUmLAog
ICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCiAgICAgICAgIGNvbnN0
IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCkBAIC0yMzUsOSArMjM1LDkgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9jbGllbnQ7CiAgICAgfQogCi0gICAgV2ViQXV0b0ZpbGxDbGll
bnQqIGF1dG9GaWxsQ2xpZW50KCkKKyAgICBXZWJBdXRvZmlsbENsaWVudCogYXV0b2ZpbGxDbGll
bnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXV0b0ZpbGxDbGllbnQ7CisgICAgICAgIHJl
dHVybiBtX2F1dG9maWxsQ2xpZW50OwogICAgIH0KIAogICAgIFdlYlBlcm1pc3Npb25DbGllbnQq
IHBlcm1pc3Npb25DbGllbnQoKQpAQCAtMzI3LDkgKzMyNyw5IEBAIHB1YmxpYzoKICAgICAgICAg
Y29uc3QgV2ViSW1hZ2UmIGRyYWdJbWFnZSwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGRyYWdJ
bWFnZU9mZnNldCk7CiAKLSAgICB2b2lkIGF1dG9GaWxsUG9wdXBEaWRIaWRlKCkKKyAgICB2b2lk
IGF1dG9maWxsUG9wdXBEaWRIaWRlKCkKICAgICB7Ci0gICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNo
b3dpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9hdXRvZmlsbFBvcHVwU2hvd2luZyA9IGZhbHNlOwog
ICAgIH0KIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHBvcHVwT3BlbmVkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1
cENvbnRhaW5lcik7CiAgICAgdm9pZCBwb3B1cENsb3NlZChXZWJDb3JlOjpQb3B1cENvbnRhaW5l
ciogcG9wdXBDb250YWluZXIpOwogCi0gICAgdm9pZCBoaWRlQXV0b0ZpbGxQb3B1cCgpOworICAg
IHZvaWQgaGlkZUF1dG9maWxsUG9wdXAoKTsKIAogICAgIC8vIFJldHVybnMgdGhlIGlucHV0IGV2
ZW50IHdlJ3JlIGN1cnJlbnRseSBwcm9jZXNzaW5nLiBUaGlzIGlzIHVzZWQgaW4gc29tZQogICAg
IC8vIGNhc2VzIHdoZXJlIHRoZSBXZWJDb3JlIERPTSBldmVudCBkb2Vzbid0IGhhdmUgdGhlIGlu
Zm9ybWF0aW9uIHdlIG5lZWQuCkBAIC00MDQsMTAgKzQwNCwxMCBAQCBwcml2YXRlOgogICAgIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgYXV0b2NvbXBsZSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50Lgog
ICAgIGJvb2wgYXV0b2NvbXBsZXRlSGFuZGxlS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVu
dCYpOwogCi0gICAgLy8gUmVwYWludHMgdGhlIEF1dG9GaWxsIHBvcHVwLiBTaG91bGQgYmUgY2Fs
bGVkIHdoZW4gdGhlIHN1Z2dlc3Rpb25zCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLiBOb3RlIHRoYXQg
dGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgQXV0b0ZpbGwKKyAgICAvLyBSZXBh
aW50cyB0aGUgQXV0b2ZpbGwgcG9wdXAuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgc3VnZ2Vz
dGlvbnMKKyAgICAvLyBoYXZlIGNoYW5nZWQuIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBvbmx5IGJl
IGNhbGxlZCB3aGVuIHRoZSBBdXRvZmlsbAogICAgIC8vIHBvcHVwIGlzIHNob3dpbmcuCi0gICAg
dm9pZCByZWZyZXNoQXV0b0ZpbGxQb3B1cCgpOworICAgIHZvaWQgcmVmcmVzaEF1dG9maWxsUG9w
dXAoKTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldyB3YXMgc2Nyb2xsZWQuCiAg
ICAgYm9vbCBzY3JvbGxWaWV3V2l0aEtleWJvYXJkKGludCBrZXlDb2RlLCBpbnQgbW9kaWZpZXJz
KTsKQEAgLTQzNSw3ICs0MzUsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBXZWJWaWV3Q2xp
ZW50KiBtX2NsaWVudDsKLSAgICBXZWJBdXRvRmlsbENsaWVudCogbV9hdXRvRmlsbENsaWVudDsK
KyAgICBXZWJBdXRvZmlsbENsaWVudCogbV9hdXRvZmlsbENsaWVudDsKICAgICBXZWJQZXJtaXNz
aW9uQ2xpZW50KiBtX3Blcm1pc3Npb25DbGllbnQ7CiAgICAgV2ViU3BlbGxDaGVja0NsaWVudCog
bV9zcGVsbENoZWNrQ2xpZW50OwogCkBAIC01MTAsMTQgKzUxMCwxNCBAQCBwcml2YXRlOgogICAg
IC8vIGN1cnJlbnQgZHJvcCB0YXJnZXQgaW4gdGhpcyBXZWJWaWV3ICh0aGUgZHJvcCB0YXJnZXQg
Y2FuIGFjY2VwdCB0aGUgZHJvcCkuCiAgICAgV2ViRHJhZ09wZXJhdGlvbiBtX2RyYWdPcGVyYXRp
b247CiAKLSAgICAvLyBXaGV0aGVyIGFuIEF1dG9GaWxsIHBvcHVwIGlzIGN1cnJlbnRseSBzaG93
aW5nLgotICAgIGJvb2wgbV9hdXRvRmlsbFBvcHVwU2hvd2luZzsKKyAgICAvLyBXaGV0aGVyIGFu
IEF1dG9maWxsIHBvcHVwIGlzIGN1cnJlbnRseSBzaG93aW5nLgorICAgIGJvb2wgbV9hdXRvZmls
bFBvcHVwU2hvd2luZzsKIAotICAgIC8vIFRoZSBBdXRvRmlsbCBwb3B1cCBjbGllbnQuCi0gICAg
T3duUHRyPEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50PiBtX2F1dG9GaWxsUG9wdXBDbGllbnQ7Cisg
ICAgLy8gVGhlIEF1dG9maWxsIHBvcHVwIGNsaWVudC4KKyAgICBPd25QdHI8QXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQ+IG1fYXV0b2ZpbGxQb3B1cENsaWVudDsKIAotICAgIC8vIFRoZSBBdXRvRmls
bCBwb3B1cC4KLSAgICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBDb250YWluZXI+IG1fYXV0b0ZpbGxQ
b3B1cDsKKyAgICAvLyBUaGUgQXV0b2ZpbGwgcG9wdXAuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBv
cHVwQ29udGFpbmVyPiBtX2F1dG9maWxsUG9wdXA7CiAKICAgICAvLyBUaGUgcG9wdXAgYXNzb2Np
YXRlZCB3aXRoIGEgc2VsZWN0IGVsZW1lbnQuCiAgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29u
dGFpbmVyPiBtX3NlbGVjdFBvcHVwOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDNmMzZhMDE0OTI3Mzc5ODEwZDgxZmVhYWViODQ1YWM0ZTQ3MDU0
NDYuLjc2N2ExMTllNTM4ZTM0MTM0NjM4MWQ0MjUwY2ViMzRjZjk2YmMyM2YgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxMS0wNy0xMSAgSWx5YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJlbmFtZSBBdXRvRmlsbCAtPiBBdXRvZmlsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQzMzMKKyAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xl
LmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzI3NTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlcnMvY3BwLnB5OiBGaXggaGVhZGVyIGd1YXJkIGV4cGVjdGF0aW9ucworCiAyMDExLTA3
LTExICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1F0
XVtNYWNdIFVucmV2aWV3ZWQgZml4IGFmdGVyIHI5MDc0Ni4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKaW5kZXggMDk0NjMyNzJiMDNmZjkzZDk3ODY1YTY2
Mzc2NTY0ZWE3MzQxNWY4My4uOTYzYzBmMmJlYjgyZTFjZmM3OWY2Yzc4NGVhYmI5YmQ4OWFiMzFm
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2Vycy9jcHAucHkKQEAg
LTkyMyw3ICs5MjMsNyBAQCBkZWYgZ2V0X2hlYWRlcl9ndWFyZF9jcHBfdmFyaWFibGUoZmlsZW5h
bWUpOgogICAgIHN0YW5kYXJkX25hbWUgPSBzdWIocidbLS5cc10nLCAnXycsIG9zLnBhdGguYmFz
ZW5hbWUoZmlsZW5hbWUpKQogCiAgICAgIyBGaWxlcyB1bmRlciBXVEYgdHlwaWNhbGx5IGhhdmUg
aGVhZGVyIGd1YXJkcyB0aGF0IHN0YXJ0IHdpdGggV1RGXy4KLSAgICBpZiBmaWxlbmFtZS5maW5k
KCcvd3RmLycpOgorICAgIGlmICcvd3RmLycgaW4gZmlsZW5hbWU6CiAgICAgICAgIHNwZWNpYWxf
bmFtZSA9ICJXVEZfIiArIHN0YW5kYXJkX25hbWUKICAgICBlbHNlOgogICAgICAgICBzcGVjaWFs
X25hbWUgPSBzdGFuZGFyZF9uYW1lCg==
</data>
<flag name="review"
          id="95079"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="95084"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100594</attachid>
            <date>2011-07-12 17:23:52 -0700</date>
            <delta_ts>2011-07-13 17:01:49 -0700</delta_ts>
            <desc>Full diff, I hope</desc>
            <filename>autofill-spelling.diff</filename>
            <type>text/plain</type>
            <size>77849</size>
            <attacher name="Ilya Sherman">isherman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2MwODZhYi4uOGRkMzJlMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MiBAQAorMjAxMS0wNy0xMiAgSWx5YSBTaGVy
bWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBBdXRvRmlsbCAt
PiBBdXRvZmlsbCBhbmQgYXV0b0ZpbGwgLT4gYXV0b2ZpbGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MzMzCisgICAgICAgIGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTcyNzU4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHB1YmxpYy9XZWJBdXRvZmlsbENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
ZmlsbENsaWVudDo6ZGlkQWNjZXB0QXV0b2ZpbGxTdWdnZXN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b2ZpbGxDbGllbnQ6OmRpZFNlbGVjdEF1dG9maWxsU3VnZ2VzdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkF1dG9maWxsQ2xpZW50OjpkaWRDbGVhckF1dG9maWxsU2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6OnJlbW92ZUF1dG9jb21wbGV0
ZVN1Z2dlc3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvZmlsbENsaWVudDo6dGV4dEZp
ZWxkRGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6
OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvZmlsbENs
aWVudDo6dGV4dEZpZWxkRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxD
bGllbnQ6OnRleHRGaWVsZERpZFJlY2VpdmVLZXlEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b2ZpbGxDbGllbnQ6On5XZWJBdXRvZmlsbENsaWVudCk6CisgICAgICAgICogcHVibGljL1dl
Yk5vZGUuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9BdXRv
ZmlsbFBvcHVwTWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBN
ZW51Q2xpZW50OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkF1
dG9maWxsUG9wdXBNZW51Q2xpZW50Ojp+QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0U3VnZ2VzdGlvbnNDb3VudCk6
CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldExhYmVsKToK
KyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldEljb24pOgorICAg
ICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6cmVtb3ZlU3VnZ2VzdGlvbkF0
SW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Y2FuUmVt
b3ZlU3VnZ2VzdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1l
bnVDbGllbnQ6OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBv
cHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2xlYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9m
aWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxs
UG9wdXBNZW51Q2xpZW50OjppdGVtTGFiZWwpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBv
cHVwTWVudUNsaWVudDo6aXRlbUljb24pOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVw
TWVudUNsaWVudDo6aXRlbUlzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9w
dXBNZW51Q2xpZW50OjppdGVtU3R5bGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVw
TWVudUNsaWVudDo6bWVudVN0eWxlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1l
bnVDbGllbnQ6OmNsaWVudFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJLaXQ6OkF1
dG9maWxsUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUpOgorICAgICAgICAoV2ViS2l0OjpB
dXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUlzU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYktp
dDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1Jc1dhcm5pbmcpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3Rvcik6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93KToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAg
ICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3Rpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNvbnZlcnRMaXN0SW5kZXhU
b0ludGVybmFsSW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVu
dDo6Z2V0V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50
Ojp0ZXh0RmllbGRTdHlsZSk6CisgICAgICAgICogc3JjL0F1dG9maWxsUG9wdXBNZW51Q2xpZW50
Lmg6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVG9vbFRp
cCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtQWNjZXNz
aWJpbGl0eVRleHQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6
Y2xpZW50SW5zZXRMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGll
bnQ6OmNsaWVudEluc2V0UmlnaHQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudDo6bGlzdFNpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNs
aWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51
Q2xpZW50OjppdGVtSXNMYWJlbCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51
Q2xpZW50OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBN
ZW51Q2xpZW50OjpzaG91bGRQb3BPdmVyKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQ6OnZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjayk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpnZXRUZXh0RmllbGQpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0U2VsZWN0ZWRJbmRleCk6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpzZXRTZWxlY3RlZEluZGV4KToKKyAg
ICAgICAgKiBzcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudEltcGw6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JDbGllbnRJbXBsOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpkb0F1dG9maWxsKToKKyAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50SW1wbDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAg
ICAgKiBzcmMvV2ViSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRF
bGVtZW50OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0QXV0b2ZpbGxDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6bW91c2VEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1
dG9jb21wbGV0ZUhhbmRsZUtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmhpZGVBdXRvZmlsbFBvcHVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEZv
Y3VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5QXV0b2ZpbGxTdWdnZXN0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoaWRlUG9wdXBzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlZnJlc2hBdXRvZmlsbFBvcHVwKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9m
aWxsQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9maWxsUG9wdXBE
aWRIaWRlKToKKwogMjAxMS0wNy0xMSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVkIERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKaW5kZXggMmEzNDZkMC4uOGVhNDJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBdHRyaWJ1
dGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBdWRpb0J1cy5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkF1ZGlvRGV2aWNlLmgnLAotICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQXV0b0ZpbGxDbGllbnQuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBdXRv
ZmlsbENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkJpbmRpbmdzLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmxvYkRhdGEuaCcsCiAgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCcsCkBAIC0zMTAsOCArMzEwLDggQEAKICAgICAgICAg
ICAgICAgICAnc3JjL0FzeW5jRmlsZVdyaXRlckNocm9taXVtLmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvQXVkaW9EZXN0aW5hdGlvbkNocm9taXVtLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uaCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9BdXRv
RmlsbFBvcHVwTWVudUNsaWVudC5jcHAnLAotICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9BdXRvZmlsbFBvcHVwTWVu
dUNsaWVudC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvQXV0b2ZpbGxQb3B1cE1lbnVDbGll
bnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvQmFja0ZvcndhcmRMaXN0Q2hyb21pdW0uaCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQXV0b0ZpbGxDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkF1dG9GaWxsQ2xpZW50LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYzYjM5YTguLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQXV0b0ZpbGxDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIFdlYkF1dG9GaWxsQ2xpZW50X2gKLSNkZWZpbmUgV2ViQXV0b0ZpbGxDbGll
bnRfaAotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgV2ViSW5wdXRFbGVtZW50OwotY2xh
c3MgV2ViS2V5Ym9hcmRFdmVudDsKLWNsYXNzIFdlYk5vZGU7Ci1jbGFzcyBXZWJTdHJpbmc7Ci0K
LWNsYXNzIFdlYkF1dG9GaWxsQ2xpZW50IHsKLXB1YmxpYzoKLSAgICAvLyBJbmZvcm1zIHRoZSBi
cm93c2VyIHRoYXQgdGhlIHVzZXIgaGFzIGFjY2VwdGVkIGFuIEF1dG9GaWxsIHN1Z2dlc3Rpb24g
Zm9yCi0gICAgLy8gYSBXZWJOb2RlLiAgfHVuaXF1ZUlEfCBpcyB1c2VkIGFzIGEga2V5IGludG8g
dGhlIHNldCBvZiBBdXRvRmlsbCBwcm9maWxlcywKLSAgICAvLyBhbmQgc2hvdWxkIG5ldmVyIGJl
IG5lZ2F0aXZlLiAgSWYgaXQgaXMgMCwgdGhlbiB0aGUgc3VnZ2VzdGlvbiBpcyBhbgotICAgIC8v
IEF1dG9jb21wbGV0ZSBzdWdnZXN0aW9uOyBhbmQgfHZhbHVlfCBzdG9yZXMgdGhlIHN1Z2dlc3Rl
ZCB0ZXh0LiAgfGluZGV4fAotICAgIC8vIGlzIGFuIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBzdWdn
ZXN0aW9uIGluIHRoZSBsaXN0IG9mIHN1Z2dlc3Rpb25zIHByb3ZpZGVkCi0gICAgLy8gYnkgdGhl
IGNsaWVudC4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWNjZXB0QXV0b0ZpbGxTdWdnZXN0aW9uKGNv
bnN0IFdlYk5vZGUmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbGFiZWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdW5pcXVlSUQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCkgeyB9Ci0KLSAg
ICAvLyBJbmZvcm1zIHRoZSBicm93c2VyIHRoYXQgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGFuIEF1
dG9GaWxsIHN1Z2dlc3Rpb24gZm9yCi0gICAgLy8gYSBXZWJOb2RlLiAgVGhpcyBoYXBwZW5zIHdo
ZW4gdGhlIHVzZXIgaG92ZXJzIG92ZXIgYSBzdWdnZXN0aW9uIG9yIHVzZXMKLSAgICAvLyB0aGUg
YXJyb3cga2V5cyB0byBuYXZpZ2F0ZSB0byBhIHN1Z2dlc3Rpb24uCi0gICAgdmlydHVhbCB2b2lk
IGRpZFNlbGVjdEF1dG9GaWxsU3VnZ2VzdGlvbihjb25zdCBXZWJOb2RlJiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0
cmluZyYgbGFiZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdW5pcXVlSUQpIHsgfQotCi0gICAgLy8gSW5mb3JtcyB0aGUgYnJvd3NlciB0aGF0IHRo
ZSB1c2VyIGhhcyBjbGVhcmVkIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUKLSAgICAvLyBBdXRvRmls
bCBzdWdnZXN0aW9ucyBwb3B1cC4gIFRoaXMgaGFwcGVucyB3aGVuIGEgdXNlciB1c2VzIHRoZSBh
cnJvdwotICAgIC8vIGtleXMgdG8gbmF2aWdhdGUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgcG9zc2li
bGUgc2VsZWN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJBdXRvRmlsbFNlbGVjdGlv
bihjb25zdCBXZWJOb2RlJikgeyB9Ci0KLSAgICAvLyBJbnN0cnVjdHMgdGhlIGJyb3dzZXIgdG8g
cmVtb3ZlIHRoZSBBdXRvY29tcGxldGUgZW50cnkgc3BlY2lmaWVkIGZyb20KLSAgICAvLyBpdHMg
REIuCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUF1dG9jb21wbGV0ZVN1Z2dlc3Rpb24oY29uc3Qg
V2ViU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpIHsgfQotCi0gICAgLy8gVGhlc2UgbWV0aG9k
cyBhcmUgY2FsbGVkIHdoZW4gdGhlIHVzZXJzIGVkaXRzIGEgdGV4dC1maWVsZC4KLSAgICB2aXJ0
dWFsIHZvaWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYklucHV0RWxlbWVudCYp
IHsgfQotICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKGNvbnN0IFdlYklu
cHV0RWxlbWVudCYpIHsgfQotICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRDaGFuZ2UoY29u
c3QgV2ViSW5wdXRFbGVtZW50JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZFJl
Y2VpdmVLZXlEb3duKGNvbnN0IFdlYklucHV0RWxlbWVudCYsIGNvbnN0IFdlYktleWJvYXJkRXZl
bnQmKSB7IH0KLQotcHJvdGVjdGVkOgotICAgIH5XZWJBdXRvRmlsbENsaWVudCgpIHsgfQotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQXV0b2ZpbGxDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkF1dG9maWxsQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMWViN2NiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkF1dG9maWxsQ2xpZW50LmgKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgV2ViQXV0b2ZpbGxDbGllbnRfaAorI2RlZmluZSBXZWJBdXRvZmlsbENsaWVudF9oCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJJbnB1dEVsZW1lbnQ7CitjbGFzcyBXZWJLZXli
b2FyZEV2ZW50OworY2xhc3MgV2ViTm9kZTsKK2NsYXNzIFdlYlN0cmluZzsKKworY2xhc3MgV2Vi
QXV0b2ZpbGxDbGllbnQgeworcHVibGljOgorICAgIC8vIEluZm9ybXMgdGhlIGJyb3dzZXIgdGhh
dCB0aGUgdXNlciBoYXMgYWNjZXB0ZWQgYW4gQXV0b2ZpbGwgc3VnZ2VzdGlvbiBmb3IKKyAgICAv
LyBhIFdlYk5vZGUuICB8dW5pcXVlSUR8IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUgc2V0IG9m
IEF1dG9maWxsIHByb2ZpbGVzLAorICAgIC8vIGFuZCBzaG91bGQgbmV2ZXIgYmUgbmVnYXRpdmUu
ICBJZiBpdCBpcyAwLCB0aGVuIHRoZSBzdWdnZXN0aW9uIGlzIGFuCisgICAgLy8gQXV0b2NvbXBs
ZXRlIHN1Z2dlc3Rpb247IGFuZCB8dmFsdWV8IHN0b3JlcyB0aGUgc3VnZ2VzdGVkIHRleHQuICB8
aW5kZXh8CisgICAgLy8gaXMgYW4gaW5kZXggb2YgdGhlIHNlbGVjdGVkIHN1Z2dlc3Rpb24gaW4g
dGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgcHJvdmlkZWQKKyAgICAvLyBieSB0aGUgY2xpZW50Lgor
ICAgIHZpcnR1YWwgdm9pZCBkaWRBY2NlcHRBdXRvZmlsbFN1Z2dlc3Rpb24oY29uc3QgV2ViTm9k
ZSYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJTdHJpbmcmIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViU3RyaW5nJiBsYWJlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCB1bmlxdWVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4KSB7IH0KKworICAgIC8vIEluZm9y
bXMgdGhlIGJyb3dzZXIgdGhhdCB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgYW4gQXV0b2ZpbGwgc3Vn
Z2VzdGlvbiBmb3IKKyAgICAvLyBhIFdlYk5vZGUuICBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgdXNl
ciBob3ZlcnMgb3ZlciBhIHN1Z2dlc3Rpb24gb3IgdXNlcworICAgIC8vIHRoZSBhcnJvdyBrZXlz
IHRvIG5hdmlnYXRlIHRvIGEgc3VnZ2VzdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU2VsZWN0
QXV0b2ZpbGxTdWdnZXN0aW9uKGNvbnN0IFdlYk5vZGUmLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBuYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsYWJl
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1bmlx
dWVJRCkgeyB9CisKKyAgICAvLyBJbmZvcm1zIHRoZSBicm93c2VyIHRoYXQgdGhlIHVzZXIgaGFz
IGNsZWFyZWQgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZQorICAgIC8vIEF1dG9maWxsIHN1Z2dlc3Rp
b25zIHBvcHVwLiBUaGlzIGhhcHBlbnMgd2hlbiBhIHVzZXIgdXNlcyB0aGUgYXJyb3cKKyAgICAv
LyBrZXlzIHRvIG5hdmlnYXRlIG91dHNpZGUgdGhlIHJhbmdlIG9mIHBvc3NpYmxlIHNlbGVjdGlv
bnMuCisgICAgdmlydHVhbCB2b2lkIGRpZENsZWFyQXV0b2ZpbGxTZWxlY3Rpb24oY29uc3QgV2Vi
Tm9kZSYpIHsgfQorCisgICAgLy8gSW5zdHJ1Y3RzIHRoZSBicm93c2VyIHRvIHJlbW92ZSB0aGUg
QXV0b2NvbXBsZXRlIGVudHJ5IHNwZWNpZmllZCBmcm9tCisgICAgLy8gaXRzIERCLgorICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVBdXRvY29tcGxldGVTdWdnZXN0aW9uKGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIHZhbHVlKSB7IH0KKworICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxl
ZCB3aGVuIHRoZSB1c2VycyBlZGl0cyBhIHRleHQtZmllbGQuCisgICAgdmlydHVhbCB2b2lkIHRl
eHRGaWVsZERpZEJlZ2luRWRpdGluZyhjb25zdCBXZWJJbnB1dEVsZW1lbnQmKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdGV4dEZpZWxkRGlkRW5kRWRpdGluZyhjb25zdCBXZWJJbnB1dEVsZW1lbnQm
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdGV4dEZpZWxkRGlkQ2hhbmdlKGNvbnN0IFdlYklucHV0
RWxlbWVudCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRSZWNlaXZlS2V5RG93
bihjb25zdCBXZWJJbnB1dEVsZW1lbnQmLCBjb25zdCBXZWJLZXlib2FyZEV2ZW50JikgeyB9CisK
K3Byb3RlY3RlZDoKKyAgICB+V2ViQXV0b2ZpbGxDbGllbnQoKSB7IH0KK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYk5vZGUuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYk5v
ZGUuaAppbmRleCBjNmJhYTEyLi5lZDgwYjdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJOb2RlLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViTm9kZS5oCkBAIC0zNSw2ICszNSw5IEBACiAjaW5jbHVkZSAiV2ViUHJpdmF0ZVB0ci5o
IgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogCisvLyBUT0RPKGlzaGVybWFuKTogUmVtb3ZlIHRo
aXMgb25jZSB0aGUgQ2hyb21pdW0gc2lkZSBpcyB1cGRhdGVkLgorI2RlZmluZSBDUkJVR183Mjc1
OF9GSVhFRAorCiBuYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIE5vZGU7IH0KIAogbmFtZXNwYWNl
IFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJW
aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWaWV3LmgKaW5kZXggNGEz
YWI1OC4uOTE0OGQ3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaApA
QCAtNDAsNyArNDAsNyBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkFjY2Vzc2li
aWxpdHlPYmplY3Q7Ci1jbGFzcyBXZWJBdXRvRmlsbENsaWVudDsKK2NsYXNzIFdlYkF1dG9maWxs
Q2xpZW50OwogY2xhc3MgV2ViRGV2VG9vbHNBZ2VudDsKIGNsYXNzIFdlYkRldlRvb2xzQWdlbnRD
bGllbnQ7CiBjbGFzcyBXZWJEcmFnRGF0YTsKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBpbml0aWFsaXplTWFpbkZyYW1lKFdlYkZyYW1lQ2xpZW50KikgPSAwOwog
CiAgICAgLy8gSW5pdGlhbGl6ZXMgdGhlIHZhcmlvdXMgY2xpZW50IGludGVyZmFjZXMuCi0gICAg
dmlydHVhbCB2b2lkIHNldEF1dG9GaWxsQ2xpZW50KFdlYkF1dG9GaWxsQ2xpZW50KikgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvZmlsbENsaWVudChXZWJBdXRvZmlsbENsaWVudCopID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2VG9vbHNBZ2VudENsaWVudChXZWJEZXZUb29sc0Fn
ZW50Q2xpZW50KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRQZXJtaXNzaW9uQ2xpZW50KFdl
YlBlcm1pc3Npb25DbGllbnQqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFNwZWxsQ2hlY2tD
bGllbnQoV2ViU3BlbGxDaGVja0NsaWVudCopID0gMDsKQEAgLTI3NywxNiArMjc3LDE2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eU9i
amVjdCgpID0gMDsKIAogCi0gICAgLy8gQXV0b0ZpbGwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gQXV0b2ZpbGwgIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLSAgICAvLyBOb3RpZmllcyB0aGUgV2ViVmlldyB0aGF0IEF1dG9GaWxsIHN1Z2dlc3Rpb25z
IGFyZSBhdmFpbGFibGUgZm9yIGEgbm9kZS4KKyAgICAvLyBOb3RpZmllcyB0aGUgV2ViVmlldyB0
aGF0IEF1dG9maWxsIHN1Z2dlc3Rpb25zIGFyZSBhdmFpbGFibGUgZm9yIGEgbm9kZS4KICAgICAv
LyB8dW5pcXVlSURzfCBpcyBhIHZlY3RvciBvZiBJRHMgdGhhdCByZXByZXNlbnQgdGhlIHVuaXF1
ZSBJRCBvZiBlYWNoCi0gICAgLy8gQXV0b0ZpbGwgcHJvZmlsZSBpbiB0aGUgc3VnZ2VzdGlvbnMg
cG9wdXAuICBJZiBhIHVuaXF1ZSBJRCBpcyAwLCB0aGVuIHRoZQotICAgIC8vIGNvcnJlc3BvbmRp
bmcgc3VnZ2VzdGlvbiBjb21lcyBmcm9tIEF1dG9jb21wbGV0ZSByYXRoZXIgdGhhbiBBdXRvRmls
bC4KKyAgICAvLyBBdXRvZmlsbCBwcm9maWxlIGluIHRoZSBzdWdnZXN0aW9ucyBwb3B1cC4gSWYg
YSB1bmlxdWUgSUQgaXMgMCwgdGhlbiB0aGUKKyAgICAvLyBjb3JyZXNwb25kaW5nIHN1Z2dlc3Rp
b24gY29tZXMgZnJvbSBBdXRvY29tcGxldGUgcmF0aGVyIHRoYW4gQXV0b2ZpbGwuCiAgICAgLy8g
SWYgYSB1bmlxdWUgSUQgaXMgbmVnYXRpdmUsIHRoZW4gdGhlIGNvcnJlc3BvbmRpbmcgInN1Z2dl
c3Rpb24iIGlzCi0gICAgLy8gYWN0dWFsbHkgYSB1c2VyLWZhY2luZyB3YXJuaW5nLCBlLmcuIGV4
cGxhaW5pbmcgd2h5IEF1dG9GaWxsIGlzCisgICAgLy8gYWN0dWFsbHkgYSB1c2VyLWZhY2luZyB3
YXJuaW5nLCBlLmcuIGV4cGxhaW5pbmcgd2h5IEF1dG9maWxsIGlzCiAgICAgLy8gdW5hdmFpbGFi
bGUgZm9yIHRoZSBjdXJyZW50IGZvcm0uCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5QXV0b0ZpbGxT
dWdnZXN0aW9ucygKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBdXRvZmlsbFN1Z2dlc3Rpb25zKAog
ICAgICAgICBjb25zdCBXZWJOb2RlJiwKICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4mIG5hbWVzLAogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbGFiZWxzLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVD
bGllbnQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDVjNWYxLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmgiCi0KLSNpbmNsdWRlICJDU1NGb250
U2VsZWN0b3IuaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkZyYW1lLmgi
Ci0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgot
I2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgotI2luY2x1ZGUgIldl
YkF1dG9GaWxsQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViTm9kZS5oIgotI2luY2x1ZGUgIldlYlN0
cmluZy5oIgotI2luY2x1ZGUgIldlYlZlY3Rvci5oIgotI2luY2x1ZGUgIldlYlZpZXdDbGllbnQu
aCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpBdXRvRmls
bFBvcHVwTWVudUNsaWVudCgpCi0gICAgOiBtX3NlcGFyYXRvckluZGV4KC0xKQotICAgICwgbV9z
ZWxlY3RlZEluZGV4KC0xKQotICAgICwgbV90ZXh0RmllbGQoMCkKLXsKLX0KLQotQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6On5BdXRvRmlsbFBvcHVwTWVudUNsaWVudCgpCi17Ci19Ci0KLXVuc2ln
bmVkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9uYW1lcy5zaXplKCkgKyAoKG1fc2VwYXJhdG9ySW5kZXggPT0gLTEp
ID8gMCA6IDEpOwotfQotCi1XZWJTdHJpbmcgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldFN1
Z2dlc3Rpb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIGludCBpbmRleCA9IGNv
bnZlcnRMaXN0SW5kZXhUb0ludGVybmFsSW5kZXgobGlzdEluZGV4KTsKLSAgICBpZiAoaW5kZXgg
PT0gLTEpCi0gICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKLQotICAgIEFTU0VSVChpbmRleCA+
PSAwICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpIDwgbV9uYW1lcy5zaXplKCkpOwotICAg
IHJldHVybiBtX25hbWVzW2luZGV4XTsKLX0KLQotV2ViU3RyaW5nIEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50OjpnZXRMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAgaW50IGlu
ZGV4ID0gY29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJbmRleChsaXN0SW5kZXgpOwotICAgIGlm
IChpbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotCi0gICAgQVNTRVJU
KGluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX2xhYmVscy5zaXpl
KCkpOwotICAgIHJldHVybiBtX2xhYmVsc1tpbmRleF07Ci19Ci0KLVdlYlN0cmluZyBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6Z2V0SWNvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0g
ICAgaW50IGluZGV4ID0gY29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJbmRleChsaXN0SW5kZXgp
OwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotCi0g
ICAgQVNTRVJUKGluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX2lj
b25zLnNpemUoKSk7Ci0gICAgcmV0dXJuIG1faWNvbnNbaW5kZXhdOwotfQotCi12b2lkIEF1dG9G
aWxsUG9wdXBNZW51Q2xpZW50OjpyZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0
SW5kZXgpCi17Ci0gICAgaWYgKCFjYW5SZW1vdmVTdWdnZXN0aW9uQXRJbmRleChsaXN0SW5kZXgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgaW5kZXggPSBjb252ZXJ0TGlzdEluZGV4VG9J
bnRlcm5hbEluZGV4KGxpc3RJbmRleCk7Ci0KLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGluZGV4KSA8IG1fbmFtZXMuc2l6ZSgpKTsKLQotICAgIG1fbmFtZXMucmVtb3ZlKGluZGV4
KTsKLSAgICBtX2xhYmVscy5yZW1vdmUoaW5kZXgpOwotICAgIG1faWNvbnMucmVtb3ZlKGluZGV4
KTsKLSAgICBtX3VuaXF1ZUlEcy5yZW1vdmUoaW5kZXgpOwotCi0gICAgLy8gU2hpZnQgdGhlIHNl
cGFyYXRvciBpbmRleCBpZiBuZWNlc3NhcnkuCi0gICAgaWYgKG1fc2VwYXJhdG9ySW5kZXggIT0g
LTEpCi0gICAgICAgIG1fc2VwYXJhdG9ySW5kZXgtLTsKLX0KLQotYm9vbCBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudDo6Y2FuUmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgodW5zaWduZWQgbGlzdEluZGV4
KQotewotICAgIC8vIE9ubHkgYWxsb3cgZGVsZXRpb24gb2YgaXRlbXMgYmVmb3JlIHRoZSBzZXBh
cmF0b3IgdGhhdCBoYXZlIHVuaXF1ZSBpZCAwCi0gICAgLy8gKGkuZS4gYXJlIGF1dG9jb21wbGV0
ZSByYXRoZXIgdGhhbiBhdXRvZmlsbCBpdGVtcykuCi0gICAgaW50IGluZGV4ID0gY29udmVydExp
c3RJbmRleFRvSW50ZXJuYWxJbmRleChsaXN0SW5kZXgpOwotICAgIHJldHVybiAhbV91bmlxdWVJ
RHNbaW5kZXhdICYmIChtX3NlcGFyYXRvckluZGV4ID09IC0xIHx8IGxpc3RJbmRleCA8IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX3NlcGFyYXRvckluZGV4KSk7Ci19Ci0KLXZvaWQgQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OnZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmly
ZUV2ZW50cykKLXsKLSAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsKLSAg
ICBpZiAoIXdlYlZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3NlcGFyYXRvcklu
ZGV4ICE9IC0xICYmIGxpc3RJbmRleCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NlcGFyYXRv
ckluZGV4KSkKLSAgICAgICAgLS1saXN0SW5kZXg7Ci0KLSAgICBBU1NFUlQobGlzdEluZGV4IDwg
bV9uYW1lcy5zaXplKCkpOwotCi0gICAgd2ViVmlldy0+YXV0b0ZpbGxDbGllbnQoKS0+ZGlkQWNj
ZXB0QXV0b0ZpbGxTdWdnZXN0aW9uKFdlYk5vZGUoZ2V0VGV4dEZpZWxkKCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVz
W2xpc3RJbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbGFiZWxzW2xpc3RJbmRleF0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5pcXVlSURzW2xpc3RJ
bmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3RJbmRleCk7Ci19Ci0KLXZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6
OnNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCi17
Ci0gICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7Ci0gICAgaWYgKCF3ZWJW
aWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9zZXBhcmF0b3JJbmRleCAhPSAtMSAm
JiBsaXN0SW5kZXggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zZXBhcmF0b3JJbmRleCkpCi0g
ICAgICAgIC0tbGlzdEluZGV4OwotCi0gICAgQVNTRVJUKGxpc3RJbmRleCA8IG1fbmFtZXMuc2l6
ZSgpKTsKLQotICAgIHdlYlZpZXctPmF1dG9GaWxsQ2xpZW50KCktPmRpZFNlbGVjdEF1dG9GaWxs
U3VnZ2VzdGlvbihXZWJOb2RlKGdldFRleHRGaWVsZCgpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9uYW1lc1tsaXN0SW5kZXhd
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2xhYmVsc1tsaXN0SW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VuaXF1ZUlEc1tsaXN0SW5kZXhdKTsKLX0K
LQotdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2xlYXJlZCgpCi17Ci0g
ICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7Ci0gICAgaWYgKHdlYlZpZXcp
Ci0gICAgICAgIHdlYlZpZXctPmF1dG9GaWxsQ2xpZW50KCktPmRpZENsZWFyQXV0b0ZpbGxTZWxl
Y3Rpb24oV2ViTm9kZShnZXRUZXh0RmllbGQoKSkpOwotfQotCi1TdHJpbmcgQXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQ6Oml0ZW1UZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gZ2V0U3VnZ2VzdGlvbihsaXN0SW5kZXgpOwotfQotCi1TdHJpbmcgQXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQ6Oml0ZW1MYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldExhYmVsKGxpc3RJbmRleCk7Ci19Ci0KLVN0cmluZyBBdXRvRmlsbFBvcHVwTWVu
dUNsaWVudDo6aXRlbUljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIHJldHVy
biBnZXRJY29uKGxpc3RJbmRleCk7Ci19Ci0KLWJvb2wgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6
Oml0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIHJldHVybiAh
aXRlbUlzV2FybmluZyhsaXN0SW5kZXgpOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBBdXRvRmlsbFBv
cHVwTWVudUNsaWVudDo6aXRlbVN0eWxlKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gaXRlbUlzV2FybmluZyhsaXN0SW5kZXgpID8gKm1fd2FybmluZ1N0eWxlIDogKm1f
cmVndWxhclN0eWxlOwotfQotCi1Qb3B1cE1lbnVTdHlsZSBBdXRvRmlsbFBvcHVwTWVudUNsaWVu
dDo6bWVudVN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fcmVndWxhclN0eWxlOwotfQot
Ci1pbnQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdMZWZ0KCkgY29uc3QK
LXsKLSAgICAvLyBCdWcgaHR0cDovL2NyYnVnLmNvbS83NzA4IHNlZW1zIHRvIGluZGljYXRlIHRo
ZSBzdHlsZSBjYW4gYmUgMC4KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0RmllbGRTdHls
ZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gUmVu
ZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5wb3B1cEludGVybmFsUGFkZGluZ0xlZnQoc3R5bGUp
OwotfQotCi1pbnQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdSaWdodCgp
IGNvbnN0Ci17Ci0gICAgLy8gQnVnIGh0dHA6Ly9jcmJ1Zy5jb20vNzcwOCBzZWVtcyB0byBpbmRp
Y2F0ZSB0aGUgc3R5bGUgY2FuIGJlIDAuCi0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEZp
ZWxkU3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnBvcHVwSW50ZXJuYWxQYWRkaW5nUmln
aHQoc3R5bGUpOwotfQotCi12b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhp
ZGUoKQotewotICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOwotICAgIGlm
ICghd2ViVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2ViVmlldy0+YXV0b0ZpbGxQb3B1
cERpZEhpZGUoKTsKLSAgICB3ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpLT5kaWRDbGVhckF1dG9G
aWxsU2VsZWN0aW9uKFdlYk5vZGUoZ2V0VGV4dEZpZWxkKCkpKTsKLX0KLQotYm9vbCBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6aXRlbUlzU2VwYXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29u
c3QKLXsKLSAgICByZXR1cm4gKG1fc2VwYXJhdG9ySW5kZXggIT0gLTEgJiYgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpID09IGxpc3RJbmRleCk7Ci19Ci0KLWJvb2wgQXV0
b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1Jc1dhcm5pbmcodW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdAotewotICAgIGludCBpbmRleCA9IGNvbnZlcnRMaXN0SW5kZXhUb0ludGVybmFsSW5kZXgo
bGlzdEluZGV4KTsKLSAgICBpZiAoaW5kZXggPT0gLTEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEFTU0VSVChpbmRleCA+PSAwICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpIDwg
bV91bmlxdWVJRHMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV91bmlxdWVJRHNbaW5kZXhdIDwgMDsK
LX0KLQotdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKHVuc2ln
bmVkIGxpc3RJbmRleCkKLXsKLSAgICBtX3RleHRGaWVsZC0+c2V0VmFsdWUoZ2V0U3VnZ2VzdGlv
bihsaXN0SW5kZXgpKTsKLX0KLQotRm9udFNlbGVjdG9yKiBBdXRvRmlsbFBvcHVwTWVudUNsaWVu
dDo6Zm9udFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90ZXh0RmllbGQtPmRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCk7Ci19Ci0KLUhvc3RXaW5kb3cq
IEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV90ZXh0RmllbGQtPmRvY3VtZW50KCktPnZpZXcoKS0+aG9zdFdpbmRvdygpOwotfQotCi1Q
YXNzUmVmUHRyPFNjcm9sbGJhcj4gQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9s
bGJhcigKLSAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEsCi0gICAgU2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb24sCi0gICAgU2Nyb2xsYmFyQ29udHJvbFNpemUgc2l6ZSkK
LXsKLSAgICByZXR1cm4gU2Nyb2xsYmFyOjpjcmVhdGVOYXRpdmVTY3JvbGxiYXIoc2Nyb2xsYWJs
ZUFyZWEsIG9yaWVudGF0aW9uLCBzaXplKTsKLX0KLQotdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNs
aWVudDo6aW5pdGlhbGl6ZSgKLSAgICBIVE1MSW5wdXRFbGVtZW50KiB0ZXh0RmllbGQsCi0gICAg
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5hbWVzLAotICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiBsYWJlbHMsCi0gICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGljb25z
LAotICAgIGNvbnN0IFdlYlZlY3RvcjxpbnQ+JiB1bmlxdWVJRHMsCi0gICAgaW50IHNlcGFyYXRv
ckluZGV4KQotewotICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gbGFiZWxzLnNpemUoKSk7Ci0g
ICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSBpY29ucy5zaXplKCkpOwotICAgIEFTU0VSVChuYW1l
cy5zaXplKCkgPT0gdW5pcXVlSURzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHNlcGFyYXRvckluZGV4
IDwgc3RhdGljX2Nhc3Q8aW50PihuYW1lcy5zaXplKCkpKTsKLQotICAgIG1fc2VsZWN0ZWRJbmRl
eCA9IC0xOwotICAgIG1fdGV4dEZpZWxkID0gdGV4dEZpZWxkOwotCi0gICAgLy8gVGhlIHN1Z2dl
c3Rpb25zIG11c3QgYmUgc2V0IGJlZm9yZSBpbml0aWFsaXppbmcgdGhlCi0gICAgLy8gQXV0b0Zp
bGxQb3B1cE1lbnVDbGllbnQuCi0gICAgc2V0U3VnZ2VzdGlvbnMobmFtZXMsIGxhYmVscywgaWNv
bnMsIHVuaXF1ZUlEcywgc2VwYXJhdG9ySW5kZXgpOwotCi0gICAgRm9udERlc2NyaXB0aW9uIHJl
Z3VsYXJGb250RGVzY3JpcHRpb247Ci0gICAgUmVuZGVyVGhlbWU6OmRlZmF1bHRUaGVtZSgpLT5z
eXN0ZW1Gb250KENTU1ZhbHVlV2Via2l0Q29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVndWxhckZvbnREZXNjcmlwdGlvbik7Ci0gICAgUmVuZGVy
U3R5bGUqIHN0eWxlID0gbV90ZXh0RmllbGQtPmNvbXB1dGVkU3R5bGUoKTsKLSAgICByZWd1bGFy
Rm9udERlc2NyaXB0aW9uLnNldENvbXB1dGVkU2l6ZShzdHlsZS0+Zm9udERlc2NyaXB0aW9uKCku
Y29tcHV0ZWRTaXplKCkpOwotCi0gICAgRm9udCByZWd1bGFyRm9udChyZWd1bGFyRm9udERlc2Ny
aXB0aW9uLCAwLCAwKTsKLSAgICByZWd1bGFyRm9udC51cGRhdGUodGV4dEZpZWxkLT5kb2N1bWVu
dCgpLT5zdHlsZVNlbGVjdG9yKCktPmZvbnRTZWxlY3RvcigpKTsKLSAgICAvLyBUaGUgZGlyZWN0
aW9uIG9mIHRleHQgaW4gcG9wdXAgbWVudSBpcyBzZXQgdGhlIHNhbWUgYXMgdGhlIGRpcmVjdGlv
biBvZgotICAgIC8vIHRoZSBpbnB1dCBlbGVtZW50OiB0ZXh0RmllbGQuCi0gICAgbV9yZWd1bGFy
U3R5bGUgPSBhZG9wdFB0cihuZXcgUG9wdXBNZW51U3R5bGUoQ29sb3I6OmJsYWNrLCBDb2xvcjo6
d2hpdGUsIHJlZ3VsYXJGb250LCB0cnVlLCBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGgoV2ViQ29yZTo6Rml4ZWQpLCB0ZXh0Rmll
bGQtPnJlbmRlcmVyKCktPnN0eWxlKCktPmRpcmVjdGlvbigpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRGaWVsZC0+cmVuZGVyZXIoKS0+c3R5
bGUoKS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQb3B1cE1lbnVTdHlsZTo6QXV0b2ZpbGxQb3B1cCkp
OwotCi0gICAgRm9udERlc2NyaXB0aW9uIHdhcm5pbmdGb250RGVzY3JpcHRpb24gPSByZWd1bGFy
Rm9udC5mb250RGVzY3JpcHRpb24oKTsKLSAgICB3YXJuaW5nRm9udERlc2NyaXB0aW9uLnNldEl0
YWxpYyh0cnVlKTsKLSAgICBGb250IHdhcm5pbmdGb250KHdhcm5pbmdGb250RGVzY3JpcHRpb24s
IHJlZ3VsYXJGb250LmxldHRlclNwYWNpbmcoKSwgcmVndWxhckZvbnQud29yZFNwYWNpbmcoKSk7
Ci0gICAgd2FybmluZ0ZvbnQudXBkYXRlKHJlZ3VsYXJGb250LmZvbnRTZWxlY3RvcigpKTsKLSAg
ICBtX3dhcm5pbmdTdHlsZSA9IGFkb3B0UHRyKG5ldyBQb3B1cE1lbnVTdHlsZShDb2xvcjo6ZGFy
a0dyYXksIG1fcmVndWxhclN0eWxlLT5iYWNrZ3JvdW5kQ29sb3IoKSwgd2FybmluZ0ZvbnQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWd1bGFy
U3R5bGUtPmlzVmlzaWJsZSgpLCBtX3JlZ3VsYXJTdHlsZS0+aXNEaXNwbGF5Tm9uZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVndWxhclN0
eWxlLT50ZXh0SW5kZW50KCksIG1fcmVndWxhclN0eWxlLT50ZXh0RGlyZWN0aW9uKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWd1bGFyU3R5
bGUtPmhhc1RleHREaXJlY3Rpb25PdmVycmlkZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBvcHVwTWVudVN0eWxlOjpBdXRvZmlsbFBvcHVwKSk7
Ci19Ci0KLXZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3Rpb25zKGNvbnN0
IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYgaWNvbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8aW50PiYgdW5pcXVlSURzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcGFyYXRvckluZGV4KQotewot
ICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gbGFiZWxzLnNpemUoKSk7Ci0gICAgQVNTRVJUKG5h
bWVzLnNpemUoKSA9PSBpY29ucy5zaXplKCkpOwotICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0g
dW5pcXVlSURzLnNpemUoKSk7Ci0gICAgQVNTRVJUKHNlcGFyYXRvckluZGV4IDwgc3RhdGljX2Nh
c3Q8aW50PihuYW1lcy5zaXplKCkpKTsKLQotICAgIG1fbmFtZXMuY2xlYXIoKTsKLSAgICBtX2xh
YmVscy5jbGVhcigpOwotICAgIG1faWNvbnMuY2xlYXIoKTsKLSAgICBtX3VuaXF1ZUlEcy5jbGVh
cigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgbV9uYW1lcy5hcHBlbmQobmFtZXNbaV0pOwotICAgICAgICBtX2xhYmVscy5hcHBlbmQo
bGFiZWxzW2ldKTsKLSAgICAgICAgbV9pY29ucy5hcHBlbmQoaWNvbnNbaV0pOwotICAgICAgICBt
X3VuaXF1ZUlEcy5hcHBlbmQodW5pcXVlSURzW2ldKTsKLSAgICB9Ci0KLSAgICBtX3NlcGFyYXRv
ckluZGV4ID0gc2VwYXJhdG9ySW5kZXg7Ci0KLSAgICAvLyBUcnkgdG8gcHJlc2VydmUgc2VsZWN0
aW9uIGlmIHBvc3NpYmxlLgotICAgIGlmIChnZXRTZWxlY3RlZEluZGV4KCkgPj0gc3RhdGljX2Nh
c3Q8aW50PihuYW1lcy5zaXplKCkpKQotICAgICAgICBzZXRTZWxlY3RlZEluZGV4KC0xKTsKLX0K
LQotaW50IEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojpjb252ZXJ0TGlzdEluZGV4VG9JbnRlcm5h
bEluZGV4KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBpZiAobGlzdEluZGV4ID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NlcGFyYXRvckluZGV4KSkKLSAgICAgICAgcmV0dXJu
IC0xOwotCi0gICAgaWYgKG1fc2VwYXJhdG9ySW5kZXggPT0gLTEgfHwgbGlzdEluZGV4IDwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpKQotICAgICAgICByZXR1cm4gbGlz
dEluZGV4OwotICAgIHJldHVybiBsaXN0SW5kZXggLSAxOwotfQotCi1XZWJWaWV3SW1wbCogQXV0
b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldFdlYlZpZXcoKSBjb25zdAotewotICAgIEZyYW1lKiBm
cmFtZSA9IG1fdGV4dEZpZWxkLT5kb2N1bWVudCgpLT5mcmFtZSgpOwotICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCk7Ci0g
ICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJWaWV3SW1wbCo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+d2ViVmlldygpKTsKLX0K
LQotUmVuZGVyU3R5bGUqIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50Ojp0ZXh0RmllbGRTdHlsZSgp
IGNvbnN0Ci17Ci0gICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gbV90ZXh0RmllbGQtPmNvbXB1dGVk
U3R5bGUoKTsKLSAgICBpZiAoIXN0eWxlKSB7Ci0gICAgICAgIC8vIEl0IHNlZW1zIHdlIGNhbiBv
bmx5IGhhdmUgYSAwIHN0eWxlIGluIGEgVGV4dEZpZWxkIGlmIHRoZQotICAgICAgICAvLyBub2Rl
IGlzIGRldGFjaGVkLCBpbiB3aGljaCBjYXNlIHdlIHRoZSBwb3B1cCBzaG91bGQgbm90IGJlCi0g
ICAgICAgIC8vIHNob3dpbmcuICBQbGVhc2UgcmVwb3J0IHRoaXMgaW4gaHR0cDovL2NyYnVnLmNv
bS83NzA4IGFuZAotICAgICAgICAvLyBpbmNsdWRlIHRoZSBwYWdlIHlvdSB3ZXJlIHZpc2l0aW5n
LgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0eWxl
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9BdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjNjE2MjZhLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnRfaAotI2RlZmluZSBBdXRvRmlsbFBv
cHVwTWVudUNsaWVudF9oCi0KLSNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotY2xhc3MgRm9udFNlbGVjdG9yOwotY2xhc3MgSFRNTElucHV0RWxlbWVu
dDsKLWNsYXNzIFBvcHVwTWVudVN0eWxlOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVmlld0ltcGw7Ci10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwotCi0vLyBUaGUgQXV0b0ZpbGwgc3Vn
Z2VzdGlvbnMgcG9wdXAgbWVudSBjbGllbnQsIHVzZWQgdG8gZGlzcGxheSBuYW1lIHN1Z2dlc3Rp
b25zCi0vLyB3aXRoIHJpZ2h0LWp1c3RpZmllZCBsYWJlbHMuCi1jbGFzcyBBdXRvRmlsbFBvcHVw
TWVudUNsaWVudCA6IHB1YmxpYyBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQgewotcHVibGljOgot
ICAgIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KCk7Ci0gICAgdmlydHVhbCB+QXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWdnZXN0aW9u
cyBhdmFpbGFibGUuCi0gICAgdmlydHVhbCB1bnNpZ25lZCBnZXRTdWdnZXN0aW9uc0NvdW50KCkg
Y29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBzdWdnZXN0aW9uIGF0IHxsaXN0SW5kZXh8Lgot
ICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldFN1Z2dlc3Rpb24odW5zaWduZWQgbGlzdEluZGV4KSBj
b25zdDsKLQotICAgIC8vIFJldHVybnMgdGhlIGxhYmVsIGF0IHxsaXN0SW5kZXh8LgotICAgIHZp
cnR1YWwgV2ViU3RyaW5nIGdldExhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7Ci0KLSAg
ICAvLyBSZXR1cm5zIHRoZSBpY29uIGF0IHxsaXN0SW5kZXh8LgotICAgIHZpcnR1YWwgV2ViU3Ry
aW5nIGdldEljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKLQotICAgIC8vIFJlbW92ZXMg
dGhlIHN1Z2dlc3Rpb24gYXQgfGxpc3RJbmRleHwgZnJvbSB0aGUgbGlzdCBvZiBzdWdnZXN0aW9u
cy4KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgodW5zaWduZWQgbGlz
dEluZGV4KTsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3VnZ2VzdGlvbiBhdCB8bGlz
dEluZGV4fCBjYW4gYmUgcmVtb3ZlZC4KLSAgICBib29sIGNhblJlbW92ZVN1Z2dlc3Rpb25BdElu
ZGV4KHVuc2lnbmVkIGxpc3RJbmRleCk7Ci0KLSAgICAvLyBXZWJDb3JlOjpQb3B1cE1lbnVDbGll
bnQgbWV0aG9kczoKLSAgICB2aXJ0dWFsIHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJ
bmRleCwgYm9vbCBmaXJlRXZlbnRzID0gdHJ1ZSk7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlv
bkNoYW5nZWQodW5zaWduZWQsIGJvb2wpOwotICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DbGVh
cmVkKCk7Ci0gICAgdmlydHVhbCBXVEY6OlN0cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgaXRlbUxhYmVsKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXVEY6OlN0cmluZyBpdGVtSWNvbih1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgaXRlbVRvb2xUaXAo
dW5zaWduZWQgbGFzdEluZGV4KSBjb25zdCB7IHJldHVybiBXVEY6OlN0cmluZygpOyB9Ci0gICAg
dmlydHVhbCBXVEY6OlN0cmluZyBpdGVtQWNjZXNzaWJpbGl0eVRleHQodW5zaWduZWQgbGFzdElu
ZGV4KSBjb25zdCB7IHJldHVybiBXVEY6OlN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBib29sIGl0
ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKLSAgICB2aXJ0dWFsIFdlYkNv
cmU6OlBvcHVwTWVudVN0eWxlIGl0ZW1TdHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgV2ViQ29yZTo6UG9wdXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAg
IHZpcnR1YWwgaW50IGNsaWVudEluc2V0UmlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAg
dmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBj
bGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIGdldFN1Z2dlc3Rpb25zQ291bnQoKTsgfQotICAgIHZpcnR1YWwgaW50IHNl
bGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRv
cih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJl
bCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVh
bCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIHZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjaygp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRl
bSh1bnNpZ25lZCBsaXN0SW5kZXgpOwotICAgIHZpcnR1YWwgV2ViQ29yZTo6Rm9udFNlbGVjdG9y
KiBmb250U2VsZWN0b3IoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFdlYkNvcmU6Okhvc3RXaW5kb3cq
IGhvc3RXaW5kb3coKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Ny
b2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIoCi0gICAgICAgIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
KiBjbGllbnQsCi0gICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLAotICAgICAgICBXZWJDb3JlOjpTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKLQotICAg
IHZvaWQgaW5pdGlhbGl6ZShXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50KiwKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5hbWVzLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbGFiZWxzLAotICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaWNvbnMsCi0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlZlY3RvcjxpbnQ+JiB1bmlxdWVJRHMsCi0gICAgICAgICAgICAgICAg
ICAgIGludCBzZXBhcmF0b3JJbmRleCk7Ci0KLSAgICB2b2lkIHNldFN1Z2dlc3Rpb25zKGNvbnN0
IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaWNvbnMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8aW50PiYgdW5pcXVlSURzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHNlcGFyYXRvckluZGV4KTsKLQotcHJpdmF0ZToKLSAgICAvLyBDb252ZXJ0IHRo
ZSBzcGVjaWZpZWQgaW5kZXggZnJvbSBhbiBpbmRleCBpbnRvIHRoZSB2aXNpYmxlIGxpc3QgKHdo
aWNoIG1pZ2h0Ci0gICAgLy8gaW5jbHVkZSBhIHNlcGFyYXRvciBlbnRyeSkgdG8gYW4gaW5kZXgg
dG8gfG1fbmFtZXN8IGFuZCB8bV9sYWJlbHN8LgotICAgIC8vIFJldHVybnMgLTEgaWYgdGhlIGdp
dmVuIGluZGV4IHBvaW50cyB0byB0aGUgc2VwYXJhdG9yLgotICAgIGludCBjb252ZXJ0TGlzdElu
ZGV4VG9JbnRlcm5hbEluZGV4KHVuc2lnbmVkKSBjb25zdDsKLSAgICBXZWJWaWV3SW1wbCogZ2V0
V2ViVmlldygpIGNvbnN0OwotICAgIFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGdldFRleHRG
aWVsZCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dEZpZWxkLmdldCgpOyB9Ci0gICAgV2ViQ29yZTo6
UmVuZGVyU3R5bGUqIHRleHRGaWVsZFN0eWxlKCkgY29uc3Q7Ci0KLSAgICBpbnQgZ2V0U2VsZWN0
ZWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRJbmRleDsgfQotICAgIHZvaWQgc2V0
U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgpIHsgbV9zZWxlY3RlZEluZGV4ID0gaW5kZXg7IH0KLQot
ICAgIGJvb2wgaXRlbUlzV2FybmluZyh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwotCi0gICAg
Ly8gVGhlIG5hbWVzLCBsYWJlbHMgYW5kIGljb25zIHRoYXQgbWFrZSB1cCB0aGUgY29udGVudHMg
b2YgdGhlIG1lbnUgaXRlbXMuCi0gICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX25hbWVzOwotICAg
IFZlY3RvcjxXVEY6OlN0cmluZz4gbV9sYWJlbHM7Ci0gICAgVmVjdG9yPFdURjo6U3RyaW5nPiBt
X2ljb25zOwotICAgIFZlY3RvcjxpbnQ+IG1fdW5pcXVlSURzOwotCi0gICAgLy8gVGhlIGluZGV4
IG9mIHRoZSBzZXBhcmF0b3IuICAtMSBpZiB0aGVyZSBpcyBubyBzZXBhcmF0b3IuCi0gICAgaW50
IG1fc2VwYXJhdG9ySW5kZXg7Ci0KLSAgICAvLyBUaGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0
ZW0uICAtMSBpZiB0aGVyZSBpcyBubyBzZWxlY3RlZCBpdGVtLgotICAgIGludCBtX3NlbGVjdGVk
SW5kZXg7Ci0KLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTElucHV0RWxlbWVudD4gbV90ZXh0Rmll
bGQ7Ci0gICAgT3duUHRyPFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlPiBtX3JlZ3VsYXJTdHlsZTsK
LSAgICBPd25QdHI8V2ViQ29yZTo6UG9wdXBNZW51U3R5bGU+IG1fd2FybmluZ1N0eWxlOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0YTE4NGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAKQEAgLTAs
MCArMSwzNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQXV0b2ZpbGxQb3B1cE1l
bnVDbGllbnQuaCIKKworI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNT
U1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVk
ZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
KyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiV2ViQXV0b2ZpbGxDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJOb2RlLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVmVj
dG9yLmgiCisjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBs
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50KCkKKyAgICA6
IG1fc2VwYXJhdG9ySW5kZXgoLTEpCisgICAgLCBtX3NlbGVjdGVkSW5kZXgoLTEpCisgICAgLCBt
X3RleHRGaWVsZCgwKQoreworfQorCitBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6fkF1dG9maWxs
UG9wdXBNZW51Q2xpZW50KCkKK3sKK30KKwordW5zaWduZWQgQXV0b2ZpbGxQb3B1cE1lbnVDbGll
bnQ6OmdldFN1Z2dlc3Rpb25zQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWVzLnNp
emUoKSArICgobV9zZXBhcmF0b3JJbmRleCA9PSAtMSkgPyAwIDogMSk7Cit9CisKK1dlYlN0cmlu
ZyBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0U3VnZ2VzdGlvbih1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0Cit7CisgICAgaW50IGluZGV4ID0gY29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJ
bmRleChsaXN0SW5kZXgpOworICAgIGlmIChpbmRleCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIFdl
YlN0cmluZygpOworCisgICAgQVNTRVJUKGluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbmRleCkgPCBtX25hbWVzLnNpemUoKSk7CisgICAgcmV0dXJuIG1fbmFtZXNbaW5kZXhdOwor
fQorCitXZWJTdHJpbmcgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldExhYmVsKHVuc2lnbmVk
IGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICBpbnQgaW5kZXggPSBjb252ZXJ0TGlzdEluZGV4VG9J
bnRlcm5hbEluZGV4KGxpc3RJbmRleCk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICBy
ZXR1cm4gV2ViU3RyaW5nKCk7CisKKyAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGluZGV4KSA8IG1fbGFiZWxzLnNpemUoKSk7CisgICAgcmV0dXJuIG1fbGFiZWxz
W2luZGV4XTsKK30KKworV2ViU3RyaW5nIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpnZXRJY29u
KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICBpbnQgaW5kZXggPSBjb252ZXJ0TGlz
dEluZGV4VG9JbnRlcm5hbEluZGV4KGxpc3RJbmRleCk7CisgICAgaWYgKGluZGV4ID09IC0xKQor
ICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CisKKyAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBz
dGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IG1faWNvbnMuc2l6ZSgpKTsKKyAgICByZXR1cm4g
bV9pY29uc1tpbmRleF07Cit9CisKK3ZvaWQgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OnJlbW92
ZVN1Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVkIGxpc3RJbmRleCkKK3sKKyAgICBpZiAoIWNhblJl
bW92ZVN1Z2dlc3Rpb25BdEluZGV4KGxpc3RJbmRleCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGludCBpbmRleCA9IGNvbnZlcnRMaXN0SW5kZXhUb0ludGVybmFsSW5kZXgobGlzdEluZGV4KTsK
KworICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpIDwgbV9uYW1lcy5zaXpl
KCkpOworCisgICAgbV9uYW1lcy5yZW1vdmUoaW5kZXgpOworICAgIG1fbGFiZWxzLnJlbW92ZShp
bmRleCk7CisgICAgbV9pY29ucy5yZW1vdmUoaW5kZXgpOworICAgIG1fdW5pcXVlSURzLnJlbW92
ZShpbmRleCk7CisKKyAgICAvLyBTaGlmdCB0aGUgc2VwYXJhdG9yIGluZGV4IGlmIG5lY2Vzc2Fy
eS4KKyAgICBpZiAobV9zZXBhcmF0b3JJbmRleCAhPSAtMSkKKyAgICAgICAgbV9zZXBhcmF0b3JJ
bmRleC0tOworfQorCitib29sIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpjYW5SZW1vdmVTdWdn
ZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0SW5kZXgpCit7CisgICAgLy8gT25seSBhbGxvdyBk
ZWxldGlvbiBvZiBpdGVtcyBiZWZvcmUgdGhlIHNlcGFyYXRvciB0aGF0IGhhdmUgdW5pcXVlIGlk
IDAKKyAgICAvLyAoaS5lLiBhcmUgYXV0b2NvbXBsZXRlIHJhdGhlciB0aGFuIGF1dG9maWxsIGl0
ZW1zKS4KKyAgICBpbnQgaW5kZXggPSBjb252ZXJ0TGlzdEluZGV4VG9JbnRlcm5hbEluZGV4KGxp
c3RJbmRleCk7CisgICAgcmV0dXJuICFtX3VuaXF1ZUlEc1tpbmRleF0gJiYgKG1fc2VwYXJhdG9y
SW5kZXggPT0gLTEgfHwgbGlzdEluZGV4IDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJh
dG9ySW5kZXgpKTsKK30KKwordm9pZCBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFu
Z2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQoreworICAgIFdlYlZpZXdJ
bXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygpOworICAgIGlmICghd2ViVmlldykKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG1fc2VwYXJhdG9ySW5kZXggIT0gLTEgJiYgbGlzdEluZGV4ID4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpKQorICAgICAgICAtLWxpc3RJ
bmRleDsKKworICAgIEFTU0VSVChsaXN0SW5kZXggPCBtX25hbWVzLnNpemUoKSk7CisKKyAgICB3
ZWJWaWV3LT5hdXRvZmlsbENsaWVudCgpLT5kaWRBY2NlcHRBdXRvZmlsbFN1Z2dlc3Rpb24oV2Vi
Tm9kZShnZXRUZXh0RmllbGQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fbmFtZXNbbGlzdEluZGV4XSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYWJlbHNb
bGlzdEluZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV91bmlxdWVJRHNbbGlzdEluZGV4XSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEluZGV4KTsKK30K
Kwordm9pZCBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cykKK3sKKyAgICBXZWJWaWV3SW1wbCogd2ViVmll
dyA9IGdldFdlYlZpZXcoKTsKKyAgICBpZiAoIXdlYlZpZXcpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChtX3NlcGFyYXRvckluZGV4ICE9IC0xICYmIGxpc3RJbmRleCA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX3NlcGFyYXRvckluZGV4KSkKKyAgICAgICAgLS1saXN0SW5kZXg7CisKKyAg
ICBBU1NFUlQobGlzdEluZGV4IDwgbV9uYW1lcy5zaXplKCkpOworCisgICAgd2ViVmlldy0+YXV0
b2ZpbGxDbGllbnQoKS0+ZGlkU2VsZWN0QXV0b2ZpbGxTdWdnZXN0aW9uKFdlYk5vZGUoZ2V0VGV4
dEZpZWxkKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX25hbWVzW2xpc3RJbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGFiZWxzW2xpc3RJbmRleF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdW5pcXVlSURzW2xpc3RJbmRleF0pOworfQorCit2b2lkIEF1dG9maWxsUG9wdXBNZW51
Q2xpZW50OjpzZWxlY3Rpb25DbGVhcmVkKCkKK3sKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9
IGdldFdlYlZpZXcoKTsKKyAgICBpZiAod2ViVmlldykKKyAgICAgICAgd2ViVmlldy0+YXV0b2Zp
bGxDbGllbnQoKS0+ZGlkQ2xlYXJBdXRvZmlsbFNlbGVjdGlvbihXZWJOb2RlKGdldFRleHRGaWVs
ZCgpKSk7Cit9CisKK1N0cmluZyBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbVRleHQodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAgIHJldHVybiBnZXRTdWdnZXN0aW9uKGxpc3RJ
bmRleCk7Cit9CisKK1N0cmluZyBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUxhYmVsKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0TGFiZWwobGlzdEluZGV4
KTsKK30KKworU3RyaW5nIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSWNvbih1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldEljb24obGlzdEluZGV4KTsKK30K
KworYm9vbCBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBs
aXN0SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFpdGVtSXNXYXJuaW5nKGxpc3RJbmRleCk7
Cit9CisKK1BvcHVwTWVudVN0eWxlIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtU3R5bGUo
dW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAgIHJldHVybiBpdGVtSXNXYXJuaW5nKGxp
c3RJbmRleCkgPyAqbV93YXJuaW5nU3R5bGUgOiAqbV9yZWd1bGFyU3R5bGU7Cit9CisKK1BvcHVw
TWVudVN0eWxlIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjptZW51U3R5bGUoKSBjb25zdAorewor
ICAgIHJldHVybiAqbV9yZWd1bGFyU3R5bGU7Cit9CisKK2ludCBBdXRvZmlsbFBvcHVwTWVudUNs
aWVudDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBjb25zdAoreworICAgIC8vIEJ1ZyBodHRwOi8vY3Ji
dWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNhdGUgdGhlIHN0eWxlIGNhbiBiZSAwLgorICAgIFJl
bmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVsZFN0eWxlKCk7CisgICAgaWYgKCFzdHlsZSkKKyAg
ICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCkt
PnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChzdHlsZSk7Cit9CisKK2ludCBBdXRvZmlsbFBvcHVw
TWVudUNsaWVudDo6Y2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3QKK3sKKyAgICAvLyBCdWcgaHR0
cDovL2NyYnVnLmNvbS83NzA4IHNlZW1zIHRvIGluZGljYXRlIHRoZSBzdHlsZSBjYW4gYmUgMC4K
KyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0RmllbGRTdHlsZSgpOworICAgIGlmICghc3R5
bGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0
VGhlbWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRpbmdSaWdodChzdHlsZSk7Cit9CisKK3ZvaWQgQXV0
b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OnBvcHVwRGlkSGlkZSgpCit7CisgICAgV2ViVmlld0ltcGwq
IHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7CisgICAgaWYgKCF3ZWJWaWV3KQorICAgICAgICByZXR1
cm47CisKKyAgICB3ZWJWaWV3LT5hdXRvZmlsbFBvcHVwRGlkSGlkZSgpOworICAgIHdlYlZpZXct
PmF1dG9maWxsQ2xpZW50KCktPmRpZENsZWFyQXV0b2ZpbGxTZWxlY3Rpb24oV2ViTm9kZShnZXRU
ZXh0RmllbGQoKSkpOworfQorCitib29sIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSXNT
ZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAgIHJldHVybiAobV9zZXBh
cmF0b3JJbmRleCAhPSAtMSAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zZXBhcmF0b3JJbmRl
eCkgPT0gbGlzdEluZGV4KTsKK30KKworYm9vbCBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRl
bUlzV2FybmluZyh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgaW50IGluZGV4ID0g
Y29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJbmRleChsaXN0SW5kZXgpOworICAgIGlmIChpbmRl
eCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKGluZGV4ID49IDAg
JiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX3VuaXF1ZUlEcy5zaXplKCkpOworICAg
IHJldHVybiBtX3VuaXF1ZUlEc1tpbmRleF0gPCAwOworfQorCit2b2lkIEF1dG9maWxsUG9wdXBN
ZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KQoreworICAgIG1f
dGV4dEZpZWxkLT5zZXRWYWx1ZShnZXRTdWdnZXN0aW9uKGxpc3RJbmRleCkpOworfQorCitGb250
U2VsZWN0b3IqIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojpmb250U2VsZWN0b3IoKSBjb25zdAor
eworICAgIHJldHVybiBtX3RleHRGaWVsZC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5m
b250U2VsZWN0b3IoKTsKK30KKworSG9zdFdpbmRvdyogQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6
Omhvc3RXaW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBtX3RleHRGaWVsZC0+ZG9jdW1lbnQo
KS0+dmlldygpLT5ob3N0V2luZG93KCk7Cit9CisKK1Bhc3NSZWZQdHI8U2Nyb2xsYmFyPiBBdXRv
ZmlsbFBvcHVwTWVudUNsaWVudDo6Y3JlYXRlU2Nyb2xsYmFyKAorICAgIFNjcm9sbGFibGVBcmVh
KiBzY3JvbGxhYmxlQXJlYSwKKyAgICBTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwK
KyAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKQoreworICAgIHJldHVybiBTY3JvbGxiYXI6
OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihzY3JvbGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIHNpemUp
OworfQorCit2b2lkIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKAorICAgIEhU
TUxJbnB1dEVsZW1lbnQqIHRleHRGaWVsZCwKKyAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgbmFtZXMsCisgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKKyAgICBj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaWNvbnMsCisgICAgY29uc3QgV2ViVmVjdG9yPGlu
dD4mIHVuaXF1ZUlEcywKKyAgICBpbnQgc2VwYXJhdG9ySW5kZXgpCit7CisgICAgQVNTRVJUKG5h
bWVzLnNpemUoKSA9PSBsYWJlbHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobmFtZXMuc2l6ZSgpID09
IGljb25zLnNpemUoKSk7CisgICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSB1bmlxdWVJRHMuc2l6
ZSgpKTsKKyAgICBBU1NFUlQoc2VwYXJhdG9ySW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG5hbWVz
LnNpemUoKSkpOworCisgICAgbV9zZWxlY3RlZEluZGV4ID0gLTE7CisgICAgbV90ZXh0RmllbGQg
PSB0ZXh0RmllbGQ7CisKKyAgICAvLyBUaGUgc3VnZ2VzdGlvbnMgbXVzdCBiZSBzZXQgYmVmb3Jl
IGluaXRpYWxpemluZyB0aGUKKyAgICAvLyBBdXRvZmlsbFBvcHVwTWVudUNsaWVudC4KKyAgICBz
ZXRTdWdnZXN0aW9ucyhuYW1lcywgbGFiZWxzLCBpY29ucywgdW5pcXVlSURzLCBzZXBhcmF0b3JJ
bmRleCk7CisKKyAgICBGb250RGVzY3JpcHRpb24gcmVndWxhckZvbnREZXNjcmlwdGlvbjsKKyAg
ICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVXZWJraXRD
b250cm9sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1
bGFyRm9udERlc2NyaXB0aW9uKTsKKyAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3RleHRGaWVs
ZC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIHJlZ3VsYXJGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0
ZWRTaXplKHN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5jb21wdXRlZFNpemUoKSk7CisKKyAgICBG
b250IHJlZ3VsYXJGb250KHJlZ3VsYXJGb250RGVzY3JpcHRpb24sIDAsIDApOworICAgIHJlZ3Vs
YXJGb250LnVwZGF0ZSh0ZXh0RmllbGQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9u
dFNlbGVjdG9yKCkpOworICAgIC8vIFRoZSBkaXJlY3Rpb24gb2YgdGV4dCBpbiBwb3B1cCBtZW51
IGlzIHNldCB0aGUgc2FtZSBhcyB0aGUgZGlyZWN0aW9uIG9mCisgICAgLy8gdGhlIGlucHV0IGVs
ZW1lbnQ6IHRleHRGaWVsZC4KKyAgICBtX3JlZ3VsYXJTdHlsZSA9IGFkb3B0UHRyKG5ldyBQb3B1
cE1lbnVTdHlsZShDb2xvcjo6YmxhY2ssIENvbG9yOjp3aGl0ZSwgcmVndWxhckZvbnQsIHRydWUs
IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExlbmd0aChXZWJDb3JlOjpGaXhlZCksIHRleHRGaWVsZC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+
ZGlyZWN0aW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGV4dEZpZWxkLT5yZW5kZXJlcigpLT5zdHlsZSgpLT51bmljb2RlQmlkaSgpID09IE92
ZXJyaWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBvcHVwTWVudVN0eWxlOjpBdXRvZmlsbFBvcHVwKSk7CisKKyAgICBGb250RGVzY3JpcHRpb24g
d2FybmluZ0ZvbnREZXNjcmlwdGlvbiA9IHJlZ3VsYXJGb250LmZvbnREZXNjcmlwdGlvbigpOwor
ICAgIHdhcm5pbmdGb250RGVzY3JpcHRpb24uc2V0SXRhbGljKHRydWUpOworICAgIEZvbnQgd2Fy
bmluZ0ZvbnQod2FybmluZ0ZvbnREZXNjcmlwdGlvbiwgcmVndWxhckZvbnQubGV0dGVyU3BhY2lu
ZygpLCByZWd1bGFyRm9udC53b3JkU3BhY2luZygpKTsKKyAgICB3YXJuaW5nRm9udC51cGRhdGUo
cmVndWxhckZvbnQuZm9udFNlbGVjdG9yKCkpOworICAgIG1fd2FybmluZ1N0eWxlID0gYWRvcHRQ
dHIobmV3IFBvcHVwTWVudVN0eWxlKENvbG9yOjpkYXJrR3JheSwgbV9yZWd1bGFyU3R5bGUtPmJh
Y2tncm91bmRDb2xvcigpLCB3YXJuaW5nRm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX3JlZ3VsYXJTdHlsZS0+aXNWaXNpYmxlKCksIG1fcmVn
dWxhclN0eWxlLT5pc0Rpc3BsYXlOb25lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9yZWd1bGFyU3R5bGUtPnRleHRJbmRlbnQoKSwgbV9yZWd1
bGFyU3R5bGUtPnRleHREaXJlY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3JlZ3VsYXJTdHlsZS0+aGFzVGV4dERpcmVjdGlvbk92ZXJy
aWRlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UG9wdXBNZW51U3R5bGU6OkF1dG9maWxsUG9wdXApKTsKK30KKwordm9pZCBBdXRvZmlsbFBvcHVw
TWVudUNsaWVudDo6c2V0U3VnZ2VzdGlvbnMoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5h
bWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpY29ucywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3Rv
cjxpbnQ+JiB1bmlxdWVJRHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2VwYXJhdG9ySW5kZXgpCit7CisgICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9
PSBsYWJlbHMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IGljb25zLnNpemUo
KSk7CisgICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSB1bmlxdWVJRHMuc2l6ZSgpKTsKKyAgICBB
U1NFUlQoc2VwYXJhdG9ySW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG5hbWVzLnNpemUoKSkpOwor
CisgICAgbV9uYW1lcy5jbGVhcigpOworICAgIG1fbGFiZWxzLmNsZWFyKCk7CisgICAgbV9pY29u
cy5jbGVhcigpOworICAgIG1fdW5pcXVlSURzLmNsZWFyKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBtX25hbWVzLmFwcGVuZChuYW1l
c1tpXSk7CisgICAgICAgIG1fbGFiZWxzLmFwcGVuZChsYWJlbHNbaV0pOworICAgICAgICBtX2lj
b25zLmFwcGVuZChpY29uc1tpXSk7CisgICAgICAgIG1fdW5pcXVlSURzLmFwcGVuZCh1bmlxdWVJ
RHNbaV0pOworICAgIH0KKworICAgIG1fc2VwYXJhdG9ySW5kZXggPSBzZXBhcmF0b3JJbmRleDsK
KworICAgIC8vIFRyeSB0byBwcmVzZXJ2ZSBzZWxlY3Rpb24gaWYgcG9zc2libGUuCisgICAgaWYg
KGdldFNlbGVjdGVkSW5kZXgoKSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG5hbWVzLnNpemUoKSkpCisg
ICAgICAgIHNldFNlbGVjdGVkSW5kZXgoLTEpOworfQorCitpbnQgQXV0b2ZpbGxQb3B1cE1lbnVD
bGllbnQ6OmNvbnZlcnRMaXN0SW5kZXhUb0ludGVybmFsSW5kZXgodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdAoreworICAgIGlmIChsaXN0SW5kZXggPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
c2VwYXJhdG9ySW5kZXgpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobV9zZXBhcmF0
b3JJbmRleCA9PSAtMSB8fCBsaXN0SW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zZXBh
cmF0b3JJbmRleCkpCisgICAgICAgIHJldHVybiBsaXN0SW5kZXg7CisgICAgcmV0dXJuIGxpc3RJ
bmRleCAtIDE7Cit9CisKK1dlYlZpZXdJbXBsKiBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0
V2ViVmlldygpIGNvbnN0Cit7CisgICAgRnJhbWUqIGZyYW1lID0gbV90ZXh0RmllbGQtPmRvY3Vt
ZW50KCktPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4ocGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT53ZWJWaWV3KCkpOworfQorCitSZW5kZXJTdHlsZSogQXV0b2ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OnRleHRGaWVsZFN0eWxlKCkgY29uc3QKK3sKKyAgICBSZW5kZXJTdHls
ZSogc3R5bGUgPSBtX3RleHRGaWVsZC0+Y29tcHV0ZWRTdHlsZSgpOworICAgIGlmICghc3R5bGUp
IHsKKyAgICAgICAgLy8gSXQgc2VlbXMgd2UgY2FuIG9ubHkgaGF2ZSBhIDAgc3R5bGUgaW4gYSBU
ZXh0RmllbGQgaWYgdGhlCisgICAgICAgIC8vIG5vZGUgaXMgZGV0YWNoZWQsIGluIHdoaWNoIGNh
c2Ugd2UgdGhlIHBvcHVwIHNob3VsZCBub3QgYmUKKyAgICAgICAgLy8gc2hvd2luZy4gIFBsZWFz
ZSByZXBvcnQgdGhpcyBpbiBodHRwOi8vY3JidWcuY29tLzc3MDggYW5kCisgICAgICAgIC8vIGlu
Y2x1ZGUgdGhlIHBhZ2UgeW91IHdlcmUgdmlzaXRpbmcuCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gc3R5bGU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9maWxsUG9wdXBN
ZW51Q2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QyYjk4NQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9maWxsUG9w
dXBNZW51Q2xpZW50LmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEF1dG9maWxsUG9wdXBNZW51
Q2xpZW50X2gKKyNkZWZpbmUgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnRfaAorCisjaW5jbHVkZSAi
UG9wdXBNZW51Q2xpZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZvbnRTZWxl
Y3RvcjsKK2NsYXNzIEhUTUxJbnB1dEVsZW1lbnQ7CitjbGFzcyBQb3B1cE1lbnVTdHlsZTsKK2Ns
YXNzIFJlbmRlclN0eWxlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlN0cmlu
ZzsKK2NsYXNzIFdlYlZpZXdJbXBsOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZl
Y3RvcjsKKworLy8gVGhlIEF1dG9maWxsIHN1Z2dlc3Rpb25zIHBvcHVwIG1lbnUgY2xpZW50LCB1
c2VkIHRvIGRpc3BsYXkgbmFtZSBzdWdnZXN0aW9ucworLy8gd2l0aCByaWdodC1qdXN0aWZpZWQg
bGFiZWxzLgorY2xhc3MgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQgOiBwdWJsaWMgV2ViQ29yZTo6
UG9wdXBNZW51Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBBdXRvZmlsbFBvcHVwTWVudUNsaWVudCgp
OworICAgIHZpcnR1YWwgfkF1dG9maWxsUG9wdXBNZW51Q2xpZW50KCk7CisKKyAgICAvLyBSZXR1
cm5zIHRoZSBudW1iZXIgb2Ygc3VnZ2VzdGlvbnMgYXZhaWxhYmxlLgorICAgIHZpcnR1YWwgdW5z
aWduZWQgZ2V0U3VnZ2VzdGlvbnNDb3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUg
c3VnZ2VzdGlvbiBhdCB8bGlzdEluZGV4fC4KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRTdWdn
ZXN0aW9uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBs
YWJlbCBhdCB8bGlzdEluZGV4fC4KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRMYWJlbCh1bnNp
Z25lZCBsaXN0SW5kZXgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgaWNvbiBhdCB8bGlz
dEluZGV4fC4KKyAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRJY29uKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3Q7CisKKyAgICAvLyBSZW1vdmVzIHRoZSBzdWdnZXN0aW9uIGF0IHxsaXN0SW5kZXh8
IGZyb20gdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMuCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVN1
Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVkIGxpc3RJbmRleCk7CisKKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIHN1Z2dlc3Rpb24gYXQgfGxpc3RJbmRleHwgY2FuIGJlIHJlbW92ZWQuCisgICAg
Ym9vbCBjYW5SZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0SW5kZXgpOworCisg
ICAgLy8gV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50IG1ldGhvZHM6CisgICAgdmlydHVhbCB2b2lk
IHZhbHVlQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50cyA9IHRydWUp
OworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DaGFuZ2VkKHVuc2lnbmVkLCBib29sKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9uQ2xlYXJlZCgpOworICAgIHZpcnR1YWwgV1RGOjpTdHJp
bmcgaXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdURjo6
U3RyaW5nIGl0ZW1MYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwg
V1RGOjpTdHJpbmcgaXRlbUljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKKyAgICB2aXJ0
dWFsIFdURjo6U3RyaW5nIGl0ZW1Ub29sVGlwKHVuc2lnbmVkIGxhc3RJbmRleCkgY29uc3QgeyBy
ZXR1cm4gV1RGOjpTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgaXRlbUFjY2Vz
c2liaWxpdHlUZXh0KHVuc2lnbmVkIGxhc3RJbmRleCkgY29uc3QgeyByZXR1cm4gV1RGOjpTdHJp
bmcoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNFbmFibGVkKHVuc2lnbmVkIGxpc3RJbmRl
eCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZSBpdGVtU3R5bGUo
dW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlBvcHVwTWVu
dVN0eWxlIG1lbnVTdHlsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0TGVm
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNldFJpZ2h0
KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IGNsaWVudFBhZGRpbmdMZWZ0
KCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGluZ1JpZ2h0KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBpbnQgbGlzdFNpemUoKSBjb25zdCB7IHJldHVybiBnZXRTdWdnZXN0aW9uc0Nv
dW50KCk7IH0KKyAgICB2aXJ0dWFsIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3RlZEluZGV4OyB9CisgICAgdmlydHVhbCB2b2lkIHBvcHVwRGlkSGlkZSgpOworICAg
IHZpcnR1YWwgYm9vbCBpdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzTGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNTZWxlY3RlZCh1bnNpZ25l
ZCBsaXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIHNo
b3VsZFBvcE92ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCB2
YWx1ZVNob3VsZENoYW5nZU9uSG90VHJhY2soKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAg
IHZpcnR1YWwgdm9pZCBzZXRUZXh0RnJvbUl0ZW0odW5zaWduZWQgbGlzdEluZGV4KTsKKyAgICB2
aXJ0dWFsIFdlYkNvcmU6OkZvbnRTZWxlY3RvciogZm9udFNlbGVjdG9yKCkgY29uc3Q7CisgICAg
dmlydHVhbCBXZWJDb3JlOjpIb3N0V2luZG93KiBob3N0V2luZG93KCkgY29uc3Q7CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNjcm9sbGJhcj4gY3JlYXRlU2Nyb2xsYmFyKAorICAg
ICAgICBXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYSogY2xpZW50LAorICAgICAgICBXZWJDb3JlOjpT
Y3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKKyAgICAgICAgV2ViQ29yZTo6U2Nyb2xs
YmFyQ29udHJvbFNpemUgc2l6ZSk7CisKKyAgICB2b2lkIGluaXRpYWxpemUoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudCosCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiBuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0
cmluZz4mIGxhYmVscywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0
cmluZz4mIGljb25zLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8aW50PiYg
dW5pcXVlSURzLAorICAgICAgICAgICAgICAgICAgICBpbnQgc2VwYXJhdG9ySW5kZXgpOworCisg
ICAgdm9pZCBzZXRTdWdnZXN0aW9ucyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbGFi
ZWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4m
IGljb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPGludD4mIHVu
aXF1ZUlEcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXBhcmF0b3JJbmRleCk7CisK
K3ByaXZhdGU6CisgICAgLy8gQ29udmVydCB0aGUgc3BlY2lmaWVkIGluZGV4IGZyb20gYW4gaW5k
ZXggaW50byB0aGUgdmlzaWJsZSBsaXN0ICh3aGljaCBtaWdodAorICAgIC8vIGluY2x1ZGUgYSBz
ZXBhcmF0b3IgZW50cnkpIHRvIGFuIGluZGV4IHRvIHxtX25hbWVzfCBhbmQgfG1fbGFiZWxzfC4K
KyAgICAvLyBSZXR1cm5zIC0xIGlmIHRoZSBnaXZlbiBpbmRleCBwb2ludHMgdG8gdGhlIHNlcGFy
YXRvci4KKyAgICBpbnQgY29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJbmRleCh1bnNpZ25lZCkg
Y29uc3Q7CisgICAgV2ViVmlld0ltcGwqIGdldFdlYlZpZXcoKSBjb25zdDsKKyAgICBXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiBnZXRUZXh0RmllbGQoKSBjb25zdCB7IHJldHVybiBtX3RleHRG
aWVsZC5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlJlbmRlclN0eWxlKiB0ZXh0RmllbGRTdHlsZSgp
IGNvbnN0OworCisgICAgaW50IGdldFNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX3Nl
bGVjdGVkSW5kZXg7IH0KKyAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4KSB7IG1f
c2VsZWN0ZWRJbmRleCA9IGluZGV4OyB9CisKKyAgICBib29sIGl0ZW1Jc1dhcm5pbmcodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdDsKKworICAgIC8vIFRoZSBuYW1lcywgbGFiZWxzIGFuZCBpY29u
cyB0aGF0IG1ha2UgdXAgdGhlIGNvbnRlbnRzIG9mIHRoZSBtZW51IGl0ZW1zLgorICAgIFZlY3Rv
cjxXVEY6OlN0cmluZz4gbV9uYW1lczsKKyAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fbGFiZWxz
OworICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gbV9pY29uczsKKyAgICBWZWN0b3I8aW50PiBtX3Vu
aXF1ZUlEczsKKworICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgc2VwYXJhdG9yLiAgLTEgaWYgdGhl
cmUgaXMgbm8gc2VwYXJhdG9yLgorICAgIGludCBtX3NlcGFyYXRvckluZGV4OworCisgICAgLy8g
VGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCBpdGVtLiAgLTEgaWYgdGhlcmUgaXMgbm8gc2VsZWN0
ZWQgaXRlbS4KKyAgICBpbnQgbV9zZWxlY3RlZEluZGV4OworCisgICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ+IG1fdGV4dEZpZWxkOworICAgIE93blB0cjxXZWJDb3JlOjpQb3B1
cE1lbnVTdHlsZT4gbV9yZWd1bGFyU3R5bGU7CisgICAgT3duUHRyPFdlYkNvcmU6OlBvcHVwTWVu
dVN0eWxlPiBtX3dhcm5pbmdTdHlsZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0VkaXRvckNsaWVu
dEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5j
cHAKaW5kZXggMTAyZmVmMC4uY2E4ZDRmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJT
cGVsbENoZWNrZXIuaCIKIAogI2luY2x1ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKLSNpbmNs
dWRlICJXZWJBdXRvRmlsbENsaWVudC5oIgorI2luY2x1ZGUgIldlYkF1dG9maWxsQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiV2ViRWRpdGluZ0FjdGlvbi5oIgogI2luY2x1ZGUgIldlYkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgpAQCAtNjY0LDE1ICs2NjQsMTUgQEAgdm9pZCBF
ZGl0b3JDbGllbnRJbXBsOjpoYW5kbGVJbnB1dE1ldGhvZEtleWRvd24oS2V5Ym9hcmRFdmVudCog
a2V5RXZlbnQpCiB2b2lkIEVkaXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEJlZ2luRWRpdGlu
ZyhFbGVtZW50KiBlbGVtZW50KQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVu
dCA9IHRvSFRNTElucHV0RWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAobV93ZWJWaWV3LT5hdXRv
RmlsbENsaWVudCgpICYmIGlucHV0RWxlbWVudCkKLSAgICAgICAgbV93ZWJWaWV3LT5hdXRvRmls
bENsaWVudCgpLT50ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoV2ViSW5wdXRFbGVtZW50KGlucHV0
RWxlbWVudCkpOworICAgIGlmIChtX3dlYlZpZXctPmF1dG9maWxsQ2xpZW50KCkgJiYgaW5wdXRF
bGVtZW50KQorICAgICAgICBtX3dlYlZpZXctPmF1dG9maWxsQ2xpZW50KCktPnRleHRGaWVsZERp
ZEJlZ2luRWRpdGluZyhXZWJJbnB1dEVsZW1lbnQoaW5wdXRFbGVtZW50KSk7CiB9CiAKIHZvaWQg
RWRpdG9yQ2xpZW50SW1wbDo6dGV4dEZpZWxkRGlkRW5kRWRpdGluZyhFbGVtZW50KiBlbGVtZW50
KQogewogICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHRvSFRNTElucHV0RWxl
bWVudChlbGVtZW50KTsKLSAgICBpZiAobV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpICYmIGlu
cHV0RWxlbWVudCkKLSAgICAgICAgbV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpLT50ZXh0Rmll
bGREaWRFbmRFZGl0aW5nKFdlYklucHV0RWxlbWVudChpbnB1dEVsZW1lbnQpKTsKKyAgICBpZiAo
bV93ZWJWaWV3LT5hdXRvZmlsbENsaWVudCgpICYmIGlucHV0RWxlbWVudCkKKyAgICAgICAgbV93
ZWJWaWV3LT5hdXRvZmlsbENsaWVudCgpLT50ZXh0RmllbGREaWRFbmRFZGl0aW5nKFdlYklucHV0
RWxlbWVudChpbnB1dEVsZW1lbnQpKTsKIAogICAgIC8vIE5vdGlmaWNhdGlvbiB0aGF0IGZvY3Vz
IHdhcyBsb3N0LiAgQmUgY2FyZWZ1bCB3aXRoIHRoaXMsIGl0J3MgYWxzbyBzZW50CiAgICAgLy8g
d2hlbiB0aGUgcGFnZSBpcyBiZWluZyBjbG9zZWQuCkBAIC02ODIsNyArNjgyLDcgQEAgdm9pZCBF
ZGl0b3JDbGllbnRJbXBsOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQp
CiAgICAgbV9hdXRvZmlsbFRpbWVyLnN0b3AoKTsKIAogICAgIC8vIEhpZGUgYW55IHNob3dpbmcg
cG9wdXAuCi0gICAgbV93ZWJWaWV3LT5oaWRlQXV0b0ZpbGxQb3B1cCgpOworICAgIG1fd2ViVmll
dy0+aGlkZUF1dG9maWxsUG9wdXAoKTsKIAogICAgIGlmICghbV93ZWJWaWV3LT5jbGllbnQoKSkK
ICAgICAgICAgcmV0dXJuOyAvLyBUaGUgcGFnZSBpcyBnZXR0aW5nIGNsb3NlZCwgZG9uJ3QgZmls
bCB0aGUgcGFzc3dvcmQuCkBAIC03MDYsOCArNzA2LDggQEAgdm9pZCBFZGl0b3JDbGllbnRJbXBs
Ojp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBBU1NF
UlQoZWxlbWVudC0+aGFzTG9jYWxOYW1lKEhUTUxOYW1lczo6aW5wdXRUYWcpKTsKICAgICBIVE1M
SW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50
Kj4oZWxlbWVudCk7Ci0gICAgaWYgKG1fd2ViVmlldy0+YXV0b0ZpbGxDbGllbnQoKSkKLSAgICAg
ICAgbV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpLT50ZXh0RmllbGREaWRDaGFuZ2UoV2ViSW5w
dXRFbGVtZW50KGlucHV0RWxlbWVudCkpOworICAgIGlmIChtX3dlYlZpZXctPmF1dG9maWxsQ2xp
ZW50KCkpCisgICAgICAgIG1fd2ViVmlldy0+YXV0b2ZpbGxDbGllbnQoKS0+dGV4dEZpZWxkRGlk
Q2hhbmdlKFdlYklucHV0RWxlbWVudChpbnB1dEVsZW1lbnQpKTsKIAogICAgIC8vIE5vdGUgdGhh
dCB3ZSBvbmx5IHNob3cgdGhlIGF1dG9maWxsIHBvcHVwIGluIHRoaXMgY2FzZSBpZiB0aGUgY2Fy
ZXQgaXMgYXQKICAgICAvLyB0aGUgZW5kLiAgVGhpcyBtYXRjaGVzIEZpcmVGb3ggYW5kIFNhZmFy
aSBidXQgbm90IElFLgpAQCAtNzc4LDcgKzc3OCw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6
ZG9BdXRvZmlsbChUaW1lcjxFZGl0b3JDbGllbnRJbXBsPiogdGltZXIpCiAgICAgICAgICAgICAg
ICAgICAgICAgICYmIGlucHV0RWxlbWVudC0+c2VsZWN0aW9uRW5kKCkgPT0gc3RhdGljX2Nhc3Q8
aW50Pih2YWx1ZS5sZW5ndGgoKSk7CiAKICAgICBpZiAoKCFhcmdzLT5hdXRvZmlsbE9uRW1wdHlW
YWx1ZSAmJiB2YWx1ZS5pc0VtcHR5KCkpIHx8ICFpc0NhcmV0QXRFbmQpIHsKLSAgICAgICAgbV93
ZWJWaWV3LT5oaWRlQXV0b0ZpbGxQb3B1cCgpOworICAgICAgICBtX3dlYlZpZXctPmhpZGVBdXRv
ZmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTgxMCw4ICs4MTAsOCBA
QCBib29sIEVkaXRvckNsaWVudEltcGw6OmRvVGV4dEZpZWxkQ29tbWFuZEZyb21FdmVudChFbGVt
ZW50KiBlbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgS2V5Ym9hcmRFdmVudCogZXZlbnQpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCog
aW5wdXRFbGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmIChtX3dl
YlZpZXctPmF1dG9GaWxsQ2xpZW50KCkgJiYgaW5wdXRFbGVtZW50KSB7Ci0gICAgICAgIG1fd2Vi
Vmlldy0+YXV0b0ZpbGxDbGllbnQoKS0+dGV4dEZpZWxkRGlkUmVjZWl2ZUtleURvd24oV2ViSW5w
dXRFbGVtZW50KGlucHV0RWxlbWVudCksCisgICAgaWYgKG1fd2ViVmlldy0+YXV0b2ZpbGxDbGll
bnQoKSAmJiBpbnB1dEVsZW1lbnQpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5hdXRvZmlsbENsaWVu
dCgpLT50ZXh0RmllbGREaWRSZWNlaXZlS2V5RG93bihXZWJJbnB1dEVsZW1lbnQoaW5wdXRFbGVt
ZW50KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLZXlib2FyZEV2ZW50QnVpbGRlcigqZXZlbnQpKTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbnB1dEVsZW1lbnQuY3BwCmluZGV4
IDEzNDE2YmUuLjVlN2ExY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklucHV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SW5wdXRFbGVtZW50LmNwcApAQCAtMTIwLDkgKzEyMCw5IEBAIGJvb2wgV2ViSW5wdXRFbGVtZW50
Ojppc0F1dG9maWxsZWQoKSBjb25zdAogICAgIHJldHVybiBjb25zdFVud3JhcDxIVE1MSW5wdXRF
bGVtZW50PigpLT5pc0F1dG9maWxsZWQoKTsKIH0KIAotdm9pZCBXZWJJbnB1dEVsZW1lbnQ6OnNl
dEF1dG9maWxsZWQoYm9vbCBhdXRvRmlsbGVkKQordm9pZCBXZWJJbnB1dEVsZW1lbnQ6OnNldEF1
dG9maWxsZWQoYm9vbCBhdXRvZmlsbGVkKQogewotICAgIHVud3JhcDxIVE1MSW5wdXRFbGVtZW50
PigpLT5zZXRBdXRvZmlsbGVkKGF1dG9GaWxsZWQpOworICAgIHVud3JhcDxIVE1MSW5wdXRFbGVt
ZW50PigpLT5zZXRBdXRvZmlsbGVkKGF1dG9maWxsZWQpOwogfQogCiB2b2lkIFdlYklucHV0RWxl
bWVudDo6c2V0U2VsZWN0aW9uUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDI0OTczMzQuLmNkOTk1ZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTMxLDcgKzMx
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCi0j
aW5jbHVkZSAiQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCIKKyNpbmNsdWRlICJBdXRvZmlsbFBv
cHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJC
YWNrRm9yd2FyZExpc3RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
QEAgLTk5LDcgKzk5LDcgQEAKICNpbmNsdWRlICJVc2VyR2VzdHVyZUluZGljYXRvci5oIgogI2lu
Y2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYkFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLSNp
bmNsdWRlICJXZWJBdXRvRmlsbENsaWVudC5oIgorI2luY2x1ZGUgIldlYkF1dG9maWxsQ2xpZW50
LmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudEltcGwuaCIKICNpbmNsdWRlICJXZWJEZXZU
b29sc0FnZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkRyYWdEYXRhLmgiCkBAIC0yMDUsNyAr
MjA1LDcgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uTW92ZSk7
CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKERyYWdPcGVyYXRpb25EZWxldGUpOwogQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShEcmFnT3BlcmF0aW9uRXZlcnkpOwogCi1zdGF0aWMg
Y29uc3QgUG9wdXBDb250YWluZXJTZXR0aW5ncyBhdXRvRmlsbFBvcHVwU2V0dGluZ3MgPSB7Citz
dGF0aWMgY29uc3QgUG9wdXBDb250YWluZXJTZXR0aW5ncyBhdXRvZmlsbFBvcHVwU2V0dGluZ3Mg
PSB7CiAgICAgZmFsc2UsIC8vIHNldFRleHRPbkluZGV4Q2hhbmdlCiAgICAgZmFsc2UsIC8vIGFj
Y2VwdE9uQWJhbmRvbgogICAgIHRydWUsIC8vIGxvb3BTZWxlY3Rpb25OYXZpZ2F0aW9uCkBAIC0y
NzUsOSArMjc1LDkgQEAgdm9pZCBXZWJWaWV3SW1wbDo6aW5pdGlhbGl6ZU1haW5GcmFtZShXZWJG
cmFtZUNsaWVudCogZnJhbWVDbGllbnQpCiAgICAgU2VjdXJpdHlPcmlnaW46OnNldExvY2FsTG9h
ZFBvbGljeShTZWN1cml0eU9yaWdpbjo6QWxsb3dMb2NhbExvYWRzRm9yTG9jYWxPbmx5KTsKIH0K
IAotdm9pZCBXZWJWaWV3SW1wbDo6c2V0QXV0b0ZpbGxDbGllbnQoV2ViQXV0b0ZpbGxDbGllbnQq
IGF1dG9GaWxsQ2xpZW50KQordm9pZCBXZWJWaWV3SW1wbDo6c2V0QXV0b2ZpbGxDbGllbnQoV2Vi
QXV0b2ZpbGxDbGllbnQqIGF1dG9maWxsQ2xpZW50KQogewotICAgIG1fYXV0b0ZpbGxDbGllbnQg
PSBhdXRvRmlsbENsaWVudDsKKyAgICBtX2F1dG9maWxsQ2xpZW50ID0gYXV0b2ZpbGxDbGllbnQ7
CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldERldlRvb2xzQWdlbnRDbGllbnQoV2ViRGV2VG9v
bHNBZ2VudENsaWVudCogZGV2VG9vbHNDbGllbnQpIApAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQg
V2ViVmlld0ltcGw6OnNldFNwZWxsQ2hlY2tDbGllbnQoV2ViU3BlbGxDaGVja0NsaWVudCogc3Bl
bGxDaGVja0NsaWVudCkKIAogV2ViVmlld0ltcGw6OldlYlZpZXdJbXBsKFdlYlZpZXdDbGllbnQq
IGNsaWVudCkKICAgICA6IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fYXV0b0ZpbGxDbGllbnQo
MCkKKyAgICAsIG1fYXV0b2ZpbGxDbGllbnQoMCkKICAgICAsIG1fcGVybWlzc2lvbkNsaWVudCgw
KQogICAgICwgbV9zcGVsbENoZWNrQ2xpZW50KDApCiAgICAgLCBtX2Nocm9tZUNsaWVudEltcGwo
dGhpcykKQEAgLTMyMyw4ICszMjMsOCBAQCBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmll
d0NsaWVudCogY2xpZW50KQogICAgICwgbV9pbWVBY2NlcHRFdmVudHModHJ1ZSkKICAgICAsIG1f
b3BlcmF0aW9uc0FsbG93ZWQoV2ViRHJhZ09wZXJhdGlvbk5vbmUpCiAgICAgLCBtX2RyYWdPcGVy
YXRpb24oV2ViRHJhZ09wZXJhdGlvbk5vbmUpCi0gICAgLCBtX2F1dG9GaWxsUG9wdXBTaG93aW5n
KGZhbHNlKQotICAgICwgbV9hdXRvRmlsbFBvcHVwKDApCisgICAgLCBtX2F1dG9maWxsUG9wdXBT
aG93aW5nKGZhbHNlKQorICAgICwgbV9hdXRvZmlsbFBvcHVwKDApCiAgICAgLCBtX2lzVHJhbnNw
YXJlbnQoZmFsc2UpCiAgICAgLCBtX3RhYnNUb0xpbmtzKGZhbHNlKQogICAgICwgbV9kcmFnU2Ny
b2xsVGltZXIoYWRvcHRQdHIobmV3IERyYWdTY3JvbGxUaW1lcikpCkBAIC00NjAsNyArNDYwLDcg
QEAgdm9pZCBXZWJWaWV3SW1wbDo6bW91c2VEb3duKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50
KQogICAgICAgICAgICAgbV9tb3VzZUNhcHR1cmVOb2RlID0gaGl0Tm9kZTsKIAogICAgICAgICAv
LyBJZiBhIHRleHQgZmllbGQgdGhhdCBoYXMgZm9jdXMgaXMgY2xpY2tlZCBhZ2Fpbiwgd2Ugc2hv
dWxkIGRpc3BsYXkgdGhlCi0gICAgICAgIC8vIEF1dG9GaWxsIHBvcHVwLgorICAgICAgICAvLyBB
dXRvZmlsbCBwb3B1cC4KICAgICAgICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNl
ZFdlYkNvcmVOb2RlKCk7CiAgICAgICAgIGlmIChmb2N1c2VkTm9kZS5nZXQoKSAmJiB0b0hUTUxJ
bnB1dEVsZW1lbnQoZm9jdXNlZE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBpZiAoaGl0Tm9k
ZSA9PSBmb2N1c2VkTm9kZSkgewpAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgV2ViVmlld0ltcGw6
Om1vdXNlRG93bihjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKICAgICAgICAgUGxhdGZvcm1N
b3VzZUV2ZW50QnVpbGRlcihtYWluRnJhbWVJbXBsKCktPmZyYW1lVmlldygpLCBldmVudCkpOwog
CiAgICAgaWYgKGNsaWNrZWROb2RlLmdldCgpICYmIGNsaWNrZWROb2RlID09IGZvY3VzZWRXZWJD
b3JlTm9kZSgpKSB7Ci0gICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0aGUg
QXV0b0ZpbGwgcG9wdXAuCisgICAgICAgIC8vIEZvY3VzIGhhcyBub3QgY2hhbmdlZCwgc2hvdyB0
aGUgQXV0b2ZpbGwgcG9wdXAuCiAgICAgICAgIHN0YXRpY19jYXN0PEVkaXRvckNsaWVudEltcGwq
PihtX3BhZ2UtPmVkaXRvckNsaWVudCgpKS0+CiAgICAgICAgICAgICBzaG93Rm9ybUF1dG9maWxs
Rm9yTm9kZShjbGlja2VkTm9kZS5nZXQoKSk7CiAgICAgfQpAQCAtNjU1LDcgKzY1NSw3IEBAIGJv
b2wgV2ViVmlld0ltcGw6OmtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQog
CiBib29sIFdlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJL
ZXlib2FyZEV2ZW50JiBldmVudCkKIHsKLSAgICBpZiAoIW1fYXV0b0ZpbGxQb3B1cFNob3dpbmcK
KyAgICBpZiAoIW1fYXV0b2ZpbGxQb3B1cFNob3dpbmcKICAgICAgICAgLy8gSG9tZSBhbmQgRW5k
IHNob3VsZCBiZSBsZWZ0IHRvIHRoZSB0ZXh0IGZpZWxkIHRvIHByb2Nlc3MuCiAgICAgICAgIHx8
IGV2ZW50LndpbmRvd3NLZXlDb2RlID09IFZLRVlfSE9NRQogICAgICAgICB8fCBldmVudC53aW5k
b3dzS2V5Q29kZSA9PSBWS0VZX0VORCkKQEAgLTY2Myw3ICs2NjMsNyBAQCBib29sIFdlYlZpZXdJ
bXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBl
dmVudCkKIAogICAgIC8vIFByZXNzaW5nIGRlbGV0ZSB0cmlnZ2VycyB0aGUgcmVtb3ZhbCBvZiB0
aGUgc2VsZWN0ZWQgc3VnZ2VzdGlvbiBmcm9tIHRoZSBEQi4KICAgICBpZiAoZXZlbnQud2luZG93
c0tleUNvZGUgPT0gVktFWV9ERUxFVEUKLSAgICAgICAgJiYgbV9hdXRvRmlsbFBvcHVwLT5zZWxl
Y3RlZEluZGV4KCkgIT0gLTEpIHsKKyAgICAgICAgJiYgbV9hdXRvZmlsbFBvcHVwLT5zZWxlY3Rl
ZEluZGV4KCkgIT0gLTEpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IGZvY3VzZWRXZWJDb3JlTm9k
ZSgpOwogICAgICAgICBpZiAoIW5vZGUgfHwgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxF
TUVOVF9OT0RFKSkgewogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02NzUs
MjUgKzY3NSwyNSBAQCBib29sIFdlYlZpZXdJbXBsOjphdXRvY29tcGxldGVIYW5kbGVLZXlFdmVu
dChjb25zdCBXZWJLZXlib2FyZEV2ZW50JiBldmVudCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gbV9hdXRvRmlsbFBv
cHVwLT5zZWxlY3RlZEluZGV4KCk7CisgICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gbV9hdXRv
ZmlsbFBvcHVwLT5zZWxlY3RlZEluZGV4KCk7CiAKLSAgICAgICAgaWYgKCFtX2F1dG9GaWxsUG9w
dXBDbGllbnQtPmNhblJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KHNlbGVjdGVkSW5kZXgpKQorICAg
ICAgICBpZiAoIW1fYXV0b2ZpbGxQb3B1cENsaWVudC0+Y2FuUmVtb3ZlU3VnZ2VzdGlvbkF0SW5k
ZXgoc2VsZWN0ZWRJbmRleCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
V2ViU3RyaW5nIG5hbWUgPSBXZWJJbnB1dEVsZW1lbnQoc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KGVsZW1lbnQpKS5uYW1lRm9yQXV0b2ZpbGwoKTsKLSAgICAgICAgV2ViU3RyaW5nIHZh
bHVlID0gbV9hdXRvRmlsbFBvcHVwQ2xpZW50LT5pdGVtVGV4dChzZWxlY3RlZEluZGV4KTsKLSAg
ICAgICAgbV9hdXRvRmlsbENsaWVudC0+cmVtb3ZlQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbihuYW1l
LCB2YWx1ZSk7CisgICAgICAgIFdlYlN0cmluZyB2YWx1ZSA9IG1fYXV0b2ZpbGxQb3B1cENsaWVu
dC0+aXRlbVRleHQoc2VsZWN0ZWRJbmRleCk7CisgICAgICAgIG1fYXV0b2ZpbGxDbGllbnQtPnJl
bW92ZUF1dG9jb21wbGV0ZVN1Z2dlc3Rpb24obmFtZSwgdmFsdWUpOwogICAgICAgICAvLyBVcGRh
dGUgdGhlIGVudHJpZXMgaW4gdGhlIGN1cnJlbnRseSBzaG93aW5nIHBvcHVwIHRvIHJlZmxlY3Qg
dGhlCiAgICAgICAgIC8vIGRlbGV0aW9uLgotICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQt
PnJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KHNlbGVjdGVkSW5kZXgpOwotICAgICAgICByZWZyZXNo
QXV0b0ZpbGxQb3B1cCgpOworICAgICAgICBtX2F1dG9maWxsUG9wdXBDbGllbnQtPnJlbW92ZVN1
Z2dlc3Rpb25BdEluZGV4KHNlbGVjdGVkSW5kZXgpOworICAgICAgICByZWZyZXNoQXV0b2ZpbGxQ
b3B1cCgpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFtX2F1dG9G
aWxsUG9wdXAtPmlzSW50ZXJlc3RlZEluRXZlbnRGb3JLZXkoZXZlbnQud2luZG93c0tleUNvZGUp
KQorICAgIGlmICghbV9hdXRvZmlsbFBvcHVwLT5pc0ludGVyZXN0ZWRJbkV2ZW50Rm9yS2V5KGV2
ZW50LndpbmRvd3NLZXlDb2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1f
YXV0b0ZpbGxQb3B1cC0+aGFuZGxlS2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRl
cihldmVudCkpKSB7CisgICAgaWYgKG1fYXV0b2ZpbGxQb3B1cC0+aGFuZGxlS2V5RXZlbnQoUGxh
dGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihldmVudCkpKSB7CiAgICAgICAgIC8vIFdlIG5lZWQg
dG8gaWdub3JlIHRoZSBuZXh0IENoYXIgZXZlbnQgYWZ0ZXIgdGhpcyBvdGhlcndpc2UgcHJlc3Np
bmcKICAgICAgICAgLy8gZW50ZXIgd2hlbiBzZWxlY3RpbmcgYW4gaXRlbSBpbiB0aGUgbWVudSB3
aWxsIGdvIHRvIHRoZSBwYWdlLgogICAgICAgICBpZiAoV2ViSW5wdXRFdmVudDo6UmF3S2V5RG93
biA9PSBldmVudC50eXBlKQpAQCAtOTI2LDExICs5MjYsMTEgQEAgdm9pZCAgV2ViVmlld0ltcGw6
OnBvcHVwQ2xvc2VkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENvbnRhaW5lcikKICAg
ICB9CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OmhpZGVBdXRvRmlsbFBvcHVwKCkKK3ZvaWQgV2Vi
Vmlld0ltcGw6OmhpZGVBdXRvZmlsbFBvcHVwKCkKIHsKLSAgICBpZiAobV9hdXRvRmlsbFBvcHVw
U2hvd2luZykgewotICAgICAgICBtX2F1dG9GaWxsUG9wdXAtPmhpZGVQb3B1cCgpOwotICAgICAg
ICBtX2F1dG9GaWxsUG9wdXBTaG93aW5nID0gZmFsc2U7CisgICAgaWYgKG1fYXV0b2ZpbGxQb3B1
cFNob3dpbmcpIHsKKyAgICAgICAgbV9hdXRvZmlsbFBvcHVwLT5oaWRlUG9wdXAoKTsKKyAgICAg
ICAgbV9hdXRvZmlsbFBvcHVwU2hvd2luZyA9IGZhbHNlOwogICAgIH0KIH0KIApAQCAtMTMzMCw3
ICsxMzMwLDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Rm9jdXMoYm9vbCBlbmFibGUpCiAgICAg
ICAgIH0KICAgICAgICAgbV9pbWVBY2NlcHRFdmVudHMgPSB0cnVlOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGhpZGVBdXRvRmlsbFBvcHVwKCk7CisgICAgICAgIGhpZGVBdXRvZmlsbFBvcHVwKCk7
CiAgICAgICAgIGhpZGVTZWxlY3RQb3B1cCgpOwogCiAgICAgICAgIC8vIENsZWFyIGZvY3VzIG9u
IHRoZSBjdXJyZW50bHkgZm9jdXNlZCBmcmFtZSBpZiBhbnkuCkBAIC0yMDY3LDcgKzIwNjcsNyBA
QCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IFdlYlZpZXdJbXBsOjphY2Nlc3NpYmlsaXR5T2JqZWN0
KCkKICAgICAgICAgZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZG9jdW1l
bnQtPnJlbmRlcmVyKCkpKTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1
Z2dlc3Rpb25zKAordm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvZmlsbFN1Z2dlc3Rpb25zKAog
ICAgIGNvbnN0IFdlYk5vZGUmIG5vZGUsCiAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4m
IG5hbWVzLAogICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCkBAIC0yMDgw
LDQ4ICsyMDgwLDQ4IEBAIHZvaWQgV2ViVmlld0ltcGw6OmFwcGx5QXV0b0ZpbGxTdWdnZXN0aW9u
cygKICAgICBBU1NFUlQoc2VwYXJhdG9ySW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG5hbWVzLnNp
emUoKSkpOwogCiAgICAgaWYgKG5hbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBoaWRlQXV0b0Zp
bGxQb3B1cCgpOworICAgICAgICBoaWRlQXV0b2ZpbGxQb3B1cCgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgUmVmUHRyPE5vZGU+IGZvY3VzZWROb2RlID0gZm9jdXNlZFdlYkNvcmVO
b2RlKCk7Ci0gICAgLy8gSWYgdGhlIG5vZGUgZm9yIHdoaWNoIHdlIHF1ZXJpZWQgdGhlIEF1dG9G
aWxsIHN1Z2dlc3Rpb25zIGlzIG5vdCB0aGUKKyAgICAvLyBJZiB0aGUgbm9kZSBmb3Igd2hpY2gg
d2UgcXVlcmllZCB0aGUgQXV0b2ZpbGwgc3VnZ2VzdGlvbnMgaXMgbm90IHRoZQogICAgIC8vIGZv
Y3VzZWQgbm9kZSwgdGhlbiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uICBGSVhNRTogYWxzbyBjaGVj
ayB0aGUKICAgICAvLyBjYXJldCBpcyBhdCB0aGUgZW5kIGFuZCB0aGF0IHRoZSB0ZXh0IGhhcyBu
b3QgY2hhbmdlZC4KICAgICBpZiAoIWZvY3VzZWROb2RlIHx8IGZvY3VzZWROb2RlICE9IFBhc3NS
ZWZQdHI8Tm9kZT4obm9kZSkpIHsKLSAgICAgICAgaGlkZUF1dG9GaWxsUG9wdXAoKTsKKyAgICAg
ICAgaGlkZUF1dG9maWxsUG9wdXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIEhU
TUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbSA9CiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxJbnB1
dEVsZW1lbnQqPihmb2N1c2VkTm9kZS5nZXQoKSk7CiAKLSAgICAvLyBUaGUgZmlyc3QgdGltZSB0
aGUgQXV0b0ZpbGwgcG9wdXAgaXMgc2hvd24gd2UnbGwgY3JlYXRlIHRoZSBjbGllbnQgYW5kCisg
ICAgLy8gVGhlIGZpcnN0IHRpbWUgdGhlIEF1dG9maWxsIHBvcHVwIGlzIHNob3duIHdlJ2xsIGNy
ZWF0ZSB0aGUgY2xpZW50IGFuZAogICAgIC8vIHRoZSBwb3B1cC4KLSAgICBpZiAoIW1fYXV0b0Zp
bGxQb3B1cENsaWVudCkKLSAgICAgICAgbV9hdXRvRmlsbFBvcHVwQ2xpZW50ID0gYWRvcHRQdHIo
bmV3IEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KTsKKyAgICBpZiAoIW1fYXV0b2ZpbGxQb3B1cENs
aWVudCkKKyAgICAgICAgbV9hdXRvZmlsbFBvcHVwQ2xpZW50ID0gYWRvcHRQdHIobmV3IEF1dG9m
aWxsUG9wdXBNZW51Q2xpZW50KTsKIAotICAgIG1fYXV0b0ZpbGxQb3B1cENsaWVudC0+aW5pdGlh
bGl6ZSgKKyAgICBtX2F1dG9maWxsUG9wdXBDbGllbnQtPmluaXRpYWxpemUoCiAgICAgICAgIGlu
cHV0RWxlbSwgbmFtZXMsIGxhYmVscywgaWNvbnMsIHVuaXF1ZUlEcywgc2VwYXJhdG9ySW5kZXgp
OwogCi0gICAgaWYgKCFtX2F1dG9GaWxsUG9wdXAuZ2V0KCkpIHsKLSAgICAgICAgbV9hdXRvRmls
bFBvcHVwID0gUG9wdXBDb250YWluZXI6OmNyZWF0ZShtX2F1dG9GaWxsUG9wdXBDbGllbnQuZ2V0
KCksCisgICAgaWYgKCFtX2F1dG9maWxsUG9wdXAuZ2V0KCkpIHsKKyAgICAgICAgbV9hdXRvZmls
bFBvcHVwID0gUG9wdXBDb250YWluZXI6OmNyZWF0ZShtX2F1dG9maWxsUG9wdXBDbGllbnQuZ2V0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9w
dXBDb250YWluZXI6OlN1Z2dlc3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0b0ZpbGxQb3B1cFNldHRpbmdzKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZmlsbFBvcHVwU2V0dGluZ3Mp
OwogICAgIH0KIAotICAgIGlmIChtX2F1dG9GaWxsUG9wdXBTaG93aW5nKSB7Ci0gICAgICAgIHJl
ZnJlc2hBdXRvRmlsbFBvcHVwKCk7CisgICAgaWYgKG1fYXV0b2ZpbGxQb3B1cFNob3dpbmcpIHsK
KyAgICAgICAgcmVmcmVzaEF1dG9maWxsUG9wdXAoKTsKICAgICB9IGVsc2UgewotICAgICAgICBt
X2F1dG9GaWxsUG9wdXAtPnNob3dJblJlY3QoZm9jdXNlZE5vZGUtPmdldFJlY3QoKSwgZm9jdXNl
ZE5vZGUtPm93bmVyRG9jdW1lbnQoKS0+dmlldygpLCAwKTsKLSAgICAgICAgbV9hdXRvRmlsbFBv
cHVwU2hvd2luZyA9IHRydWU7CisgICAgICAgIG1fYXV0b2ZpbGxQb3B1cC0+c2hvd0luUmVjdChm
b2N1c2VkTm9kZS0+Z2V0UmVjdCgpLCBmb2N1c2VkTm9kZS0+b3duZXJEb2N1bWVudCgpLT52aWV3
KCksIDApOworICAgICAgICBtX2F1dG9maWxsUG9wdXBTaG93aW5nID0gdHJ1ZTsKICAgICB9CiB9
CiAKIHZvaWQgV2ViVmlld0ltcGw6OmhpZGVQb3B1cHMoKQogewogICAgIGhpZGVTZWxlY3RQb3B1
cCgpOwotICAgIGhpZGVBdXRvRmlsbFBvcHVwKCk7CisgICAgaGlkZUF1dG9maWxsUG9wdXAoKTsK
IH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6cGVyZm9ybUN1c3RvbUNvbnRleHRNZW51QWN0aW9uKHVu
c2lnbmVkIGFjdGlvbikKQEAgLTIzNDcsMjMgKzIzNDcsMjMgQEAgTm90aWZpY2F0aW9uUHJlc2Vu
dGVySW1wbCogV2ViVmlld0ltcGw6Om5vdGlmaWNhdGlvblByZXNlbnRlckltcGwoKQogfQogI2Vu
ZGlmCiAKLXZvaWQgV2ViVmlld0ltcGw6OnJlZnJlc2hBdXRvRmlsbFBvcHVwKCkKK3ZvaWQgV2Vi
Vmlld0ltcGw6OnJlZnJlc2hBdXRvZmlsbFBvcHVwKCkKIHsKLSAgICBBU1NFUlQobV9hdXRvRmls
bFBvcHVwU2hvd2luZyk7CisgICAgQVNTRVJUKG1fYXV0b2ZpbGxQb3B1cFNob3dpbmcpOwogCiAg
ICAgLy8gSGlkZSB0aGUgcG9wdXAgaWYgaXQgaGFzIGJlY29tZSBlbXB0eS4KLSAgICBpZiAoIW1f
YXV0b0ZpbGxQb3B1cENsaWVudC0+bGlzdFNpemUoKSkgewotICAgICAgICBoaWRlQXV0b0ZpbGxQ
b3B1cCgpOworICAgIGlmICghbV9hdXRvZmlsbFBvcHVwQ2xpZW50LT5saXN0U2l6ZSgpKSB7Cisg
ICAgICAgIGhpZGVBdXRvZmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBJbnRSZWN0IG9sZEJvdW5kcyA9IG1fYXV0b0ZpbGxQb3B1cC0+ZnJhbWVSZWN0KCk7Ci0gICAg
bV9hdXRvRmlsbFBvcHVwLT5yZWZyZXNoKGZvY3VzZWRXZWJDb3JlTm9kZSgpLT5nZXRSZWN0KCkp
OwotICAgIEludFJlY3QgbmV3Qm91bmRzID0gbV9hdXRvRmlsbFBvcHVwLT5mcmFtZVJlY3QoKTsK
KyAgICBJbnRSZWN0IG9sZEJvdW5kcyA9IG1fYXV0b2ZpbGxQb3B1cC0+ZnJhbWVSZWN0KCk7Cisg
ICAgbV9hdXRvZmlsbFBvcHVwLT5yZWZyZXNoKGZvY3VzZWRXZWJDb3JlTm9kZSgpLT5nZXRSZWN0
KCkpOworICAgIEludFJlY3QgbmV3Qm91bmRzID0gbV9hdXRvZmlsbFBvcHVwLT5mcmFtZVJlY3Qo
KTsKICAgICAvLyBMZXQncyByZXNpemUgdGhlIGJhY2tpbmcgd2luZG93IGlmIG5lY2Vzc2FyeS4K
ICAgICBpZiAob2xkQm91bmRzICE9IG5ld0JvdW5kcykgewogICAgICAgICBXZWJQb3B1cE1lbnVJ
bXBsKiBwb3B1cE1lbnUgPQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViUG9wdXBNZW51SW1w
bCo+KG1fYXV0b0ZpbGxQb3B1cC0+Y2xpZW50KCkpOworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
V2ViUG9wdXBNZW51SW1wbCo+KG1fYXV0b2ZpbGxQb3B1cC0+Y2xpZW50KCkpOwogICAgICAgICBp
ZiAocG9wdXBNZW51KQogICAgICAgICAgICAgcG9wdXBNZW51LT5jbGllbnQoKS0+c2V0V2luZG93
UmVjdChtX2Nocm9tZUNsaWVudEltcGwud2luZG93VG9TY3JlZW4obmV3Qm91bmRzKSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggNjU1M2I1OC4u
YWEwYjNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCkBAIC03
MSw3ICs3MSw3IEBAIGNsYXNzIFdpZGdldDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBB
dXRvY29tcGxldGVQb3B1cE1lbnVDbGllbnQ7Ci1jbGFzcyBBdXRvRmlsbFBvcHVwTWVudUNsaWVu
dDsKK2NsYXNzIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OwogY2xhc3MgQ29udGV4dE1lbnVDbGll
bnRJbXBsOwogY2xhc3MgRGV2aWNlT3JpZW50YXRpb25DbGllbnRQcm94eTsKIGNsYXNzIERyYWdT
Y3JvbGxUaW1lcjsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBXZWJWaWV3
IG1ldGhvZHM6CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVNYWluRnJhbWUoV2ViRnJhbWVD
bGllbnQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b0ZpbGxDbGllbnQoV2ViQXV0b0ZpbGxD
bGllbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b2ZpbGxDbGllbnQoV2ViQXV0b2ZpbGxD
bGllbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGV2VG9vbHNBZ2VudENsaWVudChXZWJEZXZU
b29sc0FnZW50Q2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFBlcm1pc3Npb25DbGllbnQo
V2ViUGVybWlzc2lvbkNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTcGVsbENoZWNrQ2xp
ZW50KFdlYlNwZWxsQ2hlY2tDbGllbnQqKTsKQEAgLTE4Niw3ICsxODYsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB2YWx1
ZSk7CiAgICAgdmlydHVhbCBXZWJEZXZUb29sc0FnZW50KiBkZXZUb29sc0FnZW50KCk7CiAgICAg
dmlydHVhbCBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0IGFjY2Vzc2liaWxpdHlPYmplY3QoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYXBwbHlBdXRvRmlsbFN1Z2dlc3Rpb25zKAorICAgIHZpcnR1YWwgdm9p
ZCBhcHBseUF1dG9maWxsU3VnZ2VzdGlvbnMoCiAgICAgICAgIGNvbnN0IFdlYk5vZGUmLAogICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCiAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCkBAIC0yMzUsOSArMjM1LDkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9jbGllbnQ7CiAgICAgfQogCi0gICAgV2ViQXV0b0ZpbGxDbGllbnQq
IGF1dG9GaWxsQ2xpZW50KCkKKyAgICBXZWJBdXRvZmlsbENsaWVudCogYXV0b2ZpbGxDbGllbnQo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYXV0b0ZpbGxDbGllbnQ7CisgICAgICAgIHJldHVy
biBtX2F1dG9maWxsQ2xpZW50OwogICAgIH0KIAogICAgIFdlYlBlcm1pc3Npb25DbGllbnQqIHBl
cm1pc3Npb25DbGllbnQoKQpAQCAtMzI3LDkgKzMyNyw5IEBAIHB1YmxpYzoKICAgICAgICAgY29u
c3QgV2ViSW1hZ2UmIGRyYWdJbWFnZSwKICAgICAgICAgY29uc3QgV2ViUG9pbnQmIGRyYWdJbWFn
ZU9mZnNldCk7CiAKLSAgICB2b2lkIGF1dG9GaWxsUG9wdXBEaWRIaWRlKCkKKyAgICB2b2lkIGF1
dG9maWxsUG9wdXBEaWRIaWRlKCkKICAgICB7Ci0gICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNob3dp
bmcgPSBmYWxzZTsKKyAgICAgICAgbV9hdXRvZmlsbFBvcHVwU2hvd2luZyA9IGZhbHNlOwogICAg
IH0KIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQpAQCAtMzQ1LDcgKzM0NSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHBvcHVwT3BlbmVkKFdlYkNvcmU6OlBvcHVwQ29udGFpbmVyKiBwb3B1cENv
bnRhaW5lcik7CiAgICAgdm9pZCBwb3B1cENsb3NlZChXZWJDb3JlOjpQb3B1cENvbnRhaW5lciog
cG9wdXBDb250YWluZXIpOwogCi0gICAgdm9pZCBoaWRlQXV0b0ZpbGxQb3B1cCgpOworICAgIHZv
aWQgaGlkZUF1dG9maWxsUG9wdXAoKTsKIAogICAgIC8vIFJldHVybnMgdGhlIGlucHV0IGV2ZW50
IHdlJ3JlIGN1cnJlbnRseSBwcm9jZXNzaW5nLiBUaGlzIGlzIHVzZWQgaW4gc29tZQogICAgIC8v
IGNhc2VzIHdoZXJlIHRoZSBXZWJDb3JlIERPTSBldmVudCBkb2Vzbid0IGhhdmUgdGhlIGluZm9y
bWF0aW9uIHdlIG5lZWQuCkBAIC00MDQsMTAgKzQwNCwxMCBAQCBwcml2YXRlOgogICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgYXV0b2NvbXBsZSBoYXMgY29uc3VtZWQgdGhlIGV2ZW50LgogICAg
IGJvb2wgYXV0b2NvbXBsZXRlSGFuZGxlS2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYp
OwogCi0gICAgLy8gUmVwYWludHMgdGhlIEF1dG9GaWxsIHBvcHVwLiBTaG91bGQgYmUgY2FsbGVk
IHdoZW4gdGhlIHN1Z2dlc3Rpb25zCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLiBOb3RlIHRoYXQgdGhp
cyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgQXV0b0ZpbGwKKyAgICAvLyBSZXBhaW50
cyB0aGUgQXV0b2ZpbGwgcG9wdXAuIFNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgc3VnZ2VzdGlv
bnMKKyAgICAvLyBoYXZlIGNoYW5nZWQuIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBvbmx5IGJlIGNh
bGxlZCB3aGVuIHRoZSBBdXRvZmlsbAogICAgIC8vIHBvcHVwIGlzIHNob3dpbmcuCi0gICAgdm9p
ZCByZWZyZXNoQXV0b0ZpbGxQb3B1cCgpOworICAgIHZvaWQgcmVmcmVzaEF1dG9maWxsUG9wdXAo
KTsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmlldyB3YXMgc2Nyb2xsZWQuCiAgICAg
Ym9vbCBzY3JvbGxWaWV3V2l0aEtleWJvYXJkKGludCBrZXlDb2RlLCBpbnQgbW9kaWZpZXJzKTsK
QEAgLTQzNSw3ICs0MzUsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBXZWJWaWV3Q2xpZW50
KiBtX2NsaWVudDsKLSAgICBXZWJBdXRvRmlsbENsaWVudCogbV9hdXRvRmlsbENsaWVudDsKKyAg
ICBXZWJBdXRvZmlsbENsaWVudCogbV9hdXRvZmlsbENsaWVudDsKICAgICBXZWJQZXJtaXNzaW9u
Q2xpZW50KiBtX3Blcm1pc3Npb25DbGllbnQ7CiAgICAgV2ViU3BlbGxDaGVja0NsaWVudCogbV9z
cGVsbENoZWNrQ2xpZW50OwogCkBAIC01MTAsMTQgKzUxMCwxNCBAQCBwcml2YXRlOgogICAgIC8v
IGN1cnJlbnQgZHJvcCB0YXJnZXQgaW4gdGhpcyBXZWJWaWV3ICh0aGUgZHJvcCB0YXJnZXQgY2Fu
IGFjY2VwdCB0aGUgZHJvcCkuCiAgICAgV2ViRHJhZ09wZXJhdGlvbiBtX2RyYWdPcGVyYXRpb247
CiAKLSAgICAvLyBXaGV0aGVyIGFuIEF1dG9GaWxsIHBvcHVwIGlzIGN1cnJlbnRseSBzaG93aW5n
LgotICAgIGJvb2wgbV9hdXRvRmlsbFBvcHVwU2hvd2luZzsKKyAgICAvLyBXaGV0aGVyIGFuIEF1
dG9maWxsIHBvcHVwIGlzIGN1cnJlbnRseSBzaG93aW5nLgorICAgIGJvb2wgbV9hdXRvZmlsbFBv
cHVwU2hvd2luZzsKIAotICAgIC8vIFRoZSBBdXRvRmlsbCBwb3B1cCBjbGllbnQuCi0gICAgT3du
UHRyPEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50PiBtX2F1dG9GaWxsUG9wdXBDbGllbnQ7CisgICAg
Ly8gVGhlIEF1dG9maWxsIHBvcHVwIGNsaWVudC4KKyAgICBPd25QdHI8QXV0b2ZpbGxQb3B1cE1l
bnVDbGllbnQ+IG1fYXV0b2ZpbGxQb3B1cENsaWVudDsKIAotICAgIC8vIFRoZSBBdXRvRmlsbCBw
b3B1cC4KLSAgICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBDb250YWluZXI+IG1fYXV0b0ZpbGxQb3B1
cDsKKyAgICAvLyBUaGUgQXV0b2ZpbGwgcG9wdXAuCisgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVw
Q29udGFpbmVyPiBtX2F1dG9maWxsUG9wdXA7CiAKICAgICAvLyBUaGUgcG9wdXAgYXNzb2NpYXRl
ZCB3aXRoIGEgc2VsZWN0IGVsZW1lbnQuCiAgICAgUmVmUHRyPFdlYkNvcmU6OlBvcHVwQ29udGFp
bmVyPiBtX3NlbGVjdFBvcHVwOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGUxM2U0YmQuLjA2MzI2ODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wNy0xMiAg
SWx5YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBB
dXRvRmlsbCAtPiBBdXRvZmlsbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NjQzMzMKKyAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9t
aXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzI3NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3Bw
LnB5OiBGaXggaGVhZGVyIGd1YXJkIGV4cGVjdGF0aW9ucworCiAyMDExLTA3LTEyICBFcmljIFNl
aWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBOUldUIHNob3VsZCBvcGVuIHRlc3Qg
cmVzdWx0cyBwYWdlIHdpdGggU2FmYXJpIHRydW5rLCBub3QgdGhlIHN5c3RlbSBwcm92aWRlZCBv
bmUgb24gTWFjCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL2NwcC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5
CmluZGV4IDA5NDYzMjcuLjk2M2MwZjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlcnMvY3BwLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlcnMvY3BwLnB5CkBAIC05MjMsNyArOTIzLDcgQEAgZGVmIGdldF9oZWFkZXJfZ3Vh
cmRfY3BwX3ZhcmlhYmxlKGZpbGVuYW1lKToKICAgICBzdGFuZGFyZF9uYW1lID0gc3ViKHInWy0u
XHNdJywgJ18nLCBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSkKIAogICAgICMgRmlsZXMgdW5k
ZXIgV1RGIHR5cGljYWxseSBoYXZlIGhlYWRlciBndWFyZHMgdGhhdCBzdGFydCB3aXRoIFdURl8u
Ci0gICAgaWYgZmlsZW5hbWUuZmluZCgnL3d0Zi8nKToKKyAgICBpZiAnL3d0Zi8nIGluIGZpbGVu
YW1lOgogICAgICAgICBzcGVjaWFsX25hbWUgPSAiV1RGXyIgKyBzdGFuZGFyZF9uYW1lCiAgICAg
ZWxzZToKICAgICAgICAgc3BlY2lhbF9uYW1lID0gc3RhbmRhcmRfbmFtZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100732</attachid>
            <date>2011-07-13 17:01:49 -0700</date>
            <delta_ts>2011-07-14 09:43:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>autofill-spelling.diff</filename>
            <type>text/plain</type>
            <size>76690</size>
            <attacher name="Ilya Sherman">isherman</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNTUyMzdkZS4uMzQ1MTM5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MiBAQAorMjAxMS0wNy0xMyAgSWx5YSBTaGVy
bWFuICA8aXNoZXJtYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJlbmFtZSBBdXRvRmlsbCAt
PiBBdXRvZmlsbCBhbmQgYXV0b0ZpbGwgLT4gYXV0b2ZpbGwKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MzMzCisgICAgICAgIGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTcyNzU4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHB1YmxpYy9XZWJBdXRvZmlsbENsaWVudC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRv
ZmlsbENsaWVudDo6ZGlkQWNjZXB0QXV0b2ZpbGxTdWdnZXN0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViQXV0b2ZpbGxDbGllbnQ6OmRpZFNlbGVjdEF1dG9maWxsU3VnZ2VzdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYkF1dG9maWxsQ2xpZW50OjpkaWRDbGVhckF1dG9maWxsU2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6OnJlbW92ZUF1dG9jb21wbGV0
ZVN1Z2dlc3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvZmlsbENsaWVudDo6dGV4dEZp
ZWxkRGlkQmVnaW5FZGl0aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxDbGllbnQ6
OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJBdXRvZmlsbENs
aWVudDo6dGV4dEZpZWxkRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQXV0b2ZpbGxD
bGllbnQ6OnRleHRGaWVsZERpZFJlY2VpdmVLZXlEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QXV0b2ZpbGxDbGllbnQ6On5XZWJBdXRvZmlsbENsaWVudCk6CisgICAgICAgICogcHVibGljL1dl
Yk5vZGUuaDoKKyAgICAgICAgKiBwdWJsaWMvV2ViVmlldy5oOgorICAgICAgICAqIHNyYy9BdXRv
ZmlsbFBvcHVwTWVudUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBN
ZW51Q2xpZW50OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkF1
dG9maWxsUG9wdXBNZW51Q2xpZW50Ojp+QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0U3VnZ2VzdGlvbnNDb3VudCk6
CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldExhYmVsKToK
KyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldEljb24pOgorICAg
ICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6cmVtb3ZlU3VnZ2VzdGlvbkF0
SW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Y2FuUmVt
b3ZlU3VnZ2VzdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudDo6dmFsdWVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1l
bnVDbGllbnQ6OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBv
cHVwTWVudUNsaWVudDo6c2VsZWN0aW9uQ2xlYXJlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9m
aWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVGV4dCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxs
UG9wdXBNZW51Q2xpZW50OjppdGVtTGFiZWwpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBv
cHVwTWVudUNsaWVudDo6aXRlbUljb24pOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVw
TWVudUNsaWVudDo6aXRlbUlzRW5hYmxlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9w
dXBNZW51Q2xpZW50OjppdGVtU3R5bGUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVw
TWVudUNsaWVudDo6bWVudVN0eWxlKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1l
bnVDbGllbnQ6OmNsaWVudFBhZGRpbmdMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OmNsaWVudFBhZGRpbmdSaWdodCk6CisgICAgICAgIChXZWJLaXQ6OkF1
dG9maWxsUG9wdXBNZW51Q2xpZW50Ojpwb3B1cERpZEhpZGUpOgorICAgICAgICAoV2ViS2l0OjpB
dXRvZmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUlzU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYktp
dDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1Jc1dhcm5pbmcpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6c2V0VGV4dEZyb21JdGVtKToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3Rvcik6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojpob3N0V2luZG93KToKKyAgICAgICAg
KFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNyZWF0ZVNjcm9sbGJhcik6CisgICAg
ICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OnNldFN1Z2dlc3Rpb25zKToKKyAg
ICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNvbnZlcnRMaXN0SW5kZXhU
b0ludGVybmFsSW5kZXgpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVu
dDo6Z2V0V2ViVmlldyk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50
Ojp0ZXh0RmllbGRTdHlsZSk6CisgICAgICAgICogc3JjL0F1dG9maWxsUG9wdXBNZW51Q2xpZW50
Lmg6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVG9vbFRp
cCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtQWNjZXNz
aWJpbGl0eVRleHQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6
Y2xpZW50SW5zZXRMZWZ0KToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGll
bnQ6OmNsaWVudEluc2V0UmlnaHQpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudDo6bGlzdFNpemUpOgorICAgICAgICAoV2ViS2l0OjpBdXRvZmlsbFBvcHVwTWVudUNs
aWVudDo6c2VsZWN0ZWRJbmRleCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51
Q2xpZW50OjppdGVtSXNMYWJlbCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51
Q2xpZW50OjppdGVtSXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJLaXQ6OkF1dG9maWxsUG9wdXBN
ZW51Q2xpZW50OjpzaG91bGRQb3BPdmVyKToKKyAgICAgICAgKFdlYktpdDo6QXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQ6OnZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjayk6CisgICAgICAgIChXZWJL
aXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpnZXRUZXh0RmllbGQpOgorICAgICAgICAoV2Vi
S2l0OjpBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0U2VsZWN0ZWRJbmRleCk6CisgICAgICAg
IChXZWJLaXQ6OkF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpzZXRTZWxlY3RlZEluZGV4KToKKyAg
ICAgICAgKiBzcmMvRWRpdG9yQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkVkaXRv
ckNsaWVudEltcGw6OnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyk6CisgICAgICAgIChXZWJLaXQ6
OkVkaXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcpOgorICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JDbGllbnRJbXBsOjp0ZXh0RGlkQ2hhbmdlSW5UZXh0RmllbGQpOgorICAgICAg
ICAoV2ViS2l0OjpFZGl0b3JDbGllbnRJbXBsOjpkb0F1dG9maWxsKToKKyAgICAgICAgKFdlYktp
dDo6RWRpdG9yQ2xpZW50SW1wbDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50KToKKyAgICAg
ICAgKiBzcmMvV2ViSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5wdXRF
bGVtZW50OjpzZXRBdXRvZmlsbGVkKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0QXV0b2ZpbGxDbGllbnQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJWaWV3SW1wbDo6bW91c2VEb3duKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1
dG9jb21wbGV0ZUhhbmRsZUtleUV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmhpZGVBdXRvZmlsbFBvcHVwKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldEZv
Y3VzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmFwcGx5QXV0b2ZpbGxTdWdnZXN0
aW9ucyk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpoaWRlUG9wdXBzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnJlZnJlc2hBdXRvZmlsbFBvcHVwKToKKyAgICAgICAg
KiBzcmMvV2ViVmlld0ltcGwuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9m
aWxsQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmF1dG9maWxsUG9wdXBE
aWRIaWRlKToKKwogMjAxMS0wNy0xMyAgVnNldm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBDaHJvbWl1bSBEZXZUb29sczogRW5hYmxlIGNsZWFyIGNhY2hlIGFu
ZCBjb29raWVzIGZyb20gbmV0d29yayBwYW5lbCBpbiBjaHJvbWl1bS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAppbmRleCAxMWYzZWQyLi4zYTdmMTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCkBAIC0xMDcsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF0
dHJpYnV0ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF1ZGlvQnVzLmgnLAogICAg
ICAgICAgICAgICAgICdwdWJsaWMvV2ViQXVkaW9EZXZpY2UuaCcsCi0gICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJBdXRvRmlsbENsaWVudC5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dl
YkF1dG9maWxsQ2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmluZGluZ3Mu
aCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iRGF0YS5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL1dlYkJsb2JSZWdpc3RyeS5oJywKQEAgLTMxMCw4ICszMTAsOCBAQAogICAg
ICAgICAgICAgICAgICdzcmMvQXN5bmNGaWxlV3JpdGVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9BdWRpb0Rlc3RpbmF0aW9uQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL0F1ZGlvRGVzdGluYXRpb25DaHJvbWl1bS5oJywKLSAgICAgICAgICAgICAgICAnc3Jj
L0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmNwcCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9BdXRv
RmlsbFBvcHVwTWVudUNsaWVudC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL0F1dG9maWxsUG9w
dXBNZW51Q2xpZW50LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9BdXRvZmlsbFBvcHVwTWVu
dUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlzdENocm9taXVt
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5oJywK
ICAgICAgICAgICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBdXRvRmlsbENsaWVudC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQXV0b0ZpbGxDbGllbnQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjNiMzlhOC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJBdXRvRmlsbENsaWVudC5oCisrKyAvZGV2L251bGwKQEAgLTEs
ODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgV2ViQXV0b0ZpbGxDbGllbnRfaAotI2RlZmluZSBXZWJBdXRvRmls
bENsaWVudF9oCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBXZWJJbnB1dEVsZW1lbnQ7
Ci1jbGFzcyBXZWJLZXlib2FyZEV2ZW50OwotY2xhc3MgV2ViTm9kZTsKLWNsYXNzIFdlYlN0cmlu
ZzsKLQotY2xhc3MgV2ViQXV0b0ZpbGxDbGllbnQgewotcHVibGljOgotICAgIC8vIEluZm9ybXMg
dGhlIGJyb3dzZXIgdGhhdCB0aGUgdXNlciBoYXMgYWNjZXB0ZWQgYW4gQXV0b0ZpbGwgc3VnZ2Vz
dGlvbiBmb3IKLSAgICAvLyBhIFdlYk5vZGUuICB8dW5pcXVlSUR8IGlzIHVzZWQgYXMgYSBrZXkg
aW50byB0aGUgc2V0IG9mIEF1dG9GaWxsIHByb2ZpbGVzLAotICAgIC8vIGFuZCBzaG91bGQgbmV2
ZXIgYmUgbmVnYXRpdmUuICBJZiBpdCBpcyAwLCB0aGVuIHRoZSBzdWdnZXN0aW9uIGlzIGFuCi0g
ICAgLy8gQXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb247IGFuZCB8dmFsdWV8IHN0b3JlcyB0aGUgc3Vn
Z2VzdGVkIHRleHQuICB8aW5kZXh8Ci0gICAgLy8gaXMgYW4gaW5kZXggb2YgdGhlIHNlbGVjdGVk
IHN1Z2dlc3Rpb24gaW4gdGhlIGxpc3Qgb2Ygc3VnZ2VzdGlvbnMgcHJvdmlkZWQKLSAgICAvLyBi
eSB0aGUgY2xpZW50LgotICAgIHZpcnR1YWwgdm9pZCBkaWRBY2NlcHRBdXRvRmlsbFN1Z2dlc3Rp
b24oY29uc3QgV2ViTm9kZSYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBXZWJTdHJpbmcmIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsYWJlbCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1bmlxdWVJRCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4KSB7IH0K
LQotICAgIC8vIEluZm9ybXMgdGhlIGJyb3dzZXIgdGhhdCB0aGUgdXNlciBoYXMgc2VsZWN0ZWQg
YW4gQXV0b0ZpbGwgc3VnZ2VzdGlvbiBmb3IKLSAgICAvLyBhIFdlYk5vZGUuICBUaGlzIGhhcHBl
bnMgd2hlbiB0aGUgdXNlciBob3ZlcnMgb3ZlciBhIHN1Z2dlc3Rpb24gb3IgdXNlcwotICAgIC8v
IHRoZSBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlIHRvIGEgc3VnZ2VzdGlvbi4KLSAgICB2aXJ0dWFs
IHZvaWQgZGlkU2VsZWN0QXV0b0ZpbGxTdWdnZXN0aW9uKGNvbnN0IFdlYk5vZGUmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBu
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViU3RyaW5nJiBsYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCB1bmlxdWVJRCkgeyB9Ci0KLSAgICAvLyBJbmZvcm1zIHRoZSBicm93c2VyIHRo
YXQgdGhlIHVzZXIgaGFzIGNsZWFyZWQgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZQotICAgIC8vIEF1
dG9GaWxsIHN1Z2dlc3Rpb25zIHBvcHVwLiAgVGhpcyBoYXBwZW5zIHdoZW4gYSB1c2VyIHVzZXMg
dGhlIGFycm93Ci0gICAgLy8ga2V5cyB0byBuYXZpZ2F0ZSBvdXRzaWRlIHRoZSByYW5nZSBvZiBw
b3NzaWJsZSBzZWxlY3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCBkaWRDbGVhckF1dG9GaWxsU2Vs
ZWN0aW9uKGNvbnN0IFdlYk5vZGUmKSB7IH0KLQotICAgIC8vIEluc3RydWN0cyB0aGUgYnJvd3Nl
ciB0byByZW1vdmUgdGhlIEF1dG9jb21wbGV0ZSBlbnRyeSBzcGVjaWZpZWQgZnJvbQotICAgIC8v
IGl0cyBEQi4KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbihj
b25zdCBXZWJTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiB2YWx1ZSkgeyB9Ci0KLSAgICAvLyBUaGVzZSBt
ZXRob2RzIGFyZSBjYWxsZWQgd2hlbiB0aGUgdXNlcnMgZWRpdHMgYSB0ZXh0LWZpZWxkLgotICAg
IHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRCZWdpbkVkaXRpbmcoY29uc3QgV2ViSW5wdXRFbGVt
ZW50JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZEVuZEVkaXRpbmcoY29uc3Qg
V2ViSW5wdXRFbGVtZW50JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZENoYW5n
ZShjb25zdCBXZWJJbnB1dEVsZW1lbnQmKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdGV4dEZpZWxk
RGlkUmVjZWl2ZUtleURvd24oY29uc3QgV2ViSW5wdXRFbGVtZW50JiwgY29uc3QgV2ViS2V5Ym9h
cmRFdmVudCYpIHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgfldlYkF1dG9GaWxsQ2xpZW50KCkgeyB9
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJBdXRvZmlsbENsaWVudC5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQXV0b2ZpbGxDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4xZWI3Y2I2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQXV0b2ZpbGxDbGllbnQuaApAQCAtMCwwICsxLDg1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJBdXRvZmlsbENsaWVudF9oCisjZGVmaW5lIFdlYkF1dG9maWxsQ2xpZW50X2gK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYklucHV0RWxlbWVudDsKK2NsYXNzIFdl
YktleWJvYXJkRXZlbnQ7CitjbGFzcyBXZWJOb2RlOworY2xhc3MgV2ViU3RyaW5nOworCitjbGFz
cyBXZWJBdXRvZmlsbENsaWVudCB7CitwdWJsaWM6CisgICAgLy8gSW5mb3JtcyB0aGUgYnJvd3Nl
ciB0aGF0IHRoZSB1c2VyIGhhcyBhY2NlcHRlZCBhbiBBdXRvZmlsbCBzdWdnZXN0aW9uIGZvcgor
ICAgIC8vIGEgV2ViTm9kZS4gIHx1bmlxdWVJRHwgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBz
ZXQgb2YgQXV0b2ZpbGwgcHJvZmlsZXMsCisgICAgLy8gYW5kIHNob3VsZCBuZXZlciBiZSBuZWdh
dGl2ZS4gIElmIGl0IGlzIDAsIHRoZW4gdGhlIHN1Z2dlc3Rpb24gaXMgYW4KKyAgICAvLyBBdXRv
Y29tcGxldGUgc3VnZ2VzdGlvbjsgYW5kIHx2YWx1ZXwgc3RvcmVzIHRoZSBzdWdnZXN0ZWQgdGV4
dC4gIHxpbmRleHwKKyAgICAvLyBpcyBhbiBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgc3VnZ2VzdGlv
biBpbiB0aGUgbGlzdCBvZiBzdWdnZXN0aW9ucyBwcm92aWRlZAorICAgIC8vIGJ5IHRoZSBjbGll
bnQuCisgICAgdmlydHVhbCB2b2lkIGRpZEFjY2VwdEF1dG9maWxsU3VnZ2VzdGlvbihjb25zdCBX
ZWJOb2RlJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlN0cmluZyYgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxhYmVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHVuaXF1ZUlELAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW5kZXgpIHsgfQorCisgICAgLy8g
SW5mb3JtcyB0aGUgYnJvd3NlciB0aGF0IHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhbiBBdXRvZmls
bCBzdWdnZXN0aW9uIGZvcgorICAgIC8vIGEgV2ViTm9kZS4gIFRoaXMgaGFwcGVucyB3aGVuIHRo
ZSB1c2VyIGhvdmVycyBvdmVyIGEgc3VnZ2VzdGlvbiBvciB1c2VzCisgICAgLy8gdGhlIGFycm93
IGtleXMgdG8gbmF2aWdhdGUgdG8gYSBzdWdnZXN0aW9uLgorICAgIHZpcnR1YWwgdm9pZCBkaWRT
ZWxlY3RBdXRvZmlsbFN1Z2dlc3Rpb24oY29uc3QgV2ViTm9kZSYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIG5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcm
IGxhYmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHVuaXF1ZUlEKSB7IH0KKworICAgIC8vIEluZm9ybXMgdGhlIGJyb3dzZXIgdGhhdCB0aGUgdXNl
ciBoYXMgY2xlYXJlZCB0aGUgc2VsZWN0aW9uIGZyb20gdGhlCisgICAgLy8gQXV0b2ZpbGwgc3Vn
Z2VzdGlvbnMgcG9wdXAuIFRoaXMgaGFwcGVucyB3aGVuIGEgdXNlciB1c2VzIHRoZSBhcnJvdwor
ICAgIC8vIGtleXMgdG8gbmF2aWdhdGUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgcG9zc2libGUgc2Vs
ZWN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xlYXJBdXRvZmlsbFNlbGVjdGlvbihjb25z
dCBXZWJOb2RlJikgeyB9CisKKyAgICAvLyBJbnN0cnVjdHMgdGhlIGJyb3dzZXIgdG8gcmVtb3Zl
IHRoZSBBdXRvY29tcGxldGUgZW50cnkgc3BlY2lmaWVkIGZyb20KKyAgICAvLyBpdHMgREIuCisg
ICAgdmlydHVhbCB2b2lkIHJlbW92ZUF1dG9jb21wbGV0ZVN1Z2dlc3Rpb24oY29uc3QgV2ViU3Ry
aW5nJiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlN0cmluZyYgdmFsdWUpIHsgfQorCisgICAgLy8gVGhlc2UgbWV0aG9kcyBhcmUg
Y2FsbGVkIHdoZW4gdGhlIHVzZXJzIGVkaXRzIGEgdGV4dC1maWVsZC4KKyAgICB2aXJ0dWFsIHZv
aWQgdGV4dEZpZWxkRGlkQmVnaW5FZGl0aW5nKGNvbnN0IFdlYklucHV0RWxlbWVudCYpIHsgfQor
ICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRFbmRFZGl0aW5nKGNvbnN0IFdlYklucHV0RWxl
bWVudCYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCB0ZXh0RmllbGREaWRDaGFuZ2UoY29uc3QgV2Vi
SW5wdXRFbGVtZW50JikgeyB9CisgICAgdmlydHVhbCB2b2lkIHRleHRGaWVsZERpZFJlY2VpdmVL
ZXlEb3duKGNvbnN0IFdlYklucHV0RWxlbWVudCYsIGNvbnN0IFdlYktleWJvYXJkRXZlbnQmKSB7
IH0KKworcHJvdGVjdGVkOgorICAgIH5XZWJBdXRvZmlsbENsaWVudCgpIHsgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViTm9kZS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViTm9kZS5oCmluZGV4IGM2YmFhMTIuLmVkODBiN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYk5vZGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJOb2RlLmgKQEAgLTM1LDYgKzM1LDkgQEAKICNpbmNsdWRlICJXZWJQcml2YXRl
UHRyLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAKKy8vIFRPRE8oaXNoZXJtYW4pOiBSZW1v
dmUgdGhpcyBvbmNlIHRoZSBDaHJvbWl1bSBzaWRlIGlzIHVwZGF0ZWQuCisjZGVmaW5lIENSQlVH
XzcyNzU4X0ZJWEVECisKIG5hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgTm9kZTsgfQogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZpZXcuaAppbmRl
eCA0YTNhYjU4Li45MTQ4ZDcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmll
dy5oCkBAIC00MCw3ICs0MCw3IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdDsKLWNsYXNzIFdlYkF1dG9GaWxsQ2xpZW50OworY2xhc3MgV2ViQXV0
b2ZpbGxDbGllbnQ7CiBjbGFzcyBXZWJEZXZUb29sc0FnZW50OwogY2xhc3MgV2ViRGV2VG9vbHNB
Z2VudENsaWVudDsKIGNsYXNzIFdlYkRyYWdEYXRhOwpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVNYWluRnJhbWUoV2ViRnJhbWVDbGllbnQqKSA9
IDA7CiAKICAgICAvLyBJbml0aWFsaXplcyB0aGUgdmFyaW91cyBjbGllbnQgaW50ZXJmYWNlcy4K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0QXV0b0ZpbGxDbGllbnQoV2ViQXV0b0ZpbGxDbGllbnQqKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEF1dG9maWxsQ2xpZW50KFdlYkF1dG9maWxsQ2xpZW50
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZUb29sc0FnZW50Q2xpZW50KFdlYkRldlRv
b2xzQWdlbnRDbGllbnQqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFBlcm1pc3Npb25DbGll
bnQoV2ViUGVybWlzc2lvbkNsaWVudCopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3BlbGxD
aGVja0NsaWVudChXZWJTcGVsbENoZWNrQ2xpZW50KikgPSAwOwpAQCAtMjc3LDE2ICsyNzcsMTYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViQWNjZXNzaWJpbGl0eU9iamVjdCBhY2Nlc3NpYmls
aXR5T2JqZWN0KCkgPSAwOwogCiAKLSAgICAvLyBBdXRvRmlsbCAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAvLyBBdXRvZmls
bCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotICAgIC8vIE5vdGlmaWVzIHRoZSBXZWJWaWV3IHRoYXQgQXV0b0ZpbGwgc3VnZ2Vz
dGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYSBub2RlLgorICAgIC8vIE5vdGlmaWVzIHRoZSBXZWJW
aWV3IHRoYXQgQXV0b2ZpbGwgc3VnZ2VzdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgYSBub2RlLgog
ICAgIC8vIHx1bmlxdWVJRHN8IGlzIGEgdmVjdG9yIG9mIElEcyB0aGF0IHJlcHJlc2VudCB0aGUg
dW5pcXVlIElEIG9mIGVhY2gKLSAgICAvLyBBdXRvRmlsbCBwcm9maWxlIGluIHRoZSBzdWdnZXN0
aW9ucyBwb3B1cC4gIElmIGEgdW5pcXVlIElEIGlzIDAsIHRoZW4gdGhlCi0gICAgLy8gY29ycmVz
cG9uZGluZyBzdWdnZXN0aW9uIGNvbWVzIGZyb20gQXV0b2NvbXBsZXRlIHJhdGhlciB0aGFuIEF1
dG9GaWxsLgorICAgIC8vIEF1dG9maWxsIHByb2ZpbGUgaW4gdGhlIHN1Z2dlc3Rpb25zIHBvcHVw
LiBJZiBhIHVuaXF1ZSBJRCBpcyAwLCB0aGVuIHRoZQorICAgIC8vIGNvcnJlc3BvbmRpbmcgc3Vn
Z2VzdGlvbiBjb21lcyBmcm9tIEF1dG9jb21wbGV0ZSByYXRoZXIgdGhhbiBBdXRvZmlsbC4KICAg
ICAvLyBJZiBhIHVuaXF1ZSBJRCBpcyBuZWdhdGl2ZSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyAi
c3VnZ2VzdGlvbiIgaXMKLSAgICAvLyBhY3R1YWxseSBhIHVzZXItZmFjaW5nIHdhcm5pbmcsIGUu
Zy4gZXhwbGFpbmluZyB3aHkgQXV0b0ZpbGwgaXMKKyAgICAvLyBhY3R1YWxseSBhIHVzZXItZmFj
aW5nIHdhcm5pbmcsIGUuZy4gZXhwbGFpbmluZyB3aHkgQXV0b2ZpbGwgaXMKICAgICAvLyB1bmF2
YWlsYWJsZSBmb3IgdGhlIGN1cnJlbnQgZm9ybS4KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHlBdXRv
RmlsbFN1Z2dlc3Rpb25zKAorICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1dG9maWxsU3VnZ2VzdGlv
bnMoCiAgICAgICAgIGNvbnN0IFdlYk5vZGUmLAogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2Vi
U3RyaW5nPiYgbmFtZXMsCiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJl
bHMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvRmlsbFBvcHVw
TWVudUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvRmlsbFBvcHVw
TWVudUNsaWVudC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwNWM1ZjEuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVD
bGllbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9u
LgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCIKLQotI2luY2x1ZGUgIkNT
U0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKLSNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiRnJh
bWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCi0jaW5jbHVk
ZSAiV2ViQXV0b0ZpbGxDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJOb2RlLmgiCi0jaW5jbHVkZSAi
V2ViU3RyaW5nLmgiCi0jaW5jbHVkZSAiV2ViVmVjdG9yLmgiCi0jaW5jbHVkZSAiV2ViVmlld0Ns
aWVudC5oIgotI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OkF1
dG9GaWxsUG9wdXBNZW51Q2xpZW50KCkKLSAgICA6IG1fc2VwYXJhdG9ySW5kZXgoLTEpCi0gICAg
LCBtX3NlbGVjdGVkSW5kZXgoLTEpCi0gICAgLCBtX3RleHRGaWVsZCgwKQotewotfQotCi1BdXRv
RmlsbFBvcHVwTWVudUNsaWVudDo6fkF1dG9GaWxsUG9wdXBNZW51Q2xpZW50KCkKLXsKLX0KLQot
dW5zaWduZWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmdldFN1Z2dlc3Rpb25zQ291bnQoKSBj
b25zdAotewotICAgIHJldHVybiBtX25hbWVzLnNpemUoKSArICgobV9zZXBhcmF0b3JJbmRleCA9
PSAtMSkgPyAwIDogMSk7Ci19Ci0KLVdlYlN0cmluZyBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6
Z2V0U3VnZ2VzdGlvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAgaW50IGluZGV4
ID0gY29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJbmRleChsaXN0SW5kZXgpOwotICAgIGlmIChp
bmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIFdlYlN0cmluZygpOwotCi0gICAgQVNTRVJUKGlu
ZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRleCkgPCBtX25hbWVzLnNpemUoKSk7
Ci0gICAgcmV0dXJuIG1fbmFtZXNbaW5kZXhdOwotfQotCi1XZWJTdHJpbmcgQXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQ6OmdldExhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsKLSAgICBp
bnQgaW5kZXggPSBjb252ZXJ0TGlzdEluZGV4VG9JbnRlcm5hbEluZGV4KGxpc3RJbmRleCk7Ci0g
ICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7Ci0KLSAgICBB
U1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IG1fbGFiZWxz
LnNpemUoKSk7Ci0gICAgcmV0dXJuIG1fbGFiZWxzW2luZGV4XTsKLX0KLQotV2ViU3RyaW5nIEF1
dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpnZXRJY29uKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QK
LXsKLSAgICBpbnQgaW5kZXggPSBjb252ZXJ0TGlzdEluZGV4VG9JbnRlcm5hbEluZGV4KGxpc3RJ
bmRleCk7Ci0gICAgaWYgKGluZGV4ID09IC0xKQotICAgICAgICByZXR1cm4gV2ViU3RyaW5nKCk7
Ci0KLSAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8
IG1faWNvbnMuc2l6ZSgpKTsKLSAgICByZXR1cm4gbV9pY29uc1tpbmRleF07Ci19Ci0KLXZvaWQg
QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVk
IGxpc3RJbmRleCkKLXsKLSAgICBpZiAoIWNhblJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KGxpc3RJ
bmRleCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGludCBpbmRleCA9IGNvbnZlcnRMaXN0SW5k
ZXhUb0ludGVybmFsSW5kZXgobGlzdEluZGV4KTsKLQotICAgIEFTU0VSVChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpIDwgbV9uYW1lcy5zaXplKCkpOwotCi0gICAgbV9uYW1lcy5yZW1vdmUo
aW5kZXgpOwotICAgIG1fbGFiZWxzLnJlbW92ZShpbmRleCk7Ci0gICAgbV9pY29ucy5yZW1vdmUo
aW5kZXgpOwotICAgIG1fdW5pcXVlSURzLnJlbW92ZShpbmRleCk7Ci0KLSAgICAvLyBTaGlmdCB0
aGUgc2VwYXJhdG9yIGluZGV4IGlmIG5lY2Vzc2FyeS4KLSAgICBpZiAobV9zZXBhcmF0b3JJbmRl
eCAhPSAtMSkKLSAgICAgICAgbV9zZXBhcmF0b3JJbmRleC0tOwotfQotCi1ib29sIEF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50OjpjYW5SZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25lZCBsaXN0
SW5kZXgpCi17Ci0gICAgLy8gT25seSBhbGxvdyBkZWxldGlvbiBvZiBpdGVtcyBiZWZvcmUgdGhl
IHNlcGFyYXRvciB0aGF0IGhhdmUgdW5pcXVlIGlkIDAKLSAgICAvLyAoaS5lLiBhcmUgYXV0b2Nv
bXBsZXRlIHJhdGhlciB0aGFuIGF1dG9maWxsIGl0ZW1zKS4KLSAgICBpbnQgaW5kZXggPSBjb252
ZXJ0TGlzdEluZGV4VG9JbnRlcm5hbEluZGV4KGxpc3RJbmRleCk7Ci0gICAgcmV0dXJuICFtX3Vu
aXF1ZUlEc1tpbmRleF0gJiYgKG1fc2VwYXJhdG9ySW5kZXggPT0gLTEgfHwgbGlzdEluZGV4IDwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpKTsKLX0KLQotdm9pZCBBdXRv
RmlsbFBvcHVwTWVudUNsaWVudDo6dmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9v
bCBmaXJlRXZlbnRzKQotewotICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gZ2V0V2ViVmlldygp
OwotICAgIGlmICghd2ViVmlldykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fc2VwYXJh
dG9ySW5kZXggIT0gLTEgJiYgbGlzdEluZGV4ID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2Vw
YXJhdG9ySW5kZXgpKQotICAgICAgICAtLWxpc3RJbmRleDsKLQotICAgIEFTU0VSVChsaXN0SW5k
ZXggPCBtX25hbWVzLnNpemUoKSk7Ci0KLSAgICB3ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpLT5k
aWRBY2NlcHRBdXRvRmlsbFN1Z2dlc3Rpb24oV2ViTm9kZShnZXRUZXh0RmllbGQoKSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
bmFtZXNbbGlzdEluZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9sYWJlbHNbbGlzdEluZGV4XSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bmlxdWVJRHNb
bGlzdEluZGV4XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGlzdEluZGV4KTsKLX0KLQotdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNs
aWVudDo6c2VsZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCBsaXN0SW5kZXgsIGJvb2wgZmlyZUV2ZW50
cykKLXsKLSAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsKLSAgICBpZiAo
IXdlYlZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3NlcGFyYXRvckluZGV4ICE9
IC0xICYmIGxpc3RJbmRleCA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NlcGFyYXRvckluZGV4
KSkKLSAgICAgICAgLS1saXN0SW5kZXg7Ci0KLSAgICBBU1NFUlQobGlzdEluZGV4IDwgbV9uYW1l
cy5zaXplKCkpOwotCi0gICAgd2ViVmlldy0+YXV0b0ZpbGxDbGllbnQoKS0+ZGlkU2VsZWN0QXV0
b0ZpbGxTdWdnZXN0aW9uKFdlYk5vZGUoZ2V0VGV4dEZpZWxkKCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVzW2xpc3RJ
bmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGFiZWxzW2xpc3RJbmRleF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5pcXVlSURzW2xpc3RJbmRleF0p
OwotfQotCi12b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpzZWxlY3Rpb25DbGVhcmVkKCkK
LXsKLSAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsKLSAgICBpZiAod2Vi
VmlldykKLSAgICAgICAgd2ViVmlldy0+YXV0b0ZpbGxDbGllbnQoKS0+ZGlkQ2xlYXJBdXRvRmls
bFNlbGVjdGlvbihXZWJOb2RlKGdldFRleHRGaWVsZCgpKSk7Ci19Ci0KLVN0cmluZyBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6aXRlbVRleHQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewot
ICAgIHJldHVybiBnZXRTdWdnZXN0aW9uKGxpc3RJbmRleCk7Ci19Ci0KLVN0cmluZyBBdXRvRmls
bFBvcHVwTWVudUNsaWVudDo6aXRlbUxhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKLXsK
LSAgICByZXR1cm4gZ2V0TGFiZWwobGlzdEluZGV4KTsKLX0KLQotU3RyaW5nIEF1dG9GaWxsUG9w
dXBNZW51Q2xpZW50OjppdGVtSWNvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGdldEljb24obGlzdEluZGV4KTsKLX0KLQotYm9vbCBBdXRvRmlsbFBvcHVwTWVudUNs
aWVudDo6aXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFpdGVtSXNXYXJuaW5nKGxpc3RJbmRleCk7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIEF1dG9G
aWxsUG9wdXBNZW51Q2xpZW50OjppdGVtU3R5bGUodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAot
ewotICAgIHJldHVybiBpdGVtSXNXYXJuaW5nKGxpc3RJbmRleCkgPyAqbV93YXJuaW5nU3R5bGUg
OiAqbV9yZWd1bGFyU3R5bGU7Ci19Ci0KLVBvcHVwTWVudVN0eWxlIEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50OjptZW51U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiAqbV9yZWd1bGFyU3R5bGU7
Ci19Ci0KLWludCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Y2xpZW50UGFkZGluZ0xlZnQoKSBj
b25zdAotewotICAgIC8vIEJ1ZyBodHRwOi8vY3JidWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNh
dGUgdGhlIHN0eWxlIGNhbiBiZSAwLgotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVs
ZFN0eWxlKCk7Ci0gICAgaWYgKCFzdHlsZSkKLSAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1lKCktPnBvcHVwSW50ZXJuYWxQYWRkaW5nTGVmdChz
dHlsZSk7Ci19Ci0KLWludCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Y2xpZW50UGFkZGluZ1Jp
Z2h0KCkgY29uc3QKLXsKLSAgICAvLyBCdWcgaHR0cDovL2NyYnVnLmNvbS83NzA4IHNlZW1zIHRv
IGluZGljYXRlIHRoZSBzdHlsZSBjYW4gYmUgMC4KLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0
ZXh0RmllbGRTdHlsZSgpOwotICAgIGlmICghc3R5bGUpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRp
bmdSaWdodChzdHlsZSk7Ci19Ci0KLXZvaWQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnBvcHVw
RGlkSGlkZSgpCi17Ci0gICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7Ci0g
ICAgaWYgKCF3ZWJWaWV3KQotICAgICAgICByZXR1cm47Ci0KLSAgICB3ZWJWaWV3LT5hdXRvRmls
bFBvcHVwRGlkSGlkZSgpOwotICAgIHdlYlZpZXctPmF1dG9GaWxsQ2xpZW50KCktPmRpZENsZWFy
QXV0b0ZpbGxTZWxlY3Rpb24oV2ViTm9kZShnZXRUZXh0RmllbGQoKSkpOwotfQotCi1ib29sIEF1
dG9GaWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSXNTZXBhcmF0b3IodW5zaWduZWQgbGlzdEluZGV4
KSBjb25zdAotewotICAgIHJldHVybiAobV9zZXBhcmF0b3JJbmRleCAhPSAtMSAmJiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV9zZXBhcmF0b3JJbmRleCkgPT0gbGlzdEluZGV4KTsKLX0KLQotYm9v
bCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6aXRlbUlzV2FybmluZyh1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0Ci17Ci0gICAgaW50IGluZGV4ID0gY29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJ
bmRleChsaXN0SW5kZXgpOwotICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgQVNTRVJUKGluZGV4ID49IDAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRl
eCkgPCBtX3VuaXF1ZUlEcy5zaXplKCkpOwotICAgIHJldHVybiBtX3VuaXF1ZUlEc1tpbmRleF0g
PCAwOwotfQotCi12b2lkIEF1dG9GaWxsUG9wdXBNZW51Q2xpZW50OjpzZXRUZXh0RnJvbUl0ZW0o
dW5zaWduZWQgbGlzdEluZGV4KQotewotICAgIG1fdGV4dEZpZWxkLT5zZXRWYWx1ZShnZXRTdWdn
ZXN0aW9uKGxpc3RJbmRleCkpOwotfQotCi1Gb250U2VsZWN0b3IqIEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50Ojpmb250U2VsZWN0b3IoKSBjb25zdAotewotICAgIHJldHVybiBtX3RleHRGaWVsZC0+
ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5mb250U2VsZWN0b3IoKTsKLX0KLQotSG9zdFdp
bmRvdyogQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6Omhvc3RXaW5kb3coKSBjb25zdAotewotICAg
IHJldHVybiBtX3RleHRGaWVsZC0+ZG9jdW1lbnQoKS0+dmlldygpLT5ob3N0V2luZG93KCk7Ci19
Ci0KLVBhc3NSZWZQdHI8U2Nyb2xsYmFyPiBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Y3JlYXRl
U2Nyb2xsYmFyKAotICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSwKLSAgICBTY3Jv
bGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwKLSAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBz
aXplKQotewotICAgIHJldHVybiBTY3JvbGxiYXI6OmNyZWF0ZU5hdGl2ZVNjcm9sbGJhcihzY3Jv
bGxhYmxlQXJlYSwgb3JpZW50YXRpb24sIHNpemUpOwotfQotCi12b2lkIEF1dG9GaWxsUG9wdXBN
ZW51Q2xpZW50Ojppbml0aWFsaXplKAotICAgIEhUTUxJbnB1dEVsZW1lbnQqIHRleHRGaWVsZCwK
LSAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCi0gICAgY29uc3QgV2ViVmVj
dG9yPFdlYlN0cmluZz4mIGxhYmVscywKLSAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
aWNvbnMsCi0gICAgY29uc3QgV2ViVmVjdG9yPGludD4mIHVuaXF1ZUlEcywKLSAgICBpbnQgc2Vw
YXJhdG9ySW5kZXgpCi17Ci0gICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSBsYWJlbHMuc2l6ZSgp
KTsKLSAgICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IGljb25zLnNpemUoKSk7Ci0gICAgQVNTRVJU
KG5hbWVzLnNpemUoKSA9PSB1bmlxdWVJRHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoc2VwYXJhdG9y
SW5kZXggPCBzdGF0aWNfY2FzdDxpbnQ+KG5hbWVzLnNpemUoKSkpOwotCi0gICAgbV9zZWxlY3Rl
ZEluZGV4ID0gLTE7Ci0gICAgbV90ZXh0RmllbGQgPSB0ZXh0RmllbGQ7Ci0KLSAgICAvLyBUaGUg
c3VnZ2VzdGlvbnMgbXVzdCBiZSBzZXQgYmVmb3JlIGluaXRpYWxpemluZyB0aGUKLSAgICAvLyBB
dXRvRmlsbFBvcHVwTWVudUNsaWVudC4KLSAgICBzZXRTdWdnZXN0aW9ucyhuYW1lcywgbGFiZWxz
LCBpY29ucywgdW5pcXVlSURzLCBzZXBhcmF0b3JJbmRleCk7Ci0KLSAgICBGb250RGVzY3JpcHRp
b24gcmVndWxhckZvbnREZXNjcmlwdGlvbjsKLSAgICBSZW5kZXJUaGVtZTo6ZGVmYXVsdFRoZW1l
KCktPnN5c3RlbUZvbnQoQ1NTVmFsdWVXZWJraXRDb250cm9sLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWd1bGFyRm9udERlc2NyaXB0aW9uKTsKLSAgICBS
ZW5kZXJTdHlsZSogc3R5bGUgPSBtX3RleHRGaWVsZC0+Y29tcHV0ZWRTdHlsZSgpOwotICAgIHJl
Z3VsYXJGb250RGVzY3JpcHRpb24uc2V0Q29tcHV0ZWRTaXplKHN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5jb21wdXRlZFNpemUoKSk7Ci0KLSAgICBGb250IHJlZ3VsYXJGb250KHJlZ3VsYXJGb250
RGVzY3JpcHRpb24sIDAsIDApOwotICAgIHJlZ3VsYXJGb250LnVwZGF0ZSh0ZXh0RmllbGQtPmRv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+Zm9udFNlbGVjdG9yKCkpOwotICAgIC8vIFRoZSBk
aXJlY3Rpb24gb2YgdGV4dCBpbiBwb3B1cCBtZW51IGlzIHNldCB0aGUgc2FtZSBhcyB0aGUgZGly
ZWN0aW9uIG9mCi0gICAgLy8gdGhlIGlucHV0IGVsZW1lbnQ6IHRleHRGaWVsZC4KLSAgICBtX3Jl
Z3VsYXJTdHlsZSA9IGFkb3B0UHRyKG5ldyBQb3B1cE1lbnVTdHlsZShDb2xvcjo6YmxhY2ssIENv
bG9yOjp3aGl0ZSwgcmVndWxhckZvbnQsIHRydWUsIGZhbHNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aChXZWJDb3JlOjpGaXhlZCksIHRl
eHRGaWVsZC0+cmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEZpZWxkLT5yZW5kZXJlcigp
LT5zdHlsZSgpLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcHVwTWVudVN0eWxlOjpBdXRvZmlsbFBv
cHVwKSk7Ci0KLSAgICBGb250RGVzY3JpcHRpb24gd2FybmluZ0ZvbnREZXNjcmlwdGlvbiA9IHJl
Z3VsYXJGb250LmZvbnREZXNjcmlwdGlvbigpOwotICAgIHdhcm5pbmdGb250RGVzY3JpcHRpb24u
c2V0SXRhbGljKHRydWUpOwotICAgIEZvbnQgd2FybmluZ0ZvbnQod2FybmluZ0ZvbnREZXNjcmlw
dGlvbiwgcmVndWxhckZvbnQubGV0dGVyU3BhY2luZygpLCByZWd1bGFyRm9udC53b3JkU3BhY2lu
ZygpKTsKLSAgICB3YXJuaW5nRm9udC51cGRhdGUocmVndWxhckZvbnQuZm9udFNlbGVjdG9yKCkp
OwotICAgIG1fd2FybmluZ1N0eWxlID0gYWRvcHRQdHIobmV3IFBvcHVwTWVudVN0eWxlKENvbG9y
OjpkYXJrR3JheSwgbV9yZWd1bGFyU3R5bGUtPmJhY2tncm91bmRDb2xvcigpLCB3YXJuaW5nRm9u
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Jl
Z3VsYXJTdHlsZS0+aXNWaXNpYmxlKCksIG1fcmVndWxhclN0eWxlLT5pc0Rpc3BsYXlOb25lKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9yZWd1
bGFyU3R5bGUtPnRleHRJbmRlbnQoKSwgbV9yZWd1bGFyU3R5bGUtPnRleHREaXJlY3Rpb24oKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3JlZ3Vs
YXJTdHlsZS0+aGFzVGV4dERpcmVjdGlvbk92ZXJyaWRlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9wdXBNZW51U3R5bGU6OkF1dG9maWxsUG9w
dXApKTsKLX0KLQotdm9pZCBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6c2V0U3VnZ2VzdGlvbnMo
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5hbWVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVs
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBpY29ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxpbnQ+JiB1bmlxdWVJRHMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VwYXJhdG9ySW5kZXgp
Ci17Ci0gICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSBsYWJlbHMuc2l6ZSgpKTsKLSAgICBBU1NF
UlQobmFtZXMuc2l6ZSgpID09IGljb25zLnNpemUoKSk7Ci0gICAgQVNTRVJUKG5hbWVzLnNpemUo
KSA9PSB1bmlxdWVJRHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoc2VwYXJhdG9ySW5kZXggPCBzdGF0
aWNfY2FzdDxpbnQ+KG5hbWVzLnNpemUoKSkpOwotCi0gICAgbV9uYW1lcy5jbGVhcigpOwotICAg
IG1fbGFiZWxzLmNsZWFyKCk7Ci0gICAgbV9pY29ucy5jbGVhcigpOwotICAgIG1fdW5pcXVlSURz
LmNsZWFyKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuYW1lcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBtX25hbWVzLmFwcGVuZChuYW1lc1tpXSk7Ci0gICAgICAgIG1fbGFiZWxzLmFw
cGVuZChsYWJlbHNbaV0pOwotICAgICAgICBtX2ljb25zLmFwcGVuZChpY29uc1tpXSk7Ci0gICAg
ICAgIG1fdW5pcXVlSURzLmFwcGVuZCh1bmlxdWVJRHNbaV0pOwotICAgIH0KLQotICAgIG1fc2Vw
YXJhdG9ySW5kZXggPSBzZXBhcmF0b3JJbmRleDsKLQotICAgIC8vIFRyeSB0byBwcmVzZXJ2ZSBz
ZWxlY3Rpb24gaWYgcG9zc2libGUuCi0gICAgaWYgKGdldFNlbGVjdGVkSW5kZXgoKSA+PSBzdGF0
aWNfY2FzdDxpbnQ+KG5hbWVzLnNpemUoKSkpCi0gICAgICAgIHNldFNlbGVjdGVkSW5kZXgoLTEp
OwotfQotCi1pbnQgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNvbnZlcnRMaXN0SW5kZXhUb0lu
dGVybmFsSW5kZXgodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAotewotICAgIGlmIChsaXN0SW5k
ZXggPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpKQotICAgICAgICBy
ZXR1cm4gLTE7Ci0KLSAgICBpZiAobV9zZXBhcmF0b3JJbmRleCA9PSAtMSB8fCBsaXN0SW5kZXgg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zZXBhcmF0b3JJbmRleCkpCi0gICAgICAgIHJldHVy
biBsaXN0SW5kZXg7Ci0gICAgcmV0dXJuIGxpc3RJbmRleCAtIDE7Ci19Ci0KLVdlYlZpZXdJbXBs
KiBBdXRvRmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0V2ViVmlldygpIGNvbnN0Ci17Ci0gICAgRnJh
bWUqIGZyYW1lID0gbV90ZXh0RmllbGQtPmRvY3VtZW50KCktPmZyYW1lKCk7Ci0gICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2Uo
KTsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFdlYlZpZXdJbXBsKj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT53ZWJWaWV3KCkp
OwotfQotCi1SZW5kZXJTdHlsZSogQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ6OnRleHRGaWVsZFN0
eWxlKCkgY29uc3QKLXsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBtX3RleHRGaWVsZC0+Y29t
cHV0ZWRTdHlsZSgpOwotICAgIGlmICghc3R5bGUpIHsKLSAgICAgICAgLy8gSXQgc2VlbXMgd2Ug
Y2FuIG9ubHkgaGF2ZSBhIDAgc3R5bGUgaW4gYSBUZXh0RmllbGQgaWYgdGhlCi0gICAgICAgIC8v
IG5vZGUgaXMgZGV0YWNoZWQsIGluIHdoaWNoIGNhc2Ugd2UgdGhlIHBvcHVwIHNob3VsZCBub3Qg
YmUKLSAgICAgICAgLy8gc2hvd2luZy4gIFBsZWFzZSByZXBvcnQgdGhpcyBpbiBodHRwOi8vY3Ji
dWcuY29tLzc3MDggYW5kCi0gICAgICAgIC8vIGluY2x1ZGUgdGhlIHBhZ2UgeW91IHdlcmUgdmlz
aXRpbmcuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4g
c3R5bGU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0F1dG9GaWxsUG9wdXBNZW51Q2xpZW50LmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM2MTYyNmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1
MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBBdXRvRmlsbFBvcHVwTWVudUNsaWVudF9oCi0jZGVmaW5lIEF1dG9G
aWxsUG9wdXBNZW51Q2xpZW50X2gKLQotI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBGb250U2VsZWN0b3I7Ci1jbGFzcyBIVE1MSW5wdXRF
bGVtZW50OwotY2xhc3MgUG9wdXBNZW51U3R5bGU7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLX0KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJWaWV3SW1wbDsK
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7Ci0KLS8vIFRoZSBBdXRvRmls
bCBzdWdnZXN0aW9ucyBwb3B1cCBtZW51IGNsaWVudCwgdXNlZCB0byBkaXNwbGF5IG5hbWUgc3Vn
Z2VzdGlvbnMKLS8vIHdpdGggcmlnaHQtanVzdGlmaWVkIGxhYmVscy4KLWNsYXNzIEF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50IDogcHVibGljIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCB7Ci1wdWJs
aWM6Ci0gICAgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQoKTsKLSAgICB2aXJ0dWFsIH5BdXRvRmls
bFBvcHVwTWVudUNsaWVudCgpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHN1Z2dl
c3Rpb25zIGF2YWlsYWJsZS4KLSAgICB2aXJ0dWFsIHVuc2lnbmVkIGdldFN1Z2dlc3Rpb25zQ291
bnQoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdGhlIHN1Z2dlc3Rpb24gYXQgfGxpc3RJbmRl
eHwuCi0gICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0U3VnZ2VzdGlvbih1bnNpZ25lZCBsaXN0SW5k
ZXgpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJucyB0aGUgbGFiZWwgYXQgfGxpc3RJbmRleHwuCi0g
ICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0TGFiZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsK
LQotICAgIC8vIFJldHVybnMgdGhlIGljb24gYXQgfGxpc3RJbmRleHwuCi0gICAgdmlydHVhbCBX
ZWJTdHJpbmcgZ2V0SWNvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwotCi0gICAgLy8gUmVt
b3ZlcyB0aGUgc3VnZ2VzdGlvbiBhdCB8bGlzdEluZGV4fCBmcm9tIHRoZSBsaXN0IG9mIHN1Z2dl
c3Rpb25zLgotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTdWdnZXN0aW9uQXRJbmRleCh1bnNpZ25l
ZCBsaXN0SW5kZXgpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBzdWdnZXN0aW9uIGF0
IHxsaXN0SW5kZXh8IGNhbiBiZSByZW1vdmVkLgotICAgIGJvb2wgY2FuUmVtb3ZlU3VnZ2VzdGlv
bkF0SW5kZXgodW5zaWduZWQgbGlzdEluZGV4KTsKLQotICAgIC8vIFdlYkNvcmU6OlBvcHVwTWVu
dUNsaWVudCBtZXRob2RzOgotICAgIHZpcnR1YWwgdm9pZCB2YWx1ZUNoYW5nZWQodW5zaWduZWQg
bGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMgPSB0cnVlKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2Vs
ZWN0aW9uQ2hhbmdlZCh1bnNpZ25lZCwgYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlv
bkNsZWFyZWQoKTsKLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIGl0ZW1UZXh0KHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXVEY6OlN0cmluZyBpdGVtTGFiZWwodW5zaWdu
ZWQgbGlzdEluZGV4KSBjb25zdDsKLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIGl0ZW1JY29uKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCBXVEY6OlN0cmluZyBpdGVtVG9v
bFRpcCh1bnNpZ25lZCBsYXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdURjo6U3RyaW5nKCk7IH0K
LSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIGl0ZW1BY2Nlc3NpYmlsaXR5VGV4dCh1bnNpZ25lZCBs
YXN0SW5kZXgpIGNvbnN0IHsgcmV0dXJuIFdURjo6U3RyaW5nKCk7IH0KLSAgICB2aXJ0dWFsIGJv
b2wgaXRlbUlzRW5hYmxlZCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OwotICAgIHZpcnR1YWwg
V2ViQ29yZTo6UG9wdXBNZW51U3R5bGUgaXRlbVN0eWxlKHVuc2lnbmVkIGxpc3RJbmRleCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZSBtZW51U3R5bGUoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIGludCBjbGllbnRJbnNldExlZnQoKSBjb25zdCB7IHJldHVybiAwOyB9
Ci0gICAgdmlydHVhbCBpbnQgY2xpZW50SW5zZXRSaWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
LSAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0OwotICAgIHZpcnR1YWwg
aW50IGNsaWVudFBhZGRpbmdSaWdodCgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxpc3RTaXpl
KCkgY29uc3QgeyByZXR1cm4gZ2V0U3VnZ2VzdGlvbnNDb3VudCgpOyB9Ci0gICAgdmlydHVhbCBp
bnQgc2VsZWN0ZWRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0ZWRJbmRleDsgfQotICAg
IHZpcnR1YWwgdm9pZCBwb3B1cERpZEhpZGUoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaXRlbUlzU2Vw
YXJhdG9yKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGl0ZW1J
c0xhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXRlbUlzU2VsZWN0ZWQodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRQb3BPdmVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsdWVTaG91bGRDaGFuZ2VPbkhvdFRy
YWNrKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEZy
b21JdGVtKHVuc2lnbmVkIGxpc3RJbmRleCk7Ci0gICAgdmlydHVhbCBXZWJDb3JlOjpGb250U2Vs
ZWN0b3IqIGZvbnRTZWxlY3RvcigpIGNvbnN0OwotICAgIHZpcnR1YWwgV2ViQ29yZTo6SG9zdFdp
bmRvdyogaG9zdFdpbmRvdygpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTY3JvbGxiYXI+IGNyZWF0ZVNjcm9sbGJhcigKLSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYWJs
ZUFyZWEqIGNsaWVudCwKLSAgICAgICAgV2ViQ29yZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sCi0gICAgICAgIFdlYkNvcmU6OlNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpOwot
Ci0gICAgdm9pZCBpbml0aWFsaXplKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqLAotICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbmFtZXMsCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsYWJlbHMsCi0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpY29ucywKLSAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPGludD4mIHVuaXF1ZUlEcywKLSAgICAgICAgICAg
ICAgICAgICAgaW50IHNlcGFyYXRvckluZGV4KTsKLQotICAgIHZvaWQgc2V0U3VnZ2VzdGlvbnMo
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIG5hbWVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpY29ucywKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxpbnQ+JiB1bmlxdWVJRHMsCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc2VwYXJhdG9ySW5kZXgpOwotCi1wcml2YXRlOgotICAgIC8vIENvbnZl
cnQgdGhlIHNwZWNpZmllZCBpbmRleCBmcm9tIGFuIGluZGV4IGludG8gdGhlIHZpc2libGUgbGlz
dCAod2hpY2ggbWlnaHQKLSAgICAvLyBpbmNsdWRlIGEgc2VwYXJhdG9yIGVudHJ5KSB0byBhbiBp
bmRleCB0byB8bV9uYW1lc3wgYW5kIHxtX2xhYmVsc3wuCi0gICAgLy8gUmV0dXJucyAtMSBpZiB0
aGUgZ2l2ZW4gaW5kZXggcG9pbnRzIHRvIHRoZSBzZXBhcmF0b3IuCi0gICAgaW50IGNvbnZlcnRM
aXN0SW5kZXhUb0ludGVybmFsSW5kZXgodW5zaWduZWQpIGNvbnN0OwotICAgIFdlYlZpZXdJbXBs
KiBnZXRXZWJWaWV3KCkgY29uc3Q7Ci0gICAgV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudCogZ2V0
VGV4dEZpZWxkKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0RmllbGQuZ2V0KCk7IH0KLSAgICBXZWJD
b3JlOjpSZW5kZXJTdHlsZSogdGV4dEZpZWxkU3R5bGUoKSBjb25zdDsKLQotICAgIGludCBnZXRT
ZWxlY3RlZEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RlZEluZGV4OyB9Ci0gICAgdm9p
ZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCkgeyBtX3NlbGVjdGVkSW5kZXggPSBpbmRleDsg
fQotCi0gICAgYm9vbCBpdGVtSXNXYXJuaW5nKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7Ci0K
LSAgICAvLyBUaGUgbmFtZXMsIGxhYmVscyBhbmQgaWNvbnMgdGhhdCBtYWtlIHVwIHRoZSBjb250
ZW50cyBvZiB0aGUgbWVudSBpdGVtcy4KLSAgICBWZWN0b3I8V1RGOjpTdHJpbmc+IG1fbmFtZXM7
Ci0gICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX2xhYmVsczsKLSAgICBWZWN0b3I8V1RGOjpTdHJp
bmc+IG1faWNvbnM7Ci0gICAgVmVjdG9yPGludD4gbV91bmlxdWVJRHM7Ci0KLSAgICAvLyBUaGUg
aW5kZXggb2YgdGhlIHNlcGFyYXRvci4gIC0xIGlmIHRoZXJlIGlzIG5vIHNlcGFyYXRvci4KLSAg
ICBpbnQgbV9zZXBhcmF0b3JJbmRleDsKLQotICAgIC8vIFRoZSBpbmRleCBvZiB0aGUgc2VsZWN0
ZWQgaXRlbS4gIC0xIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGVkIGl0ZW0uCi0gICAgaW50IG1fc2Vs
ZWN0ZWRJbmRleDsKLQotICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50PiBtX3Rl
eHRGaWVsZDsKLSAgICBPd25QdHI8V2ViQ29yZTo6UG9wdXBNZW51U3R5bGU+IG1fcmVndWxhclN0
eWxlOwotICAgIE93blB0cjxXZWJDb3JlOjpQb3B1cE1lbnVTdHlsZT4gbV93YXJuaW5nU3R5bGU7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmlsbFBvcHVwTWVudUNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRhMTg0ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0F1dG9maWxsUG9wdXBNZW51Q2xpZW50LmNwcApA
QCAtMCwwICsxLDM3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdXRvZmlsbFBv
cHVwTWVudUNsaWVudC5oIgorCisjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNp
bmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lVmll
dy5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJXZWJBdXRvZmlsbENsaWVudC5oIgor
I2luY2x1ZGUgIldlYk5vZGUuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJX
ZWJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmll
d0ltcGwuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQoKQor
ICAgIDogbV9zZXBhcmF0b3JJbmRleCgtMSkKKyAgICAsIG1fc2VsZWN0ZWRJbmRleCgtMSkKKyAg
ICAsIG1fdGV4dEZpZWxkKDApCit7Cit9CisKK0F1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojp+QXV0
b2ZpbGxQb3B1cE1lbnVDbGllbnQoKQoreworfQorCit1bnNpZ25lZCBBdXRvZmlsbFBvcHVwTWVu
dUNsaWVudDo6Z2V0U3VnZ2VzdGlvbnNDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbmFt
ZXMuc2l6ZSgpICsgKChtX3NlcGFyYXRvckluZGV4ID09IC0xKSA/IDAgOiAxKTsKK30KKworV2Vi
U3RyaW5nIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpnZXRTdWdnZXN0aW9uKHVuc2lnbmVkIGxp
c3RJbmRleCkgY29uc3QKK3sKKyAgICBpbnQgaW5kZXggPSBjb252ZXJ0TGlzdEluZGV4VG9JbnRl
cm5hbEluZGV4KGxpc3RJbmRleCk7CisgICAgaWYgKGluZGV4ID09IC0xKQorICAgICAgICByZXR1
cm4gV2ViU3RyaW5nKCk7CisKKyAgICBBU1NFUlQoaW5kZXggPj0gMCAmJiBzdGF0aWNfY2FzdDxz
aXplX3Q+KGluZGV4KSA8IG1fbmFtZXMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9uYW1lc1tpbmRl
eF07Cit9CisKK1dlYlN0cmluZyBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6Z2V0TGFiZWwodW5z
aWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAgIGludCBpbmRleCA9IGNvbnZlcnRMaXN0SW5k
ZXhUb0ludGVybmFsSW5kZXgobGlzdEluZGV4KTsKKyAgICBpZiAoaW5kZXggPT0gLTEpCisgICAg
ICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKworICAgIEFTU0VSVChpbmRleCA+PSAwICYmIHN0YXRp
Y19jYXN0PHNpemVfdD4oaW5kZXgpIDwgbV9sYWJlbHMuc2l6ZSgpKTsKKyAgICByZXR1cm4gbV9s
YWJlbHNbaW5kZXhdOworfQorCitXZWJTdHJpbmcgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6Omdl
dEljb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAgIGludCBpbmRleCA9IGNvbnZl
cnRMaXN0SW5kZXhUb0ludGVybmFsSW5kZXgobGlzdEluZGV4KTsKKyAgICBpZiAoaW5kZXggPT0g
LTEpCisgICAgICAgIHJldHVybiBXZWJTdHJpbmcoKTsKKworICAgIEFTU0VSVChpbmRleCA+PSAw
ICYmIHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXgpIDwgbV9pY29ucy5zaXplKCkpOworICAgIHJl
dHVybiBtX2ljb25zW2luZGV4XTsKK30KKwordm9pZCBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6
cmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgodW5zaWduZWQgbGlzdEluZGV4KQoreworICAgIGlmICgh
Y2FuUmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgobGlzdEluZGV4KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaW50IGluZGV4ID0gY29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJbmRleChsaXN0SW5k
ZXgpOworCisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkgPCBtX25hbWVz
LnNpemUoKSk7CisKKyAgICBtX25hbWVzLnJlbW92ZShpbmRleCk7CisgICAgbV9sYWJlbHMucmVt
b3ZlKGluZGV4KTsKKyAgICBtX2ljb25zLnJlbW92ZShpbmRleCk7CisgICAgbV91bmlxdWVJRHMu
cmVtb3ZlKGluZGV4KTsKKworICAgIC8vIFNoaWZ0IHRoZSBzZXBhcmF0b3IgaW5kZXggaWYgbmVj
ZXNzYXJ5LgorICAgIGlmIChtX3NlcGFyYXRvckluZGV4ICE9IC0xKQorICAgICAgICBtX3NlcGFy
YXRvckluZGV4LS07Cit9CisKK2Jvb2wgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmNhblJlbW92
ZVN1Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVkIGxpc3RJbmRleCkKK3sKKyAgICAvLyBPbmx5IGFs
bG93IGRlbGV0aW9uIG9mIGl0ZW1zIGJlZm9yZSB0aGUgc2VwYXJhdG9yIHRoYXQgaGF2ZSB1bmlx
dWUgaWQgMAorICAgIC8vIChpLmUuIGFyZSBhdXRvY29tcGxldGUgcmF0aGVyIHRoYW4gYXV0b2Zp
bGwgaXRlbXMpLgorICAgIGludCBpbmRleCA9IGNvbnZlcnRMaXN0SW5kZXhUb0ludGVybmFsSW5k
ZXgobGlzdEluZGV4KTsKKyAgICByZXR1cm4gIW1fdW5pcXVlSURzW2luZGV4XSAmJiAobV9zZXBh
cmF0b3JJbmRleCA9PSAtMSB8fCBsaXN0SW5kZXggPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9z
ZXBhcmF0b3JJbmRleCkpOworfQorCit2b2lkIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50Ojp2YWx1
ZUNoYW5nZWQodW5zaWduZWQgbGlzdEluZGV4LCBib29sIGZpcmVFdmVudHMpCit7CisgICAgV2Vi
Vmlld0ltcGwqIHdlYlZpZXcgPSBnZXRXZWJWaWV3KCk7CisgICAgaWYgKCF3ZWJWaWV3KQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9zZXBhcmF0b3JJbmRleCAhPSAtMSAmJiBsaXN0SW5k
ZXggPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zZXBhcmF0b3JJbmRleCkpCisgICAgICAgIC0t
bGlzdEluZGV4OworCisgICAgQVNTRVJUKGxpc3RJbmRleCA8IG1fbmFtZXMuc2l6ZSgpKTsKKwor
ICAgIHdlYlZpZXctPmF1dG9maWxsQ2xpZW50KCktPmRpZEFjY2VwdEF1dG9maWxsU3VnZ2VzdGlv
bihXZWJOb2RlKGdldFRleHRGaWVsZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9uYW1lc1tsaXN0SW5kZXhdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xh
YmVsc1tsaXN0SW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3VuaXF1ZUlEc1tsaXN0SW5kZXhdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SW5kZXgp
OworfQorCit2b2lkIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpzZWxlY3Rpb25DaGFuZ2VkKHVu
c2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzKQoreworICAgIFdlYlZpZXdJbXBsKiB3
ZWJWaWV3ID0gZ2V0V2ViVmlldygpOworICAgIGlmICghd2ViVmlldykKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fc2VwYXJhdG9ySW5kZXggIT0gLTEgJiYgbGlzdEluZGV4ID4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fc2VwYXJhdG9ySW5kZXgpKQorICAgICAgICAtLWxpc3RJbmRleDsK
KworICAgIEFTU0VSVChsaXN0SW5kZXggPCBtX25hbWVzLnNpemUoKSk7CisKKyAgICB3ZWJWaWV3
LT5hdXRvZmlsbENsaWVudCgpLT5kaWRTZWxlY3RBdXRvZmlsbFN1Z2dlc3Rpb24oV2ViTm9kZShn
ZXRUZXh0RmllbGQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbmFtZXNbbGlzdEluZGV4XSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sYWJlbHNbbGlzdElu
ZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV91bmlxdWVJRHNbbGlzdEluZGV4XSk7Cit9CisKK3ZvaWQgQXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnQ6OnNlbGVjdGlvbkNsZWFyZWQoKQoreworICAgIFdlYlZpZXdJbXBsKiB3ZWJW
aWV3ID0gZ2V0V2ViVmlldygpOworICAgIGlmICh3ZWJWaWV3KQorICAgICAgICB3ZWJWaWV3LT5h
dXRvZmlsbENsaWVudCgpLT5kaWRDbGVhckF1dG9maWxsU2VsZWN0aW9uKFdlYk5vZGUoZ2V0VGV4
dEZpZWxkKCkpKTsKK30KKworU3RyaW5nIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtVGV4
dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldFN1Z2dlc3Rpb24o
bGlzdEluZGV4KTsKK30KKworU3RyaW5nIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtTGFi
ZWwodW5zaWduZWQgbGlzdEluZGV4KSBjb25zdAoreworICAgIHJldHVybiBnZXRMYWJlbChsaXN0
SW5kZXgpOworfQorCitTdHJpbmcgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1JY29uKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0SWNvbihsaXN0SW5kZXgp
OworfQorCitib29sIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjppdGVtSXNFbmFibGVkKHVuc2ln
bmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gIWl0ZW1Jc1dhcm5pbmcobGlzdElu
ZGV4KTsKK30KKworUG9wdXBNZW51U3R5bGUgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0ZW1T
dHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGl0ZW1Jc1dhcm5p
bmcobGlzdEluZGV4KSA/ICptX3dhcm5pbmdTdHlsZSA6ICptX3JlZ3VsYXJTdHlsZTsKK30KKwor
UG9wdXBNZW51U3R5bGUgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6Om1lbnVTdHlsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICptX3JlZ3VsYXJTdHlsZTsKK30KKworaW50IEF1dG9maWxsUG9wdXBN
ZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nTGVmdCgpIGNvbnN0Cit7CisgICAgLy8gQnVnIGh0dHA6
Ly9jcmJ1Zy5jb20vNzcwOCBzZWVtcyB0byBpbmRpY2F0ZSB0aGUgc3R5bGUgY2FuIGJlIDAuCisg
ICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gdGV4dEZpZWxkU3R5bGUoKTsKKyAgICBpZiAoIXN0eWxl
KQorICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhl
bWUoKS0+cG9wdXBJbnRlcm5hbFBhZGRpbmdMZWZ0KHN0eWxlKTsKK30KKworaW50IEF1dG9maWxs
UG9wdXBNZW51Q2xpZW50OjpjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25zdAoreworICAgIC8vIEJ1
ZyBodHRwOi8vY3JidWcuY29tLzc3MDggc2VlbXMgdG8gaW5kaWNhdGUgdGhlIHN0eWxlIGNhbiBi
ZSAwLgorICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRGaWVsZFN0eWxlKCk7CisgICAgaWYg
KCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gUmVuZGVyVGhlbWU6OmRl
ZmF1bHRUaGVtZSgpLT5wb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KHN0eWxlKTsKK30KKwordm9p
ZCBBdXRvZmlsbFBvcHVwTWVudUNsaWVudDo6cG9wdXBEaWRIaWRlKCkKK3sKKyAgICBXZWJWaWV3
SW1wbCogd2ViVmlldyA9IGdldFdlYlZpZXcoKTsKKyAgICBpZiAoIXdlYlZpZXcpCisgICAgICAg
IHJldHVybjsKKworICAgIHdlYlZpZXctPmF1dG9maWxsUG9wdXBEaWRIaWRlKCk7CisgICAgd2Vi
Vmlldy0+YXV0b2ZpbGxDbGllbnQoKS0+ZGlkQ2xlYXJBdXRvZmlsbFNlbGVjdGlvbihXZWJOb2Rl
KGdldFRleHRGaWVsZCgpKSk7Cit9CisKK2Jvb2wgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6Oml0
ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuICht
X3NlcGFyYXRvckluZGV4ICE9IC0xICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NlcGFyYXRv
ckluZGV4KSA9PSBsaXN0SW5kZXgpOworfQorCitib29sIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50
OjppdGVtSXNXYXJuaW5nKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QKK3sKKyAgICBpbnQgaW5k
ZXggPSBjb252ZXJ0TGlzdEluZGV4VG9JbnRlcm5hbEluZGV4KGxpc3RJbmRleCk7CisgICAgaWYg
KGluZGV4ID09IC0xKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQoaW5kZXgg
Pj0gMCAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA8IG1fdW5pcXVlSURzLnNpemUoKSk7
CisgICAgcmV0dXJuIG1fdW5pcXVlSURzW2luZGV4XSA8IDA7Cit9CisKK3ZvaWQgQXV0b2ZpbGxQ
b3B1cE1lbnVDbGllbnQ6OnNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpCit7Cisg
ICAgbV90ZXh0RmllbGQtPnNldFZhbHVlKGdldFN1Z2dlc3Rpb24obGlzdEluZGV4KSk7Cit9CisK
K0ZvbnRTZWxlY3RvciogQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmZvbnRTZWxlY3RvcigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dEZpZWxkLT5kb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9y
KCktPmZvbnRTZWxlY3RvcigpOworfQorCitIb3N0V2luZG93KiBBdXRvZmlsbFBvcHVwTWVudUNs
aWVudDo6aG9zdFdpbmRvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGV4dEZpZWxkLT5kb2N1
bWVudCgpLT52aWV3KCktPmhvc3RXaW5kb3coKTsKK30KKworUGFzc1JlZlB0cjxTY3JvbGxiYXI+
IEF1dG9maWxsUG9wdXBNZW51Q2xpZW50OjpjcmVhdGVTY3JvbGxiYXIoCisgICAgU2Nyb2xsYWJs
ZUFyZWEqIHNjcm9sbGFibGVBcmVhLAorICAgIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0
aW9uLAorICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIHNpemUpCit7CisgICAgcmV0dXJuIFNjcm9s
bGJhcjo6Y3JlYXRlTmF0aXZlU2Nyb2xsYmFyKHNjcm9sbGFibGVBcmVhLCBvcmllbnRhdGlvbiwg
c2l6ZSk7Cit9CisKK3ZvaWQgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ6OmluaXRpYWxpemUoCisg
ICAgSFRNTElucHV0RWxlbWVudCogdGV4dEZpZWxkLAorICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiBuYW1lcywKKyAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbGFiZWxzLAor
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBpY29ucywKKyAgICBjb25zdCBXZWJWZWN0
b3I8aW50PiYgdW5pcXVlSURzLAorICAgIGludCBzZXBhcmF0b3JJbmRleCkKK3sKKyAgICBBU1NF
UlQobmFtZXMuc2l6ZSgpID09IGxhYmVscy5zaXplKCkpOworICAgIEFTU0VSVChuYW1lcy5zaXpl
KCkgPT0gaWNvbnMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IHVuaXF1ZUlE
cy5zaXplKCkpOworICAgIEFTU0VSVChzZXBhcmF0b3JJbmRleCA8IHN0YXRpY19jYXN0PGludD4o
bmFtZXMuc2l6ZSgpKSk7CisKKyAgICBtX3NlbGVjdGVkSW5kZXggPSAtMTsKKyAgICBtX3RleHRG
aWVsZCA9IHRleHRGaWVsZDsKKworICAgIC8vIFRoZSBzdWdnZXN0aW9ucyBtdXN0IGJlIHNldCBi
ZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQorICAgIC8vIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50Lgor
ICAgIHNldFN1Z2dlc3Rpb25zKG5hbWVzLCBsYWJlbHMsIGljb25zLCB1bmlxdWVJRHMsIHNlcGFy
YXRvckluZGV4KTsKKworICAgIEZvbnREZXNjcmlwdGlvbiByZWd1bGFyRm9udERlc2NyaXB0aW9u
OworICAgIFJlbmRlclRoZW1lOjpkZWZhdWx0VGhlbWUoKS0+c3lzdGVtRm9udChDU1NWYWx1ZVdl
YmtpdENvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlZ3VsYXJGb250RGVzY3JpcHRpb24pOworICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fdGV4
dEZpZWxkLT5jb21wdXRlZFN0eWxlKCk7CisgICAgcmVndWxhckZvbnREZXNjcmlwdGlvbi5zZXRD
b21wdXRlZFNpemUoc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgpKTsKKwor
ICAgIEZvbnQgcmVndWxhckZvbnQocmVndWxhckZvbnREZXNjcmlwdGlvbiwgMCwgMCk7CisgICAg
cmVndWxhckZvbnQudXBkYXRlKHRleHRGaWVsZC0+ZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3Rvcigp
LT5mb250U2VsZWN0b3IoKSk7CisgICAgLy8gVGhlIGRpcmVjdGlvbiBvZiB0ZXh0IGluIHBvcHVw
IG1lbnUgaXMgc2V0IHRoZSBzYW1lIGFzIHRoZSBkaXJlY3Rpb24gb2YKKyAgICAvLyB0aGUgaW5w
dXQgZWxlbWVudDogdGV4dEZpZWxkLgorICAgIG1fcmVndWxhclN0eWxlID0gYWRvcHRQdHIobmV3
IFBvcHVwTWVudVN0eWxlKENvbG9yOjpibGFjaywgQ29sb3I6OndoaXRlLCByZWd1bGFyRm9udCwg
dHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGVuZ3RoKFdlYkNvcmU6OkZpeGVkKSwgdGV4dEZpZWxkLT5yZW5kZXJlcigpLT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXh0RmllbGQtPnJlbmRlcmVyKCktPnN0eWxlKCktPnVuaWNvZGVCaWRpKCkg
PT0gT3ZlcnJpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUG9wdXBNZW51U3R5bGU6OkF1dG9maWxsUG9wdXApKTsKKworICAgIEZvbnREZXNjcmlw
dGlvbiB3YXJuaW5nRm9udERlc2NyaXB0aW9uID0gcmVndWxhckZvbnQuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgd2FybmluZ0ZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWModHJ1ZSk7CisgICAgRm9u
dCB3YXJuaW5nRm9udCh3YXJuaW5nRm9udERlc2NyaXB0aW9uLCByZWd1bGFyRm9udC5sZXR0ZXJT
cGFjaW5nKCksIHJlZ3VsYXJGb250LndvcmRTcGFjaW5nKCkpOworICAgIHdhcm5pbmdGb250LnVw
ZGF0ZShyZWd1bGFyRm9udC5mb250U2VsZWN0b3IoKSk7CisgICAgbV93YXJuaW5nU3R5bGUgPSBh
ZG9wdFB0cihuZXcgUG9wdXBNZW51U3R5bGUoQ29sb3I6OmRhcmtHcmF5LCBtX3JlZ3VsYXJTdHls
ZS0+YmFja2dyb3VuZENvbG9yKCksIHdhcm5pbmdGb250LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVndWxhclN0eWxlLT5pc1Zpc2libGUoKSwg
bV9yZWd1bGFyU3R5bGUtPmlzRGlzcGxheU5vbmUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3JlZ3VsYXJTdHlsZS0+dGV4dEluZGVudCgpLCBt
X3JlZ3VsYXJTdHlsZS0+dGV4dERpcmVjdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fcmVndWxhclN0eWxlLT5oYXNUZXh0RGlyZWN0aW9u
T3ZlcnJpZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQb3B1cE1lbnVTdHlsZTo6QXV0b2ZpbGxQb3B1cCkpOworfQorCit2b2lkIEF1dG9maWxs
UG9wdXBNZW51Q2xpZW50OjpzZXRTdWdnZXN0aW9ucyhjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbGFiZWxzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGljb25z
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
VmVjdG9yPGludD4mIHVuaXF1ZUlEcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzZXBhcmF0b3JJbmRleCkKK3sKKyAgICBBU1NFUlQobmFtZXMuc2l6
ZSgpID09IGxhYmVscy5zaXplKCkpOworICAgIEFTU0VSVChuYW1lcy5zaXplKCkgPT0gaWNvbnMu
c2l6ZSgpKTsKKyAgICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IHVuaXF1ZUlEcy5zaXplKCkpOwor
ICAgIEFTU0VSVChzZXBhcmF0b3JJbmRleCA8IHN0YXRpY19jYXN0PGludD4obmFtZXMuc2l6ZSgp
KSk7CisKKyAgICBtX25hbWVzLmNsZWFyKCk7CisgICAgbV9sYWJlbHMuY2xlYXIoKTsKKyAgICBt
X2ljb25zLmNsZWFyKCk7CisgICAgbV91bmlxdWVJRHMuY2xlYXIoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fbmFtZXMuYXBwZW5k
KG5hbWVzW2ldKTsKKyAgICAgICAgbV9sYWJlbHMuYXBwZW5kKGxhYmVsc1tpXSk7CisgICAgICAg
IG1faWNvbnMuYXBwZW5kKGljb25zW2ldKTsKKyAgICAgICAgbV91bmlxdWVJRHMuYXBwZW5kKHVu
aXF1ZUlEc1tpXSk7CisgICAgfQorCisgICAgbV9zZXBhcmF0b3JJbmRleCA9IHNlcGFyYXRvcklu
ZGV4OworCisgICAgLy8gVHJ5IHRvIHByZXNlcnZlIHNlbGVjdGlvbiBpZiBwb3NzaWJsZS4KKyAg
ICBpZiAoZ2V0U2VsZWN0ZWRJbmRleCgpID49IHN0YXRpY19jYXN0PGludD4obmFtZXMuc2l6ZSgp
KSkKKyAgICAgICAgc2V0U2VsZWN0ZWRJbmRleCgtMSk7Cit9CisKK2ludCBBdXRvZmlsbFBvcHVw
TWVudUNsaWVudDo6Y29udmVydExpc3RJbmRleFRvSW50ZXJuYWxJbmRleCh1bnNpZ25lZCBsaXN0
SW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKGxpc3RJbmRleCA9PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obV9zZXBhcmF0b3JJbmRleCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChtX3Nl
cGFyYXRvckluZGV4ID09IC0xIHx8IGxpc3RJbmRleCA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3NlcGFyYXRvckluZGV4KSkKKyAgICAgICAgcmV0dXJuIGxpc3RJbmRleDsKKyAgICByZXR1cm4g
bGlzdEluZGV4IC0gMTsKK30KKworV2ViVmlld0ltcGwqIEF1dG9maWxsUG9wdXBNZW51Q2xpZW50
OjpnZXRXZWJWaWV3KCkgY29uc3QKK3sKKyAgICBGcmFtZSogZnJhbWUgPSBtX3RleHRGaWVsZC0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwqPihwYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPndlYlZpZXcoKSk7Cit9CisKK1JlbmRlclN0eWxlKiBBdXRv
ZmlsbFBvcHVwTWVudUNsaWVudDo6dGV4dEZpZWxkU3R5bGUoKSBjb25zdAoreworICAgIFJlbmRl
clN0eWxlKiBzdHlsZSA9IG1fdGV4dEZpZWxkLT5jb21wdXRlZFN0eWxlKCk7CisgICAgaWYgKCFz
dHlsZSkgeworICAgICAgICAvLyBJdCBzZWVtcyB3ZSBjYW4gb25seSBoYXZlIGEgMCBzdHlsZSBp
biBhIFRleHRGaWVsZCBpZiB0aGUKKyAgICAgICAgLy8gbm9kZSBpcyBkZXRhY2hlZCwgaW4gd2hp
Y2ggY2FzZSB3ZSB0aGUgcG9wdXAgc2hvdWxkIG5vdCBiZQorICAgICAgICAvLyBzaG93aW5nLiAg
UGxlYXNlIHJlcG9ydCB0aGlzIGluIGh0dHA6Ly9jcmJ1Zy5jb20vNzcwOCBhbmQKKyAgICAgICAg
Ly8gaW5jbHVkZSB0aGUgcGFnZSB5b3Ugd2VyZSB2aXNpdGluZy4KKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBzdHlsZTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9BdXRvZmls
bFBvcHVwTWVudUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2ZpbGxQ
b3B1cE1lbnVDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJi
OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXV0b2Zp
bGxQb3B1cE1lbnVDbGllbnQuaApAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXV0b2ZpbGxQb3B1
cE1lbnVDbGllbnRfaAorI2RlZmluZSBBdXRvZmlsbFBvcHVwTWVudUNsaWVudF9oCisKKyNpbmNs
dWRlICJQb3B1cE1lbnVDbGllbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRm9u
dFNlbGVjdG9yOworY2xhc3MgSFRNTElucHV0RWxlbWVudDsKK2NsYXNzIFBvcHVwTWVudVN0eWxl
OworY2xhc3MgUmVuZGVyU3R5bGU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2Vi
U3RyaW5nOworY2xhc3MgV2ViVmlld0ltcGw7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3Mg
V2ViVmVjdG9yOworCisvLyBUaGUgQXV0b2ZpbGwgc3VnZ2VzdGlvbnMgcG9wdXAgbWVudSBjbGll
bnQsIHVzZWQgdG8gZGlzcGxheSBuYW1lIHN1Z2dlc3Rpb25zCisvLyB3aXRoIHJpZ2h0LWp1c3Rp
ZmllZCBsYWJlbHMuCitjbGFzcyBBdXRvZmlsbFBvcHVwTWVudUNsaWVudCA6IHB1YmxpYyBXZWJD
b3JlOjpQb3B1cE1lbnVDbGllbnQgeworcHVibGljOgorICAgIEF1dG9maWxsUG9wdXBNZW51Q2xp
ZW50KCk7CisgICAgdmlydHVhbCB+QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQoKTsKKworICAgIC8v
IFJldHVybnMgdGhlIG51bWJlciBvZiBzdWdnZXN0aW9ucyBhdmFpbGFibGUuCisgICAgdmlydHVh
bCB1bnNpZ25lZCBnZXRTdWdnZXN0aW9uc0NvdW50KCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5z
IHRoZSBzdWdnZXN0aW9uIGF0IHxsaXN0SW5kZXh8LgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdl
dFN1Z2dlc3Rpb24odW5zaWduZWQgbGlzdEluZGV4KSBjb25zdDsKKworICAgIC8vIFJldHVybnMg
dGhlIGxhYmVsIGF0IHxsaXN0SW5kZXh8LgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldExhYmVs
KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CisKKyAgICAvLyBSZXR1cm5zIHRoZSBpY29uIGF0
IHxsaXN0SW5kZXh8LgorICAgIHZpcnR1YWwgV2ViU3RyaW5nIGdldEljb24odW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdDsKKworICAgIC8vIFJlbW92ZXMgdGhlIHN1Z2dlc3Rpb24gYXQgfGxpc3RJ
bmRleHwgZnJvbSB0aGUgbGlzdCBvZiBzdWdnZXN0aW9ucy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlU3VnZ2VzdGlvbkF0SW5kZXgodW5zaWduZWQgbGlzdEluZGV4KTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgc3VnZ2VzdGlvbiBhdCB8bGlzdEluZGV4fCBjYW4gYmUgcmVtb3ZlZC4K
KyAgICBib29sIGNhblJlbW92ZVN1Z2dlc3Rpb25BdEluZGV4KHVuc2lnbmVkIGxpc3RJbmRleCk7
CisKKyAgICAvLyBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQgbWV0aG9kczoKKyAgICB2aXJ0dWFs
IHZvaWQgdmFsdWVDaGFuZ2VkKHVuc2lnbmVkIGxpc3RJbmRleCwgYm9vbCBmaXJlRXZlbnRzID0g
dHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvbkNoYW5nZWQodW5zaWduZWQsIGJvb2wp
OworICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25DbGVhcmVkKCk7CisgICAgdmlydHVhbCBXVEY6
OlN0cmluZyBpdGVtVGV4dCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwg
V1RGOjpTdHJpbmcgaXRlbUxhYmVsKHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3Q7CisgICAgdmly
dHVhbCBXVEY6OlN0cmluZyBpdGVtSWNvbih1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworICAg
IHZpcnR1YWwgV1RGOjpTdHJpbmcgaXRlbVRvb2xUaXAodW5zaWduZWQgbGFzdEluZGV4KSBjb25z
dCB7IHJldHVybiBXVEY6OlN0cmluZygpOyB9CisgICAgdmlydHVhbCBXVEY6OlN0cmluZyBpdGVt
QWNjZXNzaWJpbGl0eVRleHQodW5zaWduZWQgbGFzdEluZGV4KSBjb25zdCB7IHJldHVybiBXVEY6
OlN0cmluZygpOyB9CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc0VuYWJsZWQodW5zaWduZWQgbGlz
dEluZGV4KSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYkNvcmU6OlBvcHVwTWVudVN0eWxlIGl0ZW1T
dHlsZSh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViQ29yZTo6UG9w
dXBNZW51U3R5bGUgbWVudVN0eWxlKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgY2xpZW50SW5z
ZXRMZWZ0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IGNsaWVudEluc2V0
UmlnaHQoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgY2xpZW50UGFkZGlu
Z0xlZnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjbGllbnRQYWRkaW5nUmlnaHQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIGludCBsaXN0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGdldFN1Z2dlc3Rp
b25zQ291bnQoKTsgfQorICAgIHZpcnR1YWwgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGVkSW5kZXg7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcG9wdXBEaWRIaWRlKCk7
CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlcGFyYXRvcih1bnNpZ25lZCBsaXN0SW5kZXgpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpdGVtSXNMYWJlbCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGl0ZW1Jc1NlbGVjdGVkKHVu
c2lnbmVkIGxpc3RJbmRleCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkUG9wT3ZlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIHZhbHVlU2hvdWxkQ2hhbmdlT25Ib3RUcmFjaygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisgICAgdmlydHVhbCB2b2lkIHNldFRleHRGcm9tSXRlbSh1bnNpZ25lZCBsaXN0SW5kZXgpOwor
ICAgIHZpcnR1YWwgV2ViQ29yZTo6Rm9udFNlbGVjdG9yKiBmb250U2VsZWN0b3IoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIFdlYkNvcmU6Okhvc3RXaW5kb3cqIGhvc3RXaW5kb3coKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2Nyb2xsYmFyPiBjcmVhdGVTY3JvbGxiYXIo
CisgICAgICAgIFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhKiBjbGllbnQsCisgICAgICAgIFdlYkNv
cmU6OlNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAorICAgICAgICBXZWJDb3JlOjpT
Y3JvbGxiYXJDb250cm9sU2l6ZSBzaXplKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZShXZWJDb3Jl
OjpIVE1MSW5wdXRFbGVtZW50KiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9y
PFdlYlN0cmluZz4mIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8
V2ViU3RyaW5nPiYgbGFiZWxzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8
V2ViU3RyaW5nPiYgaWNvbnMsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3Rvcjxp
bnQ+JiB1bmlxdWVJRHMsCisgICAgICAgICAgICAgICAgICAgIGludCBzZXBhcmF0b3JJbmRleCk7
CisKKyAgICB2b2lkIHNldFN1Z2dlc3Rpb25zKGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBu
YW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+
JiBsYWJlbHMsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiYgaWNvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8aW50
PiYgdW5pcXVlSURzLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlcGFyYXRvckluZGV4
KTsKKworcHJpdmF0ZToKKyAgICAvLyBDb252ZXJ0IHRoZSBzcGVjaWZpZWQgaW5kZXggZnJvbSBh
biBpbmRleCBpbnRvIHRoZSB2aXNpYmxlIGxpc3QgKHdoaWNoIG1pZ2h0CisgICAgLy8gaW5jbHVk
ZSBhIHNlcGFyYXRvciBlbnRyeSkgdG8gYW4gaW5kZXggdG8gfG1fbmFtZXN8IGFuZCB8bV9sYWJl
bHN8LgorICAgIC8vIFJldHVybnMgLTEgaWYgdGhlIGdpdmVuIGluZGV4IHBvaW50cyB0byB0aGUg
c2VwYXJhdG9yLgorICAgIGludCBjb252ZXJ0TGlzdEluZGV4VG9JbnRlcm5hbEluZGV4KHVuc2ln
bmVkKSBjb25zdDsKKyAgICBXZWJWaWV3SW1wbCogZ2V0V2ViVmlldygpIGNvbnN0OworICAgIFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQqIGdldFRleHRGaWVsZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGV4dEZpZWxkLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UmVuZGVyU3R5bGUqIHRleHRGaWVsZFN0
eWxlKCkgY29uc3Q7CisKKyAgICBpbnQgZ2V0U2VsZWN0ZWRJbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsZWN0ZWRJbmRleDsgfQorICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgp
IHsgbV9zZWxlY3RlZEluZGV4ID0gaW5kZXg7IH0KKworICAgIGJvb2wgaXRlbUlzV2FybmluZyh1
bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0OworCisgICAgLy8gVGhlIG5hbWVzLCBsYWJlbHMgYW5k
IGljb25zIHRoYXQgbWFrZSB1cCB0aGUgY29udGVudHMgb2YgdGhlIG1lbnUgaXRlbXMuCisgICAg
VmVjdG9yPFdURjo6U3RyaW5nPiBtX25hbWVzOworICAgIFZlY3RvcjxXVEY6OlN0cmluZz4gbV9s
YWJlbHM7CisgICAgVmVjdG9yPFdURjo6U3RyaW5nPiBtX2ljb25zOworICAgIFZlY3RvcjxpbnQ+
IG1fdW5pcXVlSURzOworCisgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBzZXBhcmF0b3IuICAtMSBp
ZiB0aGVyZSBpcyBubyBzZXBhcmF0b3IuCisgICAgaW50IG1fc2VwYXJhdG9ySW5kZXg7CisKKyAg
ICAvLyBUaGUgaW5kZXggb2YgdGhlIHNlbGVjdGVkIGl0ZW0uICAtMSBpZiB0aGVyZSBpcyBubyBz
ZWxlY3RlZCBpdGVtLgorICAgIGludCBtX3NlbGVjdGVkSW5kZXg7CisKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6SFRNTElucHV0RWxlbWVudD4gbV90ZXh0RmllbGQ7CisgICAgT3duUHRyPFdlYkNvcmU6
OlBvcHVwTWVudVN0eWxlPiBtX3JlZ3VsYXJTdHlsZTsKKyAgICBPd25QdHI8V2ViQ29yZTo6UG9w
dXBNZW51U3R5bGU+IG1fd2FybmluZ1N0eWxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvRWRpdG9y
Q2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9FZGl0b3JDbGllbnRJ
bXBsLmNwcAppbmRleCAxMDJmZWYwLi5jYThkNGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9FZGl0b3JDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9FZGl0b3JDbGllbnRJbXBsLmNwcApAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1
ZGUgIlNwZWxsQ2hlY2tlci5oIgogCiAjaW5jbHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgot
I2luY2x1ZGUgIldlYkF1dG9GaWxsQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViQXV0b2ZpbGxDbGll
bnQuaCIKICNpbmNsdWRlICJXZWJFZGl0aW5nQWN0aW9uLmgiCiAjaW5jbHVkZSAiV2ViRWxlbWVu
dC5oIgogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCkBAIC02NjQsMTUgKzY2NCwxNSBAQCB2
b2lkIEVkaXRvckNsaWVudEltcGw6OmhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihLZXlib2FyZEV2
ZW50KiBrZXlFdmVudCkKIHZvaWQgRWRpdG9yQ2xpZW50SW1wbDo6dGV4dEZpZWxkRGlkQmVnaW5F
ZGl0aW5nKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRF
bGVtZW50ID0gdG9IVE1MSW5wdXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmIChtX3dlYlZpZXct
PmF1dG9GaWxsQ2xpZW50KCkgJiYgaW5wdXRFbGVtZW50KQotICAgICAgICBtX3dlYlZpZXctPmF1
dG9GaWxsQ2xpZW50KCktPnRleHRGaWVsZERpZEJlZ2luRWRpdGluZyhXZWJJbnB1dEVsZW1lbnQo
aW5wdXRFbGVtZW50KSk7CisgICAgaWYgKG1fd2ViVmlldy0+YXV0b2ZpbGxDbGllbnQoKSAmJiBp
bnB1dEVsZW1lbnQpCisgICAgICAgIG1fd2ViVmlldy0+YXV0b2ZpbGxDbGllbnQoKS0+dGV4dEZp
ZWxkRGlkQmVnaW5FZGl0aW5nKFdlYklucHV0RWxlbWVudChpbnB1dEVsZW1lbnQpKTsKIH0KIAog
dm9pZCBFZGl0b3JDbGllbnRJbXBsOjp0ZXh0RmllbGREaWRFbmRFZGl0aW5nKEVsZW1lbnQqIGVs
ZW1lbnQpCiB7CiAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gdG9IVE1MSW5w
dXRFbGVtZW50KGVsZW1lbnQpOwotICAgIGlmIChtX3dlYlZpZXctPmF1dG9GaWxsQ2xpZW50KCkg
JiYgaW5wdXRFbGVtZW50KQotICAgICAgICBtX3dlYlZpZXctPmF1dG9GaWxsQ2xpZW50KCktPnRl
eHRGaWVsZERpZEVuZEVkaXRpbmcoV2ViSW5wdXRFbGVtZW50KGlucHV0RWxlbWVudCkpOworICAg
IGlmIChtX3dlYlZpZXctPmF1dG9maWxsQ2xpZW50KCkgJiYgaW5wdXRFbGVtZW50KQorICAgICAg
ICBtX3dlYlZpZXctPmF1dG9maWxsQ2xpZW50KCktPnRleHRGaWVsZERpZEVuZEVkaXRpbmcoV2Vi
SW5wdXRFbGVtZW50KGlucHV0RWxlbWVudCkpOwogCiAgICAgLy8gTm90aWZpY2F0aW9uIHRoYXQg
Zm9jdXMgd2FzIGxvc3QuICBCZSBjYXJlZnVsIHdpdGggdGhpcywgaXQncyBhbHNvIHNlbnQKICAg
ICAvLyB3aGVuIHRoZSBwYWdlIGlzIGJlaW5nIGNsb3NlZC4KQEAgLTY4Miw3ICs2ODIsNyBAQCB2
b2lkIEVkaXRvckNsaWVudEltcGw6OnRleHRGaWVsZERpZEVuZEVkaXRpbmcoRWxlbWVudCogZWxl
bWVudCkKICAgICBtX2F1dG9maWxsVGltZXIuc3RvcCgpOwogCiAgICAgLy8gSGlkZSBhbnkgc2hv
d2luZyBwb3B1cC4KLSAgICBtX3dlYlZpZXctPmhpZGVBdXRvRmlsbFBvcHVwKCk7CisgICAgbV93
ZWJWaWV3LT5oaWRlQXV0b2ZpbGxQb3B1cCgpOwogCiAgICAgaWYgKCFtX3dlYlZpZXctPmNsaWVu
dCgpKQogICAgICAgICByZXR1cm47IC8vIFRoZSBwYWdlIGlzIGdldHRpbmcgY2xvc2VkLCBkb24n
dCBmaWxsIHRoZSBwYXNzd29yZC4KQEAgLTcwNiw4ICs3MDYsOCBAQCB2b2lkIEVkaXRvckNsaWVu
dEltcGw6OnRleHREaWRDaGFuZ2VJblRleHRGaWVsZChFbGVtZW50KiBlbGVtZW50KQogewogICAg
IEFTU0VSVChlbGVtZW50LT5oYXNMb2NhbE5hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpOwogICAg
IEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVs
ZW1lbnQqPihlbGVtZW50KTsKLSAgICBpZiAobV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpKQot
ICAgICAgICBtX3dlYlZpZXctPmF1dG9GaWxsQ2xpZW50KCktPnRleHRGaWVsZERpZENoYW5nZShX
ZWJJbnB1dEVsZW1lbnQoaW5wdXRFbGVtZW50KSk7CisgICAgaWYgKG1fd2ViVmlldy0+YXV0b2Zp
bGxDbGllbnQoKSkKKyAgICAgICAgbV93ZWJWaWV3LT5hdXRvZmlsbENsaWVudCgpLT50ZXh0Rmll
bGREaWRDaGFuZ2UoV2ViSW5wdXRFbGVtZW50KGlucHV0RWxlbWVudCkpOwogCiAgICAgLy8gTm90
ZSB0aGF0IHdlIG9ubHkgc2hvdyB0aGUgYXV0b2ZpbGwgcG9wdXAgaW4gdGhpcyBjYXNlIGlmIHRo
ZSBjYXJldCBpcyBhdAogICAgIC8vIHRoZSBlbmQuICBUaGlzIG1hdGNoZXMgRmlyZUZveCBhbmQg
U2FmYXJpIGJ1dCBub3QgSUUuCkBAIC03NzgsNyArNzc4LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRJ
bXBsOjpkb0F1dG9maWxsKFRpbWVyPEVkaXRvckNsaWVudEltcGw+KiB0aW1lcikKICAgICAgICAg
ICAgICAgICAgICAgICAgJiYgaW5wdXRFbGVtZW50LT5zZWxlY3Rpb25FbmQoKSA9PSBzdGF0aWNf
Y2FzdDxpbnQ+KHZhbHVlLmxlbmd0aCgpKTsKIAogICAgIGlmICgoIWFyZ3MtPmF1dG9maWxsT25F
bXB0eVZhbHVlICYmIHZhbHVlLmlzRW1wdHkoKSkgfHwgIWlzQ2FyZXRBdEVuZCkgewotICAgICAg
ICBtX3dlYlZpZXctPmhpZGVBdXRvRmlsbFBvcHVwKCk7CisgICAgICAgIG1fd2ViVmlldy0+aGlk
ZUF1dG9maWxsUG9wdXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtODEwLDggKzgx
MCw4IEBAIGJvb2wgRWRpdG9yQ2xpZW50SW1wbDo6ZG9UZXh0RmllbGRDb21tYW5kRnJvbUV2ZW50
KEVsZW1lbnQqIGVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBLZXlib2FyZEV2ZW50KiBldmVudCkKIHsKICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSB0b0hUTUxJbnB1dEVsZW1lbnQoZWxlbWVudCk7Ci0gICAgaWYg
KG1fd2ViVmlldy0+YXV0b0ZpbGxDbGllbnQoKSAmJiBpbnB1dEVsZW1lbnQpIHsKLSAgICAgICAg
bV93ZWJWaWV3LT5hdXRvRmlsbENsaWVudCgpLT50ZXh0RmllbGREaWRSZWNlaXZlS2V5RG93bihX
ZWJJbnB1dEVsZW1lbnQoaW5wdXRFbGVtZW50KSwKKyAgICBpZiAobV93ZWJWaWV3LT5hdXRvZmls
bENsaWVudCgpICYmIGlucHV0RWxlbWVudCkgeworICAgICAgICBtX3dlYlZpZXctPmF1dG9maWxs
Q2xpZW50KCktPnRleHRGaWVsZERpZFJlY2VpdmVLZXlEb3duKFdlYklucHV0RWxlbWVudChpbnB1
dEVsZW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktleWJvYXJkRXZlbnRCdWlsZGVyKCpldmVudCkpOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW5wdXRFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklucHV0RWxlbWVudC5jcHAK
aW5kZXggMTM0MTZiZS4uNWU3YTFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSW5wdXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJbnB1dEVsZW1lbnQuY3BwCkBAIC0xMjAsOSArMTIwLDkgQEAgYm9vbCBXZWJJbnB1dEVs
ZW1lbnQ6OmlzQXV0b2ZpbGxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0VW53cmFwPEhUTUxJ
bnB1dEVsZW1lbnQ+KCktPmlzQXV0b2ZpbGxlZCgpOwogfQogCi12b2lkIFdlYklucHV0RWxlbWVu
dDo6c2V0QXV0b2ZpbGxlZChib29sIGF1dG9GaWxsZWQpCit2b2lkIFdlYklucHV0RWxlbWVudDo6
c2V0QXV0b2ZpbGxlZChib29sIGF1dG9maWxsZWQpCiB7Ci0gICAgdW53cmFwPEhUTUxJbnB1dEVs
ZW1lbnQ+KCktPnNldEF1dG9maWxsZWQoYXV0b0ZpbGxlZCk7CisgICAgdW53cmFwPEhUTUxJbnB1
dEVsZW1lbnQ+KCktPnNldEF1dG9maWxsZWQoYXV0b2ZpbGxlZCk7CiB9CiAKIHZvaWQgV2ViSW5w
dXRFbGVtZW50OjpzZXRTZWxlY3Rpb25SYW5nZShpbnQgc3RhcnQsIGludCBlbmQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKaW5kZXggNzc0ODBjNy4uYTVhYzgw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgi
CiAKLSNpbmNsdWRlICJBdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oIgorI2luY2x1ZGUgIkF1dG9m
aWxsUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkJhY2tGb3J3YXJkTGlzdENocm9taXVtLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rv
ci5oIgpAQCAtOTksNyArOTksNyBAQAogI2luY2x1ZGUgIlVzZXJHZXN0dXJlSW5kaWNhdG9yLmgi
CiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5o
IgotI2luY2x1ZGUgIldlYkF1dG9GaWxsQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViQXV0b2ZpbGxD
bGllbnQuaCIKICNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50SW1wbC5oIgogI2luY2x1ZGUgIldl
YkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIKQEAgLTIw
NSw3ICsyMDUsNyBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKERyYWdPcGVyYXRpb25N
b3ZlKTsKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oRHJhZ09wZXJhdGlvbkRlbGV0ZSk7
CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKERyYWdPcGVyYXRpb25FdmVyeSk7CiAKLXN0
YXRpYyBjb25zdCBQb3B1cENvbnRhaW5lclNldHRpbmdzIGF1dG9GaWxsUG9wdXBTZXR0aW5ncyA9
IHsKK3N0YXRpYyBjb25zdCBQb3B1cENvbnRhaW5lclNldHRpbmdzIGF1dG9maWxsUG9wdXBTZXR0
aW5ncyA9IHsKICAgICBmYWxzZSwgLy8gc2V0VGV4dE9uSW5kZXhDaGFuZ2UKICAgICBmYWxzZSwg
Ly8gYWNjZXB0T25BYmFuZG9uCiAgICAgdHJ1ZSwgLy8gbG9vcFNlbGVjdGlvbk5hdmlnYXRpb24K
QEAgLTI3NSw5ICsyNzUsOSBAQCB2b2lkIFdlYlZpZXdJbXBsOjppbml0aWFsaXplTWFpbkZyYW1l
KFdlYkZyYW1lQ2xpZW50KiBmcmFtZUNsaWVudCkKICAgICBTZWN1cml0eU9yaWdpbjo6c2V0TG9j
YWxMb2FkUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpBbGxvd0xvY2FsTG9hZHNGb3JMb2NhbE9ubHkp
OwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzZXRBdXRvRmlsbENsaWVudChXZWJBdXRvRmlsbENs
aWVudCogYXV0b0ZpbGxDbGllbnQpCit2b2lkIFdlYlZpZXdJbXBsOjpzZXRBdXRvZmlsbENsaWVu
dChXZWJBdXRvZmlsbENsaWVudCogYXV0b2ZpbGxDbGllbnQpCiB7Ci0gICAgbV9hdXRvRmlsbENs
aWVudCA9IGF1dG9GaWxsQ2xpZW50OworICAgIG1fYXV0b2ZpbGxDbGllbnQgPSBhdXRvZmlsbENs
aWVudDsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6c2V0RGV2VG9vbHNBZ2VudENsaWVudChXZWJE
ZXZUb29sc0FnZW50Q2xpZW50KiBkZXZUb29sc0NsaWVudCkgCkBAIC0zMDAsNyArMzAwLDcgQEAg
dm9pZCBXZWJWaWV3SW1wbDo6c2V0U3BlbGxDaGVja0NsaWVudChXZWJTcGVsbENoZWNrQ2xpZW50
KiBzcGVsbENoZWNrQ2xpZW50KQogCiBXZWJWaWV3SW1wbDo6V2ViVmlld0ltcGwoV2ViVmlld0Ns
aWVudCogY2xpZW50KQogICAgIDogbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9hdXRvRmlsbENs
aWVudCgwKQorICAgICwgbV9hdXRvZmlsbENsaWVudCgwKQogICAgICwgbV9wZXJtaXNzaW9uQ2xp
ZW50KDApCiAgICAgLCBtX3NwZWxsQ2hlY2tDbGllbnQoMCkKICAgICAsIG1fY2hyb21lQ2xpZW50
SW1wbCh0aGlzKQpAQCAtMzIzLDggKzMyMyw4IEBAIFdlYlZpZXdJbXBsOjpXZWJWaWV3SW1wbChX
ZWJWaWV3Q2xpZW50KiBjbGllbnQpCiAgICAgLCBtX2ltZUFjY2VwdEV2ZW50cyh0cnVlKQogICAg
ICwgbV9vcGVyYXRpb25zQWxsb3dlZChXZWJEcmFnT3BlcmF0aW9uTm9uZSkKICAgICAsIG1fZHJh
Z09wZXJhdGlvbihXZWJEcmFnT3BlcmF0aW9uTm9uZSkKLSAgICAsIG1fYXV0b0ZpbGxQb3B1cFNo
b3dpbmcoZmFsc2UpCi0gICAgLCBtX2F1dG9GaWxsUG9wdXAoMCkKKyAgICAsIG1fYXV0b2ZpbGxQ
b3B1cFNob3dpbmcoZmFsc2UpCisgICAgLCBtX2F1dG9maWxsUG9wdXAoMCkKICAgICAsIG1faXNU
cmFuc3BhcmVudChmYWxzZSkKICAgICAsIG1fdGFic1RvTGlua3MoZmFsc2UpCiAgICAgLCBtX2Ry
YWdTY3JvbGxUaW1lcihhZG9wdFB0cihuZXcgRHJhZ1Njcm9sbFRpbWVyKSkKQEAgLTQ2MCw3ICs0
NjAsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjptb3VzZURvd24oY29uc3QgV2ViTW91c2VFdmVudCYg
ZXZlbnQpCiAgICAgICAgICAgICBtX21vdXNlQ2FwdHVyZU5vZGUgPSBoaXROb2RlOwogCiAgICAg
ICAgIC8vIElmIGEgdGV4dCBmaWVsZCB0aGF0IGhhcyBmb2N1cyBpcyBjbGlja2VkIGFnYWluLCB3
ZSBzaG91bGQgZGlzcGxheSB0aGUKLSAgICAgICAgLy8gQXV0b0ZpbGwgcG9wdXAuCisgICAgICAg
IC8vIEF1dG9maWxsIHBvcHVwLgogICAgICAgICBSZWZQdHI8Tm9kZT4gZm9jdXNlZE5vZGUgPSBm
b2N1c2VkV2ViQ29yZU5vZGUoKTsKICAgICAgICAgaWYgKGZvY3VzZWROb2RlLmdldCgpICYmIHRv
SFRNTElucHV0RWxlbWVudChmb2N1c2VkTm9kZS5nZXQoKSkpIHsKICAgICAgICAgICAgIGlmICho
aXROb2RlID09IGZvY3VzZWROb2RlKSB7CkBAIC00NzgsNyArNDc4LDcgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6bW91c2VEb3duKGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2ZW50KQogICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnRCdWlsZGVyKG1haW5GcmFtZUltcGwoKS0+ZnJhbWVWaWV3KCksIGV2ZW50
KSk7CiAKICAgICBpZiAoY2xpY2tlZE5vZGUuZ2V0KCkgJiYgY2xpY2tlZE5vZGUgPT0gZm9jdXNl
ZFdlYkNvcmVOb2RlKCkpIHsKLSAgICAgICAgLy8gRm9jdXMgaGFzIG5vdCBjaGFuZ2VkLCBzaG93
IHRoZSBBdXRvRmlsbCBwb3B1cC4KKyAgICAgICAgLy8gRm9jdXMgaGFzIG5vdCBjaGFuZ2VkLCBz
aG93IHRoZSBBdXRvZmlsbCBwb3B1cC4KICAgICAgICAgc3RhdGljX2Nhc3Q8RWRpdG9yQ2xpZW50
SW1wbCo+KG1fcGFnZS0+ZWRpdG9yQ2xpZW50KCkpLT4KICAgICAgICAgICAgIHNob3dGb3JtQXV0
b2ZpbGxGb3JOb2RlKGNsaWNrZWROb2RlLmdldCgpKTsKICAgICB9CkBAIC02NTUsNyArNjU1LDcg
QEAgYm9vbCBXZWJWaWV3SW1wbDo6a2V5RXZlbnQoY29uc3QgV2ViS2V5Ym9hcmRFdmVudCYgZXZl
bnQpCiAKIGJvb2wgV2ViVmlld0ltcGw6OmF1dG9jb21wbGV0ZUhhbmRsZUtleUV2ZW50KGNvbnN0
IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogewotICAgIGlmICghbV9hdXRvRmlsbFBvcHVwU2hv
d2luZworICAgIGlmICghbV9hdXRvZmlsbFBvcHVwU2hvd2luZwogICAgICAgICAvLyBIb21lIGFu
ZCBFbmQgc2hvdWxkIGJlIGxlZnQgdG8gdGhlIHRleHQgZmllbGQgdG8gcHJvY2Vzcy4KICAgICAg
ICAgfHwgZXZlbnQud2luZG93c0tleUNvZGUgPT0gVktFWV9IT01FCiAgICAgICAgIHx8IGV2ZW50
LndpbmRvd3NLZXlDb2RlID09IFZLRVlfRU5EKQpAQCAtNjYzLDcgKzY2Myw3IEBAIGJvb2wgV2Vi
Vmlld0ltcGw6OmF1dG9jb21wbGV0ZUhhbmRsZUtleUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZl
bnQmIGV2ZW50KQogCiAgICAgLy8gUHJlc3NpbmcgZGVsZXRlIHRyaWdnZXJzIHRoZSByZW1vdmFs
IG9mIHRoZSBzZWxlY3RlZCBzdWdnZXN0aW9uIGZyb20gdGhlIERCLgogICAgIGlmIChldmVudC53
aW5kb3dzS2V5Q29kZSA9PSBWS0VZX0RFTEVURQotICAgICAgICAmJiBtX2F1dG9GaWxsUG9wdXAt
PnNlbGVjdGVkSW5kZXgoKSAhPSAtMSkgeworICAgICAgICAmJiBtX2F1dG9maWxsUG9wdXAtPnNl
bGVjdGVkSW5kZXgoKSAhPSAtMSkgewogICAgICAgICBOb2RlKiBub2RlID0gZm9jdXNlZFdlYkNv
cmVOb2RlKCk7CiAgICAgICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAhPSBOb2Rl
OjpFTEVNRU5UX05PREUpKSB7CiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTY3NSwyNSArNjc1LDI1IEBAIGJvb2wgV2ViVmlld0ltcGw6OmF1dG9jb21wbGV0ZUhhbmRsZUtl
eUV2ZW50KGNvbnN0IFdlYktleWJvYXJkRXZlbnQmIGV2ZW50KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBtX2F1dG9G
aWxsUG9wdXAtPnNlbGVjdGVkSW5kZXgoKTsKKyAgICAgICAgaW50IHNlbGVjdGVkSW5kZXggPSBt
X2F1dG9maWxsUG9wdXAtPnNlbGVjdGVkSW5kZXgoKTsKIAotICAgICAgICBpZiAoIW1fYXV0b0Zp
bGxQb3B1cENsaWVudC0+Y2FuUmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2VsZWN0ZWRJbmRleCkp
CisgICAgICAgIGlmICghbV9hdXRvZmlsbFBvcHVwQ2xpZW50LT5jYW5SZW1vdmVTdWdnZXN0aW9u
QXRJbmRleChzZWxlY3RlZEluZGV4KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICBXZWJTdHJpbmcgbmFtZSA9IFdlYklucHV0RWxlbWVudChzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4oZWxlbWVudCkpLm5hbWVGb3JBdXRvZmlsbCgpOwotICAgICAgICBXZWJTdHJp
bmcgdmFsdWUgPSBtX2F1dG9GaWxsUG9wdXBDbGllbnQtPml0ZW1UZXh0KHNlbGVjdGVkSW5kZXgp
OwotICAgICAgICBtX2F1dG9GaWxsQ2xpZW50LT5yZW1vdmVBdXRvY29tcGxldGVTdWdnZXN0aW9u
KG5hbWUsIHZhbHVlKTsKKyAgICAgICAgV2ViU3RyaW5nIHZhbHVlID0gbV9hdXRvZmlsbFBvcHVw
Q2xpZW50LT5pdGVtVGV4dChzZWxlY3RlZEluZGV4KTsKKyAgICAgICAgbV9hdXRvZmlsbENsaWVu
dC0+cmVtb3ZlQXV0b2NvbXBsZXRlU3VnZ2VzdGlvbihuYW1lLCB2YWx1ZSk7CiAgICAgICAgIC8v
IFVwZGF0ZSB0aGUgZW50cmllcyBpbiB0aGUgY3VycmVudGx5IHNob3dpbmcgcG9wdXAgdG8gcmVm
bGVjdCB0aGUKICAgICAgICAgLy8gZGVsZXRpb24uCi0gICAgICAgIG1fYXV0b0ZpbGxQb3B1cENs
aWVudC0+cmVtb3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2VsZWN0ZWRJbmRleCk7Ci0gICAgICAgIHJl
ZnJlc2hBdXRvRmlsbFBvcHVwKCk7CisgICAgICAgIG1fYXV0b2ZpbGxQb3B1cENsaWVudC0+cmVt
b3ZlU3VnZ2VzdGlvbkF0SW5kZXgoc2VsZWN0ZWRJbmRleCk7CisgICAgICAgIHJlZnJlc2hBdXRv
ZmlsbFBvcHVwKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIW1f
YXV0b0ZpbGxQb3B1cC0+aXNJbnRlcmVzdGVkSW5FdmVudEZvcktleShldmVudC53aW5kb3dzS2V5
Q29kZSkpCisgICAgaWYgKCFtX2F1dG9maWxsUG9wdXAtPmlzSW50ZXJlc3RlZEluRXZlbnRGb3JL
ZXkoZXZlbnQud2luZG93c0tleUNvZGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAobV9hdXRvRmlsbFBvcHVwLT5oYW5kbGVLZXlFdmVudChQbGF0Zm9ybUtleWJvYXJkRXZlbnRC
dWlsZGVyKGV2ZW50KSkpIHsKKyAgICBpZiAobV9hdXRvZmlsbFBvcHVwLT5oYW5kbGVLZXlFdmVu
dChQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKGV2ZW50KSkpIHsKICAgICAgICAgLy8gV2Ug
bmVlZCB0byBpZ25vcmUgdGhlIG5leHQgQ2hhciBldmVudCBhZnRlciB0aGlzIG90aGVyd2lzZSBw
cmVzc2luZwogICAgICAgICAvLyBlbnRlciB3aGVuIHNlbGVjdGluZyBhbiBpdGVtIGluIHRoZSBt
ZW51IHdpbGwgZ28gdG8gdGhlIHBhZ2UuCiAgICAgICAgIGlmIChXZWJJbnB1dEV2ZW50OjpSYXdL
ZXlEb3duID09IGV2ZW50LnR5cGUpCkBAIC05MjYsMTEgKzkyNiwxMSBAQCB2b2lkICBXZWJWaWV3
SW1wbDo6cG9wdXBDbG9zZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHBvcHVwQ29udGFpbmVy
KQogICAgIH0KIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6aGlkZUF1dG9GaWxsUG9wdXAoKQordm9p
ZCBXZWJWaWV3SW1wbDo6aGlkZUF1dG9maWxsUG9wdXAoKQogewotICAgIGlmIChtX2F1dG9GaWxs
UG9wdXBTaG93aW5nKSB7Ci0gICAgICAgIG1fYXV0b0ZpbGxQb3B1cC0+aGlkZVBvcHVwKCk7Ci0g
ICAgICAgIG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcgPSBmYWxzZTsKKyAgICBpZiAobV9hdXRvZmls
bFBvcHVwU2hvd2luZykgeworICAgICAgICBtX2F1dG9maWxsUG9wdXAtPmhpZGVQb3B1cCgpOwor
ICAgICAgICBtX2F1dG9maWxsUG9wdXBTaG93aW5nID0gZmFsc2U7CiAgICAgfQogfQogCkBAIC0x
MzM4LDcgKzEzMzgsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRGb2N1cyhib29sIGVuYWJsZSkK
ICAgICAgICAgfQogICAgICAgICBtX2ltZUFjY2VwdEV2ZW50cyA9IHRydWU7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgaGlkZUF1dG9GaWxsUG9wdXAoKTsKKyAgICAgICAgaGlkZUF1dG9maWxsUG9w
dXAoKTsKICAgICAgICAgaGlkZVNlbGVjdFBvcHVwKCk7CiAKICAgICAgICAgLy8gQ2xlYXIgZm9j
dXMgb24gdGhlIGN1cnJlbnRseSBmb2N1c2VkIGZyYW1lIGlmIGFueS4KQEAgLTIwNzUsNyArMjA3
NSw3IEBAIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgV2ViVmlld0ltcGw6OmFjY2Vzc2liaWxpdHlP
YmplY3QoKQogICAgICAgICBkb2N1bWVudC0+YXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShk
b2N1bWVudC0+cmVuZGVyZXIoKSkpOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjphcHBseUF1dG9G
aWxsU3VnZ2VzdGlvbnMoCit2b2lkIFdlYlZpZXdJbXBsOjphcHBseUF1dG9maWxsU3VnZ2VzdGlv
bnMoCiAgICAgY29uc3QgV2ViTm9kZSYgbm9kZSwKICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiYgbmFtZXMsCiAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKQEAg
LTIwODgsNDggKzIwODgsNDggQEAgdm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlBdXRvRmlsbFN1Z2dl
c3Rpb25zKAogICAgIEFTU0VSVChzZXBhcmF0b3JJbmRleCA8IHN0YXRpY19jYXN0PGludD4obmFt
ZXMuc2l6ZSgpKSk7CiAKICAgICBpZiAobmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGhpZGVB
dXRvRmlsbFBvcHVwKCk7CisgICAgICAgIGhpZGVBdXRvZmlsbFBvcHVwKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBSZWZQdHI8Tm9kZT4gZm9jdXNlZE5vZGUgPSBmb2N1c2VkV2Vi
Q29yZU5vZGUoKTsKLSAgICAvLyBJZiB0aGUgbm9kZSBmb3Igd2hpY2ggd2UgcXVlcmllZCB0aGUg
QXV0b0ZpbGwgc3VnZ2VzdGlvbnMgaXMgbm90IHRoZQorICAgIC8vIElmIHRoZSBub2RlIGZvciB3
aGljaCB3ZSBxdWVyaWVkIHRoZSBBdXRvZmlsbCBzdWdnZXN0aW9ucyBpcyBub3QgdGhlCiAgICAg
Ly8gZm9jdXNlZCBub2RlLCB0aGVuIHdlIGhhdmUgbm90aGluZyB0byBkby4gIEZJWE1FOiBhbHNv
IGNoZWNrIHRoZQogICAgIC8vIGNhcmV0IGlzIGF0IHRoZSBlbmQgYW5kIHRoYXQgdGhlIHRleHQg
aGFzIG5vdCBjaGFuZ2VkLgogICAgIGlmICghZm9jdXNlZE5vZGUgfHwgZm9jdXNlZE5vZGUgIT0g
UGFzc1JlZlB0cjxOb2RlPihub2RlKSkgewotICAgICAgICBoaWRlQXV0b0ZpbGxQb3B1cCgpOwor
ICAgICAgICBoaWRlQXV0b2ZpbGxQb3B1cCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtID0KICAgICAgICAgc3RhdGljX2Nhc3Q8SFRN
TElucHV0RWxlbWVudCo+KGZvY3VzZWROb2RlLmdldCgpKTsKIAotICAgIC8vIFRoZSBmaXJzdCB0
aW1lIHRoZSBBdXRvRmlsbCBwb3B1cCBpcyBzaG93biB3ZSdsbCBjcmVhdGUgdGhlIGNsaWVudCBh
bmQKKyAgICAvLyBUaGUgZmlyc3QgdGltZSB0aGUgQXV0b2ZpbGwgcG9wdXAgaXMgc2hvd24gd2Un
bGwgY3JlYXRlIHRoZSBjbGllbnQgYW5kCiAgICAgLy8gdGhlIHBvcHVwLgotICAgIGlmICghbV9h
dXRvRmlsbFBvcHVwQ2xpZW50KQotICAgICAgICBtX2F1dG9GaWxsUG9wdXBDbGllbnQgPSBhZG9w
dFB0cihuZXcgQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQpOworICAgIGlmICghbV9hdXRvZmlsbFBv
cHVwQ2xpZW50KQorICAgICAgICBtX2F1dG9maWxsUG9wdXBDbGllbnQgPSBhZG9wdFB0cihuZXcg
QXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQpOwogCi0gICAgbV9hdXRvRmlsbFBvcHVwQ2xpZW50LT5p
bml0aWFsaXplKAorICAgIG1fYXV0b2ZpbGxQb3B1cENsaWVudC0+aW5pdGlhbGl6ZSgKICAgICAg
ICAgaW5wdXRFbGVtLCBuYW1lcywgbGFiZWxzLCBpY29ucywgdW5pcXVlSURzLCBzZXBhcmF0b3JJ
bmRleCk7CiAKLSAgICBpZiAoIW1fYXV0b0ZpbGxQb3B1cC5nZXQoKSkgewotICAgICAgICBtX2F1
dG9GaWxsUG9wdXAgPSBQb3B1cENvbnRhaW5lcjo6Y3JlYXRlKG1fYXV0b0ZpbGxQb3B1cENsaWVu
dC5nZXQoKSwKKyAgICBpZiAoIW1fYXV0b2ZpbGxQb3B1cC5nZXQoKSkgeworICAgICAgICBtX2F1
dG9maWxsUG9wdXAgPSBQb3B1cENvbnRhaW5lcjo6Y3JlYXRlKG1fYXV0b2ZpbGxQb3B1cENsaWVu
dC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQb3B1cENvbnRhaW5lcjo6U3VnZ2VzdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvRmlsbFBvcHVwU2V0dGluZ3MpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9maWxsUG9wdXBTZXR0
aW5ncyk7CiAgICAgfQogCi0gICAgaWYgKG1fYXV0b0ZpbGxQb3B1cFNob3dpbmcpIHsKLSAgICAg
ICAgcmVmcmVzaEF1dG9GaWxsUG9wdXAoKTsKKyAgICBpZiAobV9hdXRvZmlsbFBvcHVwU2hvd2lu
ZykgeworICAgICAgICByZWZyZXNoQXV0b2ZpbGxQb3B1cCgpOwogICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fYXV0b0ZpbGxQb3B1cC0+c2hvd0luUmVjdChmb2N1c2VkTm9kZS0+Z2V0UmVjdCgpLCBm
b2N1c2VkTm9kZS0+b3duZXJEb2N1bWVudCgpLT52aWV3KCksIDApOwotICAgICAgICBtX2F1dG9G
aWxsUG9wdXBTaG93aW5nID0gdHJ1ZTsKKyAgICAgICAgbV9hdXRvZmlsbFBvcHVwLT5zaG93SW5S
ZWN0KGZvY3VzZWROb2RlLT5nZXRSZWN0KCksIGZvY3VzZWROb2RlLT5vd25lckRvY3VtZW50KCkt
PnZpZXcoKSwgMCk7CisgICAgICAgIG1fYXV0b2ZpbGxQb3B1cFNob3dpbmcgPSB0cnVlOwogICAg
IH0KIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6aGlkZVBvcHVwcygpCiB7CiAgICAgaGlkZVNlbGVj
dFBvcHVwKCk7Ci0gICAgaGlkZUF1dG9GaWxsUG9wdXAoKTsKKyAgICBoaWRlQXV0b2ZpbGxQb3B1
cCgpOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpwZXJmb3JtQ3VzdG9tQ29udGV4dE1lbnVBY3Rp
b24odW5zaWduZWQgYWN0aW9uKQpAQCAtMjM1NSwyMyArMjM1NSwyMyBAQCBOb3RpZmljYXRpb25Q
cmVzZW50ZXJJbXBsKiBXZWJWaWV3SW1wbDo6bm90aWZpY2F0aW9uUHJlc2VudGVySW1wbCgpCiB9
CiAjZW5kaWYKIAotdm9pZCBXZWJWaWV3SW1wbDo6cmVmcmVzaEF1dG9GaWxsUG9wdXAoKQordm9p
ZCBXZWJWaWV3SW1wbDo6cmVmcmVzaEF1dG9maWxsUG9wdXAoKQogewotICAgIEFTU0VSVChtX2F1
dG9GaWxsUG9wdXBTaG93aW5nKTsKKyAgICBBU1NFUlQobV9hdXRvZmlsbFBvcHVwU2hvd2luZyk7
CiAKICAgICAvLyBIaWRlIHRoZSBwb3B1cCBpZiBpdCBoYXMgYmVjb21lIGVtcHR5LgotICAgIGlm
ICghbV9hdXRvRmlsbFBvcHVwQ2xpZW50LT5saXN0U2l6ZSgpKSB7Ci0gICAgICAgIGhpZGVBdXRv
RmlsbFBvcHVwKCk7CisgICAgaWYgKCFtX2F1dG9maWxsUG9wdXBDbGllbnQtPmxpc3RTaXplKCkp
IHsKKyAgICAgICAgaGlkZUF1dG9maWxsUG9wdXAoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIEludFJlY3Qgb2xkQm91bmRzID0gbV9hdXRvRmlsbFBvcHVwLT5mcmFtZVJlY3QoKTsK
LSAgICBtX2F1dG9GaWxsUG9wdXAtPnJlZnJlc2goZm9jdXNlZFdlYkNvcmVOb2RlKCktPmdldFJl
Y3QoKSk7Ci0gICAgSW50UmVjdCBuZXdCb3VuZHMgPSBtX2F1dG9GaWxsUG9wdXAtPmZyYW1lUmVj
dCgpOworICAgIEludFJlY3Qgb2xkQm91bmRzID0gbV9hdXRvZmlsbFBvcHVwLT5mcmFtZVJlY3Qo
KTsKKyAgICBtX2F1dG9maWxsUG9wdXAtPnJlZnJlc2goZm9jdXNlZFdlYkNvcmVOb2RlKCktPmdl
dFJlY3QoKSk7CisgICAgSW50UmVjdCBuZXdCb3VuZHMgPSBtX2F1dG9maWxsUG9wdXAtPmZyYW1l
UmVjdCgpOwogICAgIC8vIExldCdzIHJlc2l6ZSB0aGUgYmFja2luZyB3aW5kb3cgaWYgbmVjZXNz
YXJ5LgogICAgIGlmIChvbGRCb3VuZHMgIT0gbmV3Qm91bmRzKSB7CiAgICAgICAgIFdlYlBvcHVw
TWVudUltcGwqIHBvcHVwTWVudSA9Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJQb3B1cE1l
bnVJbXBsKj4obV9hdXRvRmlsbFBvcHVwLT5jbGllbnQoKSk7CisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxXZWJQb3B1cE1lbnVJbXBsKj4obV9hdXRvZmlsbFBvcHVwLT5jbGllbnQoKSk7CiAgICAg
ICAgIGlmIChwb3B1cE1lbnUpCiAgICAgICAgICAgICBwb3B1cE1lbnUtPmNsaWVudCgpLT5zZXRX
aW5kb3dSZWN0KG1fY2hyb21lQ2xpZW50SW1wbC53aW5kb3dUb1NjcmVlbihuZXdCb3VuZHMpKTsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaAppbmRleCA3ZjAz
NDc2Li4yOWE2NjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgK
QEAgLTcxLDcgKzcxLDcgQEAgY2xhc3MgV2lkZ2V0OwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIEF1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudDsKLWNsYXNzIEF1dG9GaWxsUG9wdXBNZW51
Q2xpZW50OworY2xhc3MgQXV0b2ZpbGxQb3B1cE1lbnVDbGllbnQ7CiBjbGFzcyBDb250ZXh0TWVu
dUNsaWVudEltcGw7CiBjbGFzcyBEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5OwogY2xhc3Mg
RHJhZ1Njcm9sbFRpbWVyOwpAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIFdl
YlZpZXcgbWV0aG9kczoKICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZU1haW5GcmFtZShXZWJG
cmFtZUNsaWVudCopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvRmlsbENsaWVudChXZWJBdXRv
RmlsbENsaWVudCopOworICAgIHZpcnR1YWwgdm9pZCBzZXRBdXRvZmlsbENsaWVudChXZWJBdXRv
ZmlsbENsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzZXREZXZUb29sc0FnZW50Q2xpZW50KFdl
YkRldlRvb2xzQWdlbnRDbGllbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UGVybWlzc2lvbkNs
aWVudChXZWJQZXJtaXNzaW9uQ2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHNldFNwZWxsQ2hl
Y2tDbGllbnQoV2ViU3BlbGxDaGVja0NsaWVudCopOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcm
IHZhbHVlKTsKICAgICB2aXJ0dWFsIFdlYkRldlRvb2xzQWdlbnQqIGRldlRvb2xzQWdlbnQoKTsK
ICAgICB2aXJ0dWFsIFdlYkFjY2Vzc2liaWxpdHlPYmplY3QgYWNjZXNzaWJpbGl0eU9iamVjdCgp
OwotICAgIHZpcnR1YWwgdm9pZCBhcHBseUF1dG9GaWxsU3VnZ2VzdGlvbnMoCisgICAgdmlydHVh
bCB2b2lkIGFwcGx5QXV0b2ZpbGxTdWdnZXN0aW9ucygKICAgICAgICAgY29uc3QgV2ViTm9kZSYs
CiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBuYW1lcywKICAgICAgICAgY29u
c3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxhYmVscywKQEAgLTIzNCw5ICsyMzQsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX2NsaWVudDsKICAgICB9CiAKLSAgICBXZWJBdXRvRmlsbENs
aWVudCogYXV0b0ZpbGxDbGllbnQoKQorICAgIFdlYkF1dG9maWxsQ2xpZW50KiBhdXRvZmlsbENs
aWVudCgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9hdXRvRmlsbENsaWVudDsKKyAgICAgICAg
cmV0dXJuIG1fYXV0b2ZpbGxDbGllbnQ7CiAgICAgfQogCiAgICAgV2ViUGVybWlzc2lvbkNsaWVu
dCogcGVybWlzc2lvbkNsaWVudCgpCkBAIC0zMjYsOSArMzI2LDkgQEAgcHVibGljOgogICAgICAg
ICBjb25zdCBXZWJJbWFnZSYgZHJhZ0ltYWdlLAogICAgICAgICBjb25zdCBXZWJQb2ludCYgZHJh
Z0ltYWdlT2Zmc2V0KTsKIAotICAgIHZvaWQgYXV0b0ZpbGxQb3B1cERpZEhpZGUoKQorICAgIHZv
aWQgYXV0b2ZpbGxQb3B1cERpZEhpZGUoKQogICAgIHsKLSAgICAgICAgbV9hdXRvRmlsbFBvcHVw
U2hvd2luZyA9IGZhbHNlOworICAgICAgICBtX2F1dG9maWxsUG9wdXBTaG93aW5nID0gZmFsc2U7
CiAgICAgfQogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCkBAIC0zNDQsNyArMzQ0LDcgQEAg
cHVibGljOgogICAgIHZvaWQgcG9wdXBPcGVuZWQoV2ViQ29yZTo6UG9wdXBDb250YWluZXIqIHBv
cHVwQ29udGFpbmVyKTsKICAgICB2b2lkIHBvcHVwQ2xvc2VkKFdlYkNvcmU6OlBvcHVwQ29udGFp
bmVyKiBwb3B1cENvbnRhaW5lcik7CiAKLSAgICB2b2lkIGhpZGVBdXRvRmlsbFBvcHVwKCk7Cisg
ICAgdm9pZCBoaWRlQXV0b2ZpbGxQb3B1cCgpOwogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5wdXQg
ZXZlbnQgd2UncmUgY3VycmVudGx5IHByb2Nlc3NpbmcuIFRoaXMgaXMgdXNlZCBpbiBzb21lCiAg
ICAgLy8gY2FzZXMgd2hlcmUgdGhlIFdlYkNvcmUgRE9NIGV2ZW50IGRvZXNuJ3QgaGF2ZSB0aGUg
aW5mb3JtYXRpb24gd2UgbmVlZC4KQEAgLTQwMywxMCArNDAzLDEwIEBAIHByaXZhdGU6CiAgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBhdXRvY29tcGxlIGhhcyBjb25zdW1lZCB0aGUgZXZlbnQu
CiAgICAgYm9vbCBhdXRvY29tcGxldGVIYW5kbGVLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2
ZW50Jik7CiAKLSAgICAvLyBSZXBhaW50cyB0aGUgQXV0b0ZpbGwgcG9wdXAuIFNob3VsZCBiZSBj
YWxsZWQgd2hlbiB0aGUgc3VnZ2VzdGlvbnMKLSAgICAvLyBoYXZlIGNoYW5nZWQuIE5vdGUgdGhh
dCB0aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBBdXRvRmlsbAorICAgIC8vIFJl
cGFpbnRzIHRoZSBBdXRvZmlsbCBwb3B1cC4gU2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBzdWdn
ZXN0aW9ucworICAgIC8vIGhhdmUgY2hhbmdlZC4gTm90ZSB0aGF0IHRoaXMgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIHdoZW4gdGhlIEF1dG9maWxsCiAgICAgLy8gcG9wdXAgaXMgc2hvd2luZy4KLSAg
ICB2b2lkIHJlZnJlc2hBdXRvRmlsbFBvcHVwKCk7CisgICAgdm9pZCByZWZyZXNoQXV0b2ZpbGxQ
b3B1cCgpOwogCiAgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB2aWV3IHdhcyBzY3JvbGxlZC4K
ICAgICBib29sIHNjcm9sbFZpZXdXaXRoS2V5Ym9hcmQoaW50IGtleUNvZGUsIGludCBtb2RpZmll
cnMpOwpAQCAtNDM1LDcgKzQzNSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFdlYlZpZXdD
bGllbnQqIG1fY2xpZW50OwotICAgIFdlYkF1dG9GaWxsQ2xpZW50KiBtX2F1dG9GaWxsQ2xpZW50
OworICAgIFdlYkF1dG9maWxsQ2xpZW50KiBtX2F1dG9maWxsQ2xpZW50OwogICAgIFdlYlBlcm1p
c3Npb25DbGllbnQqIG1fcGVybWlzc2lvbkNsaWVudDsKICAgICBXZWJTcGVsbENoZWNrQ2xpZW50
KiBtX3NwZWxsQ2hlY2tDbGllbnQ7CiAKQEAgLTUxMCwxNCArNTEwLDE0IEBAIHByaXZhdGU6CiAg
ICAgLy8gY3VycmVudCBkcm9wIHRhcmdldCBpbiB0aGlzIFdlYlZpZXcgKHRoZSBkcm9wIHRhcmdl
dCBjYW4gYWNjZXB0IHRoZSBkcm9wKS4KICAgICBXZWJEcmFnT3BlcmF0aW9uIG1fZHJhZ09wZXJh
dGlvbjsKIAotICAgIC8vIFdoZXRoZXIgYW4gQXV0b0ZpbGwgcG9wdXAgaXMgY3VycmVudGx5IHNo
b3dpbmcuCi0gICAgYm9vbCBtX2F1dG9GaWxsUG9wdXBTaG93aW5nOworICAgIC8vIFdoZXRoZXIg
YW4gQXV0b2ZpbGwgcG9wdXAgaXMgY3VycmVudGx5IHNob3dpbmcuCisgICAgYm9vbCBtX2F1dG9m
aWxsUG9wdXBTaG93aW5nOwogCi0gICAgLy8gVGhlIEF1dG9GaWxsIHBvcHVwIGNsaWVudC4KLSAg
ICBPd25QdHI8QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQ+IG1fYXV0b0ZpbGxQb3B1cENsaWVudDsK
KyAgICAvLyBUaGUgQXV0b2ZpbGwgcG9wdXAgY2xpZW50LgorICAgIE93blB0cjxBdXRvZmlsbFBv
cHVwTWVudUNsaWVudD4gbV9hdXRvZmlsbFBvcHVwQ2xpZW50OwogCi0gICAgLy8gVGhlIEF1dG9G
aWxsIHBvcHVwLgotICAgIFJlZlB0cjxXZWJDb3JlOjpQb3B1cENvbnRhaW5lcj4gbV9hdXRvRmls
bFBvcHVwOworICAgIC8vIFRoZSBBdXRvZmlsbCBwb3B1cC4KKyAgICBSZWZQdHI8V2ViQ29yZTo6
UG9wdXBDb250YWluZXI+IG1fYXV0b2ZpbGxQb3B1cDsKIAogICAgIC8vIFRoZSBwb3B1cCBhc3Nv
Y2lhdGVkIHdpdGggYSBzZWxlY3QgZWxlbWVudC4KICAgICBSZWZQdHI8V2ViQ29yZTo6UG9wdXBD
b250YWluZXI+IG1fc2VsZWN0UG9wdXA7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>