<?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>147829</bug_id>
          
          <creation_ts>2015-08-10 10:07:05 -0700</creation_ts>
          <short_desc>Simplify code for making Page-cacheability decision</short_desc>
          <delta_ts>2016-01-28 15:27:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>History</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1116231</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-10 10:07:05 -0700</bug_when>
    <thetext>Simplify code for making Page-cacheability decision by merging logging code and decision making code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116248</commentid>
    <comment_count>1</comment_count>
      <attachid>258624</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-10 11:00:17 -0700</bug_when>
    <thetext>Created attachment 258624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116329</commentid>
    <comment_count>2</comment_count>
      <attachid>258624</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-08-10 14:01:29 -0700</bug_when>
    <thetext>Comment on attachment 258624
Patch

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

&gt; Source/WebCore/history/PageCache.cpp:88
&gt; -static unsigned logCanCacheFrameDecision(Frame&amp; frame, DiagnosticLoggingClient&amp; diagnosticLoggingClient, unsigned indentLevel)
&gt; +static bool canCacheFrame(Frame&amp; frame, DiagnosticLoggingClient&amp; diagnosticLoggingClient, unsigned indentLevel)
&gt;  {
&gt;      PCLOG(&quot;+---&quot;);
&gt; -    if (!frame.isMainFrame() &amp;&amp; frame.loader().state() == FrameStateProvisional) {
&gt; +    FrameLoader&amp; frameLoader = frame.loader();
&gt; +
&gt; +    // Prevent page caching if a subframe is still in provisional load stage.
&gt; +    // We only do this check for subframes because the main frame is reused when navigating to a new page.
&gt; +    if (!frame.isMainFrame() &amp;&amp; frameLoader.state() == FrameStateProvisional) {
&gt;          PCLOG(&quot;   -Frame is in provisional load stage&quot;);
&gt;          logPageCacheFailureDiagnosticMessage(diagnosticLoggingClient, DiagnosticLoggingKeys::provisionalLoadKey());
&gt; -        return 1 &lt;&lt; IsInProvisionalLoadStage;
&gt; +        return false;
&gt;      }

It might be cleaner to separate the decision-making similar to what is done in network cache code (makeRetrieveDecision()/makeStoreDecision()/makeUseDecision()) and have a separate logging function that takes the decision as argument. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116332</commentid>
    <comment_count>3</comment_count>
      <attachid>258624</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-08-10 14:22:05 -0700</bug_when>
    <thetext>Comment on attachment 258624
Patch

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

&gt;&gt; Source/WebCore/history/PageCache.cpp:88
&gt;&gt;      }
&gt; 
&gt; It might be cleaner to separate the decision-making similar to what is done in network cache code (makeRetrieveDecision()/makeStoreDecision()/makeUseDecision()) and have a separate logging function that takes the decision as argument. What do you think?

Hmm, unlike the disk cache decision making code, we have a lot more reasons for failing and we want to log all the reasons for failing. Also, the PCLog() part of the logging is structured so you virtual see the frame hierarchy, if the frame is failing or not and why.
For these reasons, I feel doing to logging separately from the decision making is going to make the code make complicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116347</commentid>
    <comment_count>4</comment_count>
      <attachid>258624</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-08-10 14:56:28 -0700</bug_when>
    <thetext>Comment on attachment 258624
Patch

Ok, though I bet if you implemented it would look better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116372</commentid>
    <comment_count>5</comment_count>
      <attachid>258624</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-10 15:58:36 -0700</bug_when>
    <thetext>Comment on attachment 258624
Patch

Clearing flags on attachment: 258624

Committed r188233: &lt;http://trac.webkit.org/changeset/188233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116373</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-10 15:58:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1159915</commentid>
    <comment_count>7</comment_count>
      <attachid>258624</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-01-28 15:27:51 -0800</bug_when>
    <thetext>Comment on attachment 258624
Patch

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

&gt; Source/WebCore/history/PageCache.cpp:-298
&gt; -bool PageCache::canCachePageContainingThisFrame(Frame&amp; frame)

The prototype of this function was not deleted from the header file in this patch. Also the ChangLog did not mention it was deleted. Maybe it is a bug in prepare-ChangeLog.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258624</attachid>
            <date>2015-08-10 11:00:17 -0700</date>
            <delta_ts>2015-08-10 15:58:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147829-20150810110002.patch</filename>
            <type>text/plain</type>
            <size>25759</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MjEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTJmYTExMmFhMjAwY2Mx
NTEzMzA3OGRmNGNkMTRiOTQ3NzNmMDM2Ni4uZjIxOTJkMDlhYzY5MjQzZDNkM2M0ZjYyYTk0NWQ2
NmMxMGIxNDRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE1LTA4LTEwICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxpZnkgY29kZSBmb3Ig
bWFraW5nIFBhZ2UtY2FjaGVhYmlsaXR5IGRlY2lzaW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc4MjkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW1wbGlmeSBjb2RlIGZvciBtYWtpbmcgUGFnZS1j
YWNoZWFiaWxpdHkgZGVjaXNpb24gYnkgbWVyZ2luZyBsb2dnaW5nCisgICAgICAgIGNvZGUgYW5k
IGRlY2lzaW9uIG1ha2luZyBjb2RlLiBIYXZpbmcgdGhlIHNhbWUgY2hlY2tzIGluIHR3byBwbGFj
ZXMgd2FzCisgICAgICAgIHJlZHVuZGFudCBhbmQgZXJyb3ItcHJvbmUgYXMgd2UgbmVlZGVkIHRv
IGtlZXAgdGhlbSBpbiBzeW5jLgorCisgICAgICAgIEFsc28gZ2V0IHJpZCBvZiBmYWlsdXJlIHJl
YXNvbiBlbnVtIHZhbHVlcyBhcyB0aG9zZSBoYXZlIG5vdCBiZWVuIHVzZWQKKyAgICAgICAgaW4g
YSB3aGlsZS4KKworICAgICAgICAqIGhpc3RvcnkvUGFnZUNhY2hlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNhbkNhY2hlRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQ2FjaGVQYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZTo6Y2FuQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6bG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBhZ2VDYWNoZTo6c2V0TWF4U2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpQYWdlQ2FjaGU6OmZyYW1lQ291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZUNhY2hlOjptYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZTo6bWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNoZTo6bWFya1BhZ2VzRm9yRGV2aWNl
T3JQYWdlU2NhbGVDaGFuZ2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDYWNo
ZTo6bWFya1BhZ2VzRm9yQ29udGVudHNTaXplQ2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQYWdlQ2FjaGU6Om1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cHJ1bmluZ1JlYXNvblRvRGlhZ25vc3RpY0xv
Z2dpbmdLZXkpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNEaXNhYmxl
ZEtleSk6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlZGlyZWN0
S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVwbGFjZUtl
eSk6CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnNvdXJjZUtleSk6
CisgICAgICAgIChXZWJDb3JlOjpEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuZGVyTWVtb3J5UHJl
c3N1cmVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZWxv
YWRGcm9tT3JpZ2luS2V5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL0RpYWdub3N0aWNMb2dn
aW5nS2V5cy5oOgorCiAyMDE1LTA4LTEwICBKYW1lcyBDcmFpZyAgPGpjcmFpZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgQVg6IEFkZHJlc3MgZm9sbG93LXVwIGNvbW1lbnRzIGluIGJ1ZyAxNDU2ODQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCA3ODUxYjZlYjViM2M2NmI1Yjg0
MzcyZTA2NTkyYzY3MzI5Zjg0MzEyLi45ZGNmNjA1MDJlYzFiMDdjNDdjMDRhNDUzOTRlODUyYTAw
ODJjOWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCkBAIC0zOSw3ICszOSw2
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJT
dGF0ZU1hY2hpbmUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIaXN0b3J5
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKQEAgLTU4LDQ0ICs1NywxMCBAQAog
I2luY2x1ZGUgIkRldmljZVByb3hpbWl0eUNvbnRyb2xsZXIuaCIKICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oSU9TKQotI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgotI2VuZGlmCi0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFkZWZpbmVkKE5ERUJVRykKLQogI2RlZmluZSBQ
Q0xPRyguLi4pIExPRyhQYWdlQ2FjaGUsICIlKnMlcyIsIGluZGVudExldmVsKjQsICIiLCBtYWtl
U3RyaW5nKF9fVkFfQVJHU19fKS51dGY4KCkuZGF0YSgpKQogCi0jZWxzZQotCi0jZGVmaW5lIFBD
TE9HKC4uLikgKCh2b2lkKTApCi0KLSNlbmRpZiAvLyAhZGVmaW5lZChOREVCVUcpCi0gICAgCi0v
LyBVc2VkIGluIGhpc3RvZ3JhbXMsIHBsZWFzZSBvbmx5IGFkZCBhdCB0aGUgZW5kLCBhbmQgZG8g
bm90IHJlbW92ZSBlbGVtZW50cyAocmVuYW1pbmcgZS5nLiB0byAiRm9vRW51bVVudXNlZDEiIGlz
IGZpbmUpLgotLy8gVGhpcyBpcyBiZWNhdXNlIHN0YXRpc3RpY3MgbWF5IGJlIGdhdGhlcmVkIGZy
b20gaGlzdG9ncmFtcyBiZXR3ZWVuIHZlcnNpb25zIG92ZXIgdGltZSwgYW5kIHJlLXVzaW5nIHZh
bHVlcyBjYXVzZXMgY29sbGlzaW9ucy4KLWVudW0gUmVhc29uRnJhbWVDYW5ub3RCZUluUGFnZUNh
Y2hlIHsKLSAgICBOb0RvY3VtZW50TG9hZGVyID0gMCwKLSAgICBNYWluRG9jdW1lbnRFcnJvciwK
LSAgICBJc0Vycm9yUGFnZSwKLSAgICBIYXNQbHVnaW5zLAotICAgIElzSHR0cHNBbmRDYWNoZUNv
bnRyb2xsZWQsCi0gICAgSGFzRGF0YWJhc2VIYW5kbGVzLCAvLyBGSVhNRTogUmVtb3ZlLgotICAg
IEhhc1NoYXJlZFdvcmtlcnMsIC8vIEZJWE1FOiBSZW1vdmUuCi0gICAgTm9IaXN0b3J5SXRlbSwK
LSAgICBRdWlja1JlZGlyZWN0Q29taW5nLAotICAgIElzTG9hZGluZywKLSAgICBJc1N0b3BwaW5n
LAotICAgIENhbm5vdFN1c3BlbmRBY3RpdmVET01PYmplY3RzLAotICAgIERvY3VtZW50TG9hZGVy
VXNlc0FwcGxpY2F0aW9uQ2FjaGUsCi0gICAgQ2xpZW50RGVuaWVzQ2FjaGluZywKLSAgICBOdW1i
ZXJPZlJlYXNvbnNGcmFtZXNDYW5ub3RCZUluUGFnZUNhY2hlLAotICAgIElzSW5Qcm92aXNpb25h
bExvYWRTdGFnZSwKLX07Ci1DT01QSUxFX0FTU0VSVChOdW1iZXJPZlJlYXNvbnNGcmFtZXNDYW5u
b3RCZUluUGFnZUNhY2hlIDw9IHNpemVvZih1bnNpZ25lZCkqOCwgUmVhc29uRnJhbWVDYW5ub3RC
ZUluUGFnZUNhY2hlRG9lc05vdEZpdEluQml0bWFwKTsKLQogc3RhdGljIGlubGluZSB2b2lkIGxv
Z1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShEaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dCYgY2xpZW50LCBjb25zdCBTdHJpbmcmIHJlYXNvbikKIHsKICAgICBjbGllbnQubG9nRGlhZ25v
c3RpY01lc3NhZ2VXaXRoVmFsdWUoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwYWdlQ2FjaGVLZXko
KSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpmYWlsdXJlS2V5KCksIHJlYXNvbiwgU2hvdWxkU2Ft
cGxlOjpZZXMpOwpAQCAtMTA5LDcxICs3NCw3OCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgbG9nUGFn
ZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKFBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZwog
ICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLT5tYWluRnJhbWUo
KS5kaWFnbm9zdGljTG9nZ2luZ0NsaWVudCgpLCByZWFzb24pOwogfQogCi1zdGF0aWMgdW5zaWdu
ZWQgbG9nQ2FuQ2FjaGVGcmFtZURlY2lzaW9uKEZyYW1lJiBmcmFtZSwgRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQmIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCB1bnNpZ25lZCBpbmRlbnRMZXZlbCkK
K3N0YXRpYyBib29sIGNhbkNhY2hlRnJhbWUoRnJhbWUmIGZyYW1lLCBEaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCYgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIHVuc2lnbmVkIGluZGVudExldmVsKQog
ewogICAgIFBDTE9HKCIrLS0tIik7Ci0gICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpICYmIGZy
YW1lLmxvYWRlcigpLnN0YXRlKCkgPT0gRnJhbWVTdGF0ZVByb3Zpc2lvbmFsKSB7CisgICAgRnJh
bWVMb2FkZXImIGZyYW1lTG9hZGVyID0gZnJhbWUubG9hZGVyKCk7CisKKyAgICAvLyBQcmV2ZW50
IHBhZ2UgY2FjaGluZyBpZiBhIHN1YmZyYW1lIGlzIHN0aWxsIGluIHByb3Zpc2lvbmFsIGxvYWQg
c3RhZ2UuCisgICAgLy8gV2Ugb25seSBkbyB0aGlzIGNoZWNrIGZvciBzdWJmcmFtZXMgYmVjYXVz
ZSB0aGUgbWFpbiBmcmFtZSBpcyByZXVzZWQgd2hlbiBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2Uu
CisgICAgaWYgKCFmcmFtZS5pc01haW5GcmFtZSgpICYmIGZyYW1lTG9hZGVyLnN0YXRlKCkgPT0g
RnJhbWVTdGF0ZVByb3Zpc2lvbmFsKSB7CiAgICAgICAgIFBDTE9HKCIgICAtRnJhbWUgaXMgaW4g
cHJvdmlzaW9uYWwgbG9hZCBzdGFnZSIpOwogICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlh
Z25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5n
S2V5czo6cHJvdmlzaW9uYWxMb2FkS2V5KCkpOwotICAgICAgICByZXR1cm4gMSA8PCBJc0luUHJv
dmlzaW9uYWxMb2FkU3RhZ2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYg
KCFmcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKSB7CisKKyAgICBEb2N1bWVudExvYWRl
ciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxvYWRlci5kb2N1bWVudExvYWRlcigpOworICAgIGlm
ICghZG9jdW1lbnRMb2FkZXIpIHsKICAgICAgICAgUENMT0coIiAgIC1UaGVyZSBpcyBubyBEb2N1
bWVudExvYWRlciBvYmplY3QiKTsKICAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0
aWNNZXNzYWdlKGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6
Om5vRG9jdW1lbnRMb2FkZXJLZXkoKSk7Ci0gICAgICAgIHJldHVybiAxIDw8IE5vRG9jdW1lbnRM
b2FkZXI7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBVUkwgY3VycmVudFVS
TCA9IGZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnVybCgpOwotICAgIFVSTCBuZXdV
UkwgPSBmcmFtZS5sb2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCkgPyBmcmFtZS5s
b2FkZXIoKS5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnVybCgpIDogVVJMKCk7CisgICAg
VVJMIGN1cnJlbnRVUkwgPSBkb2N1bWVudExvYWRlci0+dXJsKCk7CisgICAgVVJMIG5ld1VSTCA9
IGZyYW1lTG9hZGVyLnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKSA/IGZyYW1lTG9hZGVyLnBy
b3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+dXJsKCkgOiBVUkwoKTsKICAgICBpZiAoIW5ld1VS
TC5pc0VtcHR5KCkpCiAgICAgICAgIFBDTE9HKCIgRGV0ZXJtaW5pbmcgaWYgZnJhbWUgY2FuIGJl
IGNhY2hlZCBuYXZpZ2F0aW5nIGZyb20gKCIsIGN1cnJlbnRVUkwuc3RyaW5nKCksICIpIHRvICgi
LCBuZXdVUkwuc3RyaW5nKCksICIpOiIpOwogICAgIGVsc2UKICAgICAgICAgUENMT0coIiBEZXRl
cm1pbmluZyBpZiBzdWJmcmFtZSB3aXRoIFVSTCAoIiwgY3VycmVudFVSTC5zdHJpbmcoKSwgIikg
Y2FuIGJlIGNhY2hlZDoiKTsKICAgICAgCi0gICAgdW5zaWduZWQgcmVqZWN0UmVhc29ucyA9IDA7
Ci0gICAgaWYgKCFmcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpLT5tYWluRG9jdW1lbnRF
cnJvcigpLmlzTnVsbCgpKSB7CisgICAgYm9vbCBpc0NhY2hlYWJsZSA9IHRydWU7CisgICAgaWYg
KCFkb2N1bWVudExvYWRlci0+bWFpbkRvY3VtZW50RXJyb3IoKS5pc051bGwoKSkgewogICAgICAg
ICBQQ0xPRygiICAgLU1haW4gZG9jdW1lbnQgaGFzIGFuIGVycm9yIik7CiAgICAgICAgIGxvZ1Bh
Z2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwg
RGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjptYWluRG9jdW1lbnRFcnJvcktleSgpKTsKIAotICAgICAg
ICBpZiAoZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+bWFpbkRvY3VtZW50RXJyb3Io
KS5pc0NhbmNlbGxhdGlvbigpICYmIGZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPnN1
YnJlc291cmNlTG9hZGVyc0FyZVBhZ2VDYWNoZUFjY2VwdGFibGUoKSkKKyAgICAgICAgaWYgKGRv
Y3VtZW50TG9hZGVyLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzQ2FuY2VsbGF0aW9uKCkgJiYgZG9j
dW1lbnRMb2FkZXItPnN1YnJlc291cmNlTG9hZGVyc0FyZVBhZ2VDYWNoZUFjY2VwdGFibGUoKSkK
ICAgICAgICAgICAgIFBDTE9HKCIgICAgLUJ1dCwgaXQgd2FzIGEgY2FuY2VsbGF0aW9uIGFuZCBh
bGwgbG9hZGVycyBkdXJpbmcgdGhlIGNhbmNlbGF0aW9uIHdlcmUgbG9hZGluZyBpbWFnZXMgb3Ig
WEhSLiIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZWplY3RSZWFzb25zIHw9IDEgPDwg
TWFpbkRvY3VtZW50RXJyb3I7CisgICAgICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwogICAg
IH0KLSAgICBpZiAoZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+c3Vic3RpdHV0ZURh
dGEoKS5pc1ZhbGlkKCkgJiYgZnJhbWUubG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+c3Vic3Rp
dHV0ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpKSB7CisgICAgLy8gRG8gbm90IGNhY2hl
IGVycm9yIHBhZ2VzICh0aGVzZSBjYW4gYmUgcmVjb2duaXplZCBhcyBwYWdlcyB3aXRoIHN1YnN0
aXR1dGUgZGF0YSBvciB1bnJlYWNoYWJsZSBVUkxzKS4KKyAgICBpZiAoZG9jdW1lbnRMb2FkZXIt
PnN1YnN0aXR1dGVEYXRhKCkuaXNWYWxpZCgpICYmICFkb2N1bWVudExvYWRlci0+c3Vic3RpdHV0
ZURhdGEoKS5mYWlsaW5nVVJMKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIFBDTE9HKCIgICAtRnJh
bWUgaXMgYW4gZXJyb3IgcGFnZSIpOwogICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25v
c3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5
czo6aXNFcnJvclBhZ2VLZXkoKSk7Ci0gICAgICAgIHJlamVjdFJlYXNvbnMgfD0gMSA8PCBJc0Vy
cm9yUGFnZTsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgaWYgKGZy
YW1lLmxvYWRlcigpLnN1YmZyYW1lTG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkgJiYgIWZyYW1l
LnBhZ2UoKS0+c2V0dGluZ3MoKS5wYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMoKSkgeworICAgIGlm
IChmcmFtZUxvYWRlci5zdWJmcmFtZUxvYWRlcigpLmNvbnRhaW5zUGx1Z2lucygpICYmICFmcmFt
ZS5wYWdlKCktPnNldHRpbmdzKCkucGFnZUNhY2hlU3VwcG9ydHNQbHVnaW5zKCkpIHsKICAgICAg
ICAgUENMT0coIiAgIC1GcmFtZSBjb250YWlucyBwbHVnaW5zIik7CiAgICAgICAgIGxvZ1BhZ2VD
YWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpoYXNQbHVnaW5zS2V5KCkpOwotICAgICAgICByZWplY3RSZWFz
b25zIHw9IDEgPDwgSGFzUGx1Z2luczsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKICAg
ICB9Ci0gICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkgJiYgZnJhbWUuZG9jdW1lbnQoKS0+dXJs
KCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiBmcmFtZS5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigp
LT5yZXNwb25zZSgpLmNhY2hlQ29udHJvbENvbnRhaW5zTm9TdG9yZSgpKSB7CisgICAgaWYgKGZy
YW1lLmlzTWFpbkZyYW1lKCkgJiYgZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkucHJvdG9jb2xJcygi
aHR0cHMiKSAmJiBkb2N1bWVudExvYWRlci0+cmVzcG9uc2UoKS5jYWNoZUNvbnRyb2xDb250YWlu
c05vU3RvcmUoKSkgewogICAgICAgICBQQ0xPRygiICAgLUZyYW1lIGlzIEhUVFBTLCBhbmQgY2Fj
aGUgY29udHJvbCBwcm9oaWJpdHMgc3RvcmluZyIpOwogICAgICAgICBsb2dQYWdlQ2FjaGVGYWls
dXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNM
b2dnaW5nS2V5czo6aHR0cHNOb1N0b3JlS2V5KCkpOwotICAgICAgICByZWplY3RSZWFzb25zIHw9
IDEgPDwgSXNIdHRwc0FuZENhY2hlQ29udHJvbGxlZDsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBm
YWxzZTsKICAgICB9Ci0gICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1lKCkgJiYgIWZyYW1lLmxvYWRl
cigpLmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpKSB7CisgICAgaWYgKGZyYW1lLmlzTWFpbkZyYW1l
KCkgJiYgIWZyYW1lTG9hZGVyLmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpKSB7CiAgICAgICAgIFBD
TE9HKCIgICAtTWFpbiBmcmFtZSBoYXMgbm8gY3VycmVudCBoaXN0b3J5IGl0ZW0iKTsKICAgICAg
ICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKGRpYWdub3N0aWNMb2dnaW5n
Q2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6Om5vQ3VycmVudEhpc3RvcnlJdGVtS2V5KCkp
OwotICAgICAgICByZWplY3RSZWFzb25zIHw9IDEgPDwgTm9IaXN0b3J5SXRlbTsKKyAgICAgICAg
aXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICB9Ci0gICAgaWYgKGZyYW1lLmxvYWRlcigpLnF1aWNr
UmVkaXJlY3RDb21pbmcoKSkgeworICAgIGlmIChmcmFtZUxvYWRlci5xdWlja1JlZGlyZWN0Q29t
aW5nKCkpIHsKICAgICAgICAgUENMT0coIiAgIC1RdWljayByZWRpcmVjdCBpcyBjb21pbmciKTsK
ICAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKGRpYWdub3N0aWNM
b2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnF1aXJrUmVkaXJlY3RDb21pbmdL
ZXkoKSk7Ci0gICAgICAgIHJlamVjdFJlYXNvbnMgfD0gMSA8PCBRdWlja1JlZGlyZWN0Q29taW5n
OworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICBpZiAoZnJhbWUubG9h
ZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nKCkpIHsKKyAgICBpZiAoZG9jdW1lbnRM
b2FkZXItPmlzTG9hZGluZygpKSB7CiAgICAgICAgIFBDTE9HKCIgICAtRG9jdW1lbnRMb2FkZXIg
aXMgc3RpbGwgbG9hZGluZyIpOwogICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3Rp
Y01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6
aXNMb2FkaW5nS2V5KCkpOwotICAgICAgICByZWplY3RSZWFzb25zIHw9IDEgPDwgSXNMb2FkaW5n
OworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwogICAgIH0KLSAgICBpZiAoZnJhbWUubG9h
ZGVyKCkuZG9jdW1lbnRMb2FkZXIoKS0+aXNTdG9wcGluZygpKSB7CisgICAgaWYgKGRvY3VtZW50
TG9hZGVyLT5pc1N0b3BwaW5nKCkpIHsKICAgICAgICAgUENMT0coIiAgIC1Eb2N1bWVudExvYWRl
ciBpcyBpbiB0aGUgbWlkZGxlIG9mIHN0b3BwaW5nIik7CiAgICAgICAgIGxvZ1BhZ2VDYWNoZUZh
aWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3Rp
Y0xvZ2dpbmdLZXlzOjpkb2N1bWVudExvYWRlclN0b3BwaW5nS2V5KCkpOwotICAgICAgICByZWpl
Y3RSZWFzb25zIHw9IDEgPDwgSXNTdG9wcGluZzsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxz
ZTsKICAgICB9CiAKICAgICBWZWN0b3I8QWN0aXZlRE9NT2JqZWN0Kj4gdW5zdXNwZW5kYWJsZU9i
amVjdHM7CkBAIC0xODUsMTA4ICsxNTcsMTEzIEBAIHN0YXRpYyB1bnNpZ25lZCBsb2dDYW5DYWNo
ZUZyYW1lRGVjaXNpb24oRnJhbWUmIGZyYW1lLCBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudCYKICAg
ICAgICAgICAgIFVOVVNFRF9QQVJBTShhY3RpdmVET01PYmplY3QpOwogICAgICAgICB9CiAgICAg
ICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2lu
Z0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpjYW5ub3RTdXNwZW5kQWN0aXZlRE9NT2Jq
ZWN0c0tleSgpKTsKLSAgICAgICAgcmVqZWN0UmVhc29ucyB8PSAxIDw8IENhbm5vdFN1c3BlbmRB
Y3RpdmVET01PYmplY3RzOworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwogICAgIH0KLSAg
ICBpZiAoIWZyYW1lLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCktPmFwcGxpY2F0aW9uQ2FjaGVI
b3N0KCktPmNhbkNhY2hlSW5QYWdlQ2FjaGUoKSkgeworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
aW52ZXN0aWdhdGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRlZAorICAg
IC8vIGFwcGxpY2F0aW9uIGNhY2hlLiA8cmRhcjovL3Byb2JsZW0vNTkxNzg5OT4gdHJhY2tzIHRo
YXQgd29yay4KKyAgICBpZiAoIWRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgp
LT5jYW5DYWNoZUluUGFnZUNhY2hlKCkpIHsKICAgICAgICAgUENMT0coIiAgIC1UaGUgRG9jdW1l
bnRMb2FkZXIgdXNlcyBhbiBhcHBsaWNhdGlvbiBjYWNoZSIpOwogICAgICAgICBsb2dQYWdlQ2Fj
aGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdu
b3N0aWNMb2dnaW5nS2V5czo6YXBwbGljYXRpb25DYWNoZUtleSgpKTsKLSAgICAgICAgcmVqZWN0
UmVhc29ucyB8PSAxIDw8IERvY3VtZW50TG9hZGVyVXNlc0FwcGxpY2F0aW9uQ2FjaGU7CisgICAg
ICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgfQotICAgIGlmICghZnJhbWUubG9hZGVyKCku
Y2xpZW50KCkuY2FuQ2FjaGVQYWdlKCkpIHsKKyAgICBpZiAoIWZyYW1lTG9hZGVyLmNsaWVudCgp
LmNhbkNhY2hlUGFnZSgpKSB7CiAgICAgICAgIFBDTE9HKCIgICAtVGhlIGNsaWVudCBzYXlzIHRo
aXMgZnJhbWUgY2Fubm90IGJlIGNhY2hlZCIpOwogICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJl
RGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dn
aW5nS2V5czo6ZGVuaWVkQnlDbGllbnRLZXkoKSk7Ci0gICAgICAgIHJlamVjdFJlYXNvbnMgfD0g
MSA8PCBDbGllbnREZW5pZXNDYWNoaW5nOworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwog
ICAgIH0KIAotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBy
ZWplY3RSZWFzb25zIHw9IGxvZ0NhbkNhY2hlRnJhbWVEZWNpc2lvbigqY2hpbGQsIGRpYWdub3N0
aWNMb2dnaW5nQ2xpZW50LCBpbmRlbnRMZXZlbCArIDEpOworICAgIGZvciAoRnJhbWUqIGNoaWxk
ID0gZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUo
KS5uZXh0U2libGluZygpKSB7CisgICAgICAgIGlmICghY2FuQ2FjaGVGcmFtZSgqY2hpbGQsIGRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LCBpbmRlbnRMZXZlbCArIDEpKQorICAgICAgICAgICAgaXND
YWNoZWFibGUgPSBmYWxzZTsKKyAgICB9CiAgICAgCi0gICAgUENMT0cocmVqZWN0UmVhc29ucyA/
ICIgRnJhbWUgQ0FOTk9UIGJlIGNhY2hlZCIgOiAiIEZyYW1lIENBTiBiZSBjYWNoZWQiKTsKKyAg
ICBQQ0xPRyhpc0NhY2hlYWJsZSA/ICIgRnJhbWUgQ0FOIGJlIGNhY2hlZCIgOiAiIEZyYW1lIENB
Tk5PVCBiZSBjYWNoZWQiKTsKICAgICBQQ0xPRygiKy0tLSIpOwogICAgIAotICAgIHJldHVybiBy
ZWplY3RSZWFzb25zOworICAgIHJldHVybiBpc0NhY2hlYWJsZTsKIH0KIAotLy8gVXNlZCBpbiBo
aXN0b2dyYW1zLCBwbGVhc2Ugb25seSBhZGQgYXQgdGhlIGVuZCwgYW5kIGRvIG5vdCByZW1vdmUg
ZWxlbWVudHMgKHJlbmFtaW5nIGUuZy4gdG8gIkZvb0VudW1VbnVzZWQxIiBpcyBmaW5lKS4KLS8v
IFRoaXMgaXMgYmVjYXVzZSBzdGF0aXN0aWNzIG1heSBiZSBnYXRoZXJlZCBmcm9tIGhpc3RvZ3Jh
bXMgYmV0d2VlbiB2ZXJzaW9ucyBvdmVyIHRpbWUsIGFuZCByZS11c2luZyB2YWx1ZXMgY2F1c2Vz
IGNvbGxpc2lvbnMuCi1lbnVtIFJlYXNvblBhZ2VDYW5ub3RCZUluUGFnZUNhY2hlIHsKLSAgICBG
cmFtZUNhbm5vdEJlSW5QYWdlQ2FjaGUgPSAwLAotICAgIERpc2FibGVkQmFja0ZvcndhcmRMaXN0
LAotICAgIERpc2FibGVkUGFnZUNhY2hlLAotICAgIFVzZXNEZXZpY2VNb3Rpb24sCi0gICAgVXNl
c0RldmljZU9yaWVudGF0aW9uLAotICAgIElzUmVsb2FkLAotICAgIElzUmVsb2FkRnJvbU9yaWdp
biwKLSAgICBJc1NhbWVMb2FkLAotICAgIE51bWJlck9mUmVhc29uc1BhZ2VzQ2Fubm90QmVJblBh
Z2VDYWNoZSwKLX07Ci1DT01QSUxFX0FTU0VSVChOdW1iZXJPZlJlYXNvbnNQYWdlc0Nhbm5vdEJl
SW5QYWdlQ2FjaGUgPD0gc2l6ZW9mKHVuc2lnbmVkKSo4LCBSZWFzb25QYWdlQ2Fubm90QmVJblBh
Z2VDYWNoZURvZXNOb3RGaXRJbkJpdG1hcCk7Ci0KLXN0YXRpYyB2b2lkIGxvZ0NhbkNhY2hlUGFn
ZURlY2lzaW9uKFBhZ2UmIHBhZ2UpCitzdGF0aWMgYm9vbCBjYW5DYWNoZVBhZ2UoUGFnZSYgcGFn
ZSkKIHsKLSAgICAvLyBPbmx5IGJvdGhlciBsb2dnaW5nIGZvciBtYWluIGZyYW1lcyB0aGF0IGhh
dmUgYWN0dWFsbHkgbG9hZGVkIGFuZCBoYXZlIGNvbnRlbnQuCi0gICAgaWYgKHBhZ2UubWFpbkZy
YW1lKCkubG9hZGVyKCkuc3RhdGVNYWNoaW5lKCkuY3JlYXRpbmdJbml0aWFsRW1wdHlEb2N1bWVu
dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgVVJMIGN1cnJlbnRVUkwgPSBwYWdlLm1haW5GcmFt
ZSgpLmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkgPyBwYWdlLm1haW5GcmFtZSgpLmxvYWRlcigp
LmRvY3VtZW50TG9hZGVyKCktPnVybCgpIDogVVJMKCk7Ci0gICAgaWYgKGN1cnJlbnRVUkwuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgdW5zaWduZWQgaW5kZW50TGV2ZWwg
PSAwOwogICAgIFBDTE9HKCItLS0tLS0tLVxuIERldGVybWluaW5nIGlmIHBhZ2UgY2FuIGJlIGNh
Y2hlZDoiKTsKICAgICAKLSAgICB1bnNpZ25lZCByZWplY3RSZWFzb25zID0gMDsKICAgICBNYWlu
RnJhbWUmIG1haW5GcmFtZSA9IHBhZ2UubWFpbkZyYW1lKCk7CiAgICAgRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQmIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50ID0gbWFpbkZyYW1lLmRpYWdub3N0aWNM
b2dnaW5nQ2xpZW50KCk7Ci0gICAgdW5zaWduZWQgZnJhbWVSZWplY3RSZWFzb25zID0gbG9nQ2Fu
Q2FjaGVGcmFtZURlY2lzaW9uKG1haW5GcmFtZSwgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIGlu
ZGVudExldmVsICsgMSk7Ci0gICAgaWYgKGZyYW1lUmVqZWN0UmVhc29ucykKLSAgICAgICAgcmVq
ZWN0UmVhc29ucyB8PSAxIDw8IEZyYW1lQ2Fubm90QmVJblBhZ2VDYWNoZTsKKyAgICBib29sIGlz
Q2FjaGVhYmxlID0gY2FuQ2FjaGVGcmFtZShtYWluRnJhbWUsIGRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LCBpbmRlbnRMZXZlbCArIDEpOwogICAgIAogICAgIGlmICghcGFnZS5zZXR0aW5ncygpLnVz
ZXNQYWdlQ2FjaGUoKSkgewogICAgICAgICBQQ0xPRygiICAgLVBhZ2Ugc2V0dGluZ3Mgc2F5cyBi
L2YgY2FjaGUgZGlzYWJsZWQiKTsKLSAgICAgICAgcmVqZWN0UmVhc29ucyB8PSAxIDw8IERpc2Fi
bGVkUGFnZUNhY2hlOworICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3Nh
Z2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNEaXNh
YmxlZEtleSgpKTsKKyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKICAgICB9CiAjaWYgRU5B
QkxFKERFVklDRV9PUklFTlRBVElPTikgJiYgIVBMQVRGT1JNKElPUykKICAgICBpZiAoRGV2aWNl
TW90aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdlKSkgewogICAgICAgICBQQ0xPRygiICAg
LVBhZ2UgaXMgdXNpbmcgRGV2aWNlTW90aW9uIik7CiAgICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1
cmVEaWFnbm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpkZXZpY2VNb3Rpb25LZXkoKSk7Ci0gICAgICAgIHJlamVjdFJlYXNvbnMgfD0g
MSA8PCBVc2VzRGV2aWNlTW90aW9uOworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOwogICAg
IH0KICAgICBpZiAoRGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyOjppc0FjdGl2ZUF0KHBhZ2Up
KSB7CiAgICAgICAgIFBDTE9HKCIgICAtUGFnZSBpcyB1c2luZyBEZXZpY2VPcmllbnRhdGlvbiIp
OwogICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZGV2aWNlT3JpZW50YXRpb25L
ZXkoKSk7Ci0gICAgICAgIHJlamVjdFJlYXNvbnMgfD0gMSA8PCBVc2VzRGV2aWNlT3JpZW50YXRp
b247CisgICAgICAgIGlzQ2FjaGVhYmxlID0gZmFsc2U7CiAgICAgfQogI2VuZGlmCiAjaWYgRU5B
QkxFKFBST1hJTUlUWV9FVkVOVFMpCiAgICAgaWYgKERldmljZVByb3hpbWl0eUNvbnRyb2xsZXI6
OmlzQWN0aXZlQXQocGFnZSkpIHsKICAgICAgICAgUENMT0coIiAgIC1QYWdlIGlzIHVzaW5nIERl
dmljZVByb3hpbWl0eSIpOwogICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01l
c3NhZ2UoZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQsIGRldmljZVByb3hpbWl0eUtleSk7Ci0gICAg
ICAgIHJlamVjdFJlYXNvbnMgfD0gMSA8PCBVc2VzRGV2aWNlTW90aW9uOworICAgICAgICBpc0Nh
Y2hlYWJsZSA9IGZhbHNlOwogICAgIH0KICNlbmRpZgogICAgIEZyYW1lTG9hZFR5cGUgbG9hZFR5
cGUgPSBwYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLmxvYWRUeXBlKCk7Ci0gICAgaWYgKGxvYWRU
eXBlID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZCkgeworICAgIHN3aXRjaCAobG9hZFR5cGUpIHsK
KyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlbG9hZDoKKyAgICAgICAgLy8gTm8gcG9pbnQgd3Jp
dGluZyB0byB0aGUgY2FjaGUgb24gYSByZWxvYWQsIHNpbmNlIHdlIHdpbGwganVzdCB3cml0ZSBv
dmVyIGl0IGFnYWluIHdoZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgogICAgICAgICBQQ0xPRygiICAg
LUxvYWQgdHlwZSBpczogUmVsb2FkIik7CiAgICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFn
bm9zdGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdL
ZXlzOjpyZWxvYWRLZXkoKSk7Ci0gICAgICAgIHJlamVjdFJlYXNvbnMgfD0gMSA8PCBJc1JlbG9h
ZDsKLSAgICB9Ci0gICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGU6OlJlbG9hZEZyb21P
cmlnaW4pIHsKLSAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6IFJlbG9hZCBmcm9tIG9y
aWdpbiIpOwotICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVsb2FkRnJvbU9y
aWdpbktleSgpKTsKLSAgICAgICAgcmVqZWN0UmVhc29ucyB8PSAxIDw8IElzUmVsb2FkRnJvbU9y
aWdpbjsKLSAgICB9Ci0gICAgaWYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGU6OlNhbWUpIHsK
KyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
cmFtZUxvYWRUeXBlOjpTYW1lOiAvLyB1c2VyIGxvYWRzIHNhbWUgVVJMIGFnYWluIChidXQgbm90
IHJlbG9hZCBidXR0b24pCisgICAgICAgIC8vIE5vIHBvaW50IHdyaXRpbmcgdG8gdGhlIGNhY2hl
IG9uIGEgc2FtZSBsb2FkLCBzaW5jZSB3ZSB3aWxsIGp1c3Qgd3JpdGUgb3ZlciBpdCBhZ2FpbiB3
aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KICAgICAgICAgUENMT0coIiAgIC1Mb2FkIHR5cGUgaXM6
IFNhbWUiKTsKICAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKGRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnNhbWVMb2FkS2V5
KCkpOwotICAgICAgICByZWplY3RSZWFzb25zIHw9IDEgPDwgSXNTYW1lTG9hZDsKKyAgICAgICAg
aXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGcmFtZUxvYWRU
eXBlOjpSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3Q6CisgICAgICAgIC8vIERvbid0
IHdyaXRlIHRvIHRoZSBjYWNoZSBpZiBpbiB0aGUgbWlkZGxlIG9mIGEgcmVkaXJlY3QsIHNpbmNl
IHdlIHdpbGwgd2FudCB0byBzdG9yZSB0aGUgZmluYWwgcGFnZSB3ZSBlbmQgdXAgb24uCisgICAg
ICAgIFBDTE9HKCIgICAtTG9hZCB0eXBlIGlzOiBSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2Fy
ZExpc3QiKTsKKyAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0aWNNZXNzYWdlKGRp
YWdub3N0aWNMb2dnaW5nQ2xpZW50LCBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlZGlyZWN0S2V5
KCkpOworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZyYW1lTG9hZFR5cGU6OlJlcGxhY2U6CisgICAgICAgIC8vIE5vIHBvaW50IHdyaXRpbmcg
dG8gdGhlIGNhY2hlIG9uIGEgcmVwbGFjZSwgc2luY2Ugd2Ugd2lsbCBqdXN0IHdyaXRlIG92ZXIg
aXQgYWdhaW4gd2hlbiB3ZSBsZWF2ZSB0aGF0IHBhZ2UuCisgICAgICAgIFBDTE9HKCIgICAtTG9h
ZCB0eXBlIGlzOiBSZXBsYWNlIik7CisgICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9z
dGljTWVzc2FnZShkaWFnbm9zdGljTG9nZ2luZ0NsaWVudCwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlz
OjpyZXBsYWNlS2V5KCkpOworICAgICAgICBpc0NhY2hlYWJsZSA9IGZhbHNlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlbG9hZEZyb21PcmlnaW46IHsKKyAgICAg
ICAgLy8gTm8gcG9pbnQgd3JpdGluZyB0byB0aGUgY2FjaGUgb24gYSByZWxvYWQsIHNpbmNlIHdl
IHdpbGwganVzdCB3cml0ZSBvdmVyIGl0IGFnYWluIHdoZW4gd2UgbGVhdmUgdGhhdCBwYWdlLgor
ICAgICAgICBQQ0xPRygiICAgLUxvYWQgdHlwZSBpczogUmVsb2FkRnJvbU9yaWdpbiIpOworICAg
ICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UoZGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6cmVsb2FkRnJvbU9yaWdpbktleSgpKTsK
KyAgICAgICAgaXNDYWNoZWFibGUgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQ6CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpC
YWNrOgorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZDoKKyAgICBjYXNlIEZyYW1lTG9h
ZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZDogLy8gYSBtdWx0aS1pdGVtIGhvcCBpbiB0aGUgYmFj
a2ZvcndhcmQgbGlzdAorICAgICAgICAvLyBDYWNoZWFibGUuCisgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAKLSAgICBpZiAocmVqZWN0UmVhc29ucykKLSAgICAgICAgUENMT0coIiBQYWdlIENB
Tk5PVCBiZSBjYWNoZWRcbi0tLS0tLS0tIik7Ci0gICAgZWxzZQorICAgIGlmIChpc0NhY2hlYWJs
ZSkKICAgICAgICAgUENMT0coIiBQYWdlIENBTiBiZSBjYWNoZWRcbi0tLS0tLS0tIik7CisgICAg
ZWxzZQorICAgICAgICBQQ0xPRygiIFBhZ2UgQ0FOTk9UIGJlIGNhY2hlZFxuLS0tLS0tLS0iKTsK
IAotICAgIGRpYWdub3N0aWNMb2dnaW5nQ2xpZW50LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFJl
c3VsdChEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnBhZ2VDYWNoZUtleSgpLCBlbXB0eVN0cmluZygp
LCByZWplY3RSZWFzb25zID8gRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRGYWlsIDogRGlhZ25vc3Rp
Y0xvZ2dpbmdSZXN1bHRQYXNzLCBTaG91bGRTYW1wbGU6Olllcyk7CisgICAgZGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoUmVzdWx0KERpYWdub3N0aWNMb2dn
aW5nS2V5czo6cGFnZUNhY2hlS2V5KCksIGVtcHR5U3RyaW5nKCksIGlzQ2FjaGVhYmxlID8gRGlh
Z25vc3RpY0xvZ2dpbmdSZXN1bHRQYXNzIDogRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRGYWlsLCBT
aG91bGRTYW1wbGU6Olllcyk7CisgICAgcmV0dXJuIGlzQ2FjaGVhYmxlOwogfQogCiBQYWdlQ2Fj
aGUmIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkKQEAgLTI5NSw3MSArMjcyLDIyIEBAIFBhZ2VDYWNo
ZSYgUGFnZUNhY2hlOjpzaW5nbGV0b24oKQogICAgIHJldHVybiBnbG9iYWxQYWdlQ2FjaGU7CiB9
CiAgICAgCi1ib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShG
cmFtZSYgZnJhbWUpCi17Ci0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS50cmVlKCkuZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsK
LSAgICAgICAgaWYgKCFjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKCpjaGlsZCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIEZyYW1lTG9hZGVyJiBm
cmFtZUxvYWRlciA9IGZyYW1lLmxvYWRlcigpOwotCi0gICAgLy8gUHJldmVudCBwYWdlIGNhY2hp
bmcgaWYgYSBzdWJmcmFtZSBpcyBzdGlsbCBpbiBwcm92aXNpb25hbCBsb2FkIHN0YWdlLgotICAg
IC8vIFdlIG9ubHkgZG8gdGhpcyBjaGVjayBmb3Igc3ViZnJhbWVzIGJlY2F1c2UgdGhlIG1haW4g
ZnJhbWUgaXMgcmV1c2VkIHdoZW4gbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLgotICAgIGlmICgh
ZnJhbWUuaXNNYWluRnJhbWUoKSAmJiBmcmFtZUxvYWRlci5zdGF0ZSgpID09IEZyYW1lU3RhdGVQ
cm92aXNpb25hbCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRG9jdW1lbnRMb2FkZXIq
IGRvY3VtZW50TG9hZGVyID0gZnJhbWVMb2FkZXIuZG9jdW1lbnRMb2FkZXIoKTsKLSAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS5kb2N1bWVudCgpOwotICAgIAotICAgIHJldHVybiBkb2N1
bWVudExvYWRlcgotICAgICAgICAmJiAoZG9jdW1lbnRMb2FkZXItPm1haW5Eb2N1bWVudEVycm9y
KCkuaXNOdWxsKCkgfHwgKGRvY3VtZW50TG9hZGVyLT5tYWluRG9jdW1lbnRFcnJvcigpLmlzQ2Fu
Y2VsbGF0aW9uKCkgJiYgZG9jdW1lbnRMb2FkZXItPnN1YnJlc291cmNlTG9hZGVyc0FyZVBhZ2VD
YWNoZUFjY2VwdGFibGUoKSkpCi0gICAgICAgIC8vIERvIG5vdCBjYWNoZSBlcnJvciBwYWdlcyAo
dGhlc2UgY2FuIGJlIHJlY29nbml6ZWQgYXMgcGFnZXMgd2l0aCBzdWJzdGl0dXRlIGRhdGEgb3Ig
dW5yZWFjaGFibGUgVVJMcykuCi0gICAgICAgICYmICEoZG9jdW1lbnRMb2FkZXItPnN1YnN0aXR1
dGVEYXRhKCkuaXNWYWxpZCgpICYmICFkb2N1bWVudExvYWRlci0+c3Vic3RpdHV0ZURhdGEoKS5m
YWlsaW5nVVJMKCkuaXNFbXB0eSgpKQotICAgICAgICAmJiAoIWZyYW1lTG9hZGVyLnN1YmZyYW1l
TG9hZGVyKCkuY29udGFpbnNQbHVnaW5zKCkgfHwgZnJhbWUucGFnZSgpLT5zZXR0aW5ncygpLnBh
Z2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpKQotICAgICAgICAmJiAhKGZyYW1lLmlzTWFpbkZyYW1l
KCkgJiYgZG9jdW1lbnQtPnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgZG9jdW1lbnRMb2Fk
ZXItPnJlc3BvbnNlKCkuY2FjaGVDb250cm9sQ29udGFpbnNOb1N0b3JlKCkpCi0gICAgICAgICYm
ICghZnJhbWUuaXNNYWluRnJhbWUoKSB8fCBmcmFtZUxvYWRlci5oaXN0b3J5KCkuY3VycmVudEl0
ZW0oKSkKLSAgICAgICAgJiYgIWZyYW1lTG9hZGVyLnF1aWNrUmVkaXJlY3RDb21pbmcoKQotICAg
ICAgICAmJiAhZG9jdW1lbnRMb2FkZXItPmlzTG9hZGluZygpCi0gICAgICAgICYmICFkb2N1bWVu
dExvYWRlci0+aXNTdG9wcGluZygpCi0gICAgICAgICYmIGRvY3VtZW50LT5jYW5TdXNwZW5kQWN0
aXZlRE9NT2JqZWN0c0ZvclBhZ2VDYWNoZSgpCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
aW52ZXN0aWdhdGluZyBjYWNoaW5nIGZyYW1lcyB0aGF0IGhhdmUgYW4gYXNzb2NpYXRlZAotICAg
ICAgICAvLyBhcHBsaWNhdGlvbiBjYWNoZS4gPHJkYXI6Ly9wcm9ibGVtLzU5MTc4OTk+IHRyYWNr
cyB0aGF0IHdvcmsuCi0gICAgICAgICYmIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLT5jYW5DYWNoZUluUGFnZUNhY2hlKCkKLSAgICAgICAgJiYgZnJhbWVMb2FkZXIuY2xp
ZW50KCkuY2FuQ2FjaGVQYWdlKCk7Ci19Ci0gICAgCiBib29sIFBhZ2VDYWNoZTo6Y2FuQ2FjaGUo
UGFnZSogcGFnZSkgY29uc3QKIHsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAKLSAgICBsb2dDYW5DYWNoZVBhZ2VEZWNpc2lvbigqcGFnZSk7CiAKLSAgICBpZiAo
TWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUo
KSkKKyAgICBpZiAoIW1fbWF4U2l6ZSkgeworICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlh
Z25vc3RpY01lc3NhZ2UocGFnZSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc0Rpc2FibGVkS2V5
KCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgLy8gQ2FjaGUgdGhlIHBh
Z2UsIGlmIHBvc3NpYmxlLgotICAgIC8vIERvbid0IHdyaXRlIHRvIHRoZSBjYWNoZSBpZiBpbiB0
aGUgbWlkZGxlIG9mIGEgcmVkaXJlY3QsIHNpbmNlIHdlIHdpbGwgd2FudCB0bwotICAgIC8vIHN0
b3JlIHRoZSBmaW5hbCBwYWdlIHdlIGVuZCB1cCBvbi4KLSAgICAvLyBObyBwb2ludCB3cml0aW5n
IHRvIHRoZSBjYWNoZSBvbiBhIHJlbG9hZCBvciBsb2FkU2FtZSwgc2luY2Ugd2Ugd2lsbCBqdXN0
IHdyaXRlCi0gICAgLy8gb3ZlciBpdCBhZ2FpbiB3aGVuIHdlIGxlYXZlIHRoYXQgcGFnZS4KLSAg
ICBGcmFtZUxvYWRUeXBlIGxvYWRUeXBlID0gcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkubG9h
ZFR5cGUoKTsKKyAgICBpZiAoTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5pc1Vu
ZGVyTWVtb3J5UHJlc3N1cmUoKSkgeworICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25v
c3RpY01lc3NhZ2UocGFnZSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjp1bmRlck1lbW9yeVByZXNz
dXJlS2V5KCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAotICAgIHJldHVy
biBtX21heFNpemUgPiAwCi0gICAgICAgICYmIGNhbkNhY2hlUGFnZUNvbnRhaW5pbmdUaGlzRnJh
bWUocGFnZS0+bWFpbkZyYW1lKCkpCi0gICAgICAgICYmIHBhZ2UtPnNldHRpbmdzKCkudXNlc1Bh
Z2VDYWNoZSgpCi0jaWYgRU5BQkxFKERFVklDRV9PUklFTlRBVElPTikgJiYgIVBMQVRGT1JNKElP
UykKLSAgICAgICAgJiYgIURldmljZU1vdGlvbkNvbnRyb2xsZXI6OmlzQWN0aXZlQXQocGFnZSkK
LSAgICAgICAgJiYgIURldmljZU9yaWVudGF0aW9uQ29udHJvbGxlcjo6aXNBY3RpdmVBdChwYWdl
KQotI2VuZGlmCi0jaWYgRU5BQkxFKFBST1hJTUlUWV9FVkVOVFMpCi0gICAgICAgICYmICFEZXZp
Y2VQcm94aW1pdHlDb250cm9sbGVyOjppc0FjdGl2ZUF0KHBhZ2UpCi0jZW5kaWYKLSAgICAgICAg
JiYgKGxvYWRUeXBlID09IEZyYW1lTG9hZFR5cGU6OlN0YW5kYXJkCi0gICAgICAgICAgICB8fCBs
b2FkVHlwZSA9PSBGcmFtZUxvYWRUeXBlOjpCYWNrCi0gICAgICAgICAgICB8fCBsb2FkVHlwZSA9
PSBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkCi0gICAgICAgICAgICB8fCBsb2FkVHlwZSA9PSBGcmFt
ZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIHJldHVybiBjYW5DYWNoZVBhZ2Uo
KnBhZ2UpOwogfQogCiB2b2lkIFBhZ2VDYWNoZTo6cHJ1bmVUb1NpemVOb3codW5zaWduZWQgc2l6
ZSwgUHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EaWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
aWFnbm9zdGljTG9nZ2luZ0tleXMuY3BwCmluZGV4IGJmYzkzZDQ0YzI0MTMyYjc4OTQ0YTlhOGVm
NjQxOTU2MDJhMWY0ZjIuLjljY2MyZTNhZTI3NmYwMWRhNTA1YjZiYmU2NzQ2NjNkMTAyMTYxZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5jcHAKQEAg
LTIzMyw2ICsyMzMsMTEgQEAgU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6aXNDb25kaXRp
b25hbFJlcXVlc3RLZXkoKQogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImlzQ29uZGl0aW9uYWxS
ZXF1ZXN0Iik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OmlzRGlzYWJsZWRL
ZXkoKQoreworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImlzRGlzYWJsZWQiKTsKK30KKwogU3Ry
aW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6bm9DdXJyZW50SGlzdG9yeUl0ZW1LZXkoKQogewog
ICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm5vQ3VycmVudEhpc3RvcnlJdGVtIik7CkBAIC0yNTMs
NiArMjU4LDExIEBAIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlYXNvbktleSgpCiAg
ICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgicmVhc29uIik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGlj
TG9nZ2luZ0tleXM6OnJlZGlyZWN0S2V5KCkKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJy
ZWRpcmVjdCIpOworfQorCiBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjppc0xvYWRpbmdL
ZXkoKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoImlzTG9hZGluZyIpOwpAQCAtMzMzLDYg
KzM0MywxMSBAQCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpyZWxvYWRLZXkoKQogICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoInJlbG9hZCIpOwogfQogCitTdHJpbmcgRGlhZ25vc3RpY0xv
Z2dpbmdLZXlzOjpyZXBsYWNlS2V5KCkKK3sKKyAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJyZXBs
YWNlIik7Cit9CisKIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnJlcXVlc3RLZXkoKQog
ewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInJlcXVlc3QiKTsKQEAgLTM4NSw3ICs0MDAsNyBA
QCBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpzY3JpcHRLZXkoKQogCiBTdHJpbmcgRGlh
Z25vc3RpY0xvZ2dpbmdLZXlzOjpzb3VyY2VLZXkoKQogewotICAgIHJldHVybiBBU0NJSUxpdGVy
YWwoInNvdXJjZUtleSIpOworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInNvdXJjZSIpOwogfQog
CiBTdHJpbmcgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpzdHJlYW1pbmdNZWRpYSgpCkBAIC00MDgs
NiArNDIzLDExIEBAIFN0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuY2FjaGVhYmxlU3Rh
dHVzQ29kZUtleSgpCiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgidW5jYWNoZWFibGVTdGF0dXND
b2RlIik7CiB9CiAKK1N0cmluZyBEaWFnbm9zdGljTG9nZ2luZ0tleXM6OnVuZGVyTWVtb3J5UHJl
c3N1cmVLZXkoKQoreworICAgIHJldHVybiBBU0NJSUxpdGVyYWwoInVuZGVyTWVtb3J5UHJlc3N1
cmUiKTsKK30KKwogU3RyaW5nIERpYWdub3N0aWNMb2dnaW5nS2V5czo6dW5saWtlbHlUb1JldXNl
S2V5KCkKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJ1bmxpa2VseVRvUmV1c2UiKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25vc3RpY0xvZ2dpbmdLZXlzLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RpYWdub3N0aWNMb2dnaW5nS2V5cy5oCmluZGV4IDEzMzM5MTIz
NTY3OTU0ZGZhYWJmMWNiNDI1NzdlNWEwN2FkYTQyMmYuLmVhYWJlNzUwMjQ3ZTg0OTAwOGM2Mjcx
MWUwMjM2OWU1ODU4MDk0NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EaWFnbm9zdGljTG9n
Z2luZ0tleXMuaApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBp
bk1lbW9yeUNhY2hlS2V5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBpc0F0
dGFjaG1lbnRLZXkoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIGlzQ29uZGl0
aW9uYWxSZXF1ZXN0S2V5KCk7CisgICAgc3RhdGljIFN0cmluZyBpc0Rpc2FibGVkS2V5KCk7CiAg
ICAgc3RhdGljIFN0cmluZyBpc0Vycm9yUGFnZUtleSgpOwogICAgIHN0YXRpYyBTdHJpbmcgaXNF
eHBpcmVkS2V5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyBpc1JlbG9hZEln
bm9yaW5nQ2FjaGVEYXRhS2V5KCk7CkBAIC05Nyw4ICs5OCwxMCBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIFN0cmluZyBxdWlya1JlZGlyZWN0Q29taW5nS2V5KCk7CiAgICAgc3RhdGljIFN0cmluZyBy
YXdLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHJlYXNvbktleSgpOworICAgIHN0YXRpYyBTdHJp
bmcgcmVkaXJlY3RLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHJlbG9hZEZyb21PcmlnaW5LZXko
KTsKICAgICBzdGF0aWMgU3RyaW5nIHJlbG9hZEtleSgpOworICAgIHN0YXRpYyBTdHJpbmcgcmVw
bGFjZUtleSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgcmVxdWVzdEtleSgp
OwogICAgIHN0YXRpYyBTdHJpbmcgcmVzb3VyY2VLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHJl
c291cmNlUmVxdWVzdEtleSgpOwpAQCAtMTEzLDYgKzExNiw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgU3RyaW5nIHN0eWxlU2hlZXRLZXkoKTsKICAgICBzdGF0aWMgU3RyaW5nIHN2Z0RvY3VtZW50
S2V5KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFN0cmluZyB1bmNhY2hlYWJsZVN0YXR1
c0NvZGVLZXkoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHVuZGVyTWVtb3J5UHJlc3N1cmVLZXkoKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgU3RyaW5nIHVubGlrZWx5VG9SZXVzZUtleSgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBTdHJpbmcgdW5zdXBwb3J0ZWRIVFRQTWV0aG9kS2V5
KCk7CiAgICAgc3RhdGljIFN0cmluZyB1bnN1c3BlbmRhYmxlRE9NT2JqZWN0S2V5KCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>