<?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>127243</bug_id>
          
          <creation_ts>2014-01-18 18:01:38 -0800</creation_ts>
          <short_desc>Switch the TextCheckerClient over to using StringView everywhere</short_desc>
          <delta_ts>2016-05-29 15:54:56 -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>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>969562</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-18 18:01:38 -0800</bug_when>
    <thetext>Switch the TextCheckerClient over to using StringView everywhere</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969563</commentid>
    <comment_count>1</comment_count>
      <attachid>221577</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-18 18:02:41 -0800</bug_when>
    <thetext>Created attachment 221577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969564</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-18 18:04:51 -0800</bug_when>
    <thetext>Attachment 221577 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/WebKit/win/WebCoreSupport/WebEditorClient.h:106:  The parameter name &quot;detail&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/page/EditorClient.h:176:  The parameter name &quot;detail&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969572</commentid>
    <comment_count>3</comment_count>
      <attachid>221580</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-18 21:15:43 -0800</bug_when>
    <thetext>Created attachment 221580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969573</commentid>
    <comment_count>4</comment_count>
      <attachid>221580</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-01-18 21:42:54 -0800</bug_when>
    <thetext>Comment on attachment 221580
Patch

Pretty sure the StringView(const String&amp;) constructor is implicit, no need for all those StringView(...) everywhere</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>969603</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-19 10:50:17 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 221580 [details])
&gt; Pretty sure the StringView(const String&amp;) constructor is implicit, no need for all those StringView(...) everywhere

Yeah.

Side note: I am not sure how I feel about this patch yet.  The places where I replace the UChar*/length pair with StringView seem right, but the ones where I replace a String with a StringView aren&apos;t sitting well.  

Anders, do you have any thoughts on this?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221577</attachid>
            <date>2014-01-18 18:02:41 -0800</date>
            <delta_ts>2014-01-18 21:15:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127243-20140118180240.patch</filename>
            <type>text/plain</type>
            <size>79257</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjIyODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTAxLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgU3dpdGNoIHRoZSBUZXh0Q2hlY2tlckNsaWVudCBvdmVyIHRv
IHVzaW5nIFN0cmluZ1ZpZXcgZXZlcnl3aGVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MjQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuaDoKKyAgICAgICAg
KFdURjo6QXRvbWljU3RyaW5nOjpkZXByZWNhdGVkQ2hhcmFjdGVycyk6CisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nVmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b05TU3RyaW5n
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5nKToK
KwogMjAxNC0wMS0xOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciB0aGUgdmlld3NvdXJjZSBhdHRyaWJ1dGUKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMTYyMjg0KQorKysgU291cmNl
L1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
LmlzOEJpdCgpOyB9CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpOyB9IC8vIEZJWE1FOiBEZWxldGUgdGhp
cy4KKyAgICBjb25zdCBVQ2hhciogZGVwcmVjYXRlZENoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpOyB9IC8vIEZJWE1FOiBEZWxldGUgdGhp
cy4KICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5jaGFyYWN0ZXJzOCgpOyB9CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpOyB9CiAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nVmlldy5oCShyZXZpc2lvbiAxNjIyODQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywyNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKCkpOwogICAgIH0KIAorI2lmZGVmIF9fT0JKQ19fCisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiB0b05TU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6Y29uc3RfY2FzdDxMQ2hhcio+KGNoYXJhY3RlcnM4KCkpIGxlbmd0aDpsZW5ndGgoKSBl
bmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXSk7CisKKyAgICAgICAgcmV0dXJuIGFk
b3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOmNvbnN0X2Nhc3Q8dW5p
Y2hhcio+KGNoYXJhY3RlcnMxNigpKSBsZW5ndGg6bGVuZ3RoKCldKTsKKyAgICB9CisKKyAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IHRvTlNTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzTm9Db3B5OmNvbnN0X2Nhc3Q8TENoYXIqPihjaGFy
YWN0ZXJzOCgpKSBsZW5ndGg6bGVuZ3RoKCkgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNv
ZGluZyBmcmVlV2hlbkRvbmU6Tk9dKTsKKworICAgICAgICByZXR1cm4gYWRvcHROUyhbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFyKj4o
Y2hhcmFjdGVyczE2KCkpIGxlbmd0aDpsZW5ndGgoKSBmcmVlV2hlbkRvbmU6Tk9dKTsKKyAgICB9
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNjIyODQpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw0MSBAQAorMjAxNC0wMS0xOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgor
CisgICAgICAgIFN3aXRjaCB0aGUgVGV4dENoZWNrZXJDbGllbnQgb3ZlciB0byB1c2luZyBTdHJp
bmdWaWV3IGV2ZXJ5d2hlcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzI0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbToKKyAgICAgICAgKEFYQXR0cmlidXRl
U3RyaW5nU2V0U3BlbGxpbmcpOgorICAgICAgICAoQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4
dCk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1
dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOl0pOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmFkR3JhbW1hcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmluZE1pc3NwZWxsaW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxw
ZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3Jh
bW1hdGljYWxSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja1RleHRPZlBhcmFncmFwaCk6
CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6dGV4dFN0cmluZ1ZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0U3Vic3RyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdTdWJzdHJpbmcpOgorICAgICAg
ICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5o
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS93aW4vQlN0cmluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCU3RyaW5nOjpC
U3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQlN0cmluZy5oOgorCiAyMDE0LTAxLTE4
ICBBbGJlcnRvIEdhcmNpYSAgPGJlcnRvQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NvZGVHZW5l
cmF0b3JKU10gU29ydCBvdXRwdXQgb2YgU3RydWN0dXJlRmxhZ3MgYW5kIGZ1bmN0aW9uIHBhcmFt
ZXRlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTYyMjg0KQorKysgU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzMwLDEzICszMzAsMTIgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpoYXNNaXNzcGVsbGlu
ZwogICAgIGlmICghdGV4dENoZWNrZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBjb25zdCBVQ2hhciogY2hhcnMgPSBzdHJpbmdWYWx1ZSgpLmRlcHJlY2F0ZWRDaGFyYWN0ZXJz
KCk7Ci0gICAgaW50IGNoYXJzTGVuZ3RoID0gc3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKKyAgICBT
dHJpbmcgdmFsdWUgPSBzdHJpbmdWYWx1ZSgpOwogICAgIGJvb2wgaXNNaXNzcGVsbGVkID0gZmFs
c2U7CiAKICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChmcmFtZSkpIHsKICAgICAg
ICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICAgICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgodGV4dENoZWNrZXIsIGNoYXJzLCBjaGFyc0xlbmd0aCwgVGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4
dENoZWNrZXIsIFN0cmluZ1ZpZXcodmFsdWUpLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJl
c3VsdHMpOwogICAgICAgICBpZiAoIXJlc3VsdHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgaXNN
aXNzcGVsbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGlzTWlzc3BlbGxlZDsKQEAgLTM0NCw3
ICszNDMsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nCiAKICAg
ICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwogICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9u
ID0gLTE7Ci0gICAgdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgY2hh
cnNMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworICAg
IHRleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldyh2YWx1ZSksICZt
aXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgIGlmIChtaXNzcGVs
bGluZ0xlbmd0aCB8fCBtaXNzcGVsbGluZ0xvY2F0aW9uICE9IC0xKQogICAgICAgICBpc01pc3Nw
ZWxsZWQgPSB0cnVlOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9t
YWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJNYWMubW0JKHJldmlzaW9uIDE2MjI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC03OTMsNyArNzkzLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9j
a3F1bwogICAgICAgICBbYXR0clN0cmluZyByZW1vdmVBdHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5
QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlIHJhbmdlOnJhbmdlXTsKIH0KIAotc3RhdGljIHZvaWQg
QVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBh
dHRyU3RyaW5nLCBOb2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBjaGFyTGVuZ3Ro
LCBOU1JhbmdlIHJhbmdlKQorc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGlu
ZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBTdHJp
bmdWaWV3IHN0cmluZywgTlNSYW5nZSByYW5nZSkKIHsKICAgICBpZiAodW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZChub2RlLT5kb2N1bWVudCgpLmZyYW1lKCkpKSB7CiAgICAgICAgIC8vIENoZWNr
IHRoZSBzcGVsbGluZyBkaXJlY3RseSBzaW5jZSBkb2N1bWVudC0+bWFya2Vyc0Zvck5vZGUoKSBk
b2VzIG5vdCBzdG9yZSB0aGUgbWlzc3BlbGxlZCBtYXJraW5nIHdoZW4gdGhlIGN1cnNvciBpcyBp
biBhIHdvcmQuCkBAIC04MDEsNyArODAxLDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJp
bmdTZXRTcGVsbGluZwogICAgICAgICAKICAgICAgICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgg
aXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBh
bmQgV0syCiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNoZWNrZXIsIGNoYXJzLCBjaGFyTGVuZ3RoLCBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMpOworICAgICAgICBjaGVja1RleHRPZlBhcmFn
cmFwaChjaGVja2VyLCBzdHJpbmcsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7
CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgc2l6ZSA9IHJlc3VsdHMuc2l6ZSgpOwogICAgICAg
ICBOU051bWJlciogdHJ1ZVZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107CkBA
IC04MTUsMTQgKzgxNSwxNCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxs
aW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCisgICAgaW50IGNoYXJMZW5ndGggPSBz
dHJpbmcubGVuZ3RoKCk7CiAgICAgaW50IGN1cnJlbnRQb3NpdGlvbiA9IDA7CiAgICAgd2hpbGUg
KGNoYXJMZW5ndGggPiAwKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJz
ICsgY3VycmVudFBvc2l0aW9uOwogICAgICAgICBUZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9
IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9yKCkudGV4dENoZWNrZXIoKTsKICAgICAg
ICAgCiAgICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CiAgICAgICAgIGludCBt
aXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgIGNoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhjaGFyRGF0YSwgY2hhckxlbmd0aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVs
bGluZ0xlbmd0aCk7CisgICAgICAgIGNoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJp
bmcuc3Vic3RyaW5nKGN1cnJlbnRQb3NpdGlvbiwgY2hhckxlbmd0aCksICZtaXNzcGVsbGluZ0xv
Y2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgICAgICBpZiAobWlzc3BlbGxpbmdMb2Nh
dGlvbiA9PSAtMSB8fCAhbWlzc3BlbGxpbmdMZW5ndGgpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgCkBAIC04ODUsMTcgKzg4NSwxOCBAQCBzdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmlu
Z1NldEVsZW1lbnQoCiAgICAgICAgIFthdHRyU3RyaW5nIHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1
dGUgcmFuZ2U6cmFuZ2VdOwogfQogCi1zdGF0aWMgdm9pZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBl
bmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIE5vZGUqIG5vZGUs
IGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbmd0aCkKKy8vIGNvbnN0IFVDaGFyKiBjaGFycywg
aW50IGxlbmd0aAorc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBTdHJpbmdWaWV3
IHN0cmluZykKIHsKICAgICAvLyBza2lwIGludmlzaWJsZSB0ZXh0CiAgICAgaWYgKCFub2RlLT5y
ZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgLy8gZWFzaWVyIHRvIGNhbGN1
bGF0ZSB0aGUgcmFuZ2UgYmVmb3JlIGFwcGVuZGluZyB0aGUgc3RyaW5nCi0gICAgTlNSYW5nZSBh
dHRyU3RyaW5nUmFuZ2UgPSBOU01ha2VSYW5nZShbYXR0clN0cmluZyBsZW5ndGhdLCBsZW5ndGgp
OworICAgIE5TUmFuZ2UgYXR0clN0cmluZ1JhbmdlID0gTlNNYWtlUmFuZ2UoW2F0dHJTdHJpbmcg
bGVuZ3RoXSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAKICAgICAvLyBhcHBlbmQgdGhlIHN0cmlu
ZyBmcm9tIHRoaXMgbm9kZQotICAgIFtbYXR0clN0cmluZyBtdXRhYmxlU3RyaW5nXSBhcHBlbmRT
dHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOmNoYXJzIGxlbmd0aDpsZW5ndGhd
XTsKKyAgICBbW2F0dHJTdHJpbmcgbXV0YWJsZVN0cmluZ10gYXBwZW5kU3RyaW5nOnN0cmluZy50
b05TU3RyaW5nKCkuZ2V0KCldOwogICAgIAogICAgIC8vIGFkZCBuZXcgYXR0cmlidXRlcyBhbmQg
cmVtb3ZlIGlycmVsZXZhbnQgaW5oZXJpdGVkIG9uZXMKICAgICAvLyBOT1RFOiBjb2xvciBhdHRy
aWJ1dGVzIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBiZWNhdXNlIC1bTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyBhZGRBdHRyaWJ1dGU6IHZhbHVlOiByYW5nZTpdIGRvZXMgbm90IG1lcmdlCkBAIC05
MTYsNyArOTE3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dAog
ICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudChhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxp
dHlMaW5rVGV4dEF0dHJpYnV0ZSwgQWNjZXNzaWJpbGl0eU9iamVjdDo6YW5jaG9yRWxlbWVudEZv
ck5vZGUobm9kZSksIGF0dHJTdHJpbmdSYW5nZSk7CiAgICAgCiAgICAgLy8gZG8gc3BlbGxpbmcg
bGFzdCBiZWNhdXNlIGl0IHRlbmRzIHRvIGJyZWFrIHVwIHRoZSByYW5nZQotICAgIEFYQXR0cmli
dXRlU3RyaW5nU2V0U3BlbGxpbmcoYXR0clN0cmluZywgbm9kZSwgY2hhcnMsIGxlbmd0aCwgYXR0
clN0cmluZ1JhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nKGF0dHJTdHJp
bmcsIG5vZGUsIHN0cmluZywgYXR0clN0cmluZ1JhbmdlKTsKIH0KIAogc3RhdGljIE5TU3RyaW5n
KiBuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZShOb2RlKiByZXBsYWNlZE5vZGUpCkBAIC05NjgsOSAr
OTY5LDkgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nKilkb0FYQXR0cmlidXRlZFN0cgogICAgICAg
ICAgICAgLy8gQWRkIHRoZSB0ZXh0IG9mIHRoZSBsaXN0IG1hcmtlciBpdGVtIGlmIG5lY2Vzc2Fy
eS4KICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2VyVGV4dCA9IG1fb2JqZWN0LT5saXN0TWFy
a2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbihub2RlLCBWaXNpYmxlUG9zaXRpb24oaXQucmFuZ2Uo
KS0+c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgICAgICAgICBpZiAoIWxpc3RNYXJrZXJUZXh0Lmlz
RW1wdHkoKSkKLSAgICAgICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0
dHJTdHJpbmcsIG5vZGUsIGxpc3RNYXJrZXJUZXh0LmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIGxp
c3RNYXJrZXJUZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBBWEF0dHJpYnV0ZWRTdHJp
bmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUsIGxpc3RNYXJrZXJUZXh0KTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dChhdHRyU3RyaW5n
LCBub2RlLCBpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgIEFYQXR0
cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmluZywgbm9kZSwgU3RyaW5nVmlldyhpdC5j
aGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT5jaGlsZE5vZGUob2Zmc2V0KTsKICAgICAgICAg
ICAgIE5TU3RyaW5nICphdHRhY2htZW50U3RyaW5nID0gbnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUo
cmVwbGFjZWROb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9u
IDE2MjI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUgIlZpc2libGVVbml0cy5oIgogI2luY2x1
ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCisjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+
CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCkBAIC0yMTA2LDcgKzIxMDcsNyBA
QCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0Q2FyZXRPclJhCiAgICAgaW50IHdvcmRM
ZW5ndGggPSB3b3JkLmxlbmd0aCgpOwogICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7
CiAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICB0ZXh0Q2hlY2tlcigpLT5jaGVj
a1NwZWxsaW5nT2ZTdHJpbmcod29yZC5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCB3b3JkTGVuZ3Ro
LCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB0ZXh0Q2hl
Y2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldyh3b3JkKSwgJm1pc3NwZWxs
aW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CiAKICAgICByZXR1cm4gbWlzc3BlbGxp
bmdMZW5ndGggPT0gd29yZExlbmd0aCA/IHdvcmQgOiBTdHJpbmcoKTsKIH0KQEAgLTIxMjAsNyAr
MjEyMSw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcKIAogICAg
IGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CiAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3Ro
ID0gMDsKLSAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc2VsZWN0ZWRT
dHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlv
biwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5n
T2ZTdHJpbmcoU3RyaW5nVmlldyhzZWxlY3RlZFN0cmluZyksICZtaXNzcGVsbGluZ0xvY2F0aW9u
LCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgIAogICAgIC8vIFRoZSBzZWxlY3Rpb24gb25seSBj
b3VudHMgYXMgbWlzc3BlbGxlZCBpZiB0aGUgc2VsZWN0ZWQgdGV4dCBpcyBleGFjdGx5IG9uZSBt
aXNzcGVsbGVkIHdvcmQKICAgICBpZiAobWlzc3BlbGxpbmdMZW5ndGggIT0gbGVuZ3RoKQpAQCAt
MjEzMCw3ICsyMTMxLDcgQEAgU3RyaW5nIEVkaXRvcjo6bWlzc3BlbGxlZFNlbGVjdGlvblN0cmlu
ZwogICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8g
W05TU3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsK
ICAgICAvLyBjb3JyZWN0bHk7IHRoYXQgY2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2VkIG9u
IHdoZXRoZXIgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGluZwog
ICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJvci4KLSAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChzZWxlY3RlZFN0cmluZyk7CisgICAgY2xpZW50KCktPnVwZGF0
ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldyhzZWxlY3RlZFN0cmluZykp
OwogICAgIAogICAgIHJldHVybiBzZWxlY3RlZFN0cmluZzsKIH0KQEAgLTI0MjcsOCArMjQyOCw3
IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3IKICAgICB9CiAKICAg
ICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwotICAgIGNoZWNrVGV4dE9mUGFy
YWdyYXBoKHRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dERlcHJlY2F0ZWRDaGFy
YWN0ZXJzKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dExlbmd0aCgpLAotICAgICAgICByZXNvbHZl
VGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMpOworICAg
IGNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHRDaGVja2VyKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4
dFN0cmluZ1ZpZXcoKSwgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09w
dGlvbnMpLCByZXN1bHRzKTsKICAgICBtYXJrQW5kUmVwbGFjZUZvcihyZXF1ZXN0LCByZXN1bHRz
KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVs
cGVyLmNwcAkocmV2aXNpb24gMTYyMjg0KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0
Q2hlY2tpbmdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2lmICFVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogCiAjaWYg
VVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi1zdGF0aWMgdm9pZCBmaW5kQmFkR3JhbW1hcnMoVGV4dENo
ZWNrZXJDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGxl
bmd0aCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCitzdGF0aWMgdm9pZCBm
aW5kQmFkR3JhbW1hcnMoVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAgICBpbnQgY2hlY2tM
b2NhdGlvbiA9IHN0YXJ0OwotICAgIGludCBjaGVja0xlbmd0aCA9IGxlbmd0aDsKKyAgICBpbnQg
Y2hlY2tMb2NhdGlvbiA9IDA7CisgICAgaW50IGNoZWNrTGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsK
IAogICAgIHdoaWxlICgwIDwgY2hlY2tMZW5ndGgpIHsKICAgICAgICAgaW50IGJhZEdyYW1tYXJM
b2NhdGlvbiA9IC0xOwogICAgICAgICBpbnQgYmFkR3JhbW1hckxlbmd0aCA9IDA7CiAgICAgICAg
IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBiYWRHcmFtbWFyRGV0YWlsczsKLSAgICAgICAgY2xpZW50
LT5jaGVja0dyYW1tYXJPZlN0cmluZyh0ZXh0ICsgY2hlY2tMb2NhdGlvbiwgY2hlY2tMZW5ndGgs
IGJhZEdyYW1tYXJEZXRhaWxzLCAmYmFkR3JhbW1hckxvY2F0aW9uLCAmYmFkR3JhbW1hckxlbmd0
aCk7CisgICAgICAgIGNsaWVudC0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmcodGV4dC5zdWJzdHJpbmco
Y2hlY2tMb2NhdGlvbiwgY2hlY2tMZW5ndGgpLCBiYWRHcmFtbWFyRGV0YWlscywgJmJhZEdyYW1t
YXJMb2NhdGlvbiwgJmJhZEdyYW1tYXJMZW5ndGgpOwogICAgICAgICBpZiAoIWJhZEdyYW1tYXJM
ZW5ndGgpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgQVNTRVJUKDAgPD0gYmFkR3JhbW1h
ckxvY2F0aW9uICYmIGJhZEdyYW1tYXJMb2NhdGlvbiA8PSBjaGVja0xlbmd0aCk7CkBAIC03MCw5
ICs3MCw5IEBAIHN0YXRpYyB2b2lkIGZpbmRCYWRHcmFtbWFycyhUZXh0Q2hlY2tlckMKIH0KICNl
bmRpZgogCi1zdGF0aWMgdm9pZCBmaW5kTWlzc3BlbGxpbmdzKFRleHRDaGVja2VyQ2xpZW50KiBj
bGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBWZWN0b3I8VGV4dENoZWNraW5n
UmVzdWx0PiYgcmVzdWx0cykKK3N0YXRpYyB2b2lkIGZpbmRNaXNzcGVsbGluZ3MoVGV4dENoZWNr
ZXJDbGllbnQqIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiYgcmVzdWx0cykKIHsKLSAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSB3b3Jk
QnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHRleHQsIGxlbmd0aCkpOworICAgIFRleHRCcmVha0l0
ZXJhdG9yKiBpdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJhdG9yKHRleHQpOwogICAgIGlmICghaXRl
cmF0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpbnQgd29yZFN0YXJ0ID0gdGV4dEJyZWFrQ3Vy
cmVudChpdGVyYXRvcik7CkBAIC04Myw3ICs4Myw3IEBAIHN0YXRpYyB2b2lkIGZpbmRNaXNzcGVs
bGluZ3MoVGV4dENoZWNrZXIKICAgICAgICAgaW50IHdvcmRMZW5ndGggPSB3b3JkRW5kIC0gd29y
ZFN0YXJ0OwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOwogICAgICAgICBp
bnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgICAgICBjbGllbnQtPmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyh0ZXh0ICsgd29yZFN0YXJ0LCB3b3JkTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlv
biwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgY2xpZW50LT5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcodGV4dC5zdWJzdHJpbmcod29yZFN0YXJ0LCB3b3JkTGVuZ3RoKSwgJm1pc3NwZWxsaW5n
TG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CiAgICAgICAgIGlmICgwIDwgbWlzc3BlbGxp
bmdMZW5ndGgpIHsKICAgICAgICAgICAgIEFTU0VSVCgwIDw9IG1pc3NwZWxsaW5nTG9jYXRpb24g
JiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8PSB3b3JkTGVuZ3RoKTsKICAgICAgICAgICAgIEFTU0VS
VCgwIDwgbWlzc3BlbGxpbmdMZW5ndGggJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxs
aW5nTGVuZ3RoIDw9IHdvcmRMZW5ndGgpOwpAQCAtMjUxLDcgKzI1MSw3IEBAIFN0cmluZyBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3MKICAgICAgICAgICAgIAogICAgICAgICAgICAg
aW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKICAgICAgICAgICAgIGludCBtaXNzcGVsbGlu
Z0xlbmd0aCA9IDA7Ci0gICAgICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKGNoYXJzLCBsZW4sICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3Bl
bGxpbmdMZW5ndGgpOworICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3KGNoYXJzLCBsZW4pLCAmbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKIAogICAgICAgICAgICAgLy8gNTQ5MDYyNyBzaG93
cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNvZGUgcGF0aCBoZXJlIHdoZXJlIHRoZSBTdHJpbmcgY29u
c3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4KICAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhh
Y3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUg
bWFraW5nIHRoaXMgbXVjaApAQCAtMzQ1LDcgKzM0NSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdE1pc3MKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgICAgICAgICAgICAgIFRleHRD
aGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNr
aW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5n
VHlwZVNwZWxsaW5nOwotICAgICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKG1fY2xp
ZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMo
KSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyAg
ICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaChtX2NsaWVudC0+dGV4dENoZWNrZXIo
KSwgU3RyaW5nVmlldyhwYXJhZ3JhcGhTdHJpbmcpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwpAQCAtNDYxLDcgKzQ2MSw3IEBA
IFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEcKICAgICBvdXRHcmFtbWFy
RGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9ICIiOwogICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQg
PSAwOwogICAgIAotICAgIFN0cmluZyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7CisgICAgU3RyaW5n
VmlldyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7CiAKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCBy
YW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tp
bmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0
ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9m
IHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCkBAIC00NzQsNyArNDc0LDcgQEAgU3RyaW5nIFRl
eHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkRwogICAgICAgICBWZWN0b3I8R3JhbW1hckRl
dGFpbD4gZ3JhbW1hckRldGFpbHM7CiAgICAgICAgIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRp
b24gPSAtMTsKICAgICAgICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMZW5ndGggPSAwOwotICAgICAg
ICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBo
LnRleHREZXByZWNhdGVkQ2hhcmFjdGVycygpICsgc3RhcnRPZmZzZXQsIHBhcmFncmFwaC50ZXh0
TGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3JhbW1hckRldGFpbHMsICZiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKKyAgICAgICAgbV9jbGllbnQtPnRl
eHRDaGVja2VyKCktPmNoZWNrR3JhbW1hck9mU3RyaW5nKHBhcmFncmFwaC50ZXh0U3Vic3RyaW5n
KHN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGgudGV4dExlbmd0aCgpIC0gc3RhcnRPZmZzZXQpLCBncmFt
bWFyRGV0YWlscywgJmJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJhc2VM
ZW5ndGgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7
CiAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsKQEAg
LTUwNyw4ICs1MDcsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRH
CiAgICAgICAgIC8vIGJleW9uZCB0aGlzIHBocmFzZS4KICAgICAgICAgc3RhcnRPZmZzZXQgPSBi
YWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoOwogICAgIH0K
LSAgICAKLSAgICByZXR1cm4gZmlyc3RCYWRHcmFtbWFyUGhyYXNlOworCisgICAgcmV0dXJuIGZp
cnN0QmFkR3JhbW1hclBocmFzZS50b1N0cmluZygpOwogfQogCiAKQEAgLTU3NSwxMiArNTc1LDEy
IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3MKIAogICAgIFZlY3Rv
cjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sg
Y2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcg
fCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0g
ICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFw
aC50ZXh0RGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgcGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hl
Y2tpbmdUeXBlcywgcmVzdWx0cyk7CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQt
PnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0U3RyaW5nVmlldygpLCBjaGVja2luZ1R5cGVz
LCByZXN1bHRzKTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5z
aXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9
ICZyZXN1bHRzW2ldOwogICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LT5sb2Nh
dGlvbiwgcmVzdWx0LT5sZW5ndGgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWlzc3BlbGxlZFdv
cmQgPSBwYXJhZ3JhcGguY2hlY2tpbmdTdWJzdHJpbmcoKTsKKyAgICAgICAgICAgIFN0cmluZ1Zp
ZXcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGguY2hlY2tpbmdTdWJzdHJpbmcoKTsKICAgICAg
ICAgICAgIEFTU0VSVChtaXNzcGVsbGVkV29yZC5sZW5ndGgoKSk7CiAgICAgICAgICAgICBtX2Ns
aWVudC0+dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobWlzc3BlbGxlZFdvcmQsIFN0
cmluZygpLCBndWVzc2VzKTsKICAgICAgICAgICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsKQEAgLTU5OSw3ICs1OTksNyBAQCBW
ZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzCiAgICAgICAgICAgICAgICAg
Y29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJlc3VsdC0+ZGV0YWlsc1tqXTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5sZW5ndGggPiAwICYmIGRldGFpbC0+bG9jYXRpb24g
Pj0gMCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmFncmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hl
cyhyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2NhdGlvbiwgZGV0YWlsLT5sZW5ndGgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBo
LnRleHRTdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpOworICAgICAg
ICAgICAgICAgICAgICBTdHJpbmdWaWV3IGJhZEdyYW1tYXJQaHJhc2UgPSBwYXJhZ3JhcGgudGV4
dFN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNlLmxlbmd0aCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGRldGFpbC0+Z3Vlc3Nlcy5zaXplKCk7
IGsrKykKICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXNzZXMuYXBwZW5kKGRldGFpbC0+Z3Vl
c3Nlc1trXSk7CkBAIC02NDAsMTUgKzY0MCwxNCBAQCBib29sIFRleHRDaGVja2luZ0hlbHBlcjo6
dW5pZmllZFRleHRDaGVjCiAgICAgcmV0dXJuIG1fcmFuZ2UgJiYgV2ViQ29yZTo6dW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSk7CiB9CiAK
LXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCwgY29u
c3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFRl
eHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+JiByZXN1bHRzKQordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVu
dCogY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5n
VHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewogI2lmIFVTRShV
TklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgcmVzdWx0cyA9IGNsaWVudC0+Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3RyaW5nVmlldyh0ZXh0LCBsZW5ndGgpLCBjaGVja2luZ1R5cGVzKTsKKyAgICBy
ZXN1bHRzID0gY2xpZW50LT5jaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVz
KTsKICNlbHNlCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gc3BlbGxpbmdSZXN1bHQ7
CiAgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCi0gICAg
ICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0ZXh0LCBsZW5ndGgsIHNwZWxsaW5nUmVzdWx0
KTsKKyAgICAgICAgZmluZE1pc3NwZWxsaW5ncyhjbGllbnQsIHRleHQsIHNwZWxsaW5nUmVzdWx0
KTsKIAogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IGdyYW1tYXJSZXN1bHQ7CkBAIC02NjAsNyArNjU5LDcgQEAgdm9pZCBjaGVja1RleHRP
ZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaQogICAgICAgICAgICAgICAgIGdyYW1tYXJDaGVja0xl
bmd0aCA9IHNwZWxsaW5nUmVzdWx0W2ldLmxvY2F0aW9uOwogICAgICAgICB9CiAKLSAgICAgICAg
ZmluZEJhZEdyYW1tYXJzKGNsaWVudCwgdGV4dCwgMCwgZ3JhbW1hckNoZWNrTGVuZ3RoLCBncmFt
bWFyUmVzdWx0KTsKKyAgICAgICAgZmluZEJhZEdyYW1tYXJzKGNsaWVudCwgdGV4dC5zdWJzdHJp
bmcoMCwgZ3JhbW1hckNoZWNrTGVuZ3RoKSwgZ3JhbW1hclJlc3VsdCk7CiAgICAgfQogCiAgICAg
aWYgKGdyYW1tYXJSZXN1bHQuc2l6ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCShyZXZpc2lvbiAxNjIyODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsy
NCw3IEBACiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDQsOCArNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBleHBhbmRSYW5nZVRv
TmV4dEVuZCgpOwogCiAgICAgaW50IHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiB0ZXh0KCku
bGVuZ3RoKCk7IH0KLSAgICBTdHJpbmcgdGV4dFN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVuc2ln
bmVkIGxlbiA9IFVJTlRfTUFYKSBjb25zdCB7IHJldHVybiB0ZXh0KCkuc3Vic3RyaW5nKHBvcywg
bGVuKTsgfQotICAgIGNvbnN0IFVDaGFyKiB0ZXh0RGVwcmVjYXRlZENoYXJhY3RlcnMoKSBjb25z
dCB7IHJldHVybiB0ZXh0KCkuZGVwcmVjYXRlZENoYXJhY3RlcnMoKTsgfQorICAgIFN0cmluZ1Zp
ZXcgdGV4dFN0cmluZ1ZpZXcoKSBjb25zdCB7IHJldHVybiBTdHJpbmdWaWV3KHRleHQoKSk7IH0K
KyAgICBTdHJpbmdWaWV3IHRleHRTdWJzdHJpbmcodW5zaWduZWQgcG9zLCB1bnNpZ25lZCBsZW4g
PSBVSU5UX01BWCkgY29uc3QgeyByZXR1cm4gU3RyaW5nVmlldyh0ZXh0KCkpLnN1YnN0cmluZyhw
b3MsIGxlbik7IH0KICAgICBVQ2hhciB0ZXh0Q2hhckF0KGludCBpbmRleCkgY29uc3QgeyByZXR1
cm4gdGV4dCgpW3N0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCldOyB9CiAKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdDsKQEAgLTU1LDcgKzU2LDcgQEAgcHVibGljOgogICAgIGludCBjaGVja2lu
Z1N0YXJ0KCkgY29uc3Q7CiAgICAgaW50IGNoZWNraW5nRW5kKCkgY29uc3Q7CiAgICAgaW50IGNo
ZWNraW5nTGVuZ3RoKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGNoZWNraW5nU3Vic3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gdGV4dFN1YnN0cmluZyhjaGVja2luZ1N0YXJ0KCksIGNoZWNraW5nTGVuZ3Ro
KCkpOyB9CisgICAgU3RyaW5nVmlldyBjaGVja2luZ1N1YnN0cmluZygpIGNvbnN0IHsgcmV0dXJu
IHRleHRTdWJzdHJpbmcoY2hlY2tpbmdTdGFydCgpLCBjaGVja2luZ0xlbmd0aCgpKTsgfQogCiAg
ICAgYm9vbCBjaGVja2luZ1JhbmdlTWF0Y2hlcyhpbnQgbG9jYXRpb24sIGludCBsZW5ndGgpIGNv
bnN0IHsgcmV0dXJuIGxvY2F0aW9uID09IGNoZWNraW5nU3RhcnQoKSAmJiBsZW5ndGggPT0gY2hl
Y2tpbmdMZW5ndGgoKTsgfQogICAgIGJvb2wgaXNDaGVja2luZ1JhbmdlQ292ZXJlZEJ5KGludCBs
b2NhdGlvbiwgaW50IGxlbmd0aCkgY29uc3QgeyByZXR1cm4gbG9jYXRpb24gPD0gY2hlY2tpbmdT
dGFydCgpICYmIGxvY2F0aW9uICsgbGVuZ3RoID49IGNoZWNraW5nU3RhcnQoKSArIGNoZWNraW5n
TGVuZ3RoKCk7IH0KQEAgLTEwMyw4ICsxMDQsNyBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCi12
b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50KiwgY29uc3QgVUNoYXIq
IHRleHQsIGludCBsZW5ndGgsCi0gICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBl
cywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpOwordm9pZCBjaGVja1RleHRP
ZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCosIFN0cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5
cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRz
KTsKIAogYm9vbCB1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKGNvbnN0IEZyYW1lKik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgJKHJldmlzaW9uIDE2MjI4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEyLDE3ICs0MTIsMTcgQEAgcHVibGljOgogY2xhc3MgRW1wdHlUZXh0Q2hlY2tlckNsaWVudCA6
IHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGUpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29y
ZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIGludCosIGludCop
IG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgcmV0dXJuIFN0cmlu
ZygpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFy
KiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqLCBpbnQqKSBvdmVycmlkZSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChTdHJpbmdWaWV3KSBv
dmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKFN0cmluZ1ZpZXcpIG92ZXJy
aWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmll
dywgaW50KiwgaW50Kikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldykgb3ZlcnJpZGUgeyBy
ZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmco
U3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50Kikgb3ZlcnJpZGUg
eyB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIHZpcnR1YWwgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4
dENoZWNraW5nVHlwZU1hc2spIG92ZXJyaWRlIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+KCk7IH0KICNlbmRpZgogCi0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3Jk
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFZlY3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGUg
eyB9CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcsIFN0cmlu
Z1ZpZXcsIFZlY3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJl
cXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4pIG92
ZXJyaWRlOwogfTsKIApAQCAtNTM2LDggKzUzNiw4IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZp
cnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgb3ZlcnJpZGUgeyByZXR1cm4g
Jm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGlu
Z1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgR3JhbW1hckRldGFpbCYp
IG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3Nw
ZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5nVmlldywgY29uc3QgR3JhbW1h
ckRldGFpbCYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBzaG93U3BlbGxpbmdVSShib29sKSBvdmVycmlkZSB7IH0KICAgICB2aXJ0dWFsIGJvb2wg
c3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2aXNpb24gMTYyMjg0KQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDggKzE3
Myw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVj
a2VyKCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhTdHJpbmdWaWV3LCBjb25zdCBHcmFtbWFyRGV0YWlsJiBkZXRhaWwpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChTdHJp
bmdWaWV3KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykg
PSAwOwogICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0ZSgpID0gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGllbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2VyQ2xpZW50LmgJKHJldmlzaW9u
IDE2MjI4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJDbGll
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDExIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5UZXh0Q2hlY2tlckNsaWVudCgpIHt9CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJh
c2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oVGV4dENoZWNraW5nVHlwZSkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmlu
ZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50
IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3Ro
KSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNzcGVsbGVkV29yZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFZl
Y3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdy
YW1tYXJMZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1
bWVudChTdHJpbmdWaWV3KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChTdHJpbmdW
aWV3KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdW
aWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpID0g
MDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChTdHJpbmdWaWV3IG1pc3NwZWxsZWRXb3JkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYs
IGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpID0gMDsKIAog
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgdmlydHVhbCBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzKSA9IDA7CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoK
ICAgICAvLyBGb3Igc3BlbGxjaGVja2VycyB0aGF0IHN1cHBvcnQgbXVsdGlwbGUgbGFuZ3VhZ2Vz
LCBpdCdzIG9mdGVuIGltcG9ydGFudCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5IHRoZSBsYW5ndWFn
ZSBpbiBvcmRlciB0bwogICAgIC8vIHByb3ZpZGUgbW9yZSBhY2N1cmF0ZSBjb3JyZWN0aW9uIHN1
Z2dlc3Rpb25zLiBDYWxsZXIgY2FuIHBhc3MgaW4gbW9yZSB0ZXh0IGluICJjb250ZXh0IiB0byBh
aWQgc3VjaCBzcGVsbGNoZWNrZXJzIG9uIGxhbmd1YWdlCiAgICAgLy8gaWRlbnRpZmljYXRpb24u
IE5vcmFtbGx5IGl0J3MgdGhlIHRleHQgc3Vycm91bmRpbmcgdGhlICJ3b3JkIiBmb3Igd2hpY2gg
d2UgYXJlIGdldHRpbmcgY29ycmVjdGlvbiBzdWdnZXN0aW9ucy4KLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRl
eHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEd1
ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcgd29yZCwgU3RyaW5nVmlldyBjb250ZXh0LCBWZWN0b3I8
U3RyaW5nPiYgZ3Vlc3NlcykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdP
ZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2luZ1JlcXVlc3Q+KSA9IDA7CiB9OwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQlN0cmluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0JTdHJpbmcuY3BwCShyZXZpc2lvbiAxNjIyODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQlN0cmluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1LDcgKzY1LDcgQEAgQlN0cmluZzo6QlN0cmluZyhjb25zdCBTdHJpbmcmIHMpCiAg
ICAgaWYgKHMuaXNOdWxsKCkpCiAgICAgICAgIG1fYnN0ciA9IDA7CiAgICAgZWxzZQotICAgICAg
ICBtX2JzdHIgPSBTeXNBbGxvY1N0cmluZ0xlbihzLmNoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSk7
CisgICAgICAgIG1fYnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVuKHMuZGVwcmVjYXRlZENoYXJhY3Rl
cnMoKSwgcy5sZW5ndGgoKSk7CiB9CiAKIEJTdHJpbmc6OkJTdHJpbmcoY29uc3QgVVJMJiB1cmwp
CkBAIC03Myw3ICs3Myw3IEBAIEJTdHJpbmc6OkJTdHJpbmcoY29uc3QgVVJMJiB1cmwpCiAgICAg
aWYgKHVybC5pc051bGwoKSkKICAgICAgICAgbV9ic3RyID0gMDsKICAgICBlbHNlCi0gICAgICAg
IG1fYnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVuKHVybC5zdHJpbmcoKS5jaGFyYWN0ZXJzKCksIHVy
bC5zdHJpbmcoKS5sZW5ndGgoKSk7CisgICAgICAgIG1fYnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVu
KHVybC5zdHJpbmcoKS5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCB1cmwuc3RyaW5nKCkubGVuZ3Ro
KCkpOwogfQogCiBCU3RyaW5nOjpCU3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgcykKQEAgLTgx
LDcgKzgxLDE1IEBAIEJTdHJpbmc6OkJTdHJpbmcoY29uc3QgQXRvbWljU3RyaW5nJiBzKQogICAg
IGlmIChzLmlzTnVsbCgpKQogICAgICAgICBtX2JzdHIgPSAwOwogICAgIGVsc2UKLSAgICAgICAg
bV9ic3RyID0gU3lzQWxsb2NTdHJpbmdMZW4ocy5jaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOwor
ICAgICAgICBtX2JzdHIgPSBTeXNBbGxvY1N0cmluZ0xlbihzLmRlcHJlY2F0ZWRDaGFyYWN0ZXJz
KCksIHMubGVuZ3RoKCkpOworfQorCitCU3RyaW5nOjpCU3RyaW5nKFN0cmluZ1ZpZXcgcykKK3sK
KyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgbV9ic3RyID0gMDsKKyAgICBlbHNlCisgICAg
ICAgIG1fYnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVuKHMudG9TdHJpbmdXaXRob3V0Q29weWluZygp
LmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHMubGVuZ3RoKCkpOwogfQogCiAjaWYgVVNFKENGKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0JTdHJpbmcuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQlN0cmluZy5oCShyZXZpc2lvbiAxNjIyODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQlN0cmluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQlN0cmluZyhj
b25zdCBTdHJpbmcmKTsKICAgICAgICAgQlN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcmKTsKICAg
ICAgICAgQlN0cmluZyhjb25zdCBVUkwmKTsKKyAgICAgICAgQlN0cmluZyhTdHJpbmdWaWV3KTsK
ICNpZiBVU0UoQ0YpCiAgICAgICAgIEJTdHJpbmcoQ0ZTdHJpbmdSZWYpOwogI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNjIyODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxNC0wMS0xOCAgU2FtIFdlaW5pZyAg
PHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFN3aXRjaCB0aGUgVGV4dENoZWNrZXJDbGllbnQg
b3ZlciB0byB1c2luZyBTdHJpbmdWaWV3IGV2ZXJ5d2hlcmUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzI0MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1RleHRDaGVja2VyLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VQcm94eTo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlUHJveHk6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2VQcm94eTo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3Mv
VGV4dENoZWNrZXJJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1Rl
eHRPZlBhcmFncmFwaCk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxs
aW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW06Cisg
ICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpsZWFybldvcmQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChX
ZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3Bl
bGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1h
ck9mU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVs
bGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGll
bnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorCiAyMDE0LTAxLTE4ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVwbGFjZSBhIGNv
dXBsZSBvZiB1c2VzIG9mIFdURjo6RnVuY3Rpb24gd2l0aCBzdGQ6OmZ1bmN0aW9uCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAkocmV2aXNpb24gMTYyMjg0KQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1RleHRDaGVja2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNvbXBsZXRpb24uaCIKICNpbmNs
dWRlIDxXZWJDb3JlL0VkaXRvckNsaWVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVGV4dENoZWNr
ZXJDbGllbnQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC02NywxMCArNjgsMTAgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQ2
NF90IHVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5Kik7CiAgICAgc3RhdGljIHZv
aWQgY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90KTsKICNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQotICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVz
dWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCB1aW50NjRfdCBjaGVja2luZ1R5cGVzKTsKKyAgICBz
dGF0aWMgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCB1aW50NjRfdCBjaGVj
a2luZ1R5cGVzKTsKICNlbmRpZgotICAgIHN0YXRpYyB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBs
ZW5ndGgsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5n
TGVuZ3RoKTsKLSAgICBzdGF0aWMgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNw
ZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFVDaGFyKiB0ZXh0LCB1aW50MzJfdCBsZW5ndGgsIFZlY3Rv
cjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgc3RhdGljIHZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldywgaW50MzJfdCYg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIHN0
YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
U3RyaW5nVmlldywgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKICAgICBzdGF0aWMg
Ym9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCk7CiAgICAgc3RhdGljIHZvaWQgdG9nZ2xlU3BlbGxp
bmdVSUlzU2hvd2luZygpOwogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIG1pc3Nw
ZWxsZWRXb3JkKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
Y3BwCShyZXZpc2lvbiAxNjIyODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4MCwxOCArMzM4MCwxOCBAQCBpbnQ2NF90
IFdlYlBhZ2VQcm94eTo6c3BlbGxEb2N1bWVudFRhZygpCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKIHZvaWQgV2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaChjb25zdCBT
dHJpbmcmIHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQogewotICAgIHJlc3VsdHMgPSBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoc3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0LmRlcHJlY2F0ZWRDaGFyYWN0ZXJz
KCksIHRleHQubGVuZ3RoKCksIGNoZWNraW5nVHlwZXMpOworICAgIHJlc3VsdHMgPSBUZXh0Q2hl
Y2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0LCBjaGVj
a2luZ1R5cGVzKTsKIH0KICNlbmRpZgogCiB2b2lkIFdlYlBhZ2VQcm94eTo6Y2hlY2tTcGVsbGlu
Z09mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlv
biwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgVGV4dENoZWNrZXI6OmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCksIHRleHQuZGVwcmVjYXRlZENoYXJh
Y3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdM
ZW5ndGgpOworICAgIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1
bWVudFRhZygpLCB0ZXh0LCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7
CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBTdHJp
bmcmIHRleHQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3Qm
IGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKIHsKLSAgICBU
ZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZygpLCB0ZXh0
LmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIGdyYW1tYXJEZXRhaWxzLCBi
YWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOworICAgIFRleHRDaGVja2VyOjpj
aGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCksIHRleHQsIGdyYW1tYXJEZXRh
aWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOwogfQogCiB2b2lkIFdl
YlBhZ2VQcm94eTo6c3BlbGxpbmdVSUlzU2hvd2luZyhib29sJiBpc1Nob3dpbmcpCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1RleHRDaGVja2VySU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJT1MubW0JKHJldmlz
aW9uIDE2MjI4NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFRleHRDaGVja2Vy
OjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoCiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5H
KQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoaW50NjRfdCwgY29uc3QgVUNoYXIqLCBpbnQsIHVpbnQ2NF90KQorVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0
X3QsIFN0cmluZ1ZpZXcpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4oKTsKQEAgLTEzNywxMyArMTM3LDEzIEBAIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjoKIAogI2VuZGlmCiAKLXZvaWQgVGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQz
Ml90LCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoaW50NjRfdCwgU3RyaW5nVmlldywgaW50MzJfdCYsIGludDMyX3QmKQogewogICAg
IC8vIE1hYyB1c2VzIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGluc3RlYWQuCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50
NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRh
aWw+JiwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcoaW50NjRfdCwgU3RyaW5nVmlldywgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRh
aWw+JiwgaW50MzJfdCYsIGludDMyX3QmKQogewogICAgIC8vIE1hYyB1c2VzIGNoZWNrVGV4dE9m
UGFyYWdyYXBoIGluc3RlYWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVGV4dENoZWNrZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQkocmV2aXNpb24gMTYy
Mjg0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjkzLDEzICsyOTMsMTMgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Y2xv
c2VTcGVsbERvY3VtZW50V2l0aAogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIAot
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5n
dGgsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBU
ZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFn
LCBTdHJpbmdWaWV3IHRleHQsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpCiB7CiAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKIAotICAgIFJldGFpblB0cjxOU1N0cmluZz4g
dGV4dFN0cmluZyA9IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJz
Tm9Db3B5OmNvbnN0X2Nhc3Q8VUNoYXIqPih0ZXh0KSBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9u
ZTpOT10pOwotICAgIE5TQXJyYXkgKmluY29taW5nUmVzdWx0cyA9IFtbTlNTcGVsbENoZWNrZXIg
c2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja1N0cmluZzp0ZXh0U3RyaW5nIC5nZXQoKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByYW5nZTpOU01ha2VSYW5nZSgwLCBsZW5ndGgpCisgICAgYXV0byB0ZXh0U3Ry
aW5nID0gdGV4dC50b05TU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKyAgICBOU0FycmF5ICppbmNv
bWluZ1Jlc3VsdHMgPSBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tT
dHJpbmc6dGV4dFN0cmluZy5nZXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZTpOU01ha2VSYW5n
ZSgwLCBbdGV4dFN0cmluZyBsZW5ndGhdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlczpjaGVja2lu
Z1R5cGVzIHwgTlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
dGlvbnM6bmlsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsRG9jdW1lbnRUYWcgCkBAIC0z
ODIsMTMgKzM4MiwxMyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6
CiAKICNlbmRpZgogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50
NjRfdCwgY29uc3QgVUNoYXIqLCB1aW50MzJfdCwgaW50MzJfdCYsIGludDMyX3QmKQordm9pZCBU
ZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3QsIFN0cmluZ1ZpZXcsIGlu
dDMyX3QmLCBpbnQzMl90JikKIHsKICAgICAvLyBNYWMgdXNlcyBjaGVja1RleHRPZlBhcmFncmFw
aCBpbnN0ZWFkLgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXI6
OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIGNvbnN0IFVDaGFyKiwgdWludDMyX3QsIFZl
Y3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQg
VGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGludDY0X3QsIFN0cmluZ1ZpZXcsIFZl
Y3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludDMyX3QmLCBpbnQzMl90JikKIHsKICAg
ICAvLyBNYWMgdXNlcyBjaGVja1RleHRPZlBhcmFncmFwaCBpbnN0ZWFkLgogICAgIG5vdEltcGxl
bWVudGVkKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAxNjIyODQp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNCwzOSArNDA0LDM2IEBAIGJvb2wgV2ViRWRp
dG9yQ2xpZW50OjpzaG91bGRFcmFzZU1hcmtlcnMKICNlbmRpZgogfQogCi12b2lkIFdlYkVkaXRv
ckNsaWVudDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmIHdvcmQpCit2
b2lkIFdlYkVkaXRvckNsaWVudDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChTdHJpbmdWaWV3
IHdvcmQpCiB7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Oklnbm9y
ZVdvcmQod29yZCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJ
Z25vcmVXb3JkKHdvcmQudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSk7CiB9CiAKLXZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQordm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmxlYXJuV29yZChTdHJpbmdWaWV3IHdvcmQpCiB7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxlYXJuV29yZCh3b3JkKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxlYXJuV29yZCh3b3JkLnRvU3RyaW5nV2l0aG91
dENvcHlpbmcoKSkpOwogfQotCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcgc3RyaW5nVmlldywgaW50KiBtaXNzcGVsbGlu
Z0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKQogewogICAgIGludDMyX3QgcmVzdWx0
TG9jYXRpb24gPSAtMTsKICAgICBpbnQzMl90IHJlc3VsdExlbmd0aCA9IDA7Ci0gICAgLy8gRklY
TUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgd2Ugd291bGRuJ3QgaGF2ZSB0byBjb3B5IHRoZSB0ZXh0
IGhlcmUuCi0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVj
a1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nKHRleHQsIGxlbmd0aCkpLAorICAgIG1fcGFnZS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q2hlY2tTcGVsbGluZ09mU3RyaW5nKHN0cmlu
Z1ZpZXcudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSwKICAgICAgICAgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6Q2hlY2tTcGVsbGluZ09mU3RyaW5nOjpSZXBseShyZXN1bHRMb2NhdGlvbiwgcmVz
dWx0TGVuZ3RoKSk7CiAgICAgKm1pc3NwZWxsaW5nTG9jYXRpb24gPSByZXN1bHRMb2NhdGlvbjsK
ICAgICAqbWlzc3BlbGxpbmdMZW5ndGggPSByZXN1bHRMZW5ndGg7CiB9CiAKLVN0cmluZyBXZWJF
ZGl0b3JDbGllbnQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNv
bnN0IFN0cmluZyYpCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dl
c3Rpb25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIFZlY3RvcjxX
ZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCogYmFkR3JhbW1hckxv
Y2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldyBzdHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6
R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwg
aW50KiBiYWRHcmFtbWFyTGVuZ3RoKQogewogICAgIGludDMyX3QgcmVzdWx0TG9jYXRpb24gPSAt
MTsKICAgICBpbnQzMl90IHJlc3VsdExlbmd0aCA9IDA7Ci0gICAgLy8gRklYTUU6IEl0IHdvdWxk
IGJlIG5pY2UgaWYgd2Ugd291bGRuJ3QgaGF2ZSB0byBjb3B5IHRoZSB0ZXh0IGhlcmUuCi0gICAg
bV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja0dyYW1tYXJPZlN0
cmluZyhTdHJpbmcodGV4dCwgbGVuZ3RoKSksCisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpDaGVja0dyYW1tYXJPZlN0cmluZyhzdHJpbmdWaWV3LnRvU3RyaW5n
V2l0aG91dENvcHlpbmcoKSksCiAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNr
R3JhbW1hck9mU3RyaW5nOjpSZXBseShncmFtbWFyRGV0YWlscywgcmVzdWx0TG9jYXRpb24sIHJl
c3VsdExlbmd0aCkpOwogICAgICpiYWRHcmFtbWFyTG9jYXRpb24gPSByZXN1bHRMb2NhdGlvbjsK
ICAgICAqYmFkR3JhbW1hckxlbmd0aCA9IHJlc3VsdExlbmd0aDsKQEAgLTQ1MywxNCArNDUwLDE0
IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFdlYkVkaXRvckNsaWUKIH0KICNlbmRpZgog
Ci12b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5n
KGNvbnN0IFN0cmluZyYgYmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3Jh
bW1hckRldGFpbCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdy
YW1tYXJTdHJpbmcoU3RyaW5nVmlldyBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0
YWlsJiBncmFtbWFyRGV0YWlsKQogewotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpVcGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFz
ZSwgZ3JhbW1hckRldGFpbCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpVcGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZS50
b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGdyYW1tYXJEZXRhaWwpKTsKIH0KIAotdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJiBtaXNzcGVsbGVkV29yZCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcgbWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6VXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNz
cGVsbGVkV29yZC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpKTsKIH0KIAogdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnNob3dTcGVsbGluZ1VJKGJvb2wpCkBAIC00NzUsOSArNDcyLDkgQEAgYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbgogICAgIHJldHVybiBpc1Nob3dpbmc7
CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJp
bmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMp
Cit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nVmlldyB3b3Jk
LCBTdHJpbmdWaWV3IGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIG1f
cGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0R3Vlc3Nlc0ZvcldvcmQo
d29yZCwgY29udGV4dCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3Jk
OjpSZXBseShndWVzc2VzKSk7CisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpHZXRHdWVzc2VzRm9yV29yZCh3b3JkLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwg
Y29udGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpHZXRHdWVzc2VzRm9yV29yZDo6UmVwbHkoZ3Vlc3NlcykpOwogfQogCiB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFRleHRDaGVj
a2luZ1JlcXVlc3Q+IHBycFJlcXVlc3QpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgJKHJldmlz
aW9uIDE2MjI4NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMywyMiArMTMzLDIyIEBAIHBy
aXZhdGU6CiAgICAgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgIG92ZXJyaWRlIHsg
cmV0dXJuIHRoaXM7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRl
ckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3Qg
VUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3Bl
bGxpbmdMZW5ndGgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0
U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBV
Q2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCog
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KFN0cmluZ1ZpZXcpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoU3RyaW5nVmlldykgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1p
c3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3Jk
KFN0cmluZ1ZpZXcgbWlzc3BlbGxlZFdvcmQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBj
aGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRl
dGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBv
dmVycmlkZTsKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIHZpcnR1YWwgVmVj
dG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3Ry
aW5nVmlldywgV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgb3Zl
cnJpZGU7CiAjZW5kaWYKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFt
bWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3Bl
bGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFN0cmluZ1ZpZXcsIGNvbnN0IFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdp
dGhNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQg
c2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc3Bl
bGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2Vz
Rm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9y
PFN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2Vz
Rm9yV29yZChTdHJpbmdWaWV3IHdvcmQsIFN0cmluZ1ZpZXcgY29udGV4dCwgVmVjdG9yPFN0cmlu
Zz4mIGd1ZXNzZXMpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRo
b2RTdGF0ZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRl
KGJvb2wgZW5hYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2lu
Z09mU3RyaW5nKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikg
b3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4pIG92ZXJyaWRlOwogI2lmIFBMQVRG
T1JNKEdUSykKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkU2hvd1VuaWNvZGVNZW51KCkgb3ZlcnJp
ZGU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjI4NCkKKysrIFNv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBA
CisyMDE0LTAxLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3dp
dGNoIHRoZSBUZXh0Q2hlY2tlckNsaWVudCBvdmVyIHRvIHVzaW5nIFN0cmluZ1ZpZXcgZXZlcnl3
aGVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3
MjQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yQ2xpZW50RWZsOjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvckNsaWVudEVmbDo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRv
ckNsaWVudEVmbDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudEVmbDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZsOjpjaGVja0dyYW1tYXJPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yQ2xpZW50RWZsOjpnZXRHdWVzc2VzRm9yV29yZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRWRpdG9yQ2xpZW50RWZsLmg6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6
OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKToKKwogMjAxNC0wMS0xOCAgQnJpYW4gQnVyZyAgPGJi
dXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBBbm90aGVyIGJ1aWxkIGZpeCBhdHRlbXB0IGZvciBX
aW5kb3dzIGFuZCBFRkwgV2ViS2l0MS4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmNwcAkocmV2aXNpb24gMTYyMjg0KQor
KysgU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzk5LDM4ICszOTksMzggQEAgYm9vbCBFZGl0b3JDbGllbnRFZmw6
OnNob3VsZEVyYXNlTWFya2VycwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEVkaXRvckNs
aWVudEVmbDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKQordm9pZCBF
ZGl0b3JDbGllbnRFZmw6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoU3RyaW5nVmlldykKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEVkaXRvckNsaWVudEVmbDo6bGVhcm5X
b3JkKGNvbnN0IFN0cmluZyYpCit2b2lkIEVkaXRvckNsaWVudEVmbDo6bGVhcm5Xb3JkKFN0cmlu
Z1ZpZXcpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRF
Zmw6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCwgaW50KiwgaW50KikK
K3ZvaWQgRWRpdG9yQ2xpZW50RWZsOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywg
aW50KiwgaW50KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1TdHJpbmcgRWRpdG9y
Q2xpZW50RWZsOjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25z
dCBTdHJpbmcmKQorU3RyaW5nIEVkaXRvckNsaWVudEVmbDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0
aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRFZmw6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4m
LCBpbnQqLCBpbnQqKQordm9pZCBFZGl0b3JDbGllbnRFZmw6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KFN0cmluZ1ZpZXcsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRFZmw6OnVwZGF0ZVNwZWxs
aW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWls
JikKK3ZvaWQgRWRpdG9yQ2xpZW50RWZsOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoU3RyaW5nVmlldywgY29uc3QgR3JhbW1hckRldGFpbCYpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBFZGl0b3JDbGllbnRFZmw6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlz
c3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikKK3ZvaWQgRWRpdG9yQ2xpZW50RWZsOjp1cGRhdGVT
cGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KQEAgLTQ0Niw3ICs0NDYsNyBAQCBib29sIEVkaXRvckNsaWVudEVmbDo6c3Bl
bGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEVkaXRvckNsaWVu
dEVmbDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgU3RyaW5nJiAvKndvcmQqLywgY29uc3QgU3Ry
aW5nJiAvKmNvbnRleHQqLywgVmVjdG9yPFN0cmluZz4mIC8qZ3Vlc3NlcyovKQordm9pZCBFZGl0
b3JDbGllbnRFZmw6OmdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcsIFN0cmluZ1ZpZXcsIFZl
Y3RvcjxTdHJpbmc+JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpJbmRleDogU291cmNl
L1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmgJKHJl
dmlzaW9uIDE2MjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0VkaXRv
ckNsaWVudEVmbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsMjYgKzEzNCwyNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHRleHREaWRDaGFuZ2VJblRleHRBcmVhKEVsZW1lbnQqKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihU
ZXh0Q2hlY2tpbmdUeXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3Bl
bGxEb2N1bWVudChjb25zdCBTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNv
bnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29u
c3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlz
c3BlbGxpbmdMZW5ndGgpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2Vz
dGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwotICAg
IHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5n
dGgsIFdURjo6VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludCogYmFkR3JhbW1hckxlbmd0aCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFtbWFyRGV0YWlsJik7
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29u
c3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQo
U3RyaW5nVmlldyk7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChTdHJpbmdWaWV3KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlz
c3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgdmlydHVhbCBT
dHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmll
dyk7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFdU
Rjo6VmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCog
YmFkR3JhbW1hckxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhTdHJpbmdWaWV3LCBjb25zdCBHcmFtbWFyRGV0YWlsJik7CisgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldyk7
CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdyk7CiAgICAgdmlydHVh
bCBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nl
c0ZvcldvcmQoY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIGNvbnRleHQsIFdURjo6
VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpOworICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9y
V29yZChTdHJpbmdWaWV3LCBTdHJpbmdWaWV3LCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBndWVzc2Vz
KTsKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShib29sIGVuYWJsZWQpOwotICAgIHZpcnR1YWwg
dm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4
dENoZWNraW5nUmVxdWVzdD4pIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdP
ZlN0cmluZyhQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+KSB7IH0KICNp
ZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIHZpcnR1YWwgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5n
VHlwZU1hc2spIHsgcmV0dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRp
ZgogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgeyByZXR1cm4g
dGhpczsgfQogCiBwcml2YXRlOgotICAgIEV2YXNfT2JqZWN0ICptX3ZpZXc7CisgICAgRXZhc19P
YmplY3QqIG1fdmlldzsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2
MjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDE0LTAxLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisK
KyAgICAgICAgU3dpdGNoIHRoZSBUZXh0Q2hlY2tlckNsaWVudCBvdmVyIHRvIHVzaW5nIFN0cmlu
Z1ZpZXcgZXZlcnl3aGVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTI3MjQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVudEd0ay5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50R3RrOjppZ25vcmVXb3JkSW5TcGVsbERvY3Vt
ZW50KToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRHdGs6OmxlYXJuV29yZCk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50R3RrOjpjaGVja1NwZWxsaW5nT2ZT
dHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVudEd0azo6Z2V0QXV0b0Nv
cnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0
Q2hlY2tlckNsaWVudEd0azo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0
OjpUZXh0Q2hlY2tlckNsaWVudEd0azo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50R3RrLmg6CisgICAgICAgIChXZWJLaXQ6OlRl
eHRDaGVja2VyQ2xpZW50R3RrOjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyk6CisKIDIwMTQtMDEt
MTggIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rv
cjogUGFnZSBzaG91bGQgdXNlIHN0ZDo6dW5pcXVlX3B0ciBmb3IgSW5zcGVjdG9yQ29udHJvbGxl
cgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGll
bnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L1RleHRDaGVja2VyQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMTYyMjg0KQorKysgU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRHdGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwzNSArNDksNDAgQEAgYm9vbCBUZXh0Q2hlY2tlckNsaWVudEd0azo6c2hv
dWxkRXJhc2VNYQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFRleHRDaGVja2VyQ2xpZW50
R3RrOjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGV4dCkKK3ZvaWQg
VGV4dENoZWNrZXJDbGllbnRHdGs6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoU3RyaW5nVmll
dyB0ZXh0KQogewotICAgIHdlYmtpdF9zcGVsbF9jaGVja2VyX2lnbm9yZV93b3JkKG1fc3BlbGxD
aGVja2VyLmdldCgpLCB0ZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmluZyB0ZXh0QXNTdHJp
bmcgPSB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKyAgICB3ZWJraXRfc3BlbGxfY2hl
Y2tlcl9pZ25vcmVfd29yZChtX3NwZWxsQ2hlY2tlci5nZXQoKSwgdGV4dEFzU3RyaW5nLnV0Zjgo
KS5kYXRhKCkpOwogfQogCi12b2lkIFRleHRDaGVja2VyQ2xpZW50R3RrOjpsZWFybldvcmQoY29u
c3QgU3RyaW5nJiB0ZXh0KQordm9pZCBUZXh0Q2hlY2tlckNsaWVudEd0azo6bGVhcm5Xb3JkKFN0
cmluZ1ZpZXcgdGV4dCkKIHsKLSAgICB3ZWJraXRfc3BlbGxfY2hlY2tlcl9sZWFybl93b3JkKG1f
c3BlbGxDaGVja2VyLmdldCgpLCB0ZXh0LnV0ZjgoKS5kYXRhKCkpOworICAgIFN0cmluZyB0ZXh0
QXNTdHJpbmcgPSB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKyAgICB3ZWJraXRfc3Bl
bGxfY2hlY2tlcl9sZWFybl93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgpLCB0ZXh0QXNTdHJpbmcu
dXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXJDbGllbnRHdGs6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKQordm9pZCBUZXh0Q2hlY2tlckNs
aWVudEd0azo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgaW50KiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIFN0cmluZyB0
ZXh0QXNTdHJpbmcodGV4dCwgbGVuZ3RoKTsKKyAgICBTdHJpbmcgdGV4dEFzU3RyaW5nID0gdGV4
dC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CiAgICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfY2hl
Y2tfc3BlbGxpbmdfb2Zfc3RyaW5nKG1fc3BlbGxDaGVja2VyLmdldCgpLCB0ZXh0QXNTdHJpbmcu
dXRmOCgpLmRhdGEoKSwgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwog
fQogCi1TdHJpbmcgVGV4dENoZWNrZXJDbGllbnRHdGs6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgaW5wdXRXb3JkKQorU3RyaW5nIFRleHRD
aGVja2VyQ2xpZW50R3RrOjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29y
ZChTdHJpbmdWaWV3IGlucHV0V29yZCkKIHsKLSAgICByZXR1cm4gd2Via2l0X3NwZWxsX2NoZWNr
ZXJfZ2V0X2F1dG9jb3JyZWN0X3N1Z2dlc3Rpb25zX2Zvcl9taXNzcGVsbGVkX3dvcmQobV9zcGVs
bENoZWNrZXIuZ2V0KCksIGlucHV0V29yZC51dGY4KCkuZGF0YSgpKTsKKyAgICBTdHJpbmcgaW5w
dXRXb3JkQXNTdHJpbmcgPSBpbnB1dFdvcmQudG9TdHJpbmdXaXRob3V0Q29weWluZygpOworICAg
IHJldHVybiB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfYXV0b2NvcnJlY3Rfc3VnZ2VzdGlvbnNf
Zm9yX21pc3NwZWxsZWRfd29yZChtX3NwZWxsQ2hlY2tlci5nZXQoKSwgaW5wdXRXb3JkQXNTdHJp
bmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXJDbGllbnRHdGs6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4m
LCBpbnQqLCBpbnQqKQordm9pZCBUZXh0Q2hlY2tlckNsaWVudEd0azo6Y2hlY2tHcmFtbWFyT2ZT
dHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiwgaW50KikKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyQ2xpZW50R3RrOjpn
ZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4
dCwgV1RGOjpWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQgVGV4dENoZWNrZXJDbGllbnRH
dGs6OmdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcgd29yZCwgU3RyaW5nVmlldyBjb250ZXh0
LCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewotICAgIGNoYXIqKiBzdWdnZXN0aW9u
cyA9IHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9ndWVzc2VzX2Zvcl93b3JkKG1fc3BlbGxDaGVj
a2VyLmdldCgpLCB3b3JkLnV0ZjgoKS5kYXRhKCksIGNvbnRleHQudXRmOCgpLmRhdGEoKSk7Cisg
ICAgU3RyaW5nIHdvcmRBc1N0cmluZyA9IHdvcmQudG9TdHJpbmdXaXRob3V0Q29weWluZygpOwor
ICAgIFN0cmluZyBjb250ZXh0QXNTdHJpbmcgPSBjb250ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlp
bmcoKTsKKyAgICBjaGFyKiogc3VnZ2VzdGlvbnMgPSB3ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRf
Z3Vlc3Nlc19mb3Jfd29yZChtX3NwZWxsQ2hlY2tlci5nZXQoKSwgd29yZEFzU3RyaW5nLnV0Zjgo
KS5kYXRhKCksIGNvbnRleHRBc1N0cmluZy51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAoIXN1Z2dl
c3Rpb25zKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L1RleHRDaGVja2VyQ2xpZW50R3RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRHdGsuaAkocmV2aXNpb24g
MTYyMjg0KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJD
bGllbnRHdGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAi
VGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
U3BlbGxDaGVja2VyIFdlYktpdFNwZWxsQ2hlY2tlcjsKIApAQCAtNDMsMTMgKzQ0LDEzIEBAIGNs
YXNzIFRleHRDaGVja2VyQ2xpZW50R3RrIDogcHVibGljIFdlYkMKICAgICAgICAgVGV4dENoZWNr
ZXJDbGllbnRHdGsoV2ViS2l0U3BlbGxDaGVja2VyKik7CiAgICAgICAgIH5UZXh0Q2hlY2tlckNs
aWVudEd0aygpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJD
aGFuZ2VTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSkgY29uc3Q7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFdURjo6U3RyaW5n
Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV1RGOjpTdHJpbmcmKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhcios
IGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xl
bmd0aCk7Ci0gICAgICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0
aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgV1RG
OjpWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNz
ZXNGb3JXb3JkKGNvbnN0IFdURjo6U3RyaW5nJiB3b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29u
dGV4dCwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRD
aGVja2luZ1JlcXVlc3Q+KSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNw
ZWxsRG9jdW1lbnQoU3RyaW5nVmlldyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQo
U3RyaW5nVmlldyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmco
U3RyaW5nVmlldywgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKKyAgICAgICAgdmlydHVhbCBXVEY6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNo
ZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFdURjo6VmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0
aCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChTdHJpbmdWaWV3LCBT
dHJpbmdWaWV3LCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OlRleHRDaGVja2luZ1JlcXVlc3Q+KSB7IH0KIAogICAgICAgICB2b2lkIHVwZGF0ZVNwZWxs
Q2hlY2tpbmdMYW5ndWFnZShjb25zdCBjaGFyKik7CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2MjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE0LTAxLTE4ICBTYW0gV2Vpbmln
ICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3dpdGNoIHRoZSBUZXh0Q2hlY2tlckNsaWVu
dCBvdmVyIHRvIHVzaW5nIFN0cmluZ1ZpZXcgZXZlcnl3aGVyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MjQzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06Cisg
ICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAg
KFdlYkVkaXRvckNsaWVudDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6CisgICAgICAgIChX
ZWJFZGl0b3JDbGllbnQ6OmxlYXJuV29yZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmdldEF1dG9D
b3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkVkaXRvckNs
aWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp1
cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xp
ZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkVk
aXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgorCiAyMDE0LTAxLTE4ICBCcmlhbiBCdXJn
ICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFBhZ2Ugc2hvdWxk
IHVzZSBzdGQ6OnVuaXF1ZV9wdHIgZm9yIEluc3BlY3RvckNvbnRyb2xsZXIKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShy
ZXZpc2lvbiAxNjIyODQpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDMwICsxNTQsMzAgQEAgcHVibGlj
OgogICAgIAogI2lmICFQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCBib29sIHNob3VsZEVyYXNl
TWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGUpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50
KGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxlYXJuV29y
ZChjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
V1RGOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29u
c3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFy
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJM
ZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3Vt
ZW50KFN0cmluZ1ZpZXcpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoU3Ry
aW5nVmlldykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdM
ZW5ndGgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RT
dWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldykgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFdURjo6VmVjdG9yPFdl
YkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFk
R3JhbW1hckxlbmd0aCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBWZWN0b3I8V2ViQ29yZTo6VGV4
dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFdURjo6U3Ry
aW5nJiwgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFdURjo6U3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhTdHJpbmdWaWV3LCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQoU3RyaW5nVmlldykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNob3dTcGVsbGluZ1VJ
KGJvb2wgc2hvdykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHNwZWxsaW5nVUlJc1Nob3dp
bmcoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3Qg
V1RGOjpTdHJpbmcmIHdvcmQsIGNvbnN0IFdURjo6U3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3Rv
cjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRH
dWVzc2VzRm9yV29yZChTdHJpbmdWaWV3IHdvcmQsIFN0cmluZ1ZpZXcgY29udGV4dCwgV1RGOjpW
ZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZTsKICNlbHNlCiAgICAgdmlydHVh
bCBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRl
eHRDaGVja2luZ1R5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBXVEY6OlN0cmluZyYpIG92
ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV1RGOjpTdHJpbmcm
KSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1p
c3NwZWxsaW5nTGVuZ3RoKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIGdl
dEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFdURjo6U3RyaW5n
Jikgb3ZlcnJpZGUgeyByZXR1cm4gIiI7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFy
T2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJM
ZW5ndGgpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KFN0cmluZ1ZpZXcpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBsZWFybldv
cmQoU3RyaW5nVmlldykgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxp
bmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlz
c3BlbGxpbmdMZW5ndGgpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgV1RGOjpTdHJpbmcgZ2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldykgb3ZlcnJp
ZGUgeyByZXR1cm4gIiI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmco
U3RyaW5nVmlldywgV1RGOjpWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZSB7IH0KICAg
ICB2aXJ0dWFsIFZlY3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9m
UGFyYWdyYXBoKFN0cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNr
aW5nVHlwZXMpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsJikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlX
aXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFN0cmluZ1ZpZXcs
IGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KSBvdmVy
cmlkZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVy
cmlkZSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRl
IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNv
bnN0IFdURjo6U3RyaW5nJiB3b3JkLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGV4dCwgV1RGOjpW
ZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nVmlldyB3b3JkLCBTdHJpbmdWaWV3IGNvbnRleHQs
IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcykgb3ZlcnJpZGUgeyB9CiAjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RTdGF0
ZSgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wg
ZW5hYmxlZCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCShyZXZpc2lvbiAxNjIyODQpCisrKyBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTc5NywxNCArNzk3LDYgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRleHREaWRD
aGFuZ2VJblRleAogICAgIENhbGxGb3JtRGVsZWdhdGUobV93ZWJWaWV3LCBAc2VsZWN0b3IodGV4
dERpZENoYW5nZUluVGV4dEFyZWE6aW5GcmFtZTopLCB0ZXh0QXJlYUVsZW1lbnQsIGtpdChlbGVt
ZW50LT5kb2N1bWVudCgpLmZyYW1lKCkpKTsKIH0KIAotc3RhdGljIFJldGFpblB0cjxOU1N0cmlu
Zz4gbnNTdHJpbmdXaXRob3V0Q29weWluZyhTdHJpbmdWaWV3IHN0cmluZ1ZpZXcpCi17Ci0gICAg
aWYgKHN0cmluZ1ZpZXcuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNTdHJp
bmcgYWxsb2NdIGluaXRXaXRoQnl0ZXNOb0NvcHk6Y29uc3RfY2FzdDxMQ2hhcio+KHN0cmluZ1Zp
ZXcuY2hhcmFjdGVyczgoKSkgbGVuZ3RoOnN0cmluZ1ZpZXcubGVuZ3RoKCkgZW5jb2Rpbmc6TlNJ
U09MYXRpbjFTdHJpbmdFbmNvZGluZyBmcmVlV2hlbkRvbmU6Tk9dKTsKLQotICAgIHJldHVybiBh
ZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9j
YXN0PHVuaWNoYXIqPihzdHJpbmdWaWV3LmNoYXJhY3RlcnMxNigpKSBsZW5ndGg6c3RyaW5nVmll
dy5sZW5ndGgoKSBmcmVlV2hlbkRvbmU6Tk9dKTsKLX0KLQogI2lmIFBMQVRGT1JNKElPUykKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50OjpzdXBwcmVzc1NlbGVjdGlvbk5vdGlmaWNhdGlvbnMoKSAKIHsK
QEAgLTg4OSw3ICs4ODEsNyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBXZWJFZGl0b3JD
bGllCiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogCi0gICAgYXV0
byB0ZXh0U3RyaW5nID0gbnNTdHJpbmdXaXRob3V0Q29weWluZyhzdHJpbmcpOworICAgIGF1dG8g
dGV4dFN0cmluZyA9IHN0cmluZy50b05TU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKICAgICBOU0Fy
cmF5ICppbmNvbWluZ1Jlc3VsdHMgPSBbW21fd2ViVmlldyBfVUlLaXREZWxlZ2F0ZUZvcndhcmRl
cl0gY2hlY2tTcGVsbGluZ09mU3RyaW5nOnRleHRTdHJpbmcuZ2V0KCldOwogICAgIFt0ZXh0U3Ry
aW5nIHJlbGVhc2VdOwogICAgIGZvciAoTlNWYWx1ZSAqaW5jb21pbmdSZXN1bHQgaW4gaW5jb21p
bmdSZXN1bHRzKSB7CkBAIC05MTMsMjIgKzkwNSwyMCBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6
c2hvdWxkRXJhc2VNYXJrZXJzCiAgICAgcmV0dXJuIHR5cGUgIT0gVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6aWdub3JlV29yZEluU3BlbGxEb2N1
bWVudChjb25zdCBTdHJpbmcmIHRleHQpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6aWdub3JlV29y
ZEluU3BlbGxEb2N1bWVudChTdHJpbmdWaWV3IHRleHQpCiB7Ci0gICAgW1tOU1NwZWxsQ2hlY2tl
ciBzaGFyZWRTcGVsbENoZWNrZXJdIGlnbm9yZVdvcmQ6dGV4dCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRh
ZygpXTsKKyAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gaWdub3JlV29y
ZDp0ZXh0LnRvTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpIGluU3BlbGxEb2N1bWVudFdp
dGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKV07CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB0ZXh0KQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmxlYXJuV29yZChTdHJpbmdWaWV3IHRleHQpCiB7Ci0gICAgW1tOU1NwZWxsQ2hlY2tlciBzaGFy
ZWRTcGVsbENoZWNrZXJdIGxlYXJuV29yZDp0ZXh0XTsKKyAgICBbW05TU3BlbGxDaGVja2VyIHNo
YXJlZFNwZWxsQ2hlY2tlcl0gbGVhcm5Xb3JkOnRleHQudG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5n
KCkuZ2V0KCldOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3Ry
aW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRp
b24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tT
cGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIE5TU3RyaW5nKiB0ZXh0U3RyaW5nID0g
W1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8VUNo
YXIqPih0ZXh0KSBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT107Ci0gICAgTlNSYW5nZSBy
YW5nZSA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja1NwZWxsaW5n
T2ZTdHJpbmc6dGV4dFN0cmluZyBzdGFydGluZ0F0OjAgbGFuZ3VhZ2U6bmlsIHdyYXA6Tk8gaW5T
cGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIHdvcmRDb3VudDpO
VUxMXTsKLSAgICBbdGV4dFN0cmluZyByZWxlYXNlXTsKKyAgICBhdXRvIHRleHRTdHJpbmcgPSB0
ZXh0LnRvTlNTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tTcGVsbGluZ09mU3RyaW5nOnRl
eHRTdHJpbmcuZ2V0KCkgc3RhcnRpbmdBdDowIGxhbmd1YWdlOm5pbCB3cmFwOk5PIGluU3BlbGxE
b2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSB3b3JkQ291bnQ6TlVMTF07
CiAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24pIHsKICAgICAgICAgLy8gV2ViQ29yZSBleHBl
Y3RzIC0xIHRvIHJlcHJlc2VudCAibm90IGZvdW5kIgogICAgICAgICBpZiAocmFuZ2UubG9jYXRp
b24gPT0gTlNOb3RGb3VuZCkKQEAgLTk0MSwxOSArOTMxLDE4IEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpjaGVja1NwZWxsaW5nT2ZTdHIKICAgICAgICAgKm1pc3NwZWxsaW5nTGVuZ3RoID0gcmFu
Z2UubGVuZ3RoOwogfQogCi1TdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIGlucHV0V29yZCkKK1N0cmlu
ZyBXZWJFZGl0b3JDbGllbnQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRX
b3JkKFN0cmluZ1ZpZXcgaW5wdXRXb3JkKQogewogICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBp
bXBsZW1lbnRlZCB1c2luZyBjdXN0b21pemVkIGFsZ29yaXRobXMgZm9yIHRoZSBwYXJ0aWN1bGFy
IGJyb3dzZXIuCiAgICAgLy8gQ3VycmVudGx5LCBpdCBjb21wdXRlcyBhbiBlbXB0eSBzdHJpbmcu
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIFZlY3RvcjxHcmFt
bWFyRGV0YWlsPiYgZGV0YWlscywgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3Jh
bW1hckxlbmd0aCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhT
dHJpbmdWaWV3IHRleHQsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZGV0YWlscywgaW50KiBiYWRH
cmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkKIHsKICAgICBOU0FycmF5ICpn
cmFtbWFyRGV0YWlsczsKLSAgICBOU1N0cmluZyogdGV4dFN0cmluZyA9IFtbTlNTdHJpbmcgYWxs
b2NdIGluaXRXaXRoQ2hhcmFjdGVyc05vQ29weTpjb25zdF9jYXN0PFVDaGFyKj4odGV4dCkgbGVu
Z3RoOmxlbmd0aCBmcmVlV2hlbkRvbmU6Tk9dOwotICAgIE5TUmFuZ2UgcmFuZ2UgPSBbW05TU3Bl
bGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tHcmFtbWFyT2ZTdHJpbmc6dGV4dFN0
cmluZyBzdGFydGluZ0F0OjAgbGFuZ3VhZ2U6bmlsIHdyYXA6Tk8gaW5TcGVsbERvY3VtZW50V2l0
aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGRldGFpbHM6JmdyYW1tYXJEZXRhaWxzXTsK
LSAgICBbdGV4dFN0cmluZyByZWxlYXNlXTsKKyAgICBhdXRvIHRleHRTdHJpbmcgPSB0ZXh0LnRv
TlNTdHJpbmdXaXRob3V0Q29weWluZygpOworICAgIE5TUmFuZ2UgcmFuZ2UgPSBbW05TU3BlbGxD
aGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gY2hlY2tHcmFtbWFyT2ZTdHJpbmc6dGV4dFN0cmlu
Zy5nZXQoKSBzdGFydGluZ0F0OjAgbGFuZ3VhZ2U6bmlsIHdyYXA6Tk8gaW5TcGVsbERvY3VtZW50
V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIGRldGFpbHM6JmdyYW1tYXJEZXRhaWxz
XTsKICAgICBpZiAoYmFkR3JhbW1hckxvY2F0aW9uKQogICAgICAgICAvLyBXZWJDb3JlIGV4cGVj
dHMgLTEgdG8gcmVwcmVzZW50ICJub3QgZm91bmQiCiAgICAgICAgICpiYWRHcmFtbWFyTG9jYXRp
b24gPSAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RGb3VuZCkgPyAtMSA6IHN0YXRpY19jYXN0PGlu
dD4ocmFuZ2UubG9jYXRpb24pOwpAQCAtMTA1OCwxNCArMTA0NywxNCBAQCBzdGF0aWMgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gY29yZShOCiAKIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyBzdHJpbmcs
IFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpCiB7Ci0gICAgYXV0byB0ZXh0U3Ry
aW5nID0gbnNTdHJpbmdXaXRob3V0Q29weWluZyhzdHJpbmcpOworICAgIGF1dG8gdGV4dFN0cmlu
ZyA9IHN0cmluZy50b05TU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKIAogICAgIE5TQXJyYXkgKmlu
Y29taW5nUmVzdWx0cyA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVj
a1N0cmluZzp0ZXh0U3RyaW5nLmdldCgpIHJhbmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0U3RyaW5n
IGxlbmd0aF0pIHR5cGVzOihjaGVja2luZ1R5cGVzfE5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3Jh
cGh5KSBvcHRpb25zOm5pbCBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3Vt
ZW50VGFnKCkgb3J0aG9ncmFwaHk6TlVMTCB3b3JkQ291bnQ6TlVMTF07CiAKICAgICByZXR1cm4g
Y29yZShpbmNvbWluZ1Jlc3VsdHMsIGNoZWNraW5nVHlwZXMpOwogfQogCi12b2lkIFdlYkVkaXRv
ckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYg
YmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKK3Zv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3Ry
aW5nVmlldyBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0
YWlsKQogewogICAgIE5TTXV0YWJsZUFycmF5KiBjb3JyZWN0aW9ucyA9IFtOU011dGFibGVBcnJh
eSBhcnJheV07CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdyYW1tYXJEZXRhaWwuZ3Vl
c3Nlcy5zaXplKCk7IGkrKykgewpAQCAtMTA3NiwxMiArMTA2NSwxMiBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpCiAgICAgTlNTdHJpbmcqIGdyYW1tYXJVc2VyRGVz
Y3JpcHRpb24gPSBncmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbjsKICAgICBOU0RpY3Rpb25h
cnkqIGdyYW1tYXJEZXRhaWxEaWN0ID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOltOU1ZhbHVlIHZhbHVlV2l0aFJhbmdlOmdyYW1tYXJSYW5nZV0sIE5TR3JhbW1h
clJhbmdlLCBncmFtbWFyVXNlckRlc2NyaXB0aW9uLCBOU0dyYW1tYXJVc2VyRGVzY3JpcHRpb24s
IGNvcnJlY3Rpb25zLCBOU0dyYW1tYXJDb3JyZWN0aW9ucywgbmlsXTsKICAgICAKLSAgICBbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBkYXRlU3BlbGxpbmdQYW5lbFdpdGhH
cmFtbWFyU3RyaW5nOmJhZEdyYW1tYXJQaHJhc2UgZGV0YWlsOmdyYW1tYXJEZXRhaWxEaWN0XTsK
KyAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBkYXRlU3BlbGxpbmdQ
YW5lbFdpdGhHcmFtbWFyU3RyaW5nOmJhZEdyYW1tYXJQaHJhc2UudG9OU1N0cmluZ1dpdGhvdXRD
b3B5aW5nKCkuZ2V0KCkgZGV0YWlsOmdyYW1tYXJEZXRhaWxEaWN0XTsKIH0KIAotdm9pZCBXZWJF
ZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3QgU3Ry
aW5nJiBtaXNzcGVsbGVkV29yZCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcgbWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAg
W1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxX
aXRoTWlzc3BlbGxlZFdvcmQ6bWlzc3BlbGxlZFdvcmRdOworICAgIFtbTlNTcGVsbENoZWNrZXIg
c2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0aE1pc3NwZWxsZWRXb3Jk
Om1pc3NwZWxsZWRXb3JkLnRvTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpXTsKIH0KIAog
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnNob3dTcGVsbGluZ1VJKGJvb2wgc2hvdykKQEAgLTEwOTgs
MTYgKzEwODcsMTcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJc1Nob3dpbgog
ICAgIHJldHVybiBbW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHNwZWxsaW5n
UGFuZWxdIGlzVmlzaWJsZV07CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2Vz
Rm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9y
PFN0cmluZz4mIGd1ZXNzZXMpIHsKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9y
V29yZChTdHJpbmdWaWV3IHdvcmQsIFN0cmluZ1ZpZXcgY29udGV4dCwgVmVjdG9yPFN0cmluZz4m
IGd1ZXNzZXMpIHsKICAgICBndWVzc2VzLmNsZWFyKCk7CiAgICAgTlNTdHJpbmcqIGxhbmd1YWdl
ID0gbmlsOwogICAgIE5TT3J0aG9ncmFwaHkqIG9ydGhvZ3JhcGh5ID0gbmlsOwogICAgIE5TU3Bl
bGxDaGVja2VyICpjaGVja2VyID0gW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl07
CiAgICAgaWYgKGNvbnRleHQubGVuZ3RoKCkpIHsKLSAgICAgICAgW2NoZWNrZXIgY2hlY2tTdHJp
bmc6Y29udGV4dCByYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSB0eXBlczpO
U1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeSBvcHRpb25zOjAgaW5TcGVsbERvY3VtZW50V2l0
aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpIG9ydGhvZ3JhcGh5OiZvcnRob2dyYXBoeSB3
b3JkQ291bnQ6MF07Ci0gICAgICAgIGxhbmd1YWdlID0gW2NoZWNrZXIgbGFuZ3VhZ2VGb3JXb3Jk
UmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5sZW5ndGgoKSkgaW5TdHJpbmc6Y29udGV4dCBv
cnRob2dyYXBoeTpvcnRob2dyYXBoeV07CisgICAgICAgIGF1dG8gY29udGV4dFN0cmluZyA9IGNv
bnRleHQudG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CisgICAgICAgIFtjaGVja2VyIGNoZWNr
U3RyaW5nOmNvbnRleHRTdHJpbmcuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29udGV4dC5s
ZW5ndGgoKSkgdHlwZXM6TlNUZXh0Q2hlY2tpbmdUeXBlT3J0aG9ncmFwaHkgb3B0aW9uczowIGlu
U3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBo
eTomb3J0aG9ncmFwaHkgd29yZENvdW50OjBdOworICAgICAgICBsYW5ndWFnZSA9IFtjaGVja2Vy
IGxhbmd1YWdlRm9yV29yZFJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQubGVuZ3RoKCkpIGlu
U3RyaW5nOmNvbnRleHRTdHJpbmcuZ2V0KCkgb3J0aG9ncmFwaHk6b3J0aG9ncmFwaHldOwogICAg
IH0KLSAgICBOU0FycmF5KiBzdHJpbmdzQXJyYXkgPSBbY2hlY2tlciBndWVzc2VzRm9yV29yZFJh
bmdlOk5TTWFrZVJhbmdlKDAsIHdvcmQubGVuZ3RoKCkpIGluU3RyaW5nOndvcmQgbGFuZ3VhZ2U6
bGFuZ3VhZ2UgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygp
XTsKKyAgICBOU0FycmF5KiBzdHJpbmdzQXJyYXkgPSBbY2hlY2tlciBndWVzc2VzRm9yV29yZFJh
bmdlOk5TTWFrZVJhbmdlKDAsIHdvcmQubGVuZ3RoKCkpIGluU3RyaW5nOndvcmQudG9OU1N0cmlu
Z1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCkgbGFuZ3VhZ2U6bGFuZ3VhZ2UgaW5TcGVsbERvY3VtZW50
V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpXTsKICAgICB1bnNpZ25lZCBjb3VudCA9
IFtzdHJpbmdzQXJyYXkgY291bnRdOwogCiAgICAgaWYgKGNvdW50ID4gMCkgewpJbmRleDogU291
cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2lu
L0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMjg0KQorKysgU291cmNlL1dlYktpdC93aW4vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTQtMDEtMTggIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBTd2l0Y2ggdGhlIFRleHRDaGVja2VyQ2xp
ZW50IG92ZXIgdG8gdXNpbmcgU3RyaW5nVmlldyBldmVyeXdoZXJlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcyNDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHA6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6Omlnbm9yZVdvcmRJblNwZWxs
RG9jdW1lbnQpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpsZWFybldvcmQpOgorICAgICAg
ICAoV2ViRWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAgICAgICAoV2Vi
RWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6
CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAg
ICAgKFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToK
KyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAg
ICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaDoKKwogMjAxNC0wMS0xOCAg
QnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBQ
YWdlIHNob3VsZCB1c2Ugc3RkOjp1bmlxdWVfcHRyIGZvciBJbnNwZWN0b3JDb250cm9sbGVyCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAJKHJldmlzaW9uIDE2MjI4NCkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzOCw3ICs2
MzgsNyBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6c2hvdWxkRXJhc2VNYXJrZXJzCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KGNvbnN0IFN0cmluZyYgd29yZCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjppZ25vcmVX
b3JkSW5TcGVsbERvY3VtZW50KFN0cmluZ1ZpZXcgd29yZCkKIHsKICAgICBDT01QdHI8SVdlYkVk
aXRpbmdEZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxl
Z2F0ZSgmZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC02NDgsNyArNjQ4LDcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6Omlnbm9yZVdvcmRJblNwZWxsRAogICAgIGVkLT5pZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KG1fd2ViVmlldywgQlN0cmluZyh3b3JkKSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpsZWFybldvcmQoY29uc3QgU3RyaW5nJiB3b3JkKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6
OmxlYXJuV29yZChTdHJpbmdWaWV3IHdvcmQpCiB7CiAgICAgQ09NUHRyPElXZWJFZGl0aW5nRGVs
ZWdhdGU+IGVkOwogICAgIGlmIChGQUlMRUQobV93ZWJWaWV3LT5lZGl0aW5nRGVsZWdhdGUoJmVk
KSkgfHwgIWVkLmdldCgpKQpAQCAtNjU3LDcgKzY1Nyw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpsZWFybldvcmQoY29uc3QgU3QKICAgICBlZC0+bGVhcm5Xb3JkKEJTdHJpbmcod29yZCkpOwog
fQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVD
aGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlz
c3BlbGxpbmdMZW5ndGgpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3Ry
aW5nKFN0cmluZ1ZpZXcgdGV4dCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3Nw
ZWxsaW5nTGVuZ3RoKQogewogICAgICptaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CiAgICAgKm1p
c3NwZWxsaW5nTGVuZ3RoID0gMDsKQEAgLTY3MCwxNCArNjcwLDE0IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHIKICAgICBlZC0+Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KG1fd2ViVmlldywgdGV4dCwgbGVuZ3RoLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGlu
Z0xlbmd0aCk7CiB9CiAKLVN0cmluZyBXZWJFZGl0b3JDbGllbnQ6OmdldEF1dG9Db3JyZWN0U3Vn
Z2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgaW5wdXRXb3JkKQorU3RyaW5n
IFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdv
cmQoU3RyaW5nVmlldyBpbnB1dFdvcmQpCiB7CiAgICAgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGlt
cGxlbWVudGVkIHVzaW5nIGN1c3RvbWl6ZWQgYWxnb3JpdGhtcyBmb3IgdGhlIHBhcnRpY3VsYXIg
YnJvd3Nlci4KICAgICAvLyBDdXJyZW50bHksIGl0IGNvbXB1dGVzIGFuIGVtcHR5IHN0cmluZy4K
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dy
YW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1t
YXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFt
bWFyTGVuZ3RoKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKFN0
cmluZ1ZpZXcsIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZGV0YWlscywgaW50KiBiYWRHcmFtbWFy
TG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkKIHsKICAgICBkZXRhaWxzLmNsZWFyKCk7
CiAgICAgKmJhZEdyYW1tYXJMb2NhdGlvbiA9IC0xOwpAQCAtNzIyLDcgKzcyMiw3IEBAIHZvaWQg
V2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmkKICAgICB9CiB9CiAKLXZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3Ry
aW5nJiBzdHJpbmcsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGRldGFpbCkKK3ZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5n
VmlldyBzdHJpbmcsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGRldGFpbCkKIHsKICAg
ICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZp
ZXctPmVkaXRpbmdEZWxlZ2F0ZSgmZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC03MzksNyArNzM5LDcg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaQogICAgICAgICBTeXNG
cmVlU3RyaW5nKGd1ZXNzZXNCU1RSc1tpXSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYgd29yZCkKK3Zv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0
cmluZ1ZpZXcgd29yZCkKIHsKICAgICBDT01QdHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7CiAg
ICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVkaXRpbmdEZWxlZ2F0ZSgmZWQpKSB8fCAhZWQuZ2V0
KCkpCkBAIC03NzAsNyArNzcwLDcgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNwZWxsaW5nVUlJ
c1Nob3dpbgogICAgIHJldHVybiAhIXNob3dpbmc7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYgY29u
dGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0
R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nVmlldyB3b3JkLCBTdHJpbmdWaWV3LCBWZWN0b3I8U3RyaW5n
PiYgZ3Vlc3NlcykKIHsKICAgICBndWVzc2VzLmNsZWFyKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCShyZXZpc2lv
biAxNjIyODQpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTYgKzk4LDE2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGhhbmRsZUlucHV0TWV0aG9kS2V5ZG93bihXZWJDb3JlOjpLZXlib2FyZEV2ZW50Kik7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24o
V2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGlnbm9y
ZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICB2aXJ0dWFsIHZv
aWQgbGVhcm5Xb3JkKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNr
U3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxp
bmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdmlydHVhbCBXVEY6OlN0
cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBXVEY6
OlN0cmluZyYpOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBV
Q2hhciosIGludCBsZW5ndGgsIFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCog
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpOwotICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgV1RGOjpTdHJpbmcm
LCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBkZXRhaWwpOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFdURjo6U3RyaW5nJik7
CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoU3RyaW5nVmlldyk7
CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChTdHJpbmdWaWV3KTsKKyAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgdmlydHVhbCBXVEY6OlN0cmluZyBn
ZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPFdl
YkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFk
R3JhbW1hckxlbmd0aCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhTdHJpbmdWaWV3LCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJiBkZXRh
aWwpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KFN0cmluZ1ZpZXcpOwogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cp
OwogICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCk7Ci0gICAgdmlydHVhbCB2
b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFdURjo6U3RyaW5nJiB3b3JkLCBjb25zdCBXVEY6
OlN0cmluZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nVmlldyB3b3JkLCBTdHJpbmdW
aWV3IGNvbnRleHQsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcyk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgd2lsbFNldElucHV0TWV0aG9kU3RhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5wdXRNZXRob2RTdGF0ZShib29sKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221580</attachid>
            <date>2014-01-18 21:15:43 -0800</date>
            <delta_ts>2016-05-29 15:54:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-127243-20140118211542.patch</filename>
            <type>text/plain</type>
            <size>79210</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjIyODUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTAxLTE4ICBTYW0gV2VpbmlnICA8c2FtQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgU3dpdGNoIHRoZSBUZXh0Q2hlY2tlckNsaWVudCBvdmVyIHRv
IHVzaW5nIFN0cmluZ1ZpZXcgZXZlcnl3aGVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MjQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9BdG9taWNTdHJpbmcuaDoKKyAgICAgICAg
KFdURjo6QXRvbWljU3RyaW5nOjpkZXByZWNhdGVkQ2hhcmFjdGVycyk6CisgICAgICAgICogd3Rm
L3RleHQvU3RyaW5nVmlldy5oOgorICAgICAgICAoV1RGOjpTdHJpbmdWaWV3Ojp0b05TU3RyaW5n
KToKKyAgICAgICAgKFdURjo6U3RyaW5nVmlldzo6dG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5nKToK
KwogMjAxNC0wMS0xOCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciB0aGUgdmlld3NvdXJjZSBhdHRyaWJ1dGUKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvQXRvbWljU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNl
L1dURi93dGYvdGV4dC9BdG9taWNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQs
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
LmlzOEJpdCgpOyB9CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpOyB9IC8vIEZJWE1FOiBEZWxldGUgdGhp
cy4KKyAgICBjb25zdCBVQ2hhciogZGVwcmVjYXRlZENoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVy
biBtX3N0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVycygpOyB9IC8vIEZJWE1FOiBEZWxldGUgdGhp
cy4KICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25zdCB7IHJldHVybiBtX3N0cmlu
Zy5jaGFyYWN0ZXJzOCgpOyB9CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0
IHsgcmV0dXJuIG1fc3RyaW5nLmNoYXJhY3RlcnMxNigpOyB9CiAgICAgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQv
U3RyaW5nVmlldy5oCShyZXZpc2lvbiAxNjIyODUpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ1ZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNywyNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjcmVhdGVXaXRob3V0Q29weWluZyhjaGFyYWN0ZXJz
MTYoKSwgbGVuZ3RoKCkpOwogICAgIH0KIAorI2lmZGVmIF9fT0JKQ19fCisgICAgUmV0YWluUHRy
PE5TU3RyaW5nPiB0b05TU3RyaW5nKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpczhCaXQo
KSkKKyAgICAgICAgICAgIHJldHVybiBhZG9wdE5TKFtbTlNTdHJpbmcgYWxsb2NdIGluaXRXaXRo
Qnl0ZXM6Y29uc3RfY2FzdDxMQ2hhcio+KGNoYXJhY3RlcnM4KCkpIGxlbmd0aDpsZW5ndGgoKSBl
bmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nXSk7CisKKyAgICAgICAgcmV0dXJuIGFk
b3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzOmNvbnN0X2Nhc3Q8dW5p
Y2hhcio+KGNoYXJhY3RlcnMxNigpKSBsZW5ndGg6bGVuZ3RoKCldKTsKKyAgICB9CisKKyAgICBS
ZXRhaW5QdHI8TlNTdHJpbmc+IHRvTlNTdHJpbmdXaXRob3V0Q29weWluZygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXR1cm4gYWRvcHROUyhbW05T
U3RyaW5nIGFsbG9jXSBpbml0V2l0aEJ5dGVzTm9Db3B5OmNvbnN0X2Nhc3Q8TENoYXIqPihjaGFy
YWN0ZXJzOCgpKSBsZW5ndGg6bGVuZ3RoKCkgZW5jb2Rpbmc6TlNJU09MYXRpbjFTdHJpbmdFbmNv
ZGluZyBmcmVlV2hlbkRvbmU6Tk9dKTsKKworICAgICAgICByZXR1cm4gYWRvcHROUyhbW05TU3Ry
aW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDx1bmljaGFyKj4o
Y2hhcmFjdGVyczE2KCkpIGxlbmd0aDpsZW5ndGgoKSBmcmVlV2hlbkRvbmU6Tk9dKTsKKyAgICB9
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lv
biAxNjIyODUpCisrKyBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwzOSBAQAorMjAxNC0wMS0xOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgor
CisgICAgICAgIFN3aXRjaCB0aGUgVGV4dENoZWNrZXJDbGllbnQgb3ZlciB0byB1c2luZyBTdHJp
bmdWaWV3IGV2ZXJ5d2hlcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzI0MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKToKKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5t
bToKKyAgICAgICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcpOgorICAgICAgICAoQVhB
dHRyaWJ1dGVkU3RyaW5nQXBwZW5kVGV4dCk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOl0pOgor
ICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWlzc3BlbGxlZFdvcmRBdENhcmV0T3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
Om1pc3NwZWxsZWRTZWxlY3Rpb25TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKToKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kQmFkR3Jh
bW1hcnMpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZE1pc3NwZWxsaW5ncyk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJh
ZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmly
c3RCYWRHcmFtbWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6Z3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6dGV4dFN0
cmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nUGFyYWdyYXBoOjp0ZXh0
U3Vic3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hl
Y2tpbmdTdWJzdHJpbmcpOgorICAgICAgICAqIGxvYWRlci9FbXB0eUNsaWVudHMuaDoKKyAgICAg
ICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENo
ZWNrZXJDbGllbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQlN0cmluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpCU3RyaW5nOjpCU3RyaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
QlN0cmluZy5oOgorCiAyMDE0LTAxLTE4ICBBbGJlcnRvIEdhcmNpYSAgPGJlcnRvQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0NvZGVHZW5lcmF0b3JKU10gU29ydCBvdXRwdXQgb2YgU3RydWN0dXJl
RmxhZ3MgYW5kIGZ1bmN0aW9uIHBhcmFtZXRlcnMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMTYy
Mjg1KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMwLDEzICszMzAsMTIgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjpoYXNNaXNzcGVsbGluZwogICAgIGlmICghdGV4dENoZWNrZXIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb25zdCBVQ2hhciogY2hhcnMgPSBzdHJpbmdWYWx1
ZSgpLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgaW50IGNoYXJzTGVuZ3RoID0gc3RyaW5n
VmFsdWUoKS5sZW5ndGgoKTsKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHJpbmdWYWx1ZSgpOwogICAg
IGJvb2wgaXNNaXNzcGVsbGVkID0gZmFsc2U7CiAKICAgICBpZiAodW5pZmllZFRleHRDaGVja2Vy
RW5hYmxlZChmcmFtZSkpIHsKICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVz
dWx0czsKLSAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dENoZWNrZXIsIGNoYXJzLCBj
aGFyc0xlbmd0aCwgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKKyAgICAgICAg
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dENoZWNrZXIsIFN0cmluZ1ZpZXcodmFsdWUpLCBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMpOwogICAgICAgICBpZiAoIXJlc3VsdHMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJu
IGlzTWlzc3BlbGxlZDsKQEAgLTM0NCw3ICszNDMsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Omhhc01pc3NwZWxsaW5nCiAKICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwogICAg
IGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7Ci0gICAgdGV4dENoZWNrZXItPmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjaGFycywgY2hhcnNMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAm
bWlzc3BlbGxpbmdMZW5ndGgpOworICAgIHRleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJp
bmcoU3RyaW5nVmlldyh2YWx1ZSksICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdM
ZW5ndGgpOwogICAgIGlmIChtaXNzcGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVsbGluZ0xvY2F0aW9u
ICE9IC0xKQogICAgICAgICBpc01pc3NwZWxsZWQgPSB0cnVlOwogICAgIApJbmRleDogU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDE2MjI4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC03OTMsNyArNzkzLDcgQEAgc3RhdGljIHZvaWQg
QVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1bwogICAgICAgICBbYXR0clN0cmluZyByZW1vdmVB
dHRyaWJ1dGU6TlNBY2Nlc3NpYmlsaXR5QmxvY2tRdW90ZUxldmVsQXR0cmlidXRlIHJhbmdlOnJh
bmdlXTsKIH0KIAotc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZyhOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBjb25zdCBVQ2hh
ciogY2hhcnMsIGludCBjaGFyTGVuZ3RoLCBOU1JhbmdlIHJhbmdlKQorc3RhdGljIHZvaWQgQVhB
dHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRy
U3RyaW5nLCBOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHN0cmluZywgTlNSYW5nZSByYW5nZSkKIHsK
ICAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChub2RlLT5kb2N1bWVudCgpLmZyYW1l
KCkpKSB7CiAgICAgICAgIC8vIENoZWNrIHRoZSBzcGVsbGluZyBkaXJlY3RseSBzaW5jZSBkb2N1
bWVudC0+bWFya2Vyc0Zvck5vZGUoKSBkb2VzIG5vdCBzdG9yZSB0aGUgbWlzc3BlbGxlZCBtYXJr
aW5nIHdoZW4gdGhlIGN1cnNvciBpcyBpbiBhIHdvcmQuCkBAIC04MDEsNyArODAxLDcgQEAgc3Rh
dGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVsbGluZwogICAgICAgICAKICAgICAgICAg
Ly8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVj
a2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQgV0syCiAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNoZWNrZXIs
IGNoYXJzLCBjaGFyTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMpOwor
ICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaChjaGVja2VyLCBzdHJpbmcsIFRleHRDaGVja2lu
Z1R5cGVTcGVsbGluZywgcmVzdWx0cyk7CiAgICAgICAgIAogICAgICAgICBzaXplX3Qgc2l6ZSA9
IHJlc3VsdHMuc2l6ZSgpOwogICAgICAgICBOU051bWJlciogdHJ1ZVZhbHVlID0gW05TTnVtYmVy
IG51bWJlcldpdGhCb29sOllFU107CkBAIC04MTUsMTQgKzgxNSwxNCBAQCBzdGF0aWMgdm9pZCBB
WEF0dHJpYnV0ZVN0cmluZ1NldFNwZWxsaW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
CisgICAgaW50IGNoYXJMZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgaW50IGN1cnJlbnRQ
b3NpdGlvbiA9IDA7CiAgICAgd2hpbGUgKGNoYXJMZW5ndGggPiAwKSB7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBvc2l0aW9uOwogICAgICAgICBUZXh0
Q2hlY2tlckNsaWVudCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKS0+ZWRpdG9y
KCkudGV4dENoZWNrZXIoKTsKICAgICAgICAgCiAgICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0
aW9uID0gLTE7CiAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgIGNo
ZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFyRGF0YSwgY2hhckxlbmd0aCwgJm1pc3Nw
ZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgIGNoZWNrZXItPmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhzdHJpbmcuc3Vic3RyaW5nKGN1cnJlbnRQb3NpdGlvbiwgY2hh
ckxlbmd0aCksICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAg
ICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbiA9PSAtMSB8fCAhbWlzc3BlbGxpbmdMZW5ndGgp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCkBAIC04ODUsMTcgKzg4NSwxOCBAQCBzdGF0
aWMgdm9pZCBBWEF0dHJpYnV0ZVN0cmluZ1NldEVsZW1lbnQoCiAgICAgICAgIFthdHRyU3RyaW5n
IHJlbW92ZUF0dHJpYnV0ZTphdHRyaWJ1dGUgcmFuZ2U6cmFuZ2VdOwogfQogCi1zdGF0aWMgdm9p
ZCBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcq
IGF0dHJTdHJpbmcsIE5vZGUqIG5vZGUsIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbmd0aCkK
Ky8vIGNvbnN0IFVDaGFyKiBjaGFycywgaW50IGxlbmd0aAorc3RhdGljIHZvaWQgQVhBdHRyaWJ1
dGVkU3RyaW5nQXBwZW5kVGV4dChOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5n
LCBOb2RlKiBub2RlLCBTdHJpbmdWaWV3IHN0cmluZykKIHsKICAgICAvLyBza2lwIGludmlzaWJs
ZSB0ZXh0CiAgICAgaWYgKCFub2RlLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgLy8gZWFzaWVyIHRvIGNhbGN1bGF0ZSB0aGUgcmFuZ2UgYmVmb3JlIGFwcGVuZGluZyB0
aGUgc3RyaW5nCi0gICAgTlNSYW5nZSBhdHRyU3RyaW5nUmFuZ2UgPSBOU01ha2VSYW5nZShbYXR0
clN0cmluZyBsZW5ndGhdLCBsZW5ndGgpOworICAgIE5TUmFuZ2UgYXR0clN0cmluZ1JhbmdlID0g
TlNNYWtlUmFuZ2UoW2F0dHJTdHJpbmcgbGVuZ3RoXSwgc3RyaW5nLmxlbmd0aCgpKTsKICAgICAK
ICAgICAvLyBhcHBlbmQgdGhlIHN0cmluZyBmcm9tIHRoaXMgbm9kZQotICAgIFtbYXR0clN0cmlu
ZyBtdXRhYmxlU3RyaW5nXSBhcHBlbmRTdHJpbmc6W05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0
ZXJzOmNoYXJzIGxlbmd0aDpsZW5ndGhdXTsKKyAgICBbW2F0dHJTdHJpbmcgbXV0YWJsZVN0cmlu
Z10gYXBwZW5kU3RyaW5nOnN0cmluZy50b05TU3RyaW5nKCkuZ2V0KCldOwogICAgIAogICAgIC8v
IGFkZCBuZXcgYXR0cmlidXRlcyBhbmQgcmVtb3ZlIGlycmVsZXZhbnQgaW5oZXJpdGVkIG9uZXMK
ICAgICAvLyBOT1RFOiBjb2xvciBhdHRyaWJ1dGVzIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBiZWNh
dXNlIC1bTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhZGRBdHRyaWJ1dGU6IHZhbHVlOiByYW5n
ZTpdIGRvZXMgbm90IG1lcmdlCkBAIC05MTYsNyArOTE3LDcgQEAgc3RhdGljIHZvaWQgQVhBdHRy
aWJ1dGVkU3RyaW5nQXBwZW5kVGV4dAogICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0RWxlbWVudChh
dHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlMaW5rVGV4dEF0dHJpYnV0ZSwgQWNjZXNzaWJpbGl0
eU9iamVjdDo6YW5jaG9yRWxlbWVudEZvck5vZGUobm9kZSksIGF0dHJTdHJpbmdSYW5nZSk7CiAg
ICAgCiAgICAgLy8gZG8gc3BlbGxpbmcgbGFzdCBiZWNhdXNlIGl0IHRlbmRzIHRvIGJyZWFrIHVw
IHRoZSByYW5nZQotICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcoYXR0clN0cmluZywg
bm9kZSwgY2hhcnMsIGxlbmd0aCwgYXR0clN0cmluZ1JhbmdlKTsKKyAgICBBWEF0dHJpYnV0ZVN0
cmluZ1NldFNwZWxsaW5nKGF0dHJTdHJpbmcsIG5vZGUsIHN0cmluZywgYXR0clN0cmluZ1Jhbmdl
KTsKIH0KIAogc3RhdGljIE5TU3RyaW5nKiBuc1N0cmluZ0ZvclJlcGxhY2VkTm9kZShOb2RlKiBy
ZXBsYWNlZE5vZGUpCkBAIC05NjgsOSArOTY5LDkgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nKilk
b0FYQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgLy8gQWRkIHRoZSB0ZXh0IG9mIHRoZSBsaXN0
IG1hcmtlciBpdGVtIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgICAgIFN0cmluZyBsaXN0TWFya2Vy
VGV4dCA9IG1fb2JqZWN0LT5saXN0TWFya2VyVGV4dEZvck5vZGVBbmRQb3NpdGlvbihub2RlLCBW
aXNpYmxlUG9zaXRpb24oaXQucmFuZ2UoKS0+c3RhcnRQb3NpdGlvbigpKSk7CiAgICAgICAgICAg
ICBpZiAoIWxpc3RNYXJrZXJUZXh0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBBWEF0dHJp
YnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUsIGxpc3RNYXJrZXJUZXh0LmRl
cHJlY2F0ZWRDaGFyYWN0ZXJzKCksIGxpc3RNYXJrZXJUZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAg
ICAgICAgICBBWEF0dHJpYnV0ZWRTdHJpbmdBcHBlbmRUZXh0KGF0dHJTdHJpbmcsIG5vZGUsIGxp
c3RNYXJrZXJUZXh0KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQVhBdHRyaWJ1dGVkU3Ry
aW5nQXBwZW5kVGV4dChhdHRyU3RyaW5nLCBub2RlLCBpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0
aCgpKTsKKyAgICAgICAgICAgIEFYQXR0cmlidXRlZFN0cmluZ0FwcGVuZFRleHQoYXR0clN0cmlu
Zywgbm9kZSwgU3RyaW5nVmlldyhpdC5jaGFyYWN0ZXJzKCksIGl0Lmxlbmd0aCgpKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBOb2RlKiByZXBsYWNlZE5vZGUgPSBub2RlLT5jaGls
ZE5vZGUob2Zmc2V0KTsKICAgICAgICAgICAgIE5TU3RyaW5nICphdHRhY2htZW50U3RyaW5nID0g
bnNTdHJpbmdGb3JSZXBsYWNlZE5vZGUocmVwbGFjZWROb2RlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQAogI2luY2x1ZGUg
IlZpc2libGVVbml0cy5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAjaW5jbHVkZSAibWFy
a3VwLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogI2luY2x1ZGUgPHd0Zi91
bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5o
PgogCkBAIC0yMTA2LDcgKzIxMDcsNyBAQCBTdHJpbmcgRWRpdG9yOjptaXNzcGVsbGVkV29yZEF0
Q2FyZXRPclJhCiAgICAgaW50IHdvcmRMZW5ndGggPSB3b3JkLmxlbmd0aCgpOwogICAgIGludCBt
aXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CiAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsK
LSAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcod29yZC5kZXByZWNhdGVk
Q2hhcmFjdGVycygpLCB3b3JkTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxs
aW5nTGVuZ3RoKTsKKyAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3Ry
aW5nVmlldyh3b3JkKSwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7
CiAKICAgICByZXR1cm4gbWlzc3BlbGxpbmdMZW5ndGggPT0gd29yZExlbmd0aCA/IHdvcmQgOiBT
dHJpbmcoKTsKIH0KQEAgLTIxMjAsNyArMjEyMSw3IEBAIFN0cmluZyBFZGl0b3I6Om1pc3NwZWxs
ZWRTZWxlY3Rpb25TdHJpbmcKIAogICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CiAg
ICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoc2VsZWN0ZWRTdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgbGVu
Z3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB0ZXh0
Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldyhzZWxlY3RlZFN0cmlu
ZyksICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOwogICAgIAogICAg
IC8vIFRoZSBzZWxlY3Rpb24gb25seSBjb3VudHMgYXMgbWlzc3BlbGxlZCBpZiB0aGUgc2VsZWN0
ZWQgdGV4dCBpcyBleGFjdGx5IG9uZSBtaXNzcGVsbGVkIHdvcmQKICAgICBpZiAobWlzc3BlbGxp
bmdMZW5ndGggIT0gbGVuZ3RoKQpAQCAtMjEzMCw3ICsyMTMxLDcgQEAgU3RyaW5nIEVkaXRvcjo6
bWlzc3BlbGxlZFNlbGVjdGlvblN0cmluZwogICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1h
a2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05TU3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5TcGVs
bERvY3VtZW50V2l0aFRhZzpdIHdvcmsKICAgICAvLyBjb3JyZWN0bHk7IHRoYXQgY2FsbCBiZWhh
dmVzIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIGRp
c3BsYXlpbmcgYSBtaXNzcGVsbGluZwogICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJvci4KLSAgICBj
bGllbnQoKS0+dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzZWxlY3RlZFN0cmlu
Zyk7CisgICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3Ry
aW5nVmlldyhzZWxlY3RlZFN0cmluZykpOwogICAgIAogICAgIHJldHVybiBzZWxlY3RlZFN0cmlu
ZzsKIH0KQEAgLTI0MjcsOCArMjQyOCw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3IKICAgICB9CiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1
bHRzOwotICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHRDaGVja2VyKCksIHBhcmFncmFwaFRv
Q2hlY2sudGV4dERlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dExl
bmd0aCgpLAotICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5n
T3B0aW9ucyksIHJlc3VsdHMpOworICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHRDaGVja2Vy
KCksIHBhcmFncmFwaFRvQ2hlY2sudGV4dFN0cmluZ1ZpZXcoKSwgcmVzb2x2ZVRleHRDaGVja2lu
Z1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKICAgICBtYXJrQW5kUmVw
bGFjZUZvcihyZXF1ZXN0LCByZXN1bHRzKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAkocmV2aXNpb24gMTYyMjg1KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywxNiArNDMsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmICFVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogCiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi1zdGF0aWMgdm9p
ZCBmaW5kQmFkR3JhbW1hcnMoVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIq
IHRleHQsIGludCBzdGFydCwgaW50IGxlbmd0aCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4m
IHJlc3VsdHMpCitzdGF0aWMgdm9pZCBmaW5kQmFkR3JhbW1hcnMoVGV4dENoZWNrZXJDbGllbnQq
IGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cykKIHsKLSAgICBpbnQgY2hlY2tMb2NhdGlvbiA9IHN0YXJ0OwotICAgIGludCBjaGVja0xl
bmd0aCA9IGxlbmd0aDsKKyAgICBpbnQgY2hlY2tMb2NhdGlvbiA9IDA7CisgICAgaW50IGNoZWNr
TGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKIAogICAgIHdoaWxlICgwIDwgY2hlY2tMZW5ndGgpIHsK
ICAgICAgICAgaW50IGJhZEdyYW1tYXJMb2NhdGlvbiA9IC0xOwogICAgICAgICBpbnQgYmFkR3Jh
bW1hckxlbmd0aCA9IDA7CiAgICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBiYWRHcmFtbWFy
RGV0YWlsczsKLSAgICAgICAgY2xpZW50LT5jaGVja0dyYW1tYXJPZlN0cmluZyh0ZXh0ICsgY2hl
Y2tMb2NhdGlvbiwgY2hlY2tMZW5ndGgsIGJhZEdyYW1tYXJEZXRhaWxzLCAmYmFkR3JhbW1hckxv
Y2F0aW9uLCAmYmFkR3JhbW1hckxlbmd0aCk7CisgICAgICAgIGNsaWVudC0+Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcodGV4dC5zdWJzdHJpbmcoY2hlY2tMb2NhdGlvbiwgY2hlY2tMZW5ndGgpLCBiYWRH
cmFtbWFyRGV0YWlscywgJmJhZEdyYW1tYXJMb2NhdGlvbiwgJmJhZEdyYW1tYXJMZW5ndGgpOwog
ICAgICAgICBpZiAoIWJhZEdyYW1tYXJMZW5ndGgpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgQVNTRVJUKDAgPD0gYmFkR3JhbW1hckxvY2F0aW9uICYmIGJhZEdyYW1tYXJMb2NhdGlvbiA8
PSBjaGVja0xlbmd0aCk7CkBAIC03MCw5ICs3MCw5IEBAIHN0YXRpYyB2b2lkIGZpbmRCYWRHcmFt
bWFycyhUZXh0Q2hlY2tlckMKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBmaW5kTWlzc3BlbGxp
bmdzKFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3N0YXRpYyB2b2lkIGZp
bmRNaXNzcGVsbGluZ3MoVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCwgU3RyaW5nVmlldyB0ZXh0
LCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAgICBUZXh0QnJlYWtJ
dGVyYXRvciogaXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3KHRleHQsIGxl
bmd0aCkpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJh
dG9yKHRleHQpOwogICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBpbnQg
d29yZFN0YXJ0ID0gdGV4dEJyZWFrQ3VycmVudChpdGVyYXRvcik7CkBAIC04Myw3ICs4Myw3IEBA
IHN0YXRpYyB2b2lkIGZpbmRNaXNzcGVsbGluZ3MoVGV4dENoZWNrZXIKICAgICAgICAgaW50IHdv
cmRMZW5ndGggPSB3b3JkRW5kIC0gd29yZFN0YXJ0OwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdM
b2NhdGlvbiA9IC0xOwogICAgICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgICAg
ICBjbGllbnQtPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0ICsgd29yZFN0YXJ0LCB3b3JkTGVu
Z3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAg
Y2xpZW50LT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGV4dC5zdWJzdHJpbmcod29yZFN0YXJ0LCB3
b3JkTGVuZ3RoKSwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CiAg
ICAgICAgIGlmICgwIDwgbWlzc3BlbGxpbmdMZW5ndGgpIHsKICAgICAgICAgICAgIEFTU0VSVCgw
IDw9IG1pc3NwZWxsaW5nTG9jYXRpb24gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8PSB3b3JkTGVu
Z3RoKTsKICAgICAgICAgICAgIEFTU0VSVCgwIDwgbWlzc3BlbGxpbmdMZW5ndGggJiYgbWlzc3Bl
bGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IHdvcmRMZW5ndGgpOwpAQCAtMjUx
LDcgKzI1MSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3MKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKICAg
ICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgICAgICBtX2NsaWVu
dC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJzLCBsZW4sICZtaXNz
cGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgbV9jbGll
bnQtPnRleHRDaGVja2VyKCktPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3KGNoYXJz
LCBsZW4pLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKIAogICAg
ICAgICAgICAgLy8gNTQ5MDYyNyBzaG93cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNvZGUgcGF0aCBo
ZXJlIHdoZXJlIHRoZSBTdHJpbmcgY29uc3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4KICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1
dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5nIHRoaXMgbXVjaApAQCAtMzQ1LDcgKzM0NSw3
IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3MKICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRz
OwogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMgPSBj
aGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlw
ZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgICAgICAgICAgICAgIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGhTdHJp
bmcuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVj
a2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFw
aChtX2NsaWVudC0+dGV4dENoZWNrZXIoKSwgU3RyaW5nVmlldyhwYXJhZ3JhcGhTdHJpbmcpLCBj
aGVja2luZ1R5cGVzLCByZXN1bHRzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRz
W2ldOwpAQCAtNDYxLDcgKzQ2MSw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdEJhZEcKICAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9ICIiOwogICAg
IG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwogICAgIAotICAgIFN0cmluZyBmaXJzdEJhZEdy
YW1tYXJQaHJhc2U7CisgICAgU3RyaW5nVmlldyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7CiAKICAg
ICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFw
aHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBw
YXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCkBAIC00
NzQsNyArNDc0LDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0QmFkRwog
ICAgICAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4gZ3JhbW1hckRldGFpbHM7CiAgICAgICAgIGlu
dCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPSAtMTsKICAgICAgICAgaW50IGJhZEdyYW1tYXJQ
aHJhc2VMZW5ndGggPSAwOwotICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBoLnRleHREZXByZWNhdGVkQ2hhcmFjdGVycygpICsgc3Rh
cnRPZmZzZXQsIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3JhbW1hckRl
dGFpbHMsICZiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3Ro
KTsKKyAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrR3JhbW1hck9mU3RyaW5n
KHBhcmFncmFwaC50ZXh0U3Vic3RyaW5nKHN0YXJ0T2Zmc2V0LCBwYXJhZ3JhcGgudGV4dExlbmd0
aCgpIC0gc3RhcnRPZmZzZXQpLCBncmFtbWFyRGV0YWlscywgJmJhZEdyYW1tYXJQaHJhc2VMb2Nh
dGlvbiwgJmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFi
YWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7CiAgICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBo
cmFzZUxvY2F0aW9uID09IC0xKTsKQEAgLTUwNyw4ICs1MDcsOCBAQCBTdHJpbmcgVGV4dENoZWNr
aW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHCiAgICAgICAgIC8vIGJleW9uZCB0aGlzIHBocmFzZS4K
ICAgICAgICAgc3RhcnRPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBiYWRHcmFt
bWFyUGhyYXNlTGVuZ3RoOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlyc3RCYWRHcmFtbWFy
UGhyYXNlOworCisgICAgcmV0dXJuIGZpcnN0QmFkR3JhbW1hclBocmFzZS50b1N0cmluZygpOwog
fQogCiAKQEAgLTU3NSwxMiArNTc1LDEyIEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hl
bHBlcjo6Z3Vlc3MKIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAg
ICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQt
PnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0RGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgcGFy
YWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisgICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0U3Ry
aW5nVmlldygpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKICAgICAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBUZXh0
Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAgICBpZiAocmVzdWx0
LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdS
YW5nZU1hdGNoZXMocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpKSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGguY2hlY2tpbmdTdWJzdHJpbmco
KTsKKyAgICAgICAgICAgIFN0cmluZ1ZpZXcgbWlzc3BlbGxlZFdvcmQgPSBwYXJhZ3JhcGguY2hl
Y2tpbmdTdWJzdHJpbmcoKTsKICAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGVkV29yZC5sZW5n
dGgoKSk7CiAgICAgICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0Zv
cldvcmQobWlzc3BlbGxlZFdvcmQsIFN0cmluZygpLCBndWVzc2VzKTsKICAgICAgICAgICAgIG1f
Y2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3Jk
KTsKQEAgLTU5OSw3ICs1OTksNyBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6
Omd1ZXNzCiAgICAgICAgICAgICAgICAgY29uc3QgR3JhbW1hckRldGFpbCogZGV0YWlsID0gJnJl
c3VsdC0+ZGV0YWlsc1tqXTsKICAgICAgICAgICAgICAgICBBU1NFUlQoZGV0YWlsLT5sZW5ndGgg
PiAwICYmIGRldGFpbC0+bG9jYXRpb24gPj0gMCk7CiAgICAgICAgICAgICAgICAgaWYgKHBhcmFn
cmFwaC5jaGVja2luZ1JhbmdlTWF0Y2hlcyhyZXN1bHQtPmxvY2F0aW9uICsgZGV0YWlsLT5sb2Nh
dGlvbiwgZGV0YWlsLT5sZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBiYWRH
cmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoLnRleHRTdWJzdHJpbmcocmVzdWx0LT5sb2NhdGlvbiwg
cmVzdWx0LT5sZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmdWaWV3IGJhZEdyYW1t
YXJQaHJhc2UgPSBwYXJhZ3JhcGgudGV4dFN1YnN0cmluZyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1
bHQtPmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiYWRHcmFtbWFyUGhyYXNl
Lmxlbmd0aCgpKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGRldGFpbC0+Z3Vlc3Nlcy5zaXplKCk7IGsrKykKICAgICAgICAgICAgICAgICAgICAgICAgIGd1
ZXNzZXMuYXBwZW5kKGRldGFpbC0+Z3Vlc3Nlc1trXSk7CkBAIC02NDAsMTUgKzY0MCwxNCBAQCBi
b29sIFRleHRDaGVja2luZ0hlbHBlcjo6dW5pZmllZFRleHRDaGVjCiAgICAgcmV0dXJuIG1fcmFu
Z2UgJiYgV2ViQ29yZTo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChtX3JhbmdlLT5vd25lckRv
Y3VtZW50KCkuZnJhbWUoKSk7CiB9CiAKLXZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENo
ZWNrZXJDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMs
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQordm9pZCBjaGVja1RleHRPZlBh
cmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCogY2xpZW50LCBTdHJpbmdWaWV3IHRleHQsIFRleHRD
aGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKQogewogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgcmVzdWx0
cyA9IGNsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldyh0ZXh0LCBsZW5ndGgp
LCBjaGVja2luZ1R5cGVzKTsKKyAgICByZXN1bHRzID0gY2xpZW50LT5jaGVja1RleHRPZlBhcmFn
cmFwaCh0ZXh0LCBjaGVja2luZ1R5cGVzKTsKICNlbHNlCiAgICAgVmVjdG9yPFRleHRDaGVja2lu
Z1Jlc3VsdD4gc3BlbGxpbmdSZXN1bHQ7CiAgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hl
Y2tpbmdUeXBlU3BlbGxpbmcpCi0gICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0ZXh0
LCBsZW5ndGgsIHNwZWxsaW5nUmVzdWx0KTsKKyAgICAgICAgZmluZE1pc3NwZWxsaW5ncyhjbGll
bnQsIHRleHQsIHNwZWxsaW5nUmVzdWx0KTsKIAogI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQog
ICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGdyYW1tYXJSZXN1bHQ7CkBAIC02NjAsNyAr
NjU5LDcgQEAgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaQogICAgICAg
ICAgICAgICAgIGdyYW1tYXJDaGVja0xlbmd0aCA9IHNwZWxsaW5nUmVzdWx0W2ldLmxvY2F0aW9u
OwogICAgICAgICB9CiAKLSAgICAgICAgZmluZEJhZEdyYW1tYXJzKGNsaWVudCwgdGV4dCwgMCwg
Z3JhbW1hckNoZWNrTGVuZ3RoLCBncmFtbWFyUmVzdWx0KTsKKyAgICAgICAgZmluZEJhZEdyYW1t
YXJzKGNsaWVudCwgdGV4dC5zdWJzdHJpbmcoMCwgZ3JhbW1hckNoZWNrTGVuZ3RoKSwgZ3JhbW1h
clJlc3VsdCk7CiAgICAgfQogCiAgICAgaWYgKGdyYW1tYXJSZXN1bHQuc2l6ZSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCShyZXZpc2lvbiAx
NjIyODUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiRWRpdG9yQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlRleHRDaGVja2luZy5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsOCArNDUsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBleHBhbmRSYW5nZVRvTmV4dEVuZCgpOwogCiAgICAgaW50IHRleHRMZW5ndGgo
KSBjb25zdCB7IHJldHVybiB0ZXh0KCkubGVuZ3RoKCk7IH0KLSAgICBTdHJpbmcgdGV4dFN1YnN0
cmluZyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRfTUFYKSBjb25zdCB7IHJldHVy
biB0ZXh0KCkuc3Vic3RyaW5nKHBvcywgbGVuKTsgfQotICAgIGNvbnN0IFVDaGFyKiB0ZXh0RGVw
cmVjYXRlZENoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiB0ZXh0KCkuZGVwcmVjYXRlZENoYXJh
Y3RlcnMoKTsgfQorICAgIFN0cmluZ1ZpZXcgdGV4dFN0cmluZ1ZpZXcoKSBjb25zdCB7IHJldHVy
biBTdHJpbmdWaWV3KHRleHQoKSk7IH0KKyAgICBTdHJpbmdWaWV3IHRleHRTdWJzdHJpbmcodW5z
aWduZWQgcG9zLCB1bnNpZ25lZCBsZW4gPSBVSU5UX01BWCkgY29uc3QgeyByZXR1cm4gU3RyaW5n
Vmlldyh0ZXh0KCkpLnN1YnN0cmluZyhwb3MsIGxlbik7IH0KICAgICBVQ2hhciB0ZXh0Q2hhckF0
KGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdGV4dCgpW3N0YXRpY19jYXN0PHVuc2lnbmVkPihp
bmRleCldOyB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKQEAgLTU1LDcgKzU2LDcgQEAg
cHVibGljOgogICAgIGludCBjaGVja2luZ1N0YXJ0KCkgY29uc3Q7CiAgICAgaW50IGNoZWNraW5n
RW5kKCkgY29uc3Q7CiAgICAgaW50IGNoZWNraW5nTGVuZ3RoKCkgY29uc3Q7Ci0gICAgU3RyaW5n
IGNoZWNraW5nU3Vic3RyaW5nKCkgY29uc3QgeyByZXR1cm4gdGV4dFN1YnN0cmluZyhjaGVja2lu
Z1N0YXJ0KCksIGNoZWNraW5nTGVuZ3RoKCkpOyB9CisgICAgU3RyaW5nVmlldyBjaGVja2luZ1N1
YnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHRleHRTdWJzdHJpbmcoY2hlY2tpbmdTdGFydCgpLCBj
aGVja2luZ0xlbmd0aCgpKTsgfQogCiAgICAgYm9vbCBjaGVja2luZ1JhbmdlTWF0Y2hlcyhpbnQg
bG9jYXRpb24sIGludCBsZW5ndGgpIGNvbnN0IHsgcmV0dXJuIGxvY2F0aW9uID09IGNoZWNraW5n
U3RhcnQoKSAmJiBsZW5ndGggPT0gY2hlY2tpbmdMZW5ndGgoKTsgfQogICAgIGJvb2wgaXNDaGVj
a2luZ1JhbmdlQ292ZXJlZEJ5KGludCBsb2NhdGlvbiwgaW50IGxlbmd0aCkgY29uc3QgeyByZXR1
cm4gbG9jYXRpb24gPD0gY2hlY2tpbmdTdGFydCgpICYmIGxvY2F0aW9uICsgbGVuZ3RoID49IGNo
ZWNraW5nU3RhcnQoKSArIGNoZWNraW5nTGVuZ3RoKCk7IH0KQEAgLTEwMyw4ICsxMDQsNyBAQCBw
cml2YXRlOgogI2VuZGlmCiB9OwogCi12b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVj
a2VyQ2xpZW50KiwgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsCi0gICAgVGV4dENoZWNr
aW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJl
c3VsdHMpOwordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCosIFN0
cmluZ1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKTsKIAogYm9vbCB1bmlmaWVkVGV4dENoZWNrZXJFbmFi
bGVkKGNvbnN0IEZyYW1lKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNs
aWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgJKHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDEyLDE3ICs0MTIsMTcgQEAgcHVibGljOgogY2xhc3Mg
RW1wdHlUZXh0Q2hlY2tlckNsaWVudCA6IHB1YmxpYyBUZXh0Q2hlY2tlckNsaWVudCB7CiBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0
aW9uKFRleHRDaGVja2luZ1R5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBTdHJpbmcmKSBv
dmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFN0cmluZyYpIG92
ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3Qg
VUNoYXIqLCBpbnQsIGludCosIGludCopIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgU3RyaW5n
IGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYp
IG92ZXJyaWRlIHsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3Jh
bW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50LCBWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBp
bnQqLCBpbnQqKSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3Bl
bGxEb2N1bWVudChTdHJpbmdWaWV3KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgbGVh
cm5Xb3JkKFN0cmluZ1ZpZXcpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50KiwgaW50Kikgb3ZlcnJpZGUgeyB9CisgICAg
dmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQo
U3RyaW5nVmlldykgb3ZlcnJpZGUgeyByZXR1cm4gU3RyaW5nKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+
JiwgaW50KiwgaW50Kikgb3ZlcnJpZGUgeyB9CiAKICNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQogICAgIHZpcnR1YWwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoU3RyaW5nVmlldywgVGV4dENoZWNraW5nVHlwZU1hc2spIG92ZXJyaWRlIHsgcmV0
dXJuIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+KCk7IH0KICNlbmRpZgogCi0gICAgdmlydHVh
bCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYsIFZl
Y3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNG
b3JXb3JkKFN0cmluZ1ZpZXcsIFN0cmluZ1ZpZXcsIFZlY3RvcjxTdHJpbmc+Jikgb3ZlcnJpZGUg
eyB9CiAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8
VGV4dENoZWNraW5nUmVxdWVzdD4pIG92ZXJyaWRlOwogfTsKIApAQCAtNTM2LDggKzUzNiw4IEBA
IHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgVGV4dENoZWNrZXJDbGllbnQqIHRleHRDaGVj
a2VyKCkgb3ZlcnJpZGUgeyByZXR1cm4gJm1fdGV4dENoZWNrZXJDbGllbnQ7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5n
JiwgY29uc3QgR3JhbW1hckRldGFpbCYpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRl
IHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmco
U3RyaW5nVmlldywgY29uc3QgR3JhbW1hckRldGFpbCYpIG92ZXJyaWRlIHsgfQorICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcpIG92
ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sKSBvdmVycmlk
ZSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlIHsg
cmV0dXJuIGZhbHNlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xpZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkocmV2
aXNpb24gMTYyMjg1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTczLDggKzE3Myw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgVGV4
dENoZWNrZXJDbGllbnQqIHRleHRDaGVja2VyKCkgPSAwOwogCi0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBTdHJpbmcmLCBjb25zdCBHcmFt
bWFyRGV0YWlsJiBkZXRhaWwpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTdHJpbmdWaWV3LCBjb25zdCBHcmFt
bWFyRGV0YWlsJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxs
aW5nVUkoYm9vbCBzaG93KSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNwZWxsaW5nVUlJc1Nob3dp
bmcoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgPSAw
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENoZWNrZXJD
bGllbnQuaAkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q2hlY2tlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSArNDIsMTEgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgflRleHRDaGVja2VyQ2xpZW50KCkge30KIAogICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihUZXh0Q2hlY2tp
bmdUeXBlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9j
dW1lbnQoY29uc3QgU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29u
c3QgU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmco
Y29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCog
bWlzc3BlbGxpbmdMZW5ndGgpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVj
dFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3Jk
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFy
KiwgaW50IGxlbmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9j
YXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBpZ25v
cmVXb3JkSW5TcGVsbERvY3VtZW50KFN0cmluZ1ZpZXcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bGVhcm5Xb3JkKFN0cmluZ1ZpZXcpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGlu
Z09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNz
cGVsbGluZ0xlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgU3RyaW5nIGdldEF1dG9Db3JyZWN0U3Vn
Z2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcgbWlzc3BlbGxlZFdvcmQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9y
PEdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1h
ckxlbmd0aCkgPSAwOwogCiAjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICB2aXJ0
dWFsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0cmlu
Z1ZpZXcsIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpID0gMDsKQEAgLTU1LDcg
KzU1LDcgQEAgcHVibGljOgogICAgIC8vIEZvciBzcGVsbGNoZWNrZXJzIHRoYXQgc3VwcG9ydCBt
dWx0aXBsZSBsYW5ndWFnZXMsIGl0J3Mgb2Z0ZW4gaW1wb3J0YW50IHRvIGJlIGFibGUgdG8gaWRl
bnRpZnkgdGhlIGxhbmd1YWdlIGluIG9yZGVyIHRvCiAgICAgLy8gcHJvdmlkZSBtb3JlIGFjY3Vy
YXRlIGNvcnJlY3Rpb24gc3VnZ2VzdGlvbnMuIENhbGxlciBjYW4gcGFzcyBpbiBtb3JlIHRleHQg
aW4gImNvbnRleHQiIHRvIGFpZCBzdWNoIHNwZWxsY2hlY2tlcnMgb24gbGFuZ3VhZ2UKICAgICAv
LyBpZGVudGlmaWNhdGlvbi4gTm9yYW1sbHkgaXQncyB0aGUgdGV4dCBzdXJyb3VuZGluZyB0aGUg
IndvcmQiIGZvciB3aGljaCB3ZSBhcmUgZ2V0dGluZyBjb3JyZWN0aW9uIHN1Z2dlc3Rpb25zLgot
ICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nVmlldyB3b3JkLCBTdHJpbmdWaWV3
IGNvbnRleHQsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4p
ID0gMDsKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9CU3RyaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQlN0cmluZy5jcHAJ
KHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9CU3RyaW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBCU3RyaW5nOjpCU3RyaW5nKGNv
bnN0IFN0cmluZyYgcykKICAgICBpZiAocy5pc051bGwoKSkKICAgICAgICAgbV9ic3RyID0gMDsK
ICAgICBlbHNlCi0gICAgICAgIG1fYnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVuKHMuY2hhcmFjdGVy
cygpLCBzLmxlbmd0aCgpKTsKKyAgICAgICAgbV9ic3RyID0gU3lzQWxsb2NTdHJpbmdMZW4ocy5k
ZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzLmxlbmd0aCgpKTsKIH0KIAogQlN0cmluZzo6QlN0cmlu
Zyhjb25zdCBVUkwmIHVybCkKQEAgLTczLDcgKzczLDcgQEAgQlN0cmluZzo6QlN0cmluZyhjb25z
dCBVUkwmIHVybCkKICAgICBpZiAodXJsLmlzTnVsbCgpKQogICAgICAgICBtX2JzdHIgPSAwOwog
ICAgIGVsc2UKLSAgICAgICAgbV9ic3RyID0gU3lzQWxsb2NTdHJpbmdMZW4odXJsLnN0cmluZygp
LmNoYXJhY3RlcnMoKSwgdXJsLnN0cmluZygpLmxlbmd0aCgpKTsKKyAgICAgICAgbV9ic3RyID0g
U3lzQWxsb2NTdHJpbmdMZW4odXJsLnN0cmluZygpLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHVy
bC5zdHJpbmcoKS5sZW5ndGgoKSk7CiB9CiAKIEJTdHJpbmc6OkJTdHJpbmcoY29uc3QgQXRvbWlj
U3RyaW5nJiBzKQpAQCAtODEsNyArODEsMTUgQEAgQlN0cmluZzo6QlN0cmluZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHMpCiAgICAgaWYgKHMuaXNOdWxsKCkpCiAgICAgICAgIG1fYnN0ciA9IDA7CiAg
ICAgZWxzZQotICAgICAgICBtX2JzdHIgPSBTeXNBbGxvY1N0cmluZ0xlbihzLmNoYXJhY3RlcnMo
KSwgcy5sZW5ndGgoKSk7CisgICAgICAgIG1fYnN0ciA9IFN5c0FsbG9jU3RyaW5nTGVuKHMuZGVw
cmVjYXRlZENoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSk7Cit9CisKK0JTdHJpbmc6OkJTdHJpbmco
U3RyaW5nVmlldyBzKQoreworICAgIGlmIChzLmlzTnVsbCgpKQorICAgICAgICBtX2JzdHIgPSAw
OworICAgIGVsc2UKKyAgICAgICAgbV9ic3RyID0gU3lzQWxsb2NTdHJpbmdMZW4ocy50b1N0cmlu
Z1dpdGhvdXRDb3B5aW5nKCkuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgcy5sZW5ndGgoKSk7CiB9
CiAKICNpZiBVU0UoQ0YpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQlN0cmlu
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9CU3RyaW5nLmgJ
KHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9CU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBCU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgICAgICBCU3RyaW5nKGNvbnN0IEF0
b21pY1N0cmluZyYpOwogICAgICAgICBCU3RyaW5nKGNvbnN0IFVSTCYpOworICAgICAgICBCU3Ry
aW5nKFN0cmluZ1ZpZXcpOwogI2lmIFVTRShDRikKICAgICAgICAgQlN0cmluZyhDRlN0cmluZ1Jl
Zik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE0LTAx
LTE4ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU3dpdGNoIHRoZSBU
ZXh0Q2hlY2tlckNsaWVudCBvdmVyIHRvIHVzaW5nIFN0cmluZ1ZpZXcgZXZlcnl3aGVyZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MjQzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
VGV4dENoZWNrZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAg
ICogVUlQcm9jZXNzL2lvcy9UZXh0Q2hlY2tlcklPUy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4
dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENo
ZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVj
a2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgICogVUlQcm9jZXNzL21hYy9UZXh0
Q2hlY2tlck1hYy5tbToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrVGV4dE9m
UGFyYWdyYXBoKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0
cmluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6Omlnbm9yZVdvcmRJblNw
ZWxsRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OmxlYXJuV29y
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3Ry
aW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNs
aWVudDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JD
bGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAgICAgIChXZWJL
aXQ6OldlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6Z2V0R3Vlc3Nlc0ZvcldvcmQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lmg6CisK
IDIwMTQtMDEtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXBsYWNlIGEgY291cGxlIG9mIHVzZXMgb2YgV1RGOjpGdW5jdGlvbiB3aXRoIHN0ZDo6
ZnVuY3Rpb24KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9UZXh0Q2hlY2tlci5oCShyZXZp
c2lvbiAxNjIyODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvVGV4dENoZWNrZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIlRleHRDaGVja2VyQ29t
cGxldGlvbi5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9yQ2xpZW50Lmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9UZXh0Q2hlY2tlckNsaWVudC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Zp
ZXcuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTY3LDEwICs2OCwxMCBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIGludDY0X3QgdW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkq
KTsKICAgICBzdGF0aWMgdm9pZCBjbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKGludDY0X3QpOwog
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgc3RhdGljIFZlY3RvcjxXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKGludDY0X3Qgc3BlbGxE
b2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIHVpbnQ2NF90IGNoZWNr
aW5nVHlwZXMpOworICAgIHN0YXRpYyBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0
PiBjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1Zp
ZXcsIHVpbnQ2NF90IGNoZWNraW5nVHlwZXMpOwogI2VuZGlmCi0gICAgc3RhdGljIHZvaWQgY2hl
Y2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIq
IHRleHQsIHVpbnQzMl90IGxlbmd0aCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50
MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgIHN0YXRpYyB2b2lkIGNoZWNrR3JhbW1hck9m
U3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgVUNoYXIqIHRleHQsIHVpbnQz
Ml90IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYgYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBzdGF0aWMg
dm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJp
bmdWaWV3LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGlu
Z0xlbmd0aCk7CisgICAgc3RhdGljIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCBz
cGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFp
bD4mLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRpb24sIGludDMyX3QmIGJhZEdyYW1tYXJMZW5n
dGgpOwogICAgIHN0YXRpYyBib29sIHNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKICAgICBzdGF0aWMg
dm9pZCB0b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7CiAgICAgc3RhdGljIHZvaWQgdXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNv
bnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpOwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzgwLDE4ICsz
MzgwLDE4IEBAIGludDY0X3QgV2ViUGFnZVByb3h5OjpzcGVsbERvY3VtZW50VGFnKCkKICNpZiBV
U0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogdm9pZCBXZWJQYWdlUHJveHk6OmNoZWNrVGV4dE9m
UGFyYWdyYXBoKGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcywgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7Ci0gICAgcmVzdWx0cyA9IFRleHRD
aGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChzcGVsbERvY3VtZW50VGFnKCksIHRleHQuZGVw
cmVjYXRlZENoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcyk7CisgICAg
cmVzdWx0cyA9IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChzcGVsbERvY3VtZW50
VGFnKCksIHRleHQsIGNoZWNraW5nVHlwZXMpOwogfQogI2VuZGlmCiAKIHZvaWQgV2ViUGFnZVBy
b3h5OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgU3RyaW5nJiB0ZXh0LCBpbnQzMl90JiBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBU
ZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwgdGV4
dC5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhzcGVsbERvY3VtZW50VGFnKCksIHRleHQsIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1p
c3NwZWxsaW5nTGVuZ3RoKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OmNoZWNrR3JhbW1hck9m
U3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFy
RGV0YWlscywgaW50MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFy
TGVuZ3RoKQogewotICAgIFRleHRDaGVja2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERv
Y3VtZW50VGFnKCksIHRleHQuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwg
Z3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7Cisg
ICAgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcoKSwg
dGV4dCwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0
aCk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpzcGVsbGluZ1VJSXNTaG93aW5nKGJvb2wmIGlz
U2hvd2luZykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvVGV4dENoZWNrZXJJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9UZXh0Q2hl
Y2tlcklPUy5tbQkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2lvcy9UZXh0Q2hlY2tlcklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBA
IHZvaWQgVGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGgKIAogI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCiAKLVZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVj
a2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90LCBjb25zdCBVQ2hhciosIGludCwgdWlu
dDY0X3QpCitWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgoaW50NjRfdCwgU3RyaW5nVmlldykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PigpOwpAQCAtMTM3LDEzICsx
MzcsMTMgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OgogCiAjZW5k
aWYKIAotdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3QsIGNv
bnN0IFVDaGFyKiwgdWludDMyX3QsIGludDMyX3QmLCBpbnQzMl90JikKK3ZvaWQgVGV4dENoZWNr
ZXI6OmNoZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90LCBTdHJpbmdWaWV3LCBpbnQzMl90Jiwg
aW50MzJfdCYpCiB7CiAgICAgLy8gTWFjIHVzZXMgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaW5zdGVh
ZC4KICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFRleHRDaGVja2VyOjpjaGVja0dy
YW1tYXJPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBWZWN0b3I8V2Vi
Q29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCit2b2lkIFRleHRDaGVj
a2VyOjpjaGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90LCBTdHJpbmdWaWV3LCBWZWN0b3I8V2Vi
Q29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQzMl90JiwgaW50MzJfdCYpCiB7CiAgICAgLy8gTWFj
IHVzZXMgY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaW5zdGVhZC4KICAgICBub3RJbXBsZW1lbnRlZCgp
OwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9UZXh0Q2hlY2tlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1RleHRDaGVja2VyTWFj
Lm1tCShyZXZpc2lvbiAxNjIyODUpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Rl
eHRDaGVja2VyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsMTMgKzI5MywxMyBAQCB2b2lk
IFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9jdW1lbnRXaXRoCiAKICNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQogCi1WZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBUZXh0Q2hlY2tlcjo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBVQ2hh
ciogdGV4dCwgaW50IGxlbmd0aCwgdWludDY0X3QgY2hlY2tpbmdUeXBlcykKK1ZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgdWludDY0X3QgY2hlY2tpbmdUeXBl
cykKIHsKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogCi0gICAgUmV0
YWluUHRyPE5TU3RyaW5nPiB0ZXh0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFsbG9jXSBp
bml0V2l0aENoYXJhY3RlcnNOb0NvcHk6Y29uc3RfY2FzdDxVQ2hhcio+KHRleHQpIGxlbmd0aDps
ZW5ndGggZnJlZVdoZW5Eb25lOk5PXSk7Ci0gICAgTlNBcnJheSAqaW5jb21pbmdSZXN1bHRzID0g
W1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIGNoZWNrU3RyaW5nOnRleHRTdHJp
bmcgLmdldCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOk5TTWFrZVJhbmdlKDAsIGxlbmd0aCkK
KyAgICBhdXRvIHRleHRTdHJpbmcgPSB0ZXh0LnRvTlNTdHJpbmdXaXRob3V0Q29weWluZygpOwor
ICAgIE5TQXJyYXkgKmluY29taW5nUmVzdWx0cyA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3Bl
bGxDaGVja2VyXSBjaGVja1N0cmluZzp0ZXh0U3RyaW5nLmdldCgpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJhbmdlOk5TTWFrZVJhbmdlKDAsIFt0ZXh0U3RyaW5nIGxlbmd0aF0pCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVzOmNoZWNraW5nVHlwZXMgfCBOU1RleHRDaGVja2luZ1R5cGVPcnRob2dyYXBoeQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0aW9uczpuaWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6c3BlbGxE
b2N1bWVudFRhZyAKQEAgLTM4MiwxMyArMzgyLDEzIEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1
bHQ+IFRleHRDaGVja2VyOjoKIAogI2VuZGlmCiAKLXZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhpbnQ2NF90LCBjb25zdCBVQ2hhciosIHVpbnQzMl90LCBpbnQzMl90Jiwg
aW50MzJfdCYpCit2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRf
dCwgU3RyaW5nVmlldywgaW50MzJfdCYsIGludDMyX3QmKQogewogICAgIC8vIE1hYyB1c2VzIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoIGluc3RlYWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRfdCwgY29uc3QgVUNo
YXIqLCB1aW50MzJfdCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYs
IGludDMyX3QmKQordm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50NjRf
dCwgU3RyaW5nVmlldywgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50MzJfdCYs
IGludDMyX3QmKQogewogICAgIC8vIE1hYyB1c2VzIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGluc3Rl
YWQuCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAJ
KHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA0LDM5ICs0MDQs
MzYgQEAgYm9vbCBXZWJFZGl0b3JDbGllbnQ6OnNob3VsZEVyYXNlTWFya2VycwogI2VuZGlmCiB9
CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0
IFN0cmluZyYgd29yZCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KFN0cmluZ1ZpZXcgd29yZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6SWdub3JlV29yZCh3b3JkKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6Oklnbm9yZVdvcmQod29yZC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkp
KTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdv
cmQpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6bGVhcm5Xb3JkKFN0cmluZ1ZpZXcgd29yZCkKIHsK
LSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TGVhcm5Xb3JkKHdvcmQp
KTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TGVhcm5Xb3JkKHdv
cmQudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSk7CiB9Ci0KLXZvaWQgV2ViRWRpdG9yQ2xpZW50
OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGlu
dCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldyBzdHJpbmdWaWV3
LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCiB7CiAg
ICAgaW50MzJfdCByZXN1bHRMb2NhdGlvbiA9IC0xOwogICAgIGludDMyX3QgcmVzdWx0TGVuZ3Ro
ID0gMDsKLSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSB3b3VsZG4ndCBoYXZl
IHRvIGNvcHkgdGhlIHRleHQgaGVyZS4KLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkNoZWNrU3BlbGxpbmdPZlN0cmluZyhTdHJpbmcodGV4dCwgbGVuZ3RoKSks
CisgICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1NwZWxs
aW5nT2ZTdHJpbmcoc3RyaW5nVmlldy50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkpLAogICAgICAg
ICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDaGVja1NwZWxsaW5nT2ZTdHJpbmc6OlJlcGx5KHJl
c3VsdExvY2F0aW9uLCByZXN1bHRMZW5ndGgpKTsKICAgICAqbWlzc3BlbGxpbmdMb2NhdGlvbiA9
IHJlc3VsdExvY2F0aW9uOwogICAgICptaXNzcGVsbGluZ0xlbmd0aCA9IHJlc3VsdExlbmd0aDsK
IH0KIAotU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9y
TWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJikKK1N0cmluZyBXZWJFZGl0b3JDbGllbnQ6Omdl
dEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50
IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywg
aW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0aCkKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3IHN0cmluZ1ZpZXcs
IFZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCogYmFk
R3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCiB7CiAgICAgaW50MzJfdCBy
ZXN1bHRMb2NhdGlvbiA9IC0xOwogICAgIGludDMyX3QgcmVzdWx0TGVuZ3RoID0gMDsKLSAgICAv
LyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB3ZSB3b3VsZG4ndCBoYXZlIHRvIGNvcHkgdGhl
IHRleHQgaGVyZS4KLSAgICBtX3BhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZyh0ZXh0LCBsZW5ndGgpKSwKKyAgICBtX3BhZ2Ut
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNoZWNrR3JhbW1hck9mU3RyaW5nKHN0
cmluZ1ZpZXcudG9TdHJpbmdXaXRob3V0Q29weWluZygpKSwKICAgICAgICAgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6Q2hlY2tHcmFtbWFyT2ZTdHJpbmc6OlJlcGx5KGdyYW1tYXJEZXRhaWxzLCBy
ZXN1bHRMb2NhdGlvbiwgcmVzdWx0TGVuZ3RoKSk7CiAgICAgKmJhZEdyYW1tYXJMb2NhdGlvbiA9
IHJlc3VsdExvY2F0aW9uOwogICAgICpiYWRHcmFtbWFyTGVuZ3RoID0gcmVzdWx0TGVuZ3RoOwpA
QCAtNDUzLDE0ICs0NTAsMTQgQEAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9y
Q2xpZQogfQogI2VuZGlmCiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBH
cmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhTdHJpbmdWaWV3IGJhZEdyYW1tYXJQaHJhc2Us
IGNvbnN0IEdyYW1tYXJEZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgbV9wYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmlu
ZyhiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKSk7CisgICAgbV9wYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhi
YWRHcmFtbWFyUGhyYXNlLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgZ3JhbW1hckRldGFpbCkp
OwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldyBtaXNzcGVs
bGVkV29yZCkKIHsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VXBk
YXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCkpOworICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVcGRhdGVTcGVsbGluZ1VJV2l0aE1p
c3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkLnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSkpOwog
fQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd1NwZWxsaW5nVUkoYm9vbCkKQEAgLTQ3NSw5
ICs0NzIsOSBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAg
cmV0dXJuIGlzU2hvd2luZzsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNG
b3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8
U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29y
ZChTdHJpbmdWaWV3IHdvcmQsIFN0cmluZ1ZpZXcgY29udGV4dCwgVmVjdG9yPFN0cmluZz4mIGd1
ZXNzZXMpCiB7Ci0gICAgbV9wYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpH
ZXRHdWVzc2VzRm9yV29yZCh3b3JkLCBjb250ZXh0KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
R2V0R3Vlc3Nlc0ZvcldvcmQ6OlJlcGx5KGd1ZXNzZXMpKTsKKyAgICBtX3BhZ2UtPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkKHdvcmQudG9TdHJpbmdX
aXRob3V0Q29weWluZygpLCBjb250ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSksIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkdldEd1ZXNzZXNGb3JXb3JkOjpSZXBseShndWVzc2VzKSk7CiB9
CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBh
c3NSZWZQdHI8VGV4dENoZWNraW5nUmVxdWVzdD4gcHJwUmVxdWVzdCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0
b3JDbGllbnQuaAkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMz
LDIyICsxMzMsMjIgQEAgcHJpdmF0ZToKICAgICBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNr
ZXIoKSAgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQogCiAgICAgdmlydHVhbCBib29sIHNob3Vs
ZEVyYXNlTWFya2Vyc0FmdGVyQ2hhbmdlU2VsZWN0aW9uKFdlYkNvcmU6OlRleHRDaGVja2luZ1R5
cGUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERv
Y3VtZW50KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldv
cmQoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrU3BlbGxp
bmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBTdHJp
bmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5n
JiBtaXNzcGVsbGVkV29yZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1h
ck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0
aCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQo
U3RyaW5nVmlldykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChTdHJpbmdW
aWV3KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0
cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0
aCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldyBtaXNzcGVsbGVkV29yZCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcsIFZlY3RvcjxX
ZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJh
ZEdyYW1tYXJMZW5ndGgpIG92ZXJyaWRlOwogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
CiAgICAgdmlydHVhbCBWZWN0b3I8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1Rl
eHRPZlBhcmFncmFwaChTdHJpbmdWaWV3LCBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlTWFzayBj
aGVja2luZ1R5cGVzKSBvdmVycmlkZTsKICNlbmRpZgotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVT
cGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoY29uc3QgU3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6
R3JhbW1hckRldGFpbCYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoU3RyaW5nVmlldywgY29u
c3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdVSShib29sIHNob3cpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNTaG93aW5nKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5n
JiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcgd29yZCwgU3RyaW5nVmlldyBjb250
ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNl
dElucHV0TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdENoZWNraW5nT2ZTdHJpbmcoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OlRleHRD
aGVja2luZ1JlcXVlc3Q+KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdENoZWNr
aW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0Pikgb3Zl
cnJpZGU7CiAjaWYgUExBVEZPUk0oR1RLKQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRTaG93VW5p
Y29kZU1lbnUoKSBvdmVycmlkZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwkocmV2aXNp
b24gMTYyMjg1KQorKysgU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMTQtMDEtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBTd2l0Y2ggdGhlIFRleHRDaGVja2VyQ2xpZW50IG92ZXIgdG8gdXNpbmcg
U3RyaW5nVmlldyBldmVyeXdoZXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjcyNDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEVmbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZsOjpsZWFybldvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZsOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZsOjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25G
b3JNaXNzcGVsbGVkV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OmNo
ZWNrR3JhbW1hck9mU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvckNsaWVudEVmbDo6
dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvckNsaWVudEVmbDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmw6OmdldEd1ZXNzZXNGb3JXb3JkKToKKyAgICAg
ICAgKiBXZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvckNsaWVudEVmbDo6cmVxdWVzdENoZWNraW5nT2ZTdHJpbmcpOgorCiAyMDE0LTAxLTE4
ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFub3RoZXIgYnVpbGQg
Zml4IGF0dGVtcHQgZm9yIFdpbmRvd3MgYW5kIEVGTCBXZWJLaXQxLgpJbmRleDogU291cmNlL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRFZmwuY3BwCShy
ZXZpc2lvbiAxNjIyODUpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksMzggKzM5OSwzOCBAQCBib29s
IEVkaXRvckNsaWVudEVmbDo6c2hvdWxkRXJhc2VNYXJrZXJzCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgRWRpdG9yQ2xpZW50RWZsOjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0
IFN0cmluZyYpCit2b2lkIEVkaXRvckNsaWVudEVmbDo6aWdub3JlV29yZEluU3BlbGxEb2N1bWVu
dChTdHJpbmdWaWV3KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRWRpdG9y
Q2xpZW50RWZsOjpsZWFybldvcmQoY29uc3QgU3RyaW5nJikKK3ZvaWQgRWRpdG9yQ2xpZW50RWZs
OjpsZWFybldvcmQoU3RyaW5nVmlldykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIEVkaXRvckNsaWVudEVmbDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwg
aW50LCBpbnQqLCBpbnQqKQordm9pZCBFZGl0b3JDbGllbnRFZmw6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhTdHJpbmdWaWV3LCBpbnQqLCBpbnQqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLVN0cmluZyBFZGl0b3JDbGllbnRFZmw6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1p
c3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYpCitTdHJpbmcgRWRpdG9yQ2xpZW50RWZsOjpnZXRB
dXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIEVkaXRv
ckNsaWVudEVmbDo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIFZlY3Rv
cjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopCit2b2lkIEVkaXRvckNsaWVudEVmbDo6Y2hl
Y2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiwgaW50
KiwgaW50KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEVkaXRvckNsaWVu
dEVmbDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNv
bnN0IEdyYW1tYXJEZXRhaWwmKQordm9pZCBFZGl0b3JDbGllbnRFZmw6OnVwZGF0ZVNwZWxsaW5n
VUlXaXRoR3JhbW1hclN0cmluZyhTdHJpbmdWaWV3LCBjb25zdCBHcmFtbWFyRGV0YWlsJikKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEVkaXRvckNsaWVudEVmbDo6dXBkYXRl
U3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKQordm9pZCBFZGl0b3JD
bGllbnRFZmw6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldykK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtNDQ2LDcgKzQ0Niw3IEBAIGJvb2wgRWRp
dG9yQ2xpZW50RWZsOjpzcGVsbGluZ1VJSXNTaG93aW4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXZvaWQgRWRpdG9yQ2xpZW50RWZsOjpnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIC8q
d29yZCovLCBjb25zdCBTdHJpbmcmIC8qY29udGV4dCovLCBWZWN0b3I8U3RyaW5nPiYgLypndWVz
c2VzKi8pCit2b2lkIEVkaXRvckNsaWVudEVmbDo6Z2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nVmll
dywgU3RyaW5nVmlldywgVmVjdG9yPFN0cmluZz4mKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRF
ZmwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRFZmwuaAkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNlL1dlYktpdC9lZmwvV2Vi
Q29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50RWZsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNCwyNiAr
MTM0LDI2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGV4dERpZENoYW5nZUluVGV4dEFy
ZWEoRWxlbWVudCopOwogCiAgICAgdmlydHVhbCBib29sIHNob3VsZEVyYXNlTWFya2Vyc0FmdGVy
Q2hhbmdlU2VsZWN0aW9uKFRleHRDaGVja2luZ1R5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYpOwotICAgIHZpcnR1YWwg
dm9pZCBsZWFybldvcmQoY29uc3QgU3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrU3Bl
bGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0
QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBtaXNz
cGVsbGVkV29yZCk7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0
IFVDaGFyKiwgaW50IGxlbmd0aCwgV1RGOjpWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqIGJh
ZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGNvbnN0IFN0cmluZyYsIGNvbnN0
IEdyYW1tYXJEZXRhaWwmKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhN
aXNzcGVsbGVkV29yZChjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29y
ZEluU3BlbGxEb2N1bWVudChTdHJpbmdWaWV3KTsKKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3Jk
KFN0cmluZ1ZpZXcpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3Ry
aW5nVmlldywgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3Ro
KTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChTdHJpbmdWaWV3KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJp
bmcoU3RyaW5nVmlldywgV1RGOjpWZWN0b3I8R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1t
YXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFN0cmluZ1ZpZXcsIGNvbnN0IEdyYW1tYXJE
ZXRhaWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVk
V29yZChTdHJpbmdWaWV3KTsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBz
aG93KTsKICAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpOwotICAgIHZpcnR1
YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmlu
ZyYgY29udGV4dCwgV1RGOjpWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcyk7CisgICAgdmlydHVhbCB2
b2lkIGdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcsIFN0cmluZ1ZpZXcsIFdURjo6VmVjdG9y
PFN0cmluZz4mIGd1ZXNzZXMpOwogICAgIHZpcnR1YWwgdm9pZCB3aWxsU2V0SW5wdXRNZXRob2RT
dGF0ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbnB1dE1ldGhvZFN0YXRlKGJvb2wgZW5hYmxl
ZCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXF1ZXN0PikgeyB9CisgICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5n
UmVxdWVzdD4pIHsgfQogI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgdmlydHVh
bCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjaGVja1RleHRPZlBhcmFncmFwaChTdHJpbmdW
aWV3LCBUZXh0Q2hlY2tpbmdUeXBlTWFzaykgeyByZXR1cm4gVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4oKTsgfQogI2VuZGlmCiAgICAgdmlydHVhbCBUZXh0Q2hlY2tlckNsaWVudCogdGV4dENo
ZWNrZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKIHByaXZhdGU6Ci0gICAgRXZhc19PYmplY3QgKm1f
dmlldzsKKyAgICBFdmFzX09iamVjdCogbV92aWV3OwogfTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTQtMDEtMTggIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBTd2l0Y2ggdGhlIFRleHRDaGVja2VyQ2xpZW50IG92
ZXIgdG8gdXNpbmcgU3RyaW5nVmlldyBldmVyeXdoZXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcyNDMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1RleHRDaGVja2VyQ2xp
ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRHdGs6Omlnbm9y
ZVdvcmRJblNwZWxsRG9jdW1lbnQpOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tlckNsaWVu
dEd0azo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRHdGs6
OmNoZWNrU3BlbGxpbmdPZlN0cmluZyk6CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xp
ZW50R3RrOjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCk6CisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50R3RrOjpjaGVja0dyYW1tYXJPZlN0cmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2VyQ2xpZW50R3RrOjpnZXRHdWVzc2VzRm9yV29y
ZCk6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRHdGsuaDoKKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNrZXJDbGllbnRHdGs6OnJlcXVlc3RDaGVja2luZ09mU3Ry
aW5nKToKKwogMjAxNC0wMS0xOCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBQYWdlIHNob3VsZCB1c2Ugc3RkOjp1bmlxdWVfcHRyIGZvciBJ
bnNwZWN0b3JDb250cm9sbGVyCkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9UZXh0Q2hlY2tlckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRHdGsuY3BwCShyZXZpc2lvbiAxNjIy
ODUpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVu
dEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDM1ICs0OSw0MCBAQCBib29sIFRleHRDaGVj
a2VyQ2xpZW50R3RrOjpzaG91bGRFcmFzZU1hCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
VGV4dENoZWNrZXJDbGllbnRHdGs6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3Ry
aW5nJiB0ZXh0KQordm9pZCBUZXh0Q2hlY2tlckNsaWVudEd0azo6aWdub3JlV29yZEluU3BlbGxE
b2N1bWVudChTdHJpbmdWaWV3IHRleHQpCiB7Ci0gICAgd2Via2l0X3NwZWxsX2NoZWNrZXJfaWdu
b3JlX3dvcmQobV9zcGVsbENoZWNrZXIuZ2V0KCksIHRleHQudXRmOCgpLmRhdGEoKSk7CisgICAg
U3RyaW5nIHRleHRBc1N0cmluZyA9IHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpOworICAg
IHdlYmtpdF9zcGVsbF9jaGVja2VyX2lnbm9yZV93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgpLCB0
ZXh0QXNTdHJpbmcudXRmOCgpLmRhdGEoKSk7CiB9CiAKLXZvaWQgVGV4dENoZWNrZXJDbGllbnRH
dGs6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHRleHQpCit2b2lkIFRleHRDaGVja2VyQ2xpZW50
R3RrOjpsZWFybldvcmQoU3RyaW5nVmlldyB0ZXh0KQogewotICAgIHdlYmtpdF9zcGVsbF9jaGVj
a2VyX2xlYXJuX3dvcmQobV9zcGVsbENoZWNrZXIuZ2V0KCksIHRleHQudXRmOCgpLmRhdGEoKSk7
CisgICAgU3RyaW5nIHRleHRBc1N0cmluZyA9IHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygp
OworICAgIHdlYmtpdF9zcGVsbF9jaGVja2VyX2xlYXJuX3dvcmQobV9zcGVsbENoZWNrZXIuZ2V0
KCksIHRleHRBc1N0cmluZy51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tlckNs
aWVudEd0azo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCit2
b2lkIFRleHRDaGVja2VyQ2xpZW50R3RrOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmll
dyB0ZXh0LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgp
CiB7Ci0gICAgU3RyaW5nIHRleHRBc1N0cmluZyh0ZXh0LCBsZW5ndGgpOworICAgIFN0cmluZyB0
ZXh0QXNTdHJpbmcgPSB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKICAgICB3ZWJraXRf
c3BlbGxfY2hlY2tlcl9jaGVja19zcGVsbGluZ19vZl9zdHJpbmcobV9zcGVsbENoZWNrZXIuZ2V0
KCksIHRleHRBc1N0cmluZy51dGY4KCkuZGF0YSgpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7CiB9CiAKLVN0cmluZyBUZXh0Q2hlY2tlckNsaWVudEd0azo6Z2V0QXV0
b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBpbnB1dFdv
cmQpCitTdHJpbmcgVGV4dENoZWNrZXJDbGllbnRHdGs6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlv
bkZvck1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcgaW5wdXRXb3JkKQogewotICAgIHJldHVybiB3
ZWJraXRfc3BlbGxfY2hlY2tlcl9nZXRfYXV0b2NvcnJlY3Rfc3VnZ2VzdGlvbnNfZm9yX21pc3Nw
ZWxsZWRfd29yZChtX3NwZWxsQ2hlY2tlci5nZXQoKSwgaW5wdXRXb3JkLnV0ZjgoKS5kYXRhKCkp
OworICAgIFN0cmluZyBpbnB1dFdvcmRBc1N0cmluZyA9IGlucHV0V29yZC50b1N0cmluZ1dpdGhv
dXRDb3B5aW5nKCk7CisgICAgcmV0dXJuIHdlYmtpdF9zcGVsbF9jaGVja2VyX2dldF9hdXRvY29y
cmVjdF9zdWdnZXN0aW9uc19mb3JfbWlzc3BlbGxlZF93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgp
LCBpbnB1dFdvcmRBc1N0cmluZy51dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBUZXh0Q2hlY2tl
ckNsaWVudEd0azo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQsIFZlY3Rv
cjxHcmFtbWFyRGV0YWlsPiYsIGludCosIGludCopCit2b2lkIFRleHRDaGVja2VyQ2xpZW50R3Rr
OjpjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBWZWN0b3I8R3JhbW1hckRldGFpbD4m
LCBpbnQqLCBpbnQqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgVGV4dENo
ZWNrZXJDbGllbnRHdGs6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29u
c3QgU3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQordm9pZCBU
ZXh0Q2hlY2tlckNsaWVudEd0azo6Z2V0R3Vlc3Nlc0ZvcldvcmQoU3RyaW5nVmlldyB3b3JkLCBT
dHJpbmdWaWV3IGNvbnRleHQsIFdURjo6VmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0gICAg
Y2hhcioqIHN1Z2dlc3Rpb25zID0gd2Via2l0X3NwZWxsX2NoZWNrZXJfZ2V0X2d1ZXNzZXNfZm9y
X3dvcmQobV9zcGVsbENoZWNrZXIuZ2V0KCksIHdvcmQudXRmOCgpLmRhdGEoKSwgY29udGV4dC51
dGY4KCkuZGF0YSgpKTsKKyAgICBTdHJpbmcgd29yZEFzU3RyaW5nID0gd29yZC50b1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCk7CisgICAgU3RyaW5nIGNvbnRleHRBc1N0cmluZyA9IGNvbnRleHQudG9T
dHJpbmdXaXRob3V0Q29weWluZygpOworICAgIGNoYXIqKiBzdWdnZXN0aW9ucyA9IHdlYmtpdF9z
cGVsbF9jaGVja2VyX2dldF9ndWVzc2VzX2Zvcl93b3JkKG1fc3BlbGxDaGVja2VyLmdldCgpLCB3
b3JkQXNTdHJpbmcudXRmOCgpLmRhdGEoKSwgY29udGV4dEFzU3RyaW5nLnV0ZjgoKS5kYXRhKCkp
OwogICAgIGlmICghc3VnZ2VzdGlvbnMpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvVGV4dENoZWNrZXJDbGllbnRHdGsuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9UZXh0Q2hlY2tlckNsaWVu
dEd0ay5oCShyZXZpc2lvbiAxNjIyODUpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9UZXh0Q2hlY2tlckNsaWVudEd0ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgogI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKIHR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRTcGVsbENoZWNrZXIgV2ViS2l0U3BlbGxDaGVja2VyOwogCkBAIC00
MywxMyArNDQsMTMgQEAgY2xhc3MgVGV4dENoZWNrZXJDbGllbnRHdGsgOiBwdWJsaWMgV2ViQwog
ICAgICAgICBUZXh0Q2hlY2tlckNsaWVudEd0ayhXZWJLaXRTcGVsbENoZWNrZXIqKTsKICAgICAg
ICAgflRleHRDaGVja2VyQ2xpZW50R3RrKCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRF
cmFzZU1hcmtlcnNBZnRlckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBl
KSBjb25zdDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQo
Y29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChjb25z
dCBXVEY6OlN0cmluZyYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3Ry
aW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgdmlydHVhbCBXVEY6OlN0cmluZyBnZXRB
dXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChjb25zdCBXVEY6OlN0cmluZyYp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoY29uc3QgVUNoYXIq
LCBpbnQgbGVuZ3RoLCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpHcmFtbWFyRGV0YWlsPiYsIGludCog
YmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgZ2V0R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmIHdvcmQsIGNvbnN0
IFdURjo6U3RyaW5nJiBjb250ZXh0LCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMp
OwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4pIHsgfQorICAgICAgICB2aXJ0dWFsIHZv
aWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChTdHJpbmdWaWV3KTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIGxlYXJuV29yZChTdHJpbmdWaWV3KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNr
U3BlbGxpbmdPZlN0cmluZyhTdHJpbmdWaWV3LCBpbnQqIG1pc3NwZWxsaW5nTG9jYXRpb24sIGlu
dCogbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICB2aXJ0dWFsIFdURjo6U3RyaW5nIGdldEF1
dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKFN0cmluZ1ZpZXcpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgV1RGOjpWZWN0
b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50
KiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JX
b3JkKFN0cmluZ1ZpZXcsIFN0cmluZ1ZpZXcsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0Q2hlY2tpbmdPZlN0cmluZyhXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6VGV4dENoZWNraW5nUmVxdWVzdD4pIHsgfQogCiAgICAgICAg
IHZvaWQgdXBkYXRlU3BlbGxDaGVja2luZ0xhbmd1YWdlKGNvbnN0IGNoYXIqKTsKICAgICBwcml2
YXRlOgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTQt
MDEtMTggIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBTd2l0Y2ggdGhl
IFRleHRDaGVja2VyQ2xpZW50IG92ZXIgdG8gdXNpbmcgU3RyaW5nVmlldyBldmVyeXdoZXJlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjcyNDMKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVk
aXRvckNsaWVudC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3Vt
ZW50KToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6bGVhcm5Xb3JkKToKKyAgICAgICAgKFdl
YkVkaXRvckNsaWVudDo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKToKKyAgICAgICAgKFdlYkVkaXRv
ckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQpOgorICAg
ICAgICAoV2ViRWRpdG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyk6CisgICAgICAgIChX
ZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyk6CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQp
OgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZCk6CisKIDIwMTQt
MDEtMTggIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogUGFnZSBzaG91bGQgdXNlIHN0ZDo6dW5pcXVlX3B0ciBmb3IgSW5zcGVjdG9yQ29udHJv
bGxlcgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xp
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50LmgJKHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMzAg
KzE1NCwzMCBAQCBwdWJsaWM6CiAgICAgCiAjaWYgIVBMQVRGT1JNKElPUykKICAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxlY3Rpb24oV2ViQ29yZTo6VGV4
dENoZWNraW5nVHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGlnbm9yZVdv
cmRJblNwZWxsRG9jdW1lbnQoY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgbGVhcm5Xb3JkKGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGNoZWNrU3BlbGxpbmdPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgs
IGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCBXVEY6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JN
aXNzcGVsbGVkV29yZChjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFdURjo6
VmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludCogYmFkR3JhbW1hckxlbmd0aCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGlnbm9y
ZVdvcmRJblNwZWxsRG9jdW1lbnQoU3RyaW5nVmlldykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGxlYXJuV29yZChTdHJpbmdWaWV3KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hl
Y2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdMb2NhdGlvbiwg
aW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBXVEY6OlN0cmlu
ZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY2hlY2tHcmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmll
dywgV1RGOjpWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJM
b2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFZl
Y3RvcjxXZWJDb3JlOjpUZXh0Q2hlY2tpbmdSZXN1bHQ+IGNoZWNrVGV4dE9mUGFyYWdyYXBoKFN0
cmluZ1ZpZXcsIFdlYkNvcmU6OlRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXZWJDb3JlOjpHcmFtbWFyRGV0YWlsJikgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdv
cmQoY29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFN0cmluZ1ZpZXcsIGNvbnN0IFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWwmKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgc2hvd1NwZWxsaW5nVUkoYm9vbCBzaG93KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wg
c3BlbGxpbmdVSUlzU2hvd2luZygpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVz
c2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYgd29yZCwgY29uc3QgV1RGOjpTdHJpbmcmIGNv
bnRleHQsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vlc3Nlcykgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcgd29yZCwgU3RyaW5nVmll
dyBjb250ZXh0LCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlOwog
I2Vsc2UKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRXJhc2VNYXJrZXJzQWZ0ZXJDaGFuZ2VTZWxl
Y3Rpb24oV2ViQ29yZTo6VGV4dENoZWNraW5nVHlwZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBpZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0
IFdURjo6U3RyaW5nJikgb3ZlcnJpZGUgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGxlYXJuV29yZChj
b25zdCBXVEY6OlN0cmluZyYpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoLCBpbnQqIG1pc3NwZWxsaW5n
TG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpIG92ZXJyaWRlIHsgfQotICAgIHZpcnR1
YWwgV1RGOjpTdHJpbmcgZ2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQo
Y29uc3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZSB7IHJldHVybiAiIjsgfQotICAgIHZpcnR1YWwg
dm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFdURjo6
VmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24s
IGludCogYmFkR3JhbW1hckxlbmd0aCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVhbCB2b2lkIGln
bm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoU3RyaW5nVmlldykgb3ZlcnJpZGUgeyB9CisgICAgdmly
dHVhbCB2b2lkIGxlYXJuV29yZChTdHJpbmdWaWV3KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKFN0cmluZ1ZpZXcsIGludCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVh
bCBXVEY6OlN0cmluZyBnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChT
dHJpbmdWaWV3KSBvdmVycmlkZSB7IHJldHVybiAiIjsgfQorICAgIHZpcnR1YWwgdm9pZCBjaGVj
a0dyYW1tYXJPZlN0cmluZyhTdHJpbmdWaWV3LCBXVEY6OlZlY3RvcjxXZWJDb3JlOjpHcmFtbWFy
RGV0YWlsPiYsIGludCogYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgp
IG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgVmVjdG9yPFdlYkNvcmU6OlRleHRDaGVja2luZ1Jl
c3VsdD4gY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoU3RyaW5nVmlldywgV2ViQ29yZTo6VGV4dENoZWNr
aW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhjb25zdCBXVEY6OlN0cmluZyYsIGNvbnN0
IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmKSBvdmVycmlkZSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChjb25zdCBXVEY6OlN0cmluZyYpIG92
ZXJyaWRlIHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoU3RyaW5nVmlldywgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFpbCYpIG92ZXJyaWRl
IHsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KFN0cmluZ1ZpZXcpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzaG93U3BlbGxpbmdV
SShib29sIHNob3cpIG92ZXJyaWRlIHsgfQogICAgIHZpcnR1YWwgYm9vbCBzcGVsbGluZ1VJSXNT
aG93aW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0
R3Vlc3Nlc0ZvcldvcmQoY29uc3QgV1RGOjpTdHJpbmcmIHdvcmQsIGNvbnN0IFdURjo6U3RyaW5n
JiBjb250ZXh0LCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMpIG92ZXJyaWRlIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChTdHJpbmdWaWV3IHdvcmQsIFN0
cmluZ1ZpZXcgY29udGV4dCwgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBndWVzc2VzKSBvdmVy
cmlkZSB7IH0KICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAgICAgdmlydHVhbCB2b2lkIHdpbGxT
ZXRJbnB1dE1ldGhvZFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldElucHV0
TWV0aG9kU3RhdGUoYm9vbCBlbmFibGVkKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0JKHJldmlzaW9u
IDE2MjI4NSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNs
aWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtNzk3LDE0ICs3OTcsNiBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6dGV4dERpZENoYW5nZUluVGV4CiAgICAgQ2FsbEZvcm1EZWxlZ2F0ZShtX3dlYlZp
ZXcsIEBzZWxlY3Rvcih0ZXh0RGlkQ2hhbmdlSW5UZXh0QXJlYTppbkZyYW1lOiksIHRleHRBcmVh
RWxlbWVudCwga2l0KGVsZW1lbnQtPmRvY3VtZW50KCkuZnJhbWUoKSkpOwogfQogCi1zdGF0aWMg
UmV0YWluUHRyPE5TU3RyaW5nPiBuc1N0cmluZ1dpdGhvdXRDb3B5aW5nKFN0cmluZ1ZpZXcgc3Ry
aW5nVmlldykKLXsKLSAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJu
IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhCeXRlc05vQ29weTpjb25zdF9jYXN0
PExDaGFyKj4oc3RyaW5nVmlldy5jaGFyYWN0ZXJzOCgpKSBsZW5ndGg6c3RyaW5nVmlldy5sZW5n
dGgoKSBlbmNvZGluZzpOU0lTT0xhdGluMVN0cmluZ0VuY29kaW5nIGZyZWVXaGVuRG9uZTpOT10p
OwotCi0gICAgcmV0dXJuIGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0
ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8dW5pY2hhcio+KHN0cmluZ1ZpZXcuY2hhcmFjdGVyczE2KCkp
IGxlbmd0aDpzdHJpbmdWaWV3Lmxlbmd0aCgpIGZyZWVXaGVuRG9uZTpOT10pOwotfQotCiAjaWYg
UExBVEZPUk0oSU9TKQogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnN1cHByZXNzU2VsZWN0aW9uTm90
aWZpY2F0aW9ucygpIAogewpAQCAtODg5LDcgKzg4MSw3IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+IFdlYkVkaXRvckNsaWUKIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJl
c3VsdHM7CiAKLSAgICBhdXRvIHRleHRTdHJpbmcgPSBuc1N0cmluZ1dpdGhvdXRDb3B5aW5nKHN0
cmluZyk7CisgICAgYXV0byB0ZXh0U3RyaW5nID0gc3RyaW5nLnRvTlNTdHJpbmdXaXRob3V0Q29w
eWluZygpOwogICAgIE5TQXJyYXkgKmluY29taW5nUmVzdWx0cyA9IFtbbV93ZWJWaWV3IF9VSUtp
dERlbGVnYXRlRm9yd2FyZGVyXSBjaGVja1NwZWxsaW5nT2ZTdHJpbmc6dGV4dFN0cmluZy5nZXQo
KV07CiAgICAgW3RleHRTdHJpbmcgcmVsZWFzZV07CiAgICAgZm9yIChOU1ZhbHVlICppbmNvbWlu
Z1Jlc3VsdCBpbiBpbmNvbWluZ1Jlc3VsdHMpIHsKQEAgLTkxMywyMiArOTA1LDIwIEBAIGJvb2wg
V2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFcmFzZU1hcmtlcnMKICAgICByZXR1cm4gdHlwZSAhPSBU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjppZ25v
cmVXb3JkSW5TcGVsbERvY3VtZW50KGNvbnN0IFN0cmluZyYgdGV4dCkKK3ZvaWQgV2ViRWRpdG9y
Q2xpZW50OjppZ25vcmVXb3JkSW5TcGVsbERvY3VtZW50KFN0cmluZ1ZpZXcgdGV4dCkKIHsKLSAg
ICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gaWdub3JlV29yZDp0ZXh0IAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxs
Q2hlY2tlckRvY3VtZW50VGFnKCldOworICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxD
aGVja2VyXSBpZ25vcmVXb3JkOnRleHQudG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCkuZ2V0KCkg
aW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpXTsKIH0KIAot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHRleHQpCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6bGVhcm5Xb3JkKFN0cmluZ1ZpZXcgdGV4dCkKIHsKLSAgICBbW05T
U3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gbGVhcm5Xb3JkOnRleHRdOworICAgIFtb
TlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBsZWFybldvcmQ6dGV4dC50b05TU3Ry
aW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV07CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1NwZWxsaW5nT2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGludCog
bWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3ZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldyB0ZXh0LCBpbnQqIG1p
c3NwZWxsaW5nTG9jYXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCiB7Ci0gICAgTlNTdHJp
bmcqIHRleHRTdHJpbmcgPSBbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aENoYXJhY3RlcnNOb0Nv
cHk6Y29uc3RfY2FzdDxVQ2hhcio+KHRleHQpIGxlbmd0aDpsZW5ndGggZnJlZVdoZW5Eb25lOk5P
XTsKLSAgICBOU1JhbmdlIHJhbmdlID0gW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNr
ZXJdIGNoZWNrU3BlbGxpbmdPZlN0cmluZzp0ZXh0U3RyaW5nIHN0YXJ0aW5nQXQ6MCBsYW5ndWFn
ZTpuaWwgd3JhcDpOTyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50
VGFnKCkgd29yZENvdW50Ok5VTExdOwotICAgIFt0ZXh0U3RyaW5nIHJlbGVhc2VdOworICAgIGF1
dG8gdGV4dFN0cmluZyA9IHRleHQudG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CisgICAgTlNS
YW5nZSByYW5nZSA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja1Nw
ZWxsaW5nT2ZTdHJpbmc6dGV4dFN0cmluZy5nZXQoKSBzdGFydGluZ0F0OjAgbGFuZ3VhZ2U6bmls
IHdyYXA6Tk8gaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVudFRhZygp
IHdvcmRDb3VudDpOVUxMXTsKICAgICBpZiAobWlzc3BlbGxpbmdMb2NhdGlvbikgewogICAgICAg
ICAvLyBXZWJDb3JlIGV4cGVjdHMgLTEgdG8gcmVwcmVzZW50ICJub3QgZm91bmQiCiAgICAgICAg
IGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQpAQCAtOTQxLDE5ICs5MzEsMTggQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cgogICAgICAgICAqbWlzc3Bl
bGxpbmdMZW5ndGggPSByYW5nZS5sZW5ndGg7CiB9CiAKLVN0cmluZyBXZWJFZGl0b3JDbGllbnQ6
OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKGNvbnN0IFN0cmluZyYg
aW5wdXRXb3JkKQorU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6Z2V0QXV0b0NvcnJlY3RTdWdnZXN0
aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldyBpbnB1dFdvcmQpCiB7CiAgICAgLy8gVGhp
cyBtZXRob2QgY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nIGN1c3RvbWl6ZWQgYWxnb3JpdGhtcyBm
b3IgdGhlIHBhcnRpY3VsYXIgYnJvd3Nlci4KICAgICAvLyBDdXJyZW50bHksIGl0IGNvbXB1dGVz
IGFuIGVtcHR5IHN0cmluZy4KICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZvaWQgV2ViRWRp
dG9yQ2xpZW50OjpjaGVja0dyYW1tYXJPZlN0cmluZyhjb25zdCBVQ2hhciogdGV4dCwgaW50IGxl
bmd0aCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2Nh
dGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNr
R3JhbW1hck9mU3RyaW5nKFN0cmluZ1ZpZXcgdGV4dCwgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBk
ZXRhaWxzLCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQog
ewogICAgIE5TQXJyYXkgKmdyYW1tYXJEZXRhaWxzOwotICAgIE5TU3RyaW5nKiB0ZXh0U3RyaW5n
ID0gW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhDaGFyYWN0ZXJzTm9Db3B5OmNvbnN0X2Nhc3Q8
VUNoYXIqPih0ZXh0KSBsZW5ndGg6bGVuZ3RoIGZyZWVXaGVuRG9uZTpOT107Ci0gICAgTlNSYW5n
ZSByYW5nZSA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja0dyYW1t
YXJPZlN0cmluZzp0ZXh0U3RyaW5nIHN0YXJ0aW5nQXQ6MCBsYW5ndWFnZTpuaWwgd3JhcDpOTyBp
blNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgZGV0YWlsczom
Z3JhbW1hckRldGFpbHNdOwotICAgIFt0ZXh0U3RyaW5nIHJlbGVhc2VdOworICAgIGF1dG8gdGV4
dFN0cmluZyA9IHRleHQudG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5nKCk7CisgICAgTlNSYW5nZSBy
YW5nZSA9IFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSBjaGVja0dyYW1tYXJP
ZlN0cmluZzp0ZXh0U3RyaW5nLmdldCgpIHN0YXJ0aW5nQXQ6MCBsYW5ndWFnZTpuaWwgd3JhcDpO
TyBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgZGV0YWls
czomZ3JhbW1hckRldGFpbHNdOwogICAgIGlmIChiYWRHcmFtbWFyTG9jYXRpb24pCiAgICAgICAg
IC8vIFdlYkNvcmUgZXhwZWN0cyAtMSB0byByZXByZXNlbnQgIm5vdCBmb3VuZCIKICAgICAgICAg
KmJhZEdyYW1tYXJMb2NhdGlvbiA9IChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKSA/IC0x
IDogc3RhdGljX2Nhc3Q8aW50PihyYW5nZS5sb2NhdGlvbik7CkBAIC0xMDU4LDE0ICsxMDQ3LDE0
IEBAIHN0YXRpYyBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiBjb3JlKE4KIAogVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gV2ViRWRpdG9yQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaChT
dHJpbmdWaWV3IHN0cmluZywgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcykKIHsK
LSAgICBhdXRvIHRleHRTdHJpbmcgPSBuc1N0cmluZ1dpdGhvdXRDb3B5aW5nKHN0cmluZyk7Cisg
ICAgYXV0byB0ZXh0U3RyaW5nID0gc3RyaW5nLnRvTlNTdHJpbmdXaXRob3V0Q29weWluZygpOwog
CiAgICAgTlNBcnJheSAqaW5jb21pbmdSZXN1bHRzID0gW1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRT
cGVsbENoZWNrZXJdIGNoZWNrU3RyaW5nOnRleHRTdHJpbmcuZ2V0KCkgcmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgW3RleHRTdHJpbmcgbGVuZ3RoXSkgdHlwZXM6KGNoZWNraW5nVHlwZXN8TlNUZXh0Q2hl
Y2tpbmdUeXBlT3J0aG9ncmFwaHkpIG9wdGlvbnM6bmlsIGluU3BlbGxEb2N1bWVudFdpdGhUYWc6
c3BlbGxDaGVja2VyRG9jdW1lbnRUYWcoKSBvcnRob2dyYXBoeTpOVUxMIHdvcmRDb3VudDpOVUxM
XTsKIAogICAgIHJldHVybiBjb3JlKGluY29taW5nUmVzdWx0cywgY2hlY2tpbmdUeXBlcyk7CiB9
CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJp
bmcoY29uc3QgU3RyaW5nJiBiYWRHcmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBn
cmFtbWFyRGV0YWlsKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhTdHJpbmdWaWV3IGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJE
ZXRhaWwmIGdyYW1tYXJEZXRhaWwpCiB7CiAgICAgTlNNdXRhYmxlQXJyYXkqIGNvcnJlY3Rpb25z
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Z3JhbW1hckRldGFpbC5ndWVzc2VzLnNpemUoKTsgaSsrKSB7CkBAIC0xMDc2LDEyICsxMDY1LDEy
IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2kKICAgICBOU1N0cmlu
ZyogZ3JhbW1hclVzZXJEZXNjcmlwdGlvbiA9IGdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9u
OwogICAgIE5TRGljdGlvbmFyeSogZ3JhbW1hckRldGFpbERpY3QgPSBbTlNEaWN0aW9uYXJ5IGRp
Y3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TVmFsdWUgdmFsdWVXaXRoUmFuZ2U6Z3JhbW1h
clJhbmdlXSwgTlNHcmFtbWFyUmFuZ2UsIGdyYW1tYXJVc2VyRGVzY3JpcHRpb24sIE5TR3JhbW1h
clVzZXJEZXNjcmlwdGlvbiwgY29ycmVjdGlvbnMsIE5TR3JhbW1hckNvcnJlY3Rpb25zLCBuaWxd
OwogICAgIAotICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2VyXSB1cGRhdGVT
cGVsbGluZ1BhbmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZSBkZXRhaWw6Z3Jh
bW1hckRldGFpbERpY3RdOworICAgIFtbTlNTcGVsbENoZWNrZXIgc2hhcmVkU3BlbGxDaGVja2Vy
XSB1cGRhdGVTcGVsbGluZ1BhbmVsV2l0aEdyYW1tYXJTdHJpbmc6YmFkR3JhbW1hclBocmFzZS50
b05TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSBkZXRhaWw6Z3JhbW1hckRldGFpbERpY3Rd
OwogfQogCi12b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVs
bGVkV29yZChjb25zdCBTdHJpbmcmIG1pc3NwZWxsZWRXb3JkKQordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldyBtaXNzcGVs
bGVkV29yZCkKIHsKLSAgICBbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxsQ2hlY2tlcl0gdXBk
YXRlU3BlbGxpbmdQYW5lbFdpdGhNaXNzcGVsbGVkV29yZDptaXNzcGVsbGVkV29yZF07CisgICAg
W1tOU1NwZWxsQ2hlY2tlciBzaGFyZWRTcGVsbENoZWNrZXJdIHVwZGF0ZVNwZWxsaW5nUGFuZWxX
aXRoTWlzc3BlbGxlZFdvcmQ6bWlzc3BlbGxlZFdvcmQudG9OU1N0cmluZ1dpdGhvdXRDb3B5aW5n
KCkuZ2V0KCldOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6c2hvd1NwZWxsaW5nVUkoYm9v
bCBzaG93KQpAQCAtMTA5OCwxNiArMTA4NywxNyBAQCBib29sIFdlYkVkaXRvckNsaWVudDo6c3Bl
bGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuIFtbW05TU3BlbGxDaGVja2VyIHNoYXJlZFNwZWxs
Q2hlY2tlcl0gc3BlbGxpbmdQYW5lbF0gaXNWaXNpYmxlXTsKIH0KIAotdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwgY29uc3QgU3RyaW5n
JiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlcykgewordm9pZCBXZWJFZGl0b3JDbGll
bnQ6OmdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcgd29yZCwgU3RyaW5nVmlldyBjb250ZXh0
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykgewogICAgIGd1ZXNzZXMuY2xlYXIoKTsKICAgICBO
U1N0cmluZyogbGFuZ3VhZ2UgPSBuaWw7CiAgICAgTlNPcnRob2dyYXBoeSogb3J0aG9ncmFwaHkg
PSBuaWw7CiAgICAgTlNTcGVsbENoZWNrZXIgKmNoZWNrZXIgPSBbTlNTcGVsbENoZWNrZXIgc2hh
cmVkU3BlbGxDaGVja2VyXTsKICAgICBpZiAoY29udGV4dC5sZW5ndGgoKSkgewotICAgICAgICBb
Y2hlY2tlciBjaGVja1N0cmluZzpjb250ZXh0IHJhbmdlOk5TTWFrZVJhbmdlKDAsIGNvbnRleHQu
bGVuZ3RoKCkpIHR5cGVzOk5TVGV4dENoZWNraW5nVHlwZU9ydGhvZ3JhcGh5IG9wdGlvbnM6MCBp
blNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCkgb3J0aG9ncmFw
aHk6Jm9ydGhvZ3JhcGh5IHdvcmRDb3VudDowXTsKLSAgICAgICAgbGFuZ3VhZ2UgPSBbY2hlY2tl
ciBsYW5ndWFnZUZvcldvcmRSYW5nZTpOU01ha2VSYW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSBp
blN0cmluZzpjb250ZXh0IG9ydGhvZ3JhcGh5Om9ydGhvZ3JhcGh5XTsKKyAgICAgICAgYXV0byBj
b250ZXh0U3RyaW5nID0gY29udGV4dC50b05TU3RyaW5nV2l0aG91dENvcHlpbmcoKTsKKyAgICAg
ICAgW2NoZWNrZXIgY2hlY2tTdHJpbmc6Y29udGV4dFN0cmluZy5nZXQoKSByYW5nZTpOU01ha2VS
YW5nZSgwLCBjb250ZXh0Lmxlbmd0aCgpKSB0eXBlczpOU1RleHRDaGVja2luZ1R5cGVPcnRob2dy
YXBoeSBvcHRpb25zOjAgaW5TcGVsbERvY3VtZW50V2l0aFRhZzpzcGVsbENoZWNrZXJEb2N1bWVu
dFRhZygpIG9ydGhvZ3JhcGh5OiZvcnRob2dyYXBoeSB3b3JkQ291bnQ6MF07CisgICAgICAgIGxh
bmd1YWdlID0gW2NoZWNrZXIgbGFuZ3VhZ2VGb3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgY29u
dGV4dC5sZW5ndGgoKSkgaW5TdHJpbmc6Y29udGV4dFN0cmluZy5nZXQoKSBvcnRob2dyYXBoeTpv
cnRob2dyYXBoeV07CiAgICAgfQotICAgIE5TQXJyYXkqIHN0cmluZ3NBcnJheSA9IFtjaGVja2Vy
IGd1ZXNzZXNGb3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgd29yZC5sZW5ndGgoKSkgaW5TdHJp
bmc6d29yZCBsYW5ndWFnZTpsYW5ndWFnZSBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hl
Y2tlckRvY3VtZW50VGFnKCldOworICAgIE5TQXJyYXkqIHN0cmluZ3NBcnJheSA9IFtjaGVja2Vy
IGd1ZXNzZXNGb3JXb3JkUmFuZ2U6TlNNYWtlUmFuZ2UoMCwgd29yZC5sZW5ndGgoKSkgaW5TdHJp
bmc6d29yZC50b05TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKSBsYW5ndWFnZTpsYW5ndWFn
ZSBpblNwZWxsRG9jdW1lbnRXaXRoVGFnOnNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCldOwogICAg
IHVuc2lnbmVkIGNvdW50ID0gW3N0cmluZ3NBcnJheSBjb3VudF07CiAKICAgICBpZiAoY291bnQg
PiAwKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjIyODUpCisrKyBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAx
NC0wMS0xOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFN3aXRjaCB0
aGUgVGV4dENoZWNrZXJDbGllbnQgb3ZlciB0byB1c2luZyBTdHJpbmdWaWV3IGV2ZXJ5d2hlcmUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzI0Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6
aWdub3JlV29yZEluU3BlbGxEb2N1bWVudCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6Omxl
YXJuV29yZCk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cmlu
Zyk6CisgICAgICAgIChXZWJFZGl0b3JDbGllbnQ6OmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZv
ck1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Y2hlY2tHcmFtbWFy
T2ZTdHJpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGluZ1VJV2l0
aEdyYW1tYXJTdHJpbmcpOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50Ojp1cGRhdGVTcGVsbGlu
Z1VJV2l0aE1pc3NwZWxsZWRXb3JkKToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6Z2V0R3Vl
c3Nlc0ZvcldvcmQpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5o
OgorCiAyMDE0LTAxLTE4ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAg
IFdlYiBJbnNwZWN0b3I6IFBhZ2Ugc2hvdWxkIHVzZSBzdGQ6OnVuaXF1ZV9wdHIgZm9yIEluc3Bl
Y3RvckNvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNpb24gMTYyMjg1KQorKysgU291cmNl
L1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjM4LDcgKzYzOCw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50OjpzaG91bGRFcmFz
ZU1hcmtlcnMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6Omln
bm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoY29uc3QgU3RyaW5nJiB3b3JkKQordm9pZCBXZWJFZGl0
b3JDbGllbnQ6Omlnbm9yZVdvcmRJblNwZWxsRG9jdW1lbnQoU3RyaW5nVmlldyB3b3JkKQogewog
ICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAgICBpZiAoRkFJTEVEKG1fd2Vi
Vmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkKQEAgLTY0OCw3ICs2NDgs
NyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aWdub3JlV29yZEluU3BlbGxECiAgICAgZWQtPmln
bm9yZVdvcmRJblNwZWxsRG9jdW1lbnQobV93ZWJWaWV3LCBCU3RyaW5nKHdvcmQpKTsKIH0KIAot
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OmxlYXJuV29yZChjb25zdCBTdHJpbmcmIHdvcmQpCit2b2lk
IFdlYkVkaXRvckNsaWVudDo6bGVhcm5Xb3JkKFN0cmluZ1ZpZXcgd29yZCkKIHsKICAgICBDT01Q
dHI8SVdlYkVkaXRpbmdEZWxlZ2F0ZT4gZWQ7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPmVk
aXRpbmdEZWxlZ2F0ZSgmZWQpKSB8fCAhZWQuZ2V0KCkpCkBAIC02NTcsNyArNjU3LDcgQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmxlYXJuV29yZChjb25zdCBTdAogICAgIGVkLT5sZWFybldvcmQo
QlN0cmluZyh3b3JkKSk7CiB9CiAKLXZvaWQgV2ViRWRpdG9yQ2xpZW50OjpjaGVja1NwZWxsaW5n
T2ZTdHJpbmcoY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIGludCogbWlzc3BlbGxpbmdM
b2NhdGlvbiwgaW50KiBtaXNzcGVsbGluZ0xlbmd0aCkKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50Ojpj
aGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldyB0ZXh0LCBpbnQqIG1pc3NwZWxsaW5nTG9j
YXRpb24sIGludCogbWlzc3BlbGxpbmdMZW5ndGgpCiB7CiAgICAgKm1pc3NwZWxsaW5nTG9jYXRp
b24gPSAtMTsKICAgICAqbWlzc3BlbGxpbmdMZW5ndGggPSAwOwpAQCAtNjcwLDE0ICs2NzAsMTQg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrU3BlbGxpbmdPZlN0cgogICAgIGVkLT5jaGVj
a1NwZWxsaW5nT2ZTdHJpbmcobV93ZWJWaWV3LCB0ZXh0LCBsZW5ndGgsIG1pc3NwZWxsaW5nTG9j
YXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKIH0KIAotU3RyaW5nIFdlYkVkaXRvckNsaWVudDo6
Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoY29uc3QgU3RyaW5nJiBp
bnB1dFdvcmQpCitTdHJpbmcgV2ViRWRpdG9yQ2xpZW50OjpnZXRBdXRvQ29ycmVjdFN1Z2dlc3Rp
b25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmdWaWV3IGlucHV0V29yZCkKIHsKICAgICAvLyBUaGlz
IG1ldGhvZCBjYW4gYmUgaW1wbGVtZW50ZWQgdXNpbmcgY3VzdG9taXplZCBhbGdvcml0aG1zIGZv
ciB0aGUgcGFydGljdWxhciBicm93c2VyLgogICAgIC8vIEN1cnJlbnRseSwgaXQgY29tcHV0ZXMg
YW4gZW1wdHkgc3RyaW5nLgogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVu
Z3RoLCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGRldGFpbHMsIGludCogYmFkR3JhbW1hckxvY2F0
aW9uLCBpbnQqIGJhZEdyYW1tYXJMZW5ndGgpCit2b2lkIFdlYkVkaXRvckNsaWVudDo6Y2hlY2tH
cmFtbWFyT2ZTdHJpbmcoU3RyaW5nVmlldywgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBkZXRhaWxz
LCBpbnQqIGJhZEdyYW1tYXJMb2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKQogewogICAg
IGRldGFpbHMuY2xlYXIoKTsKICAgICAqYmFkR3JhbW1hckxvY2F0aW9uID0gLTE7CkBAIC03MjIs
NyArNzIyLDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmNoZWNrR3JhbW1hck9mU3RyaQogICAg
IH0KIH0KIAotdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1h
clN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFp
bCYgZGV0YWlsKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhTdHJpbmdWaWV3IHN0cmluZywgY29uc3QgV2ViQ29yZTo6R3JhbW1hckRldGFp
bCYgZGV0YWlsKQogewogICAgIENPTVB0cjxJV2ViRWRpdGluZ0RlbGVnYXRlPiBlZDsKICAgICBp
ZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRlKCZlZCkpIHx8ICFlZC5nZXQoKSkK
QEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dXBkYXRlU3BlbGxpbmdV
SVdpCiAgICAgICAgIFN5c0ZyZWVTdHJpbmcoZ3Vlc3Nlc0JTVFJzW2ldKTsKIH0KIAotdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29uc3Qg
U3RyaW5nJiB3b3JkKQordm9pZCBXZWJFZGl0b3JDbGllbnQ6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoU3RyaW5nVmlldyB3b3JkKQogewogICAgIENPTVB0cjxJV2ViRWRpdGlu
Z0RlbGVnYXRlPiBlZDsKICAgICBpZiAoRkFJTEVEKG1fd2ViVmlldy0+ZWRpdGluZ0RlbGVnYXRl
KCZlZCkpIHx8ICFlZC5nZXQoKSkKQEAgLTc3MCw3ICs3NzAsNyBAQCBib29sIFdlYkVkaXRvckNs
aWVudDo6c3BlbGxpbmdVSUlzU2hvd2luCiAgICAgcmV0dXJuICEhc2hvd2luZzsKIH0KIAotdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OmdldEd1ZXNzZXNGb3JXb3JkKGNvbnN0IFN0cmluZyYgd29yZCwg
Y29uc3QgU3RyaW5nJiBjb250ZXh0LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKK3ZvaWQgV2Vi
RWRpdG9yQ2xpZW50OjpnZXRHdWVzc2VzRm9yV29yZChTdHJpbmdWaWV3IHdvcmQsIFN0cmluZ1Zp
ZXcsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewogICAgIGd1ZXNzZXMuY2xlYXIoKTsKIApJ
bmRleDogU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmgJKHJldmlzaW9uIDE2MjI4NSkKKysrIFNvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC05OCwxNiArOTgsMTYg
QEAgcHVibGljOgogICAgIHZvaWQgaGFuZGxlSW5wdXRNZXRob2RLZXlkb3duKFdlYkNvcmU6Oktl
eWJvYXJkRXZlbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRFcmFzZU1hcmtlcnNBZnRl
ckNoYW5nZVNlbGVjdGlvbihXZWJDb3JlOjpUZXh0Q2hlY2tpbmdUeXBlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1bWVudChjb25zdCBXVEY6OlN0cmluZyYp
OwotICAgIHZpcnR1YWwgdm9pZCBsZWFybldvcmQoY29uc3QgV1RGOjpTdHJpbmcmKTsKLSAgICB2
aXJ0dWFsIHZvaWQgY2hlY2tTcGVsbGluZ09mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0
aCwgaW50KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAg
ICB2aXJ0dWFsIFdURjo6U3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxs
ZWRXb3JkKGNvbnN0IFdURjo6U3RyaW5nJik7Ci0gICAgdmlydHVhbCB2b2lkIGNoZWNrR3JhbW1h
ck9mU3RyaW5nKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1t
YXJEZXRhaWw+JiwgaW50KiBiYWRHcmFtbWFyTG9jYXRpb24sIGludCogYmFkR3JhbW1hckxlbmd0
aCk7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhj
b25zdCBXVEY6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OkdyYW1tYXJEZXRhaWwmIGRldGFpbCk7
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoY29u
c3QgV1RGOjpTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgaWdub3JlV29yZEluU3BlbGxEb2N1
bWVudChTdHJpbmdWaWV3KTsKKyAgICB2aXJ0dWFsIHZvaWQgbGVhcm5Xb3JkKFN0cmluZ1ZpZXcp
OworICAgIHZpcnR1YWwgdm9pZCBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoU3RyaW5nVmlldywgaW50
KiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBpbnQqIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICB2aXJ0
dWFsIFdURjo6U3RyaW5nIGdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3Jk
KFN0cmluZ1ZpZXcpOworICAgIHZpcnR1YWwgdm9pZCBjaGVja0dyYW1tYXJPZlN0cmluZyhTdHJp
bmdWaWV3LCBWZWN0b3I8V2ViQ29yZTo6R3JhbW1hckRldGFpbD4mLCBpbnQqIGJhZEdyYW1tYXJM
b2NhdGlvbiwgaW50KiBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKFN0cmluZ1ZpZXcsIGNvbnN0IFdlYkNvcmU6Okdy
YW1tYXJEZXRhaWwmKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNz
cGVsbGVkV29yZChTdHJpbmdWaWV3KTsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1NwZWxsaW5nVUko
Ym9vbCBzaG93KTsKICAgICB2aXJ0dWFsIGJvb2wgc3BlbGxpbmdVSUlzU2hvd2luZygpOwotICAg
IHZpcnR1YWwgdm9pZCBnZXRHdWVzc2VzRm9yV29yZChjb25zdCBXVEY6OlN0cmluZyYgd29yZCwg
Y29uc3QgV1RGOjpTdHJpbmcmIGNvbnRleHQsIFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgZ3Vl
c3Nlcyk7CisgICAgdmlydHVhbCB2b2lkIGdldEd1ZXNzZXNGb3JXb3JkKFN0cmluZ1ZpZXcgd29y
ZCwgU3RyaW5nVmlldyBjb250ZXh0LCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGd1ZXNzZXMp
OwogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxTZXRJbnB1dE1ldGhvZFN0YXRlKCk7CiAgICAgdmly
dHVhbCB2b2lkIHNldElucHV0TWV0aG9kU3RhdGUoYm9vbCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>