<?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>220394</bug_id>
          
          <creation_ts>2021-01-06 17:47:55 -0800</creation_ts>
          <short_desc>Use smart pointers in UIDelegate and NavigationState</short_desc>
          <delta_ts>2021-01-07 15:10:57 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1717821</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-06 17:47:55 -0800</bug_when>
    <thetext>Protect WebPageProxy in didFinishLoadForFrame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717822</commentid>
    <comment_count>1</comment_count>
      <attachid>417144</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-06 17:49:22 -0800</bug_when>
    <thetext>Created attachment 417144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717823</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-06 17:49:25 -0800</bug_when>
    <thetext>&lt;rdar://problem/72496374&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717951</commentid>
    <comment_count>3</comment_count>
      <attachid>417144</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-01-07 08:31:45 -0800</bug_when>
    <thetext>Comment on attachment 417144
Patch

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

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:4770
&gt; +    auto protectedThis = makeRef(*this);

This is unnecessary in functions called via IPC. We solved it at a global level years ago. If you look at WebPageProxy::didReceiveMessage() in generated code, you will see:
auto protectedThis = makeRef(*this);

We protect the WebPageProxy while calling every function due to an IPC message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1717995</commentid>
    <comment_count>4</comment_count>
      <attachid>417187</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-07 10:38:37 -0800</bug_when>
    <thetext>Created attachment 417187
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718001</commentid>
    <comment_count>5</comment_count>
      <attachid>417189</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-07 10:53:05 -0800</bug_when>
    <thetext>Created attachment 417189
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718014</commentid>
    <comment_count>6</comment_count>
      <attachid>417192</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-07 11:25:07 -0800</bug_when>
    <thetext>Created attachment 417192
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718036</commentid>
    <comment_count>7</comment_count>
      <attachid>417198</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-07 12:18:01 -0800</bug_when>
    <thetext>Created attachment 417198
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718052</commentid>
    <comment_count>8</comment_count>
      <attachid>417198</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-01-07 12:50:07 -0800</bug_when>
    <thetext>Comment on attachment 417198
Patch

r=me

Smart pointer is definitely better than raw pointer here. Would be nice in the future just to make this lifetime mismatch impossible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718072</commentid>
    <comment_count>9</comment_count>
      <attachid>417198</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-07 13:53:40 -0800</bug_when>
    <thetext>Comment on attachment 417198
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/UIDelegate.mm:408
&gt; -        return;
&gt; +        return completionHandler(false);

Surprisingly this changed behavior in an undesirable way.  Will revert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718073</commentid>
    <comment_count>10</comment_count>
      <attachid>417209</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-01-07 13:53:52 -0800</bug_when>
    <thetext>Created attachment 417209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1718101</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-07 15:10:55 -0800</bug_when>
    <thetext>Committed r271264: &lt;https://trac.webkit.org/changeset/271264&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 417209.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417144</attachid>
            <date>2021-01-06 17:49:22 -0800</date>
            <delta_ts>2021-01-07 10:38:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220394-20210106174921.patch</filename>
            <type>text/plain</type>
            <size>1733</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzEyMjApCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDIxLTAxLTA2ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUHJvdGVjdCBXZWJQ
YWdlUHJveHkgaW4gZGlkRmluaXNoTG9hZEZvckZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAzOTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzcyNDk2Mzc0PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEl0IG1ha2VzIGRlbGVnYXRlIGNhbGxzIHRoYXQgY2FuIGRvIHRoaW5ncyB0aGF0IGRlYWxs
b2NhdGUgdGhlIFdLV2ViVmlldyB3aGljaCBjYW4gZGVhbGxvY2F0ZSB0aGUgV2ViUGFnZVByb3h5
CisgICAgICAgIGluIHRoZSBtaWRkbGUgb2YgdGhlIGZ1bmN0aW9uLCBsZWFkaW5nIHRvIHByb2Js
ZW1zIGlmIHdlIGNvbnRpbnVlIHRvIGFjY2VzcyBtZW1iZXIgdmFyaWFibGVzLiAgS2VlcCB0aGUg
V2ViUGFnZVByb3h5CisgICAgICAgIGFsaXZlIHVudGlsIHRoZSBmdW5jdGlvbiByZXR1cm5zLgor
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKToKKwogMjAyMS0wMS0wNiAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIFJldmVydCBh
dWRpb1RpbWVQaXRjaEFsZ29yaXRobSB0byAiVGltZURvbWFpbiIgZnJvbSAiU3BlY3RyYWwiCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHJldmlzaW9uIDI3
MTE2MikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3NjcsNiArNDc2Nyw4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRGaW5p
c2hEb2N1bWVudExvYWQKIAogdm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaExvYWRGb3JGcmFt
ZShGcmFtZUlkZW50aWZpZXIgZnJhbWVJRCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgUmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgdWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBVc2Vy
RGF0YSYgdXNlckRhdGEpCiB7CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyk7CisKICAgICBMT0coTG9hZGluZywgIldlYlBhZ2VQcm94eTo6ZGlkRmluaXNoTG9hZEZvckZy
YW1lIC0gV2ViUGFnZVByb3h5ICVwIHdpdGggbmF2aWdhdGlvbklEICUiIFBSSXU2NCAiIGRpZEZp
bmlzaExvYWQiLCB0aGlzLCBuYXZpZ2F0aW9uSUQpOwogICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9X
RUQoTG9hZGluZywgImRpZEZpbmlzaExvYWRGb3JGcmFtZTogZnJhbWVJRCA9ICUiIFBSSXU2NCwg
ZnJhbWVJRC50b1VJbnQ2NCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417187</attachid>
            <date>2021-01-07 10:38:37 -0800</date>
            <delta_ts>2021-01-07 10:54:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220394-20210107103836.patch</filename>
            <type>text/plain</type>
            <size>155117</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzEyNDIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzNyBAQAorMjAyMS0wMS0wNyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBzbWFydCBw
b2ludGVycyBpbiBVSURlbGVnYXRlIGFuZCBOYXZpZ2F0aW9uU3RhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVJRGVsZWdhdGUgYW5kIE5hdmlnYXRp
b25TdGF0ZSBhcmUgb3duZWQgYnkgV0tXZWJWaWV3LCBidXQgdGhlIGNsaWVudHMgYXJlIG93bmVk
IGJ5IFdlYlBhZ2VQcm94eSwKKyAgICAgICAgd2hpY2ggaXMgaW5kZXBlbmRlbnRseSByZWZlcmVu
Y2UgY291bnRlZCBhbmQgY2FuIGhhdmUgYSBkaWZmZXJlbnQgbGlmZXRpbWUuCisgICAgICAgIFRo
ZXJlIHNob3VsZCBiZSBubyByYXcgQysrIHJlZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvLCBzbyB1
c2UgV2Vha1B0ciBpbnN0ZWFkLgorICAgICAgICBBbHNvLCB1c2UgV2Vha09iakNQdHI8V0tXZWJW
aWV3PiBpbnN0ZWFkIG9mIGEgcmF3IEMrKyBXS1dlYlZpZXcqCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05h
dmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6On5OYXZpZ2F0
aW9uU3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Om5hdmlnYXRpb25H
ZXN0dXJlRGlkQmVnaW4pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Om5hdmln
YXRpb25HZXN0dXJlV2lsbEVuZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6
bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3Rh
dGU6OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZp
Z2F0aW9uU3RhdGU6Om5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpkaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xv
b2tEb2N1bWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6ZGlkRmlyc3RQ
YWludCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6TmF2aWdhdGlvbkNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6d2ViR0xMb2FkUG9saWN5IGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpyZXNvbHZlV2ViR0xMb2FkUG9s
aWN5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRDaGFuZ2VCYWNrRm9yd2FyZExpc3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRl
bSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50
OjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFBlcmZvcm1D
bGllbnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZhaWxQcm92aXNpb25hbE5hdmln
YXRpb25XaXRoRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ29t
bWl0TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hEb2N1bWVudExvYWQpOgor
ICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZp
bmlzaE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbE5hdmlnYXRpb25XaXRoRXJy
b3IpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnJlbmRl
cmluZ1Byb2dyZXNzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpzaG91bGRCeXBhc3NDb250ZW50TW9kZVNhZmVndWFyZHMgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6c2hvdWxkQWxsb3dMZWdhY3lUTFMpOgor
ICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZE5l
Z290aWF0ZU1vZGVyblRMUyk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2
aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZFRlcm1pbmF0ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNp
dmUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OnByb2Nlc3NEaWRCZWNvbWVVbnJlc3BvbnNpdmUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndlYkNyeXB0b01hc3RlcktleSk6CisgICAgICAg
IChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6bmF2aWdhdGlvbkFj
dGlvbkRpZEJlY29tZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpuYXZpZ2F0aW9uUmVzcG9uc2VEaWRCZWNvbWVEb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29u
dGV4dE1lbnVEaWRDcmVhdGVEb3dubG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJ
bk1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6ZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lk
ZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0
aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6Okhpc3RvcnlDbGllbnQpOgorICAgICAgICAoV2ViS2l0
OjpOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRp
b25EYXRhKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50
OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9u
U3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkVXBkYXRlSGlzdG9y
eVRpdGxlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpDb250ZXh0TWVudUNsaWVudDo6Q29udGV4dE1lbnVDbGllbnQpOgorICAgICAgICAo
V2ViS2l0OjpVSURlbGVnYXRlOjpDb250ZXh0TWVudUNsaWVudDo6bWVudUZyb21Qcm9wb3NlZE1l
bnUpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6VUlDbGllbnQpOgor
ICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Y3JlYXRlTmV3UGFnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQp
OgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdENv
bmZpcm0pOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuSmF2YVNj
cmlwdFByb21wdCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZXF1
ZXN0U3RvcmFnZUFjY2Vzc0NvbmZpcm0pOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpV
SUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRSZXNpZ25JbnB1dEVsZW1l
bnRTdHJvbmdQYXNzd29yZEFwcGVhcmFuY2UpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRl
OjpVSUNsaWVudDo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpleGNlZWRlZERh
dGFiYXNlUXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6dGFr
ZUZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmhhbmRsZUF1
dG9wbGF5RXZlbnQpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2Fu
UnVuTW9kYWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6
cnVuTW9kYWwpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6aGVhZGVy
SGVpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmZvb3Rlckhl
aWdodCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkcmF3SGVhZGVy
KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRyYXdGb290ZXIpOgor
ICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cGFnZURpZFNjcm9sbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpmb2N1cyk6CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp1bmZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRFeGNlZWRCYWNrZ3JvdW5k
UmVzb3VyY2VMaW1pdFdoaWxlSW5Gb3JlZ3JvdW5kKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmRpZE5vdEhhbmRsZVdoZWVsRXZlbnQpOgorICAgICAgICAoV2ViS2l0
OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2V0SXNSZXNpemFibGUpOgorICAgICAgICAoV2ViS2l0
OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2V0V2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0
OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6d2luZG93RnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpV
SURlbGVnYXRlOjpVSUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6dG9vbGJhcnNBcmVWaXNpYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZENsaWNrQXV0b0ZpbGxCdXR0b24p
OgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2hvd1BhZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2F2ZURhdGFUb0ZpbGVJbkRvd25s
b2Fkc0ZvbGRlcik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNp
ZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdCk6CisgICAgICAgIChXZWJL
aXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3Ip
OgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkQXR0YWNoTG9jYWxJ
bnNwZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6d2lsbENs
b3NlTG9jYWxJbnNwZWN0b3IpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVu
dDo6cnVuT3BlblBhbmVsKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpV
SUNsaWVudDo6Y2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKToKKyAgICAgICAgKFdl
YktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6Om1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKToK
KyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVu
dDo6cHJpbnRGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpj
bG9zZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVu
dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRpZEV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6OnNob3VsZEluY2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVsZW1lbnQpOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6YWN0aW9uc0ZvckVsZW1lbnQpOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90SGFuZGxlVGFwQXNDbGlj
ayk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwcmVzZW50aW5nVmll
d0NvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGF0
YURldGVjdGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVu
dDo6cmVxdWVzdFBvaW50ZXJMb2NrKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRpZExvc2VQb2ludGVyTG9jayk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpkaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6
OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpjb25maXJtUERGT3BlbmluZyk6CisgICAgICAgIChXZWJL
aXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5XZWJBdXRoZW50aWNhdGlvblBhbmVsKToKKyAg
ICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6Omhhc1ZpZGVvSW5QaWN0dXJlSW5Q
aWN0dXJlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU3BlZWNoUmVjb2duaXRpb25QZXJtaXNz
aW9uUmVxdWVzdCk6CisKIDIwMjEtMDEtMDcgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBlLmNv
bT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiAhbV9tZXNzYWdlUmVjZWl2ZXJNYXBDb3Vu
dCB1bmRlciBXZWJLaXQ6OlNwZWVjaFJlY29nbml0aW9uU2VydmVyOjp+U3BlZWNoUmVjb2duaXRp
b25TZXJ2ZXIoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlv
blN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2
aWdhdGlvblN0YXRlLmgJKHJldmlzaW9uIDI3MTE1NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1VuaXF1ZVJlZi5oPgog
I2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgogCiBA
Y2xhc3MgV0tXZWJWaWV3OwogQHByb3RvY29sIFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZTsKQEAg
LTUzLDcgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBXZWJOYXZpZ2F0aW9u
RGF0YVN0b3JlOwogCi1jbGFzcyBOYXZpZ2F0aW9uU3RhdGUgZmluYWwgOiBwcml2YXRlIFBhZ2VM
b2FkU3RhdGU6Ok9ic2VydmVyIHsKK2NsYXNzIE5hdmlnYXRpb25TdGF0ZSBmaW5hbCA6IHByaXZh
dGUgUGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOYXZpZ2F0
aW9uU3RhdGU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBOYXZpZ2F0aW9uU3RhdGUoV0tXZWJWaWV3ICopOwpAQCAtMTUwLDcgKzE1MSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9h
ZChXZWJQYWdlUHJveHkmLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LCBjb25zdCBTdHJpbmcm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpPiYmKSBv
dmVycmlkZTsKICNlbmRpZgogCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZSYgbV9uYXZpZ2F0aW9u
U3RhdGU7CisgICAgICAgIFdlYWtQdHI8TmF2aWdhdGlvblN0YXRlPiBtX25hdmlnYXRpb25TdGF0
ZTsKICAgICB9OwogICAgIAogICAgIGNsYXNzIEhpc3RvcnlDbGllbnQgZmluYWwgOiBwdWJsaWMg
QVBJOjpIaXN0b3J5Q2xpZW50IHsKQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6
OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZGlk
VXBkYXRlSGlzdG9yeVRpdGxlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29u
c3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKICAgICAgICAgCi0gICAgICAgIE5hdmlnYXRpb25T
dGF0ZSYgbV9uYXZpZ2F0aW9uU3RhdGU7CisgICAgICAgIFdlYWtQdHI8TmF2aWdhdGlvblN0YXRl
PiBtX25hdmlnYXRpb25TdGF0ZTsKICAgICB9OwogCiAgICAgLy8gUGFnZUxvYWRTdGF0ZTo6T2Jz
ZXJ2ZXIKQEAgLTE5Niw3ICsxOTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZU5ldHdv
cmtBY3Rpdml0eUFmdGVyTG9hZENvbXBsZXRpb24oKSB7IHJlbGVhc2VOZXR3b3JrQWN0aXZpdHko
TmV0d29ya0FjdGl2aXR5UmVsZWFzZVJlYXNvbjo6TG9hZENvbXBsZXRlZCk7IH0KICNlbmRpZgog
Ci0gICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgV2Vha09iakNQdHI8V0tXZWJWaWV3PiBt
X3dlYlZpZXc7CiAgICAgV2Vha09iakNQdHI8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlPiA+IG1f
bmF2aWdhdGlvbkRlbGVnYXRlOwogCiAgICAgc3RydWN0IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0JKHJldmlzaW9uIDI3MTE1
NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTEwLDE4ICsxMTAsMTggQEAgTmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uU3RhdGUoV0tXZWJWaQogI2VuZGlmCiB7CiAgICAgQVNTRVJUKG1fd2ViVmlldy0+X3Bh
Z2UpOwotICAgIEFTU0VSVCghbmF2aWdhdGlvblN0YXRlcygpLmNvbnRhaW5zKG1fd2ViVmlldy0+
X3BhZ2UuZ2V0KCkpKTsKKyAgICBBU1NFUlQoIW5hdmlnYXRpb25TdGF0ZXMoKS5jb250YWlucyht
X3dlYlZpZXcuZ2V0KCktPl9wYWdlLmdldCgpKSk7CiAKLSAgICBuYXZpZ2F0aW9uU3RhdGVzKCku
YWRkKG1fd2ViVmlldy0+X3BhZ2UuZ2V0KCksIHRoaXMpOwotICAgIG1fd2ViVmlldy0+X3BhZ2Ut
PnBhZ2VMb2FkU3RhdGUoKS5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgbmF2aWdhdGlvblN0YXRl
cygpLmFkZChtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLmdldCgpLCB0aGlzKTsKKyAgICBtX3dlYlZp
ZXcuZ2V0KCktPl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnRoaXMpOwogfQog
CiBOYXZpZ2F0aW9uU3RhdGU6On5OYXZpZ2F0aW9uU3RhdGUoKQogewotICAgIEFTU0VSVChuYXZp
Z2F0aW9uU3RhdGVzKCkuZ2V0KG1fd2ViVmlldy0+X3BhZ2UuZ2V0KCkpID09IHRoaXMpOworICAg
IEFTU0VSVChuYXZpZ2F0aW9uU3RhdGVzKCkuZ2V0KG1fd2ViVmlldy5nZXQoKS0+X3BhZ2UuZ2V0
KCkpID09IHRoaXMpOwogCi0gICAgbmF2aWdhdGlvblN0YXRlcygpLnJlbW92ZShtX3dlYlZpZXct
Pl9wYWdlLmdldCgpKTsKLSAgICBtX3dlYlZpZXctPl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkucmVt
b3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG5hdmlnYXRpb25TdGF0ZXMoKS5yZW1vdmUobV93ZWJW
aWV3LmdldCgpLT5fcGFnZS5nZXQoKSk7CisgICAgbV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+cGFn
ZUxvYWRTdGF0ZSgpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKIH0KIAogTmF2aWdhdGlvblN0YXRl
JiBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZVByb3h5
KQpAQCAtMjM5LDcgKzIzOSw3IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2Vz
dHVyZUQKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0
aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlkQmVnaW5OYXZpZ2F0aW9uR2VzdHVyZTptX3dlYlZpZXdd
OworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2
aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmU6bV93ZWJW
aWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Om5hdmlnYXRpb25H
ZXN0dXJlV2lsbEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYg
aXRlbSkKQEAgLTI1MSw3ICsyNTEsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlv
bkdlc3R1cmVXCiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2
aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld1dpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZTptX3dlYlZp
ZXcgd2l0aE5hdmlnYXRpb25Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06d2lsbE5hdmlnYXRlID8gd3Jh
cHBlcihpdGVtKSA6IG5pbF07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3V2lsbEVuZE5hdmlnYXRp
b25HZXN0dXJlOm1fd2ViVmlldy5nZXQoKS5nZXQoKSB3aXRoTmF2aWdhdGlvblRvQmFja0Zvcndh
cmRMaXN0SXRlbTp3aWxsTmF2aWdhdGUgPyB3cmFwcGVyKGl0ZW0pIDogbmlsXTsKIH0KIAogdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Om5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5hdmln
YXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQpAQCAtMjYzLDcgKzI2Myw3IEBAIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZUQKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlk
RW5kTmF2aWdhdGlvbkdlc3R1cmU6bV93ZWJWaWV3IHdpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2Fy
ZExpc3RJdGVtOndpbGxOYXZpZ2F0ZSA/IHdyYXBwZXIoaXRlbSkgOiBuaWxdOworICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVn
YXRlKSBfd2ViVmlld0RpZEVuZE5hdmlnYXRpb25HZXN0dXJlOm1fd2ViVmlldy5nZXQoKS5nZXQo
KSB3aXRoTmF2aWdhdGlvblRvQmFja0ZvcndhcmRMaXN0SXRlbTp3aWxsTmF2aWdhdGUgPyB3cmFw
cGVyKGl0ZW0pIDogbmlsXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OndpbGxSZWNvcmRO
YXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKQEAgLTI3NSw3
ICsyNzUsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6d2lsbFJlY29yZE5hdmlnYXRpCiAgICAg
aWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNf
Y2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRl
KSBfd2ViVmlldzptX3dlYlZpZXcgd2lsbFNuYXBzaG90QmFja0ZvcndhcmRMaXN0SXRlbTp3cmFw
cGVyKGl0ZW0pXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV93ZWJWaWV3LmdldCgpLmdldCgp
IHdpbGxTbmFwc2hvdEJhY2tGb3J3YXJkTGlzdEl0ZW06d3JhcHBlcihpdGVtKV07CiB9CiAKIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgp
CkBAIC0yODcsNyArMjg3LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Om5hdmlnYXRpb25HZXN0
dXJlUwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRp
b25EZWxlZ2F0ZSkgX3dlYlZpZXdEaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90Om1f
d2ViVmlld107CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1
cmVTbmFwc2hvdDptX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiAjaWYgVVNFKFFVSUNLX0xP
T0spCkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OmRpZFJlcXVlc3RQ
YXNzd29yZAogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmln
YXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdEaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1
bWVudDptX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZFJlcXVlc3RQYXNzd29y
ZEZvclF1aWNrTG9va0RvY3VtZW50Om1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAjZW5kaWYK
IApAQCAtMzEzLDExICszMTMsMTEgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OmRpZEZpcnN0UGFp
bnQoKQogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRp
b25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV93ZWJWaWV3IHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdl
Ol9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50XTsKKyAgICBbc3RhdGljX2Nhc3Q8
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dl
YlZpZXc6bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlOl9X
S1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50XTsKIH0KIAogTmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpOYXZpZ2F0aW9uQ2xpZW50KE5hdmlnYXRpb25TdGF0ZSYgbmF2
aWdhdGlvblN0YXRlKQotICAgIDogbV9uYXZpZ2F0aW9uU3RhdGUobmF2aWdhdGlvblN0YXRlKQor
ICAgIDogbV9uYXZpZ2F0aW9uU3RhdGUobWFrZVdlYWtQdHIobmF2aWdhdGlvblN0YXRlKSkKIHsK
IH0KIApAQCAtMzQzLDE0ICszNDMsMTQgQEAgaW5saW5lIFdlYkNvcmU6OldlYkdMTG9hZFBvbGlj
eSB0b1dlYkNvcgogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2Vi
R0xMb2FkUG9saWN5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIp
IGNvbnN0CiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1dlYkdMTG9hZFBvbGljeUZvclVSTCkgeworICAgIGlmICghbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViR0xMb2Fk
UG9saWN5Rm9yVVJMKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkdMTG9hZFBvbGlj
eTo6V2ViR0xBbGxvd0NyZWF0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgYXV0byBjaGVja2VyID0gQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KSwgQHNlbGVjdG9yKF93ZWJWaWV3OndlYkdMTG9hZFBvbGljeUZvclVSTDpkZWNpc2lvbkhhbmRs
ZXI6KSk7Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9u
RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IHdlYkdMTG9hZFBv
bGljeUZvclVSTDooTlNVUkwgKil1cmwgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlcildKF9XS1dlYkdMTG9hZFBvbGljeSBwb2xpY3kpIG11dGFibGUgeworICAg
IFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgd2ViR0xMb2Fk
UG9saWN5Rm9yVVJMOihOU1VSTCAqKXVybCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtj
b21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0g
V1RGTW92ZShjaGVja2VyKV0oX1dLV2ViR0xMb2FkUG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CiAg
ICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5k
bGVyKCk7CkBAIC0zNjAsMTQgKzM2MCwxNCBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpy
ZXNvbHZlV2ViR0xMb2FkUG9saWN5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFVSTCYgdXJsLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSk+JiYgY29tcGxldGlv
bkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Jlc29sdmVXZWJHTExvYWRQb2xpY3lGb3JVUkwpIHsK
KyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1Jlc29sdmVXZWJHTExvYWRQb2xpY3lGb3JVUkwpIHsKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV2ViR0xMb2FkUG9saWN5OjpXZWJHTEFsbG93Q3JlYXRpb24pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3Jl
YXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJlc29sdmVX
ZWJHTExvYWRQb2xpY3lGb3JVUkw6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFsoaWQgPFdLTmF2
aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2
aWdhdGlvblN0YXRlLm1fd2ViVmlldyByZXNvbHZlV2ViR0xMb2FkUG9saWN5Rm9yVVJMOihOU1VS
TCAqKXVybCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0o
X1dLV2ViR0xMb2FkUG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CisgICAgWyhpZCA8V0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZXNvbHZlV2ViR0xMb2FkUG9saWN5Rm9y
VVJMOihOU1VSTCAqKXVybCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShj
aGVja2VyKV0oX1dLV2ViR0xMb2FkUG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CiAgICAgICAgIGlm
IChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBA
IC0zNzcsMTAgKzM3NywxMCBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6CiAKIGJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDaGFuZ2VC
YWNrRm9yd2FyZExpc3QoV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSogYWRk
ZWQsIGNvbnN0IFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiByZW1vdmVkKQog
ewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdCYWNrRm9yd2FyZExpc3RJdGVtQWRkZWRSZW1vdmVkKQorICAgIGlmICghbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFja0Zvcndh
cmRMaXN0SXRlbUFkZGVkUmVtb3ZlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTAsMjEgKzM5MCwyMSBAQCBib29s
IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAgICAgICAgICAgICByZXR1cm4g
d3JhcHBlcihyZW1vdmVkSXRlbS5nZXQoKSk7CiAgICAgICAgIH0pOwogICAgIH0KLSAgICBbKGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgYmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkOndy
YXBwZXIoYWRkZWQpIHJlbW92ZWQ6cmVtb3ZlZEl0ZW1zLmdldCgpXTsKKyAgICBbKGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGJhY2tGb3J3YXJkTGlzdEl0ZW1B
ZGRlZDp3cmFwcGVyKGFkZGVkKSByZW1vdmVkOnJlbW92ZWRJdGVtcy5nZXQoKV07CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAjZW5kaWYKIAogYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OndpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJQYWdlUHJveHkmLCBXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtJiBpdGVtLCBib29sIGluQmFja0ZvcndhcmRDYWNoZSkKIHsKLSAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
V2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtSW5CYWNrRm9yd2FyZENhY2hlKQorICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ls
bEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtSW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAg
IGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBb
KGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgd2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJ
dGVtOndyYXBwZXIoaXRlbSkgaW5QYWdlQ2FjaGU6aW5CYWNrRm9yd2FyZENhY2hlXTsKKyAgICBb
KGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHdpbGxHb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbTp3cmFwcGVyKGl0ZW0pIGluUGFnZUNhY2hlOmluQmFja0ZvcndhcmRD
YWNoZV07CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1OSwxMSArNDU5LDExIEBAIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICBpZiAoYXV0byogcG9saWNp
ZXMgPSB3ZWJQYWdlUHJveHkuY29uZmlndXJhdGlvbigpLmRlZmF1bHRXZWJzaXRlUG9saWNpZXMo
KSkKICAgICAgICAgZGVmYXVsdFdlYnNpdGVQb2xpY2llcyA9IHBvbGljaWVzLT5jb3B5KCk7CiAK
LSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcgotICAg
ICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzVXNlcklu
Zm9EZWNpc2lvbkhhbmRsZXIKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bldpdGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcgotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzCi0gICAgICAgICYm
ICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25Vc2VySW5mb0RlY2lzaW9uSGFuZGxlcldlYnNp
dGVQb2xpY2llcykgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lz
aW9uSGFuZGxlcgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQ
cmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyCisgICAgICAgICYmICFtX25hdmlnYXRp
b25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzRGVjaXNpb25IYW5kbGVyCisgICAgICAg
ICYmICFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBv
bGljaWVzCisgICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9E
ZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXMpIHsKICAgICAgICAgYXV0byBjb21wbGV0aW9u
SGFuZGxlciA9IFt3ZWJQYWdlID0gbWFrZVJlZih3ZWJQYWdlUHJveHkpLCBsaXN0ZW5lciA9IFdU
Rk1vdmUobGlzdGVuZXIpLCBuYXZpZ2F0aW9uQWN0aW9uLCBkZWZhdWx0V2Vic2l0ZVBvbGljaWVz
XSAoYm9vbCBpbnRlcmNlcHRlZE5hdmlnYXRpb24pIHsKICAgICAgICAgICAgIGlmIChpbnRlcmNl
cHRlZE5hdmlnYXRpb24pIHsKICAgICAgICAgICAgICAgICBsaXN0ZW5lci0+aWdub3JlKCk7CkBA
IC00OTgsMTcgKzQ5OCwxNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1
dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBib29sIGRlbGVnYXRlSGFzV2VicGFnZVByZWZlcmVuY2VzID0gbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzRGVjaXNpb25IYW5kbGVyCi0gICAgICAg
IHx8IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVj
aXNpb25IYW5kbGVyOwotICAgIGJvb2wgZGVsZWdhdGVIYXNXZWJzaXRlUG9saWNpZXMgPSBtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXMgfHwg
bV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRl
UG9saWNpZXM7CisgICAgYm9vbCBkZWxlZ2F0ZUhhc1dlYnBhZ2VQcmVmZXJlbmNlcyA9IG1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIKKyAg
ICAgICAgfHwgbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJ
bmZvRGVjaXNpb25IYW5kbGVyOworICAgIGJvb2wgZGVsZWdhdGVIYXNXZWJzaXRlUG9saWNpZXMg
PSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGlj
aWVzIHx8IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25Vc2VySW5mb0RlY2lzaW9uSGFuZGxl
cldlYnNpdGVQb2xpY2llczsKIAogICAgIGF1dG8gc2VsZWN0b3JGb3JDb21wbGV0aW9uSGFuZGxl
ckNoZWNrZXIgPSAoWyZdICgpIC0+IFNFTCB7CiAgICAgICAgIGlmIChkZWxlZ2F0ZUhhc1dlYnBh
Z2VQcmVmZXJlbmNlcykKLSAgICAgICAgICAgIHJldHVybiBtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIgPyBAc2VsZWN0b3Iod2ViVmlldzpk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOnByZWZlcmVuY2VzOmRlY2lzaW9uSGFuZGxl
cjopIDogQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246
cHJlZmVyZW5jZXM6dXNlckluZm86ZGVjaXNpb25IYW5kbGVyOik7CisgICAgICAgICAgICByZXR1
cm4gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFu
ZGxlciA/IEBzZWxlY3Rvcih3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246
cHJlZmVyZW5jZXM6ZGVjaXNpb25IYW5kbGVyOikgOiBAc2VsZWN0b3IoX3dlYlZpZXc6ZGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpwcmVmZXJlbmNlczp1c2VySW5mbzpkZWNpc2lvbkhh
bmRsZXI6KTsKICAgICAgICAgaWYgKGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzKQogICAgICAg
ICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uOmRlY2lzaW9uSGFuZGxlcjopOwogICAgICAgICByZXR1cm4gQHNlbGVjdG9yKHdlYlZp
ZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRsZXI6KTsKQEAg
LTU4MSwzNiArNTgxLDM2IEBAIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAg
IH07CiAKICAgICBpZiAoZGVsZWdhdGVIYXNXZWJwYWdlUHJlZmVyZW5jZXMpIHsKLSAgICAgICAg
aWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFu
ZGxlcikKLSAgICAgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVy
KG5hdmlnYXRpb25BY3Rpb24pIHByZWZlcmVuY2VzOndyYXBwZXIoZGVmYXVsdFdlYnNpdGVQb2xp
Y2llcykgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxl
cldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07CisgICAgICAgIGlmIChtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzRGVjaXNpb25IYW5kbGVyKQorICAg
ICAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5t
X3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFw
cGVyKG5hdmlnYXRpb25BY3Rpb24pIHByZWZlcmVuY2VzOndyYXBwZXIoZGVmYXVsdFdlYnNpdGVQ
b2xpY2llcykgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFu
ZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRl
bGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgcHJlZmVyZW5jZXM6
d3JhcHBlcihkZWZhdWx0V2Vic2l0ZVBvbGljaWVzKSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRp
Y19jYXN0PGlkPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwgZGVj
aXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldpdGhQcmVm
ZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07CisgICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBwcmVmZXJlbmNlczp3cmFwcGVyKGRlZmF1
bHRXZWJzaXRlUG9saWNpZXMpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQ8TlNT
ZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbCBkZWNpc2lvbkhhbmRsZXI6
bWFrZUJsb2NrUHRyKFdURk1vdmUoZGVjaXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xp
Y2llcykpLmdldCgpXTsKICAgICB9IGVsc2UgaWYgKGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVz
KSB7CiAgICAgICAgIGF1dG8gZGVjaXNpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKFdURk1vdmUo
ZGVjaXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcykpOwotICAgICAgICBpZiAo
bV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRl
UG9saWNpZXMpIHsKKyAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25Vc2Vy
SW5mb0RlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llcykgewogICAgICAgICAgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgICAgIFsoaWQgPFdLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdh
dGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBw
ZXIobmF2aWdhdGlvbkFjdGlvbikgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8
TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbCBkZWNpc2lvbkhhbmRs
ZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGlj
X2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwgZGVj
aXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiAgICAgICAgICAgICBBTExPV19E
RVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBbKGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRs
ZXIuZ2V0KCldOworICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dy5nZXQoKS5nZXQoKSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2
aWdhdGlvbkFjdGlvbikgZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiAg
ICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8gZGVjaXNpb25IYW5kbGVyID0gW2RlY2lzaW9uSGFu
ZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMgPSBXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldp
dGhQcmVmZXJlbmNlc09yUG9saWNpZXMpXSAoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5IGFjdGlv
blBvbGljeSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVy
ZW5jZXNPclBvbGljaWVzKGFjdGlvblBvbGljeSwgbmlsKTsKICAgICAgICAgfTsKLSAgICAgICAg
W25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikg
ZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcikpLmdl
dCgpXTsKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIo
V1RGTW92ZShkZWNpc2lvbkhhbmRsZXIpKS5nZXQoKV07CiAgICAgfQogfQogCiB2b2lkIE5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9u
KFdlYlBhZ2VQcm94eSYsIFVSTCYmIHVybCwgQ29udGVudFJ1bGVMaXN0UmVzdWx0cyYmIHJlc3Vs
dHMpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzTm90aWZpY2F0aW9ucwot
ICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdDb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZvcm1lZEFjdGlvbkZvclVS
TCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzTm90aWZpY2F0aW9ucworICAg
ICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3Q29udGVudFJ1bGVMaXN0V2l0aElkZW50aWZpZXJQZXJmb3JtZWRBY3Rpb25Gb3JVUkwp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIApAQCAt
NjMwLDE4ICs2MzAsMTggQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OgogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5vdGlmaWNhdGlvbnMgJiYgbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdVUkxDb250ZW50UnVs
ZUxpc3RJZGVudGlmaWVyc05vdGlmaWNhdGlvbnMpCi0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLm1fd2ViVmlldyBVUkw6dXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOmlkZW50
aWZpZXJzLmdldCgpIG5vdGlmaWNhdGlvbnM6bm90aWZpY2F0aW9ucy5nZXQoKV07CisgICAgaWYg
KG5vdGlmaWNhdGlvbnMgJiYgbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25z
KQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25E
ZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IFVSTDp1cmwgY29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6aWRlbnRpZmllcnMuZ2V0KCkgbm90
aWZpY2F0aW9uczpub3RpZmljYXRpb25zLmdldCgpXTsKIAotICAgIGlmIChtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRlbnRSdWxlTGlzdFdp
dGhJZGVudGlmaWVyUGVyZm9ybWVkQWN0aW9uRm9yVVJMKSB7CisgICAgaWYgKG1fbmF2aWdhdGlv
blN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRlbnRSdWxlTGlz
dFdpdGhJZGVudGlmaWVyUGVyZm9ybWVkQWN0aW9uRm9yVVJMKSB7CiAgICAgICAgIGZvciAoYXV0
byYmIHBhaXIgOiBXVEZNb3ZlKHJlc3VsdHMucmVzdWx0cykpCi0gICAgICAgICAgICBbKGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgY29udGVudFJ1bGVMaXN0V2l0aElkZW50aWZpZXI6
cGFpci5maXJzdCBwZXJmb3JtZWRBY3Rpb246d3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdEFj
dGlvbjo6Y3JlYXRlKFdURk1vdmUocGFpci5zZWNvbmQpKS5nZXQoKSkgZm9yVVJMOnVybF07Cisg
ICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25E
ZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IGNvbnRlbnRSdWxlTGlzdFdpdGhJZGVudGlmaWVyOnBhaXIuZmlyc3QgcGVyZm9ybWVkQWN0aW9u
OndyYXBwZXIoQVBJOjpDb250ZW50UnVsZUxpc3RBY3Rpb246OmNyZWF0ZShXVEZNb3ZlKHBhaXIu
c2Vjb25kKSkuZ2V0KCkpIGZvclVSTDp1cmxdOwogICAgIH0KIH0KICAgICAKIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVz
cG9uc2UoV2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8QVBJOjpOYXZpZ2F0aW9uUmVzcG9uc2U+JiYg
bmF2aWdhdGlvblJlc3BvbnNlLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmIGxp
c3RlbmVyLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25SZXNwb25zZURlY2lzaW9uSGFuZGxlcikgeworICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvblJlc3BvbnNlRGVjaXNpb25IYW5kbGVyKSB7CiAgICAgICAgIE5TVVJMICp1cmwg
PSBuYXZpZ2F0aW9uUmVzcG9uc2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpLlVSTDsKICAg
ICAgICAgaWYgKFt1cmwgaXNGaWxlVVJMXSkgewogICAgICAgICAgICAgQk9PTCBpc0RpcmVjdG9y
eSA9IE5POwpAQCAtNjYxLDEyICs2NjEsMTIgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxs
Q2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZp
ZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlOmRlY2lzaW9uSGFuZGxlcjopKTsK
LSAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJW
aWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZTp3cmFwcGVyKG5hdmlnYXRpb25S
ZXNwb25zZSkgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbbG9jYWxMaXN0ZW5lciA9IFdU
Rk1vdmUobGlzdGVuZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0oV0tOYXZpZ2F0aW9u
UmVzcG9uc2VQb2xpY3kgcmVzcG9uc2VQb2xpY3kpIHsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRl
IHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2U6d3JhcHBlcihuYXZpZ2F0aW9uUmVzcG9uc2UpIGRl
Y2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2xvY2FsTGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3Rl
bmVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKFdLTmF2aWdhdGlvblJlc3BvbnNlUG9s
aWN5IHJlc3BvbnNlUG9saWN5KSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFu
ZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tl
ci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC02ODksODAgKzY4OSw4MCBAQCB2b2lk
IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAKIHZvaWQgTmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbihXZWJQ
YWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEFQSTo6
TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewotICAgIGF1
dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0
IHRoYXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgbnVs
bCBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0g
ICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb25Vc2VySW5mbykKLSAgICAgICAgWyhpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9u
OndyYXBwZXIobmF2aWdhdGlvbikgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8
TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF07Ci0gICAgZWxzZSBp
ZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbikKLSAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0
ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRTdGFydFByb3Zpc2lvbmFs
TmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRQcm92aXNpb25h
bE5hdmlnYXRpb25Vc2VySW5mbykKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKSBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVy
KG5hdmlnYXRpb24pIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJl
Q29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIGVsc2UgaWYgKG1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFN0YXJ0
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uKQorICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRTdGFydFByb3Zp
c2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0KIAogdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJh
bWUoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0
LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lKQot
ICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVw
ZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJh
bWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpXTsKKyAgICBpZiAobV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3Rh
cnRQcm92aXNpb25hbExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCisgICAgICAgIFsoaWQgPFdLTmF2
aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIF93ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkU3RhcnRQcm92aXNp
b25hbExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBv
bGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZv
OjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpXTsKIH0KIAogdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTmF2aWdhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIEFQSTo6TmF2aWdhdGlvbiog
bmF2aWdhdGlvbiwgQVBJOjpPYmplY3QqKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUu
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24pCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZWNlaXZlU2VydmVyUmVkaXJl
Y3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRo
YXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgbnVsbCBm
b3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAKLSAg
ICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3
IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVy
KG5hdmlnYXRpb24pXTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKV07CiB9CiAKIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3aWxsUGVyZm9ybUNsaWVudFJlZGly
ZWN0KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpTdHJpbmcmIHVybFN0cmluZywgZG91
YmxlIGRlbGF5KQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KQorICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ls
bFBlcmZvcm1DbGllbnRSZWRpcmVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZp
Z2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5t
X25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgVVJMIHVybChVUkwoKSwgdXJsU3RyaW5nKTsKIAotICAg
IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlv
bkRlbGVnYXRlKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgd2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdFRvVVJMOnVybCBkZWxheTpkZWxheV07CisgICAgW3N0YXRpY19jYXN0
PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgd2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdFRvVVJMOnVybCBkZWxheTpkZWxheV07CiB9CiAKIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2Vi
UGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMU3RyaW5nLCBjb25z
dCBXVEY6OlN0cmluZyYgZGVzdGluYXRpb25VUkxTdHJpbmcpCiB7Ci0gICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1D
bGllbnRSZWRpcmVjdCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVVJMIHNvdXJj
ZVVSTChVUkwoKSwgc291cmNlVVJMU3RyaW5nKTsKICAgICBVUkwgZGVzdGluYXRpb25VUkwoVVJM
KCksIGRlc3RpbmF0aW9uVVJMU3RyaW5nKTsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZp
Z2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDpz
b3VyY2VVUkwgdG9VUkw6ZGVzdGluYXRpb25VUkxdOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZFBlcmZvcm1DbGllbnRS
ZWRpcmVjdEZyb21VUkw6c291cmNlVVJMIHRvVVJMOmRlc3RpbmF0aW9uVVJMXTsKIH0KIAogdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENhbmNlbENsaWVudFJlZGly
ZWN0KFdlYlBhZ2VQcm94eSYgcGFnZSkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3Qp
CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25E
ZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlkQ2Fu
Y2VsQ2xpZW50UmVkaXJlY3Q6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3XTsKKyAgICBbc3Rh
dGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxl
Z2F0ZSkgX3dlYlZpZXdEaWRDYW5jZWxDbGllbnRSZWRpcmVjdDptX25hdmlnYXRpb25TdGF0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogc3RhdGljIFJldGFpblB0cjxOU0Vycm9yPiBj
cmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlcihXS1dlYlZpZXcgKndlYlZpZXcsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgTlNFcnJvciAqb3JpZ2luYWxFcnJvcikKQEAgLTc4
MSwxNjAgKzc4MSwxNjAgQEAgc3RhdGljIFJldGFpblB0cjxOU0Vycm9yPiBjcmVhdGVFcnJvcldp
dAogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbFByb3Zp
c2lvbmFsTmF2aWdhdGlvbldpdGhFcnJvcihXZWJQYWdlUHJveHkmIHBhZ2UsIEZyYW1lSW5mb0Rh
dGEmJiBmcmFtZUluZm8sIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IsIEFQSTo6T2JqZWN0KikKIHsKLSAgICBhdXRvIG5hdmln
YXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0g
Y3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJW
aWV3LCBmcmFtZUluZm8sIGVycm9yKTsKKyAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1w
dGVyID0gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSwgZnJhbWVJbmZvLCBlcnJvcik7CiAKICAgICBpZiAoZnJh
bWVJbmZvLmlzTWFpbkZyYW1lKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0
IHRoYXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgbnVs
bCBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0g
ICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25XaXRoRXJyb3IpCi0gICAgICAgICAg
ICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3
IGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3aXRoRXJy
b3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOworICAgICAgICBpZiAobV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbFBy
b3Zpc2lvbmFsTmF2aWdhdGlvbldpdGhFcnJvcikKKyAgICAgICAgICAgIFtuYXZpZ2F0aW9uRGVs
ZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRp
ZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3aXRoRXJyb3I6
ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d05hdmlnYXRpb25EaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZVdpdGhFcnJvcikKLSAg
ICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRl
bGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0aW9uOm5p
bCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZv
OjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIHdpdGhFcnJvcjplcnJvcldpdGhS
ZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CisgICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9uRGlkRmFpbFByb3Zp
c2lvbmFsTG9hZEluU3ViZnJhbWVXaXRoRXJyb3IpCisgICAgICAgICAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIG5hdmlnYXRpb246bmlsIGRpZEZhaWxQ
cm92aXNpb25hbExvYWRJblN1YmZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShX
VEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0
ZW1wdGVyLmdldCgpXTsKICAgICB9CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV2ViUGFn
ZVByb3h5JiBwYWdlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvciwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbykK
IHsKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2
aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGVycm9yV2l0aFJl
Y292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZp
Z2F0aW9uU3RhdGUubV93ZWJWaWV3LCBmcmFtZUluZm8sIGVycm9yKTsKKyAgICBhdXRvIGVycm9y
V2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIo
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSwgZnJhbWVJbmZvLCBlcnJv
cik7CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0aEVy
cm9yKQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRp
b25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBk
YXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFt
ZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9yOmVycm9y
V2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpXTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZFdpdGhSZXF1ZXN0SW5GcmFtZVdpdGhFcnJvcikKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aFJl
cXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBk
YXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1v
dmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0
ZXIuZ2V0KCldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
ZGlkQ29tbWl0TmF2aWdhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIEFQSTo6TmF2aWdhdGlvbiog
bmF2aWdhdGlvbiwgQVBJOjpPYmplY3QqKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbiBpcyBu
b3QgbnVsbCBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgbnVsbCBmb3Igc29tZSBuYXZpZ2F0aW9u
cyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ29tbWl0TmF2aWdhdGlv
bikKLSAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlldyBkaWRDb21taXROYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOworICAg
IGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEaWRDb21taXROYXZpZ2F0aW9uKQorICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRDb21taXROYXZp
Z2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdlYktpdDo6V2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBGcmFtZUluZm9E
YXRhJiYgZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZENvbW1pdExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCi0gICAgICAgIFtzdGF0aWNfY2FzdDxp
ZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
KSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkQ29tbWl0TG9hZFdpdGhS
ZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVw
ZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZN
b3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9u
YXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDb21taXRMb2FkV2l0aFJlcXVlc3RJ
bkZyYW1lKQorICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRDb21taXRMb2FkV2l0aFJlcXVlc3Q6cmVxdWVz
dC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkp
IGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZv
KSwgJnBhZ2UpKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50
OjpkaWRGaW5pc2hEb2N1bWVudExvYWQoV2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6Ok5hdmlnYXRp
b24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0KikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZEZpbmlz
aERvY3VtZW50TG9hZCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25EaWRGaW5pc2hEb2N1bWVudExvYWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJl
LCBidXQgaXQncyBjdXJyZW50bHkgbnVsbCBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRo
ZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IG5hdmlnYXRpb25EaWRGaW5pc2hEb2N1bWVudExvYWQ6
d3JhcHBlcihuYXZpZ2F0aW9uKV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2
aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbmF2aWdhdGlvbkRpZEZpbmlzaERv
Y3VtZW50TG9hZDp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaE5hdmlnYXRpb24oV2ViUGFnZVByb3h5Jiwg
QVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhh
dCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZv
ciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICBp
ZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRGaW5pc2hOYXZpZ2F0aW9uKQotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZEZpbmlzaE5hdmlnYXRpb246d3JhcHBlcihu
YXZpZ2F0aW9uKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RpZEZpbmlzaE5hdmlnYXRpb24pCisgICAgICAgIFtuYXZpZ2F0
aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGRpZEZpbmlzaE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKV07CiB9CiAKIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUo
V2ViUGFnZVByb3h5JiBwYWdlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBG
cmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZEZpbmlzaExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCi0gICAgICAgIFsoaWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGaW5pc2hMb2FkV2l0aFJlcXVlc3Q6cmVx
dWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJv
ZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJ
bmZvKSwgJnBhZ2UpKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZpbmlzaExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCisg
ICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVn
YXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlk
RmluaXNoTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRl
UG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUlu
Zm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOwogfQogCiB2b2lkIE5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbE5hdmlnYXRpb25XaXRoRXJyb3Io
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIEFQSTo6
TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJy
b3IsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1
dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRlRXJyb3JX
aXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3LCBmcmFtZUlu
Zm8sIGVycm9yKTsKKyAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRl
RXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5n
ZXQoKS5nZXQoKSwgZnJhbWVJbmZvLCBlcnJvcik7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVu
dGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlLgotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yVXNlckluZm8pCi0gICAgICAgIFso
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGYWlsTmF2aWdhdGlvbjp3cmFwcGVy
KG5hdmlnYXRpb24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKSB1
c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJ
bmZvLT53cmFwcGVyKCkpIDogbmlsXTsKLSAgICBlbHNlIGlmIChtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxOYXZpZ2F0aW9uV2l0aEVy
cm9yKQotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUubV93ZWJWaWV3IGRpZEZhaWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbikgd2l0aEVy
cm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpXTsKKyAgICBpZiAobV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbE5hdmln
YXRpb25XaXRoRXJyb3JVc2VySW5mbykKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRGYWlsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRp
b24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKSB1c2VySW5mbzp1
c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFw
cGVyKCkpIDogbmlsXTsKKyAgICBlbHNlIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvcikKKyAg
ICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgZGlkRmFpbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3
aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JG
cmFtZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yLCBGcmFtZUluZm9EYXRhJiYg
ZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVt
cHRlcihtX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJyb3IpOworICAg
IGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpLCBmcmFt
ZUluZm8sIGVycm9yKTsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0aEVy
cm9yKQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRp
b25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmFpbExv
YWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6
RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVh
dGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlci5nZXQoKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0
aEVycm9yKQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmln
YXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIGRpZEZhaWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJv
ZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6
OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3aXRoRXJyb3I6
ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOwogfQogCiB2b2lkIE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbihXZWJQYWdl
UHJveHkmLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIFNhbWVEb2N1bWVudE5hdmlnYXRp
b25UeXBlIG5hdmlnYXRpb25UeXBlLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25E
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZFNhbWVEb2N1bWVu
dE5hdmlnYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbklE
IGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21lIG5hdmln
YXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KIAotICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgbmF2aWdhdGlvbjp3cmFw
cGVyKG5hdmlnYXRpb24pIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb246dG9XS1NhbWVEb2N1bWVu
dE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25UeXBlKV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbmF2aWdhdGlv
bjp3cmFwcGVyKG5hdmlnYXRpb24pIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb246dG9XS1NhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25UeXBlKV07CiB9CiAKIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpyZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZShX
ZWJQYWdlUHJveHkmLCBPcHRpb25TZXQ8V2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lPiBsYXlvdXRN
aWxlc3RvbmVzKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdSZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZSkKKyAgICBpZiAo
IW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Jl
bmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZp
Z2F0aW9uU3RhdGUubV93ZWJWaWV3IHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlOnJlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRzKGxheW91dE1pbGVzdG9uZXMpXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZW5kZXJp
bmdQcm9ncmVzc0RpZENoYW5nZTpyZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyhsYXlvdXRNaWxlc3Rv
bmVzKV07CiB9CiAKIGJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpzaG91
bGRCeXBhc3NDb250ZW50TW9kZVNhZmVndWFyZHMoKSBjb25zdAogewotICAgIHJldHVybiBtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIKLSAg
ICAgICAgfHwgbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzVXNlcklu
Zm9EZWNpc2lvbkhhbmRsZXI7CisgICAgcmV0dXJuIG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIKKyAgICAgICAgfHwgbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyOwog
fQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYlBhZ2VQcm94eSYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewotICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcikKKyAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm4g
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubGlzdGVuZXIoKS5jb21wbGV0ZUNoYWxsZW5nZShXZWJL
aXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25T
cGFjZUFuZENvbnRpbnVlKTsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5saXN0ZW5lcigpLmNvbXBsZXRlQ2hhbGxlbmdlKFdlYktpdDo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlQW5k
Q29udGludWUpOwogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hl
Y2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZpZXc6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOikpOwot
ICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGFsbGVuZ2UgPSBtYWtl
UmVmKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcild
KE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxD
cmVkZW50aWFsICpjcmVkZW50aWFsKSB7CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIHdlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkgY29tcGxldGlv
bkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGFsbGVuZ2UgPSBtYWtlUmVmKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKE5TVVJMU2Vzc2lvbkF1dGhD
aGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50
aWFsKSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxs
ZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBs
ZXRpb25IYW5kbGVyKCk7CkBAIC05NTksMTcgKzk1OSwxNyBAQCBzdGF0aWMgYm9vbCBzeXN0ZW1B
bGxvd3NMZWdhY3lUTFNGb3IoV2ViCiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpzaG91bGRBbGxvd0xlZ2FjeVRMUyhXZWJQYWdlUHJveHkmIHBhZ2UsIEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlUHJveHkmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVNob3VsZEFsbG93TGVnYWN5VExTCi0gICAgICAgICYmICFtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dEZXByZWNhdGVkVExTKQorICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VTaG91bGRBbGxvd0xlZ2FjeVRMUworICAgICAgICAmJiAhbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRpb25D
aGFsbGVuZ2VTaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMpCiAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihzeXN0ZW1BbGxvd3NMZWdhY3lUTFNGb3IocGFnZSkpOwogCi0gICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHN5c3RlbUFsbG93c0xlZ2FjeVRM
U0ZvcihwYWdlKSk7CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNob3VsZEFsbG93RGVw
cmVjYXRlZFRMUykgeworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNob3VsZEFsbG93RGVw
cmVjYXRlZFRMUykgewogICAgICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNh
bGxDaGVja2VyOjpjcmVhdGUobmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3Iod2Vi
VmlldzphdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpzaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFM6KSk7
Ci0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcgYXV0aGVudGljYXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkgc2hvdWxkQWxsb3dEZXByZWNhdGVkVExTOm1ha2VCbG9ja1B0cihbY2hl
Y2tlciA9IFdURk1vdmUoY2hlY2tlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKEJPT0wgc2hvdWxkQWxsb3cpIG11dGFibGUgeworICAgICAgICBbbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dy5nZXQoKS5nZXQoKSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTp3cmFwcGVyKGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKSBzaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFM6bWFrZUJsb2NrUHRyKFtjaGVj
a2VyID0gV1RGTW92ZShjaGVja2VyKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oQk9PTCBzaG91bGRBbGxvdykgbXV0YWJsZSB7CiAgICAgICAgICAgICBp
ZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5k
bGVyKCk7CkBAIC05NzgsNyArOTc4LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGF1dG8gY2hlY2tlciA9IENv
bXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCksIEBzZWxlY3Rvcihfd2ViVmlldzphdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpzaG91bGRBbGxv
d0xlZ2FjeVRMUzopKTsKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRl
UHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOndyYXBwZXIoYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpIHNob3VsZEFsbG93TGVnYWN5VExTOm1ha2VCbG9ja1B0cihbY2hlY2tl
ciA9IFdURk1vdmUoY2hlY2tlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcildKEJPT0wgc2hvdWxkQWxsb3cpIG11dGFibGUgeworICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOndyYXBwZXIoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIHNo
b3VsZEFsbG93TGVnYWN5VExTOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUoY2hlY2tl
ciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKEJPT0wg
c2hvdWxkQWxsb3cpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhh
bmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNr
ZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtOTg4LDE0ICs5ODgsMTQgQEAgdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogCiB2b2lkIE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkTmVnb3RpYXRlTW9kZXJuVExTKGNvbnN0IFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKCFtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5lZ290
aWF0ZU1vZGVyblRMUykKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5lZ290aWF0ZU1vZGVyblRMUykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9
IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0
PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWROZWdvdGlhdGVNb2Rl
cm5UTFM6bWFjKGNoYWxsZW5nZSldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZE5lZ290aWF0ZU1vZGVyblRM
UzptYWMoY2hhbGxlbmdlKV07CiB9CiAKIHN0YXRpYyBfV0tQcm9jZXNzVGVybWluYXRpb25SZWFz
b24gd2tQcm9jZXNzVGVybWluYXRpb25SZWFzb24oUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uIHJl
YXNvbikKQEAgLTEwMjIsNTggKzEwMjIsNTggQEAgc3RhdGljIF9XS1Byb2Nlc3NUZXJtaW5hdGlv
blJlYXNvbiB3a1BybwogCiBib29sIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
cHJvY2Vzc0RpZFRlcm1pbmF0ZShXZWJQYWdlUHJveHkmIHBhZ2UsIFByb2Nlc3NUZXJtaW5hdGlv
blJlYXNvbiByZWFzb24pCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlCi0g
ICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbgotICAgICAgICAm
JiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdX
ZWJQcm9jZXNzRGlkQ3Jhc2gpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZQor
ICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGVXaXRoUmVhc29uCisgICAgICAg
ICYmICFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdXZWJQcm9jZXNzRGlkQ3Jhc2gpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdh
dGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVy
bWluYXRlV2l0aFJlYXNvbikgewotICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IHdlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0
aFJlYXNvbjp3a1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbihyZWFzb24pXTsKKyAgICBpZiAobV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29u
dGVudFByb2Nlc3NEaWRUZXJtaW5hdGVXaXRoUmVhc29uKSB7CisgICAgICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHdl
YkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbjp3a1Byb2Nlc3NUZXJtaW5hdGlv
blJlYXNvbihyZWFzb24pXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgLy8g
V2UgcHJlZmVyIHdlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZTogb3ZlciBfd2Vi
Vmlld1dlYlByb2Nlc3NEaWRDcmFzaDouCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5h
dGUpIHsKLSAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3V2ViQ29udGVudFByb2Nl
c3NEaWRUZXJtaW5hdGU6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3XTsKKyAgICBpZiAobV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29u
dGVudFByb2Nlc3NEaWRUZXJtaW5hdGUpIHsKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3
ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGU6bV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKV07CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IEFTU0VSVChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld1dlYlByb2Nlc3NEaWRDcmFzaCk7Ci0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2Vi
UHJvY2Vzc0RpZENyYXNoOm1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlld107CisgICAgQVNTRVJU
KG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dl
YlByb2Nlc3NEaWRDcmFzaCk7CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2ViUHJvY2Vz
c0RpZENyYXNoOm1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogICAg
IHJldHVybiB0cnVlOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6cHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNpdmUoV2ViUGFnZVByb3h5JiBwYWdlKQogewotICAg
IGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdXZWJQcm9jZXNzRGlkQmVjb21lUmVzcG9uc2l2ZSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYlByb2Nlc3NEaWRCZWNv
bWVSZXNwb25zaXZlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAg
IGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21l
UmVzcG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRCZWNvbWVSZXNwb25zaXZlOm1fbmF2aWdhdGlvblN0
YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZEJlY29tZVVucmVzcG9uc2l2ZShXZWJQYWdlUHJv
eHkmIHBhZ2UpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1dlYlByb2Nlc3NEaWRCZWNvbWVVbnJlc3BvbnNpdmUpCisgICAg
aWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdXZWJQcm9jZXNzRGlkQmVjb21lVW5yZXNwb25zaXZlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlv
bkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2
aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZp
ZXdXZWJQcm9jZXNzRGlkQmVjb21lVW5yZXNwb25zaXZlOm1fbmF2aWdhdGlvblN0YXRlLm1fd2Vi
Vmlld107CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+
PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVVu
cmVzcG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0K
IAogUmVmUHRyPEFQSTo6RGF0YT4gTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3
ZWJDcnlwdG9NYXN0ZXJLZXkoV2ViUGFnZVByb3h5JikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlwdG9NYXN0ZXJLZXlGb3JX
ZWJWaWV3KSB7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXcpIHsKICAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IG1hc3RlcktleTsKICAgICAgICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFz
dGVyS2V5KG1hc3RlcktleSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwODEs
MTEgKzEwODEsMTEgQEAgUmVmUHRyPEFQSTo6RGF0YT4gTmF2aWdhdGlvblN0YXRlOjpOYXZpZwog
ICAgICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGUobWFzdGVyS2V5LmRhdGEoKSwgbWFzdGVy
S2V5LnNpemUoKSk7CiAgICAgfQogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmln
YXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBOU0RhdGEgKmRhdGEgPSBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYkNyeXB0b01hc3Rl
cktleUZvcldlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3XTsKKyAgICBOU0RhdGEg
KmRhdGEgPSBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYkNyeXB0b01hc3RlcktleUZvcldlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiAgICAgcmV0dXJuIEFQSTo6
RGF0YTo6Y3JlYXRlV2l0aG91dENvcHlpbmcoZGF0YSk7CiB9CiAKQEAgLTEwOTcsNjMgKzEwOTcs
NjMgQEAgUmVmUHRyPEFQSTo6U3RyaW5nPiBOYXZpZ2F0aW9uU3RhdGU6Ok5hdgogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6bmF2aWdhdGlvbkFjdGlvbkRpZEJlY29t
ZURvd25sb2FkKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlv
bkFjdGlvbiwgRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMubmF2aWdhdGlvbkFjdGlvbkRpZEJl
Y29tZURvd25sb2FkKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21lRG93bmxvYWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3Rh
dGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdh
dGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAg
aWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtuYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgbmF2
aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRpZEJlY29tZURvd25sb2Fk
OndyYXBwZXIoZG93bmxvYWQpXTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBuYXZpZ2F0aW9uQWN0
aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihk
b3dubG9hZCldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
bmF2aWdhdGlvblJlc3BvbnNlRGlkQmVjb21lRG93bmxvYWQoV2ViUGFnZVByb3h5JiwgQVBJOjpO
YXZpZ2F0aW9uUmVzcG9uc2UmIG5hdmlnYXRpb25SZXNwb25zZSwgRG93bmxvYWRQcm94eSYgZG93
bmxvYWQpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMubmF2aWdhdGlvblJlc3BvbnNlRGlkQmVjb21lRG93bmxvYWQpCisgICAgaWYgKCFt
X25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLm5hdmlnYXRpb25S
ZXNwb25zZURpZEJlY29tZURvd25sb2FkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IG5hdmlnYXRpb25SZXNwb25zZTp3cmFwcGVy
KG5hdmlnYXRpb25SZXNwb25zZSkgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCld
OworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIG5hdmlnYXRpb25SZXNwb25zZTp3cmFwcGVyKG5hdmln
YXRpb25SZXNwb25zZSkgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCldOwogfQog
CiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGV4dE1lbnVEaWRD
cmVhdGVEb3dubG9hZChXZWJQYWdlUHJveHkmLCBEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsK
LSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy5j
b250ZXh0TWVudURpZENyZWF0ZURvd25sb2FkKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy5jb250ZXh0TWVudURpZENyZWF0ZURvd25sb2Fk
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdh
dGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKSkgIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBj
b250ZXh0TWVudURpZENyZWF0ZURvd25sb2FkOndyYXBwZXIoZG93bmxvYWQpXTsKKyAgICBbc3Rh
dGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKSkgIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCku
Z2V0KCkgY29udGV4dE1lbnVEaWRDcmVhdGVEb3dubG9hZDp3cmFwcGVyKGRvd25sb2FkKV07CiB9
CiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgdXRpKQogewotICAgIGlmICghbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydExv
YWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKQorICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRMb2FkRm9y
UXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVu
dEluTWFpbkZyYW1lV2l0aEZpbGVOYW1lOmZpbGVOYW1lIHV0aTp1dGldOworICAgIFtzdGF0aWNf
Y2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IGRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6
ZmlsZU5hbWUgdXRpOnV0aV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZShjb25z
dCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9hZEZvclF1aWNrTG9v
a0RvY3VtZW50SW5NYWluRnJhbWUpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9j
dW1lbnRJbk1haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlldyBkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFt
ZTpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZEZpbmlzaExv
YWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5n
ZXQoKV07CiB9CiAjZW5kaWYKIApAQCAtMTE4NCwxOSArMTE4NCwxOSBAQCBzdGF0aWMgX1dLU09B
dXRob3JpemF0aW9uTG9hZFBvbGljeSB3a1NPCiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKFdlYlBhZ2VQ
cm94eSYsIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgY3VycmVudFNPQXV0aG9yaXphdGlvbkxv
YWRQb2xpY3ksIGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3lGb3JF
eHRlbnNpb25Db21wbGV0aW9uSGFuZGxlcikgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yU09BdXRo
b3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5Rm9yRXh0ZW5zaW9uQ29tcGxldGlvbkhhbmRs
ZXIpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFNPQXV0aG9yaXphdGlvbkxv
YWRQb2xpY3kpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkgewogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9u
SGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUobmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpLCBAc2Vs
ZWN0b3IoX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJy
ZW50UG9saWN5OmZvckV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9u
TG9hZFdpdGhDdXJyZW50UG9saWN5OndrU09BdXRob3JpemF0aW9uTG9hZFBvbGljeShjdXJyZW50
U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSkgZm9yRXh0ZW5zaW9uOmV4dGVuc2lvbiBjb21wbGV0
aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShfV0tTT0F1dGhvcml6
YXRpb25Mb2FkUG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRp
b25Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6d2tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KGN1cnJl
bnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KSBmb3JFeHRlbnNpb246ZXh0ZW5zaW9uIGNvbXBs
ZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1NPQXV0aG9y
aXphdGlvbkxvYWRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXIt
PmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTEyMDgsNyAr
MTIwOCw3IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKIC8vIEhp
c3RvcnlEZWxlZ2F0ZVByaXZhdGUgc3VwcG9ydAogICAgIAogTmF2aWdhdGlvblN0YXRlOjpIaXN0
b3J5Q2xpZW50OjpIaXN0b3J5Q2xpZW50KE5hdmlnYXRpb25TdGF0ZSYgbmF2aWdhdGlvblN0YXRl
KQotICAgIDogbV9uYXZpZ2F0aW9uU3RhdGUobmF2aWdhdGlvblN0YXRlKQorICAgIDogbV9uYXZp
Z2F0aW9uU3RhdGUobWFrZVdlYWtQdHIobmF2aWdhdGlvblN0YXRlKSkKIHsKIH0KIApAQCAtMTIx
OCw1MCArMTIxOCw1MCBAQCBOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6On5IaXN0b3J5
CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50OjpkaWROYXZpZ2F0ZVdpdGhO
YXZpZ2F0aW9uRGF0YShXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJOYXZpZ2F0aW9uRGF0YVN0b3Jl
JiBuYXZpZ2F0aW9uRGF0YVN0b3JlKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9o
aXN0b3J5RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0
YSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9yeURl
bGVnYXRlLmdldCgpOworICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3Rh
dGUtPm1faGlzdG9yeURlbGVnYXRlLmdldCgpOwogICAgIGlmICghaGlzdG9yeURlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdh
dGlvblN0YXRlLm1fd2ViVmlldyBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTp3cmFwcGVy
KEFQSTo6TmF2aWdhdGlvbkRhdGE6OmNyZWF0ZShuYXZpZ2F0aW9uRGF0YVN0b3JlKSldOworICAg
IFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5n
ZXQoKS5nZXQoKSBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTp3cmFwcGVyKEFQSTo6TmF2
aWdhdGlvbkRhdGE6OmNyZWF0ZShuYXZpZ2F0aW9uRGF0YVN0b3JlKSldOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdl
YlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFdURjo6U3Ry
aW5nJiBkZXN0aW5hdGlvblVSTCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1faGlz
dG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVS
TFRvVVJMKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTFRvVVJMKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
Lm1faGlzdG9yeURlbGVnYXRlLmdldCgpOworICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURlbGVnYXRlLmdldCgpOwogICAgIGlmICghaGlzdG9y
eURlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RG
cm9tVVJMOltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c291cmNlVVJMXSB0b1VSTDpbTlNV
UkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOmRlc3RpbmF0aW9uVVJMXV07CisgICAgW2hpc3RvcnlE
ZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0
cmluZzpzb3VyY2VVUkxdIHRvVVJMOltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6ZGVzdGlu
YXRpb25VUkxdXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRp
ZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6OlN0cmluZyYg
c291cmNlVVJMLCBjb25zdCBXVEY6OlN0cmluZyYgZGVzdGluYXRpb25VUkwpCiB7Ci0gICAgaWYg
KCFtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBl
cmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkxUb1VSTCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1TZXJ2ZXJSZWRp
cmVjdEZyb21VUkxUb1VSTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBoaXN0b3J5RGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0
ZS5nZXQoKTsKICAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcg
ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVSTDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3Ry
aW5nOnNvdXJjZVVSTF0gdG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpkZXN0aW5h
dGlvblVSTF1dOworICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RGcm9tVVJM
OltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c291cmNlVVJMXSB0b1VSTDpbTlNVUkwgX3dl
Yl9VUkxXaXRoV1RGU3RyaW5nOmRlc3RpbmF0aW9uVVJMXV07CiB9CiAKIHZvaWQgTmF2aWdhdGlv
blN0YXRlOjpIaXN0b3J5Q2xpZW50OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV2ViUGFnZVByb3h5
JiwgY29uc3QgV1RGOjpTdHJpbmcmIHRpdGxlLCBjb25zdCBXVEY6OlN0cmluZyYgdXJsKQogewot
ICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEaWRVcGRhdGVIaXN0b3J5VGl0bGVGb3JVUkwpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0
ZS0+bV9oaXN0b3J5RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRVcGRhdGVIaXN0b3J5VGl0bGVG
b3JVUkwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBoaXN0b3J5
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9oaXN0b3J5RGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtoaXN0b3J5
RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFVwZGF0ZUhp
c3RvcnlUaXRsZTp0aXRsZSBmb3JVUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzp1cmxd
XTsKKyAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgZGlkVXBkYXRlSGlzdG9yeVRpdGxlOnRpdGxlIGZvclVSTDpbTlNV
UkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnVybF1dOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0
ZTo6d2lsbENoYW5nZUlzTG9hZGluZygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9VSURlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvVUlEZWxlZ2F0ZS5oCShyZXZpc2lvbiAyNzExNTcpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAj
aW1wb3J0IDx3dGYvV2Vha09iakNQdHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CiAKIEBj
bGFzcyBfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbzsKIEBjbGFzcyBXS1dlYlZpZXc7CkBAIC00Nyw3
ICs0OCw3IEBAIGNsYXNzIFJlZ2lzdHJhYmxlRG9tYWluOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotY2xhc3MgVUlEZWxlZ2F0ZSB7CitjbGFzcyBVSURlbGVnYXRlIDogcHVibGljIENhbk1ha2VX
ZWFrUHRyPFVJRGVsZWdhdGU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBleHBsaWNpdCBVSURlbGVnYXRlKFdLV2ViVmlldyAqKTsKQEAgLTcyLDcgKzczLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgLy8gQVBJOjpDb250ZXh0TWVudUNsaWVudAogICAgICAgICB2
b2lkIG1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYsIE5TTWVudSAqLCBjb25zdCBX
ZWJIaXRUZXN0UmVzdWx0RGF0YSYsIEFQSTo6T2JqZWN0KiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChSZXRhaW5QdHI8TlNNZW51PiYmKT4mJikgb3ZlcnJpZGU7CiAKLSAgICAgICAgVUlEZWxlZ2F0
ZSYgbV91aURlbGVnYXRlOworICAgICAgICBXZWFrUHRyPFVJRGVsZWdhdGU+IG1fdWlEZWxlZ2F0
ZTsKICAgICB9OwogI2VuZGlmCiAKQEAgLTEzMSw3ICsxMzIsNyBAQCBwcml2YXRlOgogI2lmIEVO
QUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgICAgIHZvaWQgc2hvdWxkQWxsb3dEZXZpY2VP
cmllbnRhdGlvbkFuZE1vdGlvbkFjY2VzcyhXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYkZyYW1l
UHJveHkmLCBGcmFtZUluZm9EYXRhJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IGZpbmFsOwogI2VuZGlmCi0gICAgICAgIGJvb2wgbmVlZHNGb250QXR0cmlidXRlcygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
Q2hhbmdlRm9udEF0dHJpYnV0ZXM7IH0KKyAgICAgICAgYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVz
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV91aURlbGVnYXRlID8gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXMgOiBmYWxzZTsgfQog
ICAgICAgICB2b2lkIGRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzKGNvbnN0IFdlYkNvcmU6OkZvbnRB
dHRyaWJ1dGVzJikgZmluYWw7CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2Vj
dXJpdHlPcmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RQcm94eSYpIGZpbmFsOwogICAgICAgICB2b2lkIGNoZWNrVXNlck1lZGlhUGVybWlzc2lv
bkZvck9yaWdpbihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9y
aWdpbiYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94
eSYpIGZpbmFsOwpAQCAtMTYzLDEwICsxNjQsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAg
ICB2b2lkIGRlY2lkZVBvbGljeUZvclNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3Qo
V2ViUGFnZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoYm9vbCk+JiYpIGZpbmFsOwogCi0gICAgICAgIFVJRGVsZWdhdGUmIG1fdWlEZWxlZ2F0ZTsK
KyAgICAgICAgV2Vha1B0cjxVSURlbGVnYXRlPiBtX3VpRGVsZWdhdGU7CiAgICAgfTsKIAotICAg
IFdLV2ViVmlldyAqbV93ZWJWaWV3OworICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJW
aWV3OwogICAgIFdlYWtPYmpDUHRyPGlkIDxXS1VJRGVsZWdhdGU+ID4gbV9kZWxlZ2F0ZTsKIAog
ICAgIHN0cnVjdCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVn
YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVs
ZWdhdGUubW0JKHJldmlzaW9uIDI3MTE1NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1VJRGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lk
IFVJRGVsZWdhdGU6OnNldERlbGVnYXRlKGlkIDxXS1VJRGVsCiAKICNpZiBFTkFCTEUoQ09OVEVY
VF9NRU5VUykKIFVJRGVsZWdhdGU6OkNvbnRleHRNZW51Q2xpZW50OjpDb250ZXh0TWVudUNsaWVu
dChVSURlbGVnYXRlJiB1aURlbGVnYXRlKQotICAgIDogbV91aURlbGVnYXRlKHVpRGVsZWdhdGUp
CisgICAgOiBtX3VpRGVsZWdhdGUobWFrZVdlYWtQdHIodWlEZWxlZ2F0ZSkpCiB7CiB9CiAKQEAg
LTE5NywyMCArMTk3LDIzIEBAIFVJRGVsZWdhdGU6OkNvbnRleHRNZW51Q2xpZW50Ojp+Q29udGV4
dE0KIAogdm9pZCBVSURlbGVnYXRlOjpDb250ZXh0TWVudUNsaWVudDo6bWVudUZyb21Qcm9wb3Nl
ZE1lbnUoV2ViUGFnZVByb3h5JiwgTlNNZW51ICptZW51LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0
RGF0YSYsIEFQSTo6T2JqZWN0KiB1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXRh
aW5QdHI8TlNNZW51PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29udGV4dE1lbnVGb3JFbGVtZW50Ci0g
ICAgICAgICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRN
ZW51Rm9yRWxlbWVudFVzZXJJbmZvCi0gICAgICAgICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0dldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUZvckVsZW1lbnRV
c2VySW5mb0NvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobWVudSk7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVsZW1lbnQKKyAgICAgICAgJiYg
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRNZW51Rm9yRWxl
bWVudFVzZXJJbmZvCisgICAgICAgICYmICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdHZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVGb3JFbGVtZW50VXNlckluZm9D
b21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1lbnUp
OworCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobWVu
dSk7CiAKICAgICBhdXRvIGNvbnRleHRNZW51RWxlbWVudEluZm8gPSBhZG9wdE5TKFtbX1dLQ29u
dGV4dE1lbnVFbGVtZW50SW5mbyBhbGxvY10gaW5pdF0pOwogCi0gICAgaWYgKG1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51
Rm9yRWxlbWVudFVzZXJJbmZvQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAobV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRN
ZW51Rm9yRWxlbWVudFVzZXJJbmZvQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgYXV0byBj
aGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdl
dCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6Z2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51OmZv
ckVsZW1lbnQ6dXNlckluZm86Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXcgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0
TWVudUVsZW1lbnRJbmZvLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQg
PE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwgY29tcGxldGlvbkhh
bmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKE5TTWVudSAqbWVudSkgbXV0
YWJsZSB7CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGdldENvbnRleHRNZW51RnJv
bVByb3Bvc2VkTWVudTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQo
KSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVz
ZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9
IFdURk1vdmUoY2hlY2tlcildIChOU01lbnUgKm1lbnUpIG11dGFibGUgewogICAgICAgICAgICAg
aWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFu
ZGxlcigpOwpAQCAtMjIwLDE2ICsyMjMsMTYgQEAgdm9pZCBVSURlbGVnYXRlOjpDb250ZXh0TWVu
dUNsaWVudDo6bWVudQogICAgIH0KICAgICAKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFU
SU9OU19CRUdJTgotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0NvbnRleHRNZW51Rm9yRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS5tX3dlYlZpZXcgY29udGV4dE1lbnU6bWVudSBmb3JFbGVtZW50OmNvbnRleHRNZW51RWxlbWVu
dEluZm8uZ2V0KCldKTsKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3Q29udGV4dE1lbnVGb3JFbGVtZW50KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY29udGV4dE1lbnU6bWVudSBmb3JFbGVtZW50
OmNvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCldKTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVy
KFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS5tX3dlYlZpZXcgY29udGV4dE1lbnU6bWVudSBmb3JFbGVtZW50OmNvbnRleHRNZW51RWxlbWVu
dEluZm8uZ2V0KCkgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVD
b2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF0pOworICAgIGNvbXBsZXRpb25IYW5k
bGVyKFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNvbnRleHRNZW51Om1lbnUgZm9yRWxlbWVudDpj
b250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nh
c3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdKTsKICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KICNlbmRpZgogCiBVSURlbGVn
YXRlOjpVSUNsaWVudDo6VUlDbGllbnQoVUlEZWxlZ2F0ZSYgdWlEZWxlZ2F0ZSkKLSAgICA6IG1f
dWlEZWxlZ2F0ZSh1aURlbGVnYXRlKQorICAgIDogbV91aURlbGVnYXRlKG1ha2VXZWFrUHRyKHVp
RGVsZWdhdGUpKQogewogfQogCkBAIC0yMzksMTggKzI0MiwyMSBAQCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6flVJQ2xpZW50KCkKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y3JlYXRlTmV3
UGFnZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiYgd2lu
ZG93RmVhdHVyZXMsIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlv
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViUGFnZVByb3h5PiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihudWxscHRyKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgQVNTRVJUKGRlbGVnYXRlKTsKIAotICAgIGF1dG8g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW21fdWlEZWxlZ2F0ZS5tX3dlYlZpZXctPl9jb25maWd1
cmF0aW9uIGNvcHldKTsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0UmVsYXRlZFdlYlZpZXc6bV91
aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCktPl9jb25maWd1cmF0aW9uIGNvcHldKTsKKyAg
ICBbY29uZmlndXJhdGlvbiBfc2V0UmVsYXRlZFdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCldOwogCiAgICAgYXV0byBhcGlXaW5kb3dGZWF0dXJlcyA9IEFQSTo6V2lu
ZG93RmVhdHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcyk7CiAKLSAgICBpZiAobV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRp
b25Gb3JOYXZpZ2F0aW9uQWN0aW9uV2luZG93RmVhdHVyZXNBc3luYykgeworICAgIGlmIChtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZp
Z3VyYXRpb25Gb3JOYXZpZ2F0aW9uQWN0aW9uV2luZG93RmVhdHVyZXNBc3luYykgewogICAgICAg
ICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVs
ZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpjcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3Vy
YXRpb246Zm9yTmF2aWdhdGlvbkFjdGlvbjp3aW5kb3dGZWF0dXJlczpjb21wbGV0aW9uSGFuZGxl
cjopKTsKIAotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uLmdldCgpIGZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0
aW9uQWN0aW9uKSB3aW5kb3dGZWF0dXJlczp3cmFwcGVyKGFwaVdpbmRvd0ZlYXR1cmVzKSBjb21w
bGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCByZWxhdGVkV2Vi
VmlldyA9IFJldGFpblB0cjxXS1dlYlZpZXc+KG1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcpXSAoV0tX
ZWJWaWV3ICp3ZWJWaWV3KSBtdXRhYmxlIHsKKyAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0
KCkgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgZm9y
TmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHdpbmRvd0ZlYXR1cmVz
OndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0
cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tl
ciA9IFdURk1vdmUoY2hlY2tlciksIHJlbGF0ZWRXZWJWaWV3ID0gbV91aURlbGVnYXRlLT5tX3dl
YlZpZXcuZ2V0KCldIChXS1dlYlZpZXcgKndlYlZpZXcpIG11dGFibGUgewogICAgICAgICAgICAg
aWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFu
ZGxlcigpOwpAQCAtMjY3LDMzICsyNzMsMzYgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
Y3JlYXRlTmV3UGFnZQogICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NyZWF0ZVdl
YlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25XaW5kb3dGZWF0dXJlcykK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NyZWF0ZVdl
YlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25XaW5kb3dGZWF0dXJlcykK
ICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogCi0gICAgUmV0YWlu
UHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5t
X3dlYlZpZXcgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0
KCkgZm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHdpbmRvd0Zl
YXR1cmVzOndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpXTsKKyAgICBSZXRhaW5QdHI8V0tXZWJW
aWV3PiB3ZWJWaWV3ID0gW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24u
Z2V0KCkgZm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHdpbmRv
d0ZlYXR1cmVzOndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpXTsKICAgICBpZiAoIXdlYlZpZXcp
CiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKIAotICAgIGlmIChb
d2ViVmlldy0+X2NvbmZpZ3VyYXRpb24gX3JlbGF0ZWRXZWJWaWV3XSAhPSBtX3VpRGVsZWdhdGUu
bV93ZWJWaWV3KQorICAgIGlmIChbd2ViVmlldy5nZXQoKS0+X2NvbmZpZ3VyYXRpb24gX3JlbGF0
ZWRXZWJWaWV3XSAhPSBtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSkKICAgICAg
ICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uIGZv
cm1hdDpAIlJldHVybmVkIFdLV2ViVmlldyB3YXMgbm90IGNyZWF0ZWQgd2l0aCB0aGUgZ2l2ZW4g
Y29uZmlndXJhdGlvbi4iXTsKICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJWaWV3LT5fcGFnZS5n
ZXQoKSk7CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVy
dChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFt
ZVByb3h5KiwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgRnVuY3Rpb248dm9pZCgpPiYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlG
cmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdl
SW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRv
IGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUu
Z2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3Nh
Z2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbZGVsZWdhdGUg
d2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0
aE1lc3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86
OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0geworICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJ1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUlu
Zm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6
bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gewogICAgICAgICBpZiAoY2hlY2tlci0+
Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0zMDMsMTkgKzMxMiwyMiBAQCB2b2lkIFVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RG
OjpTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqIHdlYkZyYW1lUHJveHksIEZyYW1lSW5m
b0RhdGEmJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1
bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0
aW9uSGFuZGxlcikgeworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2VJbml0
aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVs
ZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxX
aXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgIFtk
ZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcnVuSmF2YVNjcmlwdENvbmZp
cm1QYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6
RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25I
YW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0
YWJsZSB7CisgICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCkgcnVuSmF2YVNjcmlwdENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5p
dGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFt
ZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUo
Y2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5j
b21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKQEAgLTMyNSwxOSArMzM3LDIyIEBAIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHQKIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21wdChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0
IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgZGVmYXVsdFZhbHVlLCBX
ZWJGcmFtZVByb3h5KiwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgRnVuY3Rpb248dm9pZChj
b25zdCBXVEY6OlN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91
aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0VGV4dElucHV0
UGFuZWxXaXRoUHJvbXB0RGVmYXVsdFRleHRJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRs
ZXIpIHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKHsgfSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1J1bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHREZWZhdWx0VGV4dElu
aXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNy
ZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZpZXc6cnVuSmF2YVNjcmlwdFRleHRJ
bnB1dFBhbmVsV2l0aFByb21wdDpkZWZhdWx0VGV4dDppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRp
b25IYW5kbGVyOikpOwotICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXcgcnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdDptZXNzYWdlIGRlZmF1bHRU
ZXh0OmRlZmF1bHRWYWx1ZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86
OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKE5TU3RyaW5nICpyZXN1bHQpIG11dGFibGUg
eworICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIHJ1bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHQ6bWVzc2FnZSBkZWZhdWx0
VGV4dDpkZWZhdWx0VmFsdWUgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZv
OjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1h
a2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChOU1N0cmluZyAqcmVzdWx0KSBtdXRhYmxl
IHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQp
OwpAQCAtMzQ3LDcgKzM2MiwxMCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZh
U2NyaXB0CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RTdG9yYWdlQWNjZXNz
Q29uZmlybShXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSwgV2ViRnJhbWVQcm94eSosIGNvbnN0
IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiByZXF1ZXN0aW5nRG9tYWluLCBjb25zdCBXZWJD
b3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgY3VycmVudERvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
IHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CkBA
IC0zNTYsMjAgKzM3NCwyMCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZXF1ZXN0U3Rv
cmFnCiAgICAgLy8gU29tZSBzaXRlcyBoYXZlIHF1aXJrcyB3aGVyZSBtdWx0aXBsZSBsb2dpbiBk
b21haW5zIHJlcXVpcmUgc3RvcmFnZSBhY2Nlc3MuCiAgICAgaWYgKGF1dG8gYWRkaXRpb25hbExv
Z2luRG9tYWluID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmaW5kQWRkaXRpb25h
bExvZ2luRG9tYWluKGN1cnJlbnREb21haW4sIHJlcXVlc3RpbmdEb21haW4pKSB7CiAjaWYgIVBM
QVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQotICAgICAgICBwcmVzZW50U3Rv
cmFnZUFjY2Vzc0FsZXJ0UXVpcmsobV91aURlbGVnYXRlLm1fd2ViVmlldywgcmVxdWVzdGluZ0Rv
bWFpbiwgKmFkZGl0aW9uYWxMb2dpbkRvbWFpbiwgY3VycmVudERvbWFpbiwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikpOworICAgICAgICBwcmVzZW50U3RvcmFnZUFjY2Vzc0FsZXJ0UXVpcmso
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCksIHJlcXVlc3RpbmdEb21haW4sICph
ZGRpdGlvbmFsTG9naW5Eb21haW4sIGN1cnJlbnREb21haW4sIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RTdG9yYWdlQWNjZXNzUGFu
ZWxVbmRlckZpcnN0UGFydHlDb21wbGV0aW9uSGFuZGxlcikgeworICAgIGlmICghbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdFN0b3JhZ2VBY2Nlc3NQYW5lbFVu
ZGVyRmlyc3RQYXJ0eUNvbXBsZXRpb25IYW5kbGVyKSB7CiAjaWYgIVBMQVRGT1JNKFdBVENIT1Mp
ICYmICFQTEFURk9STShBUFBMRVRWKQotICAgICAgICBwcmVzZW50U3RvcmFnZUFjY2Vzc0FsZXJ0
KG1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcsIHJlcXVlc3RpbmdEb21haW4sIGN1cnJlbnREb21haW4s
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcHJlc2VudFN0b3JhZ2VBY2Nl
c3NBbGVydChtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSwgcmVxdWVzdGluZ0Rv
bWFpbiwgY3VycmVudERvbWFpbiwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2VuZGlm
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9u
SGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2Vi
VmlldzpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsRm9yRG9tYWluOnVuZGVyQ3VycmVudERvbWFp
bjpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJlcXVlc3RTdG9yYWdlQWNj
ZXNzUGFuZWxGb3JEb21haW46cmVxdWVzdGluZ0RvbWFpbi5zdHJpbmcoKSB1bmRlckN1cnJlbnRE
b21haW46Y3VycmVudERvbWFpbi5zdHJpbmcoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQ
dHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNr
ZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgeworICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93
ZWJWaWV3LmdldCgpLmdldCgpIHJlcXVlc3RTdG9yYWdlQWNjZXNzUGFuZWxGb3JEb21haW46cmVx
dWVzdGluZ0RvbWFpbi5zdHJpbmcoKSB1bmRlckN1cnJlbnREb21haW46Y3VycmVudERvbWFpbi5z
dHJpbmcoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIp
XSAoQk9PTCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlv
bkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CkBAIC0zNzksMTUgKzM5NywxOCBAQCB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpyZXF1ZXN0U3RvcmFnCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmIHBhZ2UsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IEZy
YW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgRnVuY3Rpb248dm9pZChib29sKT4mIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdSZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWVEZWNpc2lvbkhhbmRsZXIpCi0g
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lRGVj
aXNpb25IYW5kbGVyKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwog
ICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAg
IGlmICghZGVsZWdhdGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJl
cXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZTpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0g
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWU6d3JhcHBl
cihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKEZyYW1lSW5mb0RhdGEgeyBmcmFtZUluZm8gfSwgJnBh
Z2UpKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IHN0
ZDo6ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpLCBjaGVja2VyID0gV1RGTW92
ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWU6d3JhcHBlcihBUEk6
OkZyYW1lSW5mbzo6Y3JlYXRlKEZyYW1lSW5mb0RhdGEgeyBmcmFtZUluZm8gfSwgJnBhZ2UpKSBk
ZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhj
aGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVj
a2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBs
ZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTM5NywzNiArNDE4LDQ0
IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUYKIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6ZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBl
YXJhbmNlKFdlYlBhZ2VQcm94eSYsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUmVzaWduSW5wdXRFbGVt
ZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNlV2l0aFVzZXJJbmZvKQorICAgIGlmICghbV91aURl
bGVnYXRlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEaWRSZXNpZ25JbnB1dEVsZW1lbnRTdHJvbmdQYXNzd29yZEFwcGVh
cmFuY2VXaXRoVXNlckluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFz
c3dvcmRBcHBlYXJhbmNlV2l0aFVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5T
U2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIGRpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFy
YW5jZVdpdGhVc2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGlu
Zz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsXTsKIH0KIAogYm9vbCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxl
cjsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVu
bG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5k
bGVyOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWwoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwg
V2ViRnJhbWVQcm94eSosIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQo
Ym9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNz
YWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9h
ZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVy
KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQo
KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwog
ICAgIGlmICghZGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhh
bmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZp
ZXc6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFt
ZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQ
STo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRp
b25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkg
bXV0YWJsZSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcnVuQmVmb3JlVW5sb2FkQ29u
ZmlybVBhbmVsV2l0aE1lc3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJ
OjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlv
bkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBt
dXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNh
bGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihy
ZXN1bHQpOwpAQCAtNDM2LDI2ICs0NjUsMjggQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
cnVuQmVmb3JlVW5sbwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpleGNlZWRlZERhdGFi
YXNlUXVvdGEoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSTo6U2VjdXJpdHlPcmln
aW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBXVEY6OlN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25z
dCBXVEY6OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVv
dGEsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcg
bG9uZyBjdXJyZW50VXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlLCBGdW5j
dGlvbjx2b2lkICh1bnNpZ25lZCBsb25nIGxvbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVEYXRh
YmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5DdXJyZW50UXVvdGFDdXJyZW50T3JpZ2luVXNhZ2VD
dXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIgJiYgIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNl
Y3VyaXR5T3JpZ2luRGF0YWJhc2VOYW1lRGlzcGxheU5hbWVDdXJyZW50UXVvdGFDdXJyZW50T3Jp
Z2luVXNhZ2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIp
IHsKKyAgICAvLyBVc2UgNTAgTUIgYXMgdGhlIGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEuCisgICAg
dW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRQZXJPcmlnaW5EYXRhYmFzZVF1b3RhID0gNTAgKiAx
MDI0ICogMTAyNDsKIAotICAgICAgICAvLyBVc2UgNTAgTUIgYXMgdGhlIGRlZmF1bHQgZGF0YWJh
c2UgcXVvdGEuCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UGVyT3JpZ2luRGF0
YWJhc2VRdW90YSA9IDUwICogMTAyNCAqIDEwMjQ7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihkZWZhdWx0UGVyT3JpZ2luRGF0YWJhc2VR
dW90YSk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
ZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5DdXJyZW50UXVvdGFDdXJyZW50T3Jp
Z2luVXNhZ2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIg
JiYgIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZURhdGFiYXNl
UXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlOYW1lQ3VycmVudFF1b3Rh
Q3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVjaXNp
b25IYW5kbGVyKSB7CiAKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGVmYXVsdFBlck9yaWdp
bkRhdGFiYXNlUXVvdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewot
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50UXVvdGEpOworICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihkZWZhdWx0UGVyT3JpZ2luRGF0YWJhc2VRdW90YSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOwogCi0gICAgaWYgKG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNl
Y3VyaXR5T3JpZ2luRGF0YWJhc2VOYW1lRGlzcGxheU5hbWVDdXJyZW50UXVvdGFDdXJyZW50T3Jp
Z2luVXNhZ2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIp
IHsKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRl
RGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luRGF0YWJhc2VOYW1lRGlzcGxheU5hbWVDdXJy
ZW50UXVvdGFDdXJyZW50T3JpZ2luVXNhZ2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNh
Z2VEZWNpc2lvbkhhbmRsZXIpIHsKICAgICAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhh
bmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZp
ZXc6ZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOmRhdGFiYXNlTmFtZTpkaXNw
bGF5TmFtZTpjdXJyZW50UXVvdGE6Y3VycmVudE9yaWdpblVzYWdlOmN1cnJlbnREYXRhYmFzZVVz
YWdlOmV4cGVjdGVkVXNhZ2U6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgICAgICBbKGlkIDxXS1VJ
RGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3
IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0eU9y
aWdpbikgZGF0YWJhc2VOYW1lOmRhdGFiYXNlTmFtZSBkaXNwbGF5TmFtZTpkaXNwbGF5TmFtZSBj
dXJyZW50UXVvdGE6Y3VycmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50T3JpZ2lu
VXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6Y3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6ZXhw
ZWN0ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2Vy
KV0odW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSB7CisgICAgICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKCpz
ZWN1cml0eU9yaWdpbikgZGF0YWJhc2VOYW1lOmRhdGFiYXNlTmFtZSBkaXNwbGF5TmFtZTpkaXNw
bGF5TmFtZSBjdXJyZW50UXVvdGE6Y3VycmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJy
ZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6Y3VycmVudFVzYWdlIGV4cGVjdGVk
VXNhZ2U6ZXhwZWN0ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92
ZShjaGVja2VyKV0odW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSB7CiAgICAgICAgICAgICBp
ZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5k
bGVyKCk7CkBAIC00NjUsNyArNDk2LDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZXhj
ZWVkZWREYXRhYgogICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRl
Y2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjpjdXJyZW50UXVvdGE6Y3VycmVudE9y
aWdpblVzYWdlOmN1cnJlbnREYXRhYmFzZVVzYWdlOmV4cGVjdGVkVXNhZ2U6ZGVjaXNpb25IYW5k
bGVyOikpOwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3Jp
Z2luOndyYXBwZXIoKnNlY3VyaXR5T3JpZ2luKSBjdXJyZW50UXVvdGE6Y3VycmVudFF1b3RhIGN1
cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6
Y3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6ZXhwZWN0ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6
bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0odW5zaWduZWQgbG9uZyBsb25nIG5ld1F1
b3RhKSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlRGF0YWJhc2VRdW90YUZv
clNlY3VyaXR5T3JpZ2luOndyYXBwZXIoKnNlY3VyaXR5T3JpZ2luKSBjdXJyZW50UXVvdGE6Y3Vy
cmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERh
dGFiYXNlVXNhZ2U6Y3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6ZXhwZWN0ZWRVc2FnZSBkZWNp
c2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0odW5zaWduZWQgbG9u
ZyBsb25nIG5ld1F1b3RhKSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxl
ckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+
ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC00ODcsMTQgKzUxOCwxNyBAQCBzdGF0aWMg
aW5saW5lIF9XS0ZvY3VzRGlyZWN0aW9uIHRvV0tGb2N1CiAKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OnRha2VGb2N1cyhXZWJQYWdlUHJveHkqLCBXS0ZvY3VzRGlyZWN0aW9uIGRpcmVjdGlv
bikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VGFr
ZUZvY3VzKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Rha2VGb2N1
cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHRha2VGb2N1czp0b1dLRm9jdXNEaXJlY3Rp
b24oZGlyZWN0aW9uKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUg
X3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgdGFrZUZvY3VzOnRv
V0tGb2N1c0RpcmVjdGlvbihkaXJlY3Rpb24pXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
NTI5LDExNiArNTYzLDE0NiBAQCBzdGF0aWMgX1dLQXV0b3BsYXlFdmVudCB0b1dLQXV0b3BsYXlF
dmVuCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmhhbmRsZUF1dG9wbGF5RXZlbnQoV2Vi
UGFnZVByb3h5JiwgV2ViQ29yZTo6QXV0b3BsYXlFdmVudCBldmVudCwgT3B0aW9uU2V0PFdlYkNv
cmU6OkF1dG9wbGF5RXZlbnRGbGFncz4gZmxhZ3MpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0hhbmRsZUF1dG9wbGF5RXZlbnRXaXRoRmxhZ3MpCisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGFuZGxlQXV0b3BsYXlFdmVudFdpdGhG
bGFncykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IGhhbmRsZUF1dG9wbGF5RXZlbnQ6dG9XS0F1dG9wbGF5RXZl
bnQoZXZlbnQpIHdpdGhGbGFnczp0b1dLQXV0b3BsYXlFdmVudEZsYWdzKGZsYWdzKV07CisgICAg
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
LT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgaGFuZGxlQXV0b3BsYXlFdmVudDp0b1dLQXV0b3BsYXlF
dmVudChldmVudCkgd2l0aEZsYWdzOnRvV0tBdXRvcGxheUV2ZW50RmxhZ3MoZmxhZ3MpXTsKIH0K
IAogI2lmIFBMQVRGT1JNKE1BQykKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNhblJ1bk1v
ZGFsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdSdW5Nb2RhbDsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld1J1bk1vZGFsOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5Nb2RhbChX
ZWJQYWdlUHJveHkmKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdSdW5Nb2RhbCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5N
b2RhbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3UnVuTW9k
YWw6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXdSdW5Nb2RhbDptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKV07CiB9CiAKIGZsb2F0IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoZWFkZXJIZWlnaHQo
V2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYgd2ViRnJhbWVQcm94eSkKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGVhZGVySGVpZ2h0KQorICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGVhZGVySGVpZ2h0KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBy
ZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdIZWFkZXJI
ZWlnaHQ6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3SGVhZGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogZmxvYXQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmZvb3RlckhlaWdodChXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JikKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Rm9vdGVySGVpZ2h0KQorICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Rm9vdGVySGVpZ2h0KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBy
ZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdGb290ZXJI
ZWlnaHQ6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Rm9vdGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
ZHJhd0hlYWRlcihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6
RmxvYXRSZWN0JiYgcmVjdCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RHJhd0hlYWRlckluUmVjdEZvclBhZ2VXaXRoVGl0bGVVUkwpCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RHJhd0hlYWRlckluUmVjdEZvclBhZ2VXaXRoVGl0
bGVVUkwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0
ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
bV91aURlbGVnYXRlLm1fd2ViVmlldyBkcmF3SGVhZGVySW5SZWN0OnJlY3QgZm9yUGFnZVdpdGhU
aXRsZTpmcmFtZS50aXRsZSgpIFVSTDpmcmFtZS51cmwoKV07CisgICAgWyhpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCkgZHJhd0hlYWRlckluUmVjdDpyZWN0IGZvclBhZ2VXaXRoVGl0bGU6ZnJhbWUudGl0
bGUoKSBVUkw6ZnJhbWUudXJsKCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpk
cmF3Rm9vdGVyKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBXZWJDb3JlOjpG
bG9hdFJlY3QmJiByZWN0KQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEcmF3Rm9vdGVySW5SZWN0Rm9yUGFnZVdpdGhUaXRsZVVSTCkKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEcmF3Rm9vdGVySW5SZWN0Rm9yUGFnZVdpdGhUaXRs
ZVVSTCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IGRyYXdGb290ZXJJblJlY3Q6cmVjdCBmb3JQYWdlV2l0aFRp
dGxlOmZyYW1lLnRpdGxlKCkgVVJMOmZyYW1lLnVybCgpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSBkcmF3Rm9vdGVySW5SZWN0OnJlY3QgZm9yUGFnZVdpdGhUaXRsZTpmcmFtZS50aXRs
ZSgpIFVSTDpmcmFtZS51cmwoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnBh
Z2VEaWRTY3JvbGwoV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU2Nyb2xsKQorICAgIGlmICghbV91aURlbGVnYXRlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZFNjcm9sbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVs
ZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlld0RpZFNjcm9sbDptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZFNjcm9sbDptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmZvY3VzKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZU1ldGhvZHMuZm9jdXNXZWJWaWV3KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMu
Zm9jdXNXZWJWaWV3KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF9m
b2N1c1dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4pZGVsZWdhdGUgX2ZvY3VzV2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmll
dy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuZm9jdXMo
V2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9k
cy51bmZvY3VzV2ViVmlldykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLnVuZm9jdXNXZWJW
aWV3KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF91bmZvY3VzV2Vi
VmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfdW5mb2N1c1dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCldOwogfQogCiBzdGF0aWMgX1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb24gdG9X
S1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24g
cmVhc29uKQpAQCAtNjU3LDE0ICs3MjEsMTcgQEAgc3RhdGljIF9XS1BsdWdJblVuYXZhaWxhYmls
aXR5UmVhc29uIHRvVwogICAgIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6dW5hdmFpbGFi
bGVQbHVnaW5CdXR0b25DbGlja2VkKFdlYlBhZ2VQcm94eSYsIFdLUGx1Z2luVW5hdmFpbGFiaWxp
dHlSZWFzb24gcmVhc29uLCBBUEk6OkRpY3Rpb25hcnkmIHBsdWdJbkluZm8pCiB7Ci0gICAgaWYg
KCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VuYXZhaWxhYmxlUGx1Z0lu
QnV0dG9uQ2xpY2tlZCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdVbmF2YWls
YWJsZVBsdWdJbkJ1dHRvbkNsaWNrZWQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHVuYXZhaWxhYmxlUGx1Z0luQnV0
dG9uQ2xpY2tlZFdpdGhSZWFzb246dG9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKHJlYXNv
bikgcGx1Z0luSW5mbzp3cmFwcGVyKHBsdWdJbkluZm8pXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSB1bmF2YWlsYWJsZVBsdWdJbkJ1dHRvbkNsaWNrZWRXaXRoUmVhc29uOnRvV0tQbHVn
SW5VbmF2YWlsYWJpbGl0eVJlYXNvbihyZWFzb24pIHBsdWdJbkluZm86d3JhcHBlcihwbHVnSW5J
bmZvKV07CiB9CiAgICAgCiBzdGF0aWMgX1dLUmVzb3VyY2VMaW1pdCB0b1dLUmVzb3VyY2VMaW1p
dChXS1Jlc291cmNlTGltaXQgbGltaXQpCkBAIC02ODEsNjIgKzc0OCw3NyBAQCBzdGF0aWMgX1dL
UmVzb3VyY2VMaW1pdCB0b1dLUmVzb3VyY2VMaW1pCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OmRpZEV4Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQoV2Vi
UGFnZVByb3h5JiwgV0tSZXNvdXJjZUxpbWl0IGxpbWl0KQogewotICAgIGlmICghbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VM
aW1pdFdoaWxlSW5Gb3JlZ3JvdW5kKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZEV4Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQpCiAgICAg
ICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
W3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRX
aGlsZUluRm9yZWdyb3VuZDp0b1dLUmVzb3VyY2VMaW1pdChsaW1pdCldOworICAgIFtzdGF0aWNf
Y2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VM
aW1pdFdoaWxlSW5Gb3JlZ3JvdW5kOnRvV0tSZXNvdXJjZUxpbWl0KGxpbWl0KV07CiB9CiAKIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViUGFnZVBy
b3h5KiwgY29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiB7Ci0gICAgaWYgKCFtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5vdEhhbmRsZVdoZWVsRXZlbnQp
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTm90SGFuZGxlV2hlZWxFdmVu
dCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3Vp
RGVsZWdhdGUubV93ZWJWaWV3IGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQ6ZXZlbnQubmF0aXZlRXZl
bnQoKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkTm90SGFuZGxlV2hlZWxFdmVu
dDpldmVudC5uYXRpdmVFdmVudCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
c2V0SXNSZXNpemFibGUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBib29sIHJlc2l6YWJsZSkKIHsK
LSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2V0UmVzaXph
YmxlKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1NldFJlc2l6YWJsZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IHNldFJlc2l6YWJsZTpyZXNpemFibGVdOworICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIHNldFJlc2l6YWJsZTpyZXNpemFibGVdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1NldFdpbmRvd0ZyYW1lKQorICAgIGlmICghbV91aURlbGVnYXRl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1NldFdpbmRvd0ZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgc2V0V2luZG93RnJh
bWU6ZnJhbWVdOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHNldFdpbmRvd0ZyYW1lOmZy
YW1lXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6d2luZG93RnJhbWUoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0dldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICgh
bV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0V2luZG93
RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
LmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRl
IF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZ2V0V2luZG93RnJhbWVXaXRoQ29tcGxl
dGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6
Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6Z2V0V2luZG93RnJhbWVX
aXRoQ29tcGxldGlvbkhhbmRsZXI6KSldKENHUmVjdCBmcmFtZSkgeworICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9j
a1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hl
Y2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQo
KSwgQHNlbGVjdG9yKF93ZWJWaWV3OmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVy
OikpXShDR1JlY3QgZnJhbWUpIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5k
bGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2Vy
LT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTc0NiwyNyArODI4LDMzIEBAIHZvaWQg
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lKFcKIAogdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5JiwgY29uc3QgV2Vi
SGl0VGVzdFJlc3VsdERhdGEmIGRhdGEsIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+IG1v
ZGlmaWVycywgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewotICAgIGlmICghbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdNb3VzZURpZE1vdmVPdmVyRWxlbWVudFdpdGhGbGFn
c1VzZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld01vdXNlRGlkTW92
ZU92ZXJFbGVtZW50V2l0aEZsYWdzVXNlckluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gYXBpSGl0VGVzdFJlc3VsdCA9IEFQSTo6
SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGRhdGEpOwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRoRmxhZ3M6V2Vi
RXZlbnRGYWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykgdXNlckluZm86
dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3Jh
cHBlcigpKSA6IG5pbF07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUg
X3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbW91c2VEaWRNb3Zl
T3ZlckVsZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRoRmxhZ3M6V2Vi
RXZlbnRGYWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykgdXNlckluZm86
dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3Jh
cHBlcigpKSA6IG5pbF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnRvb2xiYXJz
QXJlVmlzaWJsZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdHZXRUb29sYmFyc0FyZVZpc2libGVXaXRoQ29tcGxldGlvbkhhbmRsZXIpCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsK
KworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0VG9v
bGJhcnNBcmVWaXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIodHJ1ZSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHRydWUpOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZ2V0VG9vbGJhcnNB
cmVWaXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBsZXRpb25I
YW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJW
aWV3OmdldFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQk9PTCB2
aXNpYmxlKSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZ2V0VG9vbGJhcnNBcmVWaXNp
YmxlV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3Omdl
dFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQk9PTCB2aXNpYmxl
KSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC03NzYsNTEgKzg2NCw2MyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xp
ZW50Ojp0b29sYmFyc0FyZVZpCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZENsaWNr
QXV0b0ZpbGxCdXR0b24oV2ViUGFnZVByb3h5JiwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewot
ICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDbGlja0F1
dG9GaWxsQnV0dG9uV2l0aFVzZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RpZENsaWNrQXV0b0ZpbGxCdXR0b25XaXRoVXNlckluZm8pCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7
CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBk
aWRDbGlja0F1dG9GaWxsQnV0dG9uV2l0aFVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8
aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIFso
aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZENsaWNrQXV0b0ZpbGxCdXR0b25XaXRoVXNlckluZm86
dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3Jh
cHBlcigpKSA6IG5pbF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3dQYWdl
KFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMuc2hvd1dlYlZpZXcpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMuc2hvd1dlYlZpZXcpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF9zaG93V2ViVmlldzptX3VpRGVs
ZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfc2hvd1dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQog
ICAgIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6c2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fk
c0ZvbGRlcihXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYgc3VnZ2VzdGVkRmlsZW5h
bWUsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VS
TCwgQVBJOjpEYXRhJiBkYXRhKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdTYXZlRGF0YVRvRmlsZVN1Z2dlc3RlZEZpbGVuYW1lTWltZVR5cGVPcmln
aW5hdGluZ1VSTCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTYXZlRGF0YVRv
RmlsZVN1Z2dlc3RlZEZpbGVuYW1lTWltZVR5cGVPcmlnaW5hdGluZ1VSTCkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcg
c2F2ZURhdGFUb0ZpbGU6d3JhcHBlcihkYXRhKSBzdWdnZXN0ZWRGaWxlbmFtZTpzdWdnZXN0ZWRG
aWxlbmFtZSBtaW1lVHlwZTptaW1lVHlwZSBvcmlnaW5hdGluZ1VSTDpvcmlnaW5hdGluZ1VSTF07
CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgc2F2ZURhdGFUb0ZpbGU6d3JhcHBlcihkYXRh
KSBzdWdnZXN0ZWRGaWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFtZSBtaW1lVHlwZTptaW1lVHlwZSBv
cmlnaW5hdGluZ1VSTDpvcmlnaW5hdGluZ1VSTF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYktp
dDo6V2ViUGFnZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIFdU
Rjo6RnVuY3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdE5vdGlmaWNhdGlv
blBlcm1pc3Npb25Gb3JTZWN1cml0eU9yaWdpbkRlY2lzaW9uSGFuZGxlcikKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdE5v
dGlmaWNhdGlvblBlcm1pc3Npb25Gb3JTZWN1cml0eU9yaWdpbkRlY2lzaW9uSGFuZGxlcikKICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAKLSAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQog
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogCiAgICAgYXV0byBjaGVj
a2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgp
LCBAc2VsZWN0b3IoX3dlYlZpZXc6cmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb25Gb3JTZWN1
cml0eU9yaWdpbjpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyByZXF1ZXN0Tm90
aWZpY2F0aW9uUGVybWlzc2lvbkZvclNlY3VyaXR5T3JpZ2luOndyYXBwZXIoc2VjdXJpdHlPcmln
aW4pIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9P
TCByZXN1bHQpIG11dGFibGUgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlcXVlc3RO
b3RpZmljYXRpb25QZXJtaXNzaW9uRm9yU2VjdXJpdHlPcmlnaW46d3JhcHBlcihzZWN1cml0eU9y
aWdpbikgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChC
T09MIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFu
ZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tl
ci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC04MzAsNDYgKzkzMCw1OCBAQCB2b2lk
IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGCiAKIFJlZjxBUEk6Okluc3BlY3Rv
ckNvbmZpZ3VyYXRpb24+IFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpjb25maWd1cmF0aW9uRm9yTG9j
YWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yUHJveHkmIGluc3BlY3RvcikK
IHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29uZmln
dXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAg
ICByZXR1cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKworICAgIGlm
ICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29uZmlndXJhdGlvbkZv
ckxvY2FsSW5zcGVjdG9yKQogICAgICAgICByZXR1cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0
aW9uOjpjcmVhdGUoKTsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
LmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBBUEk6Okluc3BlY3Rv
ckNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFQSTo6
SW5zcGVjdG9yQ29uZmlndXJhdGlvbiY+KFtbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbmZpZ3VyYXRpb25Gb3JMb2Nh
bEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildIF9hcGlPYmplY3RdKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uJj4oW1soaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIGNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3Rv
cildIF9hcGlPYmplY3RdKTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkQXR0
YWNoTG9jYWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yUHJveHkmIGluc3Bl
Y3RvcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGlkQXR0YWNoTG9jYWxJbnNwZWN0b3IpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rp
ZEF0dGFjaExvY2FsSW5zcGVjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkQXR0YWNoTG9jYWxJbnNwZWN0
b3I6d3JhcHBlcihpbnNwZWN0b3IpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRB
dHRhY2hMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOwogfQogCiB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBX
ZWJJbnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdXaWxsQ2xvc2VMb2NhbEluc3BlY3RvcikKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdXaWxsQ2xvc2VMb2NhbEluc3BlY3RvcikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWyhpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmll
dyB3aWxsQ2xvc2VMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOworICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93
ZWJWaWV3LmdldCgpLmdldCgpIHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVj
dG9yKV07CiB9CiAKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bk9wZW5QYW5lbChXZWJQ
YWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkqIHdlYkZyYW1lUHJveHksIEZyYW1lSW5mb0Rh
dGEmJiBmcmFtZUluZm8sIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyogb3BlblBhbmVsUGFyYW1l
dGVycywgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSogbGlzdGVuZXIpCiB7Ci0gICAg
aWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bk9wZW5QYW5lbFdp
dGhQYXJhbWV0ZXJzSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICgh
bV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyc0luaXRp
YXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg3Nyw3ICs5ODksNyBA
QCBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVuUGFuZWwoCiAKICAgICBhdXRvIGNo
ZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0
KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOmluaXRpYXRl
ZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7CiAKLSAgICBbZGVsZWdhdGUgd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOndyYXBwZXIo
Km9wZW5QYW5lbFBhcmFtZXRlcnMpIGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihmcmFtZSkgY29t
cGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKSwg
b3BlblBhbmVsUGFyYW1ldGVycyA9IG1ha2VSZWYoKm9wZW5QYW5lbFBhcmFtZXRlcnMpLCBsaXN0
ZW5lciA9IG1ha2VSZWZQdHIobGlzdGVuZXIpXSAoTlNBcnJheSAqVVJMcykgbXV0YWJsZSB7Cisg
ICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
cnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6d3JhcHBlcigqb3BlblBhbmVsUGFyYW1ldGVycykg
aW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKGZyYW1lKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxv
Y2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBvcGVuUGFuZWxQYXJhbWV0ZXJzID0g
bWFrZVJlZigqb3BlblBhbmVsUGFyYW1ldGVycyksIGxpc3RlbmVyID0gbWFrZVJlZlB0cihsaXN0
ZW5lcildIChOU0FycmF5ICpVUkxzKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNv
bXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTkwMSwxNyArMTAx
MywyMCBAQCBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVuUGFuZWwoCiAjaWYgRU5B
QkxFKERFVklDRV9PUklFTlRBVElPTikKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3Vs
ZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmIHdlYkZyYW1lUHJveHksIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1No
b3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1l
RGVjaXNpb25IYW5kbGVyKSB7Ci0gICAgICAgIHByZXNlbnRPcmllbnRhdGlvbkFjY2Vzc0FsZXJ0
KG1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mby5zZWN1cml0eU9yaWdpbi5ob3N0LCBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Nob3VsZEFsbG93RGV2aWNlT3JpZW50YXRp
b25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lRGVjaXNpb25IYW5kbGVyKSB7CisgICAg
ICAgIHByZXNlbnRPcmllbnRhdGlvbkFjY2Vzc0FsZXJ0KG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LCBmcmFtZUluZm8uc2VjdXJpdHlPcmlnaW4uaG9zdCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRp
b25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93
ZWJWaWV3OnNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0
ZWRCeUZyYW1lOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lOndyYXBwZXIo
QVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgZGVjaXNp
b25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIGdyYW50ZWQp
IG11dGFibGUgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHNob3VsZEFsbG93RGV2aWNl
T3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpG
cmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgZGVjaXNpb25IYW5k
bGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIGdyYW50ZWQpIG11dGFi
bGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVk
KCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0
aW9uSGFuZGxlcigpOwpAQCAtOTIyLDE3ICsxMDM3LDIzIEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OnNob3VsZEFsbG93RGUKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkQ2hh
bmdlRm9udEF0dHJpYnV0ZXMoY29uc3QgV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXMmIGZvbnRBdHRy
aWJ1dGVzKQogeworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKICAg
ICBpZiAoIW5lZWRzRm9udEF0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBwcml2YXRlVUlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pbV91aURlbGVn
YXRlLm1fZGVsZWdhdGUuZ2V0KCk7Ci0gICAgW3ByaXZhdGVVSURlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXM6Zm9udEF0dHJpYnV0
ZXMuY3JlYXRlRGljdGlvbmFyeSgpLmdldCgpXTsKKyAgICBhdXRvIHByaXZhdGVVSURlbGVnYXRl
ID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0
KCk7CisgICAgW3ByaXZhdGVVSURlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIGRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOmZvbnRBdHRyaWJ1dGVzLmNy
ZWF0ZURpY3Rpb25hcnkoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYg
cGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRp
YU9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIFVzZXJNZWRpYVBl
cm1pc3Npb25SZXF1ZXN0UHJveHkmIHJlcXVlc3QpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKLSAgICBhdXRvIGRlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpIHsKICAg
ICAgICAgcmVxdWVzdC5kb0RlZmF1bHRBY3Rpb24oKTsKICAgICAgICAgcmV0dXJuOwpAQCAtOTcz
LDIxICsxMDk0LDI0IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUYK
IAogICAgIC8vIEZJWE1FOiBQcm92aWRlIGEgc3BlY2lmaWMgZGVsZWdhdGUgZm9yIGRpc3BsYXkg
Y2FwdHVyZS4KICAgICBpZiAoIXJlcXVlc3QucmVxdWlyZXNEaXNwbGF5Q2FwdHVyZSgpICYmIHJl
c3BvbmRzVG9SZXF1ZXN0TWVkaWFDYXB0dXJlQXV0aG9yaXphdGlvbikgewotICAgICAgICBbZGVs
ZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyByZXF1ZXN0TWVkaWFDYXB0dXJl
QXV0aG9yaXphdGlvbjpkZXZpY2VzIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0
KCldOworICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkgcmVxdWVzdE1lZGlhQ2FwdHVyZUF1dGhvcml6YXRpb246ZGV2aWNlcyBkZWNp
c2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIFVSTCByZXF1ZXN0RnJhbWVVUkwgeyBmcmFtZS51cmwoKSB9OwogICAgIFVSTCBt
YWluRnJhbWVVUkwgeyBmcmFtZS5wYWdlKCktPm1haW5GcmFtZSgpLT51cmwoKSB9OwogCi0gICAg
W2RlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcmVxdWVzdFVzZXJNZWRp
YUF1dGhvcml6YXRpb25Gb3JEZXZpY2VzOmRldmljZXMgdXJsOnJlcXVlc3RGcmFtZVVSTCBtYWlu
RnJhbWVVUkw6bWFpbkZyYW1lVVJMIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0
KCldOworICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSByZXF1ZXN0VXNlck1lZGlhQXV0aG9yaXphdGlvbkZvckRldmljZXM6ZGV2aWNlcyB1
cmw6cmVxdWVzdEZyYW1lVVJMIG1haW5GcmFtZVVSTDptYWluRnJhbWVVUkwgZGVjaXNpb25IYW5k
bGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiAjZW5kaWYKIH0KIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6Y2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdlYlBhZ2VQcm94
eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJN
ZWRpYU9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIFVzZXJNZWRp
YVBlcm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0KQogewotICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKLSAgICBpZiAoIWRlbGVnYXRlIHx8ICFtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0lzTWVkaWFDYXB0dXJlQXV0aG9yaXpl
ZEZvckZyYW1lRGVjaXNpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3SXNNZWRpYUNhcHR1cmVBdXRob3JpemVkRm9yRnJhbWVEZWNpc2lvbkhh
bmRsZXIpIHsKICAgICAgICAgcmVxdWVzdC5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGZhbHNlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwMDQsNyArMTEyOCw3IEBAIHZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1lZGkKICAgICAgICAgICAgIHByb3RlY3RlZFJlcXVl
c3QtPnNldFVzZXJNZWRpYUFjY2Vzc0luZm8oaW5jbHVkZVNlbnNpdGl2ZURldGFpbHMpOwogICAg
ICAgICB9KTsKIAotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGluY2x1ZGVTZW5zaXRpdmVNZWRpYURldmlj
ZURldGFpbHM6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICAgICAgWyhpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCkgaW5jbHVkZVNlbnNpdGl2ZU1lZGlhRGV2aWNlRGV0YWlsczpkZWNpc2lvbkhhbmRs
ZXIuZ2V0KCldOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDIwLDMwICsxMTQ0LDM2
IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1lZGkKICAgICBVUkwgcmVx
dWVzdEZyYW1lVVJMIHsgZnJhbWUudXJsKCkgfTsKICAgICBVUkwgbWFpbkZyYW1lVVJMIHsgbWFp
bkZyYW1lLT51cmwoKSB9OwogCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdh
dGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBjaGVja1VzZXJNZWRpYVBlcm1pc3Np
b25Gb3JVUkw6cmVxdWVzdEZyYW1lVVJMIG1haW5GcmFtZVVSTDptYWluRnJhbWVVUkwgZnJhbWVJ
ZGVudGlmaWVyOmZyYW1lLmZyYW1lSUQoKS50b1VJbnQ2NCgpIGRlY2lzaW9uSGFuZGxlcjpkZWNp
c2lvbkhhbmRsZXIuZ2V0KCldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNoZWNrVXNl
ck1lZGlhUGVybWlzc2lvbkZvclVSTDpyZXF1ZXN0RnJhbWVVUkwgbWFpbkZyYW1lVVJMOm1haW5G
cmFtZVVSTCBmcmFtZUlkZW50aWZpZXI6ZnJhbWUuZnJhbWVJRCgpLnRvVUludDY0KCkgZGVjaXNp
b25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6Om1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlhUHJvZHVj
ZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKLSAgICBXS1dlYlZpZXcgKndlYlZpZXcgPSBt
X3VpRGVsZWdhdGUubV93ZWJWaWV3OworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIHdlYlZpZXcgPSBtX3VpRGVsZWdhdGUtPm1fd2ViVmlldzsKIAog
ICAgIFt3ZWJWaWV3IGRpZENoYW5nZVZhbHVlRm9yS2V5OkAibWVkaWFDYXB0dXJlU3RhdGUiXTsK
IAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKLSAg
ICBpZiAoIWRlbGVnYXRlIHx8ICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d01lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKQorICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3OndlYlZpZXcgbWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2U6dG9XS01lZGlh
Q2FwdHVyZVN0YXRlKHN0YXRlKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVs
ZWdhdGUgX3dlYlZpZXc6d2ViVmlldy5nZXQoKS5nZXQoKSBtZWRpYUNhcHR1cmVTdGF0ZURpZENo
YW5nZTp0b1dLTWVkaWFDYXB0dXJlU3RhdGUoc3RhdGUpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJQYWdlUHJv
eHkqLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIHVpbnQ2
NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgdG90YWxCeXRlc05lZWRlZCwgRnVuY3Rpb248dm9p
ZCAodW5zaWduZWQgbG9uZyBsb25nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlV2ViQXBwbGljYXRp
b25DYWNoZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5DdXJyZW50UXVvdGFUb3RhbEJ5dGVzTmVlZGVk
KSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcihjdXJyZW50UXVvdGEpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdEZWNpZGVXZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFGb3JTZWN1cml0eU9y
aWdpbkN1cnJlbnRRdW90YVRvdGFsQnl0ZXNOZWVkZWQpIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoY3VycmVudFF1b3RhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
IHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFF1b3RhKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMTA1Miw3ICsxMTgyLDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVh
Y2hlZEFwcGxpYwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVdlYkFw
cGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5T3JpZ2luOmN1cnJlbnRRdW90YTp0b3RhbEJ5
dGVzTmVlZGVkOmRlY2lzaW9uSGFuZGxlcjopKTsKICAgICBhdXRvIGFwaU9yaWdpbiA9IEFQSTo6
U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShzZWN1cml0eU9yaWdpbik7CiAgICAgCi0gICAgWyhpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2Vi
VmlldyBkZWNpZGVXZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFw
cGVyKGFwaU9yaWdpbi5nZXQoKSkgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSB0b3RhbEJ5dGVz
TmVlZGVkOnRvdGFsQnl0ZXNOZWVkZWQgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgeworICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93
ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3Vy
aXR5T3JpZ2luOndyYXBwZXIoYXBpT3JpZ2luLmdldCgpKSBjdXJyZW50UXVvdGE6Y3VycmVudFF1
b3RhIHRvdGFsQnl0ZXNOZWVkZWQ6dG90YWxCeXRlc05lZWRlZCBkZWNpc2lvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0odW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3Rh
KSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC0xMDYyLDE2NSArMTE5MiwyMDAgQEAgdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6cmVhY2hlZEFwcGxpYwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpwcmlu
dEZyYW1lKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIHdlYkZyYW1lUHJveHksIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOworCisgICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVn
YXRlKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKIAogICAgIGF1dG8gaGFu
ZGxlID0gQVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKHdlYkZyYW1lUHJveHkuZnJhbWVJRCgpKTsK
LSAgICBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdQcmludEZyYW1l
Q29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3UHJpbnRGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGF1dG8g
Y2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5n
ZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnByaW50RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7
Ci0gICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcHJpbnRGcmFtZTp3cmFwcGVyKGhhbmRsZSkgY29tcGxldGlv
bkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJsZSB7Cisg
ICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHByaW50RnJhbWU6d3JhcHBlcihoYW5kbGUp
IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUoY2hlY2tl
ciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11
dGFibGUgewogICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVl
bkNhbGxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXIt
PmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoKTsKICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlm
IChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1ByaW50RnJhbWUpCi0gICAg
ICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS5tX3dlYlZpZXcgcHJpbnRGcmFtZTp3cmFwcGVyKGhhbmRsZSldOworICAgIH0KKworICAg
IGlmIChtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdQcmludEZyYW1lKQor
ICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3Vp
RGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBwcmludEZyYW1lOndyYXBwZXIoaGFuZGxl
KV07CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6Y2xvc2UoV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAobV91aURlbGVnYXRlLm1fZGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdDbG9zZSkgewotICAgICAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdDbG9zZSkgeworICAgICAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlLmdldCgpOwogICAgICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3
Q2xvc2U6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Q2xvc2U6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCldOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENsb3NlKQorICAgIGlmICghbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2xvc2UpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAg
IGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3
RGlkQ2xvc2U6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgW2RlbGVnYXRlIHdlYlZpZXdE
aWRDbG9zZTptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQg
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShXZWJQYWdl
UHJveHkqKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKQogICAgICAgICByZXR1cm47CiAg
ICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAg
aWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5l
Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lOm1fdWlEZWxlZ2F0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6ZGlkRW50ZXJGdWxsc2NyZWVuKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEVudGVyRnVsbHNjcmVlbikKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRFbnRlckZ1bGxzY3JlZW4pCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3RGlkRW50ZXJGdWxsc2NyZWVuOm1fdWlE
ZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3RGlkRW50ZXJGdWxsc2NyZWVuOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkRXhpdEZ1bGxz
Y3JlZW4oV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW4pCisgICAgaWYgKCFtX3VpRGVsZWdhdGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW46bV91aURlbGVnYXRlLm1fd2ViVmlld107
CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdEaWRFeGl0
RnVsbHNjcmVlbjptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAgICAg
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpZiBIQVZFKEFQUF9MSU5LUykKIGJvb2wgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3VsZEluY2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVsZW1lbnQo
X1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKmVsZW1lbnRJbmZvKQogewotICAgIGlmICghbV91aURl
bGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91bGRJbmNsdWRlQXBwTGlua0FjdGlv
bnNGb3JFbGVtZW50KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2hv
dWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudCkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJW
aWV3IHNob3VsZEluY2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVsZW1lbnQ6ZWxlbWVudEluZm9dOwor
ICAgIHJldHVybiBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBzaG91bGRJbmNsdWRlQXBwTGlua0Fj
dGlvbnNGb3JFbGVtZW50OmVsZW1lbnRJbmZvXTsKIH0KICNlbmRpZgogCiBSZXRhaW5QdHI8TlNB
cnJheT4gVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmFjdGlvbnNGb3JFbGVtZW50KF9XS0FjdGl2YXRl
ZEVsZW1lbnRJbmZvICplbGVtZW50SW5mbywgUmV0YWluUHRyPE5TQXJyYXk+IGRlZmF1bHRBY3Rp
b25zKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdB
Y3Rpb25zRm9yRWxlbWVudERlZmF1bHRBY3Rpb25zKQorICAgIGlmICghbV91aURlbGVnYXRlKQor
ICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0FjdGlvbnNGb3JFbGVtZW50RGVmYXVsdEFjdGlvbnMp
CiAgICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9uczsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybiBkZWZhdWx0QWN0aW9uczsKIAotICAgIHJldHVybiBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGFjdGlvbnNGb3JF
bGVtZW50OmVsZW1lbnRJbmZvIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zLmdldCgpXTsK
KyAgICByZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgYWN0aW9uc0ZvckVsZW1lbnQ6ZWxl
bWVudEluZm8gZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFjdGlvbnMuZ2V0KCldOwogfQogCiB2b2lk
IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWROb3RIYW5kbGVUYXBBc0NsaWNrKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkTm90SGFuZGxlVGFwQXNDbGlja0F0UG9pbnQpCisgICAgaWYgKCFt
X3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTm90SGFuZGxlVGFwQXNDbGlja0F0UG9pbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
LmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3Vp
RGVsZWdhdGUubV93ZWJWaWV3IGRpZE5vdEhhbmRsZVRhcEFzQ2xpY2tBdFBvaW50OnBvaW50XTsK
KyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dl
YlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkTm90SGFuZGxlVGFw
QXNDbGlja0F0UG9pbnQ6cG9pbnRdOwogfQogCiBVSVZpZXdDb250cm9sbGVyICpVSURlbGVnYXRl
OjpVSUNsaWVudDo6cHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKCkKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy5wcmVzZW50aW5nVmlld0NvbnRyb2xsZXJGb3JXZWJW
aWV3KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy5wcmVzZW50aW5nVmlld0Nv
bnRyb2xsZXJGb3JXZWJWaWV3KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfcHJlc2VudGluZ1ZpZXdDb250cm9sbGVy
Rm9yV2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICByZXR1cm4gW3N0YXRpY19j
YXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF9wcmVzZW50aW5nVmlld0Nv
bnRyb2xsZXJGb3JXZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsK
IH0KIAogI2VuZGlmCiAKIE5TRGljdGlvbmFyeSAqVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRhdGFE
ZXRlY3Rpb25Db250ZXh0KCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0
aG9kcy5kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXcpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLmRhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldykKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0
ZSkgX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3
XTsKKyAgICByZXR1cm4gW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVs
ZWdhdGUpIF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykKIAogdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFBvaW50ZXJMb2NrKFdlYlBhZ2VQcm94eSog
cGFnZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
UmVxdWVzdFBvaW50ZXJMb2NrICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RpZFJlcXVlc3RQb2ludGVyTG9ja0NvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91
aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RQb2ludGVyTG9jayAmJiAhbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUmVxdWVzdFBvaW50ZXJMb2NrQ29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RQ
b2ludGVyTG9jaykgewotICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2s6bV91aURlbGVnYXRlLm1f
d2ViVmlld107CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d1JlcXVlc3RQb2ludGVyTG9jaykgeworICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2s6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRl
KGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXdEaWRSZXF1ZXN0UG9pbnRlckxvY2s6
Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3RGlkUmVxdWVzdFBvaW50ZXJMb2NrOm1fdWlEZWxl
Z2F0ZS5tX3dlYlZpZXcgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0g
V1RGTW92ZShjaGVja2VyKSwgcGFnZSA9IG1ha2VSZWZQdHIocGFnZSldIChCT09MIGFsbG93KSB7
CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93
ZWJWaWV3RGlkUmVxdWVzdFBvaW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUo
Y2hlY2tlciksIHBhZ2UgPSBtYWtlUmVmUHRyKHBhZ2UpXSAoQk9PTCBhbGxvdykgewogICAgICAg
ICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigp
OwpAQCAtMTIzNCw0MSArMTM5OSw1MCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZXF1
ZXN0UG9pbnRlCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZExvc2VQb2ludGVyTG9j
ayhXZWJQYWdlUHJveHkqKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEaWRMb3NlUG9pbnRlckxvY2spCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGlkTG9zZVBvaW50ZXJMb2NrKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXdEaWRMb3NlUG9pbnRlckxvY2s6bV91aURlbGVnYXRl
Lm1fd2ViVmlld107CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4o
ZGVsZWdhdGUpIF93ZWJWaWV3RGlkTG9zZVBvaW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpXTsKIH0KIAogI2VuZGlmCiAgICAgCiB2b2lkIFVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpkaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZygpCiB7Ci0gICAgaWYgKCFtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFNob3dTYWZlQnJvd3NpbmdXYXJuaW5n
KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFNob3dTYWZlQnJvd3NpbmdX
YXJuaW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+
bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dl
YlZpZXdEaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZzptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsK
KyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dl
YlZpZXdEaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5n
ZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNvbmZpcm1QREZP
cGVuaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpVUkwmIGZpbGVVUkwsIEZyYW1l
SW5mb0RhdGEmJiBmcmFtZUluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld1Nob3VsZEFsbG93UERGQXRVUkxUb09wZW5Gcm9tRnJhbWVDb21wbGV0aW9uSGFu
ZGxlcikKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKHRydWUpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdTaG91bGRBbGxvd1BERkF0VVJMVG9PcGVuRnJvbUZyYW1lQ29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKIAotICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
CiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKIAogICAgIGF1dG8gY2hl
Y2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQo
KSwgQHNlbGVjdG9yKF93ZWJWaWV3OnNob3VsZEFsbG93UERGQXRVUkw6dG9PcGVuRnJvbUZyYW1l
OmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRl
UHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHNob3Vs
ZEFsbG93UERGQXRVUkw6ZmlsZVVSTCB0b09wZW5Gcm9tRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1l
SW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUg
eworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBf
d2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBzaG91bGRBbGxvd1BE
RkF0VVJMOmZpbGVVUkwgdG9PcGVuRnJvbUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNy
ZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIo
KTsKQEAgLTEyOTQsMTkgKzE0NjgsMjIgQEAgc3RhdGljIFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxS
ZXN1bHQgd2ViQQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5XZWJBdXRoZW50aWNh
dGlvblBhbmVsKFdlYlBhZ2VQcm94eSYgcGFnZSwgQVBJOjpXZWJBdXRoZW50aWNhdGlvblBhbmVs
JiBwYW5lbCwgV2ViRnJhbWVQcm94eSYsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1J1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlv
bkhhbmRsZXIpIHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlKTsK
KworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuV2Vi
QXV0aGVudGljYXRpb25QYW5lbEluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgewog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpV
bmF2YWlsYWJsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZh
aWxhYmxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENv
bXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVj
dG9yKF93ZWJWaWV3OnJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6aW5pdGlhdGVkQnlGcmFtZTpj
b21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bldlYkF1dGhlbnRpY2F0aW9u
UGFuZWw6d3JhcHBlcihwYW5lbCkgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJ
bmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChfV0tXZWJBdXRoZW50aWNhdGlvblBh
bmVsUmVzdWx0IHJlc3VsdCkgbXV0YWJsZSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
cnVuV2ViQXV0aGVudGljYXRpb25QYW5lbDp3cmFwcGVyKHBhbmVsKSBpbml0aWF0ZWRCeUZyYW1l
OndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdl
KSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKF9X
S1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAg
aWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsK
QEAgLTEzMTgsMzEgKzE0OTUsNDIgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuV2Vi
QXV0aGVudAogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoYXNWaWRlb0luUGljdHVyZUlu
UGljdHVyZURpZENoYW5nZShXZWJQYWdlUHJveHkqLCBib29sIGhhc1ZpZGVvSW5QaWN0dXJlSW5Q
aWN0dXJlKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdIYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZSkKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdIYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENo
YW5nZTpoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93
ZWJWaWV3LmdldCgpLmdldCgpIGhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlkQ2hhbmdlOmhh
c1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6aW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBuZXdTaXplKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdJbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkKQorICAgIGlmICghbV91aURlbGVn
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0ltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IGltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQ6bmV3U2l6ZV07Cisg
ICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGltYWdlT3JNZWRpYURvY3Vt
ZW50U2l6ZUNoYW5nZWQ6bmV3U2l6ZV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmRlY2lkZVBvbGljeUZvclNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViS2l0
OjpXZWJQYWdlUHJveHkmIHBhZ2UsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRv
IGRlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkgeworICAgICAgICBwYWdlLnJlcXVl
c3RTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25CeURlZmF1bHRBY3Rpb24ob3JpZ2luLnNlY3Vy
aXR5T3JpZ2luKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gZGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAg
ICAgICAgIHBhZ2UucmVxdWVzdFNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvbkJ5RGVmYXVsdEFj
dGlvbihvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikp
OwogICAgICAgICByZXR1cm47CkBAIC0xMzU0LDcgKzE1NDIsNyBAQCB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGCiAgICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLCBAc2VsZWN0b3IoX3dl
YlZpZXc6cmVxdWVzdFNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvbkZvck9yaWdpbjpkZWNpc2lv
bkhhbmRsZXI6KSk7Ci0gICAgW2RlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXcgcmVxdWVzdFNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvbkZvck9yaWdpbjp3cmFwcGVyKG9y
aWdpbikgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBz
dGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCB7IH0pLCBjaGVja2VyID0gV1RGTW92ZShj
aGVja2VyKV0gKEJPT0wgZ3JhbnRlZCkgbXV0YWJsZSB7CisgICAgW2RlbGVnYXRlIF93ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlcXVlc3RTcGVlY2hSZWNvZ25p
dGlvblBlcm1pc3Npb25Gb3JPcmlnaW46d3JhcHBlcihvcmlnaW4pIGRlY2lzaW9uSGFuZGxlcjpt
YWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShjb21wbGV0aW9u
SGFuZGxlciwgeyB9KSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIGdyYW50ZWQp
IG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVu
Q2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxD
b21wbGV0aW9uSGFuZGxlcigpOwo=
</data>
<flag name="commit-queue"
          id="434848"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417189</attachid>
            <date>2021-01-07 10:53:05 -0800</date>
            <delta_ts>2021-01-07 11:32:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220394-20210107105304.patch</filename>
            <type>text/plain</type>
            <size>155313</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzEyNDIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAyMS0wMS0wNyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBzbWFydCBw
b2ludGVycyBpbiBVSURlbGVnYXRlIGFuZCBOYXZpZ2F0aW9uU3RhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM5NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzI0OTYzNzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVUlEZWxlZ2F0ZSBhbmQgTmF2aWdhdGlvblN0YXRlIGFyZSBvd25lZCBieSBX
S1dlYlZpZXcsIGJ1dCB0aGUgY2xpZW50cyBhcmUgb3duZWQgYnkgV2ViUGFnZVByb3h5LAorICAg
ICAgICB3aGljaCBpcyBpbmRlcGVuZGVudGx5IHJlZmVyZW5jZSBjb3VudGVkIGFuZCBjYW4gaGF2
ZSBhIGRpZmZlcmVudCBsaWZldGltZS4KKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIHJhdyBD
KysgcmVmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28sIHNvIHVzZSBXZWFrUHRyIGluc3RlYWQuCisg
ICAgICAgIEFsc28sIHVzZSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+IGluc3RlYWQgb2YgYSByYXcg
QysrIFdLV2ViVmlldyoKKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3Rh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25TdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6fk5hdmlnYXRpb25TdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKToK
KyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6d2lsbFJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlv
bkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9u
U3RhdGU6OmRpZFJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAgICAgICAg
KFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpkaWRGaXJzdFBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpOYXZpZ2F0aW9uQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3ZWJH
TExvYWRQb2xpY3kgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5h
dmlnYXRpb25DbGllbnQ6OnJlc29sdmVXZWJHTExvYWRQb2xpY3kgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENoYW5nZUJhY2tG
b3J3YXJkTGlzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6d2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50Ojpjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25SZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6ZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDYW5jZWxD
bGllbnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbldpdGhFcnJvcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21taXROYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21taXRM
b2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmRpZEZpbmlzaERvY3VtZW50TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNoTmF2aWdhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNo
TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkaWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvcik6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbExvYWRXaXRoRXJyb3JG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnNo
b3VsZEJ5cGFzc0NvbnRlbnRNb2RlU2FmZWd1YXJkcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpzaG91bGRBbGxvd0xlZ2FjeVRMUyk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkTmVnb3RpYXRlTW9kZXJuVExTKToKKyAg
ICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpwcm9jZXNz
RGlkVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50Ojpwcm9jZXNzRGlkQmVjb21lUmVzcG9uc2l2ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZEJlY29tZVVucmVz
cG9uc2l2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6d2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpuYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21lRG93bmxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Om5h
dmlnYXRpb25SZXNwb25zZURpZEJlY29tZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpjb250ZXh0TWVudURpZENyZWF0ZURvd25s
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50
OjpkaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hMb2Fk
Rm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0
aW9uTG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVu
dDo6SGlzdG9yeUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlz
dG9yeUNsaWVudDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1DbGllbnRSZWRp
cmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6
ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpIaXN0b3J5Q2xpZW50OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJ
RGVsZWdhdGUubW06CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OkNvbnRleHRNZW51Q2xp
ZW50OjpDb250ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OkNv
bnRleHRNZW51Q2xpZW50OjptZW51RnJvbVByb3Bvc2VkTWVudSk6CisgICAgICAgIChXZWJLaXQ6
OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpVSUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChXZWJL
aXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RTdG9yYWdlQWNjZXNzQ29uZmly
bSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmRpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFy
YW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjYW5SdW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRl
OjpVSUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6CisgICAgICAg
IChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp0YWtlRm9jdXMpOgorICAgICAgICAoV2Vi
S2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6aGFuZGxlQXV0b3BsYXlFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjYW5SdW5Nb2RhbCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5Nb2RhbCk6CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoZWFkZXJIZWlnaHQpOgorICAgICAgICAoV2Vi
S2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Zm9vdGVySGVpZ2h0KToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRyYXdIZWFkZXIpOgorICAgICAgICAoV2ViS2l0OjpV
SURlbGVnYXRlOjpVSUNsaWVudDo6ZHJhd0Zvb3Rlcik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpwYWdlRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OnVuZm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6
dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmRpZEV4Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZv
cmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90
SGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpzZXRJc1Jlc2l6YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpzZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
Ojp3aW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpt
b3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJ
Q2xpZW50Ojp0b29sYmFyc0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRl
OjpVSUNsaWVudDo6ZGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbik6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpzaG93UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3Rvcik6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVuUGFuZWwpOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2hvdWxkQWxsb3dEZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpkaWRDaGFuZ2VGb250QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjaGVja1VzZXJNZWRp
YVBlcm1pc3Npb25Gb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNs
aWVudDo6bWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwcmludEZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNsb3NlKToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRFbnRlckZ1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2hvdWxkSW5jbHVk
ZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6
OlVJQ2xpZW50OjphY3Rpb25zRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpkaWROb3RIYW5kbGVUYXBBc0NsaWNrKToKKyAgICAgICAgKFdlYktpdDo6
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcik6CisgICAgICAg
IChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkYXRhRGV0ZWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZXF1ZXN0UG9pbnRlckxvY2sp
OgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTG9zZVBvaW50ZXJM
b2NrKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZFNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmNvbmZpcm1QREZPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OnJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVn
YXRlOjpVSUNsaWVudDo6aGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6aW1hZ2VPck1lZGlhRG9jdW1lbnRT
aXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNp
ZGVQb2xpY3lGb3JTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25SZXF1ZXN0KToKKwogMjAyMS0w
MS0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGUuY29tPgogCiAgICAgICAgIEFTU0VSVElP
TiBGQUlMRUQ6ICFtX21lc3NhZ2VSZWNlaXZlck1hcENvdW50IHVuZGVyIFdlYktpdDo6U3BlZWNo
UmVjb2duaXRpb25TZXJ2ZXI6On5TcGVlY2hSZWNvZ25pdGlvblNlcnZlcigpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkocmV2aXNp
b24gMjcxMTU3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgPHd0Zi9SdW5M
b29wLmg+CiAjaW1wb3J0IDx3dGYvVW5pcXVlUmVmLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQ
dHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CiAKIEBjbGFzcyBXS1dlYlZpZXc7CiBAcHJv
dG9jb2wgV0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlOwpAQCAtNTMsNyArNTQsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogc3RydWN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmU7CiAKLWNsYXNzIE5h
dmlnYXRpb25TdGF0ZSBmaW5hbCA6IHByaXZhdGUgUGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXIgewor
Y2xhc3MgTmF2aWdhdGlvblN0YXRlIGZpbmFsIDogcHJpdmF0ZSBQYWdlTG9hZFN0YXRlOjpPYnNl
cnZlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5hdmlnYXRpb25TdGF0ZT4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxpY2l0IE5hdmlnYXRpb25TdGF0
ZShXS1dlYlZpZXcgKik7CkBAIC0xNTAsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKFdlYlBhZ2VQcm94eSYsIFNPQXV0
aG9yaXphdGlvbkxvYWRQb2xpY3ksIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk+JiYpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAg
ICAgICAgTmF2aWdhdGlvblN0YXRlJiBtX25hdmlnYXRpb25TdGF0ZTsKKyAgICAgICAgV2Vha1B0
cjxOYXZpZ2F0aW9uU3RhdGU+IG1fbmF2aWdhdGlvblN0YXRlOwogICAgIH07CiAgICAgCiAgICAg
Y2xhc3MgSGlzdG9yeUNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6Okhpc3RvcnlDbGllbnQgewpA
QCAtMTY0LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpT
dHJpbmcmKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV2Vi
UGFnZVByb3h5JiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJy
aWRlOwogICAgICAgICAKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlJiBtX25hdmlnYXRpb25TdGF0
ZTsKKyAgICAgICAgV2Vha1B0cjxOYXZpZ2F0aW9uU3RhdGU+IG1fbmF2aWdhdGlvblN0YXRlOwog
ICAgIH07CiAKICAgICAvLyBQYWdlTG9hZFN0YXRlOjpPYnNlcnZlcgpAQCAtMTk2LDcgKzE5Nyw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWxlYXNlTmV0d29ya0FjdGl2aXR5QWZ0ZXJMb2FkQ29t
cGxldGlvbigpIHsgcmVsZWFzZU5ldHdvcmtBY3Rpdml0eShOZXR3b3JrQWN0aXZpdHlSZWxlYXNl
UmVhc29uOjpMb2FkQ29tcGxldGVkKTsgfQogI2VuZGlmCiAKLSAgICBXS1dlYlZpZXcgKm1fd2Vi
VmlldzsKKyAgICBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+IG1fd2ViVmlldzsKICAgICBXZWFrT2Jq
Q1B0cjxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGU+ID4gbV9uYXZpZ2F0aW9uRGVsZWdhdGU7CiAK
ICAgICBzdHJ1Y3QgewpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdh
dGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24gMjcxMTU3KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDks
MTkgKzEwOSwxOSBAQCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25TdGF0ZShXS1dlYlZpCiAg
ICAgLCBtX3JlbGVhc2VOZXR3b3JrQWN0aXZpdHlUaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRo
aXMsICZOYXZpZ2F0aW9uU3RhdGU6OnJlbGVhc2VOZXR3b3JrQWN0aXZpdHlBZnRlckxvYWRDb21w
bGV0aW9uKQogI2VuZGlmCiB7Ci0gICAgQVNTRVJUKG1fd2ViVmlldy0+X3BhZ2UpOwotICAgIEFT
U0VSVCghbmF2aWdhdGlvblN0YXRlcygpLmNvbnRhaW5zKG1fd2ViVmlldy0+X3BhZ2UuZ2V0KCkp
KTsKKyAgICBBU1NFUlQobV93ZWJWaWV3LmdldCgpLT5fcGFnZSk7CisgICAgQVNTRVJUKCFuYXZp
Z2F0aW9uU3RhdGVzKCkuY29udGFpbnMobV93ZWJWaWV3LmdldCgpLT5fcGFnZS5nZXQoKSkpOwog
Ci0gICAgbmF2aWdhdGlvblN0YXRlcygpLmFkZChtX3dlYlZpZXctPl9wYWdlLmdldCgpLCB0aGlz
KTsKLSAgICBtX3dlYlZpZXctPl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnRo
aXMpOworICAgIG5hdmlnYXRpb25TdGF0ZXMoKS5hZGQobV93ZWJWaWV3LmdldCgpLT5fcGFnZS5n
ZXQoKSwgdGhpcyk7CisgICAgbV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+cGFnZUxvYWRTdGF0ZSgp
LmFkZE9ic2VydmVyKCp0aGlzKTsKIH0KIAogTmF2aWdhdGlvblN0YXRlOjp+TmF2aWdhdGlvblN0
YXRlKCkKIHsKLSAgICBBU1NFUlQobmF2aWdhdGlvblN0YXRlcygpLmdldChtX3dlYlZpZXctPl9w
YWdlLmdldCgpKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQobmF2aWdhdGlvblN0YXRlcygpLmdldCht
X3dlYlZpZXcuZ2V0KCktPl9wYWdlLmdldCgpKSA9PSB0aGlzKTsKIAotICAgIG5hdmlnYXRpb25T
dGF0ZXMoKS5yZW1vdmUobV93ZWJWaWV3LT5fcGFnZS5nZXQoKSk7Ci0gICAgbV93ZWJWaWV3LT5f
cGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBuYXZpZ2F0
aW9uU3RhdGVzKCkucmVtb3ZlKG1fd2ViVmlldy5nZXQoKS0+X3BhZ2UuZ2V0KCkpOworICAgIG1f
d2ViVmlldy5nZXQoKS0+X3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS5yZW1vdmVPYnNlcnZlcigqdGhp
cyk7CiB9CiAKIE5hdmlnYXRpb25TdGF0ZSYgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZShX
ZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSkKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIE5hdmln
YXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdlc3R1cmVECiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZEJlZ2luTmF2
aWdhdGlvbkdlc3R1cmU6bV93ZWJWaWV3XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdEaWRCZWdp
bk5hdmlnYXRpb25HZXN0dXJlOm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgTmF2
aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdhdGUs
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBO
YXZpZ2F0aW9uU3RhdGU6Om5hdmlnYXRpb25HZXN0dXJlVwogICAgIGlmICghbmF2aWdhdGlvbkRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdXaWxsRW5k
TmF2aWdhdGlvbkdlc3R1cmU6bV93ZWJWaWV3IHdpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2FyZExp
c3RJdGVtOndpbGxOYXZpZ2F0ZSA/IHdyYXBwZXIoaXRlbSkgOiBuaWxdOworICAgIFtzdGF0aWNf
Y2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRl
KSBfd2ViVmlld1dpbGxFbmROYXZpZ2F0aW9uR2VzdHVyZTptX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
d2l0aE5hdmlnYXRpb25Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06d2lsbE5hdmlnYXRlID8gd3JhcHBl
cihpdGVtKSA6IG5pbF07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2Vz
dHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRl
bSkKQEAgLTI2Myw3ICsyNjMsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdl
c3R1cmVECiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdh
dGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZEVuZE5hdmlnYXRpb25HZXN0dXJlOm1fd2ViVmlldyB3
aXRoTmF2aWdhdGlvblRvQmFja0ZvcndhcmRMaXN0SXRlbTp3aWxsTmF2aWdhdGUgPyB3cmFwcGVy
KGl0ZW0pIDogbmlsXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRl
UHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdEaWRFbmROYXZpZ2F0aW9uR2Vz
dHVyZTptX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgd2l0aE5hdmlnYXRpb25Ub0JhY2tGb3J3YXJkTGlz
dEl0ZW06d2lsbE5hdmlnYXRlID8gd3JhcHBlcihpdGVtKSA6IG5pbF07CiB9CiAKIHZvaWQgTmF2
aWdhdGlvblN0YXRlOjp3aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0mIGl0ZW0pCkBAIC0yNzUsNyArMjc1LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6
OndpbGxSZWNvcmROYXZpZ2F0aQogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV93ZWJWaWV3IHdpbGxTbmFwc2hv
dEJhY2tGb3J3YXJkTGlzdEl0ZW06d3JhcHBlcihpdGVtKV07CisgICAgW3N0YXRpY19jYXN0PGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJW
aWV3Om1fd2ViVmlldy5nZXQoKS5nZXQoKSB3aWxsU25hcHNob3RCYWNrRm9yd2FyZExpc3RJdGVt
OndyYXBwZXIoaXRlbSldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQoKQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZVMKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlkUmVtb3ZlTmF2
aWdhdGlvbkdlc3R1cmVTbmFwc2hvdDptX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmll
d0RpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3Q6bV93ZWJWaWV3LmdldCgpLmdldCgp
XTsKIH0KIAogI2lmIFVTRShRVUlDS19MT09LKQpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgTmF2
aWdhdGlvblN0YXRlOjpkaWRSZXF1ZXN0UGFzc3dvcmQKICAgICBpZiAoIW5hdmlnYXRpb25EZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlkUmVxdWVz
dFBhc3N3b3JkRm9yUXVpY2tMb29rRG9jdW1lbnQ6bV93ZWJWaWV3XTsKKyAgICBbc3RhdGljX2Nh
c3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkg
X3dlYlZpZXdEaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudDptX3dlYlZpZXcu
Z2V0KCkuZ2V0KCldOwogfQogI2VuZGlmCiAKQEAgLTMxMywxMSArMzEzLDExIEBAIHZvaWQgTmF2
aWdhdGlvblN0YXRlOjpkaWRGaXJzdFBhaW50KCkKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3Om1fd2ViVmlldyBy
ZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZTpfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQ
YWludF07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+
PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3Om1fd2ViVmlldy5nZXQoKS5nZXQoKSByZW5k
ZXJpbmdQcm9ncmVzc0RpZENoYW5nZTpfV0tSZW5kZXJpbmdQcm9ncmVzc0V2ZW50Rmlyc3RQYWlu
dF07CiB9CiAKIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6TmF2aWdhdGlvbkNs
aWVudChOYXZpZ2F0aW9uU3RhdGUmIG5hdmlnYXRpb25TdGF0ZSkKLSAgICA6IG1fbmF2aWdhdGlv
blN0YXRlKG5hdmlnYXRpb25TdGF0ZSkKKyAgICA6IG1fbmF2aWdhdGlvblN0YXRlKG1ha2VXZWFr
UHRyKG5hdmlnYXRpb25TdGF0ZSkpCiB7CiB9CiAKQEAgLTM0MywxNCArMzQzLDE0IEBAIGlubGlu
ZSBXZWJDb3JlOjpXZWJHTExvYWRQb2xpY3kgdG9XZWJDb3IKIAogdm9pZCBOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OndlYkdMTG9hZFBvbGljeShXZWJQYWdlUHJveHkmLCBjb25z
dCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpXZWJHTExvYWRQb2xp
Y3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJHTExvYWRQb2xpY3lG
b3JVUkwpIHsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1dlYkdMTG9hZFBvbGljeUZvclVSTCkgewogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXZWJHTExvYWRQb2xpY3k6OldlYkdMQWxsb3dDcmVhdGlvbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlv
bkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
OwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0
ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzp3ZWJHTExvYWRQ
b2xpY3lGb3JVUkw6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlldyB3ZWJHTExvYWRQb2xpY3lGb3JVUkw6KE5TVVJMICopdXJsIGRlY2lzaW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShfV0tXZWJHTExvYWRQb2xp
Y3kgcG9saWN5KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIHdlYkdMTG9hZFBvbGljeUZvclVSTDooTlNVUkwgKil1cmwgZGVjaXNp
b25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1dlYkdMTG9hZFBv
bGljeSBwb2xpY3kpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhh
bmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNr
ZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzYwLDE0ICszNjAsMTQgQEAgdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogCiB2b2lkIE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cmVzb2x2ZVdlYkdMTG9hZFBvbGljeShXZWJQYWdlUHJv
eHkmLCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3JlOjpXZWJH
TExvYWRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXNvbHZl
V2ViR0xMb2FkUG9saWN5Rm9yVVJMKSB7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9u
YXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXNvbHZlV2ViR0xMb2FkUG9saWN5Rm9y
VVJMKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkdMTG9hZFBvbGljeTo6V2ViR0xB
bGxvd0NyZWF0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRp
b25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBz
ZWxlY3Rvcihfd2ViVmlldzpyZXNvbHZlV2ViR0xMb2FkUG9saWN5Rm9yVVJMOmRlY2lzaW9uSGFu
ZGxlcjopKTsKLSAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRp
b25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgcmVzb2x2ZVdl
YkdMTG9hZFBvbGljeUZvclVSTDooTlNVUkwgKil1cmwgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9j
a1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hl
Y2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1dlYkdMTG9hZFBvbGljeSBwb2xpY3kpIG11dGFi
bGUgeworICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRl
bGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
cmVzb2x2ZVdlYkdMTG9hZFBvbGljeUZvclVSTDooTlNVUkwgKil1cmwgZGVjaXNpb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1dlYkdMTG9hZFBvbGljeSBwb2xp
Y3kpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNC
ZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENh
bGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzc3LDEwICszNzcsMTAgQEAgdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogCiBib29sIE5hdmlnYXRpb25TdGF0ZTo6TmF2
aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQcm94eSYsIFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGFkZGVkLCBjb25zdCBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0+PiYgcmVtb3ZlZCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFja0ZvcndhcmRMaXN0SXRlbUFkZGVk
UmVtb3ZlZCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0JhY2tGb3J3YXJkTGlzdEl0ZW1BZGRlZFJlbW92ZWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMzkwLDIxICszOTAsMjEgQEAgYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OgogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIocmVtb3ZlZEl0ZW0uZ2V0KCkpOwogICAg
ICAgICB9KTsKICAgICB9Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPilu
YXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGJh
Y2tGb3J3YXJkTGlzdEl0ZW1BZGRlZDp3cmFwcGVyKGFkZGVkKSByZW1vdmVkOnJlbW92ZWRJdGVt
cy5nZXQoKV07CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0
aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5n
ZXQoKSBiYWNrRm9yd2FyZExpc3RJdGVtQWRkZWQ6d3JhcHBlcihhZGRlZCkgcmVtb3ZlZDpyZW1v
dmVkSXRlbXMuZ2V0KCldOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAKIGJvb2wgTmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0
ZW0oV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSwgYm9vbCBpbkJh
Y2tGb3J3YXJkQ2FjaGUpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUluQmFj
a0ZvcndhcmRDYWNoZSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUluQmFja0Zv
cndhcmRDYWNoZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3
IHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbTp3cmFwcGVyKGl0ZW0pIGluUGFnZUNhY2hlOmlu
QmFja0ZvcndhcmRDYWNoZV07CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dy5nZXQoKS5nZXQoKSB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06d3JhcHBlcihpdGVtKSBp
blBhZ2VDYWNoZTppbkJhY2tGb3J3YXJkQ2FjaGVdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBA
IC00NTksMTEgKzQ1OSwxMSBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6CiAgICAgaWYgKGF1dG8qIHBvbGljaWVzID0gd2ViUGFnZVByb3h5LmNvbmZpZ3VyYXRpb24o
KS5kZWZhdWx0V2Vic2l0ZVBvbGljaWVzKCkpCiAgICAgICAgIGRlZmF1bHRXZWJzaXRlUG9saWNp
ZXMgPSBwb2xpY2llcy0+Y29weSgpOwogCi0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb25EZWNpc2lvbkhhbmRsZXIKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyCi0gICAgICAgICYmICFt
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIK
LSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcldl
YnNpdGVQb2xpY2llcwotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9u
RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNl
ckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXMpIHsKKyAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRsZXIKKyAgICAgICAgJiYgIW1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFuZGxl
cgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNl
c0RlY2lzaW9uSGFuZGxlcgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bkRlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llcworICAgICAgICAmJiAhbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvblVzZXJJbmZvRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzKSB7
CiAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbd2ViUGFnZSA9IG1ha2VSZWYod2Vi
UGFnZVByb3h5KSwgbGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKSwgbmF2aWdhdGlvbkFjdGlv
biwgZGVmYXVsdFdlYnNpdGVQb2xpY2llc10gKGJvb2wgaW50ZXJjZXB0ZWROYXZpZ2F0aW9uKSB7
CiAgICAgICAgICAgICBpZiAoaW50ZXJjZXB0ZWROYXZpZ2F0aW9uKSB7CiAgICAgICAgICAgICAg
ICAgbGlzdGVuZXItPmlnbm9yZSgpOwpAQCAtNDk4LDE3ICs0OTgsMTcgQEAgdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBkZWxlZ2F0ZUhhc1dlYnBh
Z2VQcmVmZXJlbmNlcyA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNl
c0RlY2lzaW9uSGFuZGxlcgotICAgICAgICB8fCBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25X
aXRoUHJlZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFuZGxlcjsKLSAgICBib29sIGRlbGVnYXRl
SGFzV2Vic2l0ZVBvbGljaWVzID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uRGVjaXNpb25I
YW5kbGVyV2Vic2l0ZVBvbGljaWVzIHx8IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblVzZXJJ
bmZvRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzOworICAgIGJvb2wgZGVsZWdhdGVIYXNX
ZWJwYWdlUHJlZmVyZW5jZXMgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZl
cmVuY2VzRGVjaXNpb25IYW5kbGVyCisgICAgICAgIHx8IG1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFuZGxlcjsKKyAgICBib29sIGRl
bGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRl
Y2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llcyB8fCBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXM7CiAKICAgICBhdXRvIHNl
bGVjdG9yRm9yQ29tcGxldGlvbkhhbmRsZXJDaGVja2VyID0gKFsmXSAoKSAtPiBTRUwgewogICAg
ICAgICBpZiAoZGVsZWdhdGVIYXNXZWJwYWdlUHJlZmVyZW5jZXMpCi0gICAgICAgICAgICByZXR1
cm4gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzRGVjaXNpb25IYW5k
bGVyID8gQHNlbGVjdG9yKHdlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpw
cmVmZXJlbmNlczpkZWNpc2lvbkhhbmRsZXI6KSA6IEBzZWxlY3Rvcihfd2ViVmlldzpkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOnByZWZlcmVuY2VzOnVzZXJJbmZvOmRlY2lzaW9uSGFu
ZGxlcjopOworICAgICAgICAgICAgcmV0dXJuIG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25X
aXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIgPyBAc2VsZWN0b3Iod2ViVmlldzpkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOnByZWZlcmVuY2VzOmRlY2lzaW9uSGFuZGxlcjopIDog
QHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246cHJlZmVy
ZW5jZXM6dXNlckluZm86ZGVjaXNpb25IYW5kbGVyOik7CiAgICAgICAgIGlmIChkZWxlZ2F0ZUhh
c1dlYnNpdGVQb2xpY2llcykKICAgICAgICAgICAgIHJldHVybiBAc2VsZWN0b3IoX3dlYlZpZXc6
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRsZXI6KTsKICAgICAg
ICAgcmV0dXJuIEBzZWxlY3Rvcih3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b246ZGVjaXNpb25IYW5kbGVyOik7CkBAIC01ODEsMzYgKzU4MSwzNiBAQCBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICB9OwogCiAgICAgaWYgKGRlbGVnYXRlSGFzV2VicGFn
ZVByZWZlcmVuY2VzKSB7Ci0gICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25X
aXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIpCi0gICAgICAgICAgICBbbmF2aWdhdGlvbkRl
bGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBwcmVmZXJlbmNlczp3
cmFwcGVyKGRlZmF1bHRXZWJzaXRlUG9saWNpZXMpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQ
dHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKSkuZ2V0
KCldOworICAgICAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJl
bmNlc0RlY2lzaW9uSGFuZGxlcikKKyAgICAgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBwcmVmZXJlbmNl
czp3cmFwcGVyKGRlZmF1bHRXZWJzaXRlUG9saWNpZXMpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxv
Y2tQdHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKSku
Z2V0KCldOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmln
YXRpb25BY3Rpb24pIHByZWZlcmVuY2VzOndyYXBwZXIoZGVmYXVsdFdlYnNpdGVQb2xpY2llcykg
dXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJ
bmZvLT53cmFwcGVyKCkpIDogbmlsIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoV1RGTW92
ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKSkuZ2V0KCldOworICAg
ICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVs
ZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBk
ZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikg
cHJlZmVyZW5jZXM6d3JhcHBlcihkZWZhdWx0V2Vic2l0ZVBvbGljaWVzKSB1c2VySW5mbzp1c2Vy
SW5mbyA/IHN0YXRpY19jYXN0PGlkPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIo
KSkgOiBuaWwgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFu
ZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07CiAgICAgfSBlbHNlIGlmIChk
ZWxlZ2F0ZUhhc1dlYnNpdGVQb2xpY2llcykgewogICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxl
ciA9IG1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldpdGhQcmVmZXJlbmNlc09y
UG9saWNpZXMpKTsKLSAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblVzZXJJ
bmZvRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzKSB7CisgICAgICAgIGlmIChtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNp
ZXMpIHsKICAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0g
ICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25E
ZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHVzZXJJbmZvOnVz
ZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBw
ZXIoKSkgOiBuaWwgZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CisgICAg
ICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxl
Z2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSB1
c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJ
bmZvLT53cmFwcGVyKCkpIDogbmlsIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0
KCldOwogICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19C
RUdJTgotICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZp
Z2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBkZWNp
c2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICAgICAgICAgIFsoaWQgPFdL
TmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjpk
ZWNpc2lvbkhhbmRsZXIuZ2V0KCldOwogICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNM
QVJBVElPTlNfRU5ECiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBhdXRvIGRlY2lz
aW9uSGFuZGxlciA9IFtkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzID0g
V1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKV0gKFdLTmF2
aWdhdGlvbkFjdGlvblBvbGljeSBhY3Rpb25Qb2xpY3kpIG11dGFibGUgewogICAgICAgICAgICAg
ZGVjaXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcyhhY3Rpb25Qb2xpY3ksIG5p
bCk7CiAgICAgICAgIH07Ci0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3
cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoV1RG
TW92ZShkZWNpc2lvbkhhbmRsZXIpKS5nZXQoKV07CisgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdh
dGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBkZWNp
c2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFdURk1vdmUoZGVjaXNpb25IYW5kbGVyKSkuZ2V0KCld
OwogICAgIH0KIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmNv
bnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkmLCBVUkwmJiB1cmwsIENvbnRl
bnRSdWxlTGlzdFJlc3VsdHMmJiByZXN1bHRzKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3Rh
dGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdVUkxDb250ZW50UnVsZUxpc3RJ
ZGVudGlmaWVyc05vdGlmaWNhdGlvbnMKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29udGVudFJ1bGVMaXN0V2l0aElkZW50
aWZpZXJQZXJmb3JtZWRBY3Rpb25Gb3JVUkwpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdVUkxDb250ZW50UnVsZUxpc3RJZGVu
dGlmaWVyc05vdGlmaWNhdGlvbnMKKyAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRlbnRSdWxlTGlzdFdpdGhJZGVudGlm
aWVyUGVyZm9ybWVkQWN0aW9uRm9yVVJMKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKQEAgLTYzMCwxOCArNjMwLDE4IEBAIHZvaWQgTmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChu
b3RpZmljYXRpb25zICYmIG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25zKQot
ICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxl
Z2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgVVJMOnVybCBjb250ZW50
UnVsZUxpc3RJZGVudGlmaWVyczppZGVudGlmaWVycy5nZXQoKSBub3RpZmljYXRpb25zOm5vdGlm
aWNhdGlvbnMuZ2V0KCldOworICAgIGlmIChub3RpZmljYXRpb25zICYmIG1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlz
dElkZW50aWZpZXJzTm90aWZpY2F0aW9ucykKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBVUkw6dXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZp
ZXJzOmlkZW50aWZpZXJzLmdldCgpIG5vdGlmaWNhdGlvbnM6bm90aWZpY2F0aW9ucy5nZXQoKV07
CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdDb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZvcm1lZEFjdGlvbkZvclVS
TCkgeworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdDb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZvcm1lZEFjdGlvbkZv
clVSTCkgewogICAgICAgICBmb3IgKGF1dG8mJiBwYWlyIDogV1RGTW92ZShyZXN1bHRzLnJlc3Vs
dHMpKQotICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZp
Z2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGNvbnRl
bnRSdWxlTGlzdFdpdGhJZGVudGlmaWVyOnBhaXIuZmlyc3QgcGVyZm9ybWVkQWN0aW9uOndyYXBw
ZXIoQVBJOjpDb250ZW50UnVsZUxpc3RBY3Rpb246OmNyZWF0ZShXVEZNb3ZlKHBhaXIuc2Vjb25k
KSkuZ2V0KCkpIGZvclVSTDp1cmxdOworICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllcjpw
YWlyLmZpcnN0IHBlcmZvcm1lZEFjdGlvbjp3cmFwcGVyKEFQSTo6Q29udGVudFJ1bGVMaXN0QWN0
aW9uOjpjcmVhdGUoV1RGTW92ZShwYWlyLnNlY29uZCkpLmdldCgpKSBmb3JVUkw6dXJsXTsKICAg
ICB9CiB9CiAgICAgCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYgcGFnZSwgUmVmPEFQ
STo6TmF2aWdhdGlvblJlc3BvbnNlPiYmIG5hdmlnYXRpb25SZXNwb25zZSwgUmVmPFdlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQog
ewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2VEZWNpc2lvbkhhbmRsZXIp
IHsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZURlY2lzaW9uSGFuZGxl
cikgewogICAgICAgICBOU1VSTCAqdXJsID0gbmF2aWdhdGlvblJlc3BvbnNlLT5yZXNwb25zZSgp
Lm5zVVJMUmVzcG9uc2UoKS5VUkw7CiAgICAgICAgIGlmIChbdXJsIGlzRmlsZVVSTF0pIHsKICAg
ICAgICAgICAgIEJPT0wgaXNEaXJlY3RvcnkgPSBOTzsKQEAgLTY2MSwxMiArNjYxLDEyIEBAIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUu
bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUg
PSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYg
KCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gY2hlY2tl
ciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNw
b25zZTpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVz
cG9uc2U6d3JhcHBlcihuYXZpZ2F0aW9uUmVzcG9uc2UpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxv
Y2tQdHIoW2xvY2FsTGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKSwgY2hlY2tlciA9IFdURk1v
dmUoY2hlY2tlcildKFdLTmF2aWdhdGlvblJlc3BvbnNlUG9saWN5IHJlc3BvbnNlUG9saWN5KSB7
CisgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlOndyYXBw
ZXIobmF2aWdhdGlvblJlc3BvbnNlKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtsb2Nh
bExpc3RlbmVyID0gV1RGTW92ZShsaXN0ZW5lciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIp
XShXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeSByZXNwb25zZVBvbGljeSkgewogICAgICAgICBp
ZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpA
QCAtNjg5LDgwICs2ODksODAgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OgogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRQ
cm92aXNpb25hbE5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIEFQSTo6T2Jq
ZWN0KiB1c2VySW5mbykKIHsKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlv
bkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
OwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVy
ZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0
aGUgYmFjay9mb3J3YXJkIGNhY2hlLgotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9u
VXNlckluZm8pCi0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2
aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRT
dGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pIHVzZXJJbmZvOnVz
ZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBw
ZXIoKSkgOiBuaWxdOwotICAgIGVsc2UgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24pCi0g
ICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dl
YlZpZXcgZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKV07
CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uVXNlckluZm8pCisgICAgICAgIFso
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkU3RhcnRQcm92
aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB1c2VySW5mbzp1c2VySW5mbyA/
IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDog
bmlsXTsKKyAgICBlbHNlIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbikKKyAgICAgICAg
W25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkgZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0
aW9uKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbykKIHsK
LSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdh
dGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3Rh
dGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFs
TG9hZFdpdGhSZXF1ZXN0SW5GcmFtZSkKLSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVz
dC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkp
IGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZv
KSwgJnBhZ2UpKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3RJbkZy
YW1lKQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VS
TFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJh
bWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBh
Z2UpKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oV2ViUGFnZVByb3h5
JiBwYWdlLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0KikKIHsKLSAg
ICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKQorICAg
IGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRl
bGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwog
ICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwg
YnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUg
YmFjay9mb3J3YXJkIGNhY2hlLgogCi0gICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKV07CisgICAgW25hdmlnYXRpb25E
ZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndyYXBwZXIo
bmF2aWdhdGlvbildOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdU
Rjo6U3RyaW5nJiB1cmxTdHJpbmcsIGRvdWJsZSBkZWxheSkKIHsKLSAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2lsbFBlcmZvcm1D
bGllbnRSZWRpcmVjdCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3Rh
dGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdh
dGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAg
aWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIFVSTCB1cmwo
VVJMKCksIHVybFN0cmluZyk7CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDp1cmwgZGVsYXk6
ZGVsYXldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDp1cmwgZGVsYXk6
ZGVsYXldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlk
UGVyZm9ybUNsaWVudFJlZGlyZWN0KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpTdHJp
bmcmIHNvdXJjZVVSTFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3Ry
aW5nKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdEaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpCisgICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRQZXJmb3Jt
Q2xpZW50UmVkaXJlY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRl
bGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7Cisg
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFVSTCBzb3VyY2VVUkwoVVJMKCksIHNvdXJjZVVSTFN0cmluZyk7CiAg
ICAgVVJMIGRlc3RpbmF0aW9uVVJMKFVSTCgpLCBkZXN0aW5hdGlvblVSTFN0cmluZyk7CiAKLSAg
ICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRp
b25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFBlcmZv
cm1DbGllbnRSZWRpcmVjdEZyb21VUkw6c291cmNlVVJMIHRvVVJMOmRlc3RpbmF0aW9uVVJMXTsK
KyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmln
YXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9tVVJMOnNvdXJjZVVSTCB0b1VSTDpk
ZXN0aW5hdGlvblVSTF07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdChXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0gICAg
aWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZENhbmNlbENsaWVudFJlZGlyZWN0KQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3Qp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlv
bkRlbGVnYXRlKSBfd2ViVmlld0RpZENhbmNlbENsaWVudFJlZGlyZWN0Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlld107CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlkQ2FuY2VsQ2xpZW50UmVk
aXJlY3Q6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHN0
YXRpYyBSZXRhaW5QdHI8TlNFcnJvcj4gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIo
V0tXZWJWaWV3ICp3ZWJWaWV3LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIE5TRXJy
b3IgKm9yaWdpbmFsRXJyb3IpCkBAIC03ODEsMTYwICs3ODEsMTYwIEBAIHN0YXRpYyBSZXRhaW5Q
dHI8TlNFcnJvcj4gY3JlYXRlRXJyb3JXaXQKIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25XaXRoRXJyb3IoV2ViUGFn
ZVByb3h5JiBwYWdlLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBBUEk6Ok5hdmlnYXRpb24q
IG5hdmlnYXRpb24sIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yLCBBUEk6Ok9i
amVjdCopCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBlcnJv
cldpdGhSZWNvdmVyeUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVy
KG1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldywgZnJhbWVJbmZvLCBlcnJvcik7CisgICAgYXV0
byBlcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0
ZW1wdGVyKG1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCksIGZyYW1lSW5m
bywgZXJyb3IpOwogCiAgICAgaWYgKGZyYW1lSW5mby5pc01haW5GcmFtZSkgewogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVy
ZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0
aGUgYmFjay9mb3J3YXJkIGNhY2hlLgotICAgICAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9u
YXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uV2l0aEVycm9yKQotICAgICAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndy
YXBwZXIobmF2aWdhdGlvbikgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdl
dCgpXTsKKyAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25XaXRoRXJyb3IpCisg
ICAgICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndyYXBw
ZXIobmF2aWdhdGlvbikgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgp
XTsKICAgICB9IGVsc2UgewotICAgICAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9uRGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZEluU3ViZnJhbWVXaXRoRXJyb3IpCi0gICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcgbmF2aWdhdGlvbjpuaWwgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJh
bWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBh
Z2UpKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOworICAgICAg
ICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3TmF2aWdhdGlvbkRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lV2l0aEVycm9yKQor
ICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9u
RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KSBuYXZpZ2F0aW9uOm5pbCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZTp3cmFwcGVy
KEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIHdpdGhF
cnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CiAgICAgfQogfQogCiB2b2lk
IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZFdpdGhFcnJvckZvckZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQ29yZTo6UmVzb3VyY2VS
ZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IsIEZy
YW1lSW5mb0RhdGEmJiBmcmFtZUluZm8pCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUg
PSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRv
IG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBlcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0
aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldywgZnJhbWVJbmZv
LCBlcnJvcik7CisgICAgYXV0byBlcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlciA9IGNyZWF0ZUVy
cm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCksIGZyYW1lSW5mbywgZXJyb3IpOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRl
Lm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZFdpdGhSZXF1ZXN0SW5GcmFtZVdpdGhFcnJvcikKLSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0
Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkg
aW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8p
LCAmcGFnZSkpIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07Cisg
ICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoUmVxdWVzdEluRnJhbWVXaXRoRXJyb3IpCisg
ICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVn
YXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBC
b2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJ
OjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9y
OmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9u
U3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENvbW1pdE5hdmlnYXRpb24oV2ViUGFnZVByb3h5
JiBwYWdlLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0KikKIHsKLSAg
ICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlv
bkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFz
c2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5
IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
LgotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZENvbW1pdE5hdmlnYXRpb24pCi0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUg
d2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkQ29tbWl0TmF2aWdhdGlvbjp3
cmFwcGVyKG5hdmlnYXRpb24pXTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ29tbWl0TmF2aWdhdGlvbikKKyAgICAgICAg
W25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkgZGlkQ29tbWl0TmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0K
IAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENvbW1pdExvYWRG
b3JGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0JiYgcmVxdWVzdCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbykKIHsKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDb21taXRMb2FkV2l0aFJlcXVlc3RJbkZyYW1l
KQotICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+
KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93
ZWJWaWV3IGRpZENvbW1pdExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQ
Qm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQ
STo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpXTsKKyAgICBp
ZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGlkQ29tbWl0TG9hZFdpdGhSZXF1ZXN0SW5GcmFtZSkKKyAgICAgICAgW3N0YXRpY19jYXN0PGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkp
IF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkQ29t
bWl0TG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9s
aWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86
OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOwogfQogCiB2b2lkIE5hdmlnYXRp
b25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCopCiB7
Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld05hdmlnYXRpb25EaWRGaW5pc2hEb2N1bWVudExvYWQpCisgICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9u
RGlkRmluaXNoRG9jdW1lbnRMb2FkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmln
YXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5h
dmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNv
bWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogCi0gICAgW3N0
YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0
aW9uRGlkRmluaXNoRG9jdW1lbnRMb2FkOndyYXBwZXIobmF2aWdhdGlvbildOworICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIG5hdmlnYXRpb25EaWRGaW5pc2hEb2N1bWVudExvYWQ6d3JhcHBlcihuYXZpZ2F0aW9uKV07
CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hO
YXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgQVBJ
OjpPYmplY3QqKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJlLCBi
dXQgaXQncyBjdXJyZW50bHkgbnVsbCBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBi
YWNrL2ZvcndhcmQgY2FjaGUuCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTmF2aWdhdGlvbikKLSAgICAgICAgW25h
dmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRG
aW5pc2hOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOworICAgIGlmIChtX25hdmlnYXRp
b25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGaW5pc2hOYXZp
Z2F0aW9uKQorICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRGaW5pc2hOYXZpZ2F0aW9uOndyYXBwZXIo
bmF2aWdhdGlvbildOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbykKIHsKLSAg
ICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlv
bkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUu
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGaW5pc2hMb2FkV2l0aFJlcXVl
c3RJbkZyYW1lKQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5h
dmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlk
RmluaXNoTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRl
UG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUlu
Zm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOworICAgIGlmIChtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGaW5pc2hM
b2FkV2l0aFJlcXVlc3RJbkZyYW1lKQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZEZpbmlzaExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5z
VVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5G
cmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAm
cGFnZSkpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRp
ZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgRnJhbWVJ
bmZvRGF0YSYgZnJhbWVJbmZvLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yLCBBUEk6Ok9iamVjdCogdXNlckluZm8pCiB7Ci0g
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBlcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlv
blN0YXRlLm1fd2ViVmlldywgZnJhbWVJbmZvLCBlcnJvcik7CisgICAgYXV0byBlcnJvcldpdGhS
ZWNvdmVyeUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2
aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCksIGZyYW1lSW5mbywgZXJyb3IpOwog
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBu
dWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRo
cm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUu
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsTmF2aWdhdGlvbldpdGhF
cnJvclVzZXJJbmZvKQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+
KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcg
ZGlkRmFpbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3aXRoRXJyb3I6ZXJyb3JXaXRo
UmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCkgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxp
ZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF07Ci0gICAgZWxz
ZSBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEaWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvcikKLSAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0
ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGYWlsTmF2aWdhdGlvbjp3
cmFwcGVyKG5hdmlnYXRpb24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5n
ZXQoKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yVXNlckluZm8pCisgICAgICAg
IFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkRmFpbE5h
dmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlB
dHRlbXB0ZXIuZ2V0KCkgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1
cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF07CisgICAgZWxzZSBpZiAobV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFp
bE5hdmlnYXRpb25XaXRoRXJyb3IpCisgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZEZhaWxOYXZpZ2F0
aW9uOndyYXBwZXIobmF2aWdhdGlvbikgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1w
dGVyLmdldCgpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiBlcnJvciwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbykKIHsKLSAgICBhdXRvIG5hdmlnYXRp
b25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
OworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0gY3Jl
YXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3
LCBmcmFtZUluZm8sIGVycm9yKTsKKyAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVy
ID0gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKSwgZnJhbWVJbmZvLCBlcnJvcik7CiAKLSAgICBpZiAobV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsTG9h
ZFdpdGhSZXF1ZXN0SW5GcmFtZVdpdGhFcnJvcikKLSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGRpZEZhaWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVl
c3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6d3Jh
cHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3
aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOworICAgIGlmIChtX25h
dmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWls
TG9hZFdpdGhSZXF1ZXN0SW5GcmFtZVdpdGhFcnJvcikKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRGYWlsTG9hZFdpdGhSZXF1ZXN0OnJl
cXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBC
b2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1l
SW5mbyksICZwYWdlKSkgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgp
XTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0
aW9uLCBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSBuYXZpZ2F0aW9uVHlwZSwgQVBJOjpPYmpl
Y3QqKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9uRGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbikKKyAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d05hdmlnYXRpb25EaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdh
dGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGFzc2VydCB0aGF0IG5hdmlnYXRpb25JRCBpcyBub3QgemVybyBoZXJlLCBidXQgaXQncyBjdXJy
ZW50bHkgemVybyBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQg
Y2FjaGUuCiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUu
bV93ZWJWaWV3IG5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSBkaWRTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uOnRvV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9uVHlwZSld
OworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIG5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSBkaWRTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uOnRvV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZShuYXZpZ2F0aW9u
VHlwZSldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cmVu
ZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UoV2ViUGFnZVByb3h5JiwgT3B0aW9uU2V0PFdlYkNvcmU6
OkxheW91dE1pbGVzdG9uZT4gbGF5b3V0TWlsZXN0b25lcykKIHsKLSAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVuZGVyaW5nUHJv
Z3Jlc3NEaWRDaGFuZ2UpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRp
Y19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyByZW5kZXJpbmdQ
cm9ncmVzc0RpZENoYW5nZTpyZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyhsYXlvdXRNaWxlc3RvbmVz
KV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+Pihu
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2U6cmVuZGVyaW5nUHJv
Z3Jlc3NFdmVudHMobGF5b3V0TWlsZXN0b25lcyldOwogfQogCiBib29sIE5hdmlnYXRpb25TdGF0
ZTo6TmF2aWdhdGlvbkNsaWVudDo6c2hvdWxkQnlwYXNzQ29udGVudE1vZGVTYWZlZ3VhcmRzKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZl
cmVuY2VzRGVjaXNpb25IYW5kbGVyCi0gICAgICAgIHx8IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyOworICAgIHJldHVybiBt
X25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzRGVjaXNpb25IYW5kbGVy
CisgICAgICAgIHx8IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNV
c2VySW5mb0RlY2lzaW9uSGFuZGxlcjsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShXZWJQYWdlUHJv
eHkmLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5JiBhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ29tcGxldGlvbkhh
bmRsZXIpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDb21wbGV0aW9u
SGFuZGxlcikKICAgICAgICAgcmV0dXJuIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmxpc3RlbmVy
KCkuY29tcGxldGVDaGFsbGVuZ2UoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uOjpSZWplY3RQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZSk7CiAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25DaGFsbGVuZ2UubGlzdGVuZXIoKS5jb21w
bGV0ZUNoYWxsZW5nZShXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246
OlJlamVjdFByb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9
IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUu
Z2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
OndyYXBwZXIoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY2hhbGxlbmdlID0gbWFrZVJlZihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNo
ZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9z
aXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkgeworICAgIFtz
dGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCku
Z2V0KCkgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOndyYXBwZXIoYXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hhbGxlbmdl
ID0gbWFrZVJlZihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoZWNrZXIgPSBXVEZNb3ZlKGNo
ZWNrZXIpXShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24s
IE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29t
cGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtOTU5LDE3ICs5NTks
MTcgQEAgc3RhdGljIGJvb2wgc3lzdGVtQWxsb3dzTGVnYWN5VExTRm9yKFdlYgogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6c2hvdWxkQWxsb3dMZWdhY3lUTFMoV2Vi
UGFnZVByb3h5JiBwYWdlLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5JiBhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTaG91bGRBbGxvd0xlZ2Fj
eVRMUwotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNob3VsZEFsbG93RGVwcmVjYXRl
ZFRMUykKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dMZWdhY3lUTFMK
KyAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dEZXByZWNhdGVkVExT
KQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoc3lzdGVtQWxsb3dzTGVnYWN5VExT
Rm9yKHBhZ2UpKTsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcihzeXN0ZW1BbGxvd3NMZWdhY3lUTFNGb3IocGFnZSkpOwogCi0gICAgaWYgKG1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VTaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMpIHsKKyAgICBpZiAobV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRp
b25DaGFsbGVuZ2VTaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMpIHsKICAgICAgICAgYXV0byBjaGVj
a2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZpZXc6YXV0aGVudGljYXRpb25DaGFsbGVuZ2U6c2hv
dWxkQWxsb3dEZXByZWNhdGVkVExTOikpOwotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOndyYXBwZXIoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIHNob3VsZEFsbG93RGVwcmVj
YXRlZFRMUzptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShCT09MIHNob3VsZEFsbG93
KSBtdXRhYmxlIHsKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgYXV0aGVudGljYXRpb25DaGFs
bGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkgc2hvdWxkQWxsb3dEZXByZWNh
dGVkVExTOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlciksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKEJPT0wgc2hvdWxkQWxsb3cp
IG11dGFibGUgewogICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFz
QmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNr
ZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtOTc4LDcgKzk3OCw3IEBAIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVh
dGUobmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6YXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6c2hvdWxkQWxsb3dMZWdhY3lUTFM6KSk7Ci0gICAgW3N0YXRpY19jYXN0
PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZTp3cmFwcGVyKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSBzaG91bGRBbGxvd0xlZ2Fj
eVRMUzptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShCT09MIHNob3VsZEFsbG93KSBt
dXRhYmxlIHsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTp3cmFwcGVyKGF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSBzaG91bGRBbGxvd0xlZ2FjeVRMUzptYWtlQmxvY2tQdHIo
W2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShCT09MIHNob3VsZEFsbG93KSBtdXRhYmxlIHsKICAgICAgICAg
aWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsK
QEAgLTk4OCwxNCArOTg4LDE0IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjoKIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZE5lZ290
aWF0ZU1vZGVyblRMUyhjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYgY2hh
bGxlbmdlKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEaWROZWdvdGlhdGVNb2Rlcm5UTFMpCisgICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWROZWdvdGlh
dGVNb2Rlcm5UTFMpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5t
X3dlYlZpZXcgZGlkTmVnb3RpYXRlTW9kZXJuVExTOm1hYyhjaGFsbGVuZ2UpXTsKKyAgICBbc3Rh
dGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5n
ZXQoKSBkaWROZWdvdGlhdGVNb2Rlcm5UTFM6bWFjKGNoYWxsZW5nZSldOwogfQogCiBzdGF0aWMg
X1dLUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uIHdrUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uKFBy
b2Nlc3NUZXJtaW5hdGlvblJlYXNvbiByZWFzb24pCkBAIC0xMDIyLDU4ICsxMDIyLDU4IEBAIHN0
YXRpYyBfV0tQcm9jZXNzVGVybWluYXRpb25SZWFzb24gd2tQcm8KIAogYm9vbCBOYXZpZ2F0aW9u
U3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRUZXJtaW5hdGUoV2ViUGFnZVByb3h5
JiBwYWdlLCBQcm9jZXNzVGVybWluYXRpb25SZWFzb24gcmVhc29uKQogewotICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250
ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZQotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9u
YXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1p
bmF0ZVdpdGhSZWFzb24KLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZENyYXNoKQorICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29u
dGVudFByb2Nlc3NEaWRUZXJtaW5hdGUKKyAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLT5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVy
bWluYXRlV2l0aFJlYXNvbgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZENyYXNoKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRl
bGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwog
ICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFzb24pIHsKLSAgICAgICAgW3N0
YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyB3ZWJDb250
ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFzb246d2tQcm9jZXNzVGVybWluYXRpb25SZWFz
b24ocmVhc29uKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNv
bikgeworICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSB3ZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhS
ZWFzb246d2tQcm9jZXNzVGVybWluYXRpb25SZWFzb24ocmVhc29uKV07CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAogICAgIC8vIFdlIHByZWZlciB3ZWJWaWV3V2ViQ29udGVudFByb2Nl
c3NEaWRUZXJtaW5hdGU6IG92ZXIgX3dlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2g6LgotICAgIGlm
IChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dl
YkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlKSB7Ci0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdh
dGUgd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlOm1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlld107CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlKSB7CisgICAg
ICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWlu
YXRlOm1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2gpOwotICAgIFtz
dGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRDcmFzaDptX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXddOworICAgIEFTU0VSVChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2gpOworICAgIFtzdGF0aWNf
Y2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRDcmFzaDptX25hdmlnYXRpb25TdGF0ZS0+bV93
ZWJWaWV3LmdldCgpLmdldCgpXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRCZWNvbWVSZXNwb25zaXZlKFdl
YlBhZ2VQcm94eSYgcGFnZSkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNpdmUp
CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lUmVzcG9uc2l2ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmln
YXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93
ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNpdmU6bV9uYXZpZ2F0aW9uU3RhdGUubV93
ZWJWaWV3XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21l
UmVzcG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0K
IAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRCZWNv
bWVVbnJlc3BvbnNpdmUoV2ViUGFnZVByb3h5JiBwYWdlKQogewotICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlk
QmVjb21lVW5yZXNwb25zaXZlKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVVucmVzcG9uc2l2
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmln
YXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVVucmVzcG9uc2l2
ZTptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2Vi
Vmlld1dlYlByb2Nlc3NEaWRCZWNvbWVVbnJlc3BvbnNpdmU6bV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIFJlZlB0cjxBUEk6OkRhdGE+IE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2ViQ3J5cHRvTWFzdGVyS2V5KFdlYlBhZ2VQcm94eSYp
CiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldykgeworICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlwdG9NYXN0ZXJLZXlGb3JX
ZWJWaWV3KSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgICAgIGlm
ICghZ2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0xMDgxLDExICsxMDgxLDExIEBAIFJlZlB0cjxBUEk6OkRhdGE+
IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWcKICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3JlYXRl
KG1hc3RlcktleS5kYXRhKCksIG1hc3RlcktleS5zaXplKCkpOwogICAgIH0KIAotICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdh
dGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTlNEYXRhICpkYXRhID0gW3N0YXRp
Y19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCkpIF93ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlld107CisgICAgTlNEYXRhICpkYXRhID0gW3N0YXRpY19jYXN0PGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJDcnlw
dG9NYXN0ZXJLZXlGb3JXZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCku
Z2V0KCldOwogICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGRhdGEp
OwogfQogCkBAIC0xMDk3LDYzICsxMDk3LDYzIEBAIFJlZlB0cjxBUEk6OlN0cmluZz4gTmF2aWdh
dGlvblN0YXRlOjpOYXYKIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
Om5hdmlnYXRpb25BY3Rpb25EaWRCZWNvbWVEb3dubG9hZChXZWJQYWdlUHJveHkmLCBBUEk6Ok5h
dmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25BY3Rpb24sIERvd25sb2FkUHJveHkmIGRvd25sb2Fk
KQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLm5hdmlnYXRpb25BY3Rpb25EaWRCZWNvbWVEb3dubG9hZCkKKyAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMubmF2aWdhdGlvbkFjdGlvbkRp
ZEJlY29tZURvd25sb2FkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25E
ZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwor
ICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZpZXc6bV9uYXZp
Z2F0aW9uU3RhdGUubV93ZWJWaWV3IG5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9u
QWN0aW9uKSBkaWRCZWNvbWVEb3dubG9hZDp3cmFwcGVyKGRvd25sb2FkKV07CisgICAgW25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkgbmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRp
ZEJlY29tZURvd25sb2FkOndyYXBwZXIoZG93bmxvYWQpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9u
U3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Om5hdmlnYXRpb25SZXNwb25zZURpZEJlY29tZURvd25s
b2FkKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvblJlc3BvbnNlJiBuYXZpZ2F0aW9uUmVz
cG9uc2UsIERvd25sb2FkUHJveHkmIGRvd25sb2FkKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLm5hdmlnYXRpb25SZXNwb25zZURpZEJl
Y29tZURvd25sb2FkKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uUmVzcG9uc2VEaWRCZWNvbWVEb3dubG9hZCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBu
YXZpZ2F0aW9uUmVzcG9uc2U6d3JhcHBlcihuYXZpZ2F0aW9uUmVzcG9uc2UpIGRpZEJlY29tZURv
d25sb2FkOndyYXBwZXIoZG93bmxvYWQpXTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
IHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBuYXZpZ2F0
aW9uUmVzcG9uc2U6d3JhcHBlcihuYXZpZ2F0aW9uUmVzcG9uc2UpIGRpZEJlY29tZURvd25sb2Fk
OndyYXBwZXIoZG93bmxvYWQpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmNvbnRleHRNZW51RGlkQ3JlYXRlRG93bmxvYWQoV2ViUGFnZVByb3h5JiwgRG93
bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMuY29udGV4dE1lbnVEaWRDcmVhdGVEb3dubG9hZCkKKyAg
ICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMuY29u
dGV4dE1lbnVEaWRDcmVhdGVEb3dubG9hZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpICBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgY29udGV4dE1lbnVEaWRDcmVhdGVEb3dubG9hZDp3cmFw
cGVyKGRvd25sb2FkKV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpICBfd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNvbnRleHRNZW51RGlkQ3JlYXRlRG93bmxv
YWQ6d3JhcHBlcihkb3dubG9hZCldOwogfQogCiAjaWYgVVNFKFFVSUNLX0xPT0spCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRMb2FkRm9yUXVpY2tMb29r
RG9jdW1lbnRJbk1haW5GcmFtZShjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcm
IHV0aSkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFt
ZSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtz
dGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkU3Rh
cnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZVdpdGhGaWxlTmFtZTpmaWxlTmFt
ZSB1dGk6dXRpXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVu
dEluTWFpbkZyYW1lV2l0aEZpbGVOYW1lOmZpbGVOYW1lIHV0aTp1dGldOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNoTG9hZEZvclF1aWNrTG9v
a0RvY3VtZW50SW5NYWluRnJhbWUoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiB7Ci0gICAg
aWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKQorICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
RmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9u
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBt
X25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFu
YXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxp
ZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
KSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmluaXNoTG9hZEZvclF1
aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWU6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpXTsK
KyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dy5nZXQoKS5nZXQoKSBkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFt
ZTpidWZmZXIuY3JlYXRlTlNEYXRhKCkuZ2V0KCldOwogfQogI2VuZGlmCiAKQEAgLTExODQsMTkg
KzExODQsMTkgQEAgc3RhdGljIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgd2tTTwogCiB2
b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU09B
dXRob3JpemF0aW9uTG9hZChXZWJQYWdlUHJveHkmLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5
IGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LCBjb25zdCBTdHJpbmcmIGV4dGVuc2lv
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9u
TG9hZFdpdGhDdXJyZW50UG9saWN5Rm9yRXh0ZW5zaW9uQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAg
ICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeUZv
ckV4dGVuc2lvbkNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9u
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBt
X25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFu
YXZpZ2F0aW9uRGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFNP
QXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
YXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZvclNP
QXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTpmb3JFeHRlbnNpb246Y29tcGxldGlv
bkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZp
Z2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRlY2lk
ZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTp3a1NPQXV0aG9y
aXphdGlvbkxvYWRQb2xpY3koY3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpIGZvckV4
dGVuc2lvbjpleHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92
ZShjaGVja2VyKV0oX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kpIG11dGFibGUg
eworICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVn
YXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVj
aWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5OndrU09BdXRo
b3JpemF0aW9uTG9hZFBvbGljeShjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSkgZm9y
RXh0ZW5zaW9uOmV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpXShfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkgbXV0YWJs
ZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC0xMjA4LDcgKzEyMDgsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6CiAvLyBIaXN0b3J5RGVsZWdhdGVQcml2YXRlIHN1cHBvcnQKICAg
ICAKIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6SGlzdG9yeUNsaWVudChOYXZpZ2F0
aW9uU3RhdGUmIG5hdmlnYXRpb25TdGF0ZSkKLSAgICA6IG1fbmF2aWdhdGlvblN0YXRlKG5hdmln
YXRpb25TdGF0ZSkKKyAgICA6IG1fbmF2aWdhdGlvblN0YXRlKG1ha2VXZWFrUHRyKG5hdmlnYXRp
b25TdGF0ZSkpCiB7CiB9CiAKQEAgLTEyMTgsNTAgKzEyMTgsNTAgQEAgTmF2aWdhdGlvblN0YXRl
OjpIaXN0b3J5Q2xpZW50Ojp+SGlzdG9yeQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9y
eUNsaWVudDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2ViUGFnZVByb3h5JiwgY29u
c3QgV2ViTmF2aWdhdGlvbkRhdGFTdG9yZSYgbmF2aWdhdGlvbkRhdGFTdG9yZSkKIHsKLSAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
TmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+
bV9oaXN0b3J5RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9u
RGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25h
dmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGhpc3RvcnlE
ZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW2hpc3RvcnlE
ZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkTmF2aWdhdGVX
aXRoTmF2aWdhdGlvbkRhdGE6d3JhcHBlcihBUEk6Ok5hdmlnYXRpb25EYXRhOjpjcmVhdGUobmF2
aWdhdGlvbkRhdGFTdG9yZSkpXTsKKyAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2
aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkTmF2aWdhdGVXaXRoTmF2aWdh
dGlvbkRhdGE6d3JhcHBlcihBUEk6Ok5hdmlnYXRpb25EYXRhOjpjcmVhdGUobmF2aWdhdGlvbkRh
dGFTdG9yZSkpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRp
ZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6OlN0cmluZyYg
c291cmNlVVJMLCBjb25zdCBXVEY6OlN0cmluZyYgZGVzdGluYXRpb25VUkwpCiB7Ci0gICAgaWYg
KCFtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBl
cmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkxUb1VSTCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1DbGllbnRSZWRp
cmVjdEZyb21VUkxUb1VSTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBoaXN0b3J5RGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0
ZS5nZXQoKTsKICAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcg
ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3Ry
aW5nOnNvdXJjZVVSTF0gdG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpkZXN0aW5h
dGlvblVSTF1dOworICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9tVVJM
OltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c291cmNlVVJMXSB0b1VSTDpbTlNVUkwgX3dl
Yl9VUkxXaXRoV1RGU3RyaW5nOmRlc3RpbmF0aW9uVVJMXV07CiB9CiAKIHZvaWQgTmF2aWdhdGlv
blN0YXRlOjpIaXN0b3J5Q2xpZW50OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2ViUGFnZVBy
b3h5JiwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgV1RGOjpTdHJpbmcmIGRl
c3RpbmF0aW9uVVJMKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RGcm9tVVJMVG9VUkwp
CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9oaXN0b3J5RGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RGcm9tVVJMVG9VUkwpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0
b3J5RGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRp
b25TdGF0ZS0+bV9oaXN0b3J5RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFoaXN0b3J5RGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkw6
W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpzb3VyY2VVUkxdIHRvVVJMOltOU1VSTCBfd2Vi
X1VSTFdpdGhXVEZTdHJpbmc6ZGVzdGluYXRpb25VUkxdXTsKKyAgICBbaGlzdG9yeURlbGVnYXRl
IF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkUGVy
Zm9ybVNlcnZlclJlZGlyZWN0RnJvbVVSTDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnNv
dXJjZVVSTF0gdG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpkZXN0aW5hdGlvblVS
TF1dOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiB0aXRsZSwgY29u
c3QgV1RGOjpTdHJpbmcmIHVybCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1faGlz
dG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkVXBkYXRlSGlzdG9yeVRpdGxlRm9yVVJMKQor
ICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkVXBkYXRlSGlzdG9yeVRpdGxlRm9yVVJMKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9yeURlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
aGlzdG9yeURlbGVnYXRlLmdldCgpOwogICAgIGlmICghaGlzdG9yeURlbGVnYXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlldyBkaWRVcGRhdGVIaXN0b3J5VGl0bGU6dGl0bGUgZm9yVVJMOltOU1VSTCBf
d2ViX1VSTFdpdGhXVEZTdHJpbmc6dXJsXV07CisgICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZFVwZGF0ZUhpc3Rv
cnlUaXRsZTp0aXRsZSBmb3JVUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzp1cmxdXTsK
IH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OndpbGxDaGFuZ2VJc0xvYWRpbmcoKQpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAkocmV2aXNpb24gMjcx
MTU3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJBUElVSUNsaWVudC5oIgogI2lt
cG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1w
b3J0IDx3dGYvV2Vha1B0ci5oPgogCiBAY2xhc3MgX1dLQWN0aXZhdGVkRWxlbWVudEluZm87CiBA
Y2xhc3MgV0tXZWJWaWV3OwpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBSZWdpc3RyYWJsZURvbWFp
bjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFVJRGVsZWdhdGUgeworY2xhc3MgVUlE
ZWxlZ2F0ZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxVSURlbGVnYXRlPiB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlEZWxlZ2F0ZShXS1dl
YlZpZXcgKik7CkBAIC03Miw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEFQSTo6Q29u
dGV4dE1lbnVDbGllbnQKICAgICAgICAgdm9pZCBtZW51RnJvbVByb3Bvc2VkTWVudShXZWJQYWdl
UHJveHkmLCBOU01lbnUgKiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBBUEk6Ok9iamVj
dCosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmV0YWluUHRyPE5TTWVudT4mJik+JiYpIG92ZXJy
aWRlOwogCi0gICAgICAgIFVJRGVsZWdhdGUmIG1fdWlEZWxlZ2F0ZTsKKyAgICAgICAgV2Vha1B0
cjxVSURlbGVnYXRlPiBtX3VpRGVsZWdhdGU7CiAgICAgfTsKICNlbmRpZgogCkBAIC0xMzEsNyAr
MTMyLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQogICAgICAg
ICB2b2lkIHNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgRnJhbWVJbmZvRGF0YSYmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBmaW5hbDsKICNlbmRpZgotICAgICAgICBib29sIG5l
ZWRzRm9udEF0dHJpYnV0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOyB9CisgICAgICAg
IGJvb2wgbmVlZHNGb250QXR0cmlidXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdWlEZWxl
Z2F0ZSA/IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENoYW5nZUZv
bnRBdHRyaWJ1dGVzIDogZmFsc2U7IH0KICAgICAgICAgdm9pZCBkaWRDaGFuZ2VGb250QXR0cmli
dXRlcyhjb25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYpIGZpbmFsOwogICAgICAgICB2b2lk
IGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYs
IFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgQVBJOjpTZWN1cml0eU9yaWdp
biYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKSBmaW5hbDsKICAgICAgICAgdm9p
ZCBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5JiwgV2ViRnJh
bWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNl
ck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmKSBmaW5hbDsKQEAgLTE2MywxMCArMTY0LDEwIEBA
IHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JTcGVlY2hSZWNv
Z25pdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmln
aW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBmaW5hbDsKIAotICAgICAgICBV
SURlbGVnYXRlJiBtX3VpRGVsZWdhdGU7CisgICAgICAgIFdlYWtQdHI8VUlEZWxlZ2F0ZT4gbV91
aURlbGVnYXRlOwogICAgIH07CiAKLSAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKKyAgICBXZWFr
T2JqQ1B0cjxXS1dlYlZpZXc+IG1fd2ViVmlldzsKICAgICBXZWFrT2JqQ1B0cjxpZCA8V0tVSURl
bGVnYXRlPiA+IG1fZGVsZWdhdGU7CiAKICAgICBzdHJ1Y3QgewpJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCShyZXZpc2lvbiAyNzExNTcpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBVSURlbGVnYXRlOjpzZXREZWxlZ2F0ZShpZCA8V0tV
SURlbAogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBVSURlbGVnYXRlOjpDb250ZXh0TWVu
dUNsaWVudDo6Q29udGV4dE1lbnVDbGllbnQoVUlEZWxlZ2F0ZSYgdWlEZWxlZ2F0ZSkKLSAgICA6
IG1fdWlEZWxlZ2F0ZSh1aURlbGVnYXRlKQorICAgIDogbV91aURlbGVnYXRlKG1ha2VXZWFrUHRy
KHVpRGVsZWdhdGUpKQogewogfQogCkBAIC0xOTcsMjAgKzE5NywyMyBAQCBVSURlbGVnYXRlOjpD
b250ZXh0TWVudUNsaWVudDo6fkNvbnRleHRNCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6Q29udGV4dE1l
bnVDbGllbnQ6Om1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYsIE5TTWVudSAqbWVu
dSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBBUEk6Ok9iamVjdCogdXNlckluZm8sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmV0YWluUHRyPE5TTWVudT4mJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0NvbnRleHRNZW51Rm9yRWxlbWVudAotICAgICAgICAmJiAhbV91aURlbGVnYXRlLm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVsZW1lbnRVc2VySW5mbwotICAgICAgICAm
JiAhbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdHZXRDb250ZXh0TWVudUZy
b21Qcm9wb3NlZE1lbnVGb3JFbGVtZW50VXNlckluZm9Db21wbGV0aW9uSGFuZGxlcikKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1lbnUp
OwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29udGV4dE1l
bnVGb3JFbGVtZW50CisgICAgICAgICYmICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdDb250ZXh0TWVudUZvckVsZW1lbnRVc2VySW5mbworICAgICAgICAmJiAhbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9z
ZWRNZW51Rm9yRWxlbWVudFVzZXJJbmZvQ29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcihtZW51KTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1lbnUpOwogCiAgICAgYXV0byBjb250ZXh0TWVudUVsZW1l
bnRJbmZvID0gYWRvcHROUyhbW19XS0NvbnRleHRNZW51RWxlbWVudEluZm8gYWxsb2NdIGluaXRd
KTsKIAotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0dldENv
bnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUZvckVsZW1lbnRVc2VySW5mb0NvbXBsZXRpb25IYW5k
bGVyKSB7CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0dl
dENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUZvckVsZW1lbnRVc2VySW5mb0NvbXBsZXRpb25I
YW5kbGVyKSB7CiAgICAgICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENo
ZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmdldENvbnRl
eHRNZW51RnJvbVByb3Bvc2VkTWVudTpmb3JFbGVtZW50OnVzZXJJbmZvOmNvbXBsZXRpb25IYW5k
bGVyOikpOwotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVu
dTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSB1c2VySW5mbzp1
c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFw
cGVyKCkpIDogbmlsIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hl
Y2tlcildIChOU01lbnUgKm1lbnUpIG11dGFibGUgeworICAgICAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSBnZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnU6bWVudSBmb3JFbGVtZW50OmNv
bnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCkgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2Fz
dDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbCBjb21wbGV0
aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoTlNNZW51ICptZW51
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhh
c0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBjaGVj
a2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTIyMCwxNiArMjIzLDE2IEBAIHZv
aWQgVUlEZWxlZ2F0ZTo6Q29udGV4dE1lbnVDbGllbnQ6Om1lbnUKICAgICB9CiAgICAgCiAgICAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBpZiAobV91aURlbGVnYXRl
Lm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVsZW1lbnQpCi0gICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbnRleHRNZW51Om1lbnUgZm9y
RWxlbWVudDpjb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXSk7CisgICAgaWYgKG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRNZW51Rm9yRWxlbWVudCkKKyAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNv
bnRleHRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXSk7
CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbnRleHRNZW51Om1lbnUgZm9y
RWxlbWVudDpjb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8g
c3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBu
aWxdKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjb250
ZXh0TWVudTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSB1c2Vy
SW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZv
LT53cmFwcGVyKCkpIDogbmlsXSk7CiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNf
RU5ECiB9CiAjZW5kaWYKIAogVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OlVJQ2xpZW50KFVJRGVsZWdh
dGUmIHVpRGVsZWdhdGUpCi0gICAgOiBtX3VpRGVsZWdhdGUodWlEZWxlZ2F0ZSkKKyAgICA6IG1f
dWlEZWxlZ2F0ZShtYWtlV2Vha1B0cih1aURlbGVnYXRlKSkKIHsKIH0KIApAQCAtMjM5LDE4ICsy
NDIsMjEgQEAgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6On5VSUNsaWVudCgpCiAKIHZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJD
b3JlOjpXaW5kb3dGZWF0dXJlcyYmIHdpbmRvd0ZlYXR1cmVzLCBSZWY8QVBJOjpOYXZpZ2F0aW9u
QWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRy
PFdlYlBhZ2VQcm94eT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGlmICghbV91aURlbGVn
YXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CisKKyAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIEFTU0VS
VChkZWxlZ2F0ZSk7CiAKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFttX3VpRGVs
ZWdhdGUubV93ZWJWaWV3LT5fY29uZmlndXJhdGlvbiBjb3B5XSk7Ci0gICAgW2NvbmZpZ3VyYXRp
b24gX3NldFJlbGF0ZWRXZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIGF1dG8g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW21fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLT5f
Y29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldFJlbGF0ZWRXZWJW
aWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIAogICAgIGF1dG8gYXBp
V2luZG93RmVhdHVyZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVhdGUod2luZG93RmVhdHVy
ZXMpOwogCi0gICAgaWYgKG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q3Jl
YXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uRm9yTmF2aWdhdGlvbkFjdGlvbldpbmRvd0ZlYXR1
cmVzQXN5bmMpIHsKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3Q3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uRm9yTmF2aWdhdGlvbkFjdGlvbldpbmRv
d0ZlYXR1cmVzQXN5bmMpIHsKICAgICAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRs
ZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6
Y3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmZvck5hdmlnYXRpb25BY3Rpb246d2luZG93
RmVhdHVyZXM6Y29tcGxldGlvbkhhbmRsZXI6KSk7CiAKLSAgICAgICAgWyhpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBjcmVh
dGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBmb3JOYXZpZ2F0
aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgd2luZG93RmVhdHVyZXM6d3JhcHBl
cihhcGlXaW5kb3dGZWF0dXJlcykgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKSwgcmVsYXRlZFdlYlZpZXcgPSBSZXRhaW5QdHI8V0tXZWJWaWV3PihtX3Vp
RGVsZWdhdGUubV93ZWJWaWV3KV0gKFdLV2ViVmlldyAqd2ViVmlldykgbXV0YWJsZSB7CisgICAg
ICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlv
bjpjb25maWd1cmF0aW9uLmdldCgpIGZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0
aW9uQWN0aW9uKSB3aW5kb3dGZWF0dXJlczp3cmFwcGVyKGFwaVdpbmRvd0ZlYXR1cmVzKSBjb21w
bGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCByZWxhdGVkV2Vi
VmlldyA9IG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpXSAoV0tXZWJWaWV3ICp3ZWJWaWV3
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhh
c0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBjaGVj
a2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTI2NywzMyArMjczLDM2IEBAIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UKICAgICAgICAgfSkuZ2V0KCld
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb25Gb3JOYXZpZ2F0
aW9uQWN0aW9uV2luZG93RmVhdHVyZXMpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb25Gb3JOYXZpZ2F0
aW9uQWN0aW9uV2luZG93RmVhdHVyZXMpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cihudWxscHRyKTsKIAotICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBbZGVsZWdh
dGUgd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNyZWF0ZVdlYlZpZXdXaXRoQ29uZmln
dXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihu
YXZpZ2F0aW9uQWN0aW9uKSB3aW5kb3dGZWF0dXJlczp3cmFwcGVyKGFwaVdpbmRvd0ZlYXR1cmVz
KV07CisgICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IFtkZWxlZ2F0ZSB3ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNyZWF0ZVdlYlZpZXdXaXRoQ29u
ZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBl
cihuYXZpZ2F0aW9uQWN0aW9uKSB3aW5kb3dGZWF0dXJlczp3cmFwcGVyKGFwaVdpbmRvd0ZlYXR1
cmVzKV07CiAgICAgaWYgKCF3ZWJWaWV3KQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIobnVsbHB0cik7CiAKLSAgICBpZiAoW3dlYlZpZXctPl9jb25maWd1cmF0aW9uIF9yZWxhdGVk
V2ViVmlld10gIT0gbV91aURlbGVnYXRlLm1fd2ViVmlldykKKyAgICBpZiAoW3dlYlZpZXcuZ2V0
KCktPl9jb25maWd1cmF0aW9uIF9yZWxhdGVkV2ViVmlld10gIT0gbV91aURlbGVnYXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkpCiAgICAgICAgIFtOU0V4Y2VwdGlvbiByYWlzZTpOU0ludGVybmFs
SW5jb25zaXN0ZW5jeUV4Y2VwdGlvbiBmb3JtYXQ6QCJSZXR1cm5lZCBXS1dlYlZpZXcgd2FzIG5v
dCBjcmVhdGVkIHdpdGggdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24uIl07CiAgICAgY29tcGxldGlv
bkhhbmRsZXIod2ViVmlldy0+X3BhZ2UuZ2V0KCkpOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6
OlN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUlu
Zm8sIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuSmF2YVNjcmlwdEFsZXJ0UGFu
ZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgeworICAgIGlm
ICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKKwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuSmF2YVNj
cmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxl
cikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAg
aWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxs
Q2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3Iod2ViVmlldzpydW5KYXZh
U2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhh
bmRsZXI6KSk7Ci0gICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBy
dW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFt
ZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFn
ZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIHsK
KyAgICBbZGVsZWdhdGUgd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KSBydW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlG
cmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAm
cGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcild
IHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwpAQCAt
MzAzLDE5ICszMTIsMjIgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlw
dAogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShXZWJQ
YWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5
KiB3ZWJGcmFtZVByb3h5LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBGdW5jdGlvbjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3Nh
Z2VJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGlm
ICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuSmF2YVNjcmlwdENv
bmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAg
IGlmICghZGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRs
ZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3Iod2ViVmlldzpy
dW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21w
bGV0aW9uSGFuZGxlcjopKTsKLSAgICBbZGVsZWdhdGUgd2ViVmlldzptX3VpRGVsZWdhdGUubV93
ZWJWaWV3IHJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZTptZXNzYWdlIGluaXRp
YXRlZEJ5RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJ
bmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNo
ZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgeworICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJ1bkphdmFTY3JpcHRDb25maXJtUGFu
ZWxXaXRoTWVzc2FnZTptZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1l
SW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUg
ewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7
CkBAIC0zMjUsMTkgKzMzNywyMiBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZh
U2NyaXB0CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQo
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgY29uc3QgV1RG
OjpTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV2ViRnJhbWVQcm94eSosIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoY29uc3QgV1RGOjpTdHJpbmcmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3UnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdERlZmF1bHRUZXh0SW5pdGlh
dGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworCisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0VGV4dElucHV0UGFu
ZWxXaXRoUHJvbXB0RGVmYXVsdFRleHRJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIp
IHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RyaW5nKCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdl
dCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihTdHJpbmco
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0
aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3
ZWJWaWV3OnJ1bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHQ6ZGVmYXVsdFRleHQ6
aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbZGVsZWdhdGUgd2Vi
VmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdp
dGhQcm9tcHQ6bWVzc2FnZSBkZWZhdWx0VGV4dDpkZWZhdWx0VmFsdWUgaW5pdGlhdGVkQnlGcmFt
ZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFn
ZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChO
U1N0cmluZyAqcmVzdWx0KSBtdXRhYmxlIHsKKyAgICBbZGVsZWdhdGUgd2ViVmlldzptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBydW5KYXZhU2NyaXB0VGV4dElucHV0UGFuZWxX
aXRoUHJvbXB0Om1lc3NhZ2UgZGVmYXVsdFRleHQ6ZGVmYXVsdFZhbHVlIGluaXRpYXRlZEJ5RnJh
bWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBh
Z2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAo
TlNTdHJpbmcgKnJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0
aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKQEAgLTM0Nyw3ICszNjIsMTAgQEAgdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdAogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xp
ZW50OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc0NvbmZpcm0oV2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJv
eHksIFdlYkZyYW1lUHJveHkqLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgcmVx
dWVzdGluZ0RvbWFpbiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4mIGN1cnJlbnRE
b21haW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzU2LDIwICszNzQsMjAgQEAgdm9pZCBVSURlbGVn
YXRlOjpVSUNsaWVudDo6cmVxdWVzdFN0b3JhZwogICAgIC8vIFNvbWUgc2l0ZXMgaGF2ZSBxdWly
a3Mgd2hlcmUgbXVsdGlwbGUgbG9naW4gZG9tYWlucyByZXF1aXJlIHN0b3JhZ2UgYWNjZXNzLgog
ICAgIGlmIChhdXRvIGFkZGl0aW9uYWxMb2dpbkRvbWFpbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9y
YWdlU2Vzc2lvbjo6ZmluZEFkZGl0aW9uYWxMb2dpbkRvbWFpbihjdXJyZW50RG9tYWluLCByZXF1
ZXN0aW5nRG9tYWluKSkgewogI2lmICFQTEFURk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQ
TEVUVikKLSAgICAgICAgcHJlc2VudFN0b3JhZ2VBY2Nlc3NBbGVydFF1aXJrKG1fdWlEZWxlZ2F0
ZS5tX3dlYlZpZXcsIHJlcXVlc3RpbmdEb21haW4sICphZGRpdGlvbmFsTG9naW5Eb21haW4sIGN1
cnJlbnREb21haW4sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcHJlc2Vu
dFN0b3JhZ2VBY2Nlc3NBbGVydFF1aXJrKG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpLCByZXF1ZXN0aW5nRG9tYWluLCAqYWRkaXRpb25hbExvZ2luRG9tYWluLCBjdXJyZW50RG9t
YWluLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdSZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsVW5kZXJGaXJzdFBhcnR5Q29tcGxldGlvbkhhbmRs
ZXIpIHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Jl
cXVlc3RTdG9yYWdlQWNjZXNzUGFuZWxVbmRlckZpcnN0UGFydHlDb21wbGV0aW9uSGFuZGxlcikg
ewogI2lmICFQTEFURk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQTEVUVikKLSAgICAgICAg
cHJlc2VudFN0b3JhZ2VBY2Nlc3NBbGVydChtX3VpRGVsZWdhdGUubV93ZWJWaWV3LCByZXF1ZXN0
aW5nRG9tYWluLCBjdXJyZW50RG9tYWluLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgICAgIHByZXNlbnRTdG9yYWdlQWNjZXNzQWxlcnQobV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCksIHJlcXVlc3RpbmdEb21haW4sIGN1cnJlbnREb21haW4sIFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
YXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVn
YXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NQYW5lbEZv
ckRvbWFpbjp1bmRlckN1cnJlbnREb21haW46Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgWyhp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1f
d2ViVmlldyByZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsRm9yRG9tYWluOnJlcXVlc3RpbmdEb21h
aW4uc3RyaW5nKCkgdW5kZXJDdXJyZW50RG9tYWluOmN1cnJlbnREb21haW4uc3RyaW5nKCkgY29t
cGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVz
dWx0KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZXF1ZXN0U3RvcmFn
ZUFjY2Vzc1BhbmVsRm9yRG9tYWluOnJlcXVlc3RpbmdEb21haW4uc3RyaW5nKCkgdW5kZXJDdXJy
ZW50RG9tYWluOmN1cnJlbnREb21haW4uc3RyaW5nKCkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwpAQCAtMzc5
LDE1ICszOTcsMTggQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFN0b3JhZwog
CiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBl
cm1pc3Npb25SZXF1ZXN0KFdlYktpdDo6V2ViUGFnZVByb3h5JiBwYWdlLCBXZWJLaXQ6OldlYkZy
YW1lUHJveHkmIGZyYW1lLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIEZ1bmN0aW9u
PHZvaWQoYm9vbCk+JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZv
ckZyYW1lRGVjaXNpb25IYW5kbGVyKQotICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RHZW9sb2Nh
dGlvblBlcm1pc3Npb25Gb3JGcmFtZURlY2lzaW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0
ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAKICAgICBhdXRvIGNo
ZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0
KCksIEBzZWxlY3Rvcihfd2ViVmlldzpyZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJh
bWU6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcmVxdWVzdEdlb2xvY2F0aW9u
UGVybWlzc2lvbkZvckZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShGcmFtZUlu
Zm9EYXRhIHsgZnJhbWVJbmZvIH0sICZwYWdlKSkgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0
cihbY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBu
dWxscHRyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlz
c2lvbkZvckZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShGcmFtZUluZm9EYXRh
IHsgZnJhbWVJbmZvIH0sICZwYWdlKSkgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRy
KSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CiAg
ICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5k
bGVyKCk7CkBAIC0zOTcsMzYgKzQxOCw0NCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpk
ZWNpZGVQb2xpY3lGCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZFJlc2lnbklucHV0
RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFyYW5jZShXZWJQYWdlUHJveHkmLCBBUEk6Ok9iamVj
dCogdXNlckluZm8pCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFyYW5jZVdpdGhV
c2VySW5mbykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUmVzaWduSW5wdXRF
bGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNlV2l0aFVzZXJJbmZvKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7
CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGRpZFJl
c2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFyYW5jZVdpdGhVc2VySW5mbzp1c2Vy
SW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVy
KCkpIDogbmlsXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRSZXNpZ25JbnB1dEVs
ZW1lbnRTdHJvbmdQYXNzd29yZEFwcGVhcmFuY2VXaXRoVXNlckluZm86dXNlckluZm8gPyBzdGF0
aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF07
CiB9CiAKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNhblJ1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2VJbml0aWF0
ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXI7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUluaXRp
YXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcjsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29u
c3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqLCBGcmFtZUluZm9EYXRhJiYg
ZnJhbWVJbmZvLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFu
ZGxlcikgeworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUluaXRpYXRl
ZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1
dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0
ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdp
dGhNZXNzYWdlOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgWyhp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1f
d2ViVmlldyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWxXaXRoTWVzc2FnZTptZXNzYWdlIGlu
aXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJh
bWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3Zl
KGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5p
dGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFt
ZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUo
Y2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5j
b21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKQEAgLTQzNiwyNiArNDY1LDI4IEBAIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkJlZm9yZVVubG8KIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1l
UHJveHkqLCBBUEk6OlNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgV1RGOjpT
dHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9y
aWdpblVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFVzYWdlLCB1bnNpZ25lZCBsb25n
IGxvbmcgZXhwZWN0ZWRVc2FnZSwgRnVuY3Rpb248dm9pZCAodW5zaWduZWQgbG9uZyBsb25nKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luQ3VycmVu
dFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdl
RGVjaXNpb25IYW5kbGVyICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlO
YW1lQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBl
Y3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyKSB7CisgICAgLy8gVXNlIDUwIE1CIGFzIHRoZSBkZWZh
dWx0IGRhdGFiYXNlIHF1b3RhLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UGVyT3Jp
Z2luRGF0YWJhc2VRdW90YSA9IDUwICogMTAyNCAqIDEwMjQ7CiAKLSAgICAgICAgLy8gVXNlIDUw
IE1CIGFzIHRoZSBkZWZhdWx0IGRhdGFiYXNlIHF1b3RhLgotICAgICAgICB1bnNpZ25lZCBsb25n
IGxvbmcgZGVmYXVsdFBlck9yaWdpbkRhdGFiYXNlUXVvdGEgPSA1MCAqIDEwMjQgKiAxMDI0Owor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
ZGVmYXVsdFBlck9yaWdpbkRhdGFiYXNlUXVvdGEpOworICAgIGlmICghbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3Jp
Z2luQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBl
Y3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyICYmICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5EYXRhYmFzZU5h
bWVEaXNwbGF5TmFtZUN1cnJlbnRRdW90YUN1cnJlbnRPcmlnaW5Vc2FnZUN1cnJlbnREYXRhYmFz
ZVVzYWdlRXhwZWN0ZWRVc2FnZURlY2lzaW9uSGFuZGxlcikgewogCiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGRlZmF1bHRQZXJPcmlnaW5EYXRhYmFzZVF1b3RhKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVu
dFF1b3RhKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGVmYXVsdFBlck9yaWdpbkRhdGFi
YXNlUXVvdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUKHNlY3VyaXR5
T3JpZ2luKTsKIAotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlO
YW1lQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBl
Y3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyKSB7CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRh
dGFiYXNlTmFtZURpc3BsYXlOYW1lQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVu
dERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyKSB7CiAgICAgICAgIGF1
dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0
ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjpkYXRhYmFzZU5hbWU6ZGlzcGxheU5hbWU6Y3VycmVudFF1b3RhOmN1cnJlbnRPcmln
aW5Vc2FnZTpjdXJyZW50RGF0YWJhc2VVc2FnZTpleHBlY3RlZFVzYWdlOmRlY2lzaW9uSGFuZGxl
cjopKTsKLSAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlP
cmlnaW46d3JhcHBlcigqc2VjdXJpdHlPcmlnaW4pIGRhdGFiYXNlTmFtZTpkYXRhYmFzZU5hbWUg
ZGlzcGxheU5hbWU6ZGlzcGxheU5hbWUgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50
T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJl
bnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
Y2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkg
eworICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVEYXRhYmFzZVF1b3RhRm9y
U2VjdXJpdHlPcmlnaW46d3JhcHBlcigqc2VjdXJpdHlPcmlnaW4pIGRhdGFiYXNlTmFtZTpkYXRh
YmFzZU5hbWUgZGlzcGxheU5hbWU6ZGlzcGxheU5hbWUgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90
YSBjdXJyZW50T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVz
YWdlOmN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5k
bGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBu
ZXdRdW90YSkgewogICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFz
QmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNr
ZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtNDY1LDcgKzQ5Niw3IEBAIHZvaWQg
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmV4Y2VlZGVkRGF0YWIKICAgICB9CiAKICAgICBhdXRvIGNo
ZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0
KCksIEBzZWxlY3Rvcihfd2ViVmlldzpkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmln
aW46Y3VycmVudFF1b3RhOmN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50RGF0YWJhc2VVc2FnZTpl
eHBlY3RlZFVzYWdlOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGRlY2lkZURh
dGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0eU9yaWdpbikgY3Vy
cmVudFF1b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVz
YWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVj
dGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcild
KHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0
eU9yaWdpbikgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6Y3Vy
cmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJlbnRVc2FnZSBleHBlY3Rl
ZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1v
dmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgewogICAgICAgICBpZiAo
Y2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAt
NDg3LDE0ICs1MTgsMTcgQEAgc3RhdGljIGlubGluZSBfV0tGb2N1c0RpcmVjdGlvbiB0b1dLRm9j
dQogCiBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp0YWtlRm9jdXMoV2ViUGFnZVByb3h5Kiwg
V0tGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Rha2VGb2N1cykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdUYWtlRm9jdXMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAK
LSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyB0
YWtlRm9jdXM6dG9XS0ZvY3VzRGlyZWN0aW9uKGRpcmVjdGlvbildOworICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIHRha2VGb2N1czp0b1dLRm9jdXNEaXJlY3Rpb24oZGlyZWN0aW9uKV07CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTUyOSwxMTYgKzU2MywxNDYgQEAgc3RhdGljIF9XS0F1
dG9wbGF5RXZlbnQgdG9XS0F1dG9wbGF5RXZlbgogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpoYW5kbGVBdXRvcGxheUV2ZW50KFdlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OkF1dG9wbGF5RXZl
bnQgZXZlbnQsIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxheUV2ZW50RmxhZ3M+IGZsYWdzKQog
ewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdIYW5kbGVB
dXRvcGxheUV2ZW50V2l0aEZsYWdzKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0hhbmRsZUF1dG9wbGF5RXZlbnRXaXRoRmxhZ3MpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBoYW5kbGVBdXRv
cGxheUV2ZW50OnRvV0tBdXRvcGxheUV2ZW50KGV2ZW50KSB3aXRoRmxhZ3M6dG9XS0F1dG9wbGF5
RXZlbnRGbGFncyhmbGFncyldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGhhbmRsZUF1
dG9wbGF5RXZlbnQ6dG9XS0F1dG9wbGF5RXZlbnQoZXZlbnQpIHdpdGhGbGFnczp0b1dLQXV0b3Bs
YXlFdmVudEZsYWdzKGZsYWdzKV07CiB9CiAKICNpZiBQTEFURk9STShNQUMpCiBib29sIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpjYW5SdW5Nb2RhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuTW9kYWw7CisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5Nb2RhbDsKIH0KIAogdm9pZCBVSURlbGVn
YXRlOjpVSUNsaWVudDo6cnVuTW9kYWwoV2ViUGFnZVByb3h5JikKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuTW9kYWwpCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuTW9kYWwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
PilkZWxlZ2F0ZSBfd2ViVmlld1J1bk1vZGFsOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3UnVuTW9kYWw6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiBmbG9hdCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6aGVhZGVySGVpZ2h0KFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIHdl
YkZyYW1lUHJveHkpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0hlYWRlckhlaWdodCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0hlYWRlckhlaWdodCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3SGVhZGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOwor
ICAgIHJldHVybiBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0hl
YWRlckhlaWdodDptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIGZs
b2F0IFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5JiwgV2Vi
RnJhbWVQcm94eSYpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0Zvb3RlckhlaWdodCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0Zvb3RlckhlaWdodCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Rm9vdGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOwor
ICAgIHJldHVybiBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Zv
b3RlckhlaWdodDptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRyYXdIZWFkZXIoV2ViUGFnZVByb3h5JiwgV2ViRnJh
bWVQcm94eSYgZnJhbWUsIFdlYkNvcmU6OkZsb2F0UmVjdCYmIHJlY3QpCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RyYXdIZWFkZXJJblJlY3RGb3JQ
YWdlV2l0aFRpdGxlVVJMKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RyYXdI
ZWFkZXJJblJlY3RGb3JQYWdlV2l0aFRpdGxlVVJMKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1
dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFk
ZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZHJhd0hlYWRl
ckluUmVjdDpyZWN0IGZvclBhZ2VXaXRoVGl0bGU6ZnJhbWUudGl0bGUoKSBVUkw6ZnJhbWUudXJs
KCldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRyYXdIZWFkZXJJblJlY3Q6cmVjdCBm
b3JQYWdlV2l0aFRpdGxlOmZyYW1lLnRpdGxlKCkgVVJMOmZyYW1lLnVybCgpXTsKIH0KIAogdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkmLCBXZWJGcmFt
ZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkKIHsKLSAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RHJhd0Zvb3RlckluUmVjdEZvclBh
Z2VXaXRoVGl0bGVVUkwpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RHJhd0Zv
b3RlckluUmVjdEZvclBhZ2VXaXRoVGl0bGVVUkwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkcmF3Rm9vdGVy
SW5SZWN0OnJlY3QgZm9yUGFnZVdpdGhUaXRsZTpmcmFtZS50aXRsZSgpIFVSTDpmcmFtZS51cmwo
KV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZHJhd0Zvb3RlckluUmVjdDpyZWN0IGZv
clBhZ2VXaXRoVGl0bGU6ZnJhbWUudGl0bGUoKSBVUkw6ZnJhbWUudXJsKCldOwogfQogCiB2b2lk
IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwYWdlRGlkU2Nyb2xsKFdlYlBhZ2VQcm94eSopCiB7Ci0g
ICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFNjcm9sbCkK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTY3JvbGwpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUu
Z2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdEaWRTY3JvbGw6bV91aURlbGVn
YXRlLm1fd2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUg
X3dlYlZpZXdEaWRTY3JvbGw6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwog
fQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpmb2N1cyhXZWJQYWdlUHJveHkqKQogewot
ICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLmZvY3VzV2ViVmlldykKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLmZvY3VzV2ViVmlldykKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAg
IGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfZm9jdXNXZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF9mb2N1c1dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50Ojp1bmZvY3VzKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMudW5mb2N1c1dlYlZpZXcpCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlTWV0aG9kcy51bmZvY3VzV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfdW5mb2N1c1dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107Cisg
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3VuZm9jdXNXZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogc3RhdGljIF9XS1BsdWdJ
blVuYXZhaWxhYmlsaXR5UmVhc29uIHRvV0tQbHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvbihXS1Bs
dWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHJlYXNvbikKQEAgLTY1NywxNCArNzIxLDE3IEBAIHN0
YXRpYyBfV0tQbHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvbiB0b1cKICAgICAKIHZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OnVuYXZhaWxhYmxlUGx1Z2luQnV0dG9uQ2xpY2tlZChXZWJQYWdlUHJv
eHkmLCBXS1BsdWdpblVuYXZhaWxhYmlsaXR5UmVhc29uIHJlYXNvbiwgQVBJOjpEaWN0aW9uYXJ5
JiBwbHVnSW5JbmZvKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdVbmF2YWlsYWJsZVBsdWdJbkJ1dHRvbkNsaWNrZWQpCisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3VW5hdmFpbGFibGVQbHVnSW5CdXR0b25DbGlja2VkKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVn
YXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUu
Z2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWyhpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2Vi
VmlldyB1bmF2YWlsYWJsZVBsdWdJbkJ1dHRvbkNsaWNrZWRXaXRoUmVhc29uOnRvV0tQbHVnSW5V
bmF2YWlsYWJpbGl0eVJlYXNvbihyZWFzb24pIHBsdWdJbkluZm86d3JhcHBlcihwbHVnSW5JbmZv
KV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgdW5hdmFpbGFibGVQbHVnSW5CdXR0b25D
bGlja2VkV2l0aFJlYXNvbjp0b1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb24ocmVhc29uKSBw
bHVnSW5JbmZvOndyYXBwZXIocGx1Z0luSW5mbyldOwogfQogICAgIAogc3RhdGljIF9XS1Jlc291
cmNlTGltaXQgdG9XS1Jlc291cmNlTGltaXQoV0tSZXNvdXJjZUxpbWl0IGxpbWl0KQpAQCAtNjgx
LDYyICs3NDgsNzcgQEAgc3RhdGljIF9XS1Jlc291cmNlTGltaXQgdG9XS1Jlc291cmNlTGltaQog
CiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VM
aW1pdFdoaWxlSW5Gb3JlZ3JvdW5kKFdlYlBhZ2VQcm94eSYsIFdLUmVzb3VyY2VMaW1pdCBsaW1p
dCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
RXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRXaGlsZUluRm9yZWdyb3VuZCkKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VMaW1p
dFdoaWxlSW5Gb3JlZ3JvdW5kKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGRpZEV4Y2Vl
ZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQ6dG9XS1Jlc291cmNlTGlt
aXQobGltaXQpXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihk
ZWxlZ2F0ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlk
RXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRXaGlsZUluRm9yZWdyb3VuZDp0b1dLUmVzb3Vy
Y2VMaW1pdChsaW1pdCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWROb3RI
YW5kbGVXaGVlbEV2ZW50KFdlYlBhZ2VQcm94eSosIGNvbnN0IE5hdGl2ZVdlYldoZWVsRXZlbnQm
IGV2ZW50KQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEaWROb3RIYW5kbGVXaGVlbEV2ZW50KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RpZE5vdEhhbmRsZVdoZWVsRXZlbnQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVn
YXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkaWROb3RIYW5kbGVX
aGVlbEV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKV07CiB9CiAKIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNldElzUmVzaXphYmxlKFdlYktpdDo6V2ViUGFnZVBy
b3h5JiwgYm9vbCByZXNpemFibGUpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1NldFJlc2l6YWJsZSkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdTZXRSZXNpemFibGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVs
ZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBzZXRSZXNpemFibGU6cmVzaXph
YmxlXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBzZXRSZXNpemFibGU6cmVzaXphYmxl
XTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6c2V0V2luZG93RnJhbWUoV2ViS2l0
OjpXZWJQYWdlUHJveHkmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIGZyYW1lKQogewotICAg
IGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTZXRXaW5kb3dGcmFt
ZSkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTZXRXaW5kb3dGcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IHNldFdpbmRvd0ZyYW1lOmZyYW1lXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSBzZXRXaW5kb3dGcmFtZTpmcmFtZV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OndpbmRvd0ZyYW1lKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChX
ZWJDb3JlOjpGbG9hdFJlY3QpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91
aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdHZXRXaW5kb3dGcmFtZVdpdGhDb21w
bGV0aW9uSGFuZGxlcikKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHsgfSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0dldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKQogICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICAgICAKLSAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICAgICAKLSAgICBbKGlkIDxXS1VJ
RGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3
IGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBs
ZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9y
KF93ZWJWaWV3OmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOikpXShDR1JlY3Qg
ZnJhbWUpIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBnZXRXaW5kb3dGcmFtZVdpdGhD
b21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVj
a2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpnZXRXaW5kb3dG
cmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQ0dSZWN0IGZyYW1lKSB7CiAgICAgICAgIGlm
IChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBA
IC03NDYsMjcgKzgyOCwzMyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp3aW5kb3dGcmFt
ZShXCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50
KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkhpdFRlc3RSZXN1bHREYXRhJiBkYXRhLCBPcHRpb25T
ZXQ8V2ViRXZlbnQ6Ok1vZGlmaWVyPiBtb2RpZmllcnMsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykK
IHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TW91c2VE
aWRNb3ZlT3ZlckVsZW1lbnRXaXRoRmxhZ3NVc2VySW5mbykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdNb3VzZURpZE1vdmVPdmVyRWxlbWVudFdpdGhGbGFnc1VzZXJJbmZvKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRv
IGFwaUhpdFRlc3RSZXN1bHQgPSBBUEk6OkhpdFRlc3RSZXN1bHQ6OmNyZWF0ZShkYXRhKTsKLSAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50OndyYXBwZXIoYXBpSGl0VGVzdFJl
c3VsdC5nZXQoKSkgd2l0aEZsYWdzOldlYkV2ZW50RmFjdG9yeTo6dG9OU0V2ZW50TW9kaWZpZXJG
bGFncyhtb2RpZmllcnMpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2Vj
dXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIG1vdXNlRGlkTW92ZU92ZXJFbGVtZW50OndyYXBwZXIoYXBpSGl0VGVzdFJl
c3VsdC5nZXQoKSkgd2l0aEZsYWdzOldlYkV2ZW50RmFjdG9yeTo6dG9OU0V2ZW50TW9kaWZpZXJG
bGFncyhtb2RpZmllcnMpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2Vj
dXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOwogfQogCiB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50Ojp0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rp
b248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0VG9vbGJhcnNBcmVWaXNpYmxlV2l0aENv
bXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4g
Y29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0dldFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFu
ZGxlcikKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwogICAgIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKICAgICAKLSAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IGdldFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjpt
YWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdh
dGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpnZXRUb29sYmFyc0FyZVZpc2libGVXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KSldKEJPT0wgdmlzaWJsZSkgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIGdldFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxv
Y2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNo
ZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0
KCksIEBzZWxlY3Rvcihfd2ViVmlldzpnZXRUb29sYmFyc0FyZVZpc2libGVXaXRoQ29tcGxldGlv
bkhhbmRsZXI6KSldKEJPT0wgdmlzaWJsZSkgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxl
dGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtNzc2LDUxICs4NjQsNjMg
QEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6dG9vbGJhcnNBcmVWaQogCiB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpkaWRDbGlja0F1dG9GaWxsQnV0dG9uKFdlYlBhZ2VQcm94eSYsIEFQ
STo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbldpdGhVc2VySW5mbykKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDbGlja0F1dG9GaWxsQnV0dG9uV2l0aFVz
ZXJJbmZvKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbldpdGhVc2VySW5m
bzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53
cmFwcGVyKCkpIDogbmlsXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRDbGlja0F1
dG9GaWxsQnV0dG9uV2l0aFVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2Vj
dXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOwogfQogCiB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpzaG93UGFnZShXZWJQYWdlUHJveHkqKQogewotICAgIGlmICghbV91
aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLnNob3dXZWJWaWV3KQorICAgIGlmICghbV91aURl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVN
ZXRob2RzLnNob3dXZWJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfc2hvd1dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgWyhpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3Nob3dXZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93
ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KICAgICAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV2ViUGFnZVByb3h5KiwgY29uc3QgV1RG
OjpTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYgZGF0YSkKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2F2ZURhdGFUb0ZpbGVTdWdn
ZXN0ZWRGaWxlbmFtZU1pbWVUeXBlT3JpZ2luYXRpbmdVUkwpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3U2F2ZURhdGFUb0ZpbGVTdWdnZXN0ZWRGaWxlbmFtZU1pbWVUeXBlT3Jp
Z2luYXRpbmdVUkwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHNhdmVEYXRhVG9GaWxlOndyYXBwZXIoZGF0YSkgc3Vn
Z2VzdGVkRmlsZW5hbWU6c3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6bWltZVR5cGUgb3JpZ2lu
YXRpbmdVUkw6b3JpZ2luYXRpbmdVUkxdOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHNh
dmVEYXRhVG9GaWxlOndyYXBwZXIoZGF0YSkgc3VnZ2VzdGVkRmlsZW5hbWU6c3VnZ2VzdGVkRmls
ZW5hbWUgbWltZVR5cGU6bWltZVR5cGUgb3JpZ2luYXRpbmdVUkw6b3JpZ2luYXRpbmdVUkxdOwog
fQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEFQSTo6U2VjdXJpdHlP
cmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1JlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uRm9yU2VjdXJpdHlPcmlnaW5EZWNp
c2lvbkhhbmRsZXIpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1JlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uRm9yU2VjdXJpdHlP
cmlnaW5EZWNpc2lvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KGZhbHNlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJlcXVlc3ROb3Rp
ZmljYXRpb25QZXJtaXNzaW9uRm9yU2VjdXJpdHlPcmlnaW46ZGVjaXNpb25IYW5kbGVyOikpOwot
ICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS5tX3dlYlZpZXcgcmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb25Gb3JTZWN1cml0eU9y
aWdpbjp3cmFwcGVyKHNlY3VyaXR5T3JpZ2luKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRy
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2Vy
ID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2Vi
Vmlldy5nZXQoKS5nZXQoKSByZXF1ZXN0Tm90aWZpY2F0aW9uUGVybWlzc2lvbkZvclNlY3VyaXR5
T3JpZ2luOndyYXBwZXIoc2VjdXJpdHlPcmlnaW4pIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQ
dHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNr
ZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBp
ZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpA
QCAtODMwLDQ2ICs5MzAsNTggQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9s
aWN5RgogCiBSZWY8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uPiBVSURlbGVnYXRlOjpVSUNs
aWVudDo6Y29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYklu
c3BlY3RvclByb3h5JiBpbnNwZWN0b3IpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0NvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcikKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIEFQSTo6SW5zcGVjdG9yQ29uZmlndXJh
dGlvbjo6Y3JlYXRlKCk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0NvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcikKICAgICAgICAgcmV0dXJu
IEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CiAKLSAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAg
ICAgICByZXR1cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKIAotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb24mPihbWyhpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2Vi
VmlldyBjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3I6d3JhcHBlcihpbnNwZWN0b3IpXSBf
YXBpT2JqZWN0XSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFQSTo6SW5zcGVjdG9yQ29uZmln
dXJhdGlvbiY+KFtbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjb25maWd1cmF0aW9uRm9yTG9jYWxJ
bnNwZWN0b3I6d3JhcHBlcihpbnNwZWN0b3IpXSBfYXBpT2JqZWN0XSk7CiB9CiAKIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEF0dGFjaExvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYs
IFdlYkluc3BlY3RvclByb3h5JiBpbnNwZWN0b3IpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEF0dGFjaExvY2FsSW5zcGVjdG9yKQorICAgIGlm
ICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRBdHRhY2hMb2NhbEluc3BlY3RvcikKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJW
aWV3IGRpZEF0dGFjaExvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVjdG9yKV07CisgICAgWyhp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5t
X3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkQXR0YWNoTG9jYWxJbnNwZWN0b3I6d3JhcHBlcihpbnNw
ZWN0b3IpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6d2lsbENsb3NlTG9jYWxJ
bnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yUHJveHkmIGluc3BlY3RvcikKIHsK
LSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2lsbENsb3Nl
TG9jYWxJbnNwZWN0b3IpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2lsbENs
b3NlTG9jYWxJbnNwZWN0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgd2lsbENsb3NlTG9jYWxJbnNwZWN0b3I6d3JhcHBl
cihpbnNwZWN0b3IpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSB3aWxsQ2xvc2VMb2Nh
bEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOwogfQogCiBib29sIFVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpydW5PcGVuUGFuZWwoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5KiB3
ZWJGcmFtZVByb3h5LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBBUEk6Ok9wZW5QYW5lbFBh
cmFtZXRlcnMqIG9wZW5QYW5lbFBhcmFtZXRlcnMsIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVy
UHJveHkqIGxpc3RlbmVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdSdW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyc0luaXRpYXRlZEJ5RnJhbWVDb21w
bGV0aW9uSGFuZGxlcikKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgp
OworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuT3Bl
blBhbmVsV2l0aFBhcmFtZXRlcnNJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCkBAIC04NzcsNyArOTg5LDcgQEAgYm9vbCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVu
T3BlblBhbmVsKAogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hl
Y2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3Iod2ViVmlldzpydW5PcGVuUGFu
ZWxXaXRoUGFyYW1ldGVyczppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOikpOwog
Ci0gICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBydW5PcGVuUGFu
ZWxXaXRoUGFyYW1ldGVyczp3cmFwcGVyKCpvcGVuUGFuZWxQYXJhbWV0ZXJzKSBpbml0aWF0ZWRC
eUZyYW1lOndyYXBwZXIoZnJhbWUpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hl
Y2tlciA9IFdURk1vdmUoY2hlY2tlciksIG9wZW5QYW5lbFBhcmFtZXRlcnMgPSBtYWtlUmVmKCpv
cGVuUGFuZWxQYXJhbWV0ZXJzKSwgbGlzdGVuZXIgPSBtYWtlUmVmUHRyKGxpc3RlbmVyKV0gKE5T
QXJyYXkgKlVSTHMpIG11dGFibGUgeworICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOndyYXBw
ZXIoKm9wZW5QYW5lbFBhcmFtZXRlcnMpIGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihmcmFtZSkg
Y29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2Vy
KSwgb3BlblBhbmVsUGFyYW1ldGVycyA9IG1ha2VSZWYoKm9wZW5QYW5lbFBhcmFtZXRlcnMpLCBs
aXN0ZW5lciA9IG1ha2VSZWZQdHIobGlzdGVuZXIpXSAoTlNBcnJheSAqVVJMcykgbXV0YWJsZSB7
CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25I
YW5kbGVyKCk7CkBAIC05MDEsMTcgKzEwMTMsMjAgQEAgYm9vbCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6cnVuT3BlblBhbmVsKAogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCiB2b2lkIFVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9u
QWNjZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5JiB3ZWJGcmFt
ZVByb3h5LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90
aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZURlY2lzaW9uSGFuZGxlcikgewotICAgICAgICBwcmVz
ZW50T3JpZW50YXRpb25BY2Nlc3NBbGVydChtX3VpRGVsZWdhdGUubV93ZWJWaWV3LCBmcmFtZUlu
Zm8uc2VjdXJpdHlPcmlnaW4uaG9zdCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdT
aG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFt
ZURlY2lzaW9uSGFuZGxlcikgeworICAgICAgICBwcmVzZW50T3JpZW50YXRpb25BY2Nlc3NBbGVy
dChtX3VpRGVsZWdhdGUtPm1fd2ViVmlldywgZnJhbWVJbmZvLnNlY3VyaXR5T3JpZ2luLmhvc3Qs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
ZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAKICAg
ICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVs
ZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpzaG91bGRBbGxvd0RldmljZU9yaWVudGF0
aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZTpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0g
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyBzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNz
UmVxdWVzdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShm
cmFtZUluZm8pLCAmcGFnZSkpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3Zl
KGNoZWNrZXIpXSAoQk9PTCBncmFudGVkKSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSBzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVz
dGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUlu
Zm8pLCAmcGFnZSkpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNr
ZXIpXSAoQk9PTCBncmFudGVkKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBs
ZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTkyMiwxNyArMTAzNywy
MyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRBbGxvd0RlCiAKIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzKGNvbnN0IFdlYkNvcmU6
OkZvbnRBdHRyaWJ1dGVzJiBmb250QXR0cmlidXRlcykKIHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0
ZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKCFuZWVkc0ZvbnRBdHRyaWJ1dGVzKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcHJpdmF0ZVVJRGVsZWdhdGUgPSAoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwotICAgIFtwcml2
YXRlVUlEZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGRpZENoYW5nZUZv
bnRBdHRyaWJ1dGVzOmZvbnRBdHRyaWJ1dGVzLmNyZWF0ZURpY3Rpb25hcnkoKS5nZXQoKV07Cisg
ICAgYXV0byBwcml2YXRlVUlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOworICAgIFtwcml2YXRlVUlEZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRDaGFuZ2VGb250QXR0
cmlidXRlczpmb250QXR0cmlidXRlcy5jcmVhdGVEaWN0aW9uYXJ5KCkuZ2V0KCldOwogfQogCiB2
b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdChXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6
OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFPcmlnaW4sIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHRv
cExldmVsT3JpZ2luLCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFByb3h5JiByZXF1ZXN0KQog
ewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgYXV0byBkZWxlZ2F0ZSA9IChpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSAo
aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAgIHJlcXVlc3QuZG9EZWZhdWx0QWN0aW9uKCk7
CiAgICAgICAgIHJldHVybjsKQEAgLTk3MywyMSArMTA5NCwyNCBAQCB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGCiAKICAgICAvLyBGSVhNRTogUHJvdmlkZSBhIHNwZWNp
ZmljIGRlbGVnYXRlIGZvciBkaXNwbGF5IGNhcHR1cmUuCiAgICAgaWYgKCFyZXF1ZXN0LnJlcXVp
cmVzRGlzcGxheUNhcHR1cmUoKSAmJiByZXNwb25kc1RvUmVxdWVzdE1lZGlhQ2FwdHVyZUF1dGhv
cml6YXRpb24pIHsKLSAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dl
YlZpZXcgcmVxdWVzdE1lZGlhQ2FwdHVyZUF1dGhvcml6YXRpb246ZGV2aWNlcyBkZWNpc2lvbkhh
bmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICAgICAgW2RlbGVnYXRlIF93ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlcXVlc3RNZWRpYUNhcHR1cmVB
dXRob3JpemF0aW9uOmRldmljZXMgZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQo
KV07CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBVUkwgcmVxdWVzdEZyYW1lVVJMIHsg
ZnJhbWUudXJsKCkgfTsKICAgICBVUkwgbWFpbkZyYW1lVVJMIHsgZnJhbWUucGFnZSgpLT5tYWlu
RnJhbWUoKS0+dXJsKCkgfTsKIAotICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUu
bV93ZWJWaWV3IHJlcXVlc3RVc2VyTWVkaWFBdXRob3JpemF0aW9uRm9yRGV2aWNlczpkZXZpY2Vz
IHVybDpyZXF1ZXN0RnJhbWVVUkwgbWFpbkZyYW1lVVJMOm1haW5GcmFtZVVSTCBkZWNpc2lvbkhh
bmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcmVxdWVzdFVzZXJNZWRpYUF1dGhvcml6
YXRpb25Gb3JEZXZpY2VzOmRldmljZXMgdXJsOnJlcXVlc3RGcmFtZVVSTCBtYWluRnJhbWVVUkw6
bWFpbkZyYW1lVVJMIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOwogI2Vu
ZGlmCiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1lZGlhUGVybWlz
c2lvbkZvck9yaWdpbihXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiB1c2VyTWVkaWFPcmlnaW4sIEFQSTo6U2VjdXJpdHlPcmlnaW4m
IHRvcExldmVsT3JpZ2luLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYgcmVxdWVzdCkK
IHsKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7Ci0g
ICAgaWYgKCFkZWxlZ2F0ZSB8fCAhbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdJc01lZGlhQ2FwdHVyZUF1dGhvcml6ZWRGb3JGcmFtZURlY2lzaW9uSGFuZGxlcikgeworICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOworICAgIGlmICghZGVsZWdhdGUgfHwg
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0lzTWVkaWFDYXB0dXJlQXV0
aG9yaXplZEZvckZyYW1lRGVjaXNpb25IYW5kbGVyKSB7CiAgICAgICAgIHJlcXVlc3Quc2V0VXNl
ck1lZGlhQWNjZXNzSW5mbyhmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDA0
LDcgKzExMjgsNyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjaGVja1VzZXJNZWRpCiAg
ICAgICAgICAgICBwcm90ZWN0ZWRSZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGluY2x1
ZGVTZW5zaXRpdmVEZXRhaWxzKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBp
bmNsdWRlU2Vuc2l0aXZlTWVkaWFEZXZpY2VEZXRhaWxzOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07
CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGluY2x1ZGVTZW5zaXRpdmVNZWRpYURl
dmljZURldGFpbHM6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMTAyMCwzMCArMTE0NCwzNiBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpj
aGVja1VzZXJNZWRpCiAgICAgVVJMIHJlcXVlc3RGcmFtZVVSTCB7IGZyYW1lLnVybCgpIH07CiAg
ICAgVVJMIG1haW5GcmFtZVVSTCB7IG1haW5GcmFtZS0+dXJsKCkgfTsKIAotICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXcgY2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yVVJMOnJlcXVlc3RGcmFtZVVSTCBtYWluRnJh
bWVVUkw6bWFpbkZyYW1lVVJMIGZyYW1lSWRlbnRpZmllcjpmcmFtZS5mcmFtZUlEKCkudG9VSW50
NjQoKSBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2Vi
Vmlldy5nZXQoKS5nZXQoKSBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JVUkw6cmVxdWVzdEZy
YW1lVVJMIG1haW5GcmFtZVVSTDptYWluRnJhbWVVUkwgZnJhbWVJZGVudGlmaWVyOmZyYW1lLmZy
YW1lSUQoKS50b1VJbnQ2NCgpIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCld
OwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjptZWRpYUNhcHR1cmVTdGF0ZURpZENo
YW5nZShXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3Mgc3RhdGUpCiB7Ci0g
ICAgV0tXZWJWaWV3ICp3ZWJWaWV3ID0gbV91aURlbGVnYXRlLm1fd2ViVmlldzsKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byB3ZWJWaWV3ID0gbV91
aURlbGVnYXRlLT5tX3dlYlZpZXc7CiAKICAgICBbd2ViVmlldyBkaWRDaGFuZ2VWYWx1ZUZvcktl
eTpAIm1lZGlhQ2FwdHVyZVN0YXRlIl07CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGUuZ2V0KCk7Ci0gICAgaWYgKCFkZWxlZ2F0ZSB8fCAhbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdNZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZSkKKyAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOworICAgIGlm
ICghZGVsZWdhdGUgfHwgIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld01l
ZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzp3ZWJWaWV3IG1lZGlhQ2FwdHVy
ZVN0YXRlRGlkQ2hhbmdlOnRvV0tNZWRpYUNhcHR1cmVTdGF0ZShzdGF0ZSldOworICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3OndlYlZpZXcuZ2V0KCkuZ2V0
KCkgbWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2U6dG9XS01lZGlhQ2FwdHVyZVN0YXRlKHN0YXRl
KV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlvbkNh
Y2hlT3JpZ2luUXVvdGEoV2ViUGFnZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW4mIHNlY3VyaXR5T3JpZ2luLCB1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IHRvdGFs
Qnl0ZXNOZWVkZWQsIEZ1bmN0aW9uPHZvaWQgKHVuc2lnbmVkIGxvbmcgbG9uZyk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5T3JpZ2luQ3Vy
cmVudFF1b3RhVG90YWxCeXRlc05lZWRlZCkgeworICAgIGlmICghbV91aURlbGVnYXRlKQorICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFF1b3RhKTsKKworICAgIGlmICgh
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlV2ViQXBwbGljYXRp
b25DYWNoZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5DdXJyZW50UXVvdGFUb3RhbEJ5dGVzTmVlZGVk
KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGN1cnJlbnRRdW90YSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGN1
cnJlbnRRdW90YSk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwNTIsNyArMTE4Miw3IEBAIHZvaWQg
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlYWNoZWRBcHBsaWMKICAgICBhdXRvIGNoZWNrZXIgPSBD
b21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxl
Y3Rvcihfd2ViVmlldzpkZWNpZGVXZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFGb3JTZWN1cml0eU9y
aWdpbjpjdXJyZW50UXVvdGE6dG90YWxCeXRlc05lZWRlZDpkZWNpc2lvbkhhbmRsZXI6KSk7CiAg
ICAgYXV0byBhcGlPcmlnaW4gPSBBUEk6OlNlY3VyaXR5T3JpZ2luOjpjcmVhdGUoc2VjdXJpdHlP
cmlnaW4pOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGVjaWRlV2ViQXBwbGljYXRpb25DYWNoZVF1
b3RhRm9yU2VjdXJpdHlPcmlnaW46d3JhcHBlcihhcGlPcmlnaW4uZ2V0KCkpIGN1cnJlbnRRdW90
YTpjdXJyZW50UXVvdGEgdG90YWxCeXRlc05lZWRlZDp0b3RhbEJ5dGVzTmVlZGVkIGRlY2lzaW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSh1bnNpZ25lZCBsb25nIGxv
bmcgbmV3UXVvdGEpIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVXZWJBcHBs
aWNhdGlvbkNhY2hlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKGFwaU9yaWdpbi5nZXQo
KSkgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSB0b3RhbEJ5dGVzTmVlZGVkOnRvdGFsQnl0ZXNO
ZWVkZWQgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVu
c2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxl
dGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTA2MiwxNjUgKzExOTIs
MjAwIEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlYWNoZWRBcHBsaWMKIAogdm9pZCBV
SURlbGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVBy
b3h5JiB3ZWJGcmFtZVByb3h5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
LmdldCgpOworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKCk7CiAKICAgICBhdXRvIGhhbmRsZSA9IEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZSh3
ZWJGcmFtZVByb3h5LmZyYW1lSUQoKSk7Ci0gICAgaWYgKG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3UHJpbnRGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKG1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1ByaW50RnJhbWVDb21wbGV0aW9u
SGFuZGxlcikgewogICAgICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxD
aGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpwcmludEZy
YW1lOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6
d3JhcHBlcihoYW5kbGUpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9
IFdURk1vdmUoY2hlY2tlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildICgpIG11dGFibGUgeworICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
PilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBw
cmludEZyYW1lOndyYXBwZXIoaGFuZGxlKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIo
W2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChjaGVja2Vy
LT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIH0pLmdldCgpXTsKICAgICAg
ICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdQcmludEZyYW1lKQotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6d3JhcHBl
cihoYW5kbGUpXTsKKyAgICB9CisKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3UHJpbnRGcmFtZSkKKyAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
cHJpbnRGcmFtZTp3cmFwcGVyKGhhbmRsZSldOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9
CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNsb3NlKFdlYlBhZ2VQcm94eSopCiB7Ci0g
ICAgaWYgKG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q2xvc2UpIHsKLSAg
ICAgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q2xvc2UpIHsKKyAgICAgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICAgICAgaWYgKCFkZWxl
Z2F0ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Nsb3NlOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOwor
ICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Nsb3Nl
Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRDbG9zZSkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZENsb3NlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0
ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBbZGVsZWdhdGUgd2ViVmlld0RpZENsb3NlOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXdd
OworICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3RGlkQ2xvc2U6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpmdWxsc2NyZWVu
TWF5UmV0dXJuVG9JbmxpbmUoV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKQor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Z1bGxzY3JlZW5NYXlSZXR1cm5Ub0lu
bGluZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Z1
bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZTptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBb
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Z1bGxzY3JlZW5NYXlS
ZXR1cm5Ub0lubGluZTptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAK
IHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEVudGVyRnVsbHNjcmVlbihXZWJQYWdlUHJv
eHkqKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRFbnRlckZ1bGxzY3JlZW4pCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
RW50ZXJGdWxsc2NyZWVuKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
d0RpZEVudGVyRnVsbHNjcmVlbjptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZEVudGVyRnVsbHNjcmVlbjpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmRpZEV4aXRGdWxsc2NyZWVuKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYg
KCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4aXRGdWxsc2NyZWVu
KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZEV4aXRGdWxsc2NyZWVu
Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW46bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCldOwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaWYg
SEFWRShBUFBfTElOS1MpCiBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRJbmNsdWRl
QXBwTGlua0FjdGlvbnNGb3JFbGVtZW50KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICplbGVtZW50
SW5mbykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
U2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudCkKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Nob3VsZEluY2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVsZW1l
bnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICByZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dl
YlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBzaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNG
b3JFbGVtZW50OmVsZW1lbnRJbmZvXTsKKyAgICByZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0
KCkgc2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudDplbGVtZW50SW5mb107CiB9
CiAjZW5kaWYKIAogUmV0YWluUHRyPE5TQXJyYXk+IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjphY3Rp
b25zRm9yRWxlbWVudChfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqZWxlbWVudEluZm8sIFJldGFp
blB0cjxOU0FycmF5PiBkZWZhdWx0QWN0aW9ucykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QWN0aW9uc0ZvckVsZW1lbnREZWZhdWx0QWN0aW9ucykK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRBY3Rpb25zOwor
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdBY3Rpb25z
Rm9yRWxlbWVudERlZmF1bHRBY3Rpb25zKQogICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7
CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7CiAKLSAgICByZXR1
cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyBhY3Rpb25zRm9yRWxlbWVudDplbGVtZW50SW5mbyBkZWZhdWx0QWN0aW9u
czpkZWZhdWx0QWN0aW9ucy5nZXQoKV07CisgICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGFjdGlvbnNGb3JFbGVtZW50OmVsZW1lbnRJbmZvIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRB
Y3Rpb25zLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90SGFu
ZGxlVGFwQXNDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYg
KCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5vdEhhbmRsZVRhcEFz
Q2xpY2tBdFBvaW50KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5vdEhh
bmRsZVRhcEFzQ2xpY2tBdFBvaW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
PihkZWxlZ2F0ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkaWROb3RIYW5kbGVU
YXBBc0NsaWNrQXRQb2ludDpwb2ludF07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIGRpZE5vdEhhbmRsZVRhcEFzQ2xpY2tBdFBvaW50OnBvaW50XTsKIH0KIAogVUlW
aWV3Q29udHJvbGxlciAqVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByZXNlbnRpbmdWaWV3Q29udHJv
bGxlcigpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMucHJlc2Vu
dGluZ1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZU1ldGhvZHMucHJlc2VudGluZ1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldykKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkg
X3ByZXNlbnRpbmdWaWV3Q29udHJvbGxlckZvcldlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmll
d107CisgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRl
bGVnYXRlKSBfcHJlc2VudGluZ1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldzptX3VpRGVsZWdhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKICNlbmRpZgogCiBOU0RpY3Rpb25hcnkgKlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpkYXRhRGV0ZWN0aW9uQ29udGV4dCgpCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMuZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJW
aWV3KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy5kYXRhRGV0ZWN0aW9uQ29u
dGV4dEZvcldlYlZpZXcpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gW3N0YXRpY19jYXN0PGlkIDxXS1VJ
RGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZp
ZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfZGF0YURldGVjdGlvbkNvbnRleHRGb3JX
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogI2lmIEVO
QUJMRShQT0lOVEVSX0xPQ0spCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RQ
b2ludGVyTG9jayhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RQb2ludGVyTG9jayAmJiAhbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZXF1ZXN0UG9pbnRlckxvY2tDb21wbGV0
aW9uSGFuZGxlcikKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0UG9p
bnRlckxvY2sgJiYgIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJl
cXVlc3RQb2ludGVyTG9ja0NvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2spIHsKLSAgICAgICAgW3N0YXRpY19j
YXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3UmVxdWVzdFBv
aW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIGlmIChtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2spIHsKKyAgICAgICAg
W3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3
UmVxdWVzdFBvaW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25I
YW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJW
aWV3RGlkUmVxdWVzdFBvaW50ZXJMb2NrOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFJl
cXVlc3RQb2ludGVyTG9jazptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbXBsZXRpb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlciksIHBhZ2UgPSBtYWtlUmVm
UHRyKHBhZ2UpXSAoQk9PTCBhbGxvdykgeworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFJlcXVlc3RQb2ludGVyTG9jazptX3Vp
RGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxv
Y2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBwYWdlID0gbWFrZVJlZlB0cihwYWdl
KV0gKEJPT0wgYWxsb3cpIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVy
SGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5k
aWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTEyMzQsNDEgKzEzOTksNTAgQEAgdm9pZCBV
SURlbGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFBvaW50ZQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpkaWRMb3NlUG9pbnRlckxvY2soV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTG9zZVBvaW50ZXJMb2NrKQor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZExvc2VQb2ludGVyTG9jaykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVn
YXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUu
Z2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRp
Y19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3RGlkTG9z
ZVBvaW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZExvc2VQb2ludGVy
TG9jazptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKICNlbmRpZgog
ICAgIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkU2hvd1NhZmVCcm93c2luZ1dhcm5p
bmcoKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRTaG93U2FmZUJyb3dzaW5nV2FybmluZykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3RGlkU2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6
bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3RGlkU2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50Ojpjb25maXJtUERGT3BlbmluZyhXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0
IFdURjo6VVJMJiBmaWxlVVJMLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91
aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91bGRBbGxvd1BERkF0VVJMVG9P
cGVuRnJvbUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKKworICAgIGlmICghbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2hvdWxkQWxsb3dQREZBdFVSTFRvT3Bl
bkZyb21GcmFtZUNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIodHJ1ZSk7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIodHJ1ZSk7CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVj
a2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpzaG91bGRBbGxv
d1BERkF0VVJMOnRvT3BlbkZyb21GcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbc3Rh
dGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXc6bV91
aURlbGVnYXRlLm1fd2ViVmlldyBzaG91bGRBbGxvd1BERkF0VVJMOmZpbGVVUkwgdG9PcGVuRnJv
bUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyks
ICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2Vy
KV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkgc2hvdWxkQWxsb3dQREZBdFVSTDpmaWxlVVJMIHRvT3BlbkZyb21GcmFtZTp3
cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkp
IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09M
IHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxl
ckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+
ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0xMjk0LDE5ICsxNDY4LDIyIEBAIHN0YXRp
YyBXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0IHdlYkEKIAogdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6cnVuV2ViQXV0aGVudGljYXRpb25QYW5lbChXZWJQYWdlUHJveHkmIHBhZ2UsIEFQ
STo6V2ViQXV0aGVudGljYXRpb25QYW5lbCYgcGFuZWwsIFdlYkZyYW1lUHJveHkmLCBGcmFtZUlu
Zm9EYXRhJiYgZnJhbWVJbmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxSZXN1bHQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURl
bGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5XZWJBdXRoZW50aWNhdGlvblBhbmVs
SW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXZWJBdXRoZW50aWNhdGlvblBh
bmVsUmVzdWx0OjpVbmF2YWlsYWJsZSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1J1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbml0aWF0ZWRCeUZy
YW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViQXV0
aGVudGljYXRpb25QYW5lbFJlc3VsdDo6VW5hdmFpbGFibGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgp
OworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJBdXRoZW50
aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVh
dGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpydW5XZWJBdXRoZW50aWNhdGlv
blBhbmVsOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2Vi
VmlldyBydW5XZWJBdXRoZW50aWNhdGlvblBhbmVsOndyYXBwZXIocGFuZWwpIGluaXRpYXRlZEJ5
RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwg
JnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIp
XSAoX1dLV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdCByZXN1bHQpIG11dGFibGUgeworICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6d3JhcHBl
cihwYW5lbCkgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUo
V1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0
cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tl
ciA9IFdURk1vdmUoY2hlY2tlcildIChfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0IHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhh
c0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlk
Q2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0xMzE4LDMxICsxNDk1LDQyIEBAIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bldlYkF1dGhlbnQKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6aGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5Kiwg
Ym9vbCBoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRD
aGFuZ2UpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGFzVmlkZW9JblBpY3R1
cmVJblBpY3R1cmVEaWRDaGFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgaGFzVmlk
ZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2U6aGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVd
OworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBf
d2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBoYXNWaWRlb0luUGlj
dHVyZUluUGljdHVyZURpZENoYW5nZTpoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZV07CiB9CiAK
IHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5n
ZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2hh
bmdlZCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdJbWFnZU9yTWVkaWFEb2N1
bWVudFNpemVDaGFuZ2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxl
Z2F0ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBpbWFnZU9yTWVkaWFEb2N1bWVu
dFNpemVDaGFuZ2VkOm5ld1NpemVdOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRl
UHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSBpbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkOm5ld1NpemVdOwogfQogCiB2
b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTcGVlY2hSZWNvZ25pdGlv
blBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdDo6V2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6OlNlY3Vy
aXR5T3JpZ2luJiBvcmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpIHsKKyAgICAgICAgcGFnZS5yZXF1ZXN0U3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uQnlE
ZWZhdWx0QWN0aW9uKG9yaWdpbi5zZWN1cml0eU9yaWdpbigpLCBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGRlbGVnYXRlID0g
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBwYWdlLnJlcXVlc3RTcGVlY2hSZWNvZ25p
dGlvblBlcm1pc3Npb25CeURlZmF1bHRBY3Rpb24ob3JpZ2luLnNlY3VyaXR5T3JpZ2luKCksIFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTM1NCw3ICsx
NTQyLDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5RgogICAgIH0K
IAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0
ZShkZWxlZ2F0ZSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJlcXVlc3RTcGVlY2hSZWNvZ25pdGlvblBl
cm1pc3Npb25Gb3JPcmlnaW46ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFtkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJlcXVlc3RTcGVlY2hSZWNvZ25pdGlvblBlcm1p
c3Npb25Gb3JPcmlnaW46d3JhcHBlcihvcmlnaW4pIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQ
dHIoW2NvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShjb21wbGV0aW9uSGFuZGxlciwg
eyB9KSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIGdyYW50ZWQpIG11dGFibGUg
eworICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5n
ZXQoKSByZXF1ZXN0U3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uRm9yT3JpZ2luOndyYXBwZXIo
b3JpZ2luKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9
IHN0ZDo6ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIHsgfSksIGNoZWNrZXIgPSBXVEZNb3Zl
KGNoZWNrZXIpXSAoQk9PTCBncmFudGVkKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXIt
PmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsK
</data>
<flag name="commit-queue"
          id="434852"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417192</attachid>
            <date>2021-01-07 11:25:07 -0800</date>
            <delta_ts>2021-01-07 12:37:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220394-20210107112506.patch</filename>
            <type>text/plain</type>
            <size>161542</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU5MDcwN2JjNmFkYjhhNTdl
NzllYjI2YTVjM2U5YWE0MjMyNWM4YTIuLjRlZTNlMzc4ZDg4YjM0YTYwZDhkMTU2OWVkMDk4MWU3
OGE0YTI1MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM4IEBACisyMDIxLTAxLTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNtYXJ0
IHBvaW50ZXJzIGluIFVJRGVsZWdhdGUgYW5kIE5hdmlnYXRpb25TdGF0ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzk0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS83MjQ5NjM3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBVSURlbGVnYXRlIGFuZCBOYXZpZ2F0aW9uU3RhdGUgYXJlIG93bmVkIGJ5
IFdLV2ViVmlldywgYnV0IHRoZSBjbGllbnRzIGFyZSBvd25lZCBieSBXZWJQYWdlUHJveHksCisg
ICAgICAgIHdoaWNoIGlzIGluZGVwZW5kZW50bHkgcmVmZXJlbmNlIGNvdW50ZWQgYW5kIGNhbiBo
YXZlIGEgZGlmZmVyZW50IGxpZmV0aW1lLgorICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gcmF3
IEMrKyByZWZlcmVuY2VzIGJldHdlZW4gdGhlIHR3bywgc28gdXNlIFdlYWtQdHIgaW5zdGVhZC4K
KyAgICAgICAgQWxzbywgdXNlIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gaW5zdGVhZCBvZiBhIHJh
dyBDKysgV0tXZWJWaWV3KgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06Cisg
ICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvblN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjp+TmF2aWdhdGlvblN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToKKyAg
ICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQp
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Om5hdmlnYXRpb25HZXN0dXJlRGlk
RW5kKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0
aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRp
b25TdGF0ZTo6ZGlkUmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tMb29rRG9jdW1lbnQpOgorICAgICAg
ICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6OmRpZEZpcnN0UGFpbnQpOgorICAgICAgICAoV2Vi
S2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Ok5hdmlnYXRpb25DbGllbnQp
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Ondl
YkdMTG9hZFBvbGljeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6cmVzb2x2ZVdlYkdMTG9hZFBvbGljeSBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFj
a0ZvcndhcmRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0pOgorICAgICAgICAoV2ViS2l0
OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvblJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRQcm92aXNpb25h
bExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50
Ojp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENhbmNl
bENsaWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uQ2xpZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uV2l0aEVycm9yKToKKyAg
ICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWls
UHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENvbW1pdE5hdmlnYXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENvbW1p
dExvYWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hOYXZpZ2F0aW9uKToKKyAg
ICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5p
c2hMb2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yKToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWlsTG9hZFdpdGhFcnJv
ckZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpyZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5n
ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
c2hvdWxkQnlwYXNzQ29udGVudE1vZGVTYWZlZ3VhcmRzIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OnNob3VsZEFsbG93TGVnYWN5VExTKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWROZWdvdGlhdGVNb2Rlcm5UTFMpOgor
ICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nl
c3NEaWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OnByb2Nlc3NEaWRCZWNvbWVSZXNwb25zaXZlKToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpwcm9jZXNzRGlkQmVjb21lVW5y
ZXNwb25zaXZlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50Ojp3ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9u
U3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Om5hdmlnYXRpb25BY3Rpb25EaWRCZWNvbWVEb3dubG9h
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
bmF2aWdhdGlvblJlc3BvbnNlRGlkQmVjb21lRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRleHRNZW51RGlkQ3JlYXRlRG93
bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OmRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaExv
YWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6
YXRpb25Mb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xp
ZW50OjpIaXN0b3J5Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpI
aXN0b3J5Q2xpZW50OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkUGVyZm9ybUNsaWVudFJl
ZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50
OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9u
U3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgICog
VUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
VUlEZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6Q29udGV4dE1lbnVD
bGllbnQ6OkNvbnRleHRNZW51Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6
Q29udGV4dE1lbnVDbGllbnQ6Om1lbnVGcm9tUHJvcG9zZWRNZW51KToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OlVJQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0KToKKyAgICAgICAgKFdlYktpdDo6
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFdl
YktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NDb25m
aXJtKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGlj
eUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpVSUNsaWVudDo6ZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBl
YXJhbmNlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNhblJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwpOgorICAgICAgICAoV2Vi
S2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnRha2VGb2N1cyk6CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoYW5kbGVBdXRvcGxheUV2ZW50KToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNhblJ1bk1vZGFsIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bk1vZGFsKToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmhlYWRlckhlaWdodCk6CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpmb290ZXJIZWlnaHQpOgorICAgICAgICAoV2Vi
S2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAgICAgIChXZWJLaXQ6
OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKFdlYktpdDo6VUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnBhZ2VEaWRTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpVSUNsaWVudDo6Zm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpV
SUNsaWVudDo6dW5mb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQpOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpVSUNsaWVudDo6ZGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRXaGlsZUlu
Rm9yZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRO
b3RIYW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OndpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6OnRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpkaWRDbGlja0F1dG9GaWxsQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3dQYWdlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OnNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIpOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNs
aWVudDo6Y29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEF0dGFjaExvY2FsSW5zcGVjdG9yKToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OndpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKToK
KyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRBbGxvd0RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6OmRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6VUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1
ZXN0KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1l
ZGlhUGVybWlzc2lvbkZvck9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjptZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToK
KyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByaW50RnJhbWUpOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2xvc2UpOgorICAgICAgICAoV2Vi
S2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToK
KyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEVudGVyRnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRFeGl0RnVsbHNj
cmVlbik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRJbmNs
dWRlQXBwTGlua0FjdGlvbnNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmFjdGlvbnNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmRpZE5vdEhhbmRsZVRhcEFzQ2xpY2spOgorICAgICAgICAoV2ViS2l0
OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRhdGFEZXRlY3Rpb25Db250ZXh0KToK
KyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RQb2ludGVyTG9j
ayk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRMb3NlUG9pbnRl
ckxvY2spOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkU2hvd1Nh
ZmVCcm93c2luZ1dhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVu
dDo6Y29uZmlybVBERk9wZW5pbmcpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNs
aWVudDo6cnVuV2ViQXV0aGVudGljYXRpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjppbWFnZU9yTWVkaWFEb2N1bWVu
dFNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRl
Y2lkZVBvbGljeUZvclNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorCiAyMDIx
LTAxLTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgVXNlIHNlbmRXaXRoQXN5bmNSZXBseSBpbnN0ZWFkIG9mIGlPUy1zcGVjaWZpYyBHZW5l
cmljQ2FsbGJhY2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9O
YXZpZ2F0aW9uU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRp
b25TdGF0ZS5oCmluZGV4IDk2NzgzN2FmZTE0YmQ4MzU0YzU2ZDZiZWZlNWQyOTEzNzZhYjg3YTcu
LjU4MjQ0YTVkMDhhYjU5NTk0ZGQ5MWQ3NjFiY2UxMzhkMDUwY2U5NjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCkBAIC0zNiw2ICszNiw3
IEBACiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1VuaXF1ZVJlZi5oPgog
I2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgogCiBA
Y2xhc3MgV0tXZWJWaWV3OwogQHByb3RvY29sIFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZTsKQEAg
LTUzLDcgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBXZWJOYXZpZ2F0aW9u
RGF0YVN0b3JlOwogCi1jbGFzcyBOYXZpZ2F0aW9uU3RhdGUgZmluYWwgOiBwcml2YXRlIFBhZ2VM
b2FkU3RhdGU6Ok9ic2VydmVyIHsKK2NsYXNzIE5hdmlnYXRpb25TdGF0ZSBmaW5hbCA6IHByaXZh
dGUgUGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOYXZpZ2F0
aW9uU3RhdGU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBl
eHBsaWNpdCBOYXZpZ2F0aW9uU3RhdGUoV0tXZWJWaWV3ICopOwpAQCAtMTUwLDcgKzE1MSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9h
ZChXZWJQYWdlUHJveHkmLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LCBjb25zdCBTdHJpbmcm
LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpPiYmKSBv
dmVycmlkZTsKICNlbmRpZgogCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZSYgbV9uYXZpZ2F0aW9u
U3RhdGU7CisgICAgICAgIFdlYWtQdHI8TmF2aWdhdGlvblN0YXRlPiBtX25hdmlnYXRpb25TdGF0
ZTsKICAgICB9OwogICAgIAogICAgIGNsYXNzIEhpc3RvcnlDbGllbnQgZmluYWwgOiBwdWJsaWMg
QVBJOjpIaXN0b3J5Q2xpZW50IHsKQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6
OlN0cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZGlk
VXBkYXRlSGlzdG9yeVRpdGxlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29u
c3QgV1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKICAgICAgICAgCi0gICAgICAgIE5hdmlnYXRpb25T
dGF0ZSYgbV9uYXZpZ2F0aW9uU3RhdGU7CisgICAgICAgIFdlYWtQdHI8TmF2aWdhdGlvblN0YXRl
PiBtX25hdmlnYXRpb25TdGF0ZTsKICAgICB9OwogCiAgICAgLy8gUGFnZUxvYWRTdGF0ZTo6T2Jz
ZXJ2ZXIKQEAgLTE5Niw3ICsxOTcsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVsZWFzZU5ldHdv
cmtBY3Rpdml0eUFmdGVyTG9hZENvbXBsZXRpb24oKSB7IHJlbGVhc2VOZXR3b3JrQWN0aXZpdHko
TmV0d29ya0FjdGl2aXR5UmVsZWFzZVJlYXNvbjo6TG9hZENvbXBsZXRlZCk7IH0KICNlbmRpZgog
Ci0gICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgV2Vha09iakNQdHI8V0tXZWJWaWV3PiBt
X3dlYlZpZXc7CiAgICAgV2Vha09iakNQdHI8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlPiA+IG1f
bmF2aWdhdGlvbkRlbGVnYXRlOwogCiAgICAgc3RydWN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbSBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQppbmRleCBjZmQyMjMwYTUyOGZiOGVl
NzA3ZTliZGQyMWQwN2QxMTdjODQzMTk1Li5mZThhMGE5YWE2YzI1NTA4YjgyOTEzZGU3Y2U3MDNm
ZDU2MDVhOWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZp
Z2F0aW9uU3RhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdh
dGlvblN0YXRlLm1tCkBAIC0xMDksMTkgKzEwOSwxOSBAQCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25TdGF0ZShXS1dlYlZpZXcgKndlYlZpZXcpCiAgICAgLCBtX3JlbGVhc2VOZXR3b3JrQWN0
aXZpdHlUaW1lcihSdW5Mb29wOjpjdXJyZW50KCksIHRoaXMsICZOYXZpZ2F0aW9uU3RhdGU6OnJl
bGVhc2VOZXR3b3JrQWN0aXZpdHlBZnRlckxvYWRDb21wbGV0aW9uKQogI2VuZGlmCiB7Ci0gICAg
QVNTRVJUKG1fd2ViVmlldy0+X3BhZ2UpOwotICAgIEFTU0VSVCghbmF2aWdhdGlvblN0YXRlcygp
LmNvbnRhaW5zKG1fd2ViVmlldy0+X3BhZ2UuZ2V0KCkpKTsKKyAgICBBU1NFUlQobV93ZWJWaWV3
LmdldCgpLT5fcGFnZSk7CisgICAgQVNTRVJUKCFuYXZpZ2F0aW9uU3RhdGVzKCkuY29udGFpbnMo
bV93ZWJWaWV3LmdldCgpLT5fcGFnZS5nZXQoKSkpOwogCi0gICAgbmF2aWdhdGlvblN0YXRlcygp
LmFkZChtX3dlYlZpZXctPl9wYWdlLmdldCgpLCB0aGlzKTsKLSAgICBtX3dlYlZpZXctPl9wYWdl
LT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIG5hdmlnYXRpb25TdGF0
ZXMoKS5hZGQobV93ZWJWaWV3LmdldCgpLT5fcGFnZS5nZXQoKSwgdGhpcyk7CisgICAgbV93ZWJW
aWV3LmdldCgpLT5fcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLmFkZE9ic2VydmVyKCp0aGlzKTsKIH0K
IAogTmF2aWdhdGlvblN0YXRlOjp+TmF2aWdhdGlvblN0YXRlKCkKIHsKLSAgICBBU1NFUlQobmF2
aWdhdGlvblN0YXRlcygpLmdldChtX3dlYlZpZXctPl9wYWdlLmdldCgpKSA9PSB0aGlzKTsKKyAg
ICBBU1NFUlQobmF2aWdhdGlvblN0YXRlcygpLmdldChtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLmdl
dCgpKSA9PSB0aGlzKTsKIAotICAgIG5hdmlnYXRpb25TdGF0ZXMoKS5yZW1vdmUobV93ZWJWaWV3
LT5fcGFnZS5nZXQoKSk7Ci0gICAgbV93ZWJWaWV3LT5fcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLnJl
bW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBuYXZpZ2F0aW9uU3RhdGVzKCkucmVtb3ZlKG1fd2Vi
Vmlldy5nZXQoKS0+X3BhZ2UuZ2V0KCkpOworICAgIG1fd2ViVmlldy5nZXQoKS0+X3BhZ2UtPnBh
Z2VMb2FkU3RhdGUoKS5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CiB9CiAKIE5hdmlnYXRpb25TdGF0
ZSYgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZShXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94
eSkKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdl
c3R1cmVEaWRCZWdpbigpCiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZEJlZ2luTmF2aWdhdGlvbkdlc3R1cmU6
bV93ZWJWaWV3XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdEaWRCZWdpbk5hdmlnYXRpb25HZXN0
dXJlOm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpu
YXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0mIGl0ZW0pCkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6
Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0Zvcndh
cmQKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
W3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9u
RGVsZWdhdGUpIF93ZWJWaWV3V2lsbEVuZE5hdmlnYXRpb25HZXN0dXJlOm1fd2ViVmlldyB3aXRo
TmF2aWdhdGlvblRvQmFja0ZvcndhcmRMaXN0SXRlbTp3aWxsTmF2aWdhdGUgPyB3cmFwcGVyKGl0
ZW0pIDogbmlsXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdXaWxsRW5kTmF2aWdhdGlvbkdlc3R1
cmU6bV93ZWJWaWV3LmdldCgpLmdldCgpIHdpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2FyZExpc3RJ
dGVtOndpbGxOYXZpZ2F0ZSA/IHdyYXBwZXIoaXRlbSkgOiBuaWxdOwogfQogCiB2b2lkIE5hdmln
YXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCBOYXZp
Z2F0aW9uU3RhdGU6Om5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBX
ZWJCYWNrRm9yd2FyZEwKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+
PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3RGlkRW5kTmF2aWdhdGlvbkdlc3R1cmU6bV93
ZWJWaWV3IHdpdGhOYXZpZ2F0aW9uVG9CYWNrRm9yd2FyZExpc3RJdGVtOndpbGxOYXZpZ2F0ZSA/
IHdyYXBwZXIoaXRlbSkgOiBuaWxdOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZEVuZE5hdmln
YXRpb25HZXN0dXJlOm1fd2ViVmlldy5nZXQoKS5nZXQoKSB3aXRoTmF2aWdhdGlvblRvQmFja0Zv
cndhcmRMaXN0SXRlbTp3aWxsTmF2aWdhdGUgPyB3cmFwcGVyKGl0ZW0pIDogbmlsXTsKIH0KIAog
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFj
a0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKQEAgLTI3NSw3ICsyNzUsNyBAQCB2b2lkIE5hdmlnYXRp
b25TdGF0ZTo6d2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJiBpdGVtKQogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5h
dmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV93ZWJWaWV3IHdpbGxTbmFwc2hvdEJhY2tGb3J3
YXJkTGlzdEl0ZW06d3JhcHBlcihpdGVtKV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3Om1fd2Vi
Vmlldy5nZXQoKS5nZXQoKSB3aWxsU25hcHNob3RCYWNrRm9yd2FyZExpc3RJdGVtOndyYXBwZXIo
aXRlbSldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdlc3R1cmVTbmFw
c2hvdFdhc1JlbW92ZWQoKQpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRl
OjpuYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpCiAgICAgaWYgKCFuYXZpZ2F0
aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0Rp
ZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3Q6bV93ZWJWaWV3XTsKKyAgICBbc3RhdGlj
X2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0
ZSkgX3dlYlZpZXdEaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90Om1fd2ViVmlldy5n
ZXQoKS5nZXQoKV07CiB9CiAKICNpZiBVU0UoUVVJQ0tfTE9PSykKQEAgLTMwMCw3ICszMDAsNyBA
QCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6ZGlkUmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tMb29rRG9j
dW1lbnQoKQogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmln
YXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdEaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1
bWVudDptX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZFJlcXVlc3RQYXNzd29y
ZEZvclF1aWNrTG9va0RvY3VtZW50Om1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAjZW5kaWYK
IApAQCAtMzEzLDExICszMTMsMTEgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OmRpZEZpcnN0UGFp
bnQoKQogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRp
b25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV93ZWJWaWV3IHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdl
Ol9XS1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50XTsKKyAgICBbc3RhdGljX2Nhc3Q8
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dl
YlZpZXc6bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlOl9X
S1JlbmRlcmluZ1Byb2dyZXNzRXZlbnRGaXJzdFBhaW50XTsKIH0KIAogTmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpOYXZpZ2F0aW9uQ2xpZW50KE5hdmlnYXRpb25TdGF0ZSYgbmF2
aWdhdGlvblN0YXRlKQotICAgIDogbV9uYXZpZ2F0aW9uU3RhdGUobmF2aWdhdGlvblN0YXRlKQor
ICAgIDogbV9uYXZpZ2F0aW9uU3RhdGUobWFrZVdlYWtQdHIobmF2aWdhdGlvblN0YXRlKSkKIHsK
IH0KIApAQCAtMzQzLDE0ICszNDMsMTQgQEAgaW5saW5lIFdlYkNvcmU6OldlYkdMTG9hZFBvbGlj
eSB0b1dlYkNvcmVXZWJHTExvYWRQb2xpY3koX1dLV2ViR0xMb2FkUG9saWN5IHBvbGkKIAogdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndlYkdMTG9hZFBvbGljeShXZWJQ
YWdlUHJveHkmLCBjb25zdCBVUkwmIHVybCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXZWJDb3Jl
OjpXZWJHTExvYWRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKSBjb25zdAogewotICAgIGlm
ICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdX
ZWJHTExvYWRQb2xpY3lGb3JVUkwpIHsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkdMTG9hZFBvbGljeUZvclVSTCkgewog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJHTExvYWRQb2xpY3k6OldlYkdMQWxsb3dDcmVh
dGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAg
IGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2Fs
bENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2Vi
Vmlldzp3ZWJHTExvYWRQb2xpY3lGb3JVUkw6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFsoaWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyB3ZWJHTExvYWRQb2xpY3lGb3JVUkw6KE5TVVJM
ICopdXJsIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShf
V0tXZWJHTExvYWRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHdlYkdMTG9hZFBvbGljeUZvclVSTDooTlNV
UkwgKil1cmwgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcild
KF9XS1dlYkdMTG9hZFBvbGljeSBwb2xpY3kpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tl
ci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzYwLDE0
ICszNjAsMTQgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndlYkdM
TG9hZFBvbGljeShXZWJQYWdlUHJveHkmLCBjb25zdCBVUkwKIAogdm9pZCBOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OnJlc29sdmVXZWJHTExvYWRQb2xpY3koV2ViUGFnZVByb3h5
JiwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6V2ViR0xM
b2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVzb2x2ZVdl
YkdMTG9hZFBvbGljeUZvclVSTCkgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVzb2x2ZVdlYkdMTG9hZFBvbGljeUZvclVS
TCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJHTExvYWRQb2xpY3k6OldlYkdMQWxs
b3dDcmVhdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgYXV0byBuYXZp
Z2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5t
X25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9u
SGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUobmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpLCBAc2Vs
ZWN0b3IoX3dlYlZpZXc6cmVzb2x2ZVdlYkdMTG9hZFBvbGljeUZvclVSTDpkZWNpc2lvbkhhbmRs
ZXI6KSk7Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9u
RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IHJlc29sdmVXZWJH
TExvYWRQb2xpY3lGb3JVUkw6KE5TVVJMICopdXJsIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQ
dHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNr
ZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShfV0tXZWJHTExvYWRQb2xpY3kgcG9saWN5KSBtdXRhYmxl
IHsKKyAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxl
Z2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJl
c29sdmVXZWJHTExvYWRQb2xpY3lGb3JVUkw6KE5TVVJMICopdXJsIGRlY2lzaW9uSGFuZGxlcjpt
YWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShfV0tXZWJHTExvYWRQb2xpY3kgcG9saWN5
KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVl
bkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxs
Q29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTM3NywxMCArMzc3LDEwIEBAIHZvaWQgTmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpyZXNvbHZlV2ViR0xMb2FkUG9saWN5KFdlYlBhZ2VQ
cm94eSYsIGNvCiAKIGJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRD
aGFuZ2VCYWNrRm9yd2FyZExpc3QoV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRl
bSogYWRkZWQsIGNvbnN0IFZlY3RvcjxSZWY8V2ViQmFja0ZvcndhcmRMaXN0SXRlbT4+JiByZW1v
dmVkKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdCYWNrRm9yd2FyZExpc3RJdGVtQWRkZWRSZW1vdmVkKQorICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFj
a0ZvcndhcmRMaXN0SXRlbUFkZGVkUmVtb3ZlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zOTAsMjEgKzM5MCwyMSBA
QCBib29sIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0Zv
cndhcmRMaXN0KFdlYlBhZ2VQcm94eSYsCiAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcihyZW1v
dmVkSXRlbS5nZXQoKSk7CiAgICAgICAgIH0pOwogICAgIH0KLSAgICBbKGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS5tX3dlYlZpZXcgYmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkOndyYXBwZXIoYWRkZWQp
IHJlbW92ZWQ6cmVtb3ZlZEl0ZW1zLmdldCgpXTsKKyAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGJhY2tGb3J3YXJkTGlzdEl0ZW1BZGRlZDp3cmFwcGVy
KGFkZGVkKSByZW1vdmVkOnJlbW92ZWRJdGVtcy5nZXQoKV07CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAjZW5kaWYKIAogYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndpbGxH
b1RvQmFja0ZvcndhcmRMaXN0SXRlbShXZWJQYWdlUHJveHkmLCBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJiBpdGVtLCBib29sIGluQmFja0ZvcndhcmRDYWNoZSkKIHsKLSAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2lsbEdvVG9CYWNr
Rm9yd2FyZExpc3RJdGVtSW5CYWNrRm9yd2FyZENhY2hlKQorICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2lsbEdvVG9CYWNrRm9y
d2FyZExpc3RJdGVtSW5CYWNrRm9yd2FyZENhY2hlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdh
dGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS5tX3dlYlZpZXcgd2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtOndyYXBwZXIo
aXRlbSkgaW5QYWdlQ2FjaGU6aW5CYWNrRm9yd2FyZENhY2hlXTsKKyAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0
SXRlbTp3cmFwcGVyKGl0ZW0pIGluUGFnZUNhY2hlOmluQmFja0ZvcndhcmRDYWNoZV07CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ1OSwxMSArNDU5LDExIEBAIHZvaWQgTmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdl
YlBhZ2VQCiAgICAgaWYgKGF1dG8qIHBvbGljaWVzID0gd2ViUGFnZVByb3h5LmNvbmZpZ3VyYXRp
b24oKS5kZWZhdWx0V2Vic2l0ZVBvbGljaWVzKCkpCiAgICAgICAgIGRlZmF1bHRXZWJzaXRlUG9s
aWNpZXMgPSBwb2xpY2llcy0+Y29weSgpOwogCi0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb25EZWNpc2lvbkhhbmRsZXIKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyCi0gICAgICAgICYm
ICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRs
ZXIKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxl
cldlYnNpdGVQb2xpY2llcwotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9u
VXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXMpIHsKKyAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRsZXIKKyAgICAgICAgJiYgIW1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFu
ZGxlcgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJl
bmNlc0RlY2lzaW9uSGFuZGxlcgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbkRlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llcworICAgICAgICAmJiAhbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvblVzZXJJbmZvRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVz
KSB7CiAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbd2ViUGFnZSA9IG1ha2VSZWYo
d2ViUGFnZVByb3h5KSwgbGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKSwgbmF2aWdhdGlvbkFj
dGlvbiwgZGVmYXVsdFdlYnNpdGVQb2xpY2llc10gKGJvb2wgaW50ZXJjZXB0ZWROYXZpZ2F0aW9u
KSB7CiAgICAgICAgICAgICBpZiAoaW50ZXJjZXB0ZWROYXZpZ2F0aW9uKSB7CiAgICAgICAgICAg
ICAgICAgbGlzdGVuZXItPmlnbm9yZSgpOwpAQCAtNDk4LDE3ICs0OTgsMTcgQEAgdm9pZCBOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb24oV2ViUGFnZVAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gbmF2aWdh
dGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9u
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgZGVsZWdhdGVIYXNXZWJwYWdlUHJlZmVyZW5jZXMg
PSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRs
ZXIKLSAgICAgICAgfHwgbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2Vz
VXNlckluZm9EZWNpc2lvbkhhbmRsZXI7Ci0gICAgYm9vbCBkZWxlZ2F0ZUhhc1dlYnNpdGVQb2xp
Y2llcyA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcldlYnNpdGVQ
b2xpY2llcyB8fCBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25Vc2VySW5mb0RlY2lzaW9uSGFu
ZGxlcldlYnNpdGVQb2xpY2llczsKKyAgICBib29sIGRlbGVnYXRlSGFzV2VicGFnZVByZWZlcmVu
Y2VzID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc0RlY2lzaW9u
SGFuZGxlcgorICAgICAgICB8fCBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZl
cmVuY2VzVXNlckluZm9EZWNpc2lvbkhhbmRsZXI7CisgICAgYm9vbCBkZWxlZ2F0ZUhhc1dlYnNp
dGVQb2xpY2llcyA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRsZXJX
ZWJzaXRlUG9saWNpZXMgfHwgbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblVzZXJJbmZvRGVj
aXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzOwogCiAgICAgYXV0byBzZWxlY3RvckZvckNvbXBs
ZXRpb25IYW5kbGVyQ2hlY2tlciA9IChbJl0gKCkgLT4gU0VMIHsKICAgICAgICAgaWYgKGRlbGVn
YXRlSGFzV2VicGFnZVByZWZlcmVuY2VzKQotICAgICAgICAgICAgcmV0dXJuIG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlciA/IEBzZWxlY3Rv
cih3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246cHJlZmVyZW5jZXM6ZGVj
aXNpb25IYW5kbGVyOikgOiBAc2VsZWN0b3IoX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbjpwcmVmZXJlbmNlczp1c2VySW5mbzpkZWNpc2lvbkhhbmRsZXI6KTsKKyAgICAg
ICAgICAgIHJldHVybiBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2Vz
RGVjaXNpb25IYW5kbGVyID8gQHNlbGVjdG9yKHdlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbjpwcmVmZXJlbmNlczpkZWNpc2lvbkhhbmRsZXI6KSA6IEBzZWxlY3Rvcihfd2Vi
VmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOnByZWZlcmVuY2VzOnVzZXJJbmZv
OmRlY2lzaW9uSGFuZGxlcjopOwogICAgICAgICBpZiAoZGVsZWdhdGVIYXNXZWJzaXRlUG9saWNp
ZXMpCiAgICAgICAgICAgICByZXR1cm4gQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOik7CiAgICAgICAgIHJldHVybiBAc2Vs
ZWN0b3Iod2ViVmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFu
ZGxlcjopOwpAQCAtNTgxLDM2ICs1ODEsMzYgQEAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElP
TlNfRU5ECiAgICAgfTsKIAogICAgIGlmIChkZWxlZ2F0ZUhhc1dlYnBhZ2VQcmVmZXJlbmNlcykg
ewotICAgICAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2Vz
RGVjaXNpb25IYW5kbGVyKQotICAgICAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgcHJlZmVyZW5jZXM6d3JhcHBlcihkZWZhdWx0
V2Vic2l0ZVBvbGljaWVzKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFdURk1vdmUoZGVj
aXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcykpLmdldCgpXTsKKyAgICAgICAg
aWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhh
bmRsZXIpCisgICAgICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
QWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgcHJlZmVyZW5jZXM6d3JhcHBlcihkZWZh
dWx0V2Vic2l0ZVBvbGljaWVzKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFdURk1vdmUo
ZGVjaXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcykpLmdldCgpXTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPilu
YXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBw
cmVmZXJlbmNlczp3cmFwcGVyKGRlZmF1bHRXZWJzaXRlUG9saWNpZXMpIHVzZXJJbmZvOnVzZXJJ
bmZvID8gc3RhdGljX2Nhc3Q8aWQ8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigp
KSA6IG5pbCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFdURk1vdmUoZGVjaXNpb25IYW5k
bGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcykpLmdldCgpXTsKKyAgICAgICAgICAgIFsoaWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHByZWZlcmVuY2VzOndy
YXBwZXIoZGVmYXVsdFdlYnNpdGVQb2xpY2llcykgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNf
Y2FzdDxpZDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsIGRlY2lz
aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVy
ZW5jZXNPclBvbGljaWVzKSkuZ2V0KCldOwogICAgIH0gZWxzZSBpZiAoZGVsZWdhdGVIYXNXZWJz
aXRlUG9saWNpZXMpIHsKICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKSk7Ci0g
ICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25Vc2VySW5mb0RlY2lzaW9uSGFu
ZGxlcldlYnNpdGVQb2xpY2llcykgeworICAgICAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvblVzZXJJbmZvRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzKSB7CiAgICAgICAg
ICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICAgICAgWyhp
ZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRp
Y19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsIGRl
Y2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOworICAgICAgICAgICAgWyhpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgdXNlckluZm86dXNlcklu
Zm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigp
KSA6IG5pbCBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAgICAgICAg
ICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAg
ICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRl
IF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgZGVjaXNpb25IYW5kbGVyOmRl
Y2lzaW9uSGFuZGxlci5nZXQoKV07CisgICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246
d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVy
LmdldCgpXTsKICAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0VORAog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBkZWNpc2lvbkhhbmRsZXIgPSBb
ZGVjaXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcyA9IFdURk1vdmUoZGVjaXNp
b25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcyldIChXS05hdmlnYXRpb25BY3Rpb25Q
b2xpY3kgYWN0aW9uUG9saWN5KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGRlY2lzaW9uSGFuZGxl
cldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMoYWN0aW9uUG9saWN5LCBuaWwpOwogICAgICAgICB9
OwotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUu
bV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0
aW9uQWN0aW9uKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFdURk1vdmUoZGVjaXNpb25I
YW5kbGVyKSkuZ2V0KCldOworICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgZGVjaXNpb25IYW5kbGVyOm1h
a2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcikpLmdldCgpXTsKICAgICB9CiB9CiAK
IHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpjb250ZW50UnVsZUxpc3RO
b3RpZmljYXRpb24oV2ViUGFnZVByb3h5JiwgVVJMJiYgdXJsLCBDb250ZW50UnVsZUxpc3RSZXN1
bHRzJiYgcmVzdWx0cykKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3Rp
ZmljYXRpb25zCi0gICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0NvbnRlbnRSdWxlTGlzdFdpdGhJZGVudGlmaWVyUGVyZm9ybWVk
QWN0aW9uRm9yVVJMKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmlj
YXRpb25zCisgICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdDb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZvcm1lZEFj
dGlvbkZvclVSTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdh
dGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC02MzAsMTggKzYzMCwxOCBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6Y29udGVudFJ1bGVMaXN0Tm90aWZpY2F0aW9uKFdlYlBhZ2VQcm94eQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKG5vdGlmaWNhdGlvbnMgJiYgbV9uYXZpZ2F0aW9uU3Rh
dGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdVUkxDb250ZW50UnVsZUxpc3RJ
ZGVudGlmaWVyc05vdGlmaWNhdGlvbnMpCi0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVn
YXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlldyBVUkw6dXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOmlkZW50aWZpZXJz
LmdldCgpIG5vdGlmaWNhdGlvbnM6bm90aWZpY2F0aW9ucy5nZXQoKV07CisgICAgaWYgKG5vdGlm
aWNhdGlvbnMgJiYgbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25zKQorICAg
ICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0
ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIFVSTDp1
cmwgY29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnM6aWRlbnRpZmllcnMuZ2V0KCkgbm90aWZpY2F0
aW9uczpub3RpZmljYXRpb25zLmdldCgpXTsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRlbnRSdWxlTGlzdFdpdGhJZGVu
dGlmaWVyUGVyZm9ybWVkQWN0aW9uRm9yVVJMKSB7CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRlbnRSdWxlTGlzdFdpdGhJ
ZGVudGlmaWVyUGVyZm9ybWVkQWN0aW9uRm9yVVJMKSB7CiAgICAgICAgIGZvciAoYXV0byYmIHBh
aXIgOiBXVEZNb3ZlKHJlc3VsdHMucmVzdWx0cykpCi0gICAgICAgICAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS5tX3dlYlZpZXcgY29udGVudFJ1bGVMaXN0V2l0aElkZW50aWZpZXI6cGFpci5m
aXJzdCBwZXJmb3JtZWRBY3Rpb246d3JhcHBlcihBUEk6OkNvbnRlbnRSdWxlTGlzdEFjdGlvbjo6
Y3JlYXRlKFdURk1vdmUocGFpci5zZWNvbmQpKS5nZXQoKSkgZm9yVVJMOnVybF07CisgICAgICAg
ICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0
ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNvbnRl
bnRSdWxlTGlzdFdpdGhJZGVudGlmaWVyOnBhaXIuZmlyc3QgcGVyZm9ybWVkQWN0aW9uOndyYXBw
ZXIoQVBJOjpDb250ZW50UnVsZUxpc3RBY3Rpb246OmNyZWF0ZShXVEZNb3ZlKHBhaXIuc2Vjb25k
KSkuZ2V0KCkpIGZvclVSTDp1cmxdOwogICAgIH0KIH0KICAgICAKIHZvaWQgTmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2Uo
V2ViUGFnZVByb3h5JiBwYWdlLCBSZWY8QVBJOjpOYXZpZ2F0aW9uUmVzcG9uc2U+JiYgbmF2aWdh
dGlvblJlc3BvbnNlLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclByb3h5PiYmIGxpc3RlbmVy
LCBBUEk6Ok9iamVjdCogdXNlckRhdGEpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25SZXNwb25zZURlY2lzaW9uSGFuZGxlcikgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvblJlc3BvbnNlRGVjaXNpb25IYW5kbGVyKSB7CiAgICAgICAgIE5TVVJMICp1cmwgPSBuYXZp
Z2F0aW9uUmVzcG9uc2UtPnJlc3BvbnNlKCkubnNVUkxSZXNwb25zZSgpLlVSTDsKICAgICAgICAg
aWYgKFt1cmwgaXNGaWxlVVJMXSkgewogICAgICAgICAgICAgQk9PTCBpc0RpcmVjdG9yeSA9IE5P
OwpAQCAtNjYxLDEyICs2NjEsMTIgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWcKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmln
YXRpb25SZXNwb25zZTpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgW25hdmlnYXRpb25EZWxlZ2F0
ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uUmVzcG9uc2U6d3JhcHBlcihuYXZpZ2F0aW9uUmVzcG9uc2UpIGRlY2lzaW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW2xvY2FsTGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKSwgY2hlY2tl
ciA9IFdURk1vdmUoY2hlY2tlcildKFdLTmF2aWdhdGlvblJlc3BvbnNlUG9saWN5IHJlc3BvbnNl
UG9saWN5KSB7CisgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3Bv
bnNlOndyYXBwZXIobmF2aWdhdGlvblJlc3BvbnNlKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2Nr
UHRyKFtsb2NhbExpc3RlbmVyID0gV1RGTW92ZShsaXN0ZW5lciksIGNoZWNrZXIgPSBXVEZNb3Zl
KGNoZWNrZXIpXShXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeSByZXNwb25zZVBvbGljeSkgewog
ICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFu
ZGxlcigpOwpAQCAtNjg5LDgwICs2ODksODAgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWcKIAog
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFN0YXJ0UHJvdmlzaW9u
YWxOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCogdXNl
ckluZm8pCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBp
dCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2sv
Zm9yd2FyZCBjYWNoZS4KLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvblVzZXJJbmZv
KQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25E
ZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkU3RhcnRQcm92
aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB1c2VySW5mbzp1c2VySW5mbyA/
IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDog
bmlsXTsKLSAgICBlbHNlIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uKQotICAgICAgICBb
bmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRp
ZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOworICAgIGlm
IChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvblVzZXJJbmZvKQorICAgICAgICBbKGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZFN0YXJ0UHJvdmlzaW9uYWxO
YXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbikgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNf
Y2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF07Cisg
ICAgZWxzZSBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24pCisgICAgICAgIFtuYXZpZ2F0
aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOwog
fQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRQcm92
aXNpb25hbExvYWRGb3JGcmFtZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYmIHJlcXVlc3QsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8pCiB7Ci0gICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRQcm92aXNpb25hbExvYWRXaXRo
UmVxdWVzdEluRnJhbWUpCi0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4pbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1f
d2ViVmlldyBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxS
ZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1l
OndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdl
KSldOworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0SW5GcmFtZSkKKyAg
ICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KSBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0
KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBw
ZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOwog
fQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwg
QVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgaWYgKCFt
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbikKKyAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9
IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdz
IGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9y
d2FyZCBjYWNoZS4KIAotICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS5tX3dlYlZpZXcgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUg
d2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRp
b24pXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndpbGxQ
ZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmlu
ZyYgdXJsU3RyaW5nLCBkb3VibGUgZGVsYXkpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxQZXJmb3JtQ2xpZW50UmVk
aXJlY3QpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2
aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICBVUkwgdXJsKFVSTCgpLCB1
cmxTdHJpbmcpOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1f
d2ViVmlldyB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6dXJsIGRlbGF5OmRlbGF5XTsK
KyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmln
YXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6dXJsIGRlbGF5OmRlbGF5XTsK
IH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFBlcmZvcm1D
bGllbnRSZWRpcmVjdChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBzb3Vy
Y2VVUkxTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiBkZXN0aW5hdGlvblVSTFN0cmluZykKIHsK
LSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUGVyZm9ybUNsaWVudFJl
ZGlyZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9
IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47
CiAKICAgICBVUkwgc291cmNlVVJMKFVSTCgpLCBzb3VyY2VVUkxTdHJpbmcpOwogICAgIFVSTCBk
ZXN0aW5hdGlvblVSTChVUkwoKSwgZGVzdGluYXRpb25VUkxTdHJpbmcpOwogCi0gICAgW3N0YXRp
Y19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdh
dGUpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRQZXJmb3JtQ2xpZW50
UmVkaXJlY3RGcm9tVVJMOnNvdXJjZVVSTCB0b1VSTDpkZXN0aW5hdGlvblVSTF07CisgICAgW3N0
YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVs
ZWdhdGUpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDpzb3VyY2VVUkwgdG9VUkw6ZGVzdGluYXRp
b25VUkxdOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlk
Q2FuY2VsQ2xpZW50UmVkaXJlY3QoV2ViUGFnZVByb3h5JiBwYWdlKQogewotICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDYW5j
ZWxDbGllbnRSZWRpcmVjdCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENhbmNlbENsaWVudFJlZGlyZWN0KQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAg
IGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGlj
X2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0
ZSkgX3dlYlZpZXdEaWRDYW5jZWxDbGllbnRSZWRpcmVjdDptX25hdmlnYXRpb25TdGF0ZS5tX3dl
YlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZENhbmNlbENsaWVudFJlZGlyZWN0Om1f
bmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiBzdGF0aWMgUmV0
YWluUHRyPE5TRXJyb3I+IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKFdLV2ViVmll
dyAqd2ViVmlldywgY29uc3QgRnJhbWVJbmZvRGF0YSYgZnJhbWVJbmZvLCBOU0Vycm9yICpvcmln
aW5hbEVycm9yKQpAQCAtNzgxLDE2MCArNzgxLDE2MCBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRXJy
b3I+IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKFdLV2ViVmlldyAqd2ViVmlldywg
YwogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbFByb3Zp
c2lvbmFsTmF2aWdhdGlvbldpdGhFcnJvcihXZWJQYWdlUHJveHkmIHBhZ2UsIEZyYW1lSW5mb0Rh
dGEmJiBmcmFtZUluZm8sIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IsIEFQSTo6T2JqZWN0KikKIHsKLSAgICBhdXRvIG5hdmln
YXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0g
Y3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJW
aWV3LCBmcmFtZUluZm8sIGVycm9yKTsKKyAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1w
dGVyID0gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSwgZnJhbWVJbmZvLCBlcnJvcik7CiAKICAgICBpZiAoZnJh
bWVJbmZvLmlzTWFpbkZyYW1lKSB7CiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0
IHRoYXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgbnVs
bCBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0g
ICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb25XaXRoRXJyb3IpCi0gICAgICAgICAg
ICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3
IGRpZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3aXRoRXJy
b3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOworICAgICAgICBpZiAobV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbFBy
b3Zpc2lvbmFsTmF2aWdhdGlvbldpdGhFcnJvcikKKyAgICAgICAgICAgIFtuYXZpZ2F0aW9uRGVs
ZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRp
ZEZhaWxQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3aXRoRXJyb3I6
ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d05hdmlnYXRpb25EaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZVdpdGhFcnJvcikKLSAg
ICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRl
bGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0aW9uOm5p
bCBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZv
OjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIHdpdGhFcnJvcjplcnJvcldpdGhS
ZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CisgICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9uRGlkRmFpbFByb3Zp
c2lvbmFsTG9hZEluU3ViZnJhbWVXaXRoRXJyb3IpCisgICAgICAgICAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIG5hdmlnYXRpb246bmlsIGRpZEZhaWxQ
cm92aXNpb25hbExvYWRJblN1YmZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShX
VEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0
ZW1wdGVyLmdldCgpXTsKICAgICB9CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV2ViUGFn
ZVByb3h5JiBwYWdlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvciwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbykK
IHsKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2
aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGVycm9yV2l0aFJl
Y292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZp
Z2F0aW9uU3RhdGUubV93ZWJWaWV3LCBmcmFtZUluZm8sIGVycm9yKTsKKyAgICBhdXRvIGVycm9y
V2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIo
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSwgZnJhbWVJbmZvLCBlcnJv
cik7CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0aEVy
cm9yKQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRp
b25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBk
YXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFt
ZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9yOmVycm9y
V2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpXTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbFByb3Zpc2lvbmFsTG9h
ZFdpdGhSZXF1ZXN0SW5GcmFtZVdpdGhFcnJvcikKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aFJl
cXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBk
YXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1v
dmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0
ZXIuZ2V0KCldOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
ZGlkQ29tbWl0TmF2aWdhdGlvbihXZWJQYWdlUHJveHkmIHBhZ2UsIEFQSTo6TmF2aWdhdGlvbiog
bmF2aWdhdGlvbiwgQVBJOjpPYmplY3QqKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbiBpcyBu
b3QgbnVsbCBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgbnVsbCBmb3Igc29tZSBuYXZpZ2F0aW9u
cyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ29tbWl0TmF2aWdhdGlv
bikKLSAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlldyBkaWRDb21taXROYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOworICAg
IGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEaWRDb21taXROYXZpZ2F0aW9uKQorICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRDb21taXROYXZp
Z2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdlYktpdDo6V2ViUGFnZVBy
b3h5JiBwYWdlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBGcmFtZUluZm9E
YXRhJiYgZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZENvbW1pdExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCi0gICAgICAgIFtzdGF0aWNfY2FzdDxp
ZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
KSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkQ29tbWl0TG9hZFdpdGhS
ZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVw
ZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZN
b3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9u
YXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDb21taXRMb2FkV2l0aFJlcXVlc3RJ
bkZyYW1lKQorICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRDb21taXRMb2FkV2l0aFJlcXVlc3Q6cmVxdWVz
dC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkp
IGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZv
KSwgJnBhZ2UpKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50
OjpkaWRGaW5pc2hEb2N1bWVudExvYWQoV2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6Ok5hdmlnYXRp
b24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0KikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZEZpbmlz
aERvY3VtZW50TG9hZCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25EaWRGaW5pc2hEb2N1bWVudExvYWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJl
LCBidXQgaXQncyBjdXJyZW50bHkgbnVsbCBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRo
ZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IG5hdmlnYXRpb25EaWRGaW5pc2hEb2N1bWVudExvYWQ6
d3JhcHBlcihuYXZpZ2F0aW9uKV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2
aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbmF2aWdhdGlvbkRpZEZpbmlzaERv
Y3VtZW50TG9hZDp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaE5hdmlnYXRpb24oV2ViUGFnZVByb3h5Jiwg
QVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhh
dCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZv
ciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICBp
ZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRGaW5pc2hOYXZpZ2F0aW9uKQotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZEZpbmlzaE5hdmlnYXRpb246d3JhcHBlcihu
YXZpZ2F0aW9uKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RpZEZpbmlzaE5hdmlnYXRpb24pCisgICAgICAgIFtuYXZpZ2F0
aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGRpZEZpbmlzaE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKV07CiB9CiAKIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUo
V2ViUGFnZVByb3h5JiBwYWdlLCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBG
cmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZEZpbmlzaExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCi0gICAgICAgIFsoaWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGaW5pc2hMb2FkV2l0aFJlcXVlc3Q6cmVx
dWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJv
ZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJ
bmZvKSwgJnBhZ2UpKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZpbmlzaExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCisg
ICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVn
YXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlk
RmluaXNoTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRl
UG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUlu
Zm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOwogfQogCiB2b2lkIE5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbE5hdmlnYXRpb25XaXRoRXJyb3Io
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUluZm8sIEFQSTo6
TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJy
b3IsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1
dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRlRXJyb3JX
aXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3LCBmcmFtZUlu
Zm8sIGVycm9yKTsKKyAgICBhdXRvIGVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyID0gY3JlYXRl
RXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIobV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5n
ZXQoKS5nZXQoKSwgZnJhbWVJbmZvLCBlcnJvcik7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVu
dGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNh
Y2hlLgotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yVXNlckluZm8pCi0gICAgICAgIFso
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGYWlsTmF2aWdhdGlvbjp3cmFwcGVy
KG5hdmlnYXRpb24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKSB1
c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJ
bmZvLT53cmFwcGVyKCkpIDogbmlsXTsKLSAgICBlbHNlIGlmIChtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxOYXZpZ2F0aW9uV2l0aEVy
cm9yKQotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUubV93ZWJWaWV3IGRpZEZhaWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbikgd2l0aEVy
cm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpXTsKKyAgICBpZiAobV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbE5hdmln
YXRpb25XaXRoRXJyb3JVc2VySW5mbykKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRGYWlsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRp
b24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKSB1c2VySW5mbzp1
c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFw
cGVyKCkpIDogbmlsXTsKKyAgICBlbHNlIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvcikKKyAg
ICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgZGlkRmFpbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3
aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JG
cmFtZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVl
c3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yLCBGcmFtZUluZm9EYXRhJiYg
ZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVt
cHRlcihtX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJyb3IpOworICAg
IGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpLCBmcmFt
ZUluZm8sIGVycm9yKTsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0aEVy
cm9yKQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRp
b25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmFpbExv
YWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6
RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVh
dGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlci5nZXQoKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0
aEVycm9yKQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmln
YXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIGRpZEZhaWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJv
ZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6
OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3aXRoRXJyb3I6
ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOwogfQogCiB2b2lkIE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbihXZWJQYWdl
UHJveHkmLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIFNhbWVEb2N1bWVudE5hdmlnYXRp
b25UeXBlIG5hdmlnYXRpb25UeXBlLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25E
aWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZFNhbWVEb2N1bWVu
dE5hdmlnYXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbklE
IGlzIG5vdCB6ZXJvIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSB6ZXJvIGZvciBzb21lIG5hdmln
YXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KIAotICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgbmF2aWdhdGlvbjp3cmFw
cGVyKG5hdmlnYXRpb24pIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb246dG9XS1NhbWVEb2N1bWVu
dE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25UeXBlKV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbmF2aWdhdGlv
bjp3cmFwcGVyKG5hdmlnYXRpb24pIGRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb246dG9XS1NhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlKG5hdmlnYXRpb25UeXBlKV07CiB9CiAKIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpyZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZShX
ZWJQYWdlUHJveHkmLCBPcHRpb25TZXQ8V2ViQ29yZTo6TGF5b3V0TWlsZXN0b25lPiBsYXlvdXRN
aWxlc3RvbmVzKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdSZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZSkKKyAgICBpZiAo
IW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Jl
bmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZp
Z2F0aW9uU3RhdGUubV93ZWJWaWV3IHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlOnJlbmRlcmlu
Z1Byb2dyZXNzRXZlbnRzKGxheW91dE1pbGVzdG9uZXMpXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZW5kZXJp
bmdQcm9ncmVzc0RpZENoYW5nZTpyZW5kZXJpbmdQcm9ncmVzc0V2ZW50cyhsYXlvdXRNaWxlc3Rv
bmVzKV07CiB9CiAKIGJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpzaG91
bGRCeXBhc3NDb250ZW50TW9kZVNhZmVndWFyZHMoKSBjb25zdAogewotICAgIHJldHVybiBtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIKLSAg
ICAgICAgfHwgbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzVXNlcklu
Zm9EZWNpc2lvbkhhbmRsZXI7CisgICAgcmV0dXJuIG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIKKyAgICAgICAgfHwgbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyOwog
fQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFdlYlBhZ2VQcm94eSYsIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQogewotICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VDb21wbGV0aW9uSGFuZGxlcikKKyAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJlY2VpdmVB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm4g
YXV0aGVudGljYXRpb25DaGFsbGVuZ2UubGlzdGVuZXIoKS5jb21wbGV0ZUNoYWxsZW5nZShXZWJL
aXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25T
cGFjZUFuZENvbnRpbnVlKTsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5saXN0ZW5lcigpLmNvbXBsZXRlQ2hhbGxlbmdlKFdlYktpdDo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlQW5k
Q29udGludWUpOwogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hl
Y2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZpZXc6
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOmNvbXBsZXRpb25IYW5kbGVyOikpOwot
ICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBk
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGFsbGVuZ2UgPSBtYWtl
UmVmKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcild
KE5TVVJMU2Vzc2lvbkF1dGhDaGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxD
cmVkZW50aWFsICpjcmVkZW50aWFsKSB7CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIHdlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkgY29tcGxldGlv
bkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGFsbGVuZ2UgPSBtYWtlUmVmKGF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKE5TVVJMU2Vzc2lvbkF1dGhD
aGFsbGVuZ2VEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbiwgTlNVUkxDcmVkZW50aWFsICpjcmVkZW50
aWFsKSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxs
ZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBs
ZXRpb25IYW5kbGVyKCk7CkBAIC05NTksMTcgKzk1OSwxNyBAQCBzdGF0aWMgYm9vbCBzeXN0ZW1B
bGxvd3NMZWdhY3lUTFNGb3IoV2ViUGFnZVByb3h5JiBwYWdlKQogCiB2b2lkIE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6c2hvdWxkQWxsb3dMZWdhY3lUTFMoV2ViUGFnZVByb3h5
JiBwYWdlLCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5JiBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTaG91bGRBbGxvd0xlZ2FjeVRMUwotICAg
ICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNob3VsZEFsbG93RGVwcmVjYXRlZFRMUykKKyAg
ICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dMZWdhY3lUTFMKKyAgICAgICAg
JiYgIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dEZXByZWNhdGVkVExTKQogICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoc3lzdGVtQWxsb3dzTGVnYWN5VExTRm9yKHBhZ2Up
KTsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9u
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBt
X25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFu
YXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihzeXN0
ZW1BbGxvd3NMZWdhY3lUTFNGb3IocGFnZSkpOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRl
Lm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVu
Z2VTaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMpIHsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVu
Z2VTaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMpIHsKICAgICAgICAgYXV0byBjaGVja2VyID0gQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KSwgQHNlbGVjdG9yKHdlYlZpZXc6YXV0aGVudGljYXRpb25DaGFsbGVuZ2U6c2hvdWxkQWxsb3dE
ZXByZWNhdGVkVExTOikpOwotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOndy
YXBwZXIoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIHNob3VsZEFsbG93RGVwcmVjYXRlZFRMUzpt
YWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShCT09MIHNob3VsZEFsbG93KSBtdXRhYmxl
IHsKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgYXV0aGVudGljYXRpb25DaGFsbGVuZ2U6d3Jh
cHBlcihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkgc2hvdWxkQWxsb3dEZXByZWNhdGVkVExTOm1h
a2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlciksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKEJPT0wgc2hvdWxkQWxsb3cpIG11dGFibGUg
ewogICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxl
ZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENh
bGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtOTc4LDcgKzk3OCw3IEBAIHZvaWQgTmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpzaG91bGRBbGxvd0xlZ2FjeVRMUyhXZWJQYWdlUHJv
eHkmIHBhZ2UsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBjaGVja2VyID0gQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KSwgQHNlbGVjdG9yKF93ZWJWaWV3OmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOnNob3VsZEFsbG93
TGVnYWN5VExTOikpOwotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcgYXV0aGVudGljYXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSkgc2hvdWxkQWxsb3dMZWdhY3lUTFM6bWFrZUJsb2NrUHRyKFtjaGVja2Vy
ID0gV1RGTW92ZShjaGVja2VyKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oQk9PTCBzaG91bGRBbGxvdykgbXV0YWJsZSB7CisgICAgW3N0YXRpY19jYXN0
PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgYXV0
aGVudGljYXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkgc2hv
dWxkQWxsb3dMZWdhY3lUTFM6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2Vy
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQk9PTCBz
aG91bGRBbGxvdykgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFu
ZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tl
ci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC05ODgsMTQgKzk4OCwxNCBAQCB2b2lk
IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6c2hvdWxkQWxsb3dMZWdhY3lUTFMo
V2ViUGFnZVByb3h5JiBwYWdlLAogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6ZGlkTmVnb3RpYXRlTW9kZXJuVExTKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5lZ290aWF0ZU1vZGVyblRMUykKKyAg
ICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RpZE5lZ290aWF0ZU1vZGVyblRMUykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2
aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWROZWdvdGlhdGVNb2Rlcm5UTFM6bWFjKGNoYWxsZW5n
ZSldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4o
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93
ZWJWaWV3LmdldCgpLmdldCgpIGRpZE5lZ290aWF0ZU1vZGVyblRMUzptYWMoY2hhbGxlbmdlKV07
CiB9CiAKIHN0YXRpYyBfV0tQcm9jZXNzVGVybWluYXRpb25SZWFzb24gd2tQcm9jZXNzVGVybWlu
YXRpb25SZWFzb24oUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uIHJlYXNvbikKQEAgLTEwMjIsNTgg
KzEwMjIsNTggQEAgc3RhdGljIF9XS1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbiB3a1Byb2Nlc3NU
ZXJtaW5hdGlvblJlYXNvbihQcm9jZXNzVGVybWluYXRpb24KIAogYm9vbCBOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRUZXJtaW5hdGUoV2ViUGFnZVByb3h5JiBw
YWdlLCBQcm9jZXNzVGVybWluYXRpb25SZWFzb24gcmVhc29uKQogewotICAgIGlmICghbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50
UHJvY2Vzc0RpZFRlcm1pbmF0ZQotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0
ZVdpdGhSZWFzb24KLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZENyYXNoKQorICAgIGlmICghbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29udGVu
dFByb2Nlc3NEaWRUZXJtaW5hdGUKKyAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWlu
YXRlV2l0aFJlYXNvbgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZENyYXNoKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAg
IGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBp
ZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdX
ZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFzb24pIHsKLSAgICAgICAgW3N0YXRp
Y19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyB3ZWJDb250ZW50
UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFzb246d2tQcm9jZXNzVGVybWluYXRpb25SZWFzb24o
cmVhc29uKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbikg
eworICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+
KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKSB3ZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFz
b246d2tQcm9jZXNzVGVybWluYXRpb25SZWFzb24ocmVhc29uKV07CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAogICAgIC8vIFdlIHByZWZlciB3ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NE
aWRUZXJtaW5hdGU6IG92ZXIgX3dlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2g6LgotICAgIGlmICht
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNv
bnRlbnRQcm9jZXNzRGlkVGVybWluYXRlKSB7Ci0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUg
d2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlOm1fbmF2aWdhdGlvblN0YXRlLm1f
d2ViVmlld107CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlKSB7CisgICAgICAg
IFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRl
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2gpOwotICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRDcmFzaDptX25hdmlnYXRpb25TdGF0ZS5t
X3dlYlZpZXddOworICAgIEFTU0VSVChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2gpOworICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRDcmFzaDptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9u
U3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRCZWNvbWVSZXNwb25zaXZlKFdlYlBh
Z2VQcm94eSYgcGFnZSkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNpdmUpCisg
ICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lUmVzcG9uc2l2ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJW
aWV3V2ViUHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNpdmU6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJW
aWV3XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+
KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lUmVz
cG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAog
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRCZWNvbWVV
bnJlc3BvbnNpdmUoV2ViUGFnZVByb3h5JiBwYWdlKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQmVj
b21lVW5yZXNwb25zaXZlKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVVucmVzcG9uc2l2ZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRp
b25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
W3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVVucmVzcG9uc2l2ZTpt
X25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZp
Z2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmll
d1dlYlByb2Nlc3NEaWRCZWNvbWVVbnJlc3BvbnNpdmU6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2Vi
Vmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIFJlZlB0cjxBUEk6OkRhdGE+IE5hdmlnYXRpb25TdGF0
ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2ViQ3J5cHRvTWFzdGVyS2V5KFdlYlBhZ2VQcm94eSYpCiB7
Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldykgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJW
aWV3KSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBtYXN0ZXJLZXk7CiAgICAgICAgIGlmICgh
Z2V0RGVmYXVsdFdlYkNyeXB0b01hc3RlcktleShtYXN0ZXJLZXkpKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xMDgxLDExICsxMDgxLDExIEBAIFJlZlB0cjxBUEk6OkRhdGE+IE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2ViQ3J5cHRvTWFzdGVyS2V5KFdlYlBh
Z2VQCiAgICAgICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBt
YXN0ZXJLZXkuc2l6ZSgpKTsKICAgICB9CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9
IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIE5TRGF0YSAqZGF0YSA9IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViQ3J5cHRv
TWFzdGVyS2V5Rm9yV2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXddOworICAgIE5T
RGF0YSAqZGF0YSA9IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKICAgICByZXR1cm4g
QVBJOjpEYXRhOjpjcmVhdGVXaXRob3V0Q29weWluZyhkYXRhKTsKIH0KIApAQCAtMTA5Nyw2MyAr
MTA5Nyw2MyBAQCBSZWZQdHI8QVBJOjpTdHJpbmc+IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbgogCiB2b2lkIE5hdmlnYXRpb25TdGF0
ZTo6TmF2aWdhdGlvbkNsaWVudDo6bmF2aWdhdGlvbkFjdGlvbkRpZEJlY29tZURvd25sb2FkKFdl
YlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbiwgRG93
bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMubmF2aWdhdGlvbkFjdGlvbkRpZEJlY29tZURvd25sb2Fk
KQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy5uYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21lRG93bmxvYWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0
aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUu
Z2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgbmF2aWdhdGlvbkFjdGlv
bjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRpZEJlY29tZURvd25sb2FkOndyYXBwZXIoZG93
bmxvYWQpXTsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBuYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIo
bmF2aWdhdGlvbkFjdGlvbikgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCldOwog
fQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6bmF2aWdhdGlvblJl
c3BvbnNlRGlkQmVjb21lRG93bmxvYWQoV2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uUmVz
cG9uc2UmIG5hdmlnYXRpb25SZXNwb25zZSwgRG93bmxvYWRQcm94eSYgZG93bmxvYWQpCiB7Ci0g
ICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMubmF2
aWdhdGlvblJlc3BvbnNlRGlkQmVjb21lRG93bmxvYWQpCisgICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLm5hdmlnYXRpb25SZXNwb25zZURpZEJl
Y29tZURvd25sb2FkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAg
IGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUubV93ZWJWaWV3IG5hdmlnYXRpb25SZXNwb25zZTp3cmFwcGVyKG5hdmlnYXRpb25S
ZXNwb25zZSkgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCldOworICAgIFtuYXZp
Z2F0aW9uRGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIG5hdmlnYXRpb25SZXNwb25zZTp3cmFwcGVyKG5hdmlnYXRpb25SZXNwb25z
ZSkgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCldOwogfQogCiB2b2lkIE5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGV4dE1lbnVEaWRDcmVhdGVEb3dubG9h
ZChXZWJQYWdlUHJveHkmLCBEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKLSAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy5jb250ZXh0TWVudURp
ZENyZWF0ZURvd25sb2FkKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy5jb250ZXh0TWVudURpZENyZWF0ZURvd25sb2FkKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
Lm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlm
ICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nh
c3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKSkgIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBjb250ZXh0TWVudURp
ZENyZWF0ZURvd25sb2FkOndyYXBwZXIoZG93bmxvYWQpXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkg
IF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY29udGV4
dE1lbnVEaWRDcmVhdGVEb3dubG9hZDp3cmFwcGVyKGRvd25sb2FkKV07CiB9CiAKICNpZiBVU0Uo
UVVJQ0tfTE9PSykKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRT
dGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKGNvbnN0IFN0cmluZyYgZmls
ZU5hbWUsIGNvbnN0IFN0cmluZyYgdXRpKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUu
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydExvYWRGb3JRdWlja0xv
b2tEb2N1bWVudEluTWFpbkZyYW1lKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9j
dW1lbnRJbk1haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlldyBkaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1l
V2l0aEZpbGVOYW1lOmZpbGVOYW1lIHV0aTp1dGldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZFN0YXJ0TG9h
ZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6ZmlsZU5hbWUgdXRp
OnV0aV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRG
aW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZShjb25zdCBTaGFyZWRCdWZm
ZXImIGJ1ZmZlcikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5N
YWluRnJhbWUpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5G
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBt
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZp
Z2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmll
dyBkaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZTpidWZmZXIuY3Jl
YXRlTlNEYXRhKCkuZ2V0KCldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZEZpbmlzaExvYWRGb3JRdWlja0xv
b2tEb2N1bWVudEluTWFpbkZyYW1lOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKV07CiB9CiAj
ZW5kaWYKIApAQCAtMTE4NCwxOSArMTE4NCwxOSBAQCBzdGF0aWMgX1dLU09BdXRob3JpemF0aW9u
TG9hZFBvbGljeSB3a1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3koU09BdXRob3JpemF0aW9uTAog
CiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9y
U09BdXRob3JpemF0aW9uTG9hZChXZWJQYWdlUHJveHkmLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9s
aWN5IGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LCBjb25zdCBTdHJpbmcmIGV4dGVu
c2lvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0
aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5Rm9yRXh0ZW5zaW9uQ29tcGxldGlvbkhhbmRsZXIpIHsK
KyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGlj
eUZvckV4dGVuc2lvbkNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUu
bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUg
PSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYg
KCFuYXZpZ2F0aW9uRGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVu
dFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZv
clNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTpmb3JFeHRlbnNpb246Y29tcGxl
dGlvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPilu
YXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRl
Y2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTp3a1NPQXV0
aG9yaXphdGlvbkxvYWRQb2xpY3koY3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpIGZv
ckV4dGVuc2lvbjpleHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKV0oX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kpIG11dGFi
bGUgeworICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRl
bGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5OndrU09B
dXRob3JpemF0aW9uTG9hZFBvbGljeShjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSkg
Zm9yRXh0ZW5zaW9uOmV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBX
VEZNb3ZlKGNoZWNrZXIpXShfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxs
ZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBs
ZXRpb25IYW5kbGVyKCk7CkBAIC0xMjA4LDcgKzEyMDgsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0
ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZChX
ZWJQYQogLy8gSGlzdG9yeURlbGVnYXRlUHJpdmF0ZSBzdXBwb3J0CiAgICAgCiBOYXZpZ2F0aW9u
U3RhdGU6Okhpc3RvcnlDbGllbnQ6Okhpc3RvcnlDbGllbnQoTmF2aWdhdGlvblN0YXRlJiBuYXZp
Z2F0aW9uU3RhdGUpCi0gICAgOiBtX25hdmlnYXRpb25TdGF0ZShuYXZpZ2F0aW9uU3RhdGUpCisg
ICAgOiBtX25hdmlnYXRpb25TdGF0ZShtYWtlV2Vha1B0cihuYXZpZ2F0aW9uU3RhdGUpKQogewog
fQogCkBAIC0xMjE4LDUwICsxMjE4LDUwIEBAIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVu
dDo6fkhpc3RvcnlDbGllbnQoKQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVu
dDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2ViUGFnZVByb3h5JiwgY29uc3QgV2Vi
TmF2aWdhdGlvbkRhdGFTdG9yZSYgbmF2aWdhdGlvbkRhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlLm1faGlzdG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGEpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9oaXN0
b3J5RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRp
b25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IWhpc3RvcnlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW2hpc3RvcnlEZWxlZ2F0
ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkTmF2aWdhdGVXaXRoTmF2
aWdhdGlvbkRhdGE6d3JhcHBlcihBUEk6Ok5hdmlnYXRpb25EYXRhOjpjcmVhdGUobmF2aWdhdGlv
bkRhdGFTdG9yZSkpXTsKKyAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRh
dGE6d3JhcHBlcihBUEk6Ok5hdmlnYXRpb25EYXRhOjpjcmVhdGUobmF2aWdhdGlvbkRhdGFTdG9y
ZSkpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZFBlcmZv
cm1DbGllbnRSZWRpcmVjdChXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6OlN0cmluZyYgc291cmNl
VVJMLCBjb25zdCBXVEY6OlN0cmluZyYgZGVzdGluYXRpb25VUkwpCiB7Ci0gICAgaWYgKCFtX25h
dmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1D
bGllbnRSZWRpcmVjdEZyb21VUkxUb1VSTCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5t
X2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZy
b21VUkxUb1VSTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBoaXN0b3J5RGVsZWdhdGUg
PSBtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGhp
c3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW2hp
c3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkUGVy
Zm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnNv
dXJjZVVSTF0gdG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpkZXN0aW5hdGlvblVS
TF1dOworICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9tVVJMOltOU1VS
TCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c291cmNlVVJMXSB0b1VSTDpbTlNVUkwgX3dlYl9VUkxX
aXRoV1RGU3RyaW5nOmRlc3RpbmF0aW9uVVJMXV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRl
OjpIaXN0b3J5Q2xpZW50OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2ViUGFnZVByb3h5Jiwg
Y29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgV1RGOjpTdHJpbmcmIGRlc3RpbmF0
aW9uVVJMKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdEaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RGcm9tVVJMVG9VUkwpCisgICAg
aWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9oaXN0b3J5RGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRQZXJmb3JtU2VydmVyUmVkaXJlY3RGcm9tVVJMVG9VUkwpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS0+bV9oaXN0b3J5RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUubV93ZWJWaWV3IGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkw6W05TVVJM
IF93ZWJfVVJMV2l0aFdURlN0cmluZzpzb3VyY2VVUkxdIHRvVVJMOltOU1VSTCBfd2ViX1VSTFdp
dGhXVEZTdHJpbmc6ZGVzdGluYXRpb25VUkxdXTsKKyAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkUGVyZm9ybVNl
cnZlclJlZGlyZWN0RnJvbVVSTDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnNvdXJjZVVS
TF0gdG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpkZXN0aW5hdGlvblVSTF1dOwog
fQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkVXBkYXRlSGlzdG9y
eVRpdGxlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiB0aXRsZSwgY29uc3QgV1RG
OjpTdHJpbmcmIHVybCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9yeURl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkVXBkYXRlSGlzdG9yeVRpdGxlRm9yVVJMKQorICAgIGlm
ICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
VXBkYXRlSGlzdG9yeVRpdGxlRm9yVVJMKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGhp
c3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9yeURlbGVnYXRlLmdldCgp
OworICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9y
eURlbGVnYXRlLmdldCgpOwogICAgIGlmICghaGlzdG9yeURlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1f
d2ViVmlldyBkaWRVcGRhdGVIaXN0b3J5VGl0bGU6dGl0bGUgZm9yVVJMOltOU1VSTCBfd2ViX1VS
TFdpdGhXVEZTdHJpbmc6dXJsXV07CisgICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZFVwZGF0ZUhpc3RvcnlUaXRs
ZTp0aXRsZSBmb3JVUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzp1cmxdXTsKIH0KIAog
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6OndpbGxDaGFuZ2VJc0xvYWRpbmcoKQpAQCAtMTI3NywxMCAr
MTI3NywxMCBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6cmVsZWFzZU5ldHdvcmtBY3Rpdml0eShO
ZXR3b3JrQWN0aXZpdHlSZWxlYXNlUmVhc29uIHJlYXNvbgogCiAgICAgc3dpdGNoIChyZWFzb24p
IHsKICAgICBjYXNlIE5ldHdvcmtBY3Rpdml0eVJlbGVhc2VSZWFzb246OkxvYWRDb21wbGV0ZWQ6
Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lGKG1fd2ViVmlldy0+X3BhZ2UtPmlzQWx3YXlzT25Mb2dn
aW5nQWxsb3dlZCgpLCBQcm9jZXNzU3VzcGVuc2lvbiwgIiVwIE5hdmlnYXRpb25TdGF0ZSBpcyBy
ZWxlYXNpbmcgYmFja2dyb3VuZCBwcm9jZXNzIGFzc2VydGlvbiBiZWNhdXNlIGEgcGFnZSBsb2Fk
IGNvbXBsZXRlZCIsIHRoaXMpOworICAgICAgICBSRUxFQVNFX0xPR19JRihtX3dlYlZpZXcuZ2V0
KCktPl9wYWdlLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgUHJvY2Vzc1N1c3BlbnNpb24s
ICIlcCBOYXZpZ2F0aW9uU3RhdGUgaXMgcmVsZWFzaW5nIGJhY2tncm91bmQgcHJvY2VzcyBhc3Nl
cnRpb24gYmVjYXVzZSBhIHBhZ2UgbG9hZCBjb21wbGV0ZWQiLCB0aGlzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBOZXR3b3JrQWN0aXZpdHlSZWxlYXNlUmVhc29uOjpTY3JlZW5Mb2NrZWQ6
Ci0gICAgICAgIFJFTEVBU0VfTE9HX0lGKG1fd2ViVmlldy0+X3BhZ2UtPmlzQWx3YXlzT25Mb2dn
aW5nQWxsb3dlZCgpLCBQcm9jZXNzU3VzcGVuc2lvbiwgIiVwIE5hdmlnYXRpb25TdGF0ZSBpcyBy
ZWxlYXNpbmcgYmFja2dyb3VuZCBwcm9jZXNzIGFzc2VydGlvbiBiZWNhdXNlIHRoZSBzY3JlZW4g
d2FzIGxvY2tlZCIsIHRoaXMpOworICAgICAgICBSRUxFQVNFX0xPR19JRihtX3dlYlZpZXcuZ2V0
KCktPl9wYWdlLT5pc0Fsd2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgUHJvY2Vzc1N1c3BlbnNpb24s
ICIlcCBOYXZpZ2F0aW9uU3RhdGUgaXMgcmVsZWFzaW5nIGJhY2tncm91bmQgcHJvY2VzcyBhc3Nl
cnRpb24gYmVjYXVzZSB0aGUgc2NyZWVuIHdhcyBsb2NrZWQiLCB0aGlzKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIG1fbmV0d29ya0FjdGl2aXR5ID0gbnVsbHB0cjsKQEAgLTEyOTEsMjMg
KzEyOTEsMjMgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OnJlbGVhc2VOZXR3b3JrQWN0aXZpdHko
TmV0d29ya0FjdGl2aXR5UmVsZWFzZVJlYXNvbiByZWFzb24KIHZvaWQgTmF2aWdhdGlvblN0YXRl
OjpkaWRDaGFuZ2VJc0xvYWRpbmcoKQogewogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKG1fd2ViVmlldy0+X3BhZ2UtPnBhZ2VMb2FkU3RhdGUoKS5pc0xvYWRpbmcoKSkgeworICAg
IGlmIChtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkp
IHsKICAgICAgICAgLy8gV2UgZG8gbm90IHN0YXJ0IGEgbmV0d29yayBhY3Rpdml0eSBpZiBhIGxv
YWQgc3RhcnRzIGFmdGVyIHRoZSBzY3JlZW4gaGFzIGJlZW4gbG9ja2VkLgogICAgICAgICBpZiAo
W1VJQXBwIGlzU3VzcGVuZGVkVW5kZXJMb2NrXSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAg
ICAgICBpZiAobV9yZWxlYXNlTmV0d29ya0FjdGl2aXR5VGltZXIuaXNBY3RpdmUoKSkgewotICAg
ICAgICAgICAgUkVMRUFTRV9MT0dfSUYobV93ZWJWaWV3LT5fcGFnZS0+aXNBbHdheXNPbkxvZ2dp
bmdBbGxvd2VkKCksIFByb2Nlc3NTdXNwZW5zaW9uLCAiJXAgLSBOYXZpZ2F0aW9uU3RhdGUga2Vl
cHMgaXRzIHByb2Nlc3MgbmV0d29yayBhc3NlcnRpb24gYmVjYXVzZSBhIG5ldyBwYWdlIGxvYWQg
c3RhcnRlZCIsIHRoaXMpOworICAgICAgICAgICAgUkVMRUFTRV9MT0dfSUYobV93ZWJWaWV3Lmdl
dCgpLT5fcGFnZS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIFByb2Nlc3NTdXNwZW5zaW9u
LCAiJXAgLSBOYXZpZ2F0aW9uU3RhdGUga2VlcHMgaXRzIHByb2Nlc3MgbmV0d29yayBhc3NlcnRp
b24gYmVjYXVzZSBhIG5ldyBwYWdlIGxvYWQgc3RhcnRlZCIsIHRoaXMpOwogICAgICAgICAgICAg
bV9yZWxlYXNlTmV0d29ya0FjdGl2aXR5VGltZXIuc3RvcCgpOwogICAgICAgICB9CiAgICAgICAg
IGlmICghbV9uZXR3b3JrQWN0aXZpdHkpIHsKLSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGKG1f
d2ViVmlldy0+X3BhZ2UtPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBQcm9jZXNzU3VzcGVu
c2lvbiwgIiVwIC0gTmF2aWdhdGlvblN0YXRlIGlzIHRha2luZyBhIHByb2Nlc3MgbmV0d29yayBh
c3NlcnRpb24gYmVjYXVzZSBhIHBhZ2UgbG9hZCBzdGFydGVkIiwgdGhpcyk7Ci0gICAgICAgICAg
ICBtX25ldHdvcmtBY3Rpdml0eSA9IG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS50aHJvdHRs
ZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHkoIlBhZ2UgTG9hZCJfcykubW92ZVRvVW5pcXVlUHRyKCk7
CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRihtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5pc0Fs
d2F5c09uTG9nZ2luZ0FsbG93ZWQoKSwgUHJvY2Vzc1N1c3BlbnNpb24sICIlcCAtIE5hdmlnYXRp
b25TdGF0ZSBpcyB0YWtpbmcgYSBwcm9jZXNzIG5ldHdvcmsgYXNzZXJ0aW9uIGJlY2F1c2UgYSBw
YWdlIGxvYWQgc3RhcnRlZCIsIHRoaXMpOworICAgICAgICAgICAgbV9uZXR3b3JrQWN0aXZpdHkg
PSBtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5wcm9jZXNzKCkudGhyb3R0bGVyKCkuYmFja2dyb3Vu
ZEFjdGl2aXR5KCJQYWdlIExvYWQiX3MpLm1vdmVUb1VuaXF1ZVB0cigpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChtX25ldHdvcmtBY3Rpdml0eSkgewogICAgICAgICAvLyBUaGUgYXBwbGlj
YXRpb24gaXMgdmlzaWJsZSBzbyB3ZSBkZWxheSByZWxlYXNpbmcgdGhlIGJhY2tncm91bmQgYWN0
aXZpdHkgZm9yIDMgc2Vjb25kcyB0byBnaXZlIGl0IGEgY2hhbmNlIHRvIHN0YXJ0IGFub3RoZXIg
bmF2aWdhdGlvbgogICAgICAgICAvLyBiZWZvcmUgc3VzcGVuZGluZyB0aGUgV2ViQ29udGVudCBw
cm9jZXNzIDxyZGFyOi8vcHJvYmxlbS8yNzkxMDk2ND4uCi0gICAgICAgIFJFTEVBU0VfTE9HX0lG
KG1fd2ViVmlldy0+X3BhZ2UtPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBQcm9jZXNzU3Vz
cGVuc2lvbiwgIiVwIC0gTmF2aWdhdGlvblN0YXRlIHdpbGwgcmVsZWFzZSBpdHMgcHJvY2VzcyBu
ZXR3b3JrIGFzc2VydGlvbiBzb29uIGJlY2F1c2UgdGhlIHBhZ2UgbG9hZCBjb21wbGV0ZWQiLCB0
aGlzKTsKKyAgICAgICAgUkVMRUFTRV9MT0dfSUYobV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+aXNB
bHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIFByb2Nlc3NTdXNwZW5zaW9uLCAiJXAgLSBOYXZpZ2F0
aW9uU3RhdGUgd2lsbCByZWxlYXNlIGl0cyBwcm9jZXNzIG5ldHdvcmsgYXNzZXJ0aW9uIHNvb24g
YmVjYXVzZSB0aGUgcGFnZSBsb2FkIGNvbXBsZXRlZCIsIHRoaXMpOwogICAgICAgICBtX3JlbGVh
c2VOZXR3b3JrQWN0aXZpdHlUaW1lci5zdGFydE9uZVNob3QoM19zKTsKICAgICB9CiAjZW5kaWYK
QEAgLTE0MjIsNyArMTQyMiw3IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpkaWRTd2FwV2ViUHJv
Y2Vzc2VzKCkKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIC8vIFRyYW5zZmVyIG91ciBi
YWNrZ3JvdW5kIGFzc2VydGlvbiBmcm9tIHRoZSBvbGQgcHJvY2VzcyB0byB0aGUgbmV3IG9uZS4K
ICAgICBpZiAobV9uZXR3b3JrQWN0aXZpdHkpCi0gICAgICAgIG1fbmV0d29ya0FjdGl2aXR5ID0g
bV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eSgiUGFnZSBMb2FkIl9zKS5tb3ZlVG9VbmlxdWVQdHIoKTsKKyAgICAgICAgbV9uZXR3b3JrQWN0
aXZpdHkgPSBtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5wcm9jZXNzKCkudGhyb3R0bGVyKCkuYmFj
a2dyb3VuZEFjdGl2aXR5KCJQYWdlIExvYWQiX3MpLm1vdmVUb1VuaXF1ZVB0cigpOwogI2VuZGlm
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdh
dGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAppbmRleCA2
MmQ3YThhMThmNmViODM5NGNiZTAyY2ZhYzQzNzZhNTRkMGExZmExLi4zMGRjMmI5Nzc4MjgyNWYy
MzE4NGI0MjMwMWM1MGFjZjYwNjE3MjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9VSURlbGVnYXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvVUlEZWxlZ2F0ZS5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW1wb3J0ICJBUElVSUNsaWVudC5o
IgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogI2ltcG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+
CisjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgogCiBAY2xhc3MgX1dLQWN0aXZhdGVkRWxlbWVudElu
Zm87CiBAY2xhc3MgV0tXZWJWaWV3OwpAQCAtNDcsNyArNDgsNyBAQCBjbGFzcyBSZWdpc3RyYWJs
ZURvbWFpbjsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLWNsYXNzIFVJRGVsZWdhdGUgeworY2xh
c3MgVUlEZWxlZ2F0ZSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxVSURlbGVnYXRlPiB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgVUlEZWxlZ2F0
ZShXS1dlYlZpZXcgKik7CkBAIC03Miw3ICs3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEFQ
STo6Q29udGV4dE1lbnVDbGllbnQKICAgICAgICAgdm9pZCBtZW51RnJvbVByb3Bvc2VkTWVudShX
ZWJQYWdlUHJveHkmLCBOU01lbnUgKiwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmLCBBUEk6
Ok9iamVjdCosIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmV0YWluUHRyPE5TTWVudT4mJik+JiYp
IG92ZXJyaWRlOwogCi0gICAgICAgIFVJRGVsZWdhdGUmIG1fdWlEZWxlZ2F0ZTsKKyAgICAgICAg
V2Vha1B0cjxVSURlbGVnYXRlPiBtX3VpRGVsZWdhdGU7CiAgICAgfTsKICNlbmRpZgogCkBAIC0x
MzEsNyArMTMyLDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQog
ICAgICAgICB2b2lkIHNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3Mo
V2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgRnJhbWVJbmZvRGF0YSYmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBmaW5hbDsKICNlbmRpZgotICAgICAgICBi
b29sIG5lZWRzRm9udEF0dHJpYnV0ZXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOyB9Cisg
ICAgICAgIGJvb2wgbmVlZHNGb250QXR0cmlidXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
dWlEZWxlZ2F0ZSA/IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENo
YW5nZUZvbnRBdHRyaWJ1dGVzIDogZmFsc2U7IH0KICAgICAgICAgdm9pZCBkaWRDaGFuZ2VGb250
QXR0cmlidXRlcyhjb25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYpIGZpbmFsOwogICAgICAg
ICB2b2lkIGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQ
cm94eSYsIFdlYkZyYW1lUHJveHkmLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgQVBJOjpTZWN1cml0
eU9yaWdpbiYsIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkmKSBmaW5hbDsKICAgICAg
ICAgdm9pZCBjaGVja1VzZXJNZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5Jiwg
V2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2lu
JiwgVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUHJveHkmKSBmaW5hbDsKQEAgLTE2MywxMCArMTY0
LDEwIEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JTcGVl
Y2hSZWNvZ25pdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQcm94eSYsIEFQSTo6U2VjdXJp
dHlPcmlnaW4mLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmKSBmaW5hbDsKIAotICAg
ICAgICBVSURlbGVnYXRlJiBtX3VpRGVsZWdhdGU7CisgICAgICAgIFdlYWtQdHI8VUlEZWxlZ2F0
ZT4gbV91aURlbGVnYXRlOwogICAgIH07CiAKLSAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKKyAg
ICBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+IG1fd2ViVmlldzsKICAgICBXZWFrT2JqQ1B0cjxpZCA8
V0tVSURlbGVnYXRlPiA+IG1fZGVsZWdhdGU7CiAKICAgICBzdHJ1Y3QgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbSBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUubW0KaW5kZXggZDNiNzQxODk1YTRiMjhmYmVi
ZDMxNTg2NmE3Zjg5NTE3NDhmMGNmOC4uOTg1YjA3ZDNhMjg5ZjU2YmU3MGIzNTRjMTI0ODMyYWVl
NzgyYjM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxl
Z2F0ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1t
CkBAIC0xODcsNyArMTg3LDcgQEAgdm9pZCBVSURlbGVnYXRlOjpzZXREZWxlZ2F0ZShpZCA8V0tV
SURlbGVnYXRlPiBkZWxlZ2F0ZSkKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogVUlEZWxl
Z2F0ZTo6Q29udGV4dE1lbnVDbGllbnQ6OkNvbnRleHRNZW51Q2xpZW50KFVJRGVsZWdhdGUmIHVp
RGVsZWdhdGUpCi0gICAgOiBtX3VpRGVsZWdhdGUodWlEZWxlZ2F0ZSkKKyAgICA6IG1fdWlEZWxl
Z2F0ZShtYWtlV2Vha1B0cih1aURlbGVnYXRlKSkKIHsKIH0KIApAQCAtMTk3LDIwICsxOTcsMjMg
QEAgVUlEZWxlZ2F0ZTo6Q29udGV4dE1lbnVDbGllbnQ6On5Db250ZXh0TWVudUNsaWVudCgpCiAK
IHZvaWQgVUlEZWxlZ2F0ZTo6Q29udGV4dE1lbnVDbGllbnQ6Om1lbnVGcm9tUHJvcG9zZWRNZW51
KFdlYlBhZ2VQcm94eSYsIE5TTWVudSAqbWVudSwgY29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEm
LCBBUEk6Ok9iamVjdCogdXNlckluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmV0YWluUHRy
PE5TTWVudT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRNZW51Rm9yRWxlbWVudAotICAgICAg
ICAmJiAhbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZv
ckVsZW1lbnRVc2VySW5mbwotICAgICAgICAmJiAhbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdHZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVGb3JFbGVtZW50VXNlcklu
Zm9Db21wbGV0aW9uSGFuZGxlcikKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1lbnUpOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3Q29udGV4dE1lbnVGb3JFbGVtZW50CisgICAgICAgICYmICFtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVsZW1lbnRV
c2VySW5mbworICAgICAgICAmJiAhbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51Rm9yRWxlbWVudFVzZXJJbmZvQ29tcGxl
dGlvbkhhbmRsZXIpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihtZW51KTsKKwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAg
aWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1lbnUpOwog
CiAgICAgYXV0byBjb250ZXh0TWVudUVsZW1lbnRJbmZvID0gYWRvcHROUyhbW19XS0NvbnRleHRN
ZW51RWxlbWVudEluZm8gYWxsb2NdIGluaXRdKTsKIAotICAgIGlmIChtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0dldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUZvckVs
ZW1lbnRVc2VySW5mb0NvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0dldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUZv
ckVsZW1lbnRVc2VySW5mb0NvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGF1dG8gY2hlY2tl
ciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwg
QHNlbGVjdG9yKF93ZWJWaWV3OmdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudTpmb3JFbGVt
ZW50OnVzZXJJbmZvOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgICAgICBbKGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGdl
dENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVF
bGVtZW50SW5mby5nZXQoKSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1Nl
Y3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsIGNvbXBsZXRpb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChOU01lbnUgKm1lbnUpIG11dGFibGUg
eworICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBnZXRDb250ZXh0TWVudUZyb21Qcm9w
b3NlZE1lbnU6bWVudSBmb3JFbGVtZW50OmNvbnRleHRNZW51RWxlbWVudEluZm8uZ2V0KCkgdXNl
ckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5m
by0+d3JhcHBlcigpKSA6IG5pbCBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpXSAoTlNNZW51ICptZW51KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChj
aGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIo
KTsKQEAgLTIyMCwxNiArMjIzLDE2IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6Q29udGV4dE1lbnVDbGll
bnQ6Om1lbnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYsIE5TTWVudSAqCiAgICAgfQog
ICAgIAogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgaWYgKG1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29udGV4dE1lbnVGb3JFbGVtZW50
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBjb250ZXh0TWVu
dTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKV0pOworICAgIGlm
IChtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVs
ZW1lbnQpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKSBjb250ZXh0TWVudTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5m
by5nZXQoKV0pOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBjb250ZXh0TWVu
dTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSB1c2VySW5mbzp1
c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFw
cGVyKCkpIDogbmlsXSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoWyhpZCA8V0tVSURlbGVnYXRl
UHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCku
Z2V0KCkgY29udGV4dE1lbnU6bWVudSBmb3JFbGVtZW50OmNvbnRleHRNZW51RWxlbWVudEluZm8u
Z2V0KCkgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+
Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF0pOwogICAgIEFMTE9XX0RFUFJFQ0FURURfREVD
TEFSQVRJT05TX0VORAogfQogI2VuZGlmCiAKIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpVSUNsaWVu
dChVSURlbGVnYXRlJiB1aURlbGVnYXRlKQotICAgIDogbV91aURlbGVnYXRlKHVpRGVsZWdhdGUp
CisgICAgOiBtX3VpRGVsZWdhdGUobWFrZVdlYWtQdHIodWlEZWxlZ2F0ZSkpCiB7CiB9CiAKQEAg
LTIzOSwxOCArMjQyLDIxIEBAIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp+VUlDbGllbnQoKQogCiB2
b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlKFdlYktpdDo6V2ViUGFnZVBy
b3h5JiwgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMmJiB3aW5kb3dGZWF0dXJlcywgUmVmPEFQSTo6
TmF2aWdhdGlvbkFjdGlvbj4mJiBuYXZpZ2F0aW9uQWN0aW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlZlB0cjxXZWJQYWdlUHJveHk+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIp
OworCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBBU1NFUlQoZGVsZWdhdGUpOwogCi0gICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHRO
UyhbbV91aURlbGVnYXRlLm1fd2ViVmlldy0+X2NvbmZpZ3VyYXRpb24gY29weV0pOwotICAgIFtj
b25maWd1cmF0aW9uIF9zZXRSZWxhdGVkV2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsK
KyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFttX3VpRGVsZWdhdGUtPm1fd2ViVmll
dy5nZXQoKS0+X2NvbmZpZ3VyYXRpb24gY29weV0pOworICAgIFtjb25maWd1cmF0aW9uIF9zZXRS
ZWxhdGVkV2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiAKICAg
ICBhdXRvIGFwaVdpbmRvd0ZlYXR1cmVzID0gQVBJOjpXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKHdp
bmRvd0ZlYXR1cmVzKTsKIAotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0NyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25X
aW5kb3dGZWF0dXJlc0FzeW5jKSB7CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0NyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25B
Y3Rpb25XaW5kb3dGZWF0dXJlc0FzeW5jKSB7CiAgICAgICAgIGF1dG8gY2hlY2tlciA9IENvbXBs
ZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9y
KF93ZWJWaWV3OmNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbjpmb3JOYXZpZ2F0aW9uQWN0
aW9uOndpbmRvd0ZlYXR1cmVzOmNvbXBsZXRpb25IYW5kbGVyOikpOwogCi0gICAgICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dl
YlZpZXcgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkg
Zm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHdpbmRvd0ZlYXR1
cmVzOndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9j
a1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hl
Y2tlciA9IFdURk1vdmUoY2hlY2tlciksIHJlbGF0ZWRXZWJWaWV3ID0gUmV0YWluUHRyPFdLV2Vi
Vmlldz4obV91aURlbGVnYXRlLm1fd2ViVmlldyldIChXS1dlYlZpZXcgKndlYlZpZXcpIG11dGFi
bGUgeworICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjcmVhdGVXZWJWaWV3V2l0aENv
bmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBmb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBw
ZXIobmF2aWdhdGlvbkFjdGlvbikgd2luZG93RmVhdHVyZXM6d3JhcHBlcihhcGlXaW5kb3dGZWF0
dXJlcykgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKSwg
cmVsYXRlZFdlYlZpZXcgPSBtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKV0gKFdLV2ViVmll
dyAqd2ViVmlldykgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlv
bkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0yNjcsMzMgKzI3
MywzNiBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlKFdlYktpdDo6
V2ViUGFnZVByb3h5JiwgV2ViQ29yZTo6V2luZG93RgogICAgICAgICB9KS5nZXQoKV07CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0NyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rp
b25XaW5kb3dGZWF0dXJlcykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0NyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rp
b25XaW5kb3dGZWF0dXJlcykKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxw
dHIpOwogCi0gICAgUmV0YWluUHRyPFdLV2ViVmlldz4gd2ViVmlldyA9IFtkZWxlZ2F0ZSB3ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9u
OmNvbmZpZ3VyYXRpb24uZ2V0KCkgZm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRp
b25BY3Rpb24pIHdpbmRvd0ZlYXR1cmVzOndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpXTsKKyAg
ICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gW2RlbGVnYXRlIHdlYlZpZXc6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0
aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgZm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmln
YXRpb25BY3Rpb24pIHdpbmRvd0ZlYXR1cmVzOndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpXTsK
ICAgICBpZiAoIXdlYlZpZXcpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxs
cHRyKTsKIAotICAgIGlmIChbd2ViVmlldy0+X2NvbmZpZ3VyYXRpb24gX3JlbGF0ZWRXZWJWaWV3
XSAhPSBtX3VpRGVsZWdhdGUubV93ZWJWaWV3KQorICAgIGlmIChbd2ViVmlldy5nZXQoKS0+X2Nv
bmZpZ3VyYXRpb24gX3JlbGF0ZWRXZWJWaWV3XSAhPSBtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5n
ZXQoKS5nZXQoKSkKICAgICAgICAgW05TRXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNp
c3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpAIlJldHVybmVkIFdLV2ViVmlldyB3YXMgbm90IGNyZWF0
ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbi4iXTsKICAgICBjb21wbGV0aW9uSGFuZGxl
cih3ZWJWaWV3LT5fcGFnZS5nZXQoKSk7CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnJ1bkphdmFTY3JpcHRBbGVydChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6U3RyaW5n
JiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgRnVu
Y3Rpb248dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhN
ZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOworCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0QWxl
cnRQYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRl
bGVnYXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2Vy
OjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bkphdmFTY3JpcHRB
bGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjop
KTsKLSAgICBbZGVsZWdhdGUgd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkphdmFT
Y3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBw
ZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29t
cGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0geworICAgIFtk
ZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJ1bkph
dmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndy
YXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkg
Y29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gewogICAg
ICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0zMDMsMTkg
KzMxMiwyMiBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQo
V2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cgogCiB2b2lkIFVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5KiB3ZWJGcmFtZVByb3h5LCBGcmFtZUlu
Zm9EYXRhJiYgZnJhbWVJbmZvLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdS
dW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2VJbml0aWF0ZWRCeUZyYW1lQ29tcGxl
dGlvbkhhbmRsZXIpIHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3UnVuSmF2YVNjcmlwdENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5p
dGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpIHsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRl
bGVnYXRlLmdldCgpLCBAc2VsZWN0b3Iod2ViVmlldzpydW5KYXZhU2NyaXB0Q29uZmlybVBhbmVs
V2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBb
ZGVsZWdhdGUgd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkphdmFTY3JpcHRDb25m
aXJtUGFuZWxXaXRoTWVzc2FnZTptZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihBUEk6
OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11
dGFibGUgeworICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIHJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZTptZXNzYWdlIGlu
aXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJh
bWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3Zl
KGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+
Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CkBAIC0zMjUsMTkgKzMzNywyMiBAQCB2
b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShXZWJQYWdlUHJv
eHkmIHBhZ2UsIGNvbnN0IFdURjo6UwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5K
YXZhU2NyaXB0UHJvbXB0KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBkZWZhdWx0VmFsdWUsIFdlYkZyYW1lUHJveHkqLCBG
cmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBGdW5jdGlvbjx2b2lkKGNvbnN0IFdURjo6U3RyaW5n
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1J1bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHRE
ZWZhdWx0VGV4dEluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgeworICAgIGlmICgh
bV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuSmF2YVNj
cmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdERlZmF1bHRUZXh0SW5pdGlhdGVkQnlGcmFtZUNv
bXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZygpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoU3RyaW5nKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBj
aGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdl
dCgpLCBAc2VsZWN0b3Iod2ViVmlldzpydW5KYXZhU2NyaXB0VGV4dElucHV0UGFuZWxXaXRoUHJv
bXB0OmRlZmF1bHRUZXh0OmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0g
ICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBydW5KYXZhU2NyaXB0
VGV4dElucHV0UGFuZWxXaXRoUHJvbXB0Om1lc3NhZ2UgZGVmYXVsdFRleHQ6ZGVmYXVsdFZhbHVl
IGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUo
ZnJhbWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpXSAoTlNTdHJpbmcgKnJlc3VsdCkgbXV0YWJsZSB7CisgICAgW2RlbGVnYXRl
IHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcnVuSmF2YVNjcmlw
dFRleHRJbnB1dFBhbmVsV2l0aFByb21wdDptZXNzYWdlIGRlZmF1bHRUZXh0OmRlZmF1bHRWYWx1
ZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3Zl
KGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKV0gKE5TU3RyaW5nICpyZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAo
Y2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CkBAIC0zNDcsNyArMzYy
LDEwIEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoV2Vi
UGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OnJlcXVlc3RTdG9yYWdlQWNjZXNzQ29uZmlybShXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94
eSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiByZXF1
ZXN0aW5nRG9tYWluLCBjb25zdCBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiYgY3VycmVudERv
bWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7Cisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihm
YWxzZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdl
dCgpOwogICAgIGlmICghZGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOwogICAgICAgICByZXR1cm47CkBAIC0zNTYsMjAgKzM3NCwyMCBAQCB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc0NvbmZpcm0oV2ViUGFnZVByb3h5JiB3
ZWJQYWdlUHJveAogICAgIC8vIFNvbWUgc2l0ZXMgaGF2ZSBxdWlya3Mgd2hlcmUgbXVsdGlwbGUg
bG9naW4gZG9tYWlucyByZXF1aXJlIHN0b3JhZ2UgYWNjZXNzLgogICAgIGlmIChhdXRvIGFkZGl0
aW9uYWxMb2dpbkRvbWFpbiA9IFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbjo6ZmluZEFk
ZGl0aW9uYWxMb2dpbkRvbWFpbihjdXJyZW50RG9tYWluLCByZXF1ZXN0aW5nRG9tYWluKSkgewog
I2lmICFQTEFURk9STShXQVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQTEVUVikKLSAgICAgICAgcHJl
c2VudFN0b3JhZ2VBY2Nlc3NBbGVydFF1aXJrKG1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcsIHJlcXVl
c3RpbmdEb21haW4sICphZGRpdGlvbmFsTG9naW5Eb21haW4sIGN1cnJlbnREb21haW4sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcHJlc2VudFN0b3JhZ2VBY2Nlc3NBbGVy
dFF1aXJrKG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpLCByZXF1ZXN0aW5nRG9t
YWluLCAqYWRkaXRpb25hbExvZ2luRG9tYWluLCBjdXJyZW50RG9tYWluLCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0U3RvcmFnZUFj
Y2Vzc1BhbmVsVW5kZXJGaXJzdFBhcnR5Q29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RTdG9yYWdlQWNjZXNz
UGFuZWxVbmRlckZpcnN0UGFydHlDb21wbGV0aW9uSGFuZGxlcikgewogI2lmICFQTEFURk9STShX
QVRDSE9TKSAmJiAhUExBVEZPUk0oQVBQTEVUVikKLSAgICAgICAgcHJlc2VudFN0b3JhZ2VBY2Nl
c3NBbGVydChtX3VpRGVsZWdhdGUubV93ZWJWaWV3LCByZXF1ZXN0aW5nRG9tYWluLCBjdXJyZW50
RG9tYWluLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHByZXNlbnRTdG9y
YWdlQWNjZXNzQWxlcnQobV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCksIHJlcXVl
c3RpbmdEb21haW4sIGN1cnJlbnREb21haW4sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
ICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0
b3IoX3dlYlZpZXc6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NQYW5lbEZvckRvbWFpbjp1bmRlckN1cnJl
bnREb21haW46Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyByZXF1ZXN0U3Rv
cmFnZUFjY2Vzc1BhbmVsRm9yRG9tYWluOnJlcXVlc3RpbmdEb21haW4uc3RyaW5nKCkgdW5kZXJD
dXJyZW50RG9tYWluOmN1cnJlbnREb21haW4uc3RyaW5nKCkgY29tcGxldGlvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKKyAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsRm9yRG9t
YWluOnJlcXVlc3RpbmdEb21haW4uc3RyaW5nKCkgdW5kZXJDdXJyZW50RG9tYWluOmN1cnJlbnRE
b21haW4uc3RyaW5nKCkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShj
aGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNv
bXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwpAQCAtMzc5LDE1ICszOTcsMTggQEAgdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NDb25maXJtKFdlYlBh
Z2VQcm94eSYgd2ViUGFnZVByb3gKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRl
UG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OldlYlBhZ2VQcm94
eSYgcGFnZSwgV2ViS2l0OjpXZWJGcmFtZVByb3h5JiBmcmFtZSwgY29uc3QgRnJhbWVJbmZvRGF0
YSYgZnJhbWVJbmZvLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RH
ZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZURlY2lzaW9uSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuOworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoZmFsc2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdSZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWVEZWNpc2lvbkhhbmRs
ZXIpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgCi0gICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxl
Z2F0ZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
ZmFsc2UpOwogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tl
cjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6cmVxdWVzdEdlb2xv
Y2F0aW9uUGVybWlzc2lvbkZvckZyYW1lOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJW
aWV3IHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZTp3cmFwcGVyKEFQSTo6RnJh
bWVJbmZvOjpjcmVhdGUoRnJhbWVJbmZvRGF0YSB7IGZyYW1lSW5mbyB9LCAmcGFnZSkpIGRlY2lz
aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5n
ZShjb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0ciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIp
XSAoQk9PTCByZXN1bHQpIG11dGFibGUgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJl
cXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZv
OjpjcmVhdGUoRnJhbWVJbmZvRGF0YSB7IGZyYW1lSW5mbyB9LCAmcGFnZSkpIGRlY2lzaW9uSGFu
ZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShjb21w
bGV0aW9uSGFuZGxlciwgbnVsbHB0ciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9P
TCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRs
ZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXIt
PmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzk3LDM2ICs0MTgsNDQgQEAgdm9pZCBV
SURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9u
UmVxdWVzdChXZWJLaXQ6OlcKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkUmVzaWdu
SW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNlKFdlYlBhZ2VQcm94eSYsIEFQSTo6
T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNl
V2l0aFVzZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZXNpZ25J
bnB1dEVsZW1lbnRTdHJvbmdQYXNzd29yZEFwcGVhcmFuY2VXaXRoVXNlckluZm8pCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcg
ZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNlV2l0aFVzZXJJbmZv
OnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndy
YXBwZXIoKSkgOiBuaWxdOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRl
IF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZFJlc2lnbklu
cHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFyYW5jZVdpdGhVc2VySW5mbzp1c2VySW5mbyA/
IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDog
bmlsXTsKIH0KIAogYm9vbCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2FuUnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUlu
aXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcjsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdl
SW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2ViUGFnZVByb3h5JiBwYWdl
LCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSosIEZyYW1lSW5mb0Rh
dGEmJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRp
b25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5p
dGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpIHsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRl
bGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlOm1lc3Nh
Z2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92
ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2U6bWVzc2Fn
ZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3Zl
KGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNr
ZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwpAQCAtNDM2LDI2ICs0NjUsMjgg
QEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
ZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUEk6
OlNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgV1RGOjpTdHJpbmcmIGRhdGFi
YXNlTmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGxv
bmcgY3VycmVudFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9yaWdpblVzYWdlLCB1
bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgZXhwZWN0
ZWRVc2FnZSwgRnVuY3Rpb248dm9pZCAodW5zaWduZWQgbG9uZyBsb25nKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luQ3VycmVudFF1b3RhQ3VycmVu
dE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVjaXNpb25IYW5k
bGVyICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZURhdGFi
YXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlOYW1lQ3VycmVudFF1
b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVj
aXNpb25IYW5kbGVyKSB7CisgICAgLy8gVXNlIDUwIE1CIGFzIHRoZSBkZWZhdWx0IGRhdGFiYXNl
IHF1b3RhLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UGVyT3JpZ2luRGF0YWJhc2VR
dW90YSA9IDUwICogMTAyNCAqIDEwMjQ7CiAKLSAgICAgICAgLy8gVXNlIDUwIE1CIGFzIHRoZSBk
ZWZhdWx0IGRhdGFiYXNlIHF1b3RhLgotICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVs
dFBlck9yaWdpbkRhdGFiYXNlUXVvdGEgPSA1MCAqIDEwMjQgKiAxMDI0OworICAgIGlmICghbV91
aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZGVmYXVsdFBlck9y
aWdpbkRhdGFiYXNlUXVvdGEpOworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luQ3VycmVudFF1
b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVj
aXNpb25IYW5kbGVyICYmICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
ZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5EYXRhYmFzZU5hbWVEaXNwbGF5TmFt
ZUN1cnJlbnRRdW90YUN1cnJlbnRPcmlnaW5Vc2FnZUN1cnJlbnREYXRhYmFzZVVzYWdlRXhwZWN0
ZWRVc2FnZURlY2lzaW9uSGFuZGxlcikgewogCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRl
ZmF1bHRQZXJPcmlnaW5EYXRhYmFzZVF1b3RhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
ZGVsZWdhdGUpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFF1b3RhKTsKKyAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGVmYXVsdFBlck9yaWdpbkRhdGFiYXNlUXVvdGEpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUKHNlY3VyaXR5T3JpZ2luKTsKIAot
ICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZURhdGFi
YXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlOYW1lQ3VycmVudFF1
b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVj
aXNpb25IYW5kbGVyKSB7CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURp
c3BsYXlOYW1lQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNh
Z2VFeHBlY3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyKSB7CiAgICAgICAgIGF1dG8gY2hlY2tlciA9
IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNl
bGVjdG9yKF93ZWJWaWV3OmRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjpkYXRh
YmFzZU5hbWU6ZGlzcGxheU5hbWU6Y3VycmVudFF1b3RhOmN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJy
ZW50RGF0YWJhc2VVc2FnZTpleHBlY3RlZFVzYWdlOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAgICAg
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyBkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46d3JhcHBl
cigqc2VjdXJpdHlPcmlnaW4pIGRhdGFiYXNlTmFtZTpkYXRhYmFzZU5hbWUgZGlzcGxheU5hbWU6
ZGlzcGxheU5hbWUgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6
Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJlbnRVc2FnZSBleHBl
Y3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgeworICAgICAgICBb
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmln
aW46d3JhcHBlcigqc2VjdXJpdHlPcmlnaW4pIGRhdGFiYXNlTmFtZTpkYXRhYmFzZU5hbWUgZGlz
cGxheU5hbWU6ZGlzcGxheU5hbWUgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50T3Jp
Z2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJlbnRV
c2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9j
a1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hl
Y2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgewog
ICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgp
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxD
b21wbGV0aW9uSGFuZGxlcigpOwpAQCAtNDY1LDcgKzQ5Niw3IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVBy
b3h5KiwKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxD
aGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpkZWNpZGVE
YXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Y3VycmVudFF1b3RhOmN1cnJlbnRPcmlnaW5V
c2FnZTpjdXJyZW50RGF0YWJhc2VVc2FnZTpleHBlY3RlZFVzYWdlOmRlY2lzaW9uSGFuZGxlcjop
KTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3Vp
RGVsZWdhdGUubV93ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3
cmFwcGVyKCpzZWN1cml0eU9yaWdpbikgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50
T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJl
bnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
Y2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkg
eworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1
cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0eU9yaWdpbikgY3VycmVudFF1b3RhOmN1cnJlbnRR
dW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFz
ZVVzYWdlOmN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25I
YW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9u
ZyBuZXdRdW90YSkgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNC
ZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENh
bGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtNDg3LDE0ICs1MTgsMTcgQEAgc3RhdGljIGlubGlu
ZSBfV0tGb2N1c0RpcmVjdGlvbiB0b1dLRm9jdXNEaXJlY3Rpb24oV0tGb2N1c0RpcmVjdGlvbiBk
aXJlY3Rpb24pCiAKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnRha2VGb2N1cyhXZWJQYWdl
UHJveHkqLCBXS0ZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VGFrZUZvY3VzKQorICAgIGlmICghbV91aURl
bGVnYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Rha2VGb2N1cykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQo
KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwog
ICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBbKGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93
ZWJWaWV3IHRha2VGb2N1czp0b1dLRm9jdXNEaXJlY3Rpb24oZGlyZWN0aW9uKV07CisgICAgWyhp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5t
X3dlYlZpZXcuZ2V0KCkuZ2V0KCkgdGFrZUZvY3VzOnRvV0tGb2N1c0RpcmVjdGlvbihkaXJlY3Rp
b24pXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTI5LDExNiArNTYzLDE0NiBAQCBzdGF0
aWMgX1dLQXV0b3BsYXlFdmVudCB0b1dLQXV0b3BsYXlFdmVudChXZWJDb3JlOjpBdXRvcGxheUV2
ZW50IGV2ZW50KQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoYW5kbGVBdXRvcGxheUV2
ZW50KFdlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OkF1dG9wbGF5RXZlbnQgZXZlbnQsIE9wdGlvblNl
dDxXZWJDb3JlOjpBdXRvcGxheUV2ZW50RmxhZ3M+IGZsYWdzKQogewotICAgIGlmICghbV91aURl
bGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdIYW5kbGVBdXRvcGxheUV2ZW50V2l0aEZs
YWdzKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0hhbmRsZUF1dG9wbGF5RXZl
bnRXaXRoRmxhZ3MpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dl
YlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBoYW5kbGVBdXRvcGxheUV2ZW50OnRvV0tBdXRv
cGxheUV2ZW50KGV2ZW50KSB3aXRoRmxhZ3M6dG9XS0F1dG9wbGF5RXZlbnRGbGFncyhmbGFncyld
OworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGhhbmRsZUF1dG9wbGF5RXZlbnQ6dG9XS0F1
dG9wbGF5RXZlbnQoZXZlbnQpIHdpdGhGbGFnczp0b1dLQXV0b3BsYXlFdmVudEZsYWdzKGZsYWdz
KV07CiB9CiAKICNpZiBQTEFURk9STShNQUMpCiBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpj
YW5SdW5Nb2RhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3UnVuTW9kYWw7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdSdW5Nb2RhbDsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVu
TW9kYWwoV2ViUGFnZVByb3h5JikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3UnVuTW9kYWwpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3UnVuTW9kYWwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
d1J1bk1vZGFsOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3UnVuTW9kYWw6bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCldOwogfQogCiBmbG9hdCBVSURlbGVnYXRlOjpVSUNsaWVudDo6aGVhZGVy
SGVpZ2h0KFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIHdlYkZyYW1lUHJveHkpCiB7Ci0g
ICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0hlYWRlckhlaWdo
dCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0hlYWRlckhlaWdodCkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
Ci0gICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3
SGVhZGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIHJldHVybiBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0hlYWRlckhlaWdodDptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIGZsb2F0IFVJRGVsZWdhdGU6OlVJ
Q2xpZW50Ojpmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYpCiB7Ci0g
ICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Zvb3RlckhlaWdo
dCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Zvb3RlckhlaWdodCkKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
Ci0gICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3
Rm9vdGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIHJldHVybiBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Zvb3RlckhlaWdodDptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRyYXdIZWFkZXIoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIFdl
YkNvcmU6OkZsb2F0UmVjdCYmIHJlY3QpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RyYXdIZWFkZXJJblJlY3RGb3JQYWdlV2l0aFRpdGxlVVJMKQor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RyYXdIZWFkZXJJblJlY3RGb3JQYWdl
V2l0aFRpdGxlVVJMKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZHJhd0hlYWRlckluUmVjdDpyZWN0IGZvclBh
Z2VXaXRoVGl0bGU6ZnJhbWUudGl0bGUoKSBVUkw6ZnJhbWUudXJsKCldOworICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIGRyYXdIZWFkZXJJblJlY3Q6cmVjdCBmb3JQYWdlV2l0aFRpdGxlOmZy
YW1lLnRpdGxlKCkgVVJMOmZyYW1lLnVybCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6ZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2Vi
Q29yZTo6RmxvYXRSZWN0JiYgcmVjdCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RHJhd0Zvb3RlckluUmVjdEZvclBhZ2VXaXRoVGl0bGVVUkwpCisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RHJhd0Zvb3RlckluUmVjdEZvclBhZ2VX
aXRoVGl0bGVVUkwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dl
YlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkcmF3Rm9vdGVySW5SZWN0OnJlY3QgZm9yUGFn
ZVdpdGhUaXRsZTpmcmFtZS50aXRsZSgpIFVSTDpmcmFtZS51cmwoKV07CisgICAgWyhpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCkgZHJhd0Zvb3RlckluUmVjdDpyZWN0IGZvclBhZ2VXaXRoVGl0bGU6ZnJh
bWUudGl0bGUoKSBVUkw6ZnJhbWUudXJsKCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xp
ZW50OjpwYWdlRGlkU2Nyb2xsKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFNjcm9sbCkKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEaWRTY3JvbGwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVn
YXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXdEaWRTY3JvbGw6bV91aURlbGVnYXRlLm1fd2ViVmlld107Cisg
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdEaWRTY3JvbGw6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50Ojpmb2N1cyhXZWJQYWdlUHJveHkqKQogewotICAgIGlmICghbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLmZvY3VzV2ViVmlldykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVN
ZXRob2RzLmZvY3VzV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVs
ZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfZm9jdXNXZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF9mb2N1c1dlYlZpZXc6bV91aURlbGVnYXRlLT5t
X3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp1
bmZvY3VzKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZU1ldGhvZHMudW5mb2N1c1dlYlZpZXcpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy51bmZv
Y3VzV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfdW5m
b2N1c1dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3VuZm9jdXNXZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpXTsKIH0KIAogc3RhdGljIF9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVh
c29uIHRvV0tQbHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvbihXS1BsdWdpblVuYXZhaWxhYmlsaXR5
UmVhc29uIHJlYXNvbikKQEAgLTY1NywxNCArNzIxLDE3IEBAIHN0YXRpYyBfV0tQbHVnSW5VbmF2
YWlsYWJpbGl0eVJlYXNvbiB0b1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb24oV0tQbHVnaW5V
bmF2CiAgICAgCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp1bmF2YWlsYWJsZVBsdWdpbkJ1
dHRvbkNsaWNrZWQoV2ViUGFnZVByb3h5JiwgV0tQbHVnaW5VbmF2YWlsYWJpbGl0eVJlYXNvbiBy
ZWFzb24sIEFQSTo6RGljdGlvbmFyeSYgcGx1Z0luSW5mbykKIHsKLSAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VW5hdmFpbGFibGVQbHVnSW5CdXR0b25DbGlj
a2VkKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VuYXZhaWxhYmxlUGx1Z0lu
QnV0dG9uQ2xpY2tlZCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgdW5hdmFpbGFibGVQbHVnSW5CdXR0b25DbGlja2Vk
V2l0aFJlYXNvbjp0b1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb24ocmVhc29uKSBwbHVnSW5J
bmZvOndyYXBwZXIocGx1Z0luSW5mbyldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHVu
YXZhaWxhYmxlUGx1Z0luQnV0dG9uQ2xpY2tlZFdpdGhSZWFzb246dG9XS1BsdWdJblVuYXZhaWxh
YmlsaXR5UmVhc29uKHJlYXNvbikgcGx1Z0luSW5mbzp3cmFwcGVyKHBsdWdJbkluZm8pXTsKIH0K
ICAgICAKIHN0YXRpYyBfV0tSZXNvdXJjZUxpbWl0IHRvV0tSZXNvdXJjZUxpbWl0KFdLUmVzb3Vy
Y2VMaW1pdCBsaW1pdCkKQEAgLTY4MSw2MiArNzQ4LDc3IEBAIHN0YXRpYyBfV0tSZXNvdXJjZUxp
bWl0IHRvV0tSZXNvdXJjZUxpbWl0KFdLUmVzb3VyY2VMaW1pdCBsaW1pdCkKIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6ZGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRXaGlsZUlu
Rm9yZWdyb3VuZChXZWJQYWdlUHJveHkmLCBXS1Jlc291cmNlTGltaXQgbGltaXQpCiB7Ci0gICAg
aWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4Y2VlZEJhY2tn
cm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRXaGlsZUluRm9y
ZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxl
Z2F0ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkaWRFeGNlZWRCYWNrZ3JvdW5k
UmVzb3VyY2VMaW1pdFdoaWxlSW5Gb3JlZ3JvdW5kOnRvV0tSZXNvdXJjZUxpbWl0KGxpbWl0KV07
CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZEV4Y2VlZEJhY2tn
cm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQ6dG9XS1Jlc291cmNlTGltaXQobGlt
aXQpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90SGFuZGxlV2hlZWxF
dmVudChXZWJQYWdlUHJveHkqLCBjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50JiBldmVudCkKIHsK
LSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTm90SGFu
ZGxlV2hlZWxFdmVudCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWROb3RI
YW5kbGVXaGVlbEV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRl
IF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkTm90SGFuZGxlV2hlZWxFdmVudDpl
dmVudC5uYXRpdmVFdmVudCgpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWROb3RI
YW5kbGVXaGVlbEV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCldOwogfQogCiB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGJvb2wg
cmVzaXphYmxlKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdTZXRSZXNpemFibGUpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2V0
UmVzaXphYmxlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgc2V0UmVzaXphYmxlOnJlc2l6YWJsZV07CisgICAg
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
LT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgc2V0UmVzaXphYmxlOnJlc2l6YWJsZV07CiB9CiAKIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNldFdpbmRvd0ZyYW1lKFdlYktpdDo6V2ViUGFnZVBy
b3h5JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2V0V2luZG93RnJhbWUpCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2V0V2luZG93RnJhbWUpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0
KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmll
dyBzZXRXaW5kb3dGcmFtZTpmcmFtZV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgc2V0
V2luZG93RnJhbWU6ZnJhbWVdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp3aW5k
b3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQoV2ViQ29yZTo6Rmxv
YXRSZWN0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRs
ZXIpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFu
ZGxlcih7IH0pOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdHZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBnZXRXaW5kb3dG
cmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxl
ckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpn
ZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQ0dSZWN0IGZyYW1lKSB7Cisg
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZ2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhh
bmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRl
KGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6Z2V0V2luZG93RnJhbWVXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KSldKENHUmVjdCBmcmFtZSkgewogICAgICAgICBpZiAoY2hlY2tlci0+
Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtNzQ2LDI3ICs4
MjgsMzMgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6d2luZG93RnJhbWUoV2ViS2l0OjpX
ZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkMKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViSGl0
VGVzdFJlc3VsdERhdGEmIGRhdGEsIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+IG1vZGlm
aWVycywgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdNb3VzZURpZE1vdmVPdmVyRWxlbWVudFdpdGhGbGFnc1Vz
ZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld01vdXNlRGlkTW92ZU92
ZXJFbGVtZW50V2l0aEZsYWdzVXNlckluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gYXBpSGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0
VGVzdFJlc3VsdDo6Y3JlYXRlKGRhdGEpOwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgbW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRoRmxhZ3M6V2ViRXZl
bnRGYWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykgdXNlckluZm86dXNl
ckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBl
cigpKSA6IG5pbF07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dl
YlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbW91c2VEaWRNb3ZlT3Zl
ckVsZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRoRmxhZ3M6V2ViRXZl
bnRGYWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykgdXNlckluZm86dXNl
ckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBl
cigpKSA6IG5pbF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnRvb2xiYXJzQXJl
VmlzaWJsZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdHZXRUb29sYmFyc0FyZVZpc2libGVXaXRoQ29tcGxldGlvbkhhbmRsZXIpCisgICAgaWYgKCFt
X3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKKwor
ICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0VG9vbGJh
cnNBcmVWaXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIodHJ1ZSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKHRydWUpOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZ2V0VG9vbGJhcnNBcmVW
aXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBsZXRpb25IYW5k
bGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3
OmdldFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQk9PTCB2aXNp
YmxlKSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZ2V0VG9vbGJhcnNBcmVWaXNpYmxl
V2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2Fs
bENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmdldFRv
b2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQk9PTCB2aXNpYmxlKSB7
CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25I
YW5kbGVyKCk7CkBAIC03NzYsNTEgKzg2NCw2MyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50
Ojp0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248dm9pZChib29sKQog
CiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRDbGlja0F1dG9GaWxsQnV0dG9uKFdlYlBh
Z2VQcm94eSYsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbldpdGhVc2Vy
SW5mbykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDbGlja0F1dG9GaWxs
QnV0dG9uV2l0aFVzZXJJbmZvKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkQ2xpY2tBdXRvRmlsbEJ1dHRv
bldpdGhVc2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+
KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KSBkaWRDbGlja0F1dG9GaWxsQnV0dG9uV2l0aFVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nh
c3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOwogfQog
CiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG93UGFnZShXZWJQYWdlUHJveHkqKQogewot
ICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLnNob3dXZWJWaWV3KQorICAg
IGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGVNZXRob2RzLnNob3dXZWJWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
ZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPilkZWxlZ2F0ZSBfc2hvd1dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107Cisg
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3Nob3dXZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KICAgICAKIHZvaWQgVUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OnNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIoV2ViUGFnZVByb3h5
KiwgY29uc3QgV1RGOjpTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbWltZVR5cGUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6RGF0YSYgZGF0YSkK
IHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2F2ZURh
dGFUb0ZpbGVTdWdnZXN0ZWRGaWxlbmFtZU1pbWVUeXBlT3JpZ2luYXRpbmdVUkwpCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2F2ZURhdGFUb0ZpbGVTdWdnZXN0ZWRGaWxlbmFt
ZU1pbWVUeXBlT3JpZ2luYXRpbmdVUkwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHNhdmVEYXRhVG9GaWxlOndyYXBw
ZXIoZGF0YSkgc3VnZ2VzdGVkRmlsZW5hbWU6c3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6bWlt
ZVR5cGUgb3JpZ2luYXRpbmdVUkw6b3JpZ2luYXRpbmdVUkxdOworICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIHNhdmVEYXRhVG9GaWxlOndyYXBwZXIoZGF0YSkgc3VnZ2VzdGVkRmlsZW5hbWU6
c3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6bWltZVR5cGUgb3JpZ2luYXRpbmdVUkw6b3JpZ2lu
YXRpbmdVUkxdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lG
b3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEFQ
STo6U2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBXVEY6OkZ1bmN0aW9uPHZvaWQoYm9v
bCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uRm9yU2VjdXJp
dHlPcmlnaW5EZWNpc2lvbkhhbmRsZXIpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9u
Rm9yU2VjdXJpdHlPcmlnaW5EZWNpc2lvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKGZhbHNlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5k
bGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3
OnJlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uRm9yU2VjdXJpdHlPcmlnaW46ZGVjaXNpb25I
YW5kbGVyOikpOwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb25G
b3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKHNlY3VyaXR5T3JpZ2luKSBkZWNpc2lvbkhhbmRsZXI6
bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsK
KyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZXF1ZXN0Tm90aWZpY2F0aW9uUGVybWlzc2lv
bkZvclNlY3VyaXR5T3JpZ2luOndyYXBwZXIoc2VjdXJpdHlPcmlnaW4pIGRlY2lzaW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUg
ewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9u
SGFuZGxlcigpOwpAQCAtODMwLDQ2ICs5MzAsNTggQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViS2l0OjoK
IAogUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNwZWN0
b3JQcm94eSYgaW5zcGVjdG9yKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdDb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IpCisgICAgaWYgKCFt
X3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb246
OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdDb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IpCiAgICAgICAgIHJldHVybiBBUEk6
Okluc3BlY3RvckNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuIEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7CiAKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uJj4oW1soaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcg
Y29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVjdG9yKV0gX2FwaU9i
amVjdF0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRp
b24mPihbWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVj
dG9yOndyYXBwZXIoaW5zcGVjdG9yKV0gX2FwaU9iamVjdF0pOwogfQogCiB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJ
bnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEaWRBdHRhY2hMb2NhbEluc3BlY3RvcikKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGlkQXR0YWNoTG9jYWxJbnNwZWN0b3IpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBk
aWRBdHRhY2hMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOworICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIGRpZEF0dGFjaExvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVjdG9y
KV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OndpbGxDbG9zZUxvY2FsSW5zcGVj
dG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3RvclByb3h5JiBpbnNwZWN0b3IpCiB7Ci0gICAg
aWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxDbG9zZUxvY2Fs
SW5zcGVjdG9yKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxDbG9zZUxv
Y2FsSW5zcGVjdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5z
cGVjdG9yKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgd2lsbENsb3NlTG9jYWxJbnNw
ZWN0b3I6d3JhcHBlcihpbnNwZWN0b3IpXTsKIH0KIAogYm9vbCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6cnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSogd2ViRnJh
bWVQcm94eSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgQVBJOjpPcGVuUGFuZWxQYXJhbWV0
ZXJzKiBvcGVuUGFuZWxQYXJhbWV0ZXJzLCBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5
KiBsaXN0ZW5lcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3UnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnNJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlv
bkhhbmRsZXIpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bk9wZW5QYW5l
bFdpdGhQYXJhbWV0ZXJzSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtODc3LDcgKzk4OSw3IEBAIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bk9wZW5Q
YW5lbChXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkqIHdlYkZyCiAKICAgICBhdXRv
IGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUu
Z2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOmluaXRp
YXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7CiAKLSAgICBbZGVsZWdhdGUgd2ViVmll
dzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOndyYXBw
ZXIoKm9wZW5QYW5lbFBhcmFtZXRlcnMpIGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihmcmFtZSkg
Y29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2Vy
KSwgb3BlblBhbmVsUGFyYW1ldGVycyA9IG1ha2VSZWYoKm9wZW5QYW5lbFBhcmFtZXRlcnMpLCBs
aXN0ZW5lciA9IG1ha2VSZWZQdHIobGlzdGVuZXIpXSAoTlNBcnJheSAqVVJMcykgbXV0YWJsZSB7
CisgICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0
KCkgcnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6d3JhcHBlcigqb3BlblBhbmVsUGFyYW1ldGVy
cykgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKGZyYW1lKSBjb21wbGV0aW9uSGFuZGxlcjptYWtl
QmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBvcGVuUGFuZWxQYXJhbWV0ZXJz
ID0gbWFrZVJlZigqb3BlblBhbmVsUGFyYW1ldGVycyksIGxpc3RlbmVyID0gbWFrZVJlZlB0cihs
aXN0ZW5lcildIChOU0FycmF5ICpVUkxzKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXIt
PmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTkwMSwxNyAr
MTAxMywyMCBAQCBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVuUGFuZWwoV2ViUGFn
ZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5KiB3ZWJGcgogI2lmIEVOQUJMRShERVZJQ0VfT1JJ
RU5UQVRJT04pCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRBbGxvd0RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5JiBwYWdlLCBXZWJG
cmFtZVByb3h5JiB3ZWJGcmFtZVByb3h5LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlm
ICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91bGRBbGxvd0Rldmlj
ZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZURlY2lzaW9uSGFuZGxl
cikgewotICAgICAgICBwcmVzZW50T3JpZW50YXRpb25BY2Nlc3NBbGVydChtX3VpRGVsZWdhdGUu
bV93ZWJWaWV3LCBmcmFtZUluZm8uc2VjdXJpdHlPcmlnaW4uaG9zdCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoZmFsc2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzUmVxdWVzdGVkQnlGcmFtZURlY2lzaW9uSGFuZGxlcikgeworICAgICAgICBwcmVzZW50T3Jp
ZW50YXRpb25BY2Nlc3NBbGVydChtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSwg
ZnJhbWVJbmZvLnNlY3VyaXR5T3JpZ2luLmhvc3QsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9u
SGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2Vi
VmlldzpzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVk
QnlGcmFtZTpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBzaG91bGRBbGxvd0Rl
dmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZTp3cmFwcGVyKEFQ
STo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGRlY2lzaW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCBncmFudGVkKSBt
dXRhYmxlIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBzaG91bGRBbGxvd0RldmljZU9y
aWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJh
bWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGRlY2lzaW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCBncmFudGVkKSBtdXRhYmxl
IHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlv
bkhhbmRsZXIoKTsKQEAgLTkyMiwxNyArMTAzNywyMyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xp
ZW50OjpzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdlYktpdDo6
VwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRDaGFuZ2VGb250QXR0cmlidXRlcyhj
b25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYgZm9udEF0dHJpYnV0ZXMpCiB7CisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICghbmVlZHNGb250QXR0
cmlidXRlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHByaXZhdGVVSURlbGVnYXRl
ID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQo
KTsKLSAgICBbcHJpdmF0ZVVJRGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmll
dyBkaWRDaGFuZ2VGb250QXR0cmlidXRlczpmb250QXR0cmlidXRlcy5jcmVhdGVEaWN0aW9uYXJ5
KCkuZ2V0KCldOworICAgIGF1dG8gcHJpdmF0ZVVJRGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBbcHJpdmF0ZVVJ
RGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlk
Q2hhbmdlRm9udEF0dHJpYnV0ZXM6Zm9udEF0dHJpYnV0ZXMuY3JlYXRlRGljdGlvbmFyeSgpLmdl
dCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yVXNl
ck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5
JiBmcmFtZSwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhT3JpZ2luLCBBUEk6OlNlY3Vy
aXR5T3JpZ2luJiB0b3BMZXZlbE9yaWdpbiwgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94
eSYgcmVxdWVzdCkKIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGF1dG8gZGVsZWdh
dGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdl
dCgpOworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRv
IGRlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICByZXF1ZXN0LmRvRGVm
YXVsdEFjdGlvbigpOwogICAgICAgICByZXR1cm47CkBAIC05NzMsMjEgKzEwOTQsMjQgQEAgdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3QoV2ViUGFnZVByb3gKIAogICAgIC8vIEZJWE1FOiBQcm92aWRlIGEgc3BlY2lmaWMg
ZGVsZWdhdGUgZm9yIGRpc3BsYXkgY2FwdHVyZS4KICAgICBpZiAoIXJlcXVlc3QucmVxdWlyZXNE
aXNwbGF5Q2FwdHVyZSgpICYmIHJlc3BvbmRzVG9SZXF1ZXN0TWVkaWFDYXB0dXJlQXV0aG9yaXph
dGlvbikgewotICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmll
dyByZXF1ZXN0TWVkaWFDYXB0dXJlQXV0aG9yaXphdGlvbjpkZXZpY2VzIGRlY2lzaW9uSGFuZGxl
cjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOworICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcmVxdWVzdE1lZGlhQ2FwdHVyZUF1dGhv
cml6YXRpb246ZGV2aWNlcyBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFVSTCByZXF1ZXN0RnJhbWVVUkwgeyBmcmFt
ZS51cmwoKSB9OwogICAgIFVSTCBtYWluRnJhbWVVUkwgeyBmcmFtZS5wYWdlKCktPm1haW5GcmFt
ZSgpLT51cmwoKSB9OwogCi0gICAgW2RlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dl
YlZpZXcgcmVxdWVzdFVzZXJNZWRpYUF1dGhvcml6YXRpb25Gb3JEZXZpY2VzOmRldmljZXMgdXJs
OnJlcXVlc3RGcmFtZVVSTCBtYWluRnJhbWVVUkw6bWFpbkZyYW1lVVJMIGRlY2lzaW9uSGFuZGxl
cjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOworICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZXF1ZXN0VXNlck1lZGlhQXV0aG9yaXphdGlv
bkZvckRldmljZXM6ZGV2aWNlcyB1cmw6cmVxdWVzdEZyYW1lVVJMIG1haW5GcmFtZVVSTDptYWlu
RnJhbWVVUkwgZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiAjZW5kaWYK
IH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9u
Rm9yT3JpZ2luKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6
U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYU9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9w
TGV2ZWxPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0KQogewot
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKLSAgICBp
ZiAoIWRlbGVnYXRlIHx8ICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0lz
TWVkaWFDYXB0dXJlQXV0aG9yaXplZEZvckZyYW1lRGVjaXNpb25IYW5kbGVyKSB7CisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SXNNZWRpYUNhcHR1cmVBdXRob3Jp
emVkRm9yRnJhbWVEZWNpc2lvbkhhbmRsZXIpIHsKICAgICAgICAgcmVxdWVzdC5zZXRVc2VyTWVk
aWFBY2Nlc3NJbmZvKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwMDQsNyAr
MTEyOCw3IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1lZGlhUGVybWlz
c2lvbkZvck9yaWdpbihXZWJQYWdlUHJveHkmIHBhZ2UsCiAgICAgICAgICAgICBwcm90ZWN0ZWRS
ZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGluY2x1ZGVTZW5zaXRpdmVEZXRhaWxzKTsK
ICAgICAgICAgfSk7CiAKLSAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdh
dGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBpbmNsdWRlU2Vuc2l0aXZlTWVkaWFE
ZXZpY2VEZXRhaWxzOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CisgICAgICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIGluY2x1ZGVTZW5zaXRpdmVNZWRpYURldmljZURldGFpbHM6ZGVjaXNpb25I
YW5kbGVyLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAyMCwzMCArMTE0
NCwzNiBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjaGVja1VzZXJNZWRpYVBlcm1pc3Np
b25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5JiBwYWdlLAogICAgIFVSTCByZXF1ZXN0RnJhbWVVUkwg
eyBmcmFtZS51cmwoKSB9OwogICAgIFVSTCBtYWluRnJhbWVVUkwgeyBtYWluRnJhbWUtPnVybCgp
IH07CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvclVSTDpyZXF1
ZXN0RnJhbWVVUkwgbWFpbkZyYW1lVVJMOm1haW5GcmFtZVVSTCBmcmFtZUlkZW50aWZpZXI6ZnJh
bWUuZnJhbWVJRCgpLnRvVUludDY0KCkgZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5n
ZXQoKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY2hlY2tVc2VyTWVkaWFQZXJtaXNz
aW9uRm9yVVJMOnJlcXVlc3RGcmFtZVVSTCBtYWluRnJhbWVVUkw6bWFpbkZyYW1lVVJMIGZyYW1l
SWRlbnRpZmllcjpmcmFtZS5mcmFtZUlEKCkudG9VSW50NjQoKSBkZWNpc2lvbkhhbmRsZXI6ZGVj
aXNpb25IYW5kbGVyLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6bWVk
aWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0
ZUZsYWdzIHN0YXRlKQogewotICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IG1fdWlEZWxlZ2F0ZS5t
X3dlYlZpZXc7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGF1dG8gd2ViVmlldyA9IG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3OwogCiAgICAgW3dlYlZpZXcg
ZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJtZWRpYUNhcHR1cmVTdGF0ZSJdOwogCi0gICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwotICAgIGlmICghZGVsZWdh
dGUgfHwgIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TWVkaWFDYXB0dXJl
U3RhdGVEaWRDaGFuZ2UpCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBpZiAoIWRlbGVnYXRlIHx8ICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdNZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
d2ViVmlldyBtZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZTp0b1dLTWVkaWFDYXB0dXJlU3RhdGUo
c3RhdGUpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzp3ZWJWaWV3LmdldCgpLmdldCgpIG1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlOnRvV0tNZWRp
YUNhcHR1cmVTdGF0ZShzdGF0ZSldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpy
ZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYlBhZ2VQcm94eSosIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbiwgdWludDY0X3QgY3VycmVudFF1
b3RhLCB1aW50NjRfdCB0b3RhbEJ5dGVzTmVlZGVkLCBGdW5jdGlvbjx2b2lkICh1bnNpZ25lZCBs
b25nIGxvbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVXZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFG
b3JTZWN1cml0eU9yaWdpbkN1cnJlbnRRdW90YVRvdGFsQnl0ZXNOZWVkZWQpIHsKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGN1cnJlbnRR
dW90YSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5T3JpZ2luQ3VycmVudFF1
b3RhVG90YWxCeXRlc05lZWRlZCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50
UXVvdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihjdXJyZW50UXVvdGEpOwogICAgICAgICByZXR1cm47CkBAIC0xMDUy
LDcgKzExODIsNyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhKFdlYlBhZ2VQcm94eSosIGNvbgogICAgIGF1dG8gY2hlY2tlciA9
IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNl
bGVjdG9yKF93ZWJWaWV3OmRlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5
T3JpZ2luOmN1cnJlbnRRdW90YTp0b3RhbEJ5dGVzTmVlZGVkOmRlY2lzaW9uSGFuZGxlcjopKTsK
ICAgICBhdXRvIGFwaU9yaWdpbiA9IEFQSTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShzZWN1cml0
eU9yaWdpbik7CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUg
X3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkZWNpZGVXZWJBcHBsaWNhdGlvbkNhY2hl
UXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKGFwaU9yaWdpbi5nZXQoKSkgY3VycmVudFF1
b3RhOmN1cnJlbnRRdW90YSB0b3RhbEJ5dGVzTmVlZGVkOnRvdGFsQnl0ZXNOZWVkZWQgZGVjaXNp
b25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcg
bG9uZyBuZXdRdW90YSkgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRl
IF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZVdlYkFw
cGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5T3JpZ2luOndyYXBwZXIoYXBpT3JpZ2luLmdl
dCgpKSBjdXJyZW50UXVvdGE6Y3VycmVudFF1b3RhIHRvdGFsQnl0ZXNOZWVkZWQ6dG90YWxCeXRl
c05lZWRlZCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0o
dW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21w
bGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0xMDYyLDE2NSArMTE5
MiwyMDAgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2Fj
aGVPcmlnaW5RdW90YShXZWJQYWdlUHJveHkqLCBjb24KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6cHJpbnRGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiB3ZWJGcmFtZVBy
b3h5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGlm
ICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKKwor
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAg
aWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAKICAg
ICBhdXRvIGhhbmRsZSA9IEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZSh3ZWJGcmFtZVByb3h5LmZy
YW1lSUQoKSk7Ci0gICAgaWYgKG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
UHJpbnRGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1ByaW50RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgewogICAg
ICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUo
ZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpwcmludEZyYW1lOmNvbXBsZXRpb25I
YW5kbGVyOikpOwotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6d3JhcHBlcihoYW5kbGUp
IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUoY2hlY2tl
ciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildICgpIG11
dGFibGUgeworICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBwcmludEZyYW1lOndyYXBw
ZXIoaGFuZGxlKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFu
ZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwotICAg
IH0gZWxzZSBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdQcmludEZy
YW1lKQotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6d3JhcHBlcihoYW5kbGUpXTsKKyAg
ICB9CisKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UHJp
bnRGcmFtZSkKKyAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dl
YlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcHJpbnRGcmFtZTp3cmFw
cGVyKGhhbmRsZSldOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAKIHZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmNsb3NlKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKG1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q2xvc2UpIHsKLSAgICAgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGlmICghbV91aURlbGVn
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3Q2xvc2UpIHsKKyAgICAgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
ICAgIHJldHVybjsKIAotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfd2ViVmlld0Nsb3NlOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgICAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Nsb3NlOm1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDbG9zZSkKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENsb3NlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbZGVsZWdh
dGUgd2ViVmlld0RpZENsb3NlOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFtkZWxlZ2F0
ZSB3ZWJWaWV3RGlkQ2xvc2U6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwog
fQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpmdWxsc2NyZWVuTWF5UmV0dXJuVG9Jbmxp
bmUoV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKQorICAgIGlmICghbV91aURl
bGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0Z1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdl
dCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Z1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZTptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Z1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZTpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmRpZEVudGVyRnVsbHNjcmVlbihXZWJQYWdlUHJveHkqKQogewotICAgIGlm
ICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRFbnRlckZ1bGxzY3Jl
ZW4pCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRW50ZXJGdWxsc2NyZWVu
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBb
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZEVudGVyRnVsbHNj
cmVlbjptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZEVudGVyRnVsbHNjcmVlbjptX3VpRGVsZWdhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRp
ZEV4aXRGdWxsc2NyZWVuKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuKQorICAgIGlmICghbV91
aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuOm1fdWlEZWxlZ2F0ZS5t
X3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3RGlkRXhpdEZ1bGxzY3JlZW46bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCld
OwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaWYgSEFWRShBUFBfTElOS1Mp
CiBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNG
b3JFbGVtZW50KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICplbGVtZW50SW5mbykKIHsKLSAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2hvdWxkSW5jbHVkZUFw
cExpbmtBY3Rpb25zRm9yRWxlbWVudCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1Nob3VsZEluY2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICByZXR1
cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyBzaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JFbGVtZW50OmVsZW1l
bnRJbmZvXTsKKyAgICByZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUg
X3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgc2hvdWxkSW5jbHVk
ZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudDplbGVtZW50SW5mb107CiB9CiAjZW5kaWYKIAogUmV0
YWluUHRyPE5TQXJyYXk+IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjphY3Rpb25zRm9yRWxlbWVudChf
V0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqZWxlbWVudEluZm8sIFJldGFpblB0cjxOU0FycmF5PiBk
ZWZhdWx0QWN0aW9ucykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3QWN0aW9uc0ZvckVsZW1lbnREZWZhdWx0QWN0aW9ucykKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRBY3Rpb25zOworCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdBY3Rpb25zRm9yRWxlbWVudERlZmF1
bHRBY3Rpb25zKQogICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7CiAKLSAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQog
ICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7CiAKLSAgICByZXR1cm4gWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBh
Y3Rpb25zRm9yRWxlbWVudDplbGVtZW50SW5mbyBkZWZhdWx0QWN0aW9uczpkZWZhdWx0QWN0aW9u
cy5nZXQoKV07CisgICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRl
IF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGFjdGlvbnNGb3JF
bGVtZW50OmVsZW1lbnRJbmZvIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zLmdldCgpXTsK
IH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90SGFuZGxlVGFwQXNDbGljayhj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5vdEhhbmRsZVRhcEFzQ2xpY2tBdFBvaW50KQor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5vdEhhbmRsZVRhcEFzQ2xpY2tB
dFBvaW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+
bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dl
YlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkaWROb3RIYW5kbGVUYXBBc0NsaWNrQXRQb2lu
dDpwb2ludF07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVs
ZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZE5v
dEhhbmRsZVRhcEFzQ2xpY2tBdFBvaW50OnBvaW50XTsKIH0KIAogVUlWaWV3Q29udHJvbGxlciAq
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcigpCiB7Ci0gICAg
aWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMucHJlc2VudGluZ1ZpZXdDb250cm9s
bGVyRm9yV2ViVmlldykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMucHJlc2Vu
dGluZ1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBbc3RhdGlj
X2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3ByZXNlbnRpbmdWaWV3
Q29udHJvbGxlckZvcldlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgcmV0dXJu
IFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfcHJlc2Vu
dGluZ1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKV07CiB9CiAKICNlbmRpZgogCiBOU0RpY3Rpb25hcnkgKlVJRGVsZWdhdGU6OlVJQ2xp
ZW50OjpkYXRhRGV0ZWN0aW9uQ29udGV4dCgpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZU1ldGhvZHMuZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJWaWV3KQorICAgIGlmICgh
bV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy5kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXcp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICByZXR1cm4gW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
Pj4oZGVsZWdhdGUpIF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6bV91aURlbGVnYXRl
Lm1fd2ViVmlld107CisgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4+KGRlbGVnYXRlKSBfZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJWaWV3Om1fdWlEZWxl
Z2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogI2lmIEVOQUJMRShQT0lOVEVSX0xP
Q0spCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RQb2ludGVyTG9jayhXZWJQ
YWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld1JlcXVlc3RQb2ludGVyTG9jayAmJiAhbV91aURlbGVnYXRlLm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdEaWRSZXF1ZXN0UG9pbnRlckxvY2tDb21wbGV0aW9uSGFuZGxlcikKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2sgJiYgIW1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJlcXVlc3RQb2ludGVyTG9j
a0NvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdSZXF1ZXN0UG9pbnRlckxvY2spIHsKLSAgICAgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3UmVxdWVzdFBvaW50ZXJMb2NrOm1fdWlE
ZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIGlmIChtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2spIHsKKyAgICAgICAgW3N0YXRpY19jYXN0PGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3UmVxdWVzdFBvaW50ZXJM
b2NrOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3RGlkUmVxdWVzdFBv
aW50ZXJMb2NrOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFJlcXVlc3RQb2ludGVyTG9j
azptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihb
Y2hlY2tlciA9IFdURk1vdmUoY2hlY2tlciksIHBhZ2UgPSBtYWtlUmVmUHRyKHBhZ2UpXSAoQk9P
TCBhbGxvdykgeworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRl
bGVnYXRlKSBfd2ViVmlld0RpZFJlcXVlc3RQb2ludGVyTG9jazptX3VpRGVsZWdhdGUtPm1fd2Vi
Vmlldy5nZXQoKS5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NoZWNrZXIg
PSBXVEZNb3ZlKGNoZWNrZXIpLCBwYWdlID0gbWFrZVJlZlB0cihwYWdlKV0gKEJPT0wgYWxsb3cp
IHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlv
bkhhbmRsZXIoKTsKQEAgLTEyMzQsNDEgKzEzOTksNTAgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6cmVxdWVzdFBvaW50ZXJMb2NrKFdlYlBhZ2VQcm94eSogcGFnZSkKIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6ZGlkTG9zZVBvaW50ZXJMb2NrKFdlYlBhZ2VQcm94eSopCiB7Ci0g
ICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZExvc2VQb2lu
dGVyTG9jaykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRMb3NlUG9pbnRl
ckxvY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2Vi
Vmlld0RpZExvc2VQb2ludGVyTG9jazptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbc3Rh
dGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXdEaWRM
b3NlUG9pbnRlckxvY2s6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQog
CiAjZW5kaWYKICAgICAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZFNob3dTYWZlQnJv
d3NpbmdXYXJuaW5nKCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGlkU2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkU2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAg
IGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFNob3dTYWZlQnJvd3Np
bmdXYXJuaW5nOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFNob3dTYWZlQnJvd3Np
bmdXYXJuaW5nOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y29uZmlybVBERk9wZW5pbmcoV2ViUGFnZVByb3h5JiBw
YWdlLCBjb25zdCBXVEY6OlVSTCYgZmlsZVVSTCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2hvdWxkQWxsb3dQ
REZBdFVSTFRvT3BlbkZyb21GcmFtZUNvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91aURl
bGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CisKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Nob3VsZEFsbG93UERG
QXRVUkxUb09wZW5Gcm9tRnJhbWVDb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKHRydWUpOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKHRydWUpOwogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRs
ZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6
c2hvdWxkQWxsb3dQREZBdFVSTDp0b09wZW5Gcm9tRnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7
Ci0gICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgc2hvdWxkQWxsb3dQREZBdFVSTDpmaWxlVVJM
IHRvT3BlbkZyb21GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShm
cmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1v
dmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgW3N0YXRpY19jYXN0PGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpIHNob3VsZEFsbG93UERGQXRVUkw6ZmlsZVVSTCB0b09wZW5G
cm9tRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZv
KSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNr
ZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxl
dGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTI5NCwxOSArMTQ2OCwy
MiBAQCBzdGF0aWMgV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdCB3ZWJBdXRoZW50aWNhdGlv
blBhbmVsUmVzdWx0KF9XS1dlYkF1dGhlbnRpYwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpydW5XZWJBdXRoZW50aWNhdGlvblBhbmVsKFdlYlBhZ2VQcm94eSYgcGFnZSwgQVBJOjpXZWJB
dXRoZW50aWNhdGlvblBhbmVsJiBwYW5lbCwgV2ViRnJhbWVQcm94eSYsIEZyYW1lSW5mb0RhdGEm
JiBmcmFtZUluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQXV0aGVudGljYXRpb25QYW5l
bFJlc3VsdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbml0aWF0
ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1
bHQ6OlVuYXZhaWxhYmxlKTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3UnVuV2ViQXV0aGVudGljYXRpb25QYW5lbEluaXRpYXRlZEJ5RnJhbWVDb21w
bGV0aW9uSGFuZGxlcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJBdXRoZW50aWNh
dGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IWRlbGVnYXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxl
Z2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6
aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1
bldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6d3JhcHBlcihwYW5lbCkgaW5pdGlhdGVkQnlGcmFtZTp3
cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkp
IGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChfV0tX
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0IHJlc3VsdCkgbXV0YWJsZSB7CisgICAgWyhpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgcnVuV2ViQXV0aGVudGljYXRpb25QYW5lbDp3cmFwcGVyKHBhbmVs
KSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3Zl
KGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKV0gKF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQgcmVzdWx0KSBt
dXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNh
bGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29t
cGxldGlvbkhhbmRsZXIoKTsKQEAgLTEzMTgsMzEgKzE0OTUsNDIgQEAgdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6cnVuV2ViQXV0aGVudGljYXRpb25QYW5lbChXZWJQYWdlUHJveHkmIHBhZ2Us
IEFQSTo6V2UKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6aGFzVmlkZW9JblBpY3R1cmVJ
blBpY3R1cmVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5KiwgYm9vbCBoYXNWaWRlb0luUGljdHVyZUlu
UGljdHVyZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3SGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UpCisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3SGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgaGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRD
aGFuZ2U6aGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVdOworICAgIFtzdGF0aWNfY2FzdDxpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKSBoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZTpo
YXNWaWRlb0luUGljdHVyZUluUGljdHVyZV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OmltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgbmV3U2l6ZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3SW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2hhbmdlZCkKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdJbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUu
Z2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nh
c3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyBpbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkOm5ld1NpemVdOwor
ICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBpbWFnZU9yTWVkaWFEb2N1
bWVudFNpemVDaGFuZ2VkOm5ld1NpemVdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpkZWNpZGVQb2xpY3lGb3JTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYktp
dDo6V2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgYXV0
byBkZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpIHsKKyAgICAgICAgcGFnZS5yZXF1
ZXN0U3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uQnlEZWZhdWx0QWN0aW9uKG9yaWdpbi5zZWN1
cml0eU9yaWdpbigpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhdXRvIGRlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
PiltX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewog
ICAgICAgICBwYWdlLnJlcXVlc3RTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25CeURlZmF1bHRB
Y3Rpb24ob3JpZ2luLnNlY3VyaXR5T3JpZ2luKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTM1NCw3ICsxNTQyLDcgQEAgdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uUmVx
dWVzdChXZWIKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNh
bGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUsIEBzZWxlY3Rvcihfd2ViVmlldzpyZXF1ZXN0U3Bl
ZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uRm9yT3JpZ2luOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAg
ICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyByZXF1ZXN0U3BlZWNo
UmVjb2duaXRpb25QZXJtaXNzaW9uRm9yT3JpZ2luOndyYXBwZXIob3JpZ2luKSBkZWNpc2lvbkhh
bmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2UoY29t
cGxldGlvbkhhbmRsZXIsIHsgfSksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCBn
cmFudGVkKSBtdXRhYmxlIHsKKyAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5t
X3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcmVxdWVzdFNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvbkZv
ck9yaWdpbjp3cmFwcGVyKG9yaWdpbikgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCB7IH0pLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgZ3JhbnRlZCkgbXV0YWJsZSB7CiAgICAg
ICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVy
KCk7Cg==
</data>
<flag name="commit-queue"
          id="434860"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417198</attachid>
            <date>2021-01-07 12:18:01 -0800</date>
            <delta_ts>2021-01-07 13:53:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220394-20210107121801.patch</filename>
            <type>text/plain</type>
            <size>153014</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzEyNDIpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAyMS0wMS0wNyAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFVzZSBzbWFydCBw
b2ludGVycyBpbiBVSURlbGVnYXRlIGFuZCBOYXZpZ2F0aW9uU3RhdGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDM5NAorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzI0OTYzNzQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVUlEZWxlZ2F0ZSBhbmQgTmF2aWdhdGlvblN0YXRlIGFyZSBvd25lZCBieSBX
S1dlYlZpZXcsIGJ1dCB0aGUgY2xpZW50cyBhcmUgb3duZWQgYnkgV2ViUGFnZVByb3h5LAorICAg
ICAgICB3aGljaCBpcyBpbmRlcGVuZGVudGx5IHJlZmVyZW5jZSBjb3VudGVkIGFuZCBjYW4gaGF2
ZSBhIGRpZmZlcmVudCBsaWZldGltZS4KKyAgICAgICAgVGhlcmUgc2hvdWxkIGJlIG5vIHJhdyBD
KysgcmVmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28sIHNvIHVzZSBXZWFrUHRyIGluc3RlYWQuCisg
ICAgICAgIEFsc28sIHVzZSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+IGluc3RlYWQgb2YgYSByYXcg
QysrIFdLV2ViVmlldyoKKworICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3Rh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tOgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25TdGF0ZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6fk5hdmlnYXRpb25TdGF0ZSk6CisgICAgICAgIChX
ZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKToK
KyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6d2lsbFJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6bmF2aWdhdGlv
bkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9u
U3RhdGU6OmRpZFJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAgICAgICAg
KFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpkaWRGaXJzdFBhaW50KToKKyAgICAgICAgKFdlYktp
dDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpOYXZpZ2F0aW9uQ2xpZW50KToK
KyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3ZWJH
TExvYWRQb2xpY3kgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5h
dmlnYXRpb25DbGllbnQ6OnJlc29sdmVXZWJHTExvYWRQb2xpY3kgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENoYW5nZUJhY2tG
b3J3YXJkTGlzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6d2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKToKKyAgICAgICAgKFdlYktpdDo6
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50Ojpjb250ZW50UnVsZUxpc3ROb3RpZmljYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25SZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6ZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24pOgorICAgICAgICAoV2ViS2l0
OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDYW5jZWxD
bGllbnRSZWRpcmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbldpdGhFcnJvcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21taXROYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21taXRM
b2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmRpZEZpbmlzaERvY3VtZW50TG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNoTmF2aWdhdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNo
TG9hZEZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkaWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvcik6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmFpbExvYWRXaXRoRXJyb3JG
b3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6ZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnNo
b3VsZEJ5cGFzc0NvbnRlbnRNb2RlU2FmZWd1YXJkcyBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpzaG91bGRBbGxvd0xlZ2FjeVRMUyk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkTmVnb3RpYXRlTW9kZXJuVExTKToKKyAg
ICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpwcm9jZXNz
RGlkVGVybWluYXRlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50Ojpwcm9jZXNzRGlkQmVjb21lUmVzcG9uc2l2ZSk6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZEJlY29tZVVucmVz
cG9uc2l2ZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6d2ViQ3J5cHRvTWFzdGVyS2V5KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpuYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21lRG93bmxvYWQp
OgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Om5h
dmlnYXRpb25SZXNwb25zZURpZEJlY29tZURvd25sb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpjb250ZXh0TWVudURpZENyZWF0ZURvd25s
b2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50
OjpkaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKToKKyAgICAgICAg
KFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hMb2Fk
Rm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0
aW9uTG9hZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVu
dDo6SGlzdG9yeUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlz
dG9yeUNsaWVudDo6ZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAgICAgICAoV2Vi
S2l0OjpOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1DbGllbnRSZWRp
cmVjdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6
ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpIaXN0b3J5Q2xpZW50OjpkaWRVcGRhdGVIaXN0b3J5VGl0bGUpOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1VJ
RGVsZWdhdGUubW06CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OkNvbnRleHRNZW51Q2xp
ZW50OjpDb250ZXh0TWVudUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OkNv
bnRleHRNZW51Q2xpZW50OjptZW51RnJvbVByb3Bvc2VkTWVudSk6CisgICAgICAgIChXZWJLaXQ6
OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpVSUNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydCk6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybSk6CisgICAgICAgIChXZWJL
aXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RTdG9yYWdlQWNjZXNzQ29uZmly
bSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmRpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFy
YW5jZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjYW5SdW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRl
OjpVSUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSk6CisgICAgICAg
IChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp0YWtlRm9jdXMpOgorICAgICAgICAoV2Vi
S2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6aGFuZGxlQXV0b3BsYXlFdmVudCk6CisgICAgICAg
IChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjYW5SdW5Nb2RhbCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5Nb2RhbCk6CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoZWFkZXJIZWlnaHQpOgorICAgICAgICAoV2Vi
S2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Zm9vdGVySGVpZ2h0KToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRyYXdIZWFkZXIpOgorICAgICAgICAoV2ViS2l0OjpV
SURlbGVnYXRlOjpVSUNsaWVudDo6ZHJhd0Zvb3Rlcik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpwYWdlRGlkU2Nyb2xsKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmZvY3VzKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OnVuZm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6
dW5hdmFpbGFibGVQbHVnaW5CdXR0b25DbGlja2VkKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmRpZEV4Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZv
cmVncm91bmQpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90
SGFuZGxlV2hlZWxFdmVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpzZXRJc1Jlc2l6YWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpzZXRXaW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50
Ojp3aW5kb3dGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpt
b3VzZURpZE1vdmVPdmVyRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJ
Q2xpZW50Ojp0b29sYmFyc0FyZVZpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRl
OjpVSUNsaWVudDo6ZGlkQ2xpY2tBdXRvRmlsbEJ1dHRvbik6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpzaG93UGFnZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpzYXZlRGF0YVRvRmlsZUluRG93bmxvYWRzRm9sZGVyKToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlv
blBlcm1pc3Npb25SZXF1ZXN0KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3Rvcik6CisgICAgICAgIChX
ZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3Rvcik6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVuUGFuZWwpOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2hvdWxkQWxsb3dEZXZpY2VPcmll
bnRhdGlvbkFuZE1vdGlvbkFjY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJ
Q2xpZW50OjpkaWRDaGFuZ2VGb250QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjaGVja1VzZXJNZWRp
YVBlcm1pc3Npb25Gb3JPcmlnaW4pOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNs
aWVudDo6bWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViS2l0OjpVSURl
bGVnYXRlOjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpwcmludEZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNsb3NlKToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRFbnRlckZ1bGxzY3JlZW4p
OgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkRXhpdEZ1bGxzY3Jl
ZW4pOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6c2hvdWxkSW5jbHVk
ZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6
OlVJQ2xpZW50OjphY3Rpb25zRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpkaWROb3RIYW5kbGVUYXBBc0NsaWNrKToKKyAgICAgICAgKFdlYktpdDo6
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByZXNlbnRpbmdWaWV3Q29udHJvbGxlcik6CisgICAgICAg
IChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkYXRhRGV0ZWN0aW9uQ29udGV4dCk6Cisg
ICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZXF1ZXN0UG9pbnRlckxvY2sp
OgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTG9zZVBvaW50ZXJM
b2NrKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZFNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmNvbmZpcm1QREZPcGVuaW5nKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OnJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWwpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVn
YXRlOjpVSUNsaWVudDo6aGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UpOgorICAg
ICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6aW1hZ2VPck1lZGlhRG9jdW1lbnRT
aXplQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkZWNp
ZGVQb2xpY3lGb3JTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25SZXF1ZXN0KToKKwogMjAyMS0w
MS0wNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGUuY29tPgogCiAgICAgICAgIEFTU0VSVElP
TiBGQUlMRUQ6ICFtX21lc3NhZ2VSZWNlaXZlck1hcENvdW50IHVuZGVyIFdlYktpdDo6U3BlZWNo
UmVjb2duaXRpb25TZXJ2ZXI6On5TcGVlY2hSZWNvZ25pdGlvblNlcnZlcigpCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAkocmV2aXNp
b24gMjcxMTU3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbXBvcnQgPHd0Zi9SdW5M
b29wLmg+CiAjaW1wb3J0IDx3dGYvVW5pcXVlUmVmLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQ
dHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CiAKIEBjbGFzcyBXS1dlYlZpZXc7CiBAcHJv
dG9jb2wgV0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlOwpAQCAtNTMsNyArNTQsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogc3RydWN0IFdlYk5hdmlnYXRpb25EYXRhU3RvcmU7CiAKLWNsYXNzIE5h
dmlnYXRpb25TdGF0ZSBmaW5hbCA6IHByaXZhdGUgUGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXIgewor
Y2xhc3MgTmF2aWdhdGlvblN0YXRlIGZpbmFsIDogcHJpdmF0ZSBQYWdlTG9hZFN0YXRlOjpPYnNl
cnZlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPE5hdmlnYXRpb25TdGF0ZT4gewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIGV4cGxpY2l0IE5hdmlnYXRpb25TdGF0
ZShXS1dlYlZpZXcgKik7CkBAIC0xNTAsNyArMTUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgdm9p
ZCBkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKFdlYlBhZ2VQcm94eSYsIFNPQXV0
aG9yaXphdGlvbkxvYWRQb2xpY3ksIGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk+JiYpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAg
ICAgICAgTmF2aWdhdGlvblN0YXRlJiBtX25hdmlnYXRpb25TdGF0ZTsKKyAgICAgICAgV2Vha1B0
cjxOYXZpZ2F0aW9uU3RhdGU+IG1fbmF2aWdhdGlvblN0YXRlOwogICAgIH07CiAgICAgCiAgICAg
Y2xhc3MgSGlzdG9yeUNsaWVudCBmaW5hbCA6IHB1YmxpYyBBUEk6Okhpc3RvcnlDbGllbnQgewpA
QCAtMTY0LDcgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZGlkUGVyZm9ybVNlcnZl
clJlZGlyZWN0KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3QgV1RGOjpT
dHJpbmcmKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV2Vi
UGFnZVByb3h5JiwgY29uc3QgV1RGOjpTdHJpbmcmLCBjb25zdCBXVEY6OlN0cmluZyYpIG92ZXJy
aWRlOwogICAgICAgICAKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlJiBtX25hdmlnYXRpb25TdGF0
ZTsKKyAgICAgICAgV2Vha1B0cjxOYXZpZ2F0aW9uU3RhdGU+IG1fbmF2aWdhdGlvblN0YXRlOwog
ICAgIH07CiAKICAgICAvLyBQYWdlTG9hZFN0YXRlOjpPYnNlcnZlcgpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQkocmV2aXNpb24g
MjcxMTU3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRl
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NCw5ICs5NCw5IEBACiBuYW1lc3BhY2UgV2ViS2l0IHsK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgSGFzaE1hcDxXZWJQYWdlUHJveHkq
LCBOYXZpZ2F0aW9uU3RhdGUqPiYgbmF2aWdhdGlvblN0YXRlcygpCitzdGF0aWMgSGFzaE1hcDxX
ZWJQYWdlUHJveHkqLCBXZWFrUHRyPE5hdmlnYXRpb25TdGF0ZT4+JiBuYXZpZ2F0aW9uU3RhdGVz
KCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxXZWJQYWdlUHJveHkqLCBO
YXZpZ2F0aW9uU3RhdGUqPj4gbmF2aWdhdGlvblN0YXRlczsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDxXZWJQYWdlUHJveHkqLCBXZWFrUHRyPE5hdmlnYXRpb25TdGF0ZT4+PiBu
YXZpZ2F0aW9uU3RhdGVzOwogCiAgICAgcmV0dXJuIG5hdmlnYXRpb25TdGF0ZXM7CiB9CkBAIC0x
MTIsNyArMTEyLDcgQEAgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uU3RhdGUoV0tXZWJWaQog
ICAgIEFTU0VSVChtX3dlYlZpZXctPl9wYWdlKTsKICAgICBBU1NFUlQoIW5hdmlnYXRpb25TdGF0
ZXMoKS5jb250YWlucyhtX3dlYlZpZXctPl9wYWdlLmdldCgpKSk7CiAKLSAgICBuYXZpZ2F0aW9u
U3RhdGVzKCkuYWRkKG1fd2ViVmlldy0+X3BhZ2UuZ2V0KCksIHRoaXMpOworICAgIG5hdmlnYXRp
b25TdGF0ZXMoKS5hZGQobV93ZWJWaWV3LT5fcGFnZS5nZXQoKSwgbWFrZVdlYWtQdHIoKnRoaXMp
KTsKICAgICBtX3dlYlZpZXctPl9wYWdlLT5wYWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnRo
aXMpOwogfQogCkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OmRpZEZp
cnN0UGFpbnQoKQogfQogCiBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Ok5hdmln
YXRpb25DbGllbnQoTmF2aWdhdGlvblN0YXRlJiBuYXZpZ2F0aW9uU3RhdGUpCi0gICAgOiBtX25h
dmlnYXRpb25TdGF0ZShuYXZpZ2F0aW9uU3RhdGUpCisgICAgOiBtX25hdmlnYXRpb25TdGF0ZSht
YWtlV2Vha1B0cihuYXZpZ2F0aW9uU3RhdGUpKQogewogfQogCkBAIC0zNDMsMTQgKzM0MywxNyBA
QCBpbmxpbmUgV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5IHRvV2ViQ29yCiAKIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3ZWJHTExvYWRQb2xpY3koV2ViUGFnZVByb3h5
JiwgY29uc3QgVVJMJiB1cmwsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6V2ViR0xM
b2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViR0xMb2Fk
UG9saWN5Rm9yVVJMKSB7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdlYkdMTG9hZFBvbGljeTo6V2ViR0xBbGxvd0NyZWF0aW9u
KTsKKworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3V2ViR0xMb2FkUG9saWN5Rm9yVVJMKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdlYkdMTG9hZFBvbGljeTo6V2ViR0xBbGxvd0NyZWF0aW9uKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OndlYkdMTG9hZFBvbGlj
eUZvclVSTDpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUu
bV93ZWJWaWV3IHdlYkdMTG9hZFBvbGljeUZvclVSTDooTlNVUkwgKil1cmwgZGVjaXNpb25IYW5k
bGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1dlYkdMTG9hZFBvbGljeSBw
b2xpY3kpIG11dGFibGUgeworICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4p
bmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcg
d2ViR0xMb2FkUG9saWN5Rm9yVVJMOihOU1VSTCAqKXVybCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0oX1dLV2ViR0xMb2FkUG9saWN5IHBvbGljeSkgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxs
ZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBs
ZXRpb25IYW5kbGVyKCk7CkBAIC0zNjAsMTQgKzM2MywxNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0
ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpyZXNvbHZlV2ViR0xMb2FkUG9saWN5KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFVSTCYg
dXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdlYkNvcmU6OldlYkdMTG9hZFBvbGljeSk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Jlc29sdmVXZWJHTExvYWRQb2xpY3lG
b3JVUkwpIHsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm4gY29t
cGxldGlvbkhhbmRsZXIoV2ViR0xMb2FkUG9saWN5OjpXZWJHTEFsbG93Q3JlYXRpb24pOworCisg
ICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdSZXNvbHZlV2ViR0xMb2FkUG9saWN5Rm9yVVJMKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdlYkdMTG9hZFBvbGljeTo6V2ViR0xBbGxvd0NyZWF0aW9uKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlv
bkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
OwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0
ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpyZXNvbHZlV2Vi
R0xMb2FkUG9saWN5Rm9yVVJMOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS5tX3dlYlZpZXcgcmVzb2x2ZVdlYkdMTG9hZFBvbGljeUZvclVSTDooTlNVUkwg
Kil1cmwgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9X
S1dlYkdMTG9hZFBvbGljeSBwb2xpY3kpIG11dGFibGUgeworICAgIFsoaWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLT5tX3dlYlZpZXcgcmVzb2x2ZVdlYkdMTG9hZFBvbGljeUZvclVSTDooTlNVUkwgKil1
cmwgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1dl
YkdMTG9hZFBvbGljeSBwb2xpY3kpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29t
cGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzc3LDEwICszODMs
MTMgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogCiBib29sIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0
KFdlYlBhZ2VQcm94eSYsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0qIGFkZGVkLCBjb25zdCBWZWN0
b3I8UmVmPFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+PiYgcmVtb3ZlZCkKIHsKLSAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFja0Zv
cndhcmRMaXN0SXRlbUFkZGVkUmVtb3ZlZCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1f
bmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFja0Zv
cndhcmRMaXN0SXRlbUFkZGVkUmVtb3ZlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMzkwLDIxICszOTksMjQgQEAgYm9vbCBOYXZpZ2F0aW9uU3RhdGU6
Ok5hdmlnYXRpb25DbGllbnQ6OgogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIocmVtb3ZlZEl0
ZW0uZ2V0KCkpOwogICAgICAgICB9KTsKICAgICB9Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUubV93ZWJWaWV3IGJhY2tGb3J3YXJkTGlzdEl0ZW1BZGRlZDp3cmFwcGVyKGFkZGVkKSByZW1v
dmVkOnJlbW92ZWRJdGVtcy5nZXQoKV07CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldyBiYWNrRm9yd2FyZExpc3RJdGVtQWRkZWQ6d3JhcHBlcihhZGRlZCkgcmVtb3ZlZDpy
ZW1vdmVkSXRlbXMuZ2V0KCldOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCiAKIGJvb2wg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlz
dEl0ZW0oV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSwgYm9vbCBp
bkJhY2tGb3J3YXJkQ2FjaGUpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUlu
QmFja0ZvcndhcmRDYWNoZSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUluQmFja0Zv
cndhcmRDYWNoZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3
IHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbTp3cmFwcGVyKGl0ZW0pIGluUGFnZUNhY2hlOmlu
QmFja0ZvcndhcmRDYWNoZV07CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dyB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06d3JhcHBlcihpdGVtKSBpblBhZ2VDYWNoZTpp
bkJhY2tGb3J3YXJkQ2FjaGVdOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00NTksMTEgKzQ3
MSwxMSBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAgICAgaWYg
KGF1dG8qIHBvbGljaWVzID0gd2ViUGFnZVByb3h5LmNvbmZpZ3VyYXRpb24oKS5kZWZhdWx0V2Vi
c2l0ZVBvbGljaWVzKCkpCiAgICAgICAgIGRlZmF1bHRXZWJzaXRlUG9saWNpZXMgPSBwb2xpY2ll
cy0+Y29weSgpOwogCi0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lv
bkhhbmRsZXIKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVm
ZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyCi0gICAgICAgICYmICFtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIKLSAgICAgICAgJiYg
IW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2ll
cwotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9EZWNpc2lv
bkhhbmRsZXJXZWJzaXRlUG9saWNpZXMpIHsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlIHx8
ICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcgorICAgICAgICAm
JiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVj
aXNpb25IYW5kbGVyCisgICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0
aFByZWZlcmVuY2VzRGVjaXNpb25IYW5kbGVyCisgICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzCisgICAgICAgICYmICFt
X25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRl
UG9saWNpZXMpKSB7CiAgICAgICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBbd2ViUGFnZSA9
IG1ha2VSZWYod2ViUGFnZVByb3h5KSwgbGlzdGVuZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKSwgbmF2
aWdhdGlvbkFjdGlvbiwgZGVmYXVsdFdlYnNpdGVQb2xpY2llc10gKGJvb2wgaW50ZXJjZXB0ZWRO
YXZpZ2F0aW9uKSB7CiAgICAgICAgICAgICBpZiAoaW50ZXJjZXB0ZWROYXZpZ2F0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgbGlzdGVuZXItPmlnbm9yZSgpOwpAQCAtNDk4LDE3ICs1MTAsMTcgQEAg
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBkZWxl
Z2F0ZUhhc1dlYnBhZ2VQcmVmZXJlbmNlcyA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldp
dGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcgotICAgICAgICB8fCBtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFuZGxlcjsKLSAgICBi
b29sIGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzIHx8IG1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvblVzZXJJbmZvRGVjaXNpb25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzOworICAgIGJvb2wg
ZGVsZWdhdGVIYXNXZWJwYWdlUHJlZmVyZW5jZXMgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uV2l0aFByZWZlcmVuY2VzRGVjaXNpb25IYW5kbGVyCisgICAgICAgIHx8IG1fbmF2aWdhdGlv
blN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZv
ck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFuZGxlcjsK
KyAgICBib29sIGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llcyB8fCBtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXM7CiAK
ICAgICBhdXRvIHNlbGVjdG9yRm9yQ29tcGxldGlvbkhhbmRsZXJDaGVja2VyID0gKFsmXSAoKSAt
PiBTRUwgewogICAgICAgICBpZiAoZGVsZWdhdGVIYXNXZWJwYWdlUHJlZmVyZW5jZXMpCi0gICAg
ICAgICAgICByZXR1cm4gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2Vz
RGVjaXNpb25IYW5kbGVyID8gQHNlbGVjdG9yKHdlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdh
dGlvbkFjdGlvbjpwcmVmZXJlbmNlczpkZWNpc2lvbkhhbmRsZXI6KSA6IEBzZWxlY3Rvcihfd2Vi
VmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOnByZWZlcmVuY2VzOnVzZXJJbmZv
OmRlY2lzaW9uSGFuZGxlcjopOworICAgICAgICAgICAgcmV0dXJuIG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIgPyBAc2VsZWN0b3Iod2Vi
VmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOnByZWZlcmVuY2VzOmRlY2lzaW9u
SGFuZGxlcjopIDogQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb246cHJlZmVyZW5jZXM6dXNlckluZm86ZGVjaXNpb25IYW5kbGVyOik7CiAgICAgICAgIGlm
IChkZWxlZ2F0ZUhhc1dlYnNpdGVQb2xpY2llcykKICAgICAgICAgICAgIHJldHVybiBAc2VsZWN0
b3IoX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpkZWNpc2lvbkhhbmRs
ZXI6KTsKICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcih3ZWJWaWV3OmRlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb246ZGVjaXNpb25IYW5kbGVyOik7CkBAIC01ODEsMzYgKzU5MywzOSBAQCBB
TExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKICAgICB9OwogCiAgICAgaWYgKGRlbGVn
YXRlSGFzV2VicGFnZVByZWZlcmVuY2VzKSB7Ci0gICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmln
YXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIpCi0gICAgICAgICAgICBb
bmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBw
cmVmZXJlbmNlczp3cmFwcGVyKGRlZmF1bHRXZWJzaXRlUG9saWNpZXMpIGRlY2lzaW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBv
bGljaWVzKSkuZ2V0KCldOworICAgICAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bldpdGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcikKKyAgICAgICAgICAgIFtuYXZpZ2F0aW9u
RGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBwcmVmZXJlbmNl
czp3cmFwcGVyKGRlZmF1bHRXZWJzaXRlUG9saWNpZXMpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxv
Y2tQdHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKSku
Z2V0KCldOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmln
YXRpb25BY3Rpb24pIHByZWZlcmVuY2VzOndyYXBwZXIoZGVmYXVsdFdlYnNpdGVQb2xpY2llcykg
dXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJ
bmZvLT53cmFwcGVyKCkpIDogbmlsIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoV1RGTW92
ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKSkuZ2V0KCldOworICAg
ICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVs
ZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgcHJlZmVyZW5jZXM6
d3JhcHBlcihkZWZhdWx0V2Vic2l0ZVBvbGljaWVzKSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRp
Y19jYXN0PGlkPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwgZGVj
aXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldpdGhQcmVm
ZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07CiAgICAgfSBlbHNlIGlmIChkZWxlZ2F0ZUhhc1dl
YnNpdGVQb2xpY2llcykgewogICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlciA9IG1ha2VCbG9j
a1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpKTsK
LSAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblVzZXJJbmZvRGVjaXNpb25I
YW5kbGVyV2Vic2l0ZVBvbGljaWVzKSB7CisgICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0
aW9uQWN0aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXMpIHsKICAgICAg
ICAgICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBb
KGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHVzZXJJbmZvOnVzZXJJbmZvID8gc3Rh
dGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwg
ZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CisgICAgICAgICAgICBbKGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRp
Y19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsIGRl
Y2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOwogICAgICAgICAgICAgQUxMT1df
REVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19CRUdJTgotICAgICAgICAgICAgWyhpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5k
bGVyLmdldCgpXTsKKyAgICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZp
ZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rp
b24pIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOwogICAgICAgICAgICAg
QUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfRU5ECiAgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBhdXRvIGRlY2lzaW9uSGFuZGxlciA9IFtkZWNpc2lvbkhhbmRsZXJXaXRoUHJl
ZmVyZW5jZXNPclBvbGljaWVzID0gV1RGTW92ZShkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5j
ZXNPclBvbGljaWVzKV0gKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSBhY3Rpb25Qb2xpY3kpIG11
dGFibGUgewogICAgICAgICAgICAgZGVjaXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xp
Y2llcyhhY3Rpb25Qb2xpY3ksIG5pbCk7CiAgICAgICAgIH07Ci0gICAgICAgIFtuYXZpZ2F0aW9u
RGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFu
ZGxlcjptYWtlQmxvY2tQdHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXIpKS5nZXQoKV07CisgICAg
ICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0
aW9uKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFdURk1vdmUoZGVjaXNpb25IYW5kbGVy
KSkuZ2V0KCldOwogICAgIH0KIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkmLCBVUkwmJiB1
cmwsIENvbnRlbnRSdWxlTGlzdFJlc3VsdHMmJiByZXN1bHRzKQogewotICAgIGlmICghbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdVUkxDb250ZW50
UnVsZUxpc3RJZGVudGlmaWVyc05vdGlmaWNhdGlvbnMKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29udGVudFJ1bGVMaXN0
V2l0aElkZW50aWZpZXJQZXJmb3JtZWRBY3Rpb25Gb3JVUkwpCisgICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+
bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdVUkxDb250ZW50UnVsZUxpc3RJZGVu
dGlmaWVyc05vdGlmaWNhdGlvbnMKKyAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRlbnRSdWxlTGlzdFdpdGhJZGVudGlm
aWVyUGVyZm9ybWVkQWN0aW9uRm9yVVJMKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKQEAgLTYzMCwxOCArNjQ1LDE4IEBAIHZvaWQgTmF2aWdhdGlv
blN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChu
b3RpZmljYXRpb25zICYmIG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRlbnRpZmllcnNOb3RpZmljYXRpb25zKQot
ICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxl
Z2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgVVJMOnVybCBjb250ZW50
UnVsZUxpc3RJZGVudGlmaWVyczppZGVudGlmaWVycy5nZXQoKSBub3RpZmljYXRpb25zOm5vdGlm
aWNhdGlvbnMuZ2V0KCldOworICAgIGlmIChub3RpZmljYXRpb25zICYmIG1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlz
dElkZW50aWZpZXJzTm90aWZpY2F0aW9ucykKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldyBVUkw6dXJsIGNvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzOmlkZW50aWZp
ZXJzLmdldCgpIG5vdGlmaWNhdGlvbnM6bm90aWZpY2F0aW9ucy5nZXQoKV07CiAKLSAgICBpZiAo
bV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250
ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZvcm1lZEFjdGlvbkZvclVSTCkgeworICAgIGlm
IChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdD
b250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZvcm1lZEFjdGlvbkZvclVSTCkgewogICAg
ICAgICBmb3IgKGF1dG8mJiBwYWlyIDogV1RGTW92ZShyZXN1bHRzLnJlc3VsdHMpKQotICAgICAg
ICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdh
dGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGNvbnRlbnRSdWxlTGlzdFdp
dGhJZGVudGlmaWVyOnBhaXIuZmlyc3QgcGVyZm9ybWVkQWN0aW9uOndyYXBwZXIoQVBJOjpDb250
ZW50UnVsZUxpc3RBY3Rpb246OmNyZWF0ZShXVEZNb3ZlKHBhaXIuc2Vjb25kKSkuZ2V0KCkpIGZv
clVSTDp1cmxdOworICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dyBjb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllcjpwYWlyLmZpcnN0IHBlcmZvcm1lZEFjdGlv
bjp3cmFwcGVyKEFQSTo6Q29udGVudFJ1bGVMaXN0QWN0aW9uOjpjcmVhdGUoV1RGTW92ZShwYWly
LnNlY29uZCkpLmdldCgpKSBmb3JVUkw6dXJsXTsKICAgICB9CiB9CiAgICAgCiB2b2lkIE5hdmln
YXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJl
c3BvbnNlKFdlYlBhZ2VQcm94eSYgcGFnZSwgUmVmPEFQSTo6TmF2aWdhdGlvblJlc3BvbnNlPiYm
IG5hdmlnYXRpb25SZXNwb25zZSwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94eT4mJiBs
aXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uUmVzcG9uc2VEZWNpc2lvbkhhbmRsZXIpIHsKKyAgICBpZiAoIW1fbmF2aWdhdGlv
blN0YXRlIHx8ICFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2VEZWNpc2lvbkhhbmRsZXIp
IHsKICAgICAgICAgTlNVUkwgKnVybCA9IG5hdmlnYXRpb25SZXNwb25zZS0+cmVzcG9uc2UoKS5u
c1VSTFJlc3BvbnNlKCkuVVJMOwogICAgICAgICBpZiAoW3VybCBpc0ZpbGVVUkxdKSB7CiAgICAg
ICAgICAgICBCT09MIGlzRGlyZWN0b3J5ID0gTk87CkBAIC02NjEsMTIgKzY3NiwxMiBAQCB2b2lk
IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0g
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
bmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIGNoZWNrZXIg
PSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUobmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpLCBAc2VsZWN0b3Iod2ViVmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9u
c2U6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3Bv
bnNlOndyYXBwZXIobmF2aWdhdGlvblJlc3BvbnNlKSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2Nr
UHRyKFtsb2NhbExpc3RlbmVyID0gV1RGTW92ZShsaXN0ZW5lciksIGNoZWNrZXIgPSBXVEZNb3Zl
KGNoZWNrZXIpXShXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeSByZXNwb25zZVBvbGljeSkgewor
ICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZTp3cmFwcGVyKG5hdmlnYXRpb25S
ZXNwb25zZSkgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbbG9jYWxMaXN0ZW5lciA9IFdU
Rk1vdmUobGlzdGVuZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0oV0tOYXZpZ2F0aW9u
UmVzcG9uc2VQb2xpY3kgcmVzcG9uc2VQb2xpY3kpIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNv
bXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTY4OSw4MCArNzA0
LDk4IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjoKIAogdm9pZCBO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZp
Z2F0aW9uKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCogdXNlckluZm8p
CiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25E
ZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3Nl
cnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBu
dWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4K
LSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvblVzZXJJbmZvKQotICAgICAgICBbKGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRp
b246d3JhcHBlcihuYXZpZ2F0aW9uKSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlk
IDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsXTsKLSAgICBlbHNl
IGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uKQotICAgICAgICBbbmF2aWdhdGlvbkRlbGVn
YXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9u
YWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOworICAgIGlmIChtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lv
bmFsTmF2aWdhdGlvblVzZXJJbmZvKQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+
bV93ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlv
bikgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1
c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF07CisgICAgZWxzZSBpZiAobV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRQcm92aXNpb25h
bE5hdmlnYXRpb24pCisgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndyYXBw
ZXIobmF2aWdhdGlvbildOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXZWJQYWdlUHJveHkmIHBhZ2Us
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIEZyYW1lSW5mb0RhdGEmJiBmcmFt
ZUluZm8pCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRl
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmln
YXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRQcm92aXNpb25h
bExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCi0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVn
YXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLm1fd2ViVmlldyBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0OnJlcXVl
c3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5
KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5m
byksICZwYWdlKSldOworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0SW5G
cmFtZSkKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBk
aWRTdGFydFByb3Zpc2lvbmFsTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhU
VFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIo
QVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSldOwogfQog
CiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgQVBJ
OjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgaWYgKCFtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJlY2Vp
dmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbikKKyAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAg
IGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25E
ZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3Nl
cnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBu
dWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4K
IAotICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dl
YlZpZXcgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOndy
YXBwZXIobmF2aWdhdGlvbildOworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0KIAogdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV2Vi
UGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgdXJsU3RyaW5nLCBkb3VibGUgZGVs
YXkpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1dpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QpCisgICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXaWxsUGVyZm9ybUNsaWVudFJl
ZGlyZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9
IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47
CiAKICAgICBVUkwgdXJsKFVSTCgpLCB1cmxTdHJpbmcpOwogCi0gICAgW3N0YXRpY19jYXN0PGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0
VG9VUkw6dXJsIGRlbGF5OmRlbGF5XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUtPm1fd2ViVmlldyB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6dXJsIGRl
bGF5OmRlbGF5XTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6
U3RyaW5nJiBzb3VyY2VVUkxTdHJpbmcsIGNvbnN0IFdURjo6U3RyaW5nJiBkZXN0aW5hdGlvblVS
TFN0cmluZykKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KQorICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUGVyZm9ybUNsaWVu
dFJlZGlyZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0
ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1
dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKICAgICBVUkwgc291cmNlVVJMKFVSTCgpLCBzb3VyY2VVUkxTdHJpbmcpOwogICAgIFVS
TCBkZXN0aW5hdGlvblVSTChVUkwoKSwgZGVzdGluYXRpb25VUkxTdHJpbmcpOwogCi0gICAgW3N0
YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVs
ZWdhdGUpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRQZXJmb3JtQ2xp
ZW50UmVkaXJlY3RGcm9tVVJMOnNvdXJjZVVSTCB0b1VSTDpkZXN0aW5hdGlvblVSTF07CisgICAg
W3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9u
RGVsZWdhdGUpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkUGVyZm9y
bUNsaWVudFJlZGlyZWN0RnJvbVVSTDpzb3VyY2VVUkwgdG9VUkw6ZGVzdGluYXRpb25VUkxdOwog
fQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2FuY2VsQ2xp
ZW50UmVkaXJlY3QoV2ViUGFnZVByb3h5JiBwYWdlKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDYW5jZWxDbGllbnRS
ZWRpcmVjdCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZENhbmNlbENsaWVudFJlZGlyZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXdEaWRDYW5j
ZWxDbGllbnRSZWRpcmVjdDptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXddOworICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVn
YXRlKSBfd2ViVmlld0RpZENhbmNlbENsaWVudFJlZGlyZWN0Om1fbmF2aWdhdGlvblN0YXRlLT5t
X3dlYlZpZXddOwogfQogCiBzdGF0aWMgUmV0YWluUHRyPE5TRXJyb3I+IGNyZWF0ZUVycm9yV2l0
aFJlY292ZXJ5QXR0ZW1wdGVyKFdLV2ViVmlldyAqd2ViVmlldywgY29uc3QgRnJhbWVJbmZvRGF0
YSYgZnJhbWVJbmZvLCBOU0Vycm9yICpvcmlnaW5hbEVycm9yKQpAQCAtNzgxLDE2MCArODE0LDE5
OSBAQCBzdGF0aWMgUmV0YWluUHRyPE5TRXJyb3I+IGNyZWF0ZUVycm9yV2l0CiAKIHZvaWQgTmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0
aW9uV2l0aEVycm9yKFdlYlBhZ2VQcm94eSYgcGFnZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5m
bywgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVy
cm9yJiBlcnJvciwgQVBJOjpPYmplY3QqKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgaWYg
KCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJyb3Ip
OworICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhS
ZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LCBmcmFtZUluZm8s
IGVycm9yKTsKIAogICAgIGlmIChmcmFtZUluZm8uaXNNYWluRnJhbWUpIHsKICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUs
IGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhl
IGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlv
bldpdGhFcnJvcikKLSAgICAgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFw
cGVyKG5hdmlnYXRpb24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQo
KV07CisgICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdEaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uV2l0aEVycm9yKQorICAg
ICAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5t
X3dlYlZpZXcgZGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24p
IHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lV2l0
aEVycm9yKQotICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPilu
YXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IG5h
dmlnYXRpb246bmlsIGRpZEZhaWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lOndyYXBwZXIoQVBJ
OjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9y
OmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpXTsKKyAgICAgICAgaWYgKG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25E
aWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJmcmFtZVdpdGhFcnJvcikKKyAgICAgICAgICAgIFso
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgbmF2aWdhdGlvbjpuaWwgZGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZEluU3ViZnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdU
Rk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRl
bXB0ZXIuZ2V0KCldOwogICAgIH0KIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXZWJQYWdl
UHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvKQog
ewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZp
Z2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRl
bXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJyb3IpOworICAgIGF1dG8gZXJyb3JXaXRoUmVjb3Zl
cnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3LCBmcmFtZUluZm8sIGVycm9yKTsKIAotICAgIGlmIChtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxQcm92
aXNpb25hbExvYWRXaXRoUmVxdWVzdEluRnJhbWVXaXRoRXJyb3IpCi0gICAgICAgIFsoaWQgPFdL
TmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVl
c3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRl
SFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUo
ZnJhbWVJbmZvKSwgJnBhZ2UpKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIu
Z2V0KCldOworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdEaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0
aEVycm9yKQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmln
YXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZEZh
aWxQcm92aXNpb25hbExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9k
eVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6
RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIHdpdGhFcnJvcjpl
cnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21taXROYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYg
cGFnZSwgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5t
X25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBu
YXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBz
b21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICBpZiAo
bV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRD
b21taXROYXZpZ2F0aW9uKQotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZENvbW1pdE5hdmlnYXRpb246d3JhcHBlcihuYXZp
Z2F0aW9uKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0RpZENvbW1pdE5hdmlnYXRpb24pCisgICAgICAgIFtuYXZpZ2F0aW9u
RGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZENvbW1pdE5h
dmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21taXRMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQYWdl
UHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIEZyYW1lSW5m
b0RhdGEmJiBmcmFtZUluZm8pCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1f
bmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ29t
bWl0TG9hZFdpdGhSZXF1ZXN0SW5GcmFtZSkKLSAgICAgICAgW3N0YXRpY19jYXN0PGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRDb21taXRMb2FkV2l0aFJlcXVlc3Q6
cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRU
UEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJh
bWVJbmZvKSwgJnBhZ2UpKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENvbW1pdExvYWRXaXRoUmVxdWVzdEluRnJhbWUp
CisgICAgICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4o
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93
ZWJWaWV3IGRpZENvbW1pdExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQ
Qm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQ
STo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpXTsKIH0KIAog
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaERvY3VtZW50
TG9hZChXZWJQYWdlUHJveHkmIHBhZ2UsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgQVBJ
OjpPYmplY3QqKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0aW9uRGlkRmluaXNoRG9jdW1lbnRMb2FkKQorICAg
IGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdh
dGlvbkRpZEZpbmlzaERvY3VtZW50TG9hZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhh
dCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZv
ciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KIAotICAg
IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgbmF2
aWdhdGlvbkRpZEZpbmlzaERvY3VtZW50TG9hZDp3cmFwcGVyKG5hdmlnYXRpb24pXTsKKyAgICBb
c3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBuYXZp
Z2F0aW9uRGlkRmluaXNoRG9jdW1lbnRMb2FkOndyYXBwZXIobmF2aWdhdGlvbildOwogfQogCiB2
b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkRmluaXNoTmF2aWdhdGlv
bihXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0
KikKIHsKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlv
bkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFz
c2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5
IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hl
LgotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld0RpZEZpbmlzaE5hdmlnYXRpb24pCi0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUg
d2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmluaXNoTmF2aWdhdGlvbjp3
cmFwcGVyKG5hdmlnYXRpb24pXTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTmF2aWdhdGlvbikKKyAgICAgICAg
W25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcg
ZGlkRmluaXNoTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKIH0KIAogdm9pZCBOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXZWJQ
YWdlUHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIEZyYW1l
SW5mb0RhdGEmJiBmcmFtZUluZm8pCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBt
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25E
ZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
RmluaXNoTG9hZFdpdGhSZXF1ZXN0SW5GcmFtZSkKLSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGRpZEZpbmlzaExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVx
dWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3
cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkp
XTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGlkRmluaXNoTG9hZFdpdGhSZXF1ZXN0SW5GcmFtZSkKKyAgICAgICAgWyhpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkaWRGaW5pc2hMb2FkV2l0aFJlcXVlc3Q6cmVx
dWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJv
ZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJ
bmZvKSwgJnBhZ2UpKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjpkaWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvcihXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0
IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvciwgQVBJOjpPYmplY3QqIHVzZXJJbmZv
KQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9u
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRp
b25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9u
RGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlB
dHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJyb3IpOworICAgIGF1dG8gZXJyb3JXaXRoUmVj
b3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3LCBmcmFtZUluZm8sIGVycm9yKTsKIAogICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJlLCBidXQg
aXQncyBjdXJyZW50bHkgbnVsbCBmb3Igc29tZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNr
L2ZvcndhcmQgY2FjaGUuCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbE5hdmlnYXRpb25XaXRoRXJyb3JVc2VySW5mbykK
LSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVs
ZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZEZhaWxOYXZpZ2F0
aW9uOndyYXBwZXIobmF2aWdhdGlvbikgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1w
dGVyLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29k
aW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOwotICAgIGVsc2UgaWYgKG1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbE5hdmln
YXRpb25XaXRoRXJyb3IpCi0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkRmFpbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0
aW9uKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOworICAgIGlm
IChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdE
aWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvclVzZXJJbmZvKQorICAgICAgICBbKGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZEZhaWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlv
bikgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpIHVzZXJJbmZvOnVz
ZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBw
ZXIoKSkgOiBuaWxdOworICAgIGVsc2UgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yKQorICAg
ICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2Vi
VmlldyBkaWRGYWlsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pIHdpdGhFcnJvcjplcnJv
cldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8pCiB7
Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBlcnJvcldpdGhSZWNvdmVyeUF0dGVt
cHRlciA9IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlldywgZnJhbWVJbmZvLCBlcnJvcik7CisgICAgYXV0byBlcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlv
blN0YXRlLT5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJyb3IpOwogCi0gICAgaWYgKG1fbmF2aWdh
dGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbExvYWRX
aXRoUmVxdWVzdEluRnJhbWVXaXRoRXJyb3IpCi0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlldyBkaWRGYWlsTG9hZFdpdGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0
KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05vdFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBw
ZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0
aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpXTsKKyAgICBpZiAobV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbExv
YWRXaXRoUmVxdWVzdEluRnJhbWVXaXRoRXJyb3IpCisgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLT5tX3dlYlZpZXcgZGlkRmFpbExvYWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVx
dWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3
cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkp
IHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CiB9CiAKIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0
aW9uKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgU2FtZURvY3Vt
ZW50TmF2aWdhdGlvblR5cGUgbmF2aWdhdGlvblR5cGUsIEFQSTo6T2JqZWN0KikKIHsKLSAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
TmF2aWdhdGlvbkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb24pCisgICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUg
PSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAo
IW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05h
dmlnYXRpb25EaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9u
SUQgaXMgbm90IHplcm8gaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IHplcm8gZm9yIHNvbWUgbmF2
aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogCi0gICAgW3N0YXRpY19j
YXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUu
Z2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0aW9uOndy
YXBwZXIobmF2aWdhdGlvbikgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbjp0b1dLU2FtZURvY3Vt
ZW50TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvblR5cGUpXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBuYXZpZ2F0aW9uOndyYXBwZXIo
bmF2aWdhdGlvbikgZGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbjp0b1dLU2FtZURvY3VtZW50TmF2
aWdhdGlvblR5cGUobmF2aWdhdGlvblR5cGUpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6
Ok5hdmlnYXRpb25DbGllbnQ6OnJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlKFdlYlBhZ2VQcm94
eSYsIE9wdGlvblNldDxXZWJDb3JlOjpMYXlvdXRNaWxlc3RvbmU+IGxheW91dE1pbGVzdG9uZXMp
CiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld1JlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlKQorICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVuZGVyaW5nUHJvZ3Jlc3NEaWRD
aGFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0g
bV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZp
ZXcgcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2U6cmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMobGF5
b3V0TWlsZXN0b25lcyldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3IHJlbmRlcmluZ1Byb2dyZXNzRGlkQ2hhbmdlOnJlbmRlcmluZ1By
b2dyZXNzRXZlbnRzKGxheW91dE1pbGVzdG9uZXMpXTsKIH0KIAogYm9vbCBOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6OnNob3VsZEJ5cGFzc0NvbnRlbnRNb2RlU2FmZWd1YXJkcygp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVm
ZXJlbmNlc0RlY2lzaW9uSGFuZGxlcgotICAgICAgICB8fCBtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25B
Y3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFuZGxlcjsKKyAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRl
UG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcgor
ICAgICAgICB8fCBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzVXNl
ckluZm9EZWNpc2lvbkhhbmRsZXI7CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViUGFnZVByb3h5
JiwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2Up
CiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNvbXBsZXRpb25IYW5k
bGVyKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCiAgICAgICAgIHJldHVybiBhdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5saXN0ZW5lcigpLmNvbXBsZXRlQ2hhbGxlbmdlKFdlYktpdDo6QXV0
aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlQW5k
Q29udGludWUpOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKQorICAgICAgICByZXR1cm4gYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UubGlzdGVuZXIoKS5jb21wbGV0ZUNoYWxsZW5nZShXZWJLaXQ6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZUFu
ZENvbnRpbnVlKTsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRl
bGVnYXRlKQogICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25DaGFsbGVuZ2UubGlzdGVuZXIo
KS5jb21wbGV0ZUNoYWxsZW5nZShXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9z
aXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlKTsKIAogICAgIGF1dG8gY2hl
Y2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2
aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgd2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOndyYXBwZXIoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIGNvbXBsZXRpb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY2hhbGxlbmdlID0gbWFrZVJlZihhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdl
RGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkgewor
ICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcg
ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOndyYXBwZXIoYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hhbGxlbmdlID0gbWFr
ZVJlZihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIp
XShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJM
Q3JlZGVudGlhbCAqY3JlZGVudGlhbCkgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlv
bkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNo
ZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtOTU5LDE3ICsxMDMxLDIwIEBA
IHN0YXRpYyBib29sIHN5c3RlbUFsbG93c0xlZ2FjeVRMU0ZvcihXZWIKIAogdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnNob3VsZEFsbG93TGVnYWN5VExTKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSYgYXV0aGVudGljYXRpb25D
aGFsbGVuZ2UsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dMZWdhY3lUTFMK
LSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMp
CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25I
YW5kbGVyKHN5c3RlbUFsbG93c0xlZ2FjeVRMU0ZvcihwYWdlKSk7CiAKLSAgICBhdXRvIG5hdmln
YXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTaG91bGRBbGxvd0xlZ2FjeVRMUwor
ICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFMp
CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihzeXN0ZW1BbGxvd3NMZWdhY3lUTFNG
b3IocGFnZSkpOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihzeXN0ZW1BbGxvd3NMZWdh
Y3lUTFNGb3IocGFnZSkpOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTaG91bGRBbGxv
d0RlcHJlY2F0ZWRUTFMpIHsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QXV0aGVudGljYXRpb25DaGFsbGVuZ2VTaG91bGRBbGxv
d0RlcHJlY2F0ZWRUTFMpIHsKICAgICAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRs
ZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9y
KHdlYlZpZXc6YXV0aGVudGljYXRpb25DaGFsbGVuZ2U6c2hvdWxkQWxsb3dEZXByZWNhdGVkVExT
OikpOwotICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpIHdlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUubV93ZWJWaWV3IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOndyYXBwZXIoYXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UpIHNob3VsZEFsbG93RGVwcmVjYXRlZFRMUzptYWtlQmxvY2tQdHIo
W2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXShCT09MIHNob3VsZEFsbG93KSBtdXRhYmxlIHsKKyAgICAgICAg
W25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXcgYXV0aGVudGljYXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSkgc2hvdWxkQWxsb3dEZXByZWNhdGVkVExTOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKEJPT0wgc2hvdWxkQWxsb3cpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGNoZWNr
ZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpA
QCAtOTc4LDcgKzEwNTMsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlv
bkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNl
bGVjdG9yKF93ZWJWaWV3OmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOnNob3VsZEFsbG93TGVnYWN5
VExTOikpOwotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5t
X3dlYlZpZXcgYXV0aGVudGljYXRpb25DaGFsbGVuZ2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSkgc2hvdWxkQWxsb3dMZWdhY3lUTFM6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKV0oQk9PTCBzaG91bGRBbGxvdykgbXV0YWJsZSB7CisgICAgW3N0YXRpY19jYXN0PGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgYXV0aGVudGljYXRpb25DaGFsbGVu
Z2U6d3JhcHBlcihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkgc2hvdWxkQWxsb3dMZWdhY3lUTFM6
bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQk9PTCBzaG91bGRBbGxvdykgbXV0YWJs
ZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQo
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRp
b25IYW5kbGVyKCk7CkBAIC05ODgsMTQgKzEwNjMsMTcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6
Ok5hdmlnYXRpb25DbGllbnQ6OgogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNs
aWVudDo6ZGlkTmVnb3RpYXRlTW9kZXJuVExTKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5lZ290aWF0ZU1vZGVyblRMUykKKyAg
ICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5h
dmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkTmVnb3RpYXRlTW9kZXJuVExTKQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlldyBkaWROZWdvdGlhdGVNb2Rlcm5UTFM6bWFjKGNoYWxsZW5nZSldOworICAg
IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRp
ZE5lZ290aWF0ZU1vZGVyblRMUzptYWMoY2hhbGxlbmdlKV07CiB9CiAKIHN0YXRpYyBfV0tQcm9j
ZXNzVGVybWluYXRpb25SZWFzb24gd2tQcm9jZXNzVGVybWluYXRpb25SZWFzb24oUHJvY2Vzc1Rl
cm1pbmF0aW9uUmVhc29uIHJlYXNvbikKQEAgLTEwMjIsNTggKzExMDAsNzAgQEAgc3RhdGljIF9X
S1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbiB3a1BybwogCiBib29sIE5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZFRlcm1pbmF0ZShXZWJQYWdlUHJveHkmIHBhZ2Us
IFByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbiByZWFzb24pCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9j
ZXNzRGlkVGVybWluYXRlCi0gICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0
aFJlYXNvbgotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2gpCisgICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50UHJvY2Vz
c0RpZFRlcm1pbmF0ZQorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGVXaXRo
UmVhc29uCisgICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jhc2gpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9u
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBt
X25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFu
YXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRl
bnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbikgewotICAgICAgICBbc3RhdGljX2Nhc3Q8
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IHdlYkNvbnRlbnRQcm9jZXNz
RGlkVGVybWluYXRlV2l0aFJlYXNvbjp3a1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbihyZWFzb24p
XTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGVXaXRoUmVhc29uKSB7CisgICAg
ICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3
IHdlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbjp3a1Byb2Nlc3NUZXJtaW5h
dGlvblJlYXNvbihyZWFzb24pXTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAg
Ly8gV2UgcHJlZmVyIHdlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZTogb3ZlciBf
d2ViVmlld1dlYlByb2Nlc3NEaWRDcmFzaDouCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJt
aW5hdGUpIHsKLSAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3V2ViQ29udGVudFBy
b2Nlc3NEaWRUZXJtaW5hdGU6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3XTsKKyAgICBpZiAo
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2Vi
Q29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGUpIHsKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0
ZSB3ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGU6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlld107CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIEFTU0VSVCht
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYlBy
b2Nlc3NEaWRDcmFzaCk7Ci0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2ViUHJvY2Vzc0Rp
ZENyYXNoOm1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlld107CisgICAgQVNTRVJUKG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYlByb2Nlc3NE
aWRDcmFzaCk7CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2ViUHJvY2Vzc0RpZENyYXNo
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXddOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2
b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZEJlY29tZVJl
c3BvbnNpdmUoV2ViUGFnZVByb3h5JiBwYWdlKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3Rh
dGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21l
UmVzcG9uc2l2ZSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld1dlYlByb2Nlc3NEaWRCZWNvbWVSZXNwb25zaXZlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2
aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkg
X3dlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lUmVzcG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS5t
X3dlYlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2
YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRCZWNv
bWVSZXNwb25zaXZlOm1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXddOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cHJvY2Vzc0RpZEJlY29tZVVucmVzcG9u
c2l2ZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5t
X25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYlByb2Nlc3NEaWRCZWNvbWVVbnJl
c3BvbnNpdmUpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYlByb2Nlc3NEaWRCZWNvbWVVbnJlc3BvbnNp
dmUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2
aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQg
PFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkg
X3dlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lVW5yZXNwb25zaXZlOm1fbmF2aWdhdGlvblN0YXRl
Lm1fd2ViVmlld107CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3V2ViUHJvY2Vzc0RpZEJl
Y29tZVVucmVzcG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3XTsKIH0KIAogUmVm
UHRyPEFQSTo6RGF0YT4gTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3ZWJDcnlw
dG9NYXN0ZXJLZXkoV2ViUGFnZVByb3h5JikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRl
Lm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3
KSB7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldykgewogICAgICAgICBWZWN0b3I8dWludDhf
dD4gbWFzdGVyS2V5OwogICAgICAgICBpZiAoIWdldERlZmF1bHRXZWJDcnlwdG9NYXN0ZXJLZXko
bWFzdGVyS2V5KSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMTA4MSwxMSArMTE3
MSwxMSBAQCBSZWZQdHI8QVBJOjpEYXRhPiBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnCiAgICAgICAg
IHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZShtYXN0ZXJLZXkuZGF0YSgpLCBtYXN0ZXJLZXkuc2l6
ZSgpKTsKICAgICB9CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRl
bGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwog
ICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIE5TRGF0YSAqZGF0YSA9IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViQ3J5cHRvTWFzdGVyS2V5Rm9y
V2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXddOworICAgIE5TRGF0YSAqZGF0YSA9
IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpKSBfd2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3XTsKICAgICByZXR1cm4gQVBJOjpEYXRhOjpjcmVhdGVXaXRob3V0
Q29weWluZyhkYXRhKTsKIH0KIApAQCAtMTA5Nyw2MyArMTE4Nyw3OCBAQCBSZWZQdHI8QVBJOjpT
dHJpbmc+IE5hdmlnYXRpb25TdGF0ZTo6TmF2CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uQ2xpZW50OjpuYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21lRG93bmxvYWQoV2ViUGFnZVBy
b3h5JiwgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uJiBuYXZpZ2F0aW9uQWN0aW9uLCBEb3dubG9hZFBy
b3h5JiBkb3dubG9hZCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21lRG93bmxvYWQpCisgICAg
aWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZp
Z2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMubmF2aWdhdGlvbkFjdGlvbkRpZEJlY29tZURvd25sb2FkKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgW25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdh
dGlvbkFjdGlvbikgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCldOworICAgIFtu
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3IG5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBkaWRCZWNvbWVE
b3dubG9hZDp3cmFwcGVyKGRvd25sb2FkKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpO
YXZpZ2F0aW9uQ2xpZW50OjpuYXZpZ2F0aW9uUmVzcG9uc2VEaWRCZWNvbWVEb3dubG9hZChXZWJQ
YWdlUHJveHkmLCBBUEk6Ok5hdmlnYXRpb25SZXNwb25zZSYgbmF2aWdhdGlvblJlc3BvbnNlLCBE
b3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uUmVzcG9uc2VEaWRCZWNvbWVEb3du
bG9hZCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uUmVzcG9uc2VEaWRCZWNvbWVEb3dubG9hZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRp
b25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9u
RGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgbmF2aWdhdGlvblJlc3BvbnNl
OndyYXBwZXIobmF2aWdhdGlvblJlc3BvbnNlKSBkaWRCZWNvbWVEb3dubG9hZDp3cmFwcGVyKGRv
d25sb2FkKV07CisgICAgW25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1fbmF2aWdh
dGlvblN0YXRlLT5tX3dlYlZpZXcgbmF2aWdhdGlvblJlc3BvbnNlOndyYXBwZXIobmF2aWdhdGlv
blJlc3BvbnNlKSBkaWRCZWNvbWVEb3dubG9hZDp3cmFwcGVyKGRvd25sb2FkKV07CiB9CiAKIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpjb250ZXh0TWVudURpZENyZWF0
ZURvd25sb2FkKFdlYlBhZ2VQcm94eSYsIERvd25sb2FkUHJveHkmIGRvd25sb2FkKQogewotICAg
IGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLmNvbnRl
eHRNZW51RGlkQ3JlYXRlRG93bmxvYWQpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGVNZXRob2RzLmNvbnRleHRNZW51RGlkQ3JlYXRlRG93bmxvYWQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUu
bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUg
PSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYg
KCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2Fz
dDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdl
dCgpKSAgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGNvbnRleHRNZW51RGlk
Q3JlYXRlRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSAg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBjb250ZXh0TWVudURpZENyZWF0
ZURvd25sb2FkOndyYXBwZXIoZG93bmxvYWQpXTsKIH0KIAogI2lmIFVTRShRVUlDS19MT09LKQog
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZFN0YXJ0TG9hZEZvclF1
aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3Qg
U3RyaW5nJiB1dGkpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25E
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5N
YWluRnJhbWUpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRl
bGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwog
ICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3Rh
dGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFN0YXJ0
TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRoRmlsZU5hbWU6ZmlsZU5hbWUg
dXRpOnV0aV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
LT5tX3dlYlZpZXcgZGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZVdp
dGhGaWxlTmFtZTpmaWxlTmFtZSB1dGk6dXRpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6
Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFp
bkZyYW1lKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewotICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGaW5pc2hMb2Fk
Rm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tE
b2N1bWVudEluTWFpbkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRp
b25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgp
OworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRl
UHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGRpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZy
YW1lOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkRmluaXNoTG9hZEZvclF1aWNr
TG9va0RvY3VtZW50SW5NYWluRnJhbWU6YnVmZmVyLmNyZWF0ZU5TRGF0YSgpLmdldCgpXTsKIH0K
ICNlbmRpZgogCkBAIC0xMTg0LDE5ICsxMjg5LDIyIEBAIHN0YXRpYyBfV0tTT0F1dGhvcml6YXRp
b25Mb2FkUG9saWN5IHdrU08KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OmRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWQoV2ViUGFnZVByb3h5JiwgU09B
dXRob3JpemF0aW9uTG9hZFBvbGljeSBjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSwg
Y29uc3QgU3RyaW5nJiBleHRlbnNpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU09BdXRob3Jp
emF0aW9uTG9hZFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX25h
dmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeUZvckV4dGVuc2lvbkNv
bXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5
KTsKKworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50
UG9saWN5Rm9yRXh0ZW5zaW9uQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoY3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihj
dXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVh
dGUobmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6ZGVjaWRlUG9s
aWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5OmZvckV4dGVuc2lvbjpj
b21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZh
dGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZp
ZXcgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5Ondr
U09BdXRob3JpemF0aW9uTG9hZFBvbGljeShjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGlj
eSkgZm9yRXh0ZW5zaW9uOmV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIo
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIg
PSBXVEZNb3ZlKGNoZWNrZXIpXShfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkg
bXV0YWJsZSB7CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0
aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkZWNpZGVQ
b2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6d2tTT0F1dGhvcml6
YXRpb25Mb2FkUG9saWN5KGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KSBmb3JFeHRl
bnNpb246ZXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUo
Y2hlY2tlcildKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsK
ICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhh
bmRsZXIoKTsKQEAgLTEyMDgsNyArMTMxNiw3IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZp
Z2F0aW9uQ2xpZW50OjoKIC8vIEhpc3RvcnlEZWxlZ2F0ZVByaXZhdGUgc3VwcG9ydAogICAgIAog
TmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50OjpIaXN0b3J5Q2xpZW50KE5hdmlnYXRpb25T
dGF0ZSYgbmF2aWdhdGlvblN0YXRlKQotICAgIDogbV9uYXZpZ2F0aW9uU3RhdGUobmF2aWdhdGlv
blN0YXRlKQorICAgIDogbV9uYXZpZ2F0aW9uU3RhdGUobWFrZVdlYWtQdHIobmF2aWdhdGlvblN0
YXRlKSkKIHsKIH0KIApAQCAtMTIxOCw1MCArMTMyNiw2MiBAQCBOYXZpZ2F0aW9uU3RhdGU6Okhp
c3RvcnlDbGllbnQ6On5IaXN0b3J5CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xp
ZW50OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXZWJQYWdlUHJveHkmLCBjb25zdCBX
ZWJOYXZpZ2F0aW9uRGF0YVN0b3JlJiBuYXZpZ2F0aW9uRGF0YVN0b3JlKQogewotICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWROYXZp
Z2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
Lm1faGlzdG9yeURlbGVnYXRlLmdldCgpOworICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURlbGVnYXRlLmdldCgpOwogICAgIGlmICghaGlzdG9y
eURlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9u
RGF0YTp3cmFwcGVyKEFQSTo6TmF2aWdhdGlvbkRhdGE6OmNyZWF0ZShuYXZpZ2F0aW9uRGF0YVN0
b3JlKSldOworICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldyBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTp3cmFwcGVyKEFQSTo6TmF2
aWdhdGlvbkRhdGE6OmNyZWF0ZShuYXZpZ2F0aW9uRGF0YVN0b3JlKSldOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdl
YlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiBzb3VyY2VVUkwsIGNvbnN0IFdURjo6U3Ry
aW5nJiBkZXN0aW5hdGlvblVSTCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1faGlz
dG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVS
TFRvVVJMKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTFRvVVJMKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9y
eURlbGVnYXRlLmdldCgpOworICAgIGF1dG8gaGlzdG9yeURlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUtPm1faGlzdG9yeURlbGVnYXRlLmdldCgpOwogICAgIGlmICghaGlzdG9yeURlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2
aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9tVVJMOltO
U1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c291cmNlVVJMXSB0b1VSTDpbTlNVUkwgX3dlYl9V
UkxXaXRoV1RGU3RyaW5nOmRlc3RpbmF0aW9uVVJMXV07CisgICAgW2hpc3RvcnlEZWxlZ2F0ZSBf
d2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZFBlcmZvcm1DbGllbnRSZWRp
cmVjdEZyb21VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpzb3VyY2VVUkxdIHRvVVJM
OltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6ZGVzdGluYXRpb25VUkxdXTsKIH0KIAogdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVj
dChXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMLCBjb25zdCBXVEY6
OlN0cmluZyYgZGVzdGluYXRpb25VUkwpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5t
X2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZy
b21VUkxUb1VSTCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9y
eURlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVSTFRvVVJM
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWhpc3RvcnlEZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0RnJvbVVS
TDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnNvdXJjZVVSTF0gdG9VUkw6W05TVVJMIF93
ZWJfVVJMV2l0aFdURlN0cmluZzpkZXN0aW5hdGlvblVSTF1dOworICAgIFtoaXN0b3J5RGVsZWdh
dGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkaWRQZXJmb3JtU2VydmVy
UmVkaXJlY3RGcm9tVVJMOltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c291cmNlVVJMXSB0
b1VSTDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOmRlc3RpbmF0aW9uVVJMXV07CiB9CiAK
IHZvaWQgTmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50OjpkaWRVcGRhdGVIaXN0b3J5VGl0
bGUoV2ViUGFnZVByb3h5JiwgY29uc3QgV1RGOjpTdHJpbmcmIHRpdGxlLCBjb25zdCBXVEY6OlN0
cmluZyYgdXJsKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEaWRVcGRhdGVIaXN0b3J5VGl0bGVGb3JVUkwpCisgICAgaWYgKCFt
X25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZS0+bV9oaXN0b3J5RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRVcGRhdGVIaXN0b3J5
VGl0bGVGb3JVUkwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gaGlzdG9yeURlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5RGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBo
aXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9oaXN0b3J5RGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFto
aXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFVw
ZGF0ZUhpc3RvcnlUaXRsZTp0aXRsZSBmb3JVUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdURlN0cmlu
Zzp1cmxdXTsKKyAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
LT5tX3dlYlZpZXcgZGlkVXBkYXRlSGlzdG9yeVRpdGxlOnRpdGxlIGZvclVSTDpbTlNVUkwgX3dl
Yl9VUkxXaXRoV1RGU3RyaW5nOnVybF1dOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6d2ls
bENoYW5nZUlzTG9hZGluZygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9V
SURlbGVnYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
VUlEZWxlZ2F0ZS5oCShyZXZpc2lvbiAyNzExNTcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bXBvcnQgIkFQSVVJQ2xpZW50LmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0
IDx3dGYvV2Vha09iakNQdHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CiAKIEBjbGFzcyBf
V0tBY3RpdmF0ZWRFbGVtZW50SW5mbzsKIEBjbGFzcyBXS1dlYlZpZXc7CkBAIC00Nyw3ICs0OCw3
IEBAIGNsYXNzIFJlZ2lzdHJhYmxlRG9tYWluOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xh
c3MgVUlEZWxlZ2F0ZSB7CitjbGFzcyBVSURlbGVnYXRlIDogcHVibGljIENhbk1ha2VXZWFrUHRy
PFVJRGVsZWdhdGU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBleHBsaWNpdCBVSURlbGVnYXRlKFdLV2ViVmlldyAqKTsKQEAgLTcyLDcgKzczLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgLy8gQVBJOjpDb250ZXh0TWVudUNsaWVudAogICAgICAgICB2b2lkIG1l
bnVGcm9tUHJvcG9zZWRNZW51KFdlYlBhZ2VQcm94eSYsIE5TTWVudSAqLCBjb25zdCBXZWJIaXRU
ZXN0UmVzdWx0RGF0YSYsIEFQSTo6T2JqZWN0KiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXRh
aW5QdHI8TlNNZW51PiYmKT4mJikgb3ZlcnJpZGU7CiAKLSAgICAgICAgVUlEZWxlZ2F0ZSYgbV91
aURlbGVnYXRlOworICAgICAgICBXZWFrUHRyPFVJRGVsZWdhdGU+IG1fdWlEZWxlZ2F0ZTsKICAg
ICB9OwogI2VuZGlmCiAKQEAgLTEzMSw3ICsxMzIsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShE
RVZJQ0VfT1JJRU5UQVRJT04pCiAgICAgICAgIHZvaWQgc2hvdWxkQWxsb3dEZXZpY2VPcmllbnRh
dGlvbkFuZE1vdGlvbkFjY2VzcyhXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkm
LCBGcmFtZUluZm9EYXRhJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIGZpbmFs
OwogI2VuZGlmCi0gICAgICAgIGJvb2wgbmVlZHNGb250QXR0cmlidXRlcygpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2hhbmdl
Rm9udEF0dHJpYnV0ZXM7IH0KKyAgICAgICAgYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV91aURlbGVnYXRlID8gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXMgOiBmYWxzZTsgfQogICAgICAg
ICB2b2lkIGRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzKGNvbnN0IFdlYkNvcmU6OkZvbnRBdHRyaWJ1
dGVzJikgZmluYWw7CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlP
cmlnaW4mLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQ
cm94eSYpIGZpbmFsOwogICAgICAgICB2b2lkIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9y
aWdpbihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYs
IEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYpIGZp
bmFsOwpAQCAtMTYzLDEwICsxNjQsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICB2b2lk
IGRlY2lkZVBvbGljeUZvclNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFn
ZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9v
bCk+JiYpIGZpbmFsOwogCi0gICAgICAgIFVJRGVsZWdhdGUmIG1fdWlEZWxlZ2F0ZTsKKyAgICAg
ICAgV2Vha1B0cjxVSURlbGVnYXRlPiBtX3VpRGVsZWdhdGU7CiAgICAgfTsKIAotICAgIFdLV2Vi
VmlldyAqbV93ZWJWaWV3OworICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3Owog
ICAgIFdlYWtPYmpDUHRyPGlkIDxXS1VJRGVsZWdhdGU+ID4gbV9kZWxlZ2F0ZTsKIAogICAgIHN0
cnVjdCB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUu
bW0JKHJldmlzaW9uIDI3MTE1NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJ
RGVsZWdhdGUubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFVJRGVs
ZWdhdGU6OnNldERlbGVnYXRlKGlkIDxXS1VJRGVsCiAKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5V
UykKIFVJRGVsZWdhdGU6OkNvbnRleHRNZW51Q2xpZW50OjpDb250ZXh0TWVudUNsaWVudChVSURl
bGVnYXRlJiB1aURlbGVnYXRlKQotICAgIDogbV91aURlbGVnYXRlKHVpRGVsZWdhdGUpCisgICAg
OiBtX3VpRGVsZWdhdGUobWFrZVdlYWtQdHIodWlEZWxlZ2F0ZSkpCiB7CiB9CiAKQEAgLTE5Nywy
MCArMTk3LDIzIEBAIFVJRGVsZWdhdGU6OkNvbnRleHRNZW51Q2xpZW50Ojp+Q29udGV4dE0KIAog
dm9pZCBVSURlbGVnYXRlOjpDb250ZXh0TWVudUNsaWVudDo6bWVudUZyb21Qcm9wb3NlZE1lbnUo
V2ViUGFnZVByb3h5JiwgTlNNZW51ICptZW51LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYs
IEFQSTo6T2JqZWN0KiB1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXRhaW5QdHI8
TlNNZW51PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29udGV4dE1lbnVGb3JFbGVtZW50Ci0gICAgICAg
ICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRNZW51Rm9y
RWxlbWVudFVzZXJJbmZvCi0gICAgICAgICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0dldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUZvckVsZW1lbnRVc2VySW5m
b0NvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIobWVudSk7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVsZW1lbnQKKyAgICAgICAgJiYgIW1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRNZW51Rm9yRWxlbWVudFVz
ZXJJbmZvCisgICAgICAgICYmICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdHZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVGb3JFbGVtZW50VXNlckluZm9Db21wbGV0
aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1lbnUpOworCisg
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobWVudSk7CiAK
ICAgICBhdXRvIGNvbnRleHRNZW51RWxlbWVudEluZm8gPSBhZG9wdE5TKFtbX1dLQ29udGV4dE1l
bnVFbGVtZW50SW5mbyBhbGxvY10gaW5pdF0pOwogCi0gICAgaWYgKG1fdWlEZWxlZ2F0ZS5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51Rm9yRWxl
bWVudFVzZXJJbmZvQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAobV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51Rm9y
RWxlbWVudFVzZXJJbmZvQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgYXV0byBjaGVja2Vy
ID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBA
c2VsZWN0b3IoX3dlYlZpZXc6Z2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51OmZvckVsZW1l
bnQ6dXNlckluZm86Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZ2V0
Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0TWVudUVs
ZW1lbnRJbmZvLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2Vj
dXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwgY29tcGxldGlvbkhhbmRsZXI6
bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKE5TTWVudSAqbWVudSkgbXV0YWJsZSB7
CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGdldENvbnRleHRNZW51RnJvbVByb3Bv
c2VkTWVudTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQoKSB1c2Vy
SW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZv
LT53cmFwcGVyKCkpIDogbmlsIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1v
dmUoY2hlY2tlcildIChOU01lbnUgKm1lbnUpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGNo
ZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigp
OwpAQCAtMjIwLDE2ICsyMjMsMTYgQEAgdm9pZCBVSURlbGVnYXRlOjpDb250ZXh0TWVudUNsaWVu
dDo6bWVudQogICAgIH0KICAgICAKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19C
RUdJTgotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRl
eHRNZW51Rm9yRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dl
YlZpZXcgY29udGV4dE1lbnU6bWVudSBmb3JFbGVtZW50OmNvbnRleHRNZW51RWxlbWVudEluZm8u
Z2V0KCldKTsKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
Q29udGV4dE1lbnVGb3JFbGVtZW50KQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
LT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY29udGV4dE1lbnU6bWVudSBmb3JFbGVtZW50OmNvbnRl
eHRNZW51RWxlbWVudEluZm8uZ2V0KCldKTsKIAotICAgIGNvbXBsZXRpb25IYW5kbGVyKFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dl
YlZpZXcgY29udGV4dE1lbnU6bWVudSBmb3JFbGVtZW50OmNvbnRleHRNZW51RWxlbWVudEluZm8u
Z2V0KCkgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+
Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbF0pOworICAgIGNvbXBsZXRpb25IYW5kbGVyKFso
aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpIGNvbnRleHRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0
TWVudUVsZW1lbnRJbmZvLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQg
PE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdKTsKICAgICBBTExP
V19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQKIH0KICNlbmRpZgogCiBVSURlbGVnYXRlOjpV
SUNsaWVudDo6VUlDbGllbnQoVUlEZWxlZ2F0ZSYgdWlEZWxlZ2F0ZSkKLSAgICA6IG1fdWlEZWxl
Z2F0ZSh1aURlbGVnYXRlKQorICAgIDogbV91aURlbGVnYXRlKG1ha2VXZWFrUHRyKHVpRGVsZWdh
dGUpKQogewogfQogCkBAIC0yMzksMTggKzI0MiwyMSBAQCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
flVJQ2xpZW50KCkKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y3JlYXRlTmV3UGFnZShX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzJiYgd2luZG93RmVh
dHVyZXMsIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYgbmF2aWdhdGlvbkFjdGlvbiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8V2ViUGFnZVByb3h5PiYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUu
Z2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihudWxscHRyKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGUuZ2V0KCk7CiAgICAgQVNTRVJUKGRlbGVnYXRlKTsKIAotICAgIGF1dG8gY29uZmln
dXJhdGlvbiA9IGFkb3B0TlMoW21fdWlEZWxlZ2F0ZS5tX3dlYlZpZXctPl9jb25maWd1cmF0aW9u
IGNvcHldKTsKLSAgICBbY29uZmlndXJhdGlvbiBfc2V0UmVsYXRlZFdlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlld107CisgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbbV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCktPl9jb25maWd1cmF0aW9uIGNvcHldKTsKKyAgICBbY29u
ZmlndXJhdGlvbiBfc2V0UmVsYXRlZFdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCldOwogCiAgICAgYXV0byBhcGlXaW5kb3dGZWF0dXJlcyA9IEFQSTo6V2luZG93RmVh
dHVyZXM6OmNyZWF0ZSh3aW5kb3dGZWF0dXJlcyk7CiAKLSAgICBpZiAobV91aURlbGVnYXRlLm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb25Gb3JO
YXZpZ2F0aW9uQWN0aW9uV2luZG93RmVhdHVyZXNBc3luYykgeworICAgIGlmIChtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRp
b25Gb3JOYXZpZ2F0aW9uQWN0aW9uV2luZG93RmVhdHVyZXNBc3luYykgewogICAgICAgICBhdXRv
IGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUu
Z2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpjcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb246
Zm9yTmF2aWdhdGlvbkFjdGlvbjp3aW5kb3dGZWF0dXJlczpjb21wbGV0aW9uSGFuZGxlcjopKTsK
IAotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3IGNyZWF0ZVdlYlZpZXdXaXRoQ29uZmlndXJhdGlvbjpjb25m
aWd1cmF0aW9uLmdldCgpIGZvck5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9uQWN0
aW9uKSB3aW5kb3dGZWF0dXJlczp3cmFwcGVyKGFwaVdpbmRvd0ZlYXR1cmVzKSBjb21wbGV0aW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCByZWxhdGVkV2ViVmlldyA9
IFJldGFpblB0cjxXS1dlYlZpZXc+KG1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcpXSAoV0tXZWJWaWV3
ICp3ZWJWaWV3KSBtdXRhYmxlIHsKKyAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY3Jl
YXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgZm9yTmF2aWdh
dGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHdpbmRvd0ZlYXR1cmVzOndyYXBw
ZXIoYXBpV2luZG93RmVhdHVyZXMpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlciksIHJlbGF0ZWRXZWJWaWV3ID0gbV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCldIChXS1dlYlZpZXcgKndlYlZpZXcpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGNo
ZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigp
OwpAQCAtMjY3LDMzICsyNzMsMzYgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y3JlYXRl
TmV3UGFnZQogICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NyZWF0ZVdlYlZpZXdX
aXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25XaW5kb3dGZWF0dXJlcykKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NyZWF0ZVdlYlZpZXdX
aXRoQ29uZmlndXJhdGlvbkZvck5hdmlnYXRpb25BY3Rpb25XaW5kb3dGZWF0dXJlcykKICAgICAg
ICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG51bGxwdHIpOwogCi0gICAgUmV0YWluUHRyPFdL
V2ViVmlldz4gd2ViVmlldyA9IFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXcgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkgZm9y
TmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHdpbmRvd0ZlYXR1cmVz
OndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpXTsKKyAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3
ZWJWaWV3ID0gW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCku
Z2V0KCkgY3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCkg
Zm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHdpbmRvd0ZlYXR1
cmVzOndyYXBwZXIoYXBpV2luZG93RmVhdHVyZXMpXTsKICAgICBpZiAoIXdlYlZpZXcpCiAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihudWxscHRyKTsKIAotICAgIGlmIChbd2ViVmll
dy0+X2NvbmZpZ3VyYXRpb24gX3JlbGF0ZWRXZWJWaWV3XSAhPSBtX3VpRGVsZWdhdGUubV93ZWJW
aWV3KQorICAgIGlmIChbd2ViVmlldy5nZXQoKS0+X2NvbmZpZ3VyYXRpb24gX3JlbGF0ZWRXZWJW
aWV3XSAhPSBtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSkKICAgICAgICAgW05T
RXhjZXB0aW9uIHJhaXNlOk5TSW50ZXJuYWxJbmNvbnNpc3RlbmN5RXhjZXB0aW9uIGZvcm1hdDpA
IlJldHVybmVkIFdLV2ViVmlldyB3YXMgbm90IGNyZWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gY29uZmln
dXJhdGlvbi4iXTsKICAgICBjb21wbGV0aW9uSGFuZGxlcih3ZWJWaWV3LT5fcGFnZS5nZXQoKSk7
CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydChXZWJQ
YWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiBtZXNzYWdlLCBXZWJGcmFtZVByb3h5
KiwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgRnVuY3Rpb248dm9pZCgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdSdW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNv
bXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVy
biBjb21wbGV0aW9uSGFuZGxlcigpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0QWxlcnRQYW5lbFdpdGhNZXNzYWdlSW5pdGlh
dGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0
ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGNoZWNr
ZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCks
IEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3NhZ2U6aW5p
dGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbZGVsZWdhdGUgd2ViVmll
dzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1lc3Nh
Z2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0
ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2Nr
UHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVj
a2VyID0gV1RGTW92ZShjaGVja2VyKV0geworICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJ1bkphdmFTY3JpcHRBbGVydFBhbmVsV2l0aE1l
c3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNy
ZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxl
dGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0zMDMsMTkgKzMxMiwyMiBAQCB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnJ1bkphdmFTY3JpcHRDb25maXJtKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpTdHJp
bmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqIHdlYkZyYW1lUHJveHksIEZyYW1lSW5mb0RhdGEm
JiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkphdmFT
Y3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFu
ZGxlcikgeworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3NhZ2VJbml0aWF0ZWRC
eUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFs
c2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRv
IGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUu
Z2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVz
c2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgIFtkZWxlZ2F0
ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcnVuSmF2YVNjcmlwdENvbmZpcm1QYW5l
bFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJ
bmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7
CisgICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0
KCkgcnVuSmF2YVNjcmlwdENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVk
QnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8p
LCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tl
cildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0
aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKQEAgLTMyNSwxOSArMzM3LDIyIEBAIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHQKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6cnVuSmF2YVNjcmlwdFByb21wdChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgZGVmYXVsdFZhbHVlLCBXZWJGcmFt
ZVByb3h5KiwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgRnVuY3Rpb248dm9pZChjb25zdCBX
VEY6OlN0cmluZyYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0VGV4dElucHV0UGFuZWxX
aXRoUHJvbXB0RGVmYXVsdFRleHRJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KHsgfSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d1J1bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHREZWZhdWx0VGV4dEluaXRpYXRl
ZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihT
dHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShk
ZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZpZXc6cnVuSmF2YVNjcmlwdFRleHRJbnB1dFBh
bmVsV2l0aFByb21wdDpkZWZhdWx0VGV4dDppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5k
bGVyOikpOwotICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcnVu
SmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFByb21wdDptZXNzYWdlIGRlZmF1bHRUZXh0OmRl
ZmF1bHRWYWx1ZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0
ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2Nr
UHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVj
a2VyID0gV1RGTW92ZShjaGVja2VyKV0gKE5TU3RyaW5nICpyZXN1bHQpIG11dGFibGUgeworICAg
IFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJ1
bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHQ6bWVzc2FnZSBkZWZhdWx0VGV4dDpk
ZWZhdWx0VmFsdWUgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVh
dGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9j
a1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hl
Y2tlciA9IFdURk1vdmUoY2hlY2tlcildIChOU1N0cmluZyAqcmVzdWx0KSBtdXRhYmxlIHsKICAg
ICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwpAQCAt
MzQ3LDcgKzM2MiwxMCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5KYXZhU2NyaXB0
CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RTdG9yYWdlQWNjZXNzQ29uZmly
bShXZWJQYWdlUHJveHkmIHdlYlBhZ2VQcm94eSwgV2ViRnJhbWVQcm94eSosIGNvbnN0IFdlYkNv
cmU6OlJlZ2lzdHJhYmxlRG9tYWluJiByZXF1ZXN0aW5nRG9tYWluLCBjb25zdCBXZWJDb3JlOjpS
ZWdpc3RyYWJsZURvbWFpbiYgY3VycmVudERvbWFpbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChi
b29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CkBAIC0zNTYs
MjAgKzM3NCwyMCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZXF1ZXN0U3RvcmFnCiAg
ICAgLy8gU29tZSBzaXRlcyBoYXZlIHF1aXJrcyB3aGVyZSBtdWx0aXBsZSBsb2dpbiBkb21haW5z
IHJlcXVpcmUgc3RvcmFnZSBhY2Nlc3MuCiAgICAgaWYgKGF1dG8gYWRkaXRpb25hbExvZ2luRG9t
YWluID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpmaW5kQWRkaXRpb25hbExvZ2lu
RG9tYWluKGN1cnJlbnREb21haW4sIHJlcXVlc3RpbmdEb21haW4pKSB7CiAjaWYgIVBMQVRGT1JN
KFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQotICAgICAgICBwcmVzZW50U3RvcmFnZUFj
Y2Vzc0FsZXJ0UXVpcmsobV91aURlbGVnYXRlLm1fd2ViVmlldywgcmVxdWVzdGluZ0RvbWFpbiwg
KmFkZGl0aW9uYWxMb2dpbkRvbWFpbiwgY3VycmVudERvbWFpbiwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOworICAgICAgICBwcmVzZW50U3RvcmFnZUFjY2Vzc0FsZXJ0UXVpcmsobV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCksIHJlcXVlc3RpbmdEb21haW4sICphZGRpdGlv
bmFsTG9naW5Eb21haW4sIGN1cnJlbnREb21haW4sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RTdG9yYWdlQWNjZXNzUGFuZWxVbmRl
ckZpcnN0UGFydHlDb21wbGV0aW9uSGFuZGxlcikgeworICAgIGlmICghbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdFN0b3JhZ2VBY2Nlc3NQYW5lbFVuZGVyRmly
c3RQYXJ0eUNvbXBsZXRpb25IYW5kbGVyKSB7CiAjaWYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQ
TEFURk9STShBUFBMRVRWKQotICAgICAgICBwcmVzZW50U3RvcmFnZUFjY2Vzc0FsZXJ0KG1fdWlE
ZWxlZ2F0ZS5tX3dlYlZpZXcsIHJlcXVlc3RpbmdEb21haW4sIGN1cnJlbnREb21haW4sIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcHJlc2VudFN0b3JhZ2VBY2Nlc3NBbGVy
dChtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSwgcmVxdWVzdGluZ0RvbWFpbiwg
Y3VycmVudERvbWFpbiwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogI2VuZGlmCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxl
ckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpy
ZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsRm9yRG9tYWluOnVuZGVyQ3VycmVudERvbWFpbjpjb21w
bGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJlcXVlc3RTdG9yYWdlQWNjZXNzUGFu
ZWxGb3JEb21haW46cmVxdWVzdGluZ0RvbWFpbi5zdHJpbmcoKSB1bmRlckN1cnJlbnREb21haW46
Y3VycmVudERvbWFpbi5zdHJpbmcoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBX
VEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgeworICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIHJlcXVlc3RTdG9yYWdlQWNjZXNzUGFuZWxGb3JEb21haW46cmVxdWVzdGlu
Z0RvbWFpbi5zdHJpbmcoKSB1bmRlckN1cnJlbnREb21haW46Y3VycmVudERvbWFpbi5zdHJpbmco
KSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9P
TCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRs
ZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHJlc3VsdCk7CkBAIC0zNzksMTUgKzM5NywxOCBAQCB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpyZXF1ZXN0U3RvcmFnCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRl
Y2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViS2l0OjpXZWJQYWdl
UHJveHkmIHBhZ2UsIFdlYktpdDo6V2ViRnJhbWVQcm94eSYgZnJhbWUsIGNvbnN0IEZyYW1lSW5m
b0RhdGEmIGZyYW1lSW5mbywgRnVuY3Rpb248dm9pZChib29sKT4mIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1
ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWVEZWNpc2lvbkhhbmRsZXIpCi0gICAgICAg
IHJldHVybjsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKGZhbHNlKTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3UmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lRGVjaXNpb25I
YW5kbGVyKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgIAot
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
ZGVsZWdhdGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENo
ZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJlcXVlc3RH
ZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZTpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgWyhp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1f
d2ViVmlldyByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWU6d3JhcHBlcihBUEk6
OkZyYW1lSW5mbzo6Y3JlYXRlKEZyYW1lSW5mb0RhdGEgeyBmcmFtZUluZm8gfSwgJnBhZ2UpKSBk
ZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhj
aGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVj
a2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KSByZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1l
SW5mbzo6Y3JlYXRlKEZyYW1lSW5mb0RhdGEgeyBmcmFtZUluZm8gfSwgJnBhZ2UpKSBkZWNpc2lv
bkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6ZXhjaGFuZ2Uo
Y29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0g
KEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25I
YW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVj
a2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTM5NywzNiArNDE4LDQ0IEBAIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUYKIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6ZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNl
KFdlYlBhZ2VQcm94eSYsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUmVzaWduSW5wdXRFbGVtZW50U3Ry
b25nUGFzc3dvcmRBcHBlYXJhbmNlV2l0aFVzZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRl
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEaWRSZXNpZ25JbnB1dEVsZW1lbnRTdHJvbmdQYXNzd29yZEFwcGVhcmFuY2VX
aXRoVXNlckluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRB
cHBlYXJhbmNlV2l0aFVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJl
Q29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIGRpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFyYW5jZVdp
dGhVc2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVz
ZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsXTsKIH0KIAogYm9vbCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5CZWZvcmVVbmxvYWRDb25m
aXJtUGFuZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcjsKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyOwog
fQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFu
ZWwoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgV2ViRnJh
bWVQcm94eSosIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5p
dGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUp
CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZp
cm1QYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlm
ICghZGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJD
YWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6cnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21w
bGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJh
bWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5k
bGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJs
ZSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsV2l0aE1lc3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFt
ZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRs
ZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxl
IHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQp
OwpAQCAtNDM2LDI2ICs0NjUsMjggQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuQmVm
b3JlVW5sbwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXVv
dGEoV2ViUGFnZVByb3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSTo6U2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBXVEY6OlN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBXVEY6
OlN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50UXVvdGEsIHVu
c2lnbmVkIGxvbmcgbG9uZyBjdXJyZW50T3JpZ2luVXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBj
dXJyZW50VXNhZ2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBleHBlY3RlZFVzYWdlLCBGdW5jdGlvbjx2
b2lkICh1bnNpZ25lZCBsb25nIGxvbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlm
ICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVEYXRhYmFzZVF1
b3RhRm9yU2VjdXJpdHlPcmlnaW5DdXJyZW50UXVvdGFDdXJyZW50T3JpZ2luVXNhZ2VDdXJyZW50
RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIgJiYgIW1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5
T3JpZ2luRGF0YWJhc2VOYW1lRGlzcGxheU5hbWVDdXJyZW50UXVvdGFDdXJyZW50T3JpZ2luVXNh
Z2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIpIHsKKyAg
ICAvLyBVc2UgNTAgTUIgYXMgdGhlIGRlZmF1bHQgZGF0YWJhc2UgcXVvdGEuCisgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIGRlZmF1bHRQZXJPcmlnaW5EYXRhYmFzZVF1b3RhID0gNTAgKiAxMDI0ICog
MTAyNDsKIAotICAgICAgICAvLyBVc2UgNTAgTUIgYXMgdGhlIGRlZmF1bHQgZGF0YWJhc2UgcXVv
dGEuCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UGVyT3JpZ2luRGF0YWJhc2VR
dW90YSA9IDUwICogMTAyNCAqIDEwMjQ7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihkZWZhdWx0UGVyT3JpZ2luRGF0YWJhc2VRdW90YSk7
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVE
YXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5DdXJyZW50UXVvdGFDdXJyZW50T3JpZ2luVXNh
Z2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIgJiYgIW1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZURhdGFiYXNlUXVvdGFG
b3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlOYW1lQ3VycmVudFF1b3RhQ3VycmVu
dE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVjaXNpb25IYW5k
bGVyKSB7CiAKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGVmYXVsdFBlck9yaWdpbkRhdGFi
YXNlUXVvdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewotICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50UXVvdGEpOworICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihkZWZhdWx0UGVyT3JpZ2luRGF0YWJhc2VRdW90YSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBBU1NFUlQoc2VjdXJpdHlPcmlnaW4pOwogCi0gICAgaWYgKG1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5
T3JpZ2luRGF0YWJhc2VOYW1lRGlzcGxheU5hbWVDdXJyZW50UXVvdGFDdXJyZW50T3JpZ2luVXNh
Z2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNpc2lvbkhhbmRsZXIpIHsKKyAg
ICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJh
c2VRdW90YUZvclNlY3VyaXR5T3JpZ2luRGF0YWJhc2VOYW1lRGlzcGxheU5hbWVDdXJyZW50UXVv
dGFDdXJyZW50T3JpZ2luVXNhZ2VDdXJyZW50RGF0YWJhc2VVc2FnZUV4cGVjdGVkVXNhZ2VEZWNp
c2lvbkhhbmRsZXIpIHsKICAgICAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJD
YWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6ZGVj
aWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOmRhdGFiYXNlTmFtZTpkaXNwbGF5TmFt
ZTpjdXJyZW50UXVvdGE6Y3VycmVudE9yaWdpblVzYWdlOmN1cnJlbnREYXRhYmFzZVVzYWdlOmV4
cGVjdGVkVXNhZ2U6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgICAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGRlY2lk
ZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0eU9yaWdpbikg
ZGF0YWJhc2VOYW1lOmRhdGFiYXNlTmFtZSBkaXNwbGF5TmFtZTpkaXNwbGF5TmFtZSBjdXJyZW50
UXVvdGE6Y3VycmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50T3JpZ2luVXNhZ2Ug
Y3VycmVudERhdGFiYXNlVXNhZ2U6Y3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6ZXhwZWN0ZWRV
c2FnZSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0odW5z
aWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSB7CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0
eU9yaWdpbikgZGF0YWJhc2VOYW1lOmRhdGFiYXNlTmFtZSBkaXNwbGF5TmFtZTpkaXNwbGF5TmFt
ZSBjdXJyZW50UXVvdGE6Y3VycmVudFF1b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50T3Jp
Z2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6Y3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6
ZXhwZWN0ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVj
a2VyKV0odW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSB7CiAgICAgICAgICAgICBpZiAoY2hl
Y2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7
CkBAIC00NjUsNyArNDk2LDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZXhjZWVkZWRE
YXRhYgogICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENo
ZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZURh
dGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjpjdXJyZW50UXVvdGE6Y3VycmVudE9yaWdpblVz
YWdlOmN1cnJlbnREYXRhYmFzZVVzYWdlOmV4cGVjdGVkVXNhZ2U6ZGVjaXNpb25IYW5kbGVyOikp
OwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS5tX3dlYlZpZXcgZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luOndy
YXBwZXIoKnNlY3VyaXR5T3JpZ2luKSBjdXJyZW50UXVvdGE6Y3VycmVudFF1b3RhIGN1cnJlbnRP
cmlnaW5Vc2FnZTpjdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNlVXNhZ2U6Y3VycmVu
dFVzYWdlIGV4cGVjdGVkVXNhZ2U6ZXhwZWN0ZWRVc2FnZSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0odW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSB7
CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3Vy
aXR5T3JpZ2luOndyYXBwZXIoKnNlY3VyaXR5T3JpZ2luKSBjdXJyZW50UXVvdGE6Y3VycmVudFF1
b3RhIGN1cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50T3JpZ2luVXNhZ2UgY3VycmVudERhdGFiYXNl
VXNhZ2U6Y3VycmVudFVzYWdlIGV4cGVjdGVkVXNhZ2U6ZXhwZWN0ZWRVc2FnZSBkZWNpc2lvbkhh
bmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0odW5zaWduZWQgbG9uZyBsb25n
IG5ld1F1b3RhKSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0Jl
ZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2Fs
bENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC00ODcsMTQgKzUxOCwxNyBAQCBzdGF0aWMgaW5saW5l
IF9XS0ZvY3VzRGlyZWN0aW9uIHRvV0tGb2N1CiAKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnRha2VGb2N1cyhXZWJQYWdlUHJveHkqLCBXS0ZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
LSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VGFrZUZvY3Vz
KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Rha2VGb2N1cykKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHRha2VGb2N1czp0b1dLRm9jdXNEaXJlY3Rpb24oZGly
ZWN0aW9uKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgdGFrZUZvY3VzOnRvV0tGb2N1
c0RpcmVjdGlvbihkaXJlY3Rpb24pXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTI5LDEx
NiArNTYzLDE0NiBAQCBzdGF0aWMgX1dLQXV0b3BsYXlFdmVudCB0b1dLQXV0b3BsYXlFdmVuCiAK
IHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmhhbmRsZUF1dG9wbGF5RXZlbnQoV2ViUGFnZVBy
b3h5JiwgV2ViQ29yZTo6QXV0b3BsYXlFdmVudCBldmVudCwgT3B0aW9uU2V0PFdlYkNvcmU6OkF1
dG9wbGF5RXZlbnRGbGFncz4gZmxhZ3MpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0hhbmRsZUF1dG9wbGF5RXZlbnRXaXRoRmxhZ3MpCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGFuZGxlQXV0b3BsYXlFdmVudFdpdGhGbGFncykK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVs
ZWdhdGUubV93ZWJWaWV3IGhhbmRsZUF1dG9wbGF5RXZlbnQ6dG9XS0F1dG9wbGF5RXZlbnQoZXZl
bnQpIHdpdGhGbGFnczp0b1dLQXV0b3BsYXlFdmVudEZsYWdzKGZsYWdzKV07CisgICAgWyhpZCA8
V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgaGFuZGxlQXV0b3BsYXlFdmVudDp0b1dLQXV0b3BsYXlFdmVudChl
dmVudCkgd2l0aEZsYWdzOnRvV0tBdXRvcGxheUV2ZW50RmxhZ3MoZmxhZ3MpXTsKIH0KIAogI2lm
IFBMQVRGT1JNKE1BQykKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNhblJ1bk1vZGFsKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdSdW5Nb2RhbDsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1
bk1vZGFsOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5Nb2RhbChXZWJQYWdl
UHJveHkmKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdSdW5Nb2RhbCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5Nb2RhbCkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3UnVuTW9kYWw6bV91
aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVs
ZWdhdGUgX3dlYlZpZXdSdW5Nb2RhbDptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KV07CiB9CiAKIGZsb2F0IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoZWFkZXJIZWlnaHQoV2ViUGFn
ZVByb3h5JiwgV2ViRnJhbWVQcm94eSYgd2ViRnJhbWVQcm94eSkKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGVhZGVySGVpZ2h0KQorICAgIGlmICgh
bV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGVhZGVySGVpZ2h0KQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0
KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4g
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdIZWFkZXJIZWlnaHQ6
bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3SGVhZGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpXTsKIH0KIAogZmxvYXQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmZvb3Rl
ckhlaWdodChXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JikKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Rm9vdGVySGVpZ2h0KQorICAgIGlmICgh
bV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Rm9vdGVySGVpZ2h0KQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0
KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICByZXR1cm4g
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdGb290ZXJIZWlnaHQ6
bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Rm9vdGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZHJhd0hl
YWRlcihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRS
ZWN0JiYgcmVjdCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3RHJhd0hlYWRlckluUmVjdEZvclBhZ2VXaXRoVGl0bGVVUkwpCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RHJhd0hlYWRlckluUmVjdEZvclBhZ2VXaXRoVGl0bGVVUkwp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAg
Ci0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURl
bGVnYXRlLm1fd2ViVmlldyBkcmF3SGVhZGVySW5SZWN0OnJlY3QgZm9yUGFnZVdpdGhUaXRsZTpm
cmFtZS50aXRsZSgpIFVSTDpmcmFtZS51cmwoKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0
KCkgZHJhd0hlYWRlckluUmVjdDpyZWN0IGZvclBhZ2VXaXRoVGl0bGU6ZnJhbWUudGl0bGUoKSBV
Ukw6ZnJhbWUudXJsKCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkcmF3Rm9v
dGVyKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIGZyYW1lLCBXZWJDb3JlOjpGbG9hdFJl
Y3QmJiByZWN0KQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEcmF3Rm9vdGVySW5SZWN0Rm9yUGFnZVdpdGhUaXRsZVVSTCkKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEcmF3Rm9vdGVySW5SZWN0Rm9yUGFnZVdpdGhUaXRsZVVSTCkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVs
ZWdhdGUubV93ZWJWaWV3IGRyYXdGb290ZXJJblJlY3Q6cmVjdCBmb3JQYWdlV2l0aFRpdGxlOmZy
YW1lLnRpdGxlKCkgVVJMOmZyYW1lLnVybCgpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KSBkcmF3Rm9vdGVySW5SZWN0OnJlY3QgZm9yUGFnZVdpdGhUaXRsZTpmcmFtZS50aXRsZSgpIFVS
TDpmcmFtZS51cmwoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnBhZ2VEaWRT
Y3JvbGwoV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkU2Nyb2xsKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RpZFNjcm9sbCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlld0RpZFNjcm9sbDptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJ
RGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZFNjcm9sbDptX3VpRGVsZWdhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmZvY3VzKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZU1ldGhvZHMuZm9jdXNXZWJWaWV3KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMuZm9jdXNX
ZWJWaWV3KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF9mb2N1c1dl
YlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX2ZvY3VzV2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQo
KS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnVuZm9jdXMoV2ViUGFn
ZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy51bmZv
Y3VzV2ViVmlldykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLnVuZm9jdXNXZWJWaWV3KQog
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF91bmZvY3VzV2ViVmlldzpt
X3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfdW5mb2N1c1dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0
KCldOwogfQogCiBzdGF0aWMgX1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb24gdG9XS1BsdWdJ
blVuYXZhaWxhYmlsaXR5UmVhc29uKFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFzb24gcmVhc29u
KQpAQCAtNjU3LDE0ICs3MjEsMTcgQEAgc3RhdGljIF9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVh
c29uIHRvVwogICAgIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6dW5hdmFpbGFibGVQbHVn
aW5CdXR0b25DbGlja2VkKFdlYlBhZ2VQcm94eSYsIFdLUGx1Z2luVW5hdmFpbGFiaWxpdHlSZWFz
b24gcmVhc29uLCBBUEk6OkRpY3Rpb25hcnkmIHBsdWdJbkluZm8pCiB7Ci0gICAgaWYgKCFtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VuYXZhaWxhYmxlUGx1Z0luQnV0dG9u
Q2xpY2tlZCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdVbmF2YWlsYWJsZVBs
dWdJbkJ1dHRvbkNsaWNrZWQpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHVuYXZhaWxhYmxlUGx1Z0luQnV0dG9uQ2xp
Y2tlZFdpdGhSZWFzb246dG9XS1BsdWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKHJlYXNvbikgcGx1
Z0luSW5mbzp3cmFwcGVyKHBsdWdJbkluZm8pXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQo
KSB1bmF2YWlsYWJsZVBsdWdJbkJ1dHRvbkNsaWNrZWRXaXRoUmVhc29uOnRvV0tQbHVnSW5VbmF2
YWlsYWJpbGl0eVJlYXNvbihyZWFzb24pIHBsdWdJbkluZm86d3JhcHBlcihwbHVnSW5JbmZvKV07
CiB9CiAgICAgCiBzdGF0aWMgX1dLUmVzb3VyY2VMaW1pdCB0b1dLUmVzb3VyY2VMaW1pdChXS1Jl
c291cmNlTGltaXQgbGltaXQpCkBAIC02ODEsNjIgKzc0OCw3NyBAQCBzdGF0aWMgX1dLUmVzb3Vy
Y2VMaW1pdCB0b1dLUmVzb3VyY2VMaW1pCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRp
ZEV4Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQoV2ViUGFnZVBy
b3h5JiwgV0tSZXNvdXJjZUxpbWl0IGxpbWl0KQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VMaW1pdFdo
aWxlSW5Gb3JlZ3JvdW5kKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4
Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUu
Z2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgW3N0YXRp
Y19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRXaGlsZUlu
Rm9yZWdyb3VuZDp0b1dLUmVzb3VyY2VMaW1pdChsaW1pdCldOworICAgIFtzdGF0aWNfY2FzdDxp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUt
Pm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRFeGNlZWRCYWNrZ3JvdW5kUmVzb3VyY2VMaW1pdFdo
aWxlSW5Gb3JlZ3JvdW5kOnRvV0tSZXNvdXJjZUxpbWl0KGxpbWl0KV07CiB9CiAKIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZE5vdEhhbmRsZVdoZWVsRXZlbnQoV2ViUGFnZVByb3h5Kiwg
Y29uc3QgTmF0aXZlV2ViV2hlZWxFdmVudCYgZXZlbnQpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5vdEhhbmRsZVdoZWVsRXZlbnQpCisgICAg
aWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTm90SGFuZGxlV2hlZWxFdmVudCkKICAg
ICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAg
ICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdh
dGUubV93ZWJWaWV3IGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQ6ZXZlbnQubmF0aXZlRXZlbnQoKV07
CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkTm90SGFuZGxlV2hlZWxFdmVudDpldmVu
dC5uYXRpdmVFdmVudCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6c2V0SXNS
ZXNpemFibGUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBib29sIHJlc2l6YWJsZSkKIHsKLSAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2V0UmVzaXphYmxlKQor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1NldFJlc2l6YWJsZSkKICAgICAgICAg
cmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdl
dCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93
ZWJWaWV3IHNldFJlc2l6YWJsZTpyZXNpemFibGVdOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIHNldFJlc2l6YWJsZTpyZXNpemFibGVdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xp
ZW50OjpzZXRXaW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIGNvbnN0IFdlYkNvcmU6
OkZsb2F0UmVjdCYgZnJhbWUpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1NldFdpbmRvd0ZyYW1lKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1NldFdpbmRvd0ZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdh
dGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgc2V0V2luZG93RnJhbWU6ZnJh
bWVdOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHNldFdpbmRvd0ZyYW1lOmZyYW1lXTsK
IH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6d2luZG93RnJhbWUoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkNvcmU6OkZsb2F0UmVjdCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0dldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91aURl
bGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKKworICAgIGlm
ICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0V2luZG93RnJhbWVX
aXRoQ29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7
IH0pOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZ2V0V2luZG93RnJhbWVXaXRoQ29tcGxldGlvbkhh
bmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRl
KGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6Z2V0V2luZG93RnJhbWVXaXRoQ29t
cGxldGlvbkhhbmRsZXI6KSldKENHUmVjdCBmcmFtZSkgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIGdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9
IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNl
bGVjdG9yKF93ZWJWaWV3OmdldFdpbmRvd0ZyYW1lV2l0aENvbXBsZXRpb25IYW5kbGVyOikpXShD
R1JlY3QgZnJhbWUpIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFz
QmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRD
YWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTc0NiwyNyArODI4LDMzIEBAIHZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OndpbmRvd0ZyYW1lKFcKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViSGl0VGVz
dFJlc3VsdERhdGEmIGRhdGEsIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+IG1vZGlmaWVy
cywgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdNb3VzZURpZE1vdmVPdmVyRWxlbWVudFdpdGhGbGFnc1VzZXJJ
bmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld01vdXNlRGlkTW92ZU92ZXJF
bGVtZW50V2l0aEZsYWdzVXNlckluZm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVs
ZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gYXBpSGl0VGVzdFJlc3VsdCA9IEFQSTo6SGl0VGVz
dFJlc3VsdDo6Y3JlYXRlKGRhdGEpOwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRoRmxhZ3M6V2ViRXZlbnRG
YWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykgdXNlckluZm86dXNlcklu
Zm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigp
KSA6IG5pbF07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbW91c2VEaWRNb3ZlT3ZlckVs
ZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRoRmxhZ3M6V2ViRXZlbnRG
YWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykgdXNlckluZm86dXNlcklu
Zm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigp
KSA6IG5pbF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnRvb2xiYXJzQXJlVmlz
aWJsZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdH
ZXRUb29sYmFyc0FyZVZpc2libGVXaXRoQ29tcGxldGlvbkhhbmRsZXIpCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKKworICAg
IGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0VG9vbGJhcnNB
cmVWaXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm4gY29tcGxldGlv
bkhhbmRsZXIodHJ1ZSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRp
b25IYW5kbGVyKHRydWUpOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZ2V0VG9vbGJhcnNBcmVWaXNp
YmxlV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3Omdl
dFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQk9PTCB2aXNpYmxl
KSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZ2V0VG9vbGJhcnNBcmVWaXNpYmxlV2l0
aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENo
ZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmdldFRvb2xi
YXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQk9PTCB2aXNpYmxlKSB7CiAg
ICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5k
bGVyKCk7CkBAIC03NzYsNTEgKzg2NCw2MyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp0
b29sYmFyc0FyZVZpCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZENsaWNrQXV0b0Zp
bGxCdXR0b24oV2ViUGFnZVByb3h5JiwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewotICAgIGlm
ICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDbGlja0F1dG9GaWxs
QnV0dG9uV2l0aFVzZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rp
ZENsaWNrQXV0b0ZpbGxCdXR0b25XaXRoVXNlckluZm8pCiAgICAgICAgIHJldHVybjsKICAgICAK
LSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRl
UHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkaWRDbGlj
a0F1dG9GaWxsQnV0dG9uV2l0aFVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5T
U2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpIGRpZENsaWNrQXV0b0ZpbGxCdXR0b25XaXRoVXNlckluZm86dXNlcklu
Zm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigp
KSA6IG5pbF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3dQYWdlKFdlYlBh
Z2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMuc2hv
d1dlYlZpZXcpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMuc2hvd1dlYlZpZXcpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF9zaG93V2ViVmlldzptX3VpRGVsZWdhdGUu
bV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfc2hv
d1dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogICAgIAog
dm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6c2F2ZURhdGFUb0ZpbGVJbkRvd25sb2Fkc0ZvbGRl
cihXZWJQYWdlUHJveHkqLCBjb25zdCBXVEY6OlN0cmluZyYgc3VnZ2VzdGVkRmlsZW5hbWUsIGNv
bnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgVVJMJiBvcmlnaW5hdGluZ1VSTCwgQVBJ
OjpEYXRhJiBkYXRhKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdTYXZlRGF0YVRvRmlsZVN1Z2dlc3RlZEZpbGVuYW1lTWltZVR5cGVPcmlnaW5hdGlu
Z1VSTCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTYXZlRGF0YVRvRmlsZVN1
Z2dlc3RlZEZpbGVuYW1lTWltZVR5cGVPcmlnaW5hdGluZ1VSTCkKICAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsK
KyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAg
IGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgc2F2ZURh
dGFUb0ZpbGU6d3JhcHBlcihkYXRhKSBzdWdnZXN0ZWRGaWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFt
ZSBtaW1lVHlwZTptaW1lVHlwZSBvcmlnaW5hdGluZ1VSTDpvcmlnaW5hdGluZ1VSTF07CisgICAg
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
LT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgc2F2ZURhdGFUb0ZpbGU6d3JhcHBlcihkYXRhKSBzdWdn
ZXN0ZWRGaWxlbmFtZTpzdWdnZXN0ZWRGaWxlbmFtZSBtaW1lVHlwZTptaW1lVHlwZSBvcmlnaW5h
dGluZ1VSTDpvcmlnaW5hdGluZ1VSTF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdDo6V2Vi
UGFnZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIFdURjo6RnVu
Y3Rpb248dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdE5vdGlmaWNhdGlvblBlcm1p
c3Npb25Gb3JTZWN1cml0eU9yaWdpbkRlY2lzaW9uSGFuZGxlcikKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKKworICAgIGlm
ICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdE5vdGlmaWNh
dGlvblBlcm1pc3Npb25Gb3JTZWN1cml0eU9yaWdpbkRlY2lzaW9uSGFuZGxlcikKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogCiAgICAgYXV0byBjaGVja2VyID0g
Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2Vs
ZWN0b3IoX3dlYlZpZXc6cmVxdWVzdE5vdGlmaWNhdGlvblBlcm1pc3Npb25Gb3JTZWN1cml0eU9y
aWdpbjpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyByZXF1ZXN0Tm90aWZpY2F0
aW9uUGVybWlzc2lvbkZvclNlY3VyaXR5T3JpZ2luOndyYXBwZXIoc2VjdXJpdHlPcmlnaW4pIGRl
Y2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1
bHQpIG11dGFibGUgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlcXVlc3ROb3RpZmlj
YXRpb25QZXJtaXNzaW9uRm9yU2VjdXJpdHlPcmlnaW46d3JhcHBlcihzZWN1cml0eU9yaWdpbikg
ZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJl
c3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhh
c0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlk
Q2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC04MzAsNDYgKzkzMCw1OCBAQCB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGCiAKIFJlZjxBUEk6Okluc3BlY3RvckNvbmZp
Z3VyYXRpb24+IFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpjb25maWd1cmF0aW9uRm9yTG9jYWxJbnNw
ZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yUHJveHkmIGluc3BlY3RvcikKIHsKLSAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29uZmlndXJhdGlv
bkZvckxvY2FsSW5zcGVjdG9yKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1
cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpjcmVhdGUoKTsKKworICAgIGlmICghbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29uZmlndXJhdGlvbkZvckxvY2Fs
SW5zcGVjdG9yKQogICAgICAgICByZXR1cm4gQVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uOjpj
cmVhdGUoKTsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBBUEk6Okluc3BlY3RvckNvbmZp
Z3VyYXRpb246OmNyZWF0ZSgpOwogCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEFQSTo6SW5zcGVj
dG9yQ29uZmlndXJhdGlvbiY+KFtbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3Bl
Y3Rvcjp3cmFwcGVyKGluc3BlY3RvcildIF9hcGlPYmplY3RdKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uJj4oW1soaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpIGNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildIF9h
cGlPYmplY3RdKTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkQXR0YWNoTG9j
YWxJbnNwZWN0b3IoV2ViUGFnZVByb3h5JiwgV2ViSW5zcGVjdG9yUHJveHkmIGluc3BlY3RvcikK
IHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQXR0
YWNoTG9jYWxJbnNwZWN0b3IpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEF0dGFj
aExvY2FsSW5zcGVjdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkQXR0YWNoTG9jYWxJbnNwZWN0b3I6d3Jh
cHBlcihpbnNwZWN0b3IpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkaWRBdHRhY2hM
b2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50Ojp3aWxsQ2xvc2VMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkmLCBXZWJJbnNw
ZWN0b3JQcm94eSYgaW5zcGVjdG9yKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdXaWxsQ2xvc2VMb2NhbEluc3BlY3RvcikKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdXaWxsQ2xvc2VMb2NhbEluc3BlY3RvcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgp
OworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgWyhpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyB3aWxs
Q2xvc2VMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOworICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVjdG9yKV07
CiB9CiAKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bk9wZW5QYW5lbChXZWJQYWdlUHJv
eHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkqIHdlYkZyYW1lUHJveHksIEZyYW1lSW5mb0RhdGEmJiBm
cmFtZUluZm8sIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyogb3BlblBhbmVsUGFyYW1ldGVycywg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSogbGlzdGVuZXIpCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bk9wZW5QYW5lbFdpdGhQYXJh
bWV0ZXJzSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91aURl
bGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdSdW5PcGVuUGFuZWxXaXRoUGFyYW1ldGVyc0luaXRpYXRlZEJ5
RnJhbWVDb21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRl
bGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTg3Nyw3ICs5ODksNyBAQCBib29s
IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVuUGFuZWwoCiAKICAgICBhdXRvIGNoZWNrZXIg
PSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBz
ZWxlY3Rvcih3ZWJWaWV3OnJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOmluaXRpYXRlZEJ5RnJh
bWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7CiAKLSAgICBbZGVsZWdhdGUgd2ViVmlldzptX3VpRGVs
ZWdhdGUubV93ZWJWaWV3IHJ1bk9wZW5QYW5lbFdpdGhQYXJhbWV0ZXJzOndyYXBwZXIoKm9wZW5Q
YW5lbFBhcmFtZXRlcnMpIGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihmcmFtZSkgY29tcGxldGlv
bkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKSwgb3BlblBh
bmVsUGFyYW1ldGVycyA9IG1ha2VSZWYoKm9wZW5QYW5lbFBhcmFtZXRlcnMpLCBsaXN0ZW5lciA9
IG1ha2VSZWZQdHIobGlzdGVuZXIpXSAoTlNBcnJheSAqVVJMcykgbXV0YWJsZSB7CisgICAgW2Rl
bGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcnVuT3Bl
blBhbmVsV2l0aFBhcmFtZXRlcnM6d3JhcHBlcigqb3BlblBhbmVsUGFyYW1ldGVycykgaW5pdGlh
dGVkQnlGcmFtZTp3cmFwcGVyKGZyYW1lKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIo
W2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBvcGVuUGFuZWxQYXJhbWV0ZXJzID0gbWFrZVJl
Zigqb3BlblBhbmVsUGFyYW1ldGVycyksIGxpc3RlbmVyID0gbWFrZVJlZlB0cihsaXN0ZW5lcild
IChOU0FycmF5ICpVUkxzKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRp
b25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBj
aGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTkwMSwxNyArMTAxMywyMCBA
QCBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVuUGFuZWwoCiAjaWYgRU5BQkxFKERF
VklDRV9PUklFTlRBVElPTikKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3MoV2ViS2l0OjpXZWJQYWdlUHJveHkmIHBh
Z2UsIFdlYkZyYW1lUHJveHkmIHdlYkZyYW1lUHJveHksIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUlu
Zm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Nob3VsZEFs
bG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lRGVjaXNp
b25IYW5kbGVyKSB7Ci0gICAgICAgIHByZXNlbnRPcmllbnRhdGlvbkFjY2Vzc0FsZXJ0KG1fdWlE
ZWxlZ2F0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mby5zZWN1cml0eU9yaWdpbi5ob3N0LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+
bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Nob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRN
b3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lRGVjaXNpb25IYW5kbGVyKSB7CisgICAgICAgIHBy
ZXNlbnRPcmllbnRhdGlvbkFjY2Vzc0FsZXJ0KG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpLCBmcmFtZUluZm8uc2VjdXJpdHlPcmlnaW4uaG9zdCwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENv
bXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVj
dG9yKF93ZWJWaWV3OnNob3VsZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NS
ZXF1ZXN0ZWRCeUZyYW1lOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHNob3Vs
ZEFsbG93RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lOndy
YXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkg
ZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIGdy
YW50ZWQpIG11dGFibGUgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRl
IF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHNob3VsZEFsbG93
RGV2aWNlT3JpZW50YXRpb25BbmRNb3Rpb25BY2Nlc3NSZXF1ZXN0ZWRCeUZyYW1lOndyYXBwZXIo
QVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgZGVjaXNp
b25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIGdyYW50ZWQp
IG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVu
Q2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxD
b21wbGV0aW9uSGFuZGxlcigpOwpAQCAtOTIyLDE3ICsxMDM3LDIzIEBAIHZvaWQgVUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OnNob3VsZEFsbG93RGUKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
ZGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXMoY29uc3QgV2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXMmIGZv
bnRBdHRyaWJ1dGVzKQogeworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47
CisKICAgICBpZiAoIW5lZWRzRm9udEF0dHJpYnV0ZXMoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byBwcml2YXRlVUlEZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pbV91
aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7Ci0gICAgW3ByaXZhdGVVSURlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXM6Zm9udEF0
dHJpYnV0ZXMuY3JlYXRlRGljdGlvbmFyeSgpLmdldCgpXTsKKyAgICBhdXRvIHByaXZhdGVVSURl
bGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgW3ByaXZhdGVVSURlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzOmZvbnRBdHRyaWJ1
dGVzLmNyZWF0ZURpY3Rpb25hcnkoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVz
ZXJNZWRpYU9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0UHJveHkmIHJlcXVlc3QpCiB7CiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKLSAgICBhdXRvIGRlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
IHsKICAgICAgICAgcmVxdWVzdC5kb0RlZmF1bHRBY3Rpb24oKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtOTczLDIxICsxMDk0LDI0IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBv
bGljeUYKIAogICAgIC8vIEZJWE1FOiBQcm92aWRlIGEgc3BlY2lmaWMgZGVsZWdhdGUgZm9yIGRp
c3BsYXkgY2FwdHVyZS4KICAgICBpZiAoIXJlcXVlc3QucmVxdWlyZXNEaXNwbGF5Q2FwdHVyZSgp
ICYmIHJlc3BvbmRzVG9SZXF1ZXN0TWVkaWFDYXB0dXJlQXV0aG9yaXphdGlvbikgewotICAgICAg
ICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyByZXF1ZXN0TWVkaWFD
YXB0dXJlQXV0aG9yaXphdGlvbjpkZXZpY2VzIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRs
ZXIuZ2V0KCldOworICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCkgcmVxdWVzdE1lZGlhQ2FwdHVyZUF1dGhvcml6YXRpb246ZGV2aWNl
cyBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIFVSTCByZXF1ZXN0RnJhbWVVUkwgeyBmcmFtZS51cmwoKSB9OwogICAg
IFVSTCBtYWluRnJhbWVVUkwgeyBmcmFtZS5wYWdlKCktPm1haW5GcmFtZSgpLT51cmwoKSB9Owog
Ci0gICAgW2RlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcmVxdWVzdFVz
ZXJNZWRpYUF1dGhvcml6YXRpb25Gb3JEZXZpY2VzOmRldmljZXMgdXJsOnJlcXVlc3RGcmFtZVVS
TCBtYWluRnJhbWVVUkw6bWFpbkZyYW1lVVJMIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRs
ZXIuZ2V0KCldOworICAgIFtkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmll
dy5nZXQoKS5nZXQoKSByZXF1ZXN0VXNlck1lZGlhQXV0aG9yaXphdGlvbkZvckRldmljZXM6ZGV2
aWNlcyB1cmw6cmVxdWVzdEZyYW1lVVJMIG1haW5GcmFtZVVSTDptYWluRnJhbWVVUkwgZGVjaXNp
b25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiAjZW5kaWYKIH0KIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6Y2hlY2tVc2VyTWVkaWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdlYlBh
Z2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4m
IHVzZXJNZWRpYU9yaWdpbiwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIFVz
ZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiByZXF1ZXN0KQogewotICAgIGF1dG8gZGVsZWdh
dGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKLSAgICBpZiAoIWRlbGVnYXRlIHx8
ICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0lzTWVkaWFDYXB0dXJlQXV0
aG9yaXplZEZvckZyYW1lRGVjaXNpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3SXNNZWRpYUNhcHR1cmVBdXRob3JpemVkRm9yRnJhbWVEZWNp
c2lvbkhhbmRsZXIpIHsKICAgICAgICAgcmVxdWVzdC5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwMDQsNyArMTEyOCw3IEBAIHZvaWQg
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1lZGkKICAgICAgICAgICAgIHByb3RlY3Rl
ZFJlcXVlc3QtPnNldFVzZXJNZWRpYUFjY2Vzc0luZm8oaW5jbHVkZVNlbnNpdGl2ZURldGFpbHMp
OwogICAgICAgICB9KTsKIAotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGluY2x1ZGVTZW5zaXRpdmVNZWRp
YURldmljZURldGFpbHM6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICAgICAgWyhpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCkgaW5jbHVkZVNlbnNpdGl2ZU1lZGlhRGV2aWNlRGV0YWlsczpkZWNpc2lv
bkhhbmRsZXIuZ2V0KCldOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMDIwLDMwICsx
MTQ0LDM2IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1lZGkKICAgICBV
UkwgcmVxdWVzdEZyYW1lVVJMIHsgZnJhbWUudXJsKCkgfTsKICAgICBVUkwgbWFpbkZyYW1lVVJM
IHsgbWFpbkZyYW1lLT51cmwoKSB9OwogCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBjaGVja1VzZXJNZWRpYVBl
cm1pc3Npb25Gb3JVUkw6cmVxdWVzdEZyYW1lVVJMIG1haW5GcmFtZVVSTDptYWluRnJhbWVVUkwg
ZnJhbWVJZGVudGlmaWVyOmZyYW1lLmZyYW1lSUQoKS50b1VJbnQ2NCgpIGRlY2lzaW9uSGFuZGxl
cjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNo
ZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvclVSTDpyZXF1ZXN0RnJhbWVVUkwgbWFpbkZyYW1lVVJM
Om1haW5GcmFtZVVSTCBmcmFtZUlkZW50aWZpZXI6ZnJhbWUuZnJhbWVJRCgpLnRvVUludDY0KCkg
ZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6Om1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKFdlYkNvcmU6Ok1lZGlh
UHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBzdGF0ZSkKIHsKLSAgICBXS1dlYlZpZXcgKndlYlZp
ZXcgPSBtX3VpRGVsZWdhdGUubV93ZWJWaWV3OworICAgIGlmICghbV91aURlbGVnYXRlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIHdlYlZpZXcgPSBtX3VpRGVsZWdhdGUtPm1fd2ViVmll
dzsKIAogICAgIFt3ZWJWaWV3IGRpZENoYW5nZVZhbHVlRm9yS2V5OkAibWVkaWFDYXB0dXJlU3Rh
dGUiXTsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQo
KTsKLSAgICBpZiAoIWRlbGVnYXRlIHx8ICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld01lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hhbmdlKQorICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFkZWxlZ2F0ZSB8fCAhbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TWVkaWFDYXB0dXJlU3RhdGVEaWRD
aGFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3OndlYlZpZXcgbWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2U6dG9X
S01lZGlhQ2FwdHVyZVN0YXRlKHN0YXRlKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6d2ViVmlldy5nZXQoKS5nZXQoKSBtZWRpYUNhcHR1cmVTdGF0
ZURpZENoYW5nZTp0b1dLTWVkaWFDYXB0dXJlU3RhdGUoc3RhdGUpXTsKIH0KIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJQ
YWdlUHJveHkqLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4s
IHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgdG90YWxCeXRlc05lZWRlZCwgRnVuY3Rp
b248dm9pZCAodW5zaWduZWQgbG9uZyBsb25nKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlV2ViQXBw
bGljYXRpb25DYWNoZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5DdXJyZW50UXVvdGFUb3RhbEJ5dGVz
TmVlZGVkKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihjdXJyZW50UXVvdGEpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVXZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFGb3JTZWN1
cml0eU9yaWdpbkN1cnJlbnRRdW90YVRvdGFsQnl0ZXNOZWVkZWQpIHsKICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoY3VycmVudFF1b3RhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVs
ZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFF1b3RhKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTA1Miw3ICsxMTgyLDcgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6cmVhY2hlZEFwcGxpYwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2Fs
bENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lk
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5T3JpZ2luOmN1cnJlbnRRdW90YTp0
b3RhbEJ5dGVzTmVlZGVkOmRlY2lzaW9uSGFuZGxlcjopKTsKICAgICBhdXRvIGFwaU9yaWdpbiA9
IEFQSTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShzZWN1cml0eU9yaWdpbik7CiAgICAgCi0gICAg
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
Lm1fd2ViVmlldyBkZWNpZGVXZWJBcHBsaWNhdGlvbkNhY2hlUXVvdGFGb3JTZWN1cml0eU9yaWdp
bjp3cmFwcGVyKGFwaU9yaWdpbi5nZXQoKSkgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSB0b3Rh
bEJ5dGVzTmVlZGVkOnRvdGFsQnl0ZXNOZWVkZWQgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0
cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tl
ciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgeworICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZv
clNlY3VyaXR5T3JpZ2luOndyYXBwZXIoYXBpT3JpZ2luLmdldCgpKSBjdXJyZW50UXVvdGE6Y3Vy
cmVudFF1b3RhIHRvdGFsQnl0ZXNOZWVkZWQ6dG90YWxCeXRlc05lZWRlZCBkZWNpc2lvbkhhbmRs
ZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0odW5zaWduZWQgbG9uZyBsb25nIG5l
d1F1b3RhKSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5D
YWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENv
bXBsZXRpb25IYW5kbGVyKCk7CkBAIC0xMDYyLDE2NSArMTE5MiwyMDAgQEAgdm9pZCBVSURlbGVn
YXRlOjpVSUNsaWVudDo6cmVhY2hlZEFwcGxpYwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpwcmludEZyYW1lKFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIHdlYkZyYW1lUHJveHks
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFt
X3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcigpOworCisgICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoKTsKIAogICAgIGF1
dG8gaGFuZGxlID0gQVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKHdlYkZyYW1lUHJveHkuZnJhbWVJ
RCgpKTsKLSAgICBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdQcmlu
dEZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3UHJpbnRGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAg
IGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxl
Z2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnByaW50RnJhbWU6Y29tcGxldGlvbkhhbmRs
ZXI6KSk7Ci0gICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcHJpbnRGcmFtZTp3cmFwcGVyKGhhbmRsZSkgY29t
cGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKCkgbXV0YWJs
ZSB7CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3
Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHByaW50RnJhbWU6d3JhcHBlciho
YW5kbGUpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUo
Y2hlY2tlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
ICgpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVy
SGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNo
ZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoKTsKICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICByZXR1cm47Ci0gICAgfSBl
bHNlIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1ByaW50RnJhbWUp
Ci0gICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcHJpbnRGcmFtZTp3cmFwcGVyKGhhbmRsZSldOworICAgIH0K
KworICAgIGlmIChtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdQcmludEZy
YW1lKQorICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBwcmludEZyYW1lOndyYXBwZXIo
aGFuZGxlKV07CiAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKIH0KIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6Y2xvc2UoV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAobV91aURlbGVnYXRl
Lm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDbG9zZSkgewotICAgICAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdDbG9zZSkgeworICAgICAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlLmdldCgpOwogICAgICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Q2xvc2U6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgICAgIFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Q2xvc2U6bV91aURlbGVnYXRlLT5tX3dl
YlZpZXcuZ2V0KCkuZ2V0KCldOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENsb3NlKQorICAgIGlmICgh
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2xvc2UpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtkZWxlZ2F0ZSB3
ZWJWaWV3RGlkQ2xvc2U6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgW2RlbGVnYXRlIHdl
YlZpZXdEaWRDbG9zZTptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAK
IHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmZ1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGluZShX
ZWJQYWdlUHJveHkqKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdGdWxsc2NyZWVuTWF5UmV0dXJuVG9JbmxpbmUpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdl
dCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRv
SW5saW5lOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lOm1fdWlE
ZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6ZGlkRW50ZXJGdWxsc2NyZWVuKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEVudGVyRnVsbHNjcmVlbikK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRFbnRlckZ1bGxzY3JlZW4pCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
LmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3RGlkRW50ZXJGdWxsc2NyZWVu
Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3RGlkRW50ZXJGdWxsc2NyZWVuOm1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkRXhp
dEZ1bGxzY3JlZW4oV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW4pCisgICAgaWYgKCFtX3VpRGVs
ZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW4pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
ZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW46bV91aURlbGVnYXRlLm1fd2Vi
Vmlld107CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdE
aWRFeGl0RnVsbHNjcmVlbjptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9
CiAgICAgCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpZiBIQVZFKEFQUF9MSU5LUykKIGJv
b2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3VsZEluY2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVs
ZW1lbnQoX1dLQWN0aXZhdGVkRWxlbWVudEluZm8gKmVsZW1lbnRJbmZvKQogewotICAgIGlmICgh
bV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91bGRJbmNsdWRlQXBwTGlu
a0FjdGlvbnNGb3JFbGVtZW50KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3U2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudCkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0
KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBb
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUu
bV93ZWJWaWV3IHNob3VsZEluY2x1ZGVBcHBMaW5rQWN0aW9uc0ZvckVsZW1lbnQ6ZWxlbWVudElu
Zm9dOworICAgIHJldHVybiBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBzaG91bGRJbmNsdWRlQXBw
TGlua0FjdGlvbnNGb3JFbGVtZW50OmVsZW1lbnRJbmZvXTsKIH0KICNlbmRpZgogCiBSZXRhaW5Q
dHI8TlNBcnJheT4gVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmFjdGlvbnNGb3JFbGVtZW50KF9XS0Fj
dGl2YXRlZEVsZW1lbnRJbmZvICplbGVtZW50SW5mbywgUmV0YWluUHRyPE5TQXJyYXk+IGRlZmF1
bHRBY3Rpb25zKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdBY3Rpb25zRm9yRWxlbWVudERlZmF1bHRBY3Rpb25zKQorICAgIGlmICghbV91aURlbGVn
YXRlKQorICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7CisKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0FjdGlvbnNGb3JFbGVtZW50RGVmYXVsdEFj
dGlvbnMpCiAgICAgICAgIHJldHVybiBkZWZhdWx0QWN0aW9uczsKIAotICAgIGF1dG8gZGVsZWdh
dGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAg
ICAgIHJldHVybiBkZWZhdWx0QWN0aW9uczsKIAotICAgIHJldHVybiBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGFjdGlv
bnNGb3JFbGVtZW50OmVsZW1lbnRJbmZvIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rpb25zLmdl
dCgpXTsKKyAgICByZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dl
YlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgYWN0aW9uc0ZvckVsZW1l
bnQ6ZWxlbWVudEluZm8gZGVmYXVsdEFjdGlvbnM6ZGVmYXVsdEFjdGlvbnMuZ2V0KCldOwogfQog
CiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWROb3RIYW5kbGVUYXBBc0NsaWNrKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBwb2ludCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTm90SGFuZGxlVGFwQXNDbGlja0F0UG9pbnQpCisgICAg
aWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTm90SGFuZGxlVGFwQXNDbGlja0F0UG9p
bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmll
dzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGRpZE5vdEhhbmRsZVRhcEFzQ2xpY2tBdFBvaW50OnBv
aW50XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0
ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZGlkTm90SGFu
ZGxlVGFwQXNDbGlja0F0UG9pbnQ6cG9pbnRdOwogfQogCiBVSVZpZXdDb250cm9sbGVyICpVSURl
bGVnYXRlOjpVSUNsaWVudDo6cHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKCkKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy5wcmVzZW50aW5nVmlld0NvbnRyb2xsZXJG
b3JXZWJWaWV3KQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy5wcmVzZW50aW5n
Vmlld0NvbnRyb2xsZXJGb3JXZWJWaWV3KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIFtzdGF0aWNfY2Fz
dDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfcHJlc2VudGluZ1ZpZXdDb250
cm9sbGVyRm9yV2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICByZXR1cm4gW3N0
YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF9wcmVzZW50aW5n
Vmlld0NvbnRyb2xsZXJGb3JXZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdl
dCgpXTsKIH0KIAogI2VuZGlmCiAKIE5TRGljdGlvbmFyeSAqVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OmRhdGFEZXRlY3Rpb25Db250ZXh0KCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVn
YXRlTWV0aG9kcy5kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXcpCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLmRhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldykKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihk
ZWxlZ2F0ZSkgX2RhdGFEZXRlY3Rpb25Db250ZXh0Rm9yV2ViVmlldzptX3VpRGVsZWdhdGUubV93
ZWJWaWV3XTsKKyAgICByZXR1cm4gW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
Pj4oZGVsZWdhdGUpIF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6bV91aURlbGVnYXRl
LT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiAjaWYgRU5BQkxFKFBPSU5URVJfTE9DSykK
IAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFBvaW50ZXJMb2NrKFdlYlBhZ2VQ
cm94eSogcGFnZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3UmVxdWVzdFBvaW50ZXJMb2NrICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZFJlcXVlc3RQb2ludGVyTG9ja0NvbXBsZXRpb25IYW5kbGVyKQorICAgIGlm
ICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RQb2ludGVyTG9jayAmJiAhbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUmVxdWVzdFBvaW50ZXJMb2NrQ29t
cGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Jl
cXVlc3RQb2ludGVyTG9jaykgewotICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0
ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2s6bV91aURlbGVn
YXRlLm1fd2ViVmlld107CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1JlcXVlc3RQb2ludGVyTG9jaykgeworICAgICAgICBbc3RhdGljX2Nhc3Q8aWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2s6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6
Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXdEaWRSZXF1ZXN0UG9pbnRl
ckxvY2s6Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3RGlkUmVxdWVzdFBvaW50ZXJMb2NrOm1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXcgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVj
a2VyID0gV1RGTW92ZShjaGVja2VyKSwgcGFnZSA9IG1ha2VSZWZQdHIocGFnZSldIChCT09MIGFs
bG93KSB7CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdh
dGUpIF93ZWJWaWV3RGlkUmVxdWVzdFBvaW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlciksIHBhZ2UgPSBtYWtlUmVmUHRyKHBhZ2UpXSAoQk9PTCBhbGxvdykgewog
ICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFu
ZGxlcigpOwpAQCAtMTIzNCw0MSArMTM5OSw1MCBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50
OjpyZXF1ZXN0UG9pbnRlCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZExvc2VQb2lu
dGVyTG9jayhXZWJQYWdlUHJveHkqKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEaWRMb3NlUG9pbnRlckxvY2spCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGlkTG9zZVBvaW50ZXJMb2NrKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXdEaWRMb3NlUG9pbnRlckxvY2s6bV91aURl
bGVnYXRlLm1fd2ViVmlld107CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3RGlkTG9zZVBvaW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogI2VuZGlmCiAgICAgCiB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpkaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZygpCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFNob3dTYWZlQnJvd3NpbmdX
YXJuaW5nKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFNob3dTYWZlQnJv
d3NpbmdXYXJuaW5nKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0
ZSkgX3dlYlZpZXdEaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZzptX3VpRGVsZWdhdGUubV93ZWJW
aWV3XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0
ZSkgX3dlYlZpZXdEaWRTaG93U2FmZUJyb3dzaW5nV2FybmluZzptX3VpRGVsZWdhdGUtPm1fd2Vi
Vmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNvbmZp
cm1QREZPcGVuaW5nKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpVUkwmIGZpbGVVUkws
IEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld1Nob3VsZEFsbG93UERGQXRVUkxUb09wZW5Gcm9tRnJhbWVDb21wbGV0
aW9uSGFuZGxlcikKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKHRydWUpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdTaG91bGRBbGxvd1BERkF0VVJMVG9PcGVuRnJvbUZyYW1lQ29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKIAogICAgIGF1
dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0
ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnNob3VsZEFsbG93UERGQXRVUkw6dG9PcGVuRnJv
bUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3
IHNob3VsZEFsbG93UERGQXRVUkw6ZmlsZVVSTCB0b09wZW5Gcm9tRnJhbWU6d3JhcHBlcihBUEk6
OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11
dGFibGUgeworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVn
YXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBzaG91bGRB
bGxvd1BERkF0VVJMOmZpbGVVUkwgdG9PcGVuRnJvbUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUlu
Zm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6
bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsK
ICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhh
bmRsZXIoKTsKQEAgLTEyOTQsMTkgKzE0NjgsMjIgQEAgc3RhdGljIFdlYkF1dGhlbnRpY2F0aW9u
UGFuZWxSZXN1bHQgd2ViQQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5XZWJBdXRo
ZW50aWNhdGlvblBhbmVsKFdlYlBhZ2VQcm94eSYgcGFnZSwgQVBJOjpXZWJBdXRoZW50aWNhdGlv
blBhbmVsJiBwYW5lbCwgV2ViRnJhbWVQcm94eSYsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8s
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld1J1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWxJbml0aWF0ZWRCeUZyYW1lQ29t
cGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxh
YmxlKTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
UnVuV2ViQXV0aGVudGljYXRpb25QYW5lbEluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxl
cikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVz
dWx0OjpVbmF2YWlsYWJsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKSB7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6
OlVuYXZhaWxhYmxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gY2hlY2tl
ciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwg
QHNlbGVjdG9yKF93ZWJWaWV3OnJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6aW5pdGlhdGVkQnlG
cmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
PilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bldlYkF1dGhlbnRp
Y2F0aW9uUGFuZWw6d3JhcHBlcihwYW5lbCkgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6
RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25I
YW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChfV0tXZWJBdXRoZW50aWNh
dGlvblBhbmVsUmVzdWx0IHJlc3VsdCkgbXV0YWJsZSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRl
UHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCku
Z2V0KCkgcnVuV2ViQXV0aGVudGljYXRpb25QYW5lbDp3cmFwcGVyKHBhbmVsKSBpbml0aWF0ZWRC
eUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyks
ICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2Vy
KV0gKF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQgcmVzdWx0KSBtdXRhYmxlIHsKICAg
ICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRs
ZXIoKTsKQEAgLTEzMTgsMzEgKzE0OTUsNDIgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6
cnVuV2ViQXV0aGVudAogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoYXNWaWRlb0luUGlj
dHVyZUluUGljdHVyZURpZENoYW5nZShXZWJQYWdlUHJveHkqLCBib29sIGhhc1ZpZGVvSW5QaWN0
dXJlSW5QaWN0dXJlKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdIYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZSkKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdIYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5n
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkg
X3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBoYXNWaWRlb0luUGljdHVyZUluUGljdHVy
ZURpZENoYW5nZTpoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZV07CisgICAgW3N0YXRpY19jYXN0
PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlRGlkQ2hh
bmdlOmhhc1ZpZGVvSW5QaWN0dXJlSW5QaWN0dXJlXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6aW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBuZXdTaXplKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdJbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkKQorICAgIGlmICghbV91
aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0ltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
LmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3Vp
RGVsZWdhdGUubV93ZWJWaWV3IGltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQ6bmV3U2l6
ZV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUp
IF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGltYWdlT3JNZWRp
YURvY3VtZW50U2l6ZUNoYW5nZWQ6bmV3U2l6ZV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRlY2lkZVBvbGljeUZvclNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3Qo
V2ViS2l0OjpXZWJQYWdlUHJveHkmIHBhZ2UsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAg
ICBhdXRvIGRlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkgeworICAgICAgICBwYWdl
LnJlcXVlc3RTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25CeURlZmF1bHRBY3Rpb24ob3JpZ2lu
LnNlY3VyaXR5T3JpZ2luKCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gZGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRl
KSB7CiAgICAgICAgIHBhZ2UucmVxdWVzdFNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvbkJ5RGVm
YXVsdEFjdGlvbihvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogICAgICAgICByZXR1cm47CkBAIC0xMzU0LDcgKzE1NDIsNyBAQCB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGCiAgICAgfQogCiAgICAgYXV0byBjaGVja2Vy
ID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLCBAc2VsZWN0
b3IoX3dlYlZpZXc6cmVxdWVzdFNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvbkZvck9yaWdpbjpk
ZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgW2RlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5t
X3dlYlZpZXcgcmVxdWVzdFNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvbkZvck9yaWdpbjp3cmFw
cGVyKG9yaWdpbikgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRs
ZXIgPSBzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCB7IH0pLCBjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKV0gKEJPT0wgZ3JhbnRlZCkgbXV0YWJsZSB7CisgICAgW2RlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlcXVlc3RTcGVlY2hS
ZWNvZ25pdGlvblBlcm1pc3Npb25Gb3JPcmlnaW46d3JhcHBlcihvcmlnaW4pIGRlY2lzaW9uSGFu
ZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShjb21w
bGV0aW9uSGFuZGxlciwgeyB9KSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIGdy
YW50ZWQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJI
YXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRp
ZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417209</attachid>
            <date>2021-01-07 13:53:52 -0800</date>
            <delta_ts>2021-01-07 15:10:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220394-20210107135351.patch</filename>
            <type>text/plain</type>
            <size>154999</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcxMjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU5MDcwN2JjNmFkYjhhNTdl
NzllYjI2YTVjM2U5YWE0MjMyNWM4YTIuLmM0ZDViNTFlNDBiMzA3M2EzN2Y2OGU5MTI3YWFmNjNk
ZTIzNGIzMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM4IEBACisyMDIxLTAxLTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIHNtYXJ0
IHBvaW50ZXJzIGluIFVJRGVsZWdhdGUgYW5kIE5hdmlnYXRpb25TdGF0ZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwMzk0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS83MjQ5NjM3ND4KKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4K
KworICAgICAgICBVSURlbGVnYXRlIGFuZCBOYXZpZ2F0aW9uU3RhdGUgYXJlIG93bmVkIGJ5IFdL
V2ViVmlldywgYnV0IHRoZSBjbGllbnRzIGFyZSBvd25lZCBieSBXZWJQYWdlUHJveHksCisgICAg
ICAgIHdoaWNoIGlzIGluZGVwZW5kZW50bHkgcmVmZXJlbmNlIGNvdW50ZWQgYW5kIGNhbiBoYXZl
IGEgZGlmZmVyZW50IGxpZmV0aW1lLgorICAgICAgICBUaGVyZSBzaG91bGQgYmUgbm8gcmF3IEMr
KyByZWZlcmVuY2VzIGJldHdlZW4gdGhlIHR3bywgc28gdXNlIFdlYWtQdHIgaW5zdGVhZC4KKyAg
ICAgICAgQWxzbywgdXNlIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gaW5zdGVhZCBvZiBhIHJhdyBD
KysgV0tXZWJWaWV3KgorCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW06CisgICAg
ICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvblN0YXRlKToKKyAgICAgICAg
KFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjp+TmF2aWdhdGlvblN0YXRlKToKKyAgICAgICAgKFdl
YktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQpOgor
ICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Om5hdmlnYXRpb25HZXN0dXJlRGlkRW5k
KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjp3aWxsUmVjb3JkTmF2aWdhdGlv
blNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpuYXZpZ2F0aW9u
R2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25T
dGF0ZTo6ZGlkUmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tMb29rRG9jdW1lbnQpOgorICAgICAgICAo
V2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6OmRpZEZpcnN0UGFpbnQpOgorICAgICAgICAoV2ViS2l0
OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Ok5hdmlnYXRpb25DbGllbnQpOgor
ICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndlYkdM
TG9hZFBvbGljeSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2
aWdhdGlvbkNsaWVudDo6cmVzb2x2ZVdlYkdMTG9hZFBvbGljeSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0Zv
cndhcmRMaXN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50Ojp3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25BY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25D
bGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJLaXQ6Ok5h
dmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
blJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJLaXQ6
Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3
aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAg
ICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENhbmNlbENs
aWVudFJlZGlyZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uQ2xpZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uV2l0aEVycm9yKToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWlsUHJv
dmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENvbW1pdE5hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZENvbW1pdExv
YWRGb3JGcmFtZSk6CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hOYXZpZ2F0aW9uKToKKyAgICAg
ICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5pc2hM
b2FkRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmRpZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yKToKKyAgICAgICAgKFdlYktpdDo6
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWlsTG9hZFdpdGhFcnJvckZv
ckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpyZW5kZXJpbmdQcm9ncmVzc0RpZENoYW5nZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6c2hv
dWxkQnlwYXNzQ29udGVudE1vZGVTYWZlZ3VhcmRzIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OnNob3VsZEFsbG93TGVnYWN5VExTKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWROZWdvdGlhdGVNb2Rlcm5UTFMpOgorICAg
ICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NE
aWRUZXJtaW5hdGUpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OnByb2Nlc3NEaWRCZWNvbWVSZXNwb25zaXZlKToKKyAgICAgICAgKFdlYktpdDo6
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpwcm9jZXNzRGlkQmVjb21lVW5yZXNw
b25zaXZlKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50Ojp3ZWJDcnlwdG9NYXN0ZXJLZXkpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3Rh
dGU6Ok5hdmlnYXRpb25DbGllbnQ6Om5hdmlnYXRpb25BY3Rpb25EaWRCZWNvbWVEb3dubG9hZCk6
CisgICAgICAgIChXZWJLaXQ6Ok5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6bmF2
aWdhdGlvblJlc3BvbnNlRGlkQmVjb21lRG93bmxvYWQpOgorICAgICAgICAoV2ViS2l0OjpOYXZp
Z2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmNvbnRleHRNZW51RGlkQ3JlYXRlRG93bmxv
YWQpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OmRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUpOgorICAgICAgICAo
V2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaExvYWRG
b3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdh
dGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRp
b25Mb2FkKToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50
OjpIaXN0b3J5Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpIaXN0
b3J5Q2xpZW50OjpkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChXZWJL
aXQ6Ok5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkUGVyZm9ybUNsaWVudFJlZGly
ZWN0KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50Ojpk
aWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3Rh
dGU6Okhpc3RvcnlDbGllbnQ6OmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgICogVUlQ
cm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvVUlE
ZWxlZ2F0ZS5tbToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6Q29udGV4dE1lbnVDbGll
bnQ6OkNvbnRleHRNZW51Q2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6Q29u
dGV4dE1lbnVDbGllbnQ6Om1lbnVGcm9tUHJvcG9zZWRNZW51KToKKyAgICAgICAgKFdlYktpdDo6
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OlVJQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVn
YXRlOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0KToKKyAgICAgICAgKFdlYktpdDo6VUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKToKKyAgICAgICAgKFdlYktp
dDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQpOgorICAgICAgICAo
V2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NDb25maXJt
KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUZv
ckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVn
YXRlOjpVSUNsaWVudDo6ZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJh
bmNlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNhblJ1bkJlZm9y
ZVVubG9hZENvbmZpcm1QYW5lbCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwpOgorICAgICAgICAoV2ViS2l0
OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnRha2VGb2N1cyk6CisgICAgICAgIChXZWJL
aXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoYW5kbGVBdXRvcGxheUV2ZW50KToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNhblJ1bk1vZGFsIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bk1vZGFsKToKKyAgICAgICAgKFdl
YktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmhlYWRlckhlaWdodCk6CisgICAgICAgIChXZWJL
aXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpmb290ZXJIZWlnaHQpOgorICAgICAgICAoV2ViS2l0
OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZHJhd0hlYWRlcik6CisgICAgICAgIChXZWJLaXQ6OlVJ
RGVsZWdhdGU6OlVJQ2xpZW50OjpkcmF3Rm9vdGVyKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OnBhZ2VEaWRTY3JvbGwpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVn
YXRlOjpVSUNsaWVudDo6Zm9jdXMpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNs
aWVudDo6dW5mb2N1cyk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp1
bmF2YWlsYWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVn
YXRlOjpVSUNsaWVudDo6ZGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGltaXRXaGlsZUluRm9y
ZWdyb3VuZCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWROb3RI
YW5kbGVXaGVlbEV2ZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnNldElzUmVzaXphYmxlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnNldFdpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OndpbmRvd0ZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6Om1v
dXNlRGlkTW92ZU92ZXJFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OnRvb2xiYXJzQXJlVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpkaWRDbGlja0F1dG9GaWxsQnV0dG9uKToKKyAgICAgICAgKFdlYktpdDo6VUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnNob3dQYWdlKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OnNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIpOgorICAgICAgICAo
V2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVu
dDo6Y29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKFdlYktpdDo6VUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEF0dGFjaExvY2FsSW5zcGVjdG9yKToKKyAgICAgICAgKFdl
YktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OndpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKToKKyAg
ICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6CisgICAg
ICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRBbGxvd0RldmljZU9yaWVu
dGF0aW9uQW5kTW90aW9uQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlD
bGllbnQ6OmRpZENoYW5nZUZvbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNlck1lZGlh
UGVybWlzc2lvbkZvck9yaWdpbik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xp
ZW50OjptZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZSk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKToKKyAg
ICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByaW50RnJhbWUpOgorICAgICAg
ICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2xvc2UpOgorICAgICAgICAoV2ViS2l0
OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKToKKyAg
ICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEVudGVyRnVsbHNjcmVlbik6
CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRFeGl0RnVsbHNjcmVl
bik6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRJbmNsdWRl
QXBwTGlua0FjdGlvbnNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6OmFjdGlvbnNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmRpZE5vdEhhbmRsZVRhcEFzQ2xpY2spOgorICAgICAgICAoV2ViS2l0OjpV
SURlbGVnYXRlOjpVSUNsaWVudDo6cHJlc2VudGluZ1ZpZXdDb250cm9sbGVyKToKKyAgICAgICAg
KFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRhdGFEZXRlY3Rpb25Db250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RQb2ludGVyTG9jayk6
CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRMb3NlUG9pbnRlckxv
Y2spOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkU2hvd1NhZmVC
cm93c2luZ1dhcm5pbmcpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVudDo6
Y29uZmlybVBERk9wZW5pbmcpOgorICAgICAgICAoV2ViS2l0OjpVSURlbGVnYXRlOjpVSUNsaWVu
dDo6cnVuV2ViQXV0aGVudGljYXRpb25QYW5lbCk6CisgICAgICAgIChXZWJLaXQ6OlVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZURpZENoYW5nZSk6CisgICAg
ICAgIChXZWJLaXQ6OlVJRGVsZWdhdGU6OlVJQ2xpZW50OjppbWFnZU9yTWVkaWFEb2N1bWVudFNp
emVDaGFuZ2VkKToKKyAgICAgICAgKFdlYktpdDo6VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRlY2lk
ZVBvbGljeUZvclNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorCiAyMDIxLTAx
LTA2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgVXNlIHNlbmRXaXRoQXN5bmNSZXBseSBpbnN0ZWFkIG9mIGlPUy1zcGVjaWZpYyBHZW5lcmlj
Q2FsbGJhY2tzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZp
Z2F0aW9uU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5oCmluZGV4IDk2NzgzN2FmZTE0YmQ4MzU0YzU2ZDZiZWZlNWQyOTEzNzZhYjg3YTcuLmYz
ZDdlOTA0NzRhOGRlOWE5NTYwZmYyOWNiNmQxNGM3MTgzZmFiMjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW1wb3J0IDx3dGYvUnVuTG9vcC5oPgogI2ltcG9ydCA8d3RmL1VuaXF1ZVJlZi5oPgogI2lt
cG9ydCA8d3RmL1dlYWtPYmpDUHRyLmg+CisjaW1wb3J0IDx3dGYvV2Vha1B0ci5oPgogCiBAY2xh
c3MgV0tXZWJWaWV3OwogQHByb3RvY29sIFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZTsKQEAgLTUz
LDcgKzU0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0cnVjdCBXZWJOYXZpZ2F0aW9uRGF0
YVN0b3JlOwogCi1jbGFzcyBOYXZpZ2F0aW9uU3RhdGUgZmluYWwgOiBwcml2YXRlIFBhZ2VMb2Fk
U3RhdGU6Ok9ic2VydmVyIHsKK2NsYXNzIE5hdmlnYXRpb25TdGF0ZSBmaW5hbCA6IHByaXZhdGUg
UGFnZUxvYWRTdGF0ZTo6T2JzZXJ2ZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxOYXZpZ2F0aW9u
U3RhdGU+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBleHBs
aWNpdCBOYXZpZ2F0aW9uU3RhdGUoV0tXZWJWaWV3ICopOwpAQCAtMTUwLDcgKzE1MSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZChX
ZWJQYWdlUHJveHkmLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LCBjb25zdCBTdHJpbmcmLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpPiYmKSBvdmVy
cmlkZTsKICNlbmRpZgogCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZSYgbV9uYXZpZ2F0aW9uU3Rh
dGU7CisgICAgICAgIFdlYWtQdHI8TmF2aWdhdGlvblN0YXRlPiBtX25hdmlnYXRpb25TdGF0ZTsK
ICAgICB9OwogICAgIAogICAgIGNsYXNzIEhpc3RvcnlDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJ
OjpIaXN0b3J5Q2xpZW50IHsKQEAgLTE2NCw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAgICAgICB2
b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXZWJQYWdlUHJveHkmLCBjb25zdCBXVEY6OlN0
cmluZyYsIGNvbnN0IFdURjo6U3RyaW5nJikgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgZGlkVXBk
YXRlSGlzdG9yeVRpdGxlKFdlYlBhZ2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiwgY29uc3Qg
V1RGOjpTdHJpbmcmKSBvdmVycmlkZTsKICAgICAgICAgCi0gICAgICAgIE5hdmlnYXRpb25TdGF0
ZSYgbV9uYXZpZ2F0aW9uU3RhdGU7CisgICAgICAgIFdlYWtQdHI8TmF2aWdhdGlvblN0YXRlPiBt
X25hdmlnYXRpb25TdGF0ZTsKICAgICB9OwogCiAgICAgLy8gUGFnZUxvYWRTdGF0ZTo6T2JzZXJ2
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25T
dGF0ZS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5t
bQppbmRleCBjZmQyMjMwYTUyOGZiOGVlNzA3ZTliZGQyMWQwN2QxMTdjODQzMTk1Li4zZmU5NmI1
Yzg1ZmQwMDk5NGI4MWI4NjQwZTQwYWQ5N2Y5N2NlZTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCkBAIC05NCw5ICs5NCw5IEBACiBu
YW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1zdGF0aWMgSGFz
aE1hcDxXZWJQYWdlUHJveHkqLCBOYXZpZ2F0aW9uU3RhdGUqPiYgbmF2aWdhdGlvblN0YXRlcygp
CitzdGF0aWMgSGFzaE1hcDxXZWJQYWdlUHJveHkqLCBXZWFrUHRyPE5hdmlnYXRpb25TdGF0ZT4+
JiBuYXZpZ2F0aW9uU3RhdGVzKCkKIHsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1h
cDxXZWJQYWdlUHJveHkqLCBOYXZpZ2F0aW9uU3RhdGUqPj4gbmF2aWdhdGlvblN0YXRlczsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxXZWJQYWdlUHJveHkqLCBXZWFrUHRyPE5h
dmlnYXRpb25TdGF0ZT4+PiBuYXZpZ2F0aW9uU3RhdGVzOwogCiAgICAgcmV0dXJuIG5hdmlnYXRp
b25TdGF0ZXM7CiB9CkBAIC0xMTIsNyArMTEyLDcgQEAgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0
aW9uU3RhdGUoV0tXZWJWaWV3ICp3ZWJWaWV3KQogICAgIEFTU0VSVChtX3dlYlZpZXctPl9wYWdl
KTsKICAgICBBU1NFUlQoIW5hdmlnYXRpb25TdGF0ZXMoKS5jb250YWlucyhtX3dlYlZpZXctPl9w
YWdlLmdldCgpKSk7CiAKLSAgICBuYXZpZ2F0aW9uU3RhdGVzKCkuYWRkKG1fd2ViVmlldy0+X3Bh
Z2UuZ2V0KCksIHRoaXMpOworICAgIG5hdmlnYXRpb25TdGF0ZXMoKS5hZGQobV93ZWJWaWV3LT5f
cGFnZS5nZXQoKSwgbWFrZVdlYWtQdHIoKnRoaXMpKTsKICAgICBtX3dlYlZpZXctPl9wYWdlLT5w
YWdlTG9hZFN0YXRlKCkuYWRkT2JzZXJ2ZXIoKnRoaXMpOwogfQogCkBAIC0zMTcsNyArMzE3LDcg
QEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OmRpZEZpcnN0UGFpbnQoKQogfQogCiBOYXZpZ2F0aW9u
U3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6Ok5hdmlnYXRpb25DbGllbnQoTmF2aWdhdGlvblN0YXRl
JiBuYXZpZ2F0aW9uU3RhdGUpCi0gICAgOiBtX25hdmlnYXRpb25TdGF0ZShuYXZpZ2F0aW9uU3Rh
dGUpCisgICAgOiBtX25hdmlnYXRpb25TdGF0ZShtYWtlV2Vha1B0cihuYXZpZ2F0aW9uU3RhdGUp
KQogewogfQogCkBAIC0zNDMsMTQgKzM0MywxNyBAQCBpbmxpbmUgV2ViQ29yZTo6V2ViR0xMb2Fk
UG9saWN5IHRvV2ViQ29yZVdlYkdMTG9hZFBvbGljeShfV0tXZWJHTExvYWRQb2xpY3kgcG9saQog
CiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2ViR0xMb2FkUG9saWN5
KFdlYlBhZ2VQcm94eSYsIGNvbnN0IFVSTCYgdXJsLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFdl
YkNvcmU6OldlYkdMTG9hZFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpIGNvbnN0CiB7Ci0g
ICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld1dlYkdMTG9hZFBvbGljeUZvclVSTCkgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUp
CisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXZWJHTExvYWRQb2xpY3k6OldlYkdM
QWxsb3dDcmVhdGlvbik7CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkdMTG9hZFBvbGljeUZvclVSTCkgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXZWJHTExvYWRQb2xpY3k6OldlYkdMQWxsb3dDcmVhdGlvbik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9
IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpOwogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzp3
ZWJHTExvYWRQb2xpY3lGb3JVUkw6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFsoaWQgPFdLTmF2
aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2
aWdhdGlvblN0YXRlLm1fd2ViVmlldyB3ZWJHTExvYWRQb2xpY3lGb3JVUkw6KE5TVVJMICopdXJs
IGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShfV0tXZWJH
TExvYWRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS0+bV93ZWJWaWV3IHdlYkdMTG9hZFBvbGljeUZvclVSTDooTlNVUkwgKil1cmwgZGVjaXNpb25I
YW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1dlYkdMTG9hZFBvbGlj
eSBwb2xpY3kpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRs
ZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXIt
PmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzYwLDE0ICszNjMsMTcgQEAgdm9pZCBO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OndlYkdMTG9hZFBvbGljeShXZWJQYWdl
UHJveHkmLCBjb25zdCBVUkwKIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OnJlc29sdmVXZWJHTExvYWRQb2xpY3koV2ViUGFnZVByb3h5JiwgY29uc3QgVVJMJiB1cmws
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQ29yZTo6V2ViR0xMb2FkUG9saWN5KT4mJiBjb21w
bGV0aW9uSGFuZGxlcikgY29uc3QKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVzb2x2ZVdlYkdMTG9hZFBvbGljeUZvclVS
TCkgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihXZWJHTExvYWRQb2xpY3k6OldlYkdMQWxsb3dDcmVhdGlvbik7CisKKyAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d1Jlc29sdmVXZWJHTExvYWRQb2xpY3lGb3JVUkwpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV2ViR0xMb2FkUG9saWN5OjpXZWJHTEFsbG93Q3JlYXRpb24pOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJlc29sdmVXZWJHTExv
YWRQb2xpY3lGb3JVUkw6ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFsoaWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLm1fd2ViVmlldyByZXNvbHZlV2ViR0xMb2FkUG9saWN5Rm9yVVJMOihOU1VSTCAqKXVy
bCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0oX1dLV2Vi
R0xMb2FkUG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fd2ViVmlldyByZXNvbHZlV2ViR0xMb2FkUG9saWN5Rm9yVVJMOihOU1VSTCAqKXVybCBk
ZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0oX1dLV2ViR0xM
b2FkUG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0
aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Y2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0zNzcsMTAgKzM4MywxMyBA
QCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6cmVzb2x2ZVdlYkdMTG9h
ZFBvbGljeShXZWJQYWdlUHJveHkmLCBjbwogCiBib29sIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkQ2hhbmdlQmFja0ZvcndhcmRMaXN0KFdlYlBhZ2VQcm94eSYsIFdlYkJh
Y2tGb3J3YXJkTGlzdEl0ZW0qIGFkZGVkLCBjb25zdCBWZWN0b3I8UmVmPFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0+PiYgcmVtb3ZlZCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkUmVt
b3ZlZCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkUmVt
b3ZlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdh
dGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAg
aWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzkw
LDIxICszOTksMjQgQEAgYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRp
ZENoYW5nZUJhY2tGb3J3YXJkTGlzdChXZWJQYWdlUHJveHkmLAogICAgICAgICAgICAgcmV0dXJu
IHdyYXBwZXIocmVtb3ZlZEl0ZW0uZ2V0KCkpOwogICAgICAgICB9KTsKICAgICB9Ci0gICAgWyhp
ZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZp
ZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGJhY2tGb3J3YXJkTGlzdEl0ZW1BZGRlZDp3
cmFwcGVyKGFkZGVkKSByZW1vdmVkOnJlbW92ZWRJdGVtcy5nZXQoKV07CisgICAgWyhpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBiYWNrRm9yd2FyZExpc3RJdGVtQWRkZWQ6d3JhcHBl
cihhZGRlZCkgcmVtb3ZlZDpyZW1vdmVkSXRlbXMuZ2V0KCldOwogICAgIHJldHVybiB0cnVlOwog
fQogI2VuZGlmCiAKIGJvb2wgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3aWxs
R29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oV2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSYgaXRlbSwgYm9vbCBpbkJhY2tGb3J3YXJkQ2FjaGUpCiB7Ci0gICAgaWYgKCFtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxHb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbUluQmFja0ZvcndhcmRDYWNoZSkKKyAgICBpZiAoIW1fbmF2aWdhdGlv
blN0YXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxHb1RvQmFja0Zvcndh
cmRMaXN0SXRlbUluQmFja0ZvcndhcmRDYWNoZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgWyhpZCA8V0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUubV93ZWJWaWV3IHdpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbTp3cmFwcGVyKGl0
ZW0pIGluUGFnZUNhY2hlOmluQmFja0ZvcndhcmRDYWNoZV07CisgICAgWyhpZCA8V0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUtPm1fd2ViVmlldyB3aWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW06d3JhcHBlcihp
dGVtKSBpblBhZ2VDYWNoZTppbkJhY2tGb3J3YXJkQ2FjaGVdOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC00NTksMTEgKzQ3MSwxMSBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlv
bkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJQYWdlUAogICAgIGlm
IChhdXRvKiBwb2xpY2llcyA9IHdlYlBhZ2VQcm94eS5jb25maWd1cmF0aW9uKCkuZGVmYXVsdFdl
YnNpdGVQb2xpY2llcygpKQogICAgICAgICBkZWZhdWx0V2Vic2l0ZVBvbGljaWVzID0gcG9saWNp
ZXMtPmNvcHkoKTsKIAotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uRGVjaXNp
b25IYW5kbGVyCi0gICAgICAgICYmICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJl
ZmVyZW5jZXNVc2VySW5mb0RlY2lzaW9uSGFuZGxlcgotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzRGVjaXNpb25IYW5kbGVyCi0gICAgICAgICYm
ICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNp
ZXMKLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblVzZXJJbmZvRGVjaXNp
b25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzKSB7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSB8
fCAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRsZXIKKyAgICAgICAg
JiYgIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5mb0Rl
Y2lzaW9uSGFuZGxlcgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldp
dGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbkRlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llcworICAgICAgICAmJiAh
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvblVzZXJJbmZvRGVjaXNpb25IYW5kbGVyV2Vic2l0
ZVBvbGljaWVzKSkgewogICAgICAgICBhdXRvIGNvbXBsZXRpb25IYW5kbGVyID0gW3dlYlBhZ2Ug
PSBtYWtlUmVmKHdlYlBhZ2VQcm94eSksIGxpc3RlbmVyID0gV1RGTW92ZShsaXN0ZW5lciksIG5h
dmlnYXRpb25BY3Rpb24sIGRlZmF1bHRXZWJzaXRlUG9saWNpZXNdIChib29sIGludGVyY2VwdGVk
TmF2aWdhdGlvbikgewogICAgICAgICAgICAgaWYgKGludGVyY2VwdGVkTmF2aWdhdGlvbikgewog
ICAgICAgICAgICAgICAgIGxpc3RlbmVyLT5pZ25vcmUoKTsKQEAgLTQ5OCwxNyArNTEwLDE3IEBA
IHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uKFdlYlBhZ2VQCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRl
bGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGRlbGVnYXRlSGFzV2VicGFnZVBy
ZWZlcmVuY2VzID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzRGVj
aXNpb25IYW5kbGVyCi0gICAgICAgIHx8IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQ
cmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyOwotICAgIGJvb2wgZGVsZWdhdGVIYXNX
ZWJzaXRlUG9saWNpZXMgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25EZWNpc2lvbkhhbmRs
ZXJXZWJzaXRlUG9saWNpZXMgfHwgbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdh
dGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9E
ZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9saWNpZXM7CisgICAgYm9vbCBkZWxlZ2F0ZUhhc1dlYnBh
Z2VQcmVmZXJlbmNlcyA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5j
ZXNEZWNpc2lvbkhhbmRsZXIKKyAgICAgICAgfHwgbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlv
bldpdGhQcmVmZXJlbmNlc1VzZXJJbmZvRGVjaXNpb25IYW5kbGVyOworICAgIGJvb2wgZGVsZWdh
dGVIYXNXZWJzaXRlUG9saWNpZXMgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uRGVjaXNp
b25IYW5kbGVyV2Vic2l0ZVBvbGljaWVzIHx8IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25V
c2VySW5mb0RlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llczsKIAogICAgIGF1dG8gc2VsZWN0
b3JGb3JDb21wbGV0aW9uSGFuZGxlckNoZWNrZXIgPSAoWyZdICgpIC0+IFNFTCB7CiAgICAgICAg
IGlmIChkZWxlZ2F0ZUhhc1dlYnBhZ2VQcmVmZXJlbmNlcykKLSAgICAgICAgICAgIHJldHVybiBt
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lk
ZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNEZWNpc2lvbkhhbmRsZXIg
PyBAc2VsZWN0b3Iod2ViVmlldzpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOnByZWZl
cmVuY2VzOmRlY2lzaW9uSGFuZGxlcjopIDogQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246cHJlZmVyZW5jZXM6dXNlckluZm86ZGVjaXNpb25IYW5kbGVy
Oik7CisgICAgICAgICAgICByZXR1cm4gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQ
cmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlciA/IEBzZWxlY3Rvcih3ZWJWaWV3OmRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246cHJlZmVyZW5jZXM6ZGVjaXNpb25IYW5kbGVyOikgOiBAc2Vs
ZWN0b3IoX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpwcmVmZXJlbmNl
czp1c2VySW5mbzpkZWNpc2lvbkhhbmRsZXI6KTsKICAgICAgICAgaWYgKGRlbGVnYXRlSGFzV2Vi
c2l0ZVBvbGljaWVzKQogICAgICAgICAgICAgcmV0dXJuIEBzZWxlY3Rvcihfd2ViVmlldzpkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOmRlY2lzaW9uSGFuZGxlcjopOwogICAgICAgICBy
ZXR1cm4gQHNlbGVjdG9yKHdlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjpk
ZWNpc2lvbkhhbmRsZXI6KTsKQEAgLTU4MSwzNiArNTkzLDM5IEBAIEFMTE9XX0RFUFJFQ0FURURf
REVDTEFSQVRJT05TX0VORAogICAgIH07CiAKICAgICBpZiAoZGVsZWdhdGVIYXNXZWJwYWdlUHJl
ZmVyZW5jZXMpIHsKLSAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQ
cmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcikKLSAgICAgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdh
dGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHByZWZlcmVuY2VzOndyYXBw
ZXIoZGVmYXVsdFdlYnNpdGVQb2xpY2llcykgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihX
VEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07
CisgICAgICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2Vz
RGVjaXNpb25IYW5kbGVyKQorICAgICAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFj
dGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIHByZWZlcmVuY2VzOndyYXBwZXIoZGVmYXVs
dFdlYnNpdGVQb2xpY2llcykgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRl
Y2lzaW9uSGFuZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2
aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgcHJl
ZmVyZW5jZXM6d3JhcHBlcihkZWZhdWx0V2Vic2l0ZVBvbGljaWVzKSB1c2VySW5mbzp1c2VySW5m
byA/IHN0YXRpY19jYXN0PGlkPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkg
OiBuaWwgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxl
cldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpKS5nZXQoKV07CisgICAgICAgICAgICBbKGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rp
b246d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSBwcmVmZXJlbmNlczp3cmFwcGVyKGRlZmF1bHRX
ZWJzaXRlUG9saWNpZXMpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQ8TlNTZWN1
cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbCBkZWNpc2lvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFdURk1vdmUoZGVjaXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2ll
cykpLmdldCgpXTsKICAgICB9IGVsc2UgaWYgKGRlbGVnYXRlSGFzV2Vic2l0ZVBvbGljaWVzKSB7
CiAgICAgICAgIGF1dG8gZGVjaXNpb25IYW5kbGVyID0gbWFrZUJsb2NrUHRyKFdURk1vdmUoZGVj
aXNpb25IYW5kbGVyV2l0aFByZWZlcmVuY2VzT3JQb2xpY2llcykpOwotICAgICAgICBpZiAobV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uVXNlckluZm9EZWNpc2lvbkhhbmRsZXJXZWJzaXRlUG9s
aWNpZXMpIHsKKyAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25Vc2VySW5m
b0RlY2lzaW9uSGFuZGxlcldlYnNpdGVQb2xpY2llcykgewogICAgICAgICAgICAgQUxMT1dfREVQ
UkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIo
bmF2aWdhdGlvbkFjdGlvbikgdXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNT
ZWN1cmVDb2Rpbmc+Pih1c2VySW5mby0+d3JhcHBlcigpKSA6IG5pbCBkZWNpc2lvbkhhbmRsZXI6
ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKKyAgICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRl
bGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLT5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5h
dmlnYXRpb25BY3Rpb24pIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2Vj
dXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwgZGVjaXNpb25IYW5kbGVyOmRl
Y2lzaW9uSGFuZGxlci5nZXQoKV07CiAgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xB
UkFUSU9OU19FTkQKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMTE9XX0RFUFJFQ0FU
RURfREVDTEFSQVRJT05TX0JFR0lOCi0gICAgICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxl
Z2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmln
YXRpb25BY3Rpb24pIGRlY2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOworICAg
ICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVs
ZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkZWNpZGVQb2xpY3lG
b3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgZGVjaXNpb25IYW5k
bGVyOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CiAgICAgICAgICAgICBBTExPV19ERVBSRUNBVEVE
X0RFQ0xBUkFUSU9OU19FTkQKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGF1dG8g
ZGVjaXNpb25IYW5kbGVyID0gW2RlY2lzaW9uSGFuZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNp
ZXMgPSBXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcldpdGhQcmVmZXJlbmNlc09yUG9saWNpZXMpXSAo
V0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5IGFjdGlvblBvbGljeSkgbXV0YWJsZSB7CiAgICAgICAg
ICAgICBkZWNpc2lvbkhhbmRsZXJXaXRoUHJlZmVyZW5jZXNPclBvbGljaWVzKGFjdGlvblBvbGlj
eSwgbmlsKTsKICAgICAgICAgfTsKLSAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0
cihXVEZNb3ZlKGRlY2lzaW9uSGFuZGxlcikpLmdldCgpXTsKKyAgICAgICAgW25hdmlnYXRpb25E
ZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbjp3cmFwcGVyKG5hdmlnYXRpb25BY3Rpb24pIGRlY2lzaW9uSGFu
ZGxlcjptYWtlQmxvY2tQdHIoV1RGTW92ZShkZWNpc2lvbkhhbmRsZXIpKS5nZXQoKV07CiAgICAg
fQogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6Y29udGVudFJ1
bGVMaXN0Tm90aWZpY2F0aW9uKFdlYlBhZ2VQcm94eSYsIFVSTCYmIHVybCwgQ29udGVudFJ1bGVM
aXN0UmVzdWx0cyYmIHJlc3VsdHMpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50aWZp
ZXJzTm90aWZpY2F0aW9ucwotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBl
cmZvcm1lZEFjdGlvbkZvclVSTCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzTm90aWZpY2F0
aW9ucworICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3Q29udGVudFJ1bGVMaXN0V2l0aElkZW50aWZpZXJQZXJmb3JtZWRBY3Rp
b25Gb3JVUkwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRl
ID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjMwLDE4ICs2NDUsMTggQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRp
b25DbGllbnQ6OmNvbnRlbnRSdWxlTGlzdE5vdGlmaWNhdGlvbihXZWJQYWdlUHJveHkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChub3RpZmljYXRpb25zICYmIG1fbmF2aWdhdGlvblN0YXRl
Lm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VVJMQ29udGVudFJ1bGVMaXN0SWRl
bnRpZmllcnNOb3RpZmljYXRpb25zKQotICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5t
X3dlYlZpZXcgVVJMOnVybCBjb250ZW50UnVsZUxpc3RJZGVudGlmaWVyczppZGVudGlmaWVycy5n
ZXQoKSBub3RpZmljYXRpb25zOm5vdGlmaWNhdGlvbnMuZ2V0KCldOworICAgIGlmIChub3RpZmlj
YXRpb25zICYmIG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1VSTENvbnRlbnRSdWxlTGlzdElkZW50aWZpZXJzTm90aWZpY2F0aW9ucykKKyAgICAg
ICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBVUkw6dXJsIGNvbnRlbnRSdWxl
TGlzdElkZW50aWZpZXJzOmlkZW50aWZpZXJzLmdldCgpIG5vdGlmaWNhdGlvbnM6bm90aWZpY2F0
aW9ucy5nZXQoKV07CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZvcm1l
ZEFjdGlvbkZvclVSTCkgeworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllclBlcmZv
cm1lZEFjdGlvbkZvclVSTCkgewogICAgICAgICBmb3IgKGF1dG8mJiBwYWlyIDogV1RGTW92ZShy
ZXN1bHRzLnJlc3VsdHMpKQotICAgICAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93
ZWJWaWV3IGNvbnRlbnRSdWxlTGlzdFdpdGhJZGVudGlmaWVyOnBhaXIuZmlyc3QgcGVyZm9ybWVk
QWN0aW9uOndyYXBwZXIoQVBJOjpDb250ZW50UnVsZUxpc3RBY3Rpb246OmNyZWF0ZShXVEZNb3Zl
KHBhaXIuc2Vjb25kKSkuZ2V0KCkpIGZvclVSTDp1cmxdOworICAgICAgICAgICAgWyhpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBjb250ZW50UnVsZUxpc3RXaXRoSWRlbnRpZmllcjpw
YWlyLmZpcnN0IHBlcmZvcm1lZEFjdGlvbjp3cmFwcGVyKEFQSTo6Q29udGVudFJ1bGVMaXN0QWN0
aW9uOjpjcmVhdGUoV1RGTW92ZShwYWlyLnNlY29uZCkpLmdldCgpKSBmb3JVUkw6dXJsXTsKICAg
ICB9CiB9CiAgICAgCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYgcGFnZSwgUmVmPEFQ
STo6TmF2aWdhdGlvblJlc3BvbnNlPiYmIG5hdmlnYXRpb25SZXNwb25zZSwgUmVmPFdlYkZyYW1l
UG9saWN5TGlzdGVuZXJQcm94eT4mJiBsaXN0ZW5lciwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKQog
ewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2VEZWNpc2lvbkhhbmRsZXIp
IHsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlIHx8ICFtX25hdmlnYXRpb25TdGF0ZS0+bV9u
YXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9u
UmVzcG9uc2VEZWNpc2lvbkhhbmRsZXIpIHsKICAgICAgICAgTlNVUkwgKnVybCA9IG5hdmlnYXRp
b25SZXNwb25zZS0+cmVzcG9uc2UoKS5uc1VSTFJlc3BvbnNlKCkuVVJMOwogICAgICAgICBpZiAo
W3VybCBpc0ZpbGVVUkxdKSB7CiAgICAgICAgICAgICBCT09MIGlzRGlyZWN0b3J5ID0gTk87CkBA
IC02NjEsMTIgKzY3NiwxMiBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBj
aGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
blJlc3BvbnNlOmRlY2lzaW9uSGFuZGxlcjopKTsKLSAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdl
YlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvck5hdmlnYXRp
b25SZXNwb25zZTp3cmFwcGVyKG5hdmlnYXRpb25SZXNwb25zZSkgZGVjaXNpb25IYW5kbGVyOm1h
a2VCbG9ja1B0cihbbG9jYWxMaXN0ZW5lciA9IFdURk1vdmUobGlzdGVuZXIpLCBjaGVja2VyID0g
V1RGTW92ZShjaGVja2VyKV0oV0tOYXZpZ2F0aW9uUmVzcG9uc2VQb2xpY3kgcmVzcG9uc2VQb2xp
Y3kpIHsKKyAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2U6d3JhcHBlcihuYXZp
Z2F0aW9uUmVzcG9uc2UpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2xvY2FsTGlzdGVu
ZXIgPSBXVEZNb3ZlKGxpc3RlbmVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKFdLTmF2
aWdhdGlvblJlc3BvbnNlUG9saWN5IHJlc3BvbnNlUG9saWN5KSB7CiAgICAgICAgIGlmIChjaGVj
a2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC02ODks
ODAgKzcwNCw5OCBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVj
aWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZwogCiB2b2lkIE5hdmlnYXRpb25T
dGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb24oV2Vi
UGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBBUEk6
Ok5hdmlnYXRpb24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBh
dXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5h
dmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNv
bWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgotICAgIGlmICht
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFN0
YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0aW9uVXNlckluZm8pCi0gICAgICAgIFsoaWQgPFdLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdh
dGlvblN0YXRlLm1fd2ViVmlldyBkaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVy
KG5hdmlnYXRpb24pIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJl
Q29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOwotICAgIGVsc2UgaWYgKG1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU3RhcnRQ
cm92aXNpb25hbE5hdmlnYXRpb24pCi0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmll
dzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRp
b246d3JhcHBlcihuYXZpZ2F0aW9uKV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxOYXZpZ2F0
aW9uVXNlckluZm8pCisgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4p
bmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcg
ZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB1c2VySW5m
bzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53
cmFwcGVyKCkpIDogbmlsXTsKKyAgICBlbHNlIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTmF2aWdhdGlv
bikKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRl
LT5tX3dlYlZpZXcgZGlkU3RhcnRQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0
aW9uKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbykKIHsK
LSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVn
YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydFByb3Zpc2lvbmFsTG9hZFdpdGhS
ZXF1ZXN0SW5GcmFtZSkKLSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93
ZWJWaWV3IGRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJl
cXVlc3QoSFRUUEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6
d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2Up
KV07CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0RpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lKQorICAg
ICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZFN0YXJ0UHJv
dmlzaW9uYWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlVcGRh
dGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1l
SW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKV07CiB9CiAKIHZvaWQgTmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24oV2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6Ok5hdmlnYXRp
b24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0KikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0
YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUmVjZWl2ZVNlcnZlclJl
ZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3Rh
dGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX25h
dmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1f
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5h
dmlnYXRpb24gaXMgbm90IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNv
bWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgogCi0gICAgW25h
dmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb246d3JhcHBlcihuYXZp
Z2F0aW9uKV07CisgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLT5tX3dlYlZpZXcgZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZp
Z2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbildOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJQYWdlUHJveHkm
IHBhZ2UsIGNvbnN0IFdURjo6U3RyaW5nJiB1cmxTdHJpbmcsIGRvdWJsZSBkZWxheSkKIHsKLSAg
ICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3V2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRl
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9u
RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7
CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIFVS
TCB1cmwoVVJMKCksIHVybFN0cmluZyk7CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dlYlZpZXc6bV9uYXZp
Z2F0aW9uU3RhdGUubV93ZWJWaWV3IHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDp1cmwg
ZGVsYXk6ZGVsYXldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQ
cml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+
bV93ZWJWaWV3IHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDp1cmwgZGVsYXk6ZGVsYXld
OwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6ZGlkUGVyZm9y
bUNsaWVudFJlZGlyZWN0KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpTdHJpbmcmIHNv
dXJjZVVSTFN0cmluZywgY29uc3QgV1RGOjpTdHJpbmcmIGRlc3RpbmF0aW9uVVJMU3RyaW5nKQog
ewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdEaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QpCisgICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9u
YXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Qp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0
aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFVSTCBzb3VyY2VVUkwoVVJMKCksIHNvdXJjZVVSTFN0cmluZyk7CiAgICAgVVJMIGRlc3RpbmF0
aW9uVVJMKFVSTCgpLCBkZXN0aW5hdGlvblVSTFN0cmluZyk7CiAKLSAgICBbc3RhdGljX2Nhc3Q8
aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkgX3dl
YlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZFBlcmZvcm1DbGllbnRSZWRpcmVj
dEZyb21VUkw6c291cmNlVVJMIHRvVVJMOmRlc3RpbmF0aW9uVVJMXTsKKyAgICBbc3RhdGljX2Nh
c3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZSkg
X3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkaWRQZXJmb3JtQ2xpZW50UmVk
aXJlY3RGcm9tVVJMOnNvdXJjZVVSTCB0b1VSTDpkZXN0aW5hdGlvblVSTF07CiB9CiAKIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDYW5jZWxDbGllbnRSZWRpcmVj
dChXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENhbmNlbENsaWVudFJlZGlyZWN0KQor
ICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlk
Q2FuY2VsQ2xpZW50UmVkaXJlY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdh
dGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0
KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9u
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlKSBfd2ViVmlld0RpZENhbmNlbENsaWVudFJl
ZGlyZWN0Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlld107CisgICAgW3N0YXRpY19jYXN0PGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUpIF93ZWJW
aWV3RGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3Q6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlld107
CiB9CiAKIHN0YXRpYyBSZXRhaW5QdHI8TlNFcnJvcj4gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlB
dHRlbXB0ZXIoV0tXZWJWaWV3ICp3ZWJWaWV3LCBjb25zdCBGcmFtZUluZm9EYXRhJiBmcmFtZUlu
Zm8sIE5TRXJyb3IgKm9yaWdpbmFsRXJyb3IpCkBAIC03ODEsMTYwICs4MTQsMTk5IEBAIHN0YXRp
YyBSZXRhaW5QdHI8TlNFcnJvcj4gY3JlYXRlRXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIoV0tX
ZWJWaWV3ICp3ZWJWaWV3LCBjCiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjpkaWRGYWlsUHJvdmlzaW9uYWxOYXZpZ2F0aW9uV2l0aEVycm9yKFdlYlBhZ2VQcm94eSYg
cGFnZSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgQVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0
aW9uLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvciwgQVBJOjpPYmplY3QqKQog
ewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZp
Z2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRl
bXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0
ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJyb3IpOworICAgIGF1dG8gZXJyb3JXaXRoUmVjb3Zl
cnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3LCBmcmFtZUluZm8sIGVycm9yKTsKIAogICAgIGlmIChmcmFtZUlu
Zm8uaXNNYWluRnJhbWUpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhh
dCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZv
ciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICAg
ICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkRmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbldpdGhFcnJvcikKLSAgICAgICAgICAgIFtu
YXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlk
RmFpbFByb3Zpc2lvbmFsTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pIHdpdGhFcnJvcjpl
cnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQoKV07CisgICAgICAgIGlmIChtX25hdmlnYXRp
b25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsUHJvdmlz
aW9uYWxOYXZpZ2F0aW9uV2l0aEVycm9yKQorICAgICAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0
ZSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkRmFpbFByb3Zpc2lvbmFs
TmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlci5nZXQoKV07CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZEZh
aWxQcm92aXNpb25hbExvYWRJblN1YmZyYW1lV2l0aEVycm9yKQotICAgICAgICAgICAgWyhpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IG5hdmlnYXRpb246bmlsIGRpZEZhaWxQcm92aXNp
b25hbExvYWRJblN1YmZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShXVEZNb3Zl
KGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVy
LmdldCgpXTsKKyAgICAgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25EaWRGYWlsUHJvdmlzaW9uYWxMb2FkSW5TdWJm
cmFtZVdpdGhFcnJvcikKKyAgICAgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJp
dmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXcgbmF2aWdhdGlvbjpuaWwgZGlkRmFpbFByb3Zpc2lvbmFsTG9hZEluU3ViZnJhbWU6d3Jh
cHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3
aXRoRXJyb3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOwogICAgIH0KIH0KIAog
dm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZhaWxQcm92aXNpb25h
bExvYWRXaXRoRXJyb3JGb3JGcmFtZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9y
LCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVn
YXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAg
aWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuYXZp
Z2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUu
Z2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhSZWNv
dmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywgZXJy
b3IpOworICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldp
dGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LCBmcmFtZUlu
Zm8sIGVycm9yKTsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoUmVxdWVzdEluRnJh
bWVXaXRoRXJyb3IpCi0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4p
bmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBk
aWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRU
UEJvZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihB
UEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSB3aXRoRXJy
b3I6ZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOworICAgIGlmIChtX25hdmlnYXRp
b25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsUHJvdmlz
aW9uYWxMb2FkV2l0aFJlcXVlc3RJbkZyYW1lV2l0aEVycm9yKQorICAgICAgICBbKGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoUmVxdWVz
dDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRhdGVI
VFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShm
cmFtZUluZm8pLCAmcGFnZSkpIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5n
ZXQoKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRD
b21taXROYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgQVBJOjpOYXZpZ2F0aW9uKiBuYXZp
Z2F0aW9uLCBBUEk6Ok9iamVjdCopCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBt
X25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25E
ZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhlcmUs
IGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2ggdGhl
IGJhY2svZm9yd2FyZCBjYWNoZS4KLSAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRDb21taXROYXZpZ2F0aW9uKQotICAgICAgICBb
bmF2aWdhdGlvbkRlbGVnYXRlIHdlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRp
ZENvbW1pdE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKV07CisgICAgaWYgKG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZENvbW1pdE5h
dmlnYXRpb24pCisgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS0+bV93ZWJWaWV3IGRpZENvbW1pdE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9u
KV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRDb21t
aXRMb2FkRm9yRnJhbWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJlc291
cmNlUmVxdWVzdCYmIHJlcXVlc3QsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8pCiB7Ci0gICAg
YXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5t
X25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ29tbWl0TG9hZFdpdGhSZXF1ZXN0SW5GcmFtZSkK
LSAgICAgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+Pihu
YXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2Vi
VmlldyBkaWRDb21taXRMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJv
ZHlVcGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6
OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKV07CisgICAgaWYg
KG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rp
ZENvbW1pdExvYWRXaXRoUmVxdWVzdEluRnJhbWUpCisgICAgICAgIFtzdGF0aWNfY2FzdDxpZCA8
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBf
d2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZENvbW1pdExvYWRXaXRoUmVx
dWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6RG9Ob3RVcGRh
dGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92
ZShmcmFtZUluZm8pLCAmcGFnZSkpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OmRpZEZpbmlzaERvY3VtZW50TG9hZChXZWJQYWdlUHJveHkmIHBhZ2UsIEFQ
STo6TmF2aWdhdGlvbiogbmF2aWdhdGlvbiwgQVBJOjpPYmplY3QqKQogewotICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdOYXZpZ2F0
aW9uRGlkRmluaXNoRG9jdW1lbnRMb2FkKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZEZpbmlzaERvY3VtZW50TG9hZCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmln
YXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRp
b25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uIGlzIG5vdCBudWxsIGhl
cmUsIGJ1dCBpdCdzIGN1cnJlbnRseSBudWxsIGZvciBzb21lIG5hdmlnYXRpb25zIHRocm91Z2gg
dGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0
aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzpt
X25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgbmF2aWdhdGlvbkRpZEZpbmlzaERvY3VtZW50TG9h
ZDp3cmFwcGVyKG5hdmlnYXRpb24pXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9u
YXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBuYXZpZ2F0aW9uRGlkRmluaXNoRG9jdW1lbnRMb2Fk
OndyYXBwZXIobmF2aWdhdGlvbildOwogfQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdh
dGlvbkNsaWVudDo6ZGlkRmluaXNoTmF2aWdhdGlvbihXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmln
YXRpb24qIG5hdmlnYXRpb24sIEFQSTo6T2JqZWN0KikKIHsKLSAgICBhdXRvIG5hdmlnYXRpb25E
ZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwor
ICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
bmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFzc2VydCB0aGF0IG5hdmlnYXRpb24gaXMgbm90
IG51bGwgaGVyZSwgYnV0IGl0J3MgY3VycmVudGx5IG51bGwgZm9yIHNvbWUgbmF2aWdhdGlvbnMg
dGhyb3VnaCB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgotICAgIGlmIChtX25hdmlnYXRpb25TdGF0
ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZpbmlzaE5hdmlnYXRpb24p
Ci0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5t
X3dlYlZpZXcgZGlkRmluaXNoTmF2aWdhdGlvbjp3cmFwcGVyKG5hdmlnYXRpb24pXTsKKyAgICBp
ZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGlkRmluaXNoTmF2aWdhdGlvbikKKyAgICAgICAgW25hdmlnYXRpb25EZWxlZ2F0ZSB3ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkRmluaXNoTmF2aWdhdGlvbjp3cmFwcGVy
KG5hdmlnYXRpb24pXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGll
bnQ6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8pCiB7Ci0g
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRl
LT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9hZFdpdGhSZXF1ZXN0SW5GcmFt
ZSkKLSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9u
RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZEZpbmlzaExv
YWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6
RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVh
dGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpXTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3Rh
dGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmluaXNoTG9hZFdpdGhS
ZXF1ZXN0SW5GcmFtZSkKKyAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
PiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmll
dyBkaWRGaW5pc2hMb2FkV2l0aFJlcXVlc3Q6cmVxdWVzdC5uc1VSTFJlcXVlc3QoSFRUUEJvZHlV
cGRhdGVQb2xpY3k6OkRvTm90VXBkYXRlSFRUUEJvZHkpIGluRnJhbWU6d3JhcHBlcihBUEk6OkZy
YW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKV07CiB9CiAKIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWlsTmF2aWdhdGlvbldpdGhF
cnJvcihXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IEZyYW1lSW5mb0RhdGEmIGZyYW1lSW5mbywg
QVBJOjpOYXZpZ2F0aW9uKiBuYXZpZ2F0aW9uLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JiBlcnJvciwgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewotICAgIGF1dG8gbmF2aWdhdGlvbkRl
bGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7Cisg
ICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJvcldpdGhS
ZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcsIGZyYW1lSW5mbywg
ZXJyb3IpOworICAgIGF1dG8gZXJyb3JXaXRoUmVjb3ZlcnlBdHRlbXB0ZXIgPSBjcmVhdGVFcnJv
cldpdGhSZWNvdmVyeUF0dGVtcHRlcihtX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3LCBmcmFt
ZUluZm8sIGVycm9yKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXNzZXJ0IHRoYXQgbmF2
aWdhdGlvbiBpcyBub3QgbnVsbCBoZXJlLCBidXQgaXQncyBjdXJyZW50bHkgbnVsbCBmb3Igc29t
ZSBuYXZpZ2F0aW9ucyB0aHJvdWdoIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCi0gICAgaWYgKG1f
bmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFp
bE5hdmlnYXRpb25XaXRoRXJyb3JVc2VySW5mbykKLSAgICAgICAgWyhpZCA8V0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9u
U3RhdGUubV93ZWJWaWV3IGRpZEZhaWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbikgd2l0
aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0ZW1wdGVyLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZv
ID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkg
OiBuaWxdOwotICAgIGVsc2UgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbE5hdmlnYXRpb25XaXRoRXJyb3IpCi0gICAgICAgIFtu
YXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlk
RmFpbE5hdmlnYXRpb246d3JhcHBlcihuYXZpZ2F0aW9uKSB3aXRoRXJyb3I6ZXJyb3JXaXRoUmVj
b3ZlcnlBdHRlbXB0ZXIuZ2V0KCldOworICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRGYWlsTmF2aWdhdGlvbldpdGhFcnJvclVz
ZXJJbmZvKQorICAgICAgICBbKGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+KW5hdmln
YXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGRpZEZh
aWxOYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbikgd2l0aEVycm9yOmVycm9yV2l0aFJlY292
ZXJ5QXR0ZW1wdGVyLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5T
U2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIGVsc2UgaWYg
KG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rp
ZEZhaWxOYXZpZ2F0aW9uV2l0aEVycm9yKQorICAgICAgICBbbmF2aWdhdGlvbkRlbGVnYXRlIHdl
YlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkaWRGYWlsTmF2aWdhdGlvbjp3cmFw
cGVyKG5hdmlnYXRpb24pIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlci5nZXQo
KV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGYWls
TG9hZFdpdGhFcnJvckZvckZyYW1lKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiYgcmVxdWVzdCwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3Is
IEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8pCiB7Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdh
dGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmln
YXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byBlcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0aFJlY292
ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldywgZnJhbWVJbmZvLCBlcnJv
cik7CisgICAgYXV0byBlcnJvcldpdGhSZWNvdmVyeUF0dGVtcHRlciA9IGNyZWF0ZUVycm9yV2l0
aFJlY292ZXJ5QXR0ZW1wdGVyKG1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcsIGZyYW1lSW5m
bywgZXJyb3IpOwogCi0gICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbExvYWRXaXRoUmVxdWVzdEluRnJhbWVXaXRoRXJyb3Ip
Ci0gICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRl
bGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRGYWlsTG9hZFdp
dGhSZXF1ZXN0OnJlcXVlc3QubnNVUkxSZXF1ZXN0KEhUVFBCb2R5VXBkYXRlUG9saWN5OjpEb05v
dFVwZGF0ZUhUVFBCb2R5KSBpbkZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNyZWF0ZShX
VEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgd2l0aEVycm9yOmVycm9yV2l0aFJlY292ZXJ5QXR0
ZW1wdGVyLmdldCgpXTsKKyAgICBpZiAobV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRmFpbExvYWRXaXRoUmVxdWVzdEluRnJhbWVXaXRoRXJy
b3IpCisgICAgICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlv
bkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkRmFpbExv
YWRXaXRoUmVxdWVzdDpyZXF1ZXN0Lm5zVVJMUmVxdWVzdChIVFRQQm9keVVwZGF0ZVBvbGljeTo6
RG9Ob3RVcGRhdGVIVFRQQm9keSkgaW5GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVh
dGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIHdpdGhFcnJvcjplcnJvcldpdGhSZWNvdmVy
eUF0dGVtcHRlci5nZXQoKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9u
Q2xpZW50OjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYsIEFQSTo6TmF2
aWdhdGlvbiogbmF2aWdhdGlvbiwgU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUgbmF2aWdhdGlv
blR5cGUsIEFQSTo6T2JqZWN0KikKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2
aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3TmF2aWdhdGlvbkRpZFNhbWVEb2N1bWVudE5h
dmlnYXRpb24pCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmln
YXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld05hdmlnYXRpb25EaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9
IG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IW5hdmlnYXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhc3NlcnQgdGhhdCBuYXZpZ2F0aW9uSUQgaXMgbm90IHplcm8gaGVyZSwgYnV0IGl0
J3MgY3VycmVudGx5IHplcm8gZm9yIHNvbWUgbmF2aWdhdGlvbnMgdGhyb3VnaCB0aGUgYmFjay9m
b3J3YXJkIGNhY2hlLgogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0
ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlv
blN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbikgZGlkU2FtZURv
Y3VtZW50TmF2aWdhdGlvbjp0b1dLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUobmF2aWdhdGlv
blR5cGUpXTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fd2ViVmlldyBuYXZpZ2F0aW9uOndyYXBwZXIobmF2aWdhdGlvbikgZGlkU2FtZURvY3VtZW50
TmF2aWdhdGlvbjp0b1dLU2FtZURvY3VtZW50TmF2aWdhdGlvblR5cGUobmF2aWdhdGlvblR5cGUp
XTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnJlbmRlcmlu
Z1Byb2dyZXNzRGlkQ2hhbmdlKFdlYlBhZ2VQcm94eSYsIE9wdGlvblNldDxXZWJDb3JlOjpMYXlv
dXRNaWxlc3RvbmU+IGxheW91dE1pbGVzdG9uZXMpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlbmRlcmluZ1Byb2dyZXNz
RGlkQ2hhbmdlKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3UmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFuZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0
aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmln
YXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0
aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2Vi
VmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgcmVuZGVyaW5nUHJvZ3Jlc3NEaWRDaGFu
Z2U6cmVuZGVyaW5nUHJvZ3Jlc3NFdmVudHMobGF5b3V0TWlsZXN0b25lcyldOworICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVn
YXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IHJlbmRlcmlu
Z1Byb2dyZXNzRGlkQ2hhbmdlOnJlbmRlcmluZ1Byb2dyZXNzRXZlbnRzKGxheW91dE1pbGVzdG9u
ZXMpXTsKIH0KIAogYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnNob3Vs
ZEJ5cGFzc0NvbnRlbnRNb2RlU2FmZWd1YXJkcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldpdGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcgotICAg
ICAgICB8fCBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0RlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25XaXRoUHJlZmVyZW5jZXNVc2VySW5m
b0RlY2lzaW9uSGFuZGxlcjsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbldp
dGhQcmVmZXJlbmNlc0RlY2lzaW9uSGFuZGxlcgorICAgICAgICB8fCBtX25hdmlnYXRpb25TdGF0
ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uV2l0aFByZWZlcmVuY2VzVXNlckluZm9EZWNpc2lvbkhhbmRsZXI7CiB9CiAK
IHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoV2ViUGFnZVByb3h5JiwgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eSYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJlY2VpdmVBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZUNvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUpCiAgICAgICAgIHJldHVybiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5saXN0ZW5lcigp
LmNvbXBsZXRlQ2hhbGxlbmdlKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbjo6UmVqZWN0UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWUpOwogCi0gICAgYXV0byBuYXZp
Z2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUNvbXBsZXRpb25I
YW5kbGVyKQorICAgICAgICByZXR1cm4gYXV0aGVudGljYXRpb25DaGFsbGVuZ2UubGlzdGVuZXIo
KS5jb21wbGV0ZUNoYWxsZW5nZShXZWJLaXQ6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9z
aXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlKTsKKworICAgIGF1dG8gbmF2
aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRl
LmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gYXV0
aGVudGljYXRpb25DaGFsbGVuZ2UubGlzdGVuZXIoKS5jb21wbGV0ZUNoYWxsZW5nZShXZWJLaXQ6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFj
ZUFuZENvbnRpbnVlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2Fs
bENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJW
aWV3OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTpjb21wbGV0aW9uSGFuZGxlcjop
KTsKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZp
ZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOndyYXBwZXIoYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hhbGxlbmdlID0g
bWFrZVJlZihhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNr
ZXIpXShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdlRGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5T
VVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkgeworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZp
Z2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSB3ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlOndyYXBwZXIoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIGNvbXBsZXRpb25IYW5kbGVy
Om1ha2VCbG9ja1B0cihbY2hhbGxlbmdlID0gbWFrZVJlZihhdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShOU1VSTFNlc3Npb25BdXRoQ2hhbGxlbmdl
RGlzcG9zaXRpb24gZGlzcG9zaXRpb24sIE5TVVJMQ3JlZGVudGlhbCAqY3JlZGVudGlhbCkgewog
ICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFu
ZGxlcigpOwpAQCAtOTU5LDE3ICsxMDMxLDIwIEBAIHN0YXRpYyBib29sIHN5c3RlbUFsbG93c0xl
Z2FjeVRMU0ZvcihXZWJQYWdlUHJveHkmIHBhZ2UpCiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpO
YXZpZ2F0aW9uQ2xpZW50OjpzaG91bGRBbGxvd0xlZ2FjeVRMUyhXZWJQYWdlUHJveHkmIHBhZ2Us
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNob3VsZEFsbG93TGVnYWN5VExTCi0gICAgICAgICYm
ICFtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dEZXByZWNhdGVkVExTKQorICAgIGlmICgh
bV9uYXZpZ2F0aW9uU3RhdGUpCiAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihzeXN0
ZW1BbGxvd3NMZWdhY3lUTFNGb3IocGFnZSkpOwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdh
dGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dMZWdhY3lUTFMKKyAgICAgICAgJiYg
IW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0F1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dEZXByZWNhdGVkVExTKQorICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoc3lzdGVtQWxsb3dzTGVnYWN5VExTRm9yKHBhZ2UpKTsK
KworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoc3lzdGVtQWxsb3dzTGVnYWN5VExTRm9yKHBh
Z2UpKTsKIAotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dEZXByZWNhdGVk
VExTKSB7CisgICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU2hvdWxkQWxsb3dEZXByZWNhdGVk
VExTKSB7CiAgICAgICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNr
ZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OmF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOnNob3VsZEFsbG93RGVwcmVjYXRlZFRMUzopKTsKLSAgICAg
ICAgW25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1f
d2ViVmlldyBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTp3cmFwcGVyKGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKSBzaG91bGRBbGxvd0RlcHJlY2F0ZWRUTFM6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0g
V1RGTW92ZShjaGVja2VyKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0oQk9PTCBzaG91bGRBbGxvdykgbXV0YWJsZSB7CisgICAgICAgIFtuYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3IGF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlOndyYXBwZXIoYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpIHNob3Vs
ZEFsbG93RGVwcmVjYXRlZFRMUzptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNr
ZXIpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShCT09M
IHNob3VsZEFsbG93KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0
aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTk3OCw3ICsx
MDUzLDcgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnNob3VsZEFs
bG93TGVnYWN5VExTKFdlYlBhZ2VQcm94eSYgcGFnZSwKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUo
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6YXV0aGVudGljYXRp
b25DaGFsbGVuZ2U6c2hvdWxkQWxsb3dMZWdhY3lUTFM6KSk7Ci0gICAgW3N0YXRpY19jYXN0PGlk
IDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkp
IF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBhdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZTp3cmFwcGVyKGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKSBzaG91bGRBbGxvd0xlZ2FjeVRM
UzptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShCT09MIHNob3VsZEFsbG93KSBtdXRh
YmxlIHsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+
KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1f
d2ViVmlldyBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZTp3cmFwcGVyKGF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlKSBzaG91bGRBbGxvd0xlZ2FjeVRMUzptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShCT09MIHNob3VsZEFsbG93KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNv
bXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTk4OCwxNCArMTA2
MywxNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6c2hvdWxkQWxs
b3dMZWdhY3lUTFMoV2ViUGFnZVByb3h5JiBwYWdlLAogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6
TmF2aWdhdGlvbkNsaWVudDo6ZGlkTmVnb3RpYXRlTW9kZXJuVExTKGNvbnN0IFdlYkNvcmU6OkF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5lZ290aWF0ZU1v
ZGVyblRMUykKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTmVnb3RpYXRlTW9kZXJuVExTKQorICAgICAg
ICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0
YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRpb25EZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1f
bmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWROZWdvdGlhdGVNb2Rlcm5UTFM6bWFjKGNoYWxs
ZW5nZSldOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+
bV93ZWJWaWV3IGRpZE5lZ290aWF0ZU1vZGVyblRMUzptYWMoY2hhbGxlbmdlKV07CiB9CiAKIHN0
YXRpYyBfV0tQcm9jZXNzVGVybWluYXRpb25SZWFzb24gd2tQcm9jZXNzVGVybWluYXRpb25SZWFz
b24oUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uIHJlYXNvbikKQEAgLTEwMjIsNTggKzExMDAsNzAg
QEAgc3RhdGljIF9XS1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbiB3a1Byb2Nlc3NUZXJtaW5hdGlv
blJlYXNvbihQcm9jZXNzVGVybWluYXRpb24KIAogYm9vbCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmln
YXRpb25DbGllbnQ6OnByb2Nlc3NEaWRUZXJtaW5hdGUoV2ViUGFnZVByb3h5JiBwYWdlLCBQcm9j
ZXNzVGVybWluYXRpb25SZWFzb24gcmVhc29uKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3Rh
dGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0Rp
ZFRlcm1pbmF0ZQotICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFz
b24KLSAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZENyYXNoKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3Rh
dGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRU
ZXJtaW5hdGUKKyAgICAgICAgJiYgIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNv
bgorICAgICAgICAmJiAhbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZENyYXNoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdh
dGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobV9uYXZpZ2F0
aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJDb250ZW50UHJv
Y2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFzb24pIHsKLSAgICAgICAgW3N0YXRpY19jYXN0PGlkIDxX
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93
ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyB3ZWJDb250ZW50UHJvY2Vzc0RpZFRl
cm1pbmF0ZVdpdGhSZWFzb246d2tQcm9jZXNzVGVybWluYXRpb25SZWFzb24ocmVhc29uKV07Cisg
ICAgaWYgKG1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbikgeworICAgICAgICBb
c3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25E
ZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyB3ZWJD
b250ZW50UHJvY2Vzc0RpZFRlcm1pbmF0ZVdpdGhSZWFzb246d2tQcm9jZXNzVGVybWluYXRpb25S
ZWFzb24ocmVhc29uKV07CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIC8vIFdl
IHByZWZlciB3ZWJWaWV3V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGU6IG92ZXIgX3dlYlZp
ZXdXZWJQcm9jZXNzRGlkQ3Jhc2g6LgotICAgIGlmIChtX25hdmlnYXRpb25TdGF0ZS5tX25hdmln
YXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRl
KSB7Ci0gICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2ViVmlld1dlYkNvbnRlbnRQcm9jZXNz
RGlkVGVybWluYXRlOm1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlld107CisgICAgaWYgKG1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dlYkNvbnRl
bnRQcm9jZXNzRGlkVGVybWluYXRlKSB7CisgICAgICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUgd2Vi
Vmlld1dlYkNvbnRlbnRQcm9jZXNzRGlkVGVybWluYXRlOm1fbmF2aWdhdGlvblN0YXRlLT5tX3dl
YlZpZXddOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBBU1NFUlQobV9uYXZp
Z2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNz
RGlkQ3Jhc2gpOwotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2
YXRlPj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRDcmFz
aDptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXddOworICAgIEFTU0VSVChtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQ3Jh
c2gpOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4o
bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRDcmFzaDptX25h
dmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3XTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBO
YXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRCZWNvbWVSZXNwb25z
aXZlKFdlYlBhZ2VQcm94eSYgcGFnZSkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1f
bmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3V2ViUHJvY2Vzc0RpZEJlY29tZVJlc3Bv
bnNpdmUpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lUmVzcG9uc2l2ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRp
b25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJW
aWV3V2ViUHJvY2Vzc0RpZEJlY29tZVJlc3BvbnNpdmU6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJW
aWV3XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+
KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lUmVz
cG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJWaWV3XTsKIH0KIAogdm9pZCBOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OnByb2Nlc3NEaWRCZWNvbWVVbnJlc3BvbnNpdmUo
V2ViUGFnZVByb3h5JiBwYWdlKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZp
Z2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lVW5yZXNwb25z
aXZlKQorICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9u
RGVsZWdhdGVNZXRob2RzLndlYlZpZXdXZWJQcm9jZXNzRGlkQmVjb21lVW5yZXNwb25zaXZlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdh
dGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmlnYXRp
b25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJW
aWV3V2ViUHJvY2Vzc0RpZEJlY29tZVVucmVzcG9uc2l2ZTptX25hdmlnYXRpb25TdGF0ZS5tX3dl
YlZpZXddOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRl
Pj4obmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpKSBfd2ViVmlld1dlYlByb2Nlc3NEaWRCZWNvbWVV
bnJlc3BvbnNpdmU6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlld107CiB9CiAKIFJlZlB0cjxB
UEk6OkRhdGE+IE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6d2ViQ3J5cHRvTWFz
dGVyS2V5KFdlYlBhZ2VQcm94eSYpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViQ3J5cHRvTWFzdGVyS2V5Rm9yV2ViVmlldykgewor
ICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YkNyeXB0b01hc3RlcktleUZvcldlYlZpZXcpIHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1h
c3RlcktleTsKICAgICAgICAgaWYgKCFnZXREZWZhdWx0V2ViQ3J5cHRvTWFzdGVyS2V5KG1hc3Rl
cktleSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwODEsMTEgKzExNzEsMTEg
QEAgUmVmUHRyPEFQSTo6RGF0YT4gTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojp3
ZWJDcnlwdG9NYXN0ZXJLZXkoV2ViUGFnZVAKICAgICAgICAgcmV0dXJuIEFQSTo6RGF0YTo6Y3Jl
YXRlKG1hc3RlcktleS5kYXRhKCksIG1hc3RlcktleS5zaXplKCkpOwogICAgIH0KIAotICAgIGF1
dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVs
ZWdhdGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgTlNEYXRhICpkYXRhID0gW3N0
YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVs
ZWdhdGUuZ2V0KCkpIF93ZWJDcnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3Om1fbmF2aWdhdGlvblN0
YXRlLm1fd2ViVmlld107CisgICAgTlNEYXRhICpkYXRhID0gW3N0YXRpY19jYXN0PGlkIDxXS05h
dmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJD
cnlwdG9NYXN0ZXJLZXlGb3JXZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXddOwog
ICAgIHJldHVybiBBUEk6OkRhdGE6OmNyZWF0ZVdpdGhvdXRDb3B5aW5nKGRhdGEpOwogfQogCkBA
IC0xMDk3LDYzICsxMTg3LDc4IEBAIFJlZlB0cjxBUEk6OlN0cmluZz4gTmF2aWdhdGlvblN0YXRl
OjpOYXZpZ2F0aW9uQ2xpZW50OjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuCiAKIHZvaWQgTmF2
aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpuYXZpZ2F0aW9uQWN0aW9uRGlkQmVjb21l
RG93bmxvYWQoV2ViUGFnZVByb3h5JiwgQVBJOjpOYXZpZ2F0aW9uQWN0aW9uJiBuYXZpZ2F0aW9u
QWN0aW9uLCBEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uQWN0aW9uRGlkQmVj
b21lRG93bmxvYWQpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25h
dmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25h
dmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMubmF2aWdhdGlvbkFjdGlvbkRpZEJlY29tZURvd25sb2Fk
KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIW5hdmln
YXRpb25EZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW25hdmlnYXRpb25EZWxlZ2F0
ZS5nZXQoKSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBuYXZpZ2F0aW9uQWN0
aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgZGlkQmVjb21lRG93bmxvYWQ6d3JhcHBlcihk
b3dubG9hZCldOworICAgIFtuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmln
YXRpb25TdGF0ZS0+bV93ZWJWaWV3IG5hdmlnYXRpb25BY3Rpb246d3JhcHBlcihuYXZpZ2F0aW9u
QWN0aW9uKSBkaWRCZWNvbWVEb3dubG9hZDp3cmFwcGVyKGRvd25sb2FkKV07CiB9CiAKIHZvaWQg
TmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpuYXZpZ2F0aW9uUmVzcG9uc2VEaWRC
ZWNvbWVEb3dubG9hZChXZWJQYWdlUHJveHkmLCBBUEk6Ok5hdmlnYXRpb25SZXNwb25zZSYgbmF2
aWdhdGlvblJlc3BvbnNlLCBEb3dubG9hZFByb3h5JiBkb3dubG9hZCkKIHsKLSAgICBpZiAoIW1f
bmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uUmVz
cG9uc2VEaWRCZWNvbWVEb3dubG9hZCkKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAgIGlmICghbV9uYXZpZ2F0aW9u
U3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy5uYXZpZ2F0aW9uUmVzcG9uc2VEaWRC
ZWNvbWVEb3dubG9hZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtuYXZp
Z2F0aW9uRGVsZWdhdGUuZ2V0KCkgd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcg
bmF2aWdhdGlvblJlc3BvbnNlOndyYXBwZXIobmF2aWdhdGlvblJlc3BvbnNlKSBkaWRCZWNvbWVE
b3dubG9hZDp3cmFwcGVyKGRvd25sb2FkKV07CisgICAgW25hdmlnYXRpb25EZWxlZ2F0ZS5nZXQo
KSB3ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgbmF2aWdhdGlvblJlc3BvbnNl
OndyYXBwZXIobmF2aWdhdGlvblJlc3BvbnNlKSBkaWRCZWNvbWVEb3dubG9hZDp3cmFwcGVyKGRv
d25sb2FkKV07CiB9CiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50Ojpj
b250ZXh0TWVudURpZENyZWF0ZURvd25sb2FkKFdlYlBhZ2VQcm94eSYsIERvd25sb2FkUHJveHkm
IGRvd25sb2FkKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLmNvbnRleHRNZW51RGlkQ3JlYXRlRG93bmxvYWQpCisgICAgaWYgKCFtX25h
dmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLmNvbnRleHRNZW51RGlkQ3JlYXRlRG93
bmxvYWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0g
bV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBu
YXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdh
dGUuZ2V0KCk7CiAgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2
aWdhdGlvbkRlbGVnYXRlLmdldCgpKSAgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJW
aWV3IGNvbnRleHRNZW51RGlkQ3JlYXRlRG93bmxvYWQ6d3JhcHBlcihkb3dubG9hZCldOworICAg
IFtzdGF0aWNfY2FzdDxpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlPj4obmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpKSAgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBj
b250ZXh0TWVudURpZENyZWF0ZURvd25sb2FkOndyYXBwZXIoZG93bmxvYWQpXTsKIH0KIAogI2lm
IFVTRShRVUlDS19MT09LKQogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6
OmRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUoY29uc3QgU3RyaW5n
JiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiB1dGkpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25T
dGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFN0YXJ0TG9hZEZvclF1
aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0
aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVu
dEluTWFpbkZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hdmlnYXRpb25EZWxl
Z2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOworICAg
IGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlv
bkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0
ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUu
bV93ZWJWaWV3IGRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWVXaXRo
RmlsZU5hbWU6ZmlsZU5hbWUgdXRpOnV0aV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS05hdmln
YXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3
Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9j
dW1lbnRJbk1haW5GcmFtZVdpdGhGaWxlTmFtZTpmaWxlTmFtZSB1dGk6dXRpXTsKIH0KIAogdm9p
ZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRpZEZpbmlzaExvYWRGb3JRdWlj
a0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogewot
ICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEaWRGaW5pc2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZSkKKyAgICBp
ZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEZpbmlz
aExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdh
dGlvbkRlbGVnYXRlLmdldCgpOworICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZp
Z2F0aW9uU3RhdGUtPm1fbmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpOwogICAgIGlmICghbmF2aWdh
dGlvbkRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdL
TmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4+KG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSkgX3dl
YlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJWaWV3IGRpZEZpbmlzaExvYWRGb3JRdWlja0xv
b2tEb2N1bWVudEluTWFpbkZyYW1lOmJ1ZmZlci5jcmVhdGVOU0RhdGEoKS5nZXQoKV07CisgICAg
W3N0YXRpY19jYXN0PGlkIDxXS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGU+PihuYXZpZ2F0aW9u
RGVsZWdhdGUuZ2V0KCkpIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlk
RmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWU6YnVmZmVyLmNyZWF0ZU5T
RGF0YSgpLmdldCgpXTsKIH0KICNlbmRpZgogCkBAIC0xMTg0LDE5ICsxMjg5LDIyIEBAIHN0YXRp
YyBfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHdrU09BdXRob3JpemF0aW9uTG9hZFBvbGlj
eShTT0F1dGhvcml6YXRpb25MCiAKIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKFdlYlBhZ2VQcm94eSYsIFNP
QXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgY3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3ks
IGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNPQXV0aG9y
aXphdGlvbkxvYWRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQ
b2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3lGb3JFeHRlbnNpb25D
b21wbGV0aW9uSGFuZGxlcikgeworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGlj
eSk7CisKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX25hdmlnYXRpb25EZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVu
dFBvbGljeUZvckV4dGVuc2lvbkNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9u
U3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBuYXZpZ2F0aW9uRGVs
ZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS0+bV9uYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCk7CiAg
ICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Y3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3Jl
YXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBv
bGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTpmb3JFeHRlbnNpb246
Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2
YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3RhdGUubV93ZWJW
aWV3IGRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTp3
a1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3koY3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3kpIGZvckV4dGVuc2lvbjpleHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRy
KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2Vy
ID0gV1RGTW92ZShjaGVja2VyKV0oX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kp
IG11dGFibGUgeworICAgIFsoaWQgPFdLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdh
dGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGVjaWRl
UG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5OndrU09BdXRob3Jp
emF0aW9uTG9hZFBvbGljeShjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSkgZm9yRXh0
ZW5zaW9uOmV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3Zl
KGNoZWNrZXIpXShfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkgbXV0YWJsZSB7
CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25I
YW5kbGVyKCk7CkBAIC0xMjA4LDcgKzEzMTYsNyBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2
aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZChXZWJQYQog
Ly8gSGlzdG9yeURlbGVnYXRlUHJpdmF0ZSBzdXBwb3J0CiAgICAgCiBOYXZpZ2F0aW9uU3RhdGU6
Okhpc3RvcnlDbGllbnQ6Okhpc3RvcnlDbGllbnQoTmF2aWdhdGlvblN0YXRlJiBuYXZpZ2F0aW9u
U3RhdGUpCi0gICAgOiBtX25hdmlnYXRpb25TdGF0ZShuYXZpZ2F0aW9uU3RhdGUpCisgICAgOiBt
X25hdmlnYXRpb25TdGF0ZShtYWtlV2Vha1B0cihuYXZpZ2F0aW9uU3RhdGUpKQogewogfQogCkBA
IC0xMjE4LDUwICsxMzI2LDYyIEBAIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6fkhp
c3RvcnlDbGllbnQoKQogCiB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlk
TmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoV2ViUGFnZVByb3h5JiwgY29uc3QgV2ViTmF2aWdh
dGlvbkRhdGFTdG9yZSYgbmF2aWdhdGlvbkRhdGFTdG9yZSkKIHsKLSAgICBpZiAoIW1fbmF2aWdh
dGlvblN0YXRlLm1faGlzdG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS0+bV9oaXN0b3J5RGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3Rv
cnlEZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlv
blN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzptX25h
dmlnYXRpb25TdGF0ZS5tX3dlYlZpZXcgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE6d3Jh
cHBlcihBUEk6Ok5hdmlnYXRpb25EYXRhOjpjcmVhdGUobmF2aWdhdGlvbkRhdGFTdG9yZSkpXTsK
KyAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZp
ZXcgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGE6d3JhcHBlcihBUEk6Ok5hdmlnYXRpb25E
YXRhOjpjcmVhdGUobmF2aWdhdGlvbkRhdGFTdG9yZSkpXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9u
U3RhdGU6Okhpc3RvcnlDbGllbnQ6OmRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXZWJQYWdlUHJv
eHkmLCBjb25zdCBXVEY6OlN0cmluZyYgc291cmNlVVJMLCBjb25zdCBXVEY6OlN0cmluZyYgZGVz
dGluYXRpb25VUkwpCiB7Ci0gICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RpZFBlcmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkxUb1VSTCkK
KyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFBl
cmZvcm1DbGllbnRSZWRpcmVjdEZyb21VUkxUb1VSTCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0
ZS5nZXQoKTsKKyAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLT5t
X2hpc3RvcnlEZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25T
dGF0ZS5tX3dlYlZpZXcgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0RnJvbVVSTDpbTlNVUkwgX3dl
Yl9VUkxXaXRoV1RGU3RyaW5nOnNvdXJjZVVSTF0gdG9VUkw6W05TVVJMIF93ZWJfVVJMV2l0aFdU
RlN0cmluZzpkZXN0aW5hdGlvblVSTF1dOworICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6
bV9uYXZpZ2F0aW9uU3RhdGUtPm1fd2ViVmlldyBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3RGcm9t
VVJMOltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6c291cmNlVVJMXSB0b1VSTDpbTlNVUkwg
X3dlYl9VUkxXaXRoV1RGU3RyaW5nOmRlc3RpbmF0aW9uVVJMXV07CiB9CiAKIHZvaWQgTmF2aWdh
dGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50OjpkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV2ViUGFn
ZVByb3h5JiwgY29uc3QgV1RGOjpTdHJpbmcmIHNvdXJjZVVSTCwgY29uc3QgV1RGOjpTdHJpbmcm
IGRlc3RpbmF0aW9uVVJMKQogewotICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUubV9oaXN0b3J5
RGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRQZXJmb3JtU2VydmVyUmVkaXJlY3RGcm9tVVJMVG9V
UkwpCisgICAgaWYgKCFtX25hdmlnYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX2hpc3RvcnlEZWxlZ2F0
ZS5nZXQoKTsKKyAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLT5tX2hpc3RvcnlEZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkxUb1VSTCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgYXV0byBoaXN0b3J5RGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0
ZS0+bV9oaXN0b3J5RGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFtoaXN0b3J5RGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0
aW9uU3RhdGUubV93ZWJWaWV3IGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdEZyb21VUkw6W05TVVJM
IF93ZWJfVVJMV2l0aFdURlN0cmluZzpzb3VyY2VVUkxdIHRvVVJMOltOU1VSTCBfd2ViX1VSTFdp
dGhXVEZTdHJpbmc6ZGVzdGluYXRpb25VUkxdXTsKKyAgICBbaGlzdG9yeURlbGVnYXRlIF93ZWJW
aWV3Om1fbmF2aWdhdGlvblN0YXRlLT5tX3dlYlZpZXcgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0
RnJvbVVSTDpbTlNVUkwgX3dlYl9VUkxXaXRoV1RGU3RyaW5nOnNvdXJjZVVSTF0gdG9VUkw6W05T
VVJMIF93ZWJfVVJMV2l0aFdURlN0cmluZzpkZXN0aW5hdGlvblVSTF1dOwogfQogCiB2b2lkIE5h
dmlnYXRpb25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6ZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdlYlBh
Z2VQcm94eSYsIGNvbnN0IFdURjo6U3RyaW5nJiB0aXRsZSwgY29uc3QgV1RGOjpTdHJpbmcmIHVy
bCkKIHsKLSAgICBpZiAoIW1fbmF2aWdhdGlvblN0YXRlLm1faGlzdG9yeURlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3RGlkVXBkYXRlSGlzdG9yeVRpdGxlRm9yVVJMKQorICAgIGlmICghbV9uYXZpZ2F0
aW9uU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9uYXZpZ2F0aW9uU3RhdGUt
Pm1faGlzdG9yeURlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkVXBkYXRlSGlzdG9yeVRpdGxlRm9y
VVJMKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGhpc3RvcnlEZWxlZ2F0ZSA9IG1fbmF2
aWdhdGlvblN0YXRlLm1faGlzdG9yeURlbGVnYXRlLmdldCgpOworICAgIGF1dG8gaGlzdG9yeURl
bGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUtPm1faGlzdG9yeURlbGVnYXRlLmdldCgpOwogICAg
IGlmICghaGlzdG9yeURlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbaGlzdG9yeURl
bGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdhdGlvblN0YXRlLm1fd2ViVmlldyBkaWRVcGRhdGVIaXN0
b3J5VGl0bGU6dGl0bGUgZm9yVVJMOltOU1VSTCBfd2ViX1VSTFdpdGhXVEZTdHJpbmc6dXJsXV07
CisgICAgW2hpc3RvcnlEZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRpb25TdGF0ZS0+bV93ZWJW
aWV3IGRpZFVwZGF0ZUhpc3RvcnlUaXRsZTp0aXRsZSBmb3JVUkw6W05TVVJMIF93ZWJfVVJMV2l0
aFdURlN0cmluZzp1cmxdXTsKIH0KIAogdm9pZCBOYXZpZ2F0aW9uU3RhdGU6OndpbGxDaGFuZ2VJ
c0xvYWRpbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlE
ZWxlZ2F0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5oCmlu
ZGV4IDYyZDdhOGExOGY2ZWI4Mzk0Y2JlMDJjZmFjNDM3NmE1NGQwYTFmYTEuLjMwZGMyYjk3Nzgy
ODI1ZjIzMTg0YjQyMzAxYzUwYWNmNjA2MTcyMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1VJRGVsZWdhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9VSURlbGVnYXRlLmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbXBvcnQgIkFQSVVJQ2xp
ZW50LmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+CiAjaW1wb3J0IDx3dGYvV2Vha09iakNQ
dHIuaD4KKyNpbXBvcnQgPHd0Zi9XZWFrUHRyLmg+CiAKIEBjbGFzcyBfV0tBY3RpdmF0ZWRFbGVt
ZW50SW5mbzsKIEBjbGFzcyBXS1dlYlZpZXc7CkBAIC00Nyw3ICs0OCw3IEBAIGNsYXNzIFJlZ2lz
dHJhYmxlRG9tYWluOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgVUlEZWxlZ2F0ZSB7
CitjbGFzcyBVSURlbGVnYXRlIDogcHVibGljIENhbk1ha2VXZWFrUHRyPFVJRGVsZWdhdGU+IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBVSURl
bGVnYXRlKFdLV2ViVmlldyAqKTsKQEAgLTcyLDcgKzczLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gQVBJOjpDb250ZXh0TWVudUNsaWVudAogICAgICAgICB2b2lkIG1lbnVGcm9tUHJvcG9zZWRN
ZW51KFdlYlBhZ2VQcm94eSYsIE5TTWVudSAqLCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0RGF0YSYs
IEFQSTo6T2JqZWN0KiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXRhaW5QdHI8TlNNZW51PiYm
KT4mJikgb3ZlcnJpZGU7CiAKLSAgICAgICAgVUlEZWxlZ2F0ZSYgbV91aURlbGVnYXRlOworICAg
ICAgICBXZWFrUHRyPFVJRGVsZWdhdGU+IG1fdWlEZWxlZ2F0ZTsKICAgICB9OwogI2VuZGlmCiAK
QEAgLTEzMSw3ICsxMzIsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJ
T04pCiAgICAgICAgIHZvaWQgc2hvdWxkQWxsb3dEZXZpY2VPcmllbnRhdGlvbkFuZE1vdGlvbkFj
Y2VzcyhXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmLCBGcmFtZUluZm9EYXRh
JiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIGZpbmFsOwogI2VuZGlmCi0gICAg
ICAgIGJvb2wgbmVlZHNGb250QXR0cmlidXRlcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXM7
IH0KKyAgICAgICAgYm9vbCBuZWVkc0ZvbnRBdHRyaWJ1dGVzKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV91aURlbGVnYXRlID8gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
RGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXMgOiBmYWxzZTsgfQogICAgICAgICB2b2lkIGRpZENoYW5n
ZUZvbnRBdHRyaWJ1dGVzKGNvbnN0IFdlYkNvcmU6OkZvbnRBdHRyaWJ1dGVzJikgZmluYWw7CiAg
ICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV2Vi
UGFnZVByb3h5JiwgV2ViRnJhbWVQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mLCBBUEk6OlNl
Y3VyaXR5T3JpZ2luJiwgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eSYpIGZpbmFsOwog
ICAgICAgICB2b2lkIGNoZWNrVXNlck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbihXZWJQYWdlUHJv
eHkmLCBXZWJGcmFtZVByb3h5JiwgQVBJOjpTZWN1cml0eU9yaWdpbiYsIEFQSTo6U2VjdXJpdHlP
cmlnaW4mLCBVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tQcm94eSYpIGZpbmFsOwpAQCAtMTYzLDEw
ICsxNjQsMTAgQEAgcHJpdmF0ZToKICNlbmRpZgogICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZv
clNwZWVjaFJlY29nbml0aW9uUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiwgQVBJOjpT
ZWN1cml0eU9yaWdpbiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIGZpbmFsOwog
Ci0gICAgICAgIFVJRGVsZWdhdGUmIG1fdWlEZWxlZ2F0ZTsKKyAgICAgICAgV2Vha1B0cjxVSURl
bGVnYXRlPiBtX3VpRGVsZWdhdGU7CiAgICAgfTsKIAotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3
OworICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogICAgIFdlYWtPYmpDUHRy
PGlkIDxXS1VJRGVsZWdhdGU+ID4gbV9kZWxlZ2F0ZTsKIAogICAgIHN0cnVjdCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9VSURlbGVnYXRlLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvVUlEZWxlZ2F0ZS5tbQppbmRleCBkM2I3NDE4OTVhNGIy
OGZiZWJkMzE1ODY2YTdmODk1MTc0OGYwY2Y4Li4xYjllZGJmNGQ5OGI4ZTUwOTAwYjVhMzZhOTM2
NDc0ODdiZTM1OGRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9V
SURlbGVnYXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1VJRGVsZWdh
dGUubW0KQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIFVJRGVsZWdhdGU6OnNldERlbGVnYXRlKGlk
IDxXS1VJRGVsZWdhdGU+IGRlbGVnYXRlKQogCiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCiBV
SURlbGVnYXRlOjpDb250ZXh0TWVudUNsaWVudDo6Q29udGV4dE1lbnVDbGllbnQoVUlEZWxlZ2F0
ZSYgdWlEZWxlZ2F0ZSkKLSAgICA6IG1fdWlEZWxlZ2F0ZSh1aURlbGVnYXRlKQorICAgIDogbV91
aURlbGVnYXRlKG1ha2VXZWFrUHRyKHVpRGVsZWdhdGUpKQogewogfQogCkBAIC0xOTcsMjAgKzE5
NywyMyBAQCBVSURlbGVnYXRlOjpDb250ZXh0TWVudUNsaWVudDo6fkNvbnRleHRNZW51Q2xpZW50
KCkKIAogdm9pZCBVSURlbGVnYXRlOjpDb250ZXh0TWVudUNsaWVudDo6bWVudUZyb21Qcm9wb3Nl
ZE1lbnUoV2ViUGFnZVByb3h5JiwgTlNNZW51ICptZW51LCBjb25zdCBXZWJIaXRUZXN0UmVzdWx0
RGF0YSYsIEFQSTo6T2JqZWN0KiB1c2VySW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZXRh
aW5QdHI8TlNNZW51PiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q29udGV4dE1lbnVGb3JFbGVtZW50Ci0g
ICAgICAgICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRN
ZW51Rm9yRWxlbWVudFVzZXJJbmZvCi0gICAgICAgICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0
ZU1ldGhvZHMud2ViVmlld0dldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudUZvckVsZW1lbnRV
c2VySW5mb0NvbXBsZXRpb25IYW5kbGVyKQorICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobWVudSk7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVsZW1lbnQKKyAgICAgICAgJiYg
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRNZW51Rm9yRWxl
bWVudFVzZXJJbmZvCisgICAgICAgICYmICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2Rz
LndlYlZpZXdHZXRDb250ZXh0TWVudUZyb21Qcm9wb3NlZE1lbnVGb3JFbGVtZW50VXNlckluZm9D
b21wbGV0aW9uSGFuZGxlcikKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKG1lbnUp
OworCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsK
ICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobWVu
dSk7CiAKICAgICBhdXRvIGNvbnRleHRNZW51RWxlbWVudEluZm8gPSBhZG9wdE5TKFtbX1dLQ29u
dGV4dE1lbnVFbGVtZW50SW5mbyBhbGxvY10gaW5pdF0pOwogCi0gICAgaWYgKG1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51
Rm9yRWxlbWVudFVzZXJJbmZvQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAobV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRN
ZW51Rm9yRWxlbWVudFVzZXJJbmZvQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgYXV0byBj
aGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdl
dCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6Z2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51OmZv
ckVsZW1lbnQ6dXNlckluZm86Y29tcGxldGlvbkhhbmRsZXI6KSk7Ci0gICAgICAgIFsoaWQgPFdL
VUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXcgZ2V0Q29udGV4dE1lbnVGcm9tUHJvcG9zZWRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0
TWVudUVsZW1lbnRJbmZvLmdldCgpIHVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQg
PE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWwgY29tcGxldGlvbkhh
bmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKE5TTWVudSAqbWVudSkgbXV0
YWJsZSB7CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJW
aWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGdldENvbnRleHRNZW51RnJv
bVByb3Bvc2VkTWVudTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50SW5mby5nZXQo
KSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVz
ZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9
IFdURk1vdmUoY2hlY2tlcildIChOU01lbnUgKm1lbnUpIG11dGFibGUgewogICAgICAgICAgICAg
aWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFu
ZGxlcigpOwpAQCAtMjIwLDE2ICsyMjMsMTYgQEAgdm9pZCBVSURlbGVnYXRlOjpDb250ZXh0TWVu
dUNsaWVudDo6bWVudUZyb21Qcm9wb3NlZE1lbnUoV2ViUGFnZVByb3h5JiwgTlNNZW51ICoKICAg
ICB9CiAgICAgCiAgICAgQUxMT1dfREVQUkVDQVRFRF9ERUNMQVJBVElPTlNfQkVHSU4KLSAgICBp
ZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb250ZXh0TWVudUZvckVs
ZW1lbnQpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbnRl
eHRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpXSk7Cisg
ICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0NvbnRleHRNZW51
Rm9yRWxlbWVudCkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFsoaWQgPFdLVUlE
ZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3
LmdldCgpLmdldCgpIGNvbnRleHRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0TWVudUVsZW1l
bnRJbmZvLmdldCgpXSk7CiAKLSAgICBjb21wbGV0aW9uSGFuZGxlcihbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbnRl
eHRNZW51Om1lbnUgZm9yRWxlbWVudDpjb250ZXh0TWVudUVsZW1lbnRJbmZvLmdldCgpIHVzZXJJ
bmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8t
PndyYXBwZXIoKSkgOiBuaWxdKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihbKGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5n
ZXQoKS5nZXQoKSBjb250ZXh0TWVudTptZW51IGZvckVsZW1lbnQ6Y29udGV4dE1lbnVFbGVtZW50
SW5mby5nZXQoKSB1c2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNv
ZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsXSk7CiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiB9CiAjZW5kaWYKIAogVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OlVJ
Q2xpZW50KFVJRGVsZWdhdGUmIHVpRGVsZWdhdGUpCi0gICAgOiBtX3VpRGVsZWdhdGUodWlEZWxl
Z2F0ZSkKKyAgICA6IG1fdWlEZWxlZ2F0ZShtYWtlV2Vha1B0cih1aURlbGVnYXRlKSkKIHsKIH0K
IApAQCAtMjM5LDE4ICsyNDIsMjEgQEAgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6On5VSUNsaWVudCgp
CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UoV2ViS2l0OjpXZWJQ
YWdlUHJveHkmLCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyYmIHdpbmRvd0ZlYXR1cmVzLCBSZWY8
QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmIG5hdmlnYXRpb25BY3Rpb24sIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoUmVmUHRyPFdlYlBhZ2VQcm94eT4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7
Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIobnVs
bHB0cik7CisKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdl
dCgpOwogICAgIEFTU0VSVChkZWxlZ2F0ZSk7CiAKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFttX3VpRGVsZWdhdGUubV93ZWJWaWV3LT5fY29uZmlndXJhdGlvbiBjb3B5XSk7Ci0g
ICAgW2NvbmZpZ3VyYXRpb24gX3NldFJlbGF0ZWRXZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZp
ZXddOworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW21fdWlEZWxlZ2F0ZS0+bV93
ZWJWaWV3LmdldCgpLT5fY29uZmlndXJhdGlvbiBjb3B5XSk7CisgICAgW2NvbmZpZ3VyYXRpb24g
X3NldFJlbGF0ZWRXZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsK
IAogICAgIGF1dG8gYXBpV2luZG93RmVhdHVyZXMgPSBBUEk6OldpbmRvd0ZlYXR1cmVzOjpjcmVh
dGUod2luZG93RmVhdHVyZXMpOwogCi0gICAgaWYgKG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3Q3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uRm9yTmF2aWdhdGlvbkFj
dGlvbldpbmRvd0ZlYXR1cmVzQXN5bmMpIHsKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3Q3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uRm9yTmF2aWdh
dGlvbkFjdGlvbldpbmRvd0ZlYXR1cmVzQXN5bmMpIHsKICAgICAgICAgYXV0byBjaGVja2VyID0g
Q29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2Vs
ZWN0b3IoX3dlYlZpZXc6Y3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uOmZvck5hdmlnYXRp
b25BY3Rpb246d2luZG93RmVhdHVyZXM6Y29tcGxldGlvbkhhbmRsZXI6KSk7CiAKLSAgICAgICAg
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
Lm1fd2ViVmlldyBjcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5n
ZXQoKSBmb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2aWdhdGlvbkFjdGlvbikgd2luZG93
RmVhdHVyZXM6d3JhcHBlcihhcGlXaW5kb3dGZWF0dXJlcykgY29tcGxldGlvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKSwgcmVsYXRlZFdlYlZpZXcgPSBSZXRhaW5QdHI8
V0tXZWJWaWV3PihtX3VpRGVsZWdhdGUubV93ZWJWaWV3KV0gKFdLV2ViVmlldyAqd2ViVmlldykg
bXV0YWJsZSB7CisgICAgICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGNyZWF0ZVdlYlZpZXdX
aXRoQ29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpIGZvck5hdmlnYXRpb25BY3Rpb246
d3JhcHBlcihuYXZpZ2F0aW9uQWN0aW9uKSB3aW5kb3dGZWF0dXJlczp3cmFwcGVyKGFwaVdpbmRv
d0ZlYXR1cmVzKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNr
ZXIpLCByZWxhdGVkV2ViVmlldyA9IG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpXSAoV0tX
ZWJWaWV3ICp3ZWJWaWV3KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChjaGVja2VyLT5jb21w
bGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTI2Nywz
MyArMjczLDM2IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UoV2Vi
S2l0OjpXZWJQYWdlUHJveHkmLCBXZWJDb3JlOjpXaW5kb3dGCiAgICAgICAgIH0pLmdldCgpXTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3Q3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uRm9yTmF2aWdhdGlv
bkFjdGlvbldpbmRvd0ZlYXR1cmVzKQorICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3Q3JlYXRlV2ViVmlld1dpdGhDb25maWd1cmF0aW9uRm9yTmF2aWdhdGlv
bkFjdGlvbldpbmRvd0ZlYXR1cmVzKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
bnVsbHB0cik7CiAKLSAgICBSZXRhaW5QdHI8V0tXZWJWaWV3PiB3ZWJWaWV3ID0gW2RlbGVnYXRl
IHdlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBjcmVhdGVXZWJWaWV3V2l0aENvbmZpZ3Vy
YXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBmb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIobmF2
aWdhdGlvbkFjdGlvbikgd2luZG93RmVhdHVyZXM6d3JhcHBlcihhcGlXaW5kb3dGZWF0dXJlcyld
OworICAgIFJldGFpblB0cjxXS1dlYlZpZXc+IHdlYlZpZXcgPSBbZGVsZWdhdGUgd2ViVmlldzpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjcmVhdGVXZWJWaWV3V2l0aENvbmZp
Z3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKSBmb3JOYXZpZ2F0aW9uQWN0aW9uOndyYXBwZXIo
bmF2aWdhdGlvbkFjdGlvbikgd2luZG93RmVhdHVyZXM6d3JhcHBlcihhcGlXaW5kb3dGZWF0dXJl
cyldOwogICAgIGlmICghd2ViVmlldykKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVy
KG51bGxwdHIpOwogCi0gICAgaWYgKFt3ZWJWaWV3LT5fY29uZmlndXJhdGlvbiBfcmVsYXRlZFdl
YlZpZXddICE9IG1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcpCisgICAgaWYgKFt3ZWJWaWV3LmdldCgp
LT5fY29uZmlndXJhdGlvbiBfcmVsYXRlZFdlYlZpZXddICE9IG1fdWlEZWxlZ2F0ZS0+bV93ZWJW
aWV3LmdldCgpLmdldCgpKQogICAgICAgICBbTlNFeGNlcHRpb24gcmFpc2U6TlNJbnRlcm5hbElu
Y29uc2lzdGVuY3lFeGNlcHRpb24gZm9ybWF0OkAiUmV0dXJuZWQgV0tXZWJWaWV3IHdhcyBub3Qg
Y3JlYXRlZCB3aXRoIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uLiJdOwogICAgIGNvbXBsZXRpb25I
YW5kbGVyKHdlYlZpZXctPl9wYWdlLmdldCgpKTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0KFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpT
dHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqLCBGcmFtZUluZm9EYXRhJiYgZnJhbWVJbmZv
LCBGdW5jdGlvbjx2b2lkKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkphdmFTY3JpcHRBbGVydFBhbmVs
V2l0aE1lc3NhZ2VJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKCk7CisKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkphdmFTY3Jp
cHRBbGVydFBhbmVsV2l0aE1lc3NhZ2VJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIp
IHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlm
ICghZGVsZWdhdGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENo
ZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKHdlYlZpZXc6cnVuSmF2YVNj
cmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5k
bGVyOikpOwotICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcnVu
SmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTptZXNzYWdlIGluaXRpYXRlZEJ5RnJhbWU6
d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2Up
KSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSB7Cisg
ICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
cnVuSmF2YVNjcmlwdEFsZXJ0UGFuZWxXaXRoTWVzc2FnZTptZXNzYWdlIGluaXRpYXRlZEJ5RnJh
bWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1vdmUoZnJhbWVJbmZvKSwgJnBh
Z2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSB7
CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTMw
MywxOSArMzEyLDIyIEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRB
bGVydChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6U3RyCiAKIHZvaWQgVUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29u
c3QgV1RGOjpTdHJpbmcmIG1lc3NhZ2UsIFdlYkZyYW1lUHJveHkqIHdlYkZyYW1lUHJveHksIEZy
YW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld1J1bkphdmFTY3JpcHRDb25maXJtUGFuZWxXaXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVD
b21wbGV0aW9uSGFuZGxlcikgeworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1
cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5KYXZhU2NyaXB0Q29uZmlybVBhbmVsV2l0aE1lc3Nh
Z2VJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVh
dGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bkphdmFTY3JpcHRDb25maXJt
UGFuZWxXaXRoTWVzc2FnZTppbml0aWF0ZWRCeUZyYW1lOmNvbXBsZXRpb25IYW5kbGVyOikpOwot
ICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcnVuSmF2YVNjcmlw
dENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVy
KEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBs
ZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3Vs
dCkgbXV0YWJsZSB7CisgICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCkgcnVuSmF2YVNjcmlwdENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlOm1lc3Nh
Z2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92
ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChjaGVj
a2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKQEAgLTMyNSwxOSArMzM3LDIy
IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKFdlYlBh
Z2VQcm94eSYgcGFnZSwgY29uc3QgV1RGOjpTCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnJ1bkphdmFTY3JpcHRQcm9tcHQoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbWVzc2FnZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgV2ViRnJhbWVQcm94
eSosIEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoY29uc3QgV1RGOjpT
dHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuSmF2YVNjcmlwdFRleHRJbnB1dFBhbmVsV2l0aFBy
b21wdERlZmF1bHRUZXh0SW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAg
aWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0p
OworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5K
YXZhU2NyaXB0VGV4dElucHV0UGFuZWxXaXRoUHJvbXB0RGVmYXVsdFRleHRJbml0aWF0ZWRCeUZy
YW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoU3RyaW5n
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlE
ZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihTdHJpbmcoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBh
dXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdh
dGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bkphdmFTY3JpcHRUZXh0SW5wdXRQYW5lbFdp
dGhQcm9tcHQ6ZGVmYXVsdFRleHQ6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjop
KTsKLSAgICBbZGVsZWdhdGUgd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkphdmFT
Y3JpcHRUZXh0SW5wdXRQYW5lbFdpdGhQcm9tcHQ6bWVzc2FnZSBkZWZhdWx0VGV4dDpkZWZhdWx0
VmFsdWUgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RG
TW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihb
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9
IFdURk1vdmUoY2hlY2tlcildIChOU1N0cmluZyAqcmVzdWx0KSBtdXRhYmxlIHsKKyAgICBbZGVs
ZWdhdGUgd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBydW5KYXZh
U2NyaXB0VGV4dElucHV0UGFuZWxXaXRoUHJvbXB0Om1lc3NhZ2UgZGVmYXVsdFRleHQ6ZGVmYXVs
dFZhbHVlIGluaXRpYXRlZEJ5RnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdU
Rk1vdmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIo
W2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIg
PSBXVEZNb3ZlKGNoZWNrZXIpXSAoTlNTdHJpbmcgKnJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAg
IGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVzdWx0KTsKQEAgLTM0Nyw3
ICszNjIsMTAgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21w
dChXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdURjo6U3QKIAogdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6cmVxdWVzdFN0b3JhZ2VBY2Nlc3NDb25maXJtKFdlYlBhZ2VQcm94eSYgd2ViUGFn
ZVByb3h5LCBXZWJGcmFtZVByb3h5KiwgY29uc3QgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4m
IHJlcXVlc3RpbmdEb21haW4sIGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiBjdXJy
ZW50RG9tYWluLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQogewotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQo
KTsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKGZhbHNlKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTM1NiwyMCArMzc0LDIwIEBAIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RTdG9yYWdlQWNjZXNzQ29uZmlybShXZWJQYWdlUHJv
eHkmIHdlYlBhZ2VQcm94CiAgICAgLy8gU29tZSBzaXRlcyBoYXZlIHF1aXJrcyB3aGVyZSBtdWx0
aXBsZSBsb2dpbiBkb21haW5zIHJlcXVpcmUgc3RvcmFnZSBhY2Nlc3MuCiAgICAgaWYgKGF1dG8g
YWRkaXRpb25hbExvZ2luRG9tYWluID0gV2ViQ29yZTo6TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpm
aW5kQWRkaXRpb25hbExvZ2luRG9tYWluKGN1cnJlbnREb21haW4sIHJlcXVlc3RpbmdEb21haW4p
KSB7CiAjaWYgIVBMQVRGT1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQotICAgICAg
ICBwcmVzZW50U3RvcmFnZUFjY2Vzc0FsZXJ0UXVpcmsobV91aURlbGVnYXRlLm1fd2ViVmlldywg
cmVxdWVzdGluZ0RvbWFpbiwgKmFkZGl0aW9uYWxMb2dpbkRvbWFpbiwgY3VycmVudERvbWFpbiwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgICAgICBwcmVzZW50U3RvcmFnZUFjY2Vz
c0FsZXJ0UXVpcmsobV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCksIHJlcXVlc3Rp
bmdEb21haW4sICphZGRpdGlvbmFsTG9naW5Eb21haW4sIGN1cnJlbnREb21haW4sIFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpKTsKICNlbmRpZgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RTdG9y
YWdlQWNjZXNzUGFuZWxVbmRlckZpcnN0UGFydHlDb21wbGV0aW9uSGFuZGxlcikgeworICAgIGlm
ICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVxdWVzdFN0b3JhZ2VB
Y2Nlc3NQYW5lbFVuZGVyRmlyc3RQYXJ0eUNvbXBsZXRpb25IYW5kbGVyKSB7CiAjaWYgIVBMQVRG
T1JNKFdBVENIT1MpICYmICFQTEFURk9STShBUFBMRVRWKQotICAgICAgICBwcmVzZW50U3RvcmFn
ZUFjY2Vzc0FsZXJ0KG1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcsIHJlcXVlc3RpbmdEb21haW4sIGN1
cnJlbnREb21haW4sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICAgICAgcHJlc2Vu
dFN0b3JhZ2VBY2Nlc3NBbGVydChtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSwg
cmVxdWVzdGluZ0RvbWFpbiwgY3VycmVudERvbWFpbiwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOwogI2VuZGlmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIg
PSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBz
ZWxlY3Rvcihfd2ViVmlldzpyZXF1ZXN0U3RvcmFnZUFjY2Vzc1BhbmVsRm9yRG9tYWluOnVuZGVy
Q3VycmVudERvbWFpbjpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdh
dGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJlcXVl
c3RTdG9yYWdlQWNjZXNzUGFuZWxGb3JEb21haW46cmVxdWVzdGluZ0RvbWFpbi5zdHJpbmcoKSB1
bmRlckN1cnJlbnREb21haW46Y3VycmVudERvbWFpbi5zdHJpbmcoKSBjb21wbGV0aW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUg
eworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHJlcXVlc3RTdG9yYWdlQWNjZXNzUGFuZWxG
b3JEb21haW46cmVxdWVzdGluZ0RvbWFpbi5zdHJpbmcoKSB1bmRlckN1cnJlbnREb21haW46Y3Vy
cmVudERvbWFpbi5zdHJpbmcoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tl
ci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlc3VsdCk7CkBAIC0zNzksMTUgKzM5NywxOCBA
QCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZXF1ZXN0U3RvcmFnZUFjY2Vzc0NvbmZpcm0o
V2ViUGFnZVByb3h5JiB3ZWJQYWdlUHJveAogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpk
ZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYktpdDo6V2ViUGFn
ZVByb3h5JiBwYWdlLCBXZWJLaXQ6OldlYkZyYW1lUHJveHkmIGZyYW1lLCBjb25zdCBGcmFtZUlu
Zm9EYXRhJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UmVx
dWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lRGVjaXNpb25IYW5kbGVyKQorICAgIGlm
ICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9u
Rm9yRnJhbWVEZWNpc2lvbkhhbmRsZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZGVs
ZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRs
ZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6
cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lOmRlY2lzaW9uSGFuZGxlcjopKTsK
LSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVs
ZWdhdGUubV93ZWJWaWV3IHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZTp3cmFw
cGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoRnJhbWVJbmZvRGF0YSB7IGZyYW1lSW5mbyB9LCAm
cGFnZSkpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0g
c3RkOjpleGNoYW5nZShjb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0ciksIGNoZWNrZXIgPSBXVEZN
b3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgeworICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZTp3cmFwcGVyKEFQ
STo6RnJhbWVJbmZvOjpjcmVhdGUoRnJhbWVJbmZvRGF0YSB7IGZyYW1lSW5mbyB9LCAmcGFnZSkp
IGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpl
eGNoYW5nZShjb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0ciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNo
ZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29t
cGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMzk3LDM2ICs0MTgs
NDQgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OlcKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVu
dDo6ZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNlKFdlYlBhZ2VQ
cm94eSYsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dv
cmRBcHBlYXJhbmNlV2l0aFVzZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdEaWRSZXNpZ25JbnB1dEVsZW1lbnRTdHJvbmdQYXNzd29yZEFwcGVhcmFuY2VXaXRoVXNlcklu
Zm8pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUu
bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2Rl
bGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS5tX3dlYlZpZXcgZGlkUmVzaWduSW5wdXRFbGVtZW50U3Ryb25nUGFzc3dvcmRBcHBlYXJhbmNl
V2l0aFVzZXJJbmZvOnVzZXJJbmZvID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4o
dXNlckluZm8tPndyYXBwZXIoKSkgOiBuaWxdOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IGRpZFJlc2lnbklucHV0RWxlbWVudFN0cm9uZ1Bhc3N3b3JkQXBwZWFyYW5jZVdpdGhVc2VySW5m
bzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1NlY3VyZUNvZGluZz4+KHVzZXJJbmZvLT53
cmFwcGVyKCkpIDogbmlsXTsKIH0KIAogYm9vbCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2FuUnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWxX
aXRoTWVzc2FnZUluaXRpYXRlZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcjsKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyOwogfQogCiB2b2lk
IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV2ViUGFn
ZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlN0cmluZyYgbWVzc2FnZSwgV2ViRnJhbWVQcm94eSos
IEZyYW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMu
d2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhNZXNzYWdlSW5pdGlhdGVkQnlG
cmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAg
IHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdp
dGhNZXNzYWdlSW5pdGlhdGVkQnlGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1
dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdh
dGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tl
cjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6cnVuQmVmb3JlVW5s
b2FkQ29uZmlybVBhbmVsV2l0aE1lc3NhZ2U6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFu
ZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmll
dzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFdpdGhN
ZXNzYWdlOm1lc3NhZ2UgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpj
cmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
Y2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CisgICAg
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
LT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsV2l0aE1l
c3NhZ2U6bWVzc2FnZSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNy
ZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZXN1bHQpOwpAQCAtNDM2
LDI2ICs0NjUsMjggQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QKIAogdm9pZCBVSURlbGVnYXRl
OjpVSUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYlBhZ2VQcm94eSosIFdlYkZyYW1l
UHJveHkqLCBBUEk6OlNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgY29uc3QgV1RGOjpT
dHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNp
Z25lZCBsb25nIGxvbmcgY3VycmVudFF1b3RhLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudE9y
aWdpblVzYWdlLCB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVudFVzYWdlLCB1bnNpZ25lZCBsb25n
IGxvbmcgZXhwZWN0ZWRVc2FnZSwgRnVuY3Rpb248dm9pZCAodW5zaWduZWQgbG9uZyBsb25nKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3JpZ2luQ3VycmVu
dFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdl
RGVjaXNpb25IYW5kbGVyICYmICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlO
YW1lQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBl
Y3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyKSB7CisgICAgLy8gVXNlIDUwIE1CIGFzIHRoZSBkZWZh
dWx0IGRhdGFiYXNlIHF1b3RhLgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UGVyT3Jp
Z2luRGF0YWJhc2VRdW90YSA9IDUwICogMTAyNCAqIDEwMjQ7CiAKLSAgICAgICAgLy8gVXNlIDUw
IE1CIGFzIHRoZSBkZWZhdWx0IGRhdGFiYXNlIHF1b3RhLgotICAgICAgICB1bnNpZ25lZCBsb25n
IGxvbmcgZGVmYXVsdFBlck9yaWdpbkRhdGFiYXNlUXVvdGEgPSA1MCAqIDEwMjQgKiAxMDI0Owor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIo
ZGVmYXVsdFBlck9yaWdpbkRhdGFiYXNlUXVvdGEpOworICAgIGlmICghbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlRGF0YWJhc2VRdW90YUZvclNlY3VyaXR5T3Jp
Z2luQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBl
Y3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyICYmICFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRo
b2RzLndlYlZpZXdEZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW5EYXRhYmFzZU5h
bWVEaXNwbGF5TmFtZUN1cnJlbnRRdW90YUN1cnJlbnRPcmlnaW5Vc2FnZUN1cnJlbnREYXRhYmFz
ZVVzYWdlRXhwZWN0ZWRVc2FnZURlY2lzaW9uSGFuZGxlcikgewogCiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKGRlZmF1bHRQZXJPcmlnaW5EYXRhYmFzZVF1b3RhKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVu
dFF1b3RhKTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGVmYXVsdFBlck9yaWdpbkRhdGFi
YXNlUXVvdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgQVNTRVJUKHNlY3VyaXR5
T3JpZ2luKTsKIAotICAgIGlmIChtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRhdGFiYXNlTmFtZURpc3BsYXlO
YW1lQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVudERhdGFiYXNlVXNhZ2VFeHBl
Y3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyKSB7CisgICAgaWYgKG1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkRh
dGFiYXNlTmFtZURpc3BsYXlOYW1lQ3VycmVudFF1b3RhQ3VycmVudE9yaWdpblVzYWdlQ3VycmVu
dERhdGFiYXNlVXNhZ2VFeHBlY3RlZFVzYWdlRGVjaXNpb25IYW5kbGVyKSB7CiAgICAgICAgIGF1
dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0
ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1cml0
eU9yaWdpbjpkYXRhYmFzZU5hbWU6ZGlzcGxheU5hbWU6Y3VycmVudFF1b3RhOmN1cnJlbnRPcmln
aW5Vc2FnZTpjdXJyZW50RGF0YWJhc2VVc2FnZTpleHBlY3RlZFVzYWdlOmRlY2lzaW9uSGFuZGxl
cjopKTsKLSAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlP
cmlnaW46d3JhcHBlcigqc2VjdXJpdHlPcmlnaW4pIGRhdGFiYXNlTmFtZTpkYXRhYmFzZU5hbWUg
ZGlzcGxheU5hbWU6ZGlzcGxheU5hbWUgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50
T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJl
bnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwg
Y2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkg
eworICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzpt
X3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBkZWNpZGVEYXRhYmFzZVF1b3RhRm9y
U2VjdXJpdHlPcmlnaW46d3JhcHBlcigqc2VjdXJpdHlPcmlnaW4pIGRhdGFiYXNlTmFtZTpkYXRh
YmFzZU5hbWUgZGlzcGxheU5hbWU6ZGlzcGxheU5hbWUgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90
YSBjdXJyZW50T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFzZVVz
YWdlOmN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25IYW5k
bGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9uZyBu
ZXdRdW90YSkgewogICAgICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFz
QmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIGNoZWNr
ZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtNDY1LDcgKzQ5Niw3IEBAIHZvaWQg
VUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJQYWdlUHJveHkq
LCBXZWJGcmFtZVByb3h5KiwKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9u
SGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2Vi
VmlldzpkZWNpZGVEYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Y3VycmVudFF1b3RhOmN1
cnJlbnRPcmlnaW5Vc2FnZTpjdXJyZW50RGF0YWJhc2VVc2FnZTpleHBlY3RlZFVzYWdlOmRlY2lz
aW9uSGFuZGxlcjopKTsKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBf
d2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGRlY2lkZURhdGFiYXNlUXVvdGFGb3JTZWN1
cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0eU9yaWdpbikgY3VycmVudFF1b3RhOmN1cnJlbnRR
dW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1cnJlbnREYXRhYmFz
ZVVzYWdlOmN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNhZ2UgZGVjaXNpb25I
YW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2lnbmVkIGxvbmcgbG9u
ZyBuZXdRdW90YSkgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRlY2lkZURhdGFiYXNl
UXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKCpzZWN1cml0eU9yaWdpbikgY3VycmVudFF1
b3RhOmN1cnJlbnRRdW90YSBjdXJyZW50T3JpZ2luVXNhZ2U6Y3VycmVudE9yaWdpblVzYWdlIGN1
cnJlbnREYXRhYmFzZVVzYWdlOmN1cnJlbnRVc2FnZSBleHBlY3RlZFVzYWdlOmV4cGVjdGVkVXNh
Z2UgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVuc2ln
bmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlv
bkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNo
ZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtNDg3LDE0ICs1MTgsMTcgQEAg
c3RhdGljIGlubGluZSBfV0tGb2N1c0RpcmVjdGlvbiB0b1dLRm9jdXNEaXJlY3Rpb24oV0tGb2N1
c0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAKIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnRha2VG
b2N1cyhXZWJQYWdlUHJveHkqLCBXS0ZvY3VzRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKLSAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VGFrZUZvY3VzKQorICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1Rha2VGb2N1cykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVn
YXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3Vp
RGVsZWdhdGUubV93ZWJWaWV3IHRha2VGb2N1czp0b1dLRm9jdXNEaXJlY3Rpb24oZGlyZWN0aW9u
KV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgdGFrZUZvY3VzOnRvV0tGb2N1c0RpcmVj
dGlvbihkaXJlY3Rpb24pXTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTI5LDExNiArNTYz
LDE0NiBAQCBzdGF0aWMgX1dLQXV0b3BsYXlFdmVudCB0b1dLQXV0b3BsYXlFdmVudChXZWJDb3Jl
OjpBdXRvcGxheUV2ZW50IGV2ZW50KQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpoYW5k
bGVBdXRvcGxheUV2ZW50KFdlYlBhZ2VQcm94eSYsIFdlYkNvcmU6OkF1dG9wbGF5RXZlbnQgZXZl
bnQsIE9wdGlvblNldDxXZWJDb3JlOjpBdXRvcGxheUV2ZW50RmxhZ3M+IGZsYWdzKQogewotICAg
IGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdIYW5kbGVBdXRvcGxh
eUV2ZW50V2l0aEZsYWdzKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0hhbmRs
ZUF1dG9wbGF5RXZlbnRXaXRoRmxhZ3MpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBoYW5kbGVBdXRvcGxheUV2
ZW50OnRvV0tBdXRvcGxheUV2ZW50KGV2ZW50KSB3aXRoRmxhZ3M6dG9XS0F1dG9wbGF5RXZlbnRG
bGFncyhmbGFncyldOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGhhbmRsZUF1dG9wbGF5
RXZlbnQ6dG9XS0F1dG9wbGF5RXZlbnQoZXZlbnQpIHdpdGhGbGFnczp0b1dLQXV0b3BsYXlFdmVu
dEZsYWdzKGZsYWdzKV07CiB9CiAKICNpZiBQTEFURk9STShNQUMpCiBib29sIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpjYW5SdW5Nb2RhbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuTW9kYWw7CisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSdW5Nb2RhbDsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6cnVuTW9kYWwoV2ViUGFnZVByb3h5JikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0
ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuTW9kYWwpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3UnVuTW9kYWwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlld1J1bk1vZGFsOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3UnVuTW9kYWw6bV91aURlbGVn
YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiBmbG9hdCBVSURlbGVnYXRlOjpVSUNs
aWVudDo6aGVhZGVySGVpZ2h0KFdlYlBhZ2VQcm94eSYsIFdlYkZyYW1lUHJveHkmIHdlYkZyYW1l
UHJveHkpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0hlYWRlckhlaWdodCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0hlYWRl
ckhlaWdodCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3SGVhZGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIHJl
dHVybiBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0hlYWRlckhl
aWdodDptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIGZsb2F0IFVJ
RGVsZWdhdGU6OlVJQ2xpZW50Ojpmb290ZXJIZWlnaHQoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQ
cm94eSYpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0Zvb3RlckhlaWdodCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Zvb3Rl
ckhlaWdodCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgCi0gICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVn
YXRlIF93ZWJWaWV3Rm9vdGVySGVpZ2h0Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIHJl
dHVybiBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Zvb3Rlckhl
aWdodDptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlE
ZWxlZ2F0ZTo6VUlDbGllbnQ6OmRyYXdIZWFkZXIoV2ViUGFnZVByb3h5JiwgV2ViRnJhbWVQcm94
eSYgZnJhbWUsIFdlYkNvcmU6OkZsb2F0UmVjdCYmIHJlY3QpCiB7Ci0gICAgaWYgKCFtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RyYXdIZWFkZXJJblJlY3RGb3JQYWdlV2l0
aFRpdGxlVVJMKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RyYXdIZWFkZXJJ
blJlY3RGb3JQYWdlV2l0aFRpdGxlVVJMKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVs
ZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+
KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZHJhd0hlYWRlckluUmVj
dDpyZWN0IGZvclBhZ2VXaXRoVGl0bGU6ZnJhbWUudGl0bGUoKSBVUkw6ZnJhbWUudXJsKCldOwor
ICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRyYXdIZWFkZXJJblJlY3Q6cmVjdCBmb3JQYWdl
V2l0aFRpdGxlOmZyYW1lLnRpdGxlKCkgVVJMOmZyYW1lLnVybCgpXTsKIH0KIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6ZHJhd0Zvb3RlcihXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5
JiBmcmFtZSwgV2ViQ29yZTo6RmxvYXRSZWN0JiYgcmVjdCkKIHsKLSAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RHJhd0Zvb3RlckluUmVjdEZvclBhZ2VXaXRo
VGl0bGVVUkwpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RHJhd0Zvb3Rlcklu
UmVjdEZvclBhZ2VXaXRoVGl0bGVVUkwpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRv
IGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRl
KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkcmF3Rm9vdGVySW5SZWN0
OnJlY3QgZm9yUGFnZVdpdGhUaXRsZTpmcmFtZS50aXRsZSgpIFVSTDpmcmFtZS51cmwoKV07Cisg
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZHJhd0Zvb3RlckluUmVjdDpyZWN0IGZvclBhZ2VX
aXRoVGl0bGU6ZnJhbWUudGl0bGUoKSBVUkw6ZnJhbWUudXJsKCldOwogfQogCiB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpwYWdlRGlkU2Nyb2xsKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYg
KCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFNjcm9sbCkKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRTY3JvbGwpCiAgICAgICAgIHJldHVybjsK
ICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7
CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAg
ICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXdEaWRTY3JvbGw6bV91aURlbGVnYXRlLm1f
d2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXdEaWRTY3JvbGw6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2
b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpmb2N1cyhXZWJQYWdlUHJveHkqKQogewotICAgIGlm
ICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLmZvY3VzV2ViVmlldykKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUt
Pm1fZGVsZWdhdGVNZXRob2RzLmZvY3VzV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAot
ICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICgh
ZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPilkZWxlZ2F0ZSBfZm9jdXNXZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOwor
ICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF9mb2N1c1dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50Ojp1bmZvY3VzKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZU1ldGhvZHMudW5mb2N1c1dlYlZpZXcpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
TWV0aG9kcy51bmZvY3VzV2ViVmlldykKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVn
YXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUp
CiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfdW5mb2N1c1dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgWyhp
ZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3VuZm9jdXNXZWJWaWV3Om1fdWlEZWxl
Z2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogc3RhdGljIF9XS1BsdWdJblVuYXZh
aWxhYmlsaXR5UmVhc29uIHRvV0tQbHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvbihXS1BsdWdpblVu
YXZhaWxhYmlsaXR5UmVhc29uIHJlYXNvbikKQEAgLTY1NywxNCArNzIxLDE3IEBAIHN0YXRpYyBf
V0tQbHVnSW5VbmF2YWlsYWJpbGl0eVJlYXNvbiB0b1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFz
b24oV0tQbHVnaW5VbmF2CiAgICAgCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojp1bmF2YWls
YWJsZVBsdWdpbkJ1dHRvbkNsaWNrZWQoV2ViUGFnZVByb3h5JiwgV0tQbHVnaW5VbmF2YWlsYWJp
bGl0eVJlYXNvbiByZWFzb24sIEFQSTo6RGljdGlvbmFyeSYgcGx1Z0luSW5mbykKIHsKLSAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3VW5hdmFpbGFibGVQbHVn
SW5CdXR0b25DbGlja2VkKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1VuYXZh
aWxhYmxlUGx1Z0luQnV0dG9uQ2xpY2tlZCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1
dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdh
dGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgdW5hdmFpbGFibGVQbHVnSW5C
dXR0b25DbGlja2VkV2l0aFJlYXNvbjp0b1dLUGx1Z0luVW5hdmFpbGFiaWxpdHlSZWFzb24ocmVh
c29uKSBwbHVnSW5JbmZvOndyYXBwZXIocGx1Z0luSW5mbyldOworICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3Lmdl
dCgpLmdldCgpIHVuYXZhaWxhYmxlUGx1Z0luQnV0dG9uQ2xpY2tlZFdpdGhSZWFzb246dG9XS1Bs
dWdJblVuYXZhaWxhYmlsaXR5UmVhc29uKHJlYXNvbikgcGx1Z0luSW5mbzp3cmFwcGVyKHBsdWdJ
bkluZm8pXTsKIH0KICAgICAKIHN0YXRpYyBfV0tSZXNvdXJjZUxpbWl0IHRvV0tSZXNvdXJjZUxp
bWl0KFdLUmVzb3VyY2VMaW1pdCBsaW1pdCkKQEAgLTY4MSw2MiArNzQ4LDc3IEBAIHN0YXRpYyBf
V0tSZXNvdXJjZUxpbWl0IHRvV0tSZXNvdXJjZUxpbWl0KFdLUmVzb3VyY2VMaW1pdCBsaW1pdCkK
IAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNl
TGltaXRXaGlsZUluRm9yZWdyb3VuZChXZWJQYWdlUHJveHkmLCBXS1Jlc291cmNlTGltaXQgbGlt
aXQpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rp
ZEV4Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQpCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkRXhjZWVkQmFja2dyb3VuZFJlc291cmNlTGlt
aXRXaGlsZUluRm9yZWdyb3VuZCkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVs
ZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRl
ID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkaWRFeGNl
ZWRCYWNrZ3JvdW5kUmVzb3VyY2VMaW1pdFdoaWxlSW5Gb3JlZ3JvdW5kOnRvV0tSZXNvdXJjZUxp
bWl0KGxpbWl0KV07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4o
ZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRp
ZEV4Y2VlZEJhY2tncm91bmRSZXNvdXJjZUxpbWl0V2hpbGVJbkZvcmVncm91bmQ6dG9XS1Jlc291
cmNlTGltaXQobGltaXQpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90
SGFuZGxlV2hlZWxFdmVudChXZWJQYWdlUHJveHkqLCBjb25zdCBOYXRpdmVXZWJXaGVlbEV2ZW50
JiBldmVudCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3RGlkTm90SGFuZGxlV2hlZWxFdmVudCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdEaWROb3RIYW5kbGVXaGVlbEV2ZW50KQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxl
Z2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkTm90SGFuZGxl
V2hlZWxFdmVudDpldmVudC5uYXRpdmVFdmVudCgpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5n
ZXQoKSBkaWROb3RIYW5kbGVXaGVlbEV2ZW50OmV2ZW50Lm5hdGl2ZUV2ZW50KCldOwogfQogCiB2
b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzZXRJc1Jlc2l6YWJsZShXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYsIGJvb2wgcmVzaXphYmxlKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdTZXRSZXNpemFibGUpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3U2V0UmVzaXphYmxlKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdh
dGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgc2V0UmVzaXphYmxlOnJlc2l6
YWJsZV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6
bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgc2V0UmVzaXphYmxlOnJlc2l6YWJs
ZV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNldFdpbmRvd0ZyYW1lKFdlYktp
dDo6V2ViUGFnZVByb3h5JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiBmcmFtZSkKIHsKLSAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2V0V2luZG93RnJh
bWUpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2V0V2luZG93RnJhbWUpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1f
ZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxl
Z2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyBzZXRXaW5kb3dGcmFtZTpmcmFtZV07CisgICAgWyhpZCA8V0tVSURlbGVn
YXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCkgc2V0V2luZG93RnJhbWU6ZnJhbWVdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJ
Q2xpZW50Ojp3aW5kb3dGcmFtZShXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIEZ1bmN0aW9uPHZvaWQo
V2ViQ29yZTo6RmxvYXRSZWN0KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBpZiAoIW1f
dWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3R2V0V2luZG93RnJhbWVXaXRoQ29t
cGxldGlvbkhhbmRsZXIpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcih7IH0pOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdHZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcikKICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgCi0gICAgYXV0byBkZWxl
Z2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUg
PSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAg
ICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgCi0gICAgWyhpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmll
dyBnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBDb21w
bGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rv
cihfd2ViVmlldzpnZXRXaW5kb3dGcmFtZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQ0dSZWN0
IGZyYW1lKSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZ2V0V2luZG93RnJhbWVXaXRo
Q29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hl
Y2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dlYlZpZXc6Z2V0V2luZG93
RnJhbWVXaXRoQ29tcGxldGlvbkhhbmRsZXI6KSldKENHUmVjdCBmcmFtZSkgewogICAgICAgICBp
ZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpA
QCAtNzQ2LDI3ICs4MjgsMzMgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6d2luZG93RnJh
bWUoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKFdlYkMKIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoV2ViUGFnZVByb3h5Jiwg
Y29uc3QgV2ViSGl0VGVzdFJlc3VsdERhdGEmIGRhdGEsIE9wdGlvblNldDxXZWJFdmVudDo6TW9k
aWZpZXI+IG1vZGlmaWVycywgQVBJOjpPYmplY3QqIHVzZXJJbmZvKQogewotICAgIGlmICghbV91
aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdNb3VzZURpZE1vdmVPdmVyRWxlbWVu
dFdpdGhGbGFnc1VzZXJJbmZvKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld01v
dXNlRGlkTW92ZU92ZXJFbGVtZW50V2l0aEZsYWdzVXNlckluZm8pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlm
ICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gYXBpSGl0VGVzdFJlc3Vs
dCA9IEFQSTo6SGl0VGVzdFJlc3VsdDo6Y3JlYXRlKGRhdGEpOwotICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRo
RmxhZ3M6V2ViRXZlbnRGYWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykg
dXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2Vy
SW5mby0+d3JhcHBlcigpKSA6IG5pbF07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgbW91
c2VEaWRNb3ZlT3ZlckVsZW1lbnQ6d3JhcHBlcihhcGlIaXRUZXN0UmVzdWx0LmdldCgpKSB3aXRo
RmxhZ3M6V2ViRXZlbnRGYWN0b3J5Ojp0b05TRXZlbnRNb2RpZmllckZsYWdzKG1vZGlmaWVycykg
dXNlckluZm86dXNlckluZm8gPyBzdGF0aWNfY2FzdDxpZCA8TlNTZWN1cmVDb2Rpbmc+Pih1c2Vy
SW5mby0+d3JhcHBlcigpKSA6IG5pbF07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6
OnRvb2xiYXJzQXJlVmlzaWJsZShXZWJQYWdlUHJveHkmLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdHZXRUb29sYmFyc0FyZVZpc2libGVXaXRoQ29tcGxldGlvbkhhbmRsZXIp
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxl
cih0cnVlKTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJW
aWV3R2V0VG9vbGJhcnNBcmVWaXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIodHJ1ZSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxl
Z2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZ2V0
VG9vbGJhcnNBcmVWaXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENv
bXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVj
dG9yKF93ZWJWaWV3OmdldFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjop
KV0oQk9PTCB2aXNpYmxlKSB7CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdh
dGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgZ2V0VG9vbGJh
cnNBcmVWaXNpYmxlV2l0aENvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IENvbXBsZXRp
b25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93
ZWJWaWV3OmdldFRvb2xiYXJzQXJlVmlzaWJsZVdpdGhDb21wbGV0aW9uSGFuZGxlcjopKV0oQk9P
TCB2aXNpYmxlKSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0Jl
ZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2Fs
bENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC03NzYsNTEgKzg2NCw2MyBAQCB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50Ojp0b29sYmFyc0FyZVZpc2libGUoV2ViUGFnZVByb3h5JiwgRnVuY3Rpb248
dm9pZChib29sKQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRDbGlja0F1dG9GaWxs
QnV0dG9uKFdlYlBhZ2VQcm94eSYsIEFQSTo6T2JqZWN0KiB1c2VySW5mbykKIHsKLSAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkQ2xpY2tBdXRvRmlsbEJ1
dHRvbldpdGhVc2VySW5mbykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRD
bGlja0F1dG9GaWxsQnV0dG9uV2l0aFVzZXJJbmZvKQogICAgICAgICByZXR1cm47CiAgICAgCi0g
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1
dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFk
ZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVBy
aXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgZGlkQ2xpY2tB
dXRvRmlsbEJ1dHRvbldpdGhVc2VySW5mbzp1c2VySW5mbyA/IHN0YXRpY19jYXN0PGlkIDxOU1Nl
Y3VyZUNvZGluZz4+KHVzZXJJbmZvLT53cmFwcGVyKCkpIDogbmlsXTsKKyAgICBbKGlkIDxXS1VJ
RGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmll
dy5nZXQoKS5nZXQoKSBkaWRDbGlja0F1dG9GaWxsQnV0dG9uV2l0aFVzZXJJbmZvOnVzZXJJbmZv
ID8gc3RhdGljX2Nhc3Q8aWQgPE5TU2VjdXJlQ29kaW5nPj4odXNlckluZm8tPndyYXBwZXIoKSkg
OiBuaWxdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG93UGFnZShXZWJQYWdl
UHJveHkqKQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLnNob3dX
ZWJWaWV3KQorICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLnNob3dXZWJWaWV3KQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgp
OwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfc2hvd1dlYlZpZXc6bV91aURlbGVnYXRlLm1f
d2ViVmlld107CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3Nob3dX
ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KICAgICAKIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnNhdmVEYXRhVG9GaWxlSW5Eb3dubG9hZHNGb2xkZXIo
V2ViUGFnZVByb3h5KiwgY29uc3QgV1RGOjpTdHJpbmcmIHN1Z2dlc3RlZEZpbGVuYW1lLCBjb25z
dCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGNvbnN0IFVSTCYgb3JpZ2luYXRpbmdVUkwsIEFQSTo6
RGF0YSYgZGF0YSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3U2F2ZURhdGFUb0ZpbGVTdWdnZXN0ZWRGaWxlbmFtZU1pbWVUeXBlT3JpZ2luYXRpbmdV
UkwpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2F2ZURhdGFUb0ZpbGVTdWdn
ZXN0ZWRGaWxlbmFtZU1pbWVUeXBlT3JpZ2luYXRpbmdVUkwpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBp
ZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHNhdmVEYXRh
VG9GaWxlOndyYXBwZXIoZGF0YSkgc3VnZ2VzdGVkRmlsZW5hbWU6c3VnZ2VzdGVkRmlsZW5hbWUg
bWltZVR5cGU6bWltZVR5cGUgb3JpZ2luYXRpbmdVUkw6b3JpZ2luYXRpbmdVUkxdOworICAgIFso
aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+
bV93ZWJWaWV3LmdldCgpLmdldCgpIHNhdmVEYXRhVG9GaWxlOndyYXBwZXIoZGF0YSkgc3VnZ2Vz
dGVkRmlsZW5hbWU6c3VnZ2VzdGVkRmlsZW5hbWUgbWltZVR5cGU6bWltZVR5cGUgb3JpZ2luYXRp
bmdVUkw6b3JpZ2luYXRpbmdVUkxdOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50Ojpk
ZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJLaXQ6OldlYlBh
Z2VQcm94eSYsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBXVEY6OkZ1bmN0
aW9uPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFtX3VpRGVs
ZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNz
aW9uRm9yU2VjdXJpdHlPcmlnaW5EZWNpc2lvbkhhbmRsZXIpCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CisKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3ROb3RpZmljYXRp
b25QZXJtaXNzaW9uRm9yU2VjdXJpdHlPcmlnaW5EZWNpc2lvbkhhbmRsZXIpCiAgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAgICAgCi0gICAgYXV0byBkZWxlZ2F0ZSA9
IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGZhbHNlKTsKIAogICAgIGF1dG8gY2hlY2tlciA9IENv
bXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVj
dG9yKF93ZWJWaWV3OnJlcXVlc3ROb3RpZmljYXRpb25QZXJtaXNzaW9uRm9yU2VjdXJpdHlPcmln
aW46ZGVjaXNpb25IYW5kbGVyOikpOwotICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgcmVxdWVzdE5vdGlmaWNhdGlv
blBlcm1pc3Npb25Gb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKHNlY3VyaXR5T3JpZ2luKSBkZWNp
c2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgcmVzdWx0
KSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZXF1ZXN0Tm90aWZpY2F0
aW9uUGVybWlzc2lvbkZvclNlY3VyaXR5T3JpZ2luOndyYXBwZXIoc2VjdXJpdHlPcmlnaW4pIGRl
Y2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1
bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNC
ZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENh
bGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtODMwLDQ2ICs5MzAsNTggQEAgdm9pZCBVSURlbGVn
YXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QoV2ViS2l0OjoKIAogUmVmPEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbj4gVUlEZWxlZ2F0
ZTo6VUlDbGllbnQ6OmNvbmZpZ3VyYXRpb25Gb3JMb2NhbEluc3BlY3RvcihXZWJQYWdlUHJveHkm
LCBXZWJJbnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKQogewotICAgIGlmICghbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdDb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3Ip
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybiBBUEk6Okluc3BlY3RvckNv
bmZpZ3VyYXRpb246OmNyZWF0ZSgpOworCisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdh
dGVNZXRob2RzLndlYlZpZXdDb25maWd1cmF0aW9uRm9yTG9jYWxJbnNwZWN0b3IpCiAgICAgICAg
IHJldHVybiBBUEk6Okluc3BlY3RvckNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpOwogCi0gICAgYXV0
byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVs
ZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuIEFQSTo6SW5zcGVjdG9yQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7
CiAKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QVBJOjpJbnNwZWN0b3JDb25maWd1cmF0aW9uJj4o
W1soaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS5tX3dlYlZpZXcgY29uZmlndXJhdGlvbkZvckxvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVj
dG9yKV0gX2FwaU9iamVjdF0pOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUEk6Okluc3BlY3Rv
ckNvbmZpZ3VyYXRpb24mPihbWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dl
YlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY29uZmlndXJhdGlvbkZv
ckxvY2FsSW5zcGVjdG9yOndyYXBwZXIoaW5zcGVjdG9yKV0gX2FwaU9iamVjdF0pOwogfQogCiB2
b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRBdHRhY2hMb2NhbEluc3BlY3RvcihXZWJQYWdl
UHJveHkmLCBXZWJJbnNwZWN0b3JQcm94eSYgaW5zcGVjdG9yKQogewotICAgIGlmICghbV91aURl
bGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRBdHRhY2hMb2NhbEluc3BlY3RvcikK
KyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRBdHRhY2hMb2NhbEluc3BlY3Rv
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVs
ZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
Lm1fd2ViVmlldyBkaWRBdHRhY2hMb2NhbEluc3BlY3Rvcjp3cmFwcGVyKGluc3BlY3RvcildOwor
ICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxl
Z2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGRpZEF0dGFjaExvY2FsSW5zcGVjdG9yOndyYXBw
ZXIoaW5zcGVjdG9yKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OndpbGxDbG9z
ZUxvY2FsSW5zcGVjdG9yKFdlYlBhZ2VQcm94eSYsIFdlYkluc3BlY3RvclByb3h5JiBpbnNwZWN0
b3IpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1dp
bGxDbG9zZUxvY2FsSW5zcGVjdG9yKQorICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d1dpbGxDbG9zZUxvY2FsSW5zcGVjdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRl
bGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHdpbGxDbG9zZUxvY2FsSW5zcGVjdG9y
OndyYXBwZXIoaW5zcGVjdG9yKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVs
ZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgd2lsbENs
b3NlTG9jYWxJbnNwZWN0b3I6d3JhcHBlcihpbnNwZWN0b3IpXTsKIH0KIAogYm9vbCBVSURlbGVn
YXRlOjpVSUNsaWVudDo6cnVuT3BlblBhbmVsKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQ
cm94eSogd2ViRnJhbWVQcm94eSwgRnJhbWVJbmZvRGF0YSYmIGZyYW1lSW5mbywgQVBJOjpPcGVu
UGFuZWxQYXJhbWV0ZXJzKiBvcGVuUGFuZWxQYXJhbWV0ZXJzLCBXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lclByb3h5KiBsaXN0ZW5lcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3UnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnNJbml0aWF0ZWRCeUZy
YW1lQ29tcGxldGlvbkhhbmRsZXIpCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53
ZWJWaWV3UnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnNJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURl
bGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtODc3LDcgKzk4OSw3IEBAIGJvb2wgVUlEZWxlZ2F0ZTo6VUlDbGll
bnQ6OnJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkmIHBhZ2UsIFdlYkZyYW1lUHJveHkqIHdlYkZy
CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVh
dGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcih3ZWJWaWV3OnJ1bk9wZW5QYW5lbFdpdGhQYXJh
bWV0ZXJzOmluaXRpYXRlZEJ5RnJhbWU6Y29tcGxldGlvbkhhbmRsZXI6KSk7CiAKLSAgICBbZGVs
ZWdhdGUgd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHJ1bk9wZW5QYW5lbFdpdGhQYXJh
bWV0ZXJzOndyYXBwZXIoKm9wZW5QYW5lbFBhcmFtZXRlcnMpIGluaXRpYXRlZEJ5RnJhbWU6d3Jh
cHBlcihmcmFtZSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjaGVja2VyID0gV1RG
TW92ZShjaGVja2VyKSwgb3BlblBhbmVsUGFyYW1ldGVycyA9IG1ha2VSZWYoKm9wZW5QYW5lbFBh
cmFtZXRlcnMpLCBsaXN0ZW5lciA9IG1ha2VSZWZQdHIobGlzdGVuZXIpXSAoTlNBcnJheSAqVVJM
cykgbXV0YWJsZSB7CisgICAgW2RlbGVnYXRlIHdlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZp
ZXcuZ2V0KCkuZ2V0KCkgcnVuT3BlblBhbmVsV2l0aFBhcmFtZXRlcnM6d3JhcHBlcigqb3BlblBh
bmVsUGFyYW1ldGVycykgaW5pdGlhdGVkQnlGcmFtZTp3cmFwcGVyKGZyYW1lKSBjb21wbGV0aW9u
SGFuZGxlcjptYWtlQmxvY2tQdHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBvcGVuUGFu
ZWxQYXJhbWV0ZXJzID0gbWFrZVJlZigqb3BlblBhbmVsUGFyYW1ldGVycyksIGxpc3RlbmVyID0g
bWFrZVJlZlB0cihsaXN0ZW5lcildIChOU0FycmF5ICpVUkxzKSBtdXRhYmxlIHsKICAgICAgICAg
aWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsK
QEAgLTkwMSwxNyArMTAxMywyMCBAQCBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpydW5PcGVu
UGFuZWwoV2ViUGFnZVByb3h5JiBwYWdlLCBXZWJGcmFtZVByb3h5KiB3ZWJGcgogI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRB
bGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzKFdlYktpdDo6V2ViUGFnZVByb3h5
JiBwYWdlLCBXZWJGcmFtZVByb3h5JiB3ZWJGcmFtZVByb3h5LCBGcmFtZUluZm9EYXRhJiYgZnJh
bWVJbmZvLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91
bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZURl
Y2lzaW9uSGFuZGxlcikgewotICAgICAgICBwcmVzZW50T3JpZW50YXRpb25BY2Nlc3NBbGVydCht
X3VpRGVsZWdhdGUubV93ZWJWaWV3LCBmcmFtZUluZm8uc2VjdXJpdHlPcmlnaW4uaG9zdCwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoZmFsc2UpOworCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9u
QW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZURlY2lzaW9uSGFuZGxlcikgeworICAgICAg
ICBwcmVzZW50T3JpZW50YXRpb25BY2Nlc3NBbGVydChtX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5n
ZXQoKS5nZXQoKSwgZnJhbWVJbmZvLnNlY3VyaXR5T3JpZ2luLmhvc3QsIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gZGVsZWdh
dGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0g
bV91aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihmYWxzZSk7CiAKICAgICBhdXRvIGNoZWNrZXIg
PSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBz
ZWxlY3Rvcihfd2ViVmlldzpzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzUmVxdWVzdGVkQnlGcmFtZTpkZWNpc2lvbkhhbmRsZXI6KSk7Ci0gICAgWyhpZCA8V0tVSURl
bGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBz
aG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFt
ZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFn
ZSkpIGRlY2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9P
TCBncmFudGVkKSBtdXRhYmxlIHsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBzaG91bGRB
bGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNjZXNzUmVxdWVzdGVkQnlGcmFtZTp3cmFw
cGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGRl
Y2lzaW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCBncmFu
dGVkKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFz
QmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRD
YWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTkyMiwxNyArMTAzNywyMyBAQCB2b2lkIFVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRBbGxvd0RldmljZU9yaWVudGF0aW9uQW5kTW90aW9uQWNj
ZXNzKFdlYktpdDo6VwogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpkaWRDaGFuZ2VGb250
QXR0cmlidXRlcyhjb25zdCBXZWJDb3JlOjpGb250QXR0cmlidXRlcyYgZm9udEF0dHJpYnV0ZXMp
CiB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmICgh
bmVlZHNGb250QXR0cmlidXRlcygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHByaXZh
dGVVSURlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZS5nZXQoKTsKLSAgICBbcHJpdmF0ZVVJRGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyBkaWRDaGFuZ2VGb250QXR0cmlidXRlczpmb250QXR0cmlidXRlcy5jcmVh
dGVEaWN0aW9uYXJ5KCkuZ2V0KCldOworICAgIGF1dG8gcHJpdmF0ZVVJRGVsZWdhdGUgPSAoaWQg
PFdLVUlEZWxlZ2F0ZVByaXZhdGU+KW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKKyAg
ICBbcHJpdmF0ZVVJRGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCkgZGlkQ2hhbmdlRm9udEF0dHJpYnV0ZXM6Zm9udEF0dHJpYnV0ZXMuY3JlYXRlRGlj
dGlvbmFyeSgpLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRl
UG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3h5JiBwYWdlLCBX
ZWJGcmFtZVByb3h5JiBmcmFtZSwgQVBJOjpTZWN1cml0eU9yaWdpbiYgdXNlck1lZGlhT3JpZ2lu
LCBBUEk6OlNlY3VyaXR5T3JpZ2luJiB0b3BMZXZlbE9yaWdpbiwgVXNlck1lZGlhUGVybWlzc2lv
blJlcXVlc3RQcm94eSYgcmVxdWVzdCkKIHsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAg
IGF1dG8gZGVsZWdhdGUgPSAoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KW1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlLmdldCgpOworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGRlbGVnYXRlID0gKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPiltX3VpRGVs
ZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkgewogICAgICAgICBy
ZXF1ZXN0LmRvRGVmYXVsdEFjdGlvbigpOwogICAgICAgICByZXR1cm47CkBAIC05NzMsMjEgKzEw
OTQsMjQgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3QoV2ViUGFnZVByb3gKIAogICAgIC8vIEZJWE1FOiBQcm92aWRl
IGEgc3BlY2lmaWMgZGVsZWdhdGUgZm9yIGRpc3BsYXkgY2FwdHVyZS4KICAgICBpZiAoIXJlcXVl
c3QucmVxdWlyZXNEaXNwbGF5Q2FwdHVyZSgpICYmIHJlc3BvbmRzVG9SZXF1ZXN0TWVkaWFDYXB0
dXJlQXV0aG9yaXphdGlvbikgewotICAgICAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVn
YXRlLm1fd2ViVmlldyByZXF1ZXN0TWVkaWFDYXB0dXJlQXV0aG9yaXphdGlvbjpkZXZpY2VzIGRl
Y2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOworICAgICAgICBbZGVsZWdhdGUg
X3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcmVxdWVzdE1lZGlh
Q2FwdHVyZUF1dGhvcml6YXRpb246ZGV2aWNlcyBkZWNpc2lvbkhhbmRsZXI6ZGVjaXNpb25IYW5k
bGVyLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFVSTCByZXF1ZXN0RnJh
bWVVUkwgeyBmcmFtZS51cmwoKSB9OwogICAgIFVSTCBtYWluRnJhbWVVUkwgeyBmcmFtZS5wYWdl
KCktPm1haW5GcmFtZSgpLT51cmwoKSB9OwogCi0gICAgW2RlbGVnYXRlIF93ZWJWaWV3Om1fdWlE
ZWxlZ2F0ZS5tX3dlYlZpZXcgcmVxdWVzdFVzZXJNZWRpYUF1dGhvcml6YXRpb25Gb3JEZXZpY2Vz
OmRldmljZXMgdXJsOnJlcXVlc3RGcmFtZVVSTCBtYWluRnJhbWVVUkw6bWFpbkZyYW1lVVJMIGRl
Y2lzaW9uSGFuZGxlcjpkZWNpc2lvbkhhbmRsZXIuZ2V0KCldOworICAgIFtkZWxlZ2F0ZSBfd2Vi
VmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSByZXF1ZXN0VXNlck1lZGlh
QXV0aG9yaXphdGlvbkZvckRldmljZXM6ZGV2aWNlcyB1cmw6cmVxdWVzdEZyYW1lVVJMIG1haW5G
cmFtZVVSTDptYWluRnJhbWVVUkwgZGVjaXNpb25IYW5kbGVyOmRlY2lzaW9uSGFuZGxlci5nZXQo
KV07CiAjZW5kaWYKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y2hlY2tVc2VyTWVk
aWFQZXJtaXNzaW9uRm9yT3JpZ2luKFdlYlBhZ2VQcm94eSYgcGFnZSwgV2ViRnJhbWVQcm94eSYg
ZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIHVzZXJNZWRpYU9yaWdpbiwgQVBJOjpTZWN1cml0
eU9yaWdpbiYgdG9wTGV2ZWxPcmlnaW4sIFVzZXJNZWRpYVBlcm1pc3Npb25DaGVja1Byb3h5JiBy
ZXF1ZXN0KQogewotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5n
ZXQoKTsKLSAgICBpZiAoIWRlbGVnYXRlIHx8ICFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhv
ZHMud2ViVmlld0lzTWVkaWFDYXB0dXJlQXV0aG9yaXplZEZvckZyYW1lRGVjaXNpb25IYW5kbGVy
KSB7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8g
ZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFkZWxl
Z2F0ZSB8fCAhbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SXNNZWRpYUNh
cHR1cmVBdXRob3JpemVkRm9yRnJhbWVEZWNpc2lvbkhhbmRsZXIpIHsKICAgICAgICAgcmVxdWVz
dC5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTEwMDQsNyArMTEyOCw3IEBAIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNoZWNrVXNl
ck1lZGlhUGVybWlzc2lvbkZvck9yaWdpbihXZWJQYWdlUHJveHkmIHBhZ2UsCiAgICAgICAgICAg
ICBwcm90ZWN0ZWRSZXF1ZXN0LT5zZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKGluY2x1ZGVTZW5zaXRp
dmVEZXRhaWxzKTsKICAgICAgICAgfSk7CiAKLSAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJp
dmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBpbmNsdWRlU2Vu
c2l0aXZlTWVkaWFEZXZpY2VEZXRhaWxzOmRlY2lzaW9uSGFuZGxlci5nZXQoKV07CisgICAgICAg
IFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0
ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIGluY2x1ZGVTZW5zaXRpdmVNZWRpYURldmljZURldGFp
bHM6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MTAyMCwzMCArMTE0NCwzNiBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpjaGVja1VzZXJN
ZWRpYVBlcm1pc3Npb25Gb3JPcmlnaW4oV2ViUGFnZVByb3h5JiBwYWdlLAogICAgIFVSTCByZXF1
ZXN0RnJhbWVVUkwgeyBmcmFtZS51cmwoKSB9OwogICAgIFVSTCBtYWluRnJhbWVVUkwgeyBtYWlu
RnJhbWUtPnVybCgpIH07CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0
ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNoZWNrVXNlck1lZGlhUGVybWlzc2lv
bkZvclVSTDpyZXF1ZXN0RnJhbWVVUkwgbWFpbkZyYW1lVVJMOm1haW5GcmFtZVVSTCBmcmFtZUlk
ZW50aWZpZXI6ZnJhbWUuZnJhbWVJRCgpLnRvVUludDY0KCkgZGVjaXNpb25IYW5kbGVyOmRlY2lz
aW9uSGFuZGxlci5nZXQoKV07CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdh
dGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgY2hlY2tVc2Vy
TWVkaWFQZXJtaXNzaW9uRm9yVVJMOnJlcXVlc3RGcmFtZVVSTCBtYWluRnJhbWVVUkw6bWFpbkZy
YW1lVVJMIGZyYW1lSWRlbnRpZmllcjpmcmFtZS5mcmFtZUlEKCkudG9VSW50NjQoKSBkZWNpc2lv
bkhhbmRsZXI6ZGVjaXNpb25IYW5kbGVyLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpV
SUNsaWVudDo6bWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6TWVkaWFQcm9kdWNl
cjo6TWVkaWFTdGF0ZUZsYWdzIHN0YXRlKQogewotICAgIFdLV2ViVmlldyAqd2ViVmlldyA9IG1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXc7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gd2ViVmlldyA9IG1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3OwogCiAg
ICAgW3dlYlZpZXcgZGlkQ2hhbmdlVmFsdWVGb3JLZXk6QCJtZWRpYUNhcHR1cmVTdGF0ZSJdOwog
Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOwotICAg
IGlmICghZGVsZWdhdGUgfHwgIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
TWVkaWFDYXB0dXJlU3RhdGVEaWRDaGFuZ2UpCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAoIWRlbGVnYXRlIHx8ICFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdNZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdh
dGUgX3dlYlZpZXc6d2ViVmlldyBtZWRpYUNhcHR1cmVTdGF0ZURpZENoYW5nZTp0b1dLTWVkaWFD
YXB0dXJlU3RhdGUoc3RhdGUpXTsKKyAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzp3ZWJWaWV3LmdldCgpLmdldCgpIG1lZGlhQ2FwdHVyZVN0YXRlRGlkQ2hh
bmdlOnRvV0tNZWRpYUNhcHR1cmVTdGF0ZShzdGF0ZSldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6
OlVJQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYlBhZ2VQcm94
eSosIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9yaWdpbiwgdWludDY0
X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCB0b3RhbEJ5dGVzTmVlZGVkLCBGdW5jdGlvbjx2b2lk
ICh1bnNpZ25lZCBsb25nIGxvbmcpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIGlmICgh
bV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVXZWJBcHBsaWNhdGlv
bkNhY2hlUXVvdGFGb3JTZWN1cml0eU9yaWdpbkN1cnJlbnRRdW90YVRvdGFsQnl0ZXNOZWVkZWQp
IHsKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKGN1cnJlbnRRdW90YSk7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1l
dGhvZHMud2ViVmlld0RlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5T3Jp
Z2luQ3VycmVudFF1b3RhVG90YWxCeXRlc05lZWRlZCkgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihjdXJyZW50UXVvdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGF1dG8gZGVsZWdh
dGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkg
ewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50UXVvdGEpOwogICAgICAgICByZXR1
cm47CkBAIC0xMDUyLDcgKzExODIsNyBAQCB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpyZWFj
aGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKFdlYlBhZ2VQcm94eSosIGNvbgogICAgIGF1
dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0
ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90
YUZvclNlY3VyaXR5T3JpZ2luOmN1cnJlbnRRdW90YTp0b3RhbEJ5dGVzTmVlZGVkOmRlY2lzaW9u
SGFuZGxlcjopKTsKICAgICBhdXRvIGFwaU9yaWdpbiA9IEFQSTo6U2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZShzZWN1cml0eU9yaWdpbik7CiAgICAgCi0gICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkZWNpZGVXZWJBcHBs
aWNhdGlvbkNhY2hlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjp3cmFwcGVyKGFwaU9yaWdpbi5nZXQo
KSkgY3VycmVudFF1b3RhOmN1cnJlbnRRdW90YSB0b3RhbEJ5dGVzTmVlZGVkOnRvdGFsQnl0ZXNO
ZWVkZWQgZGVjaXNpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKHVu
c2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSkgeworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IGRlY2lkZVdlYkFwcGxpY2F0aW9uQ2FjaGVRdW90YUZvclNlY3VyaXR5T3JpZ2luOndyYXBwZXIo
YXBpT3JpZ2luLmdldCgpKSBjdXJyZW50UXVvdGE6Y3VycmVudFF1b3RhIHRvdGFsQnl0ZXNOZWVk
ZWQ6dG90YWxCeXRlc05lZWRlZCBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBjaGVja2VyID0gV1RGTW92
ZShjaGVja2VyKV0odW5zaWduZWQgbG9uZyBsb25nIG5ld1F1b3RhKSB7CiAgICAgICAgIGlmIChj
aGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CkBAIC0x
MDYyLDE2NSArMTE5MiwyMDAgQEAgdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cmVhY2hlZEFw
cGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXZWJQYWdlUHJveHkqLCBjb24KIAogdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6cHJpbnRGcmFtZShXZWJQYWdlUHJveHkmLCBXZWJGcmFtZVByb3h5
JiB3ZWJGcmFtZVByb3h5LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdl
dCgpOworICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhh
bmRsZXIoKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUu
Z2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5k
bGVyKCk7CiAKICAgICBhdXRvIGhhbmRsZSA9IEFQSTo6RnJhbWVIYW5kbGU6OmNyZWF0ZSh3ZWJG
cmFtZVByb3h5LmZyYW1lSUQoKSk7Ci0gICAgaWYgKG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0
aG9kcy53ZWJWaWV3UHJpbnRGcmFtZUNvbXBsZXRpb25IYW5kbGVyKSB7CisgICAgaWYgKG1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1ByaW50RnJhbWVDb21wbGV0aW9uSGFu
ZGxlcikgewogICAgICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNhbGxDaGVj
a2VyOjpjcmVhdGUoZGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihfd2ViVmlldzpwcmludEZyYW1l
OmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRl
PilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6d3Jh
cHBlcihoYW5kbGUpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY2hlY2tlciA9IFdU
Rk1vdmUoY2hlY2tlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildICgpIG11dGFibGUgeworICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilk
ZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBwcmlu
dEZyYW1lOndyYXBwZXIoaGFuZGxlKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2No
ZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChjaGVja2VyLT5j
b21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBjaGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiAgICAgICAgIH0pLmdldCgpXTsKICAgICAgICAg
cmV0dXJuOwotICAgIH0gZWxzZSBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndl
YlZpZXdQcmludEZyYW1lKQotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxl
Z2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUubV93ZWJWaWV3IHByaW50RnJhbWU6d3JhcHBlciho
YW5kbGUpXTsKKyAgICB9CisKKyAgICBpZiAobV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9k
cy53ZWJWaWV3UHJpbnRGcmFtZSkKKyAgICAgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4p
ZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcHJp
bnRGcmFtZTp3cmFwcGVyKGhhbmRsZSldOwogICAgIGNvbXBsZXRpb25IYW5kbGVyKCk7CiB9CiAK
IHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmNsb3NlKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAg
aWYgKG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q2xvc2UpIHsKLSAgICAg
ICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgpOworICAgIGlm
ICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3Q2xvc2UpIHsKKyAgICAgICAgYXV0byBkZWxlZ2F0
ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICAgICAgaWYgKCFkZWxlZ2F0
ZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2
YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Nsb3NlOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAg
ICAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Nsb3NlOm1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRD
bG9zZSkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Rp
ZENsb3NlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+
bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBbZGVsZWdhdGUgd2ViVmlld0RpZENsb3NlOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOwor
ICAgIFtkZWxlZ2F0ZSB3ZWJWaWV3RGlkQ2xvc2U6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0
KCkuZ2V0KCldOwogfQogCiB2b2lkIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpmdWxsc2NyZWVuTWF5
UmV0dXJuVG9JbmxpbmUoV2ViUGFnZVByb3h5KikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RnVsbHNjcmVlbk1heVJldHVyblRvSW5saW5lKQorICAg
IGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0Z1bGxzY3JlZW5NYXlSZXR1cm5Ub0lubGlu
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdh
dGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Z1bGxz
Y3JlZW5NYXlSZXR1cm5Ub0lubGluZTptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlk
IDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Z1bGxzY3JlZW5NYXlSZXR1
cm5Ub0lubGluZTptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZv
aWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRpZEVudGVyRnVsbHNjcmVlbihXZWJQYWdlUHJveHkq
KQogewotICAgIGlmICghbV91aURlbGVnYXRlLm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRF
bnRlckZ1bGxzY3JlZW4pCisgICAgaWYgKCFtX3VpRGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEVudGVyRnVs
bHNjcmVlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBbKGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0Rp
ZEVudGVyRnVsbHNjcmVlbjptX3VpRGVsZWdhdGUubV93ZWJWaWV3XTsKKyAgICBbKGlkIDxXS1VJ
RGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZEVudGVyRnVsbHNjcmVlbjptX3Vp
RGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgVUlEZWxlZ2F0ZTo6
VUlDbGllbnQ6OmRpZEV4aXRGdWxsc2NyZWVuKFdlYlBhZ2VQcm94eSopCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuKQor
ICAgIGlmICghbV91aURlbGVnYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdh
dGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5n
ZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBbKGlkIDxX
S1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlld0RpZEV4aXRGdWxsc2NyZWVuOm1f
dWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+KWRl
bGVnYXRlIF93ZWJWaWV3RGlkRXhpdEZ1bGxzY3JlZW46bV91aURlbGVnYXRlLT5tX3dlYlZpZXcu
Z2V0KCkuZ2V0KCldOwogfQogICAgIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaWYgSEFW
RShBUFBfTElOS1MpCiBib29sIFVJRGVsZWdhdGU6OlVJQ2xpZW50OjpzaG91bGRJbmNsdWRlQXBw
TGlua0FjdGlvbnNGb3JFbGVtZW50KF9XS0FjdGl2YXRlZEVsZW1lbnRJbmZvICplbGVtZW50SW5m
bykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3U2hv
dWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudCkKKyAgICBpZiAoIW1fdWlEZWxlZ2F0
ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVn
YXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdTaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JFbGVtZW50KQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICByZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBzaG91bGRJbmNsdWRlQXBwTGlua0FjdGlvbnNGb3JF
bGVtZW50OmVsZW1lbnRJbmZvXTsKKyAgICByZXR1cm4gWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0
ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkg
c2hvdWxkSW5jbHVkZUFwcExpbmtBY3Rpb25zRm9yRWxlbWVudDplbGVtZW50SW5mb107CiB9CiAj
ZW5kaWYKIAogUmV0YWluUHRyPE5TQXJyYXk+IFVJRGVsZWdhdGU6OlVJQ2xpZW50OjphY3Rpb25z
Rm9yRWxlbWVudChfV0tBY3RpdmF0ZWRFbGVtZW50SW5mbyAqZWxlbWVudEluZm8sIFJldGFpblB0
cjxOU0FycmF5PiBkZWZhdWx0QWN0aW9ucykKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3QWN0aW9uc0ZvckVsZW1lbnREZWZhdWx0QWN0aW9ucykKKyAg
ICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRBY3Rpb25zOworCisg
ICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdBY3Rpb25zRm9y
RWxlbWVudERlZmF1bHRBY3Rpb25zKQogICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7CiAK
LSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAg
YXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAo
IWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gZGVmYXVsdEFjdGlvbnM7CiAKLSAgICByZXR1cm4g
WyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRl
Lm1fd2ViVmlldyBhY3Rpb25zRm9yRWxlbWVudDplbGVtZW50SW5mbyBkZWZhdWx0QWN0aW9uczpk
ZWZhdWx0QWN0aW9ucy5nZXQoKV07CisgICAgcmV0dXJuIFsoaWQgPFdLVUlEZWxlZ2F0ZVByaXZh
dGU+KWRlbGVnYXRlIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
IGFjdGlvbnNGb3JFbGVtZW50OmVsZW1lbnRJbmZvIGRlZmF1bHRBY3Rpb25zOmRlZmF1bHRBY3Rp
b25zLmdldCgpXTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTm90SGFuZGxl
VGFwQXNDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZE5vdEhhbmRsZVRhcEFzQ2xp
Y2tBdFBvaW50KQorICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYg
KCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWROb3RIYW5kbGVUYXBB
c0NsaWNrQXRQb2ludCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBkZWxlZ2F0ZSA9IG1f
dWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+Pihk
ZWxlZ2F0ZSkgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBkaWROb3RIYW5kbGVUYXBB
c0NsaWNrQXRQb2ludDpwb2ludF07CisgICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQ
cml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgp
LmdldCgpIGRpZE5vdEhhbmRsZVRhcEFzQ2xpY2tBdFBvaW50OnBvaW50XTsKIH0KIAogVUlWaWV3
Q29udHJvbGxlciAqVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnByZXNlbnRpbmdWaWV3Q29udHJvbGxl
cigpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMucHJlc2VudGlu
Z1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1l
dGhvZHMucHJlc2VudGluZ1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldykKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUu
Z2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3By
ZXNlbnRpbmdWaWV3Q29udHJvbGxlckZvcldlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlld107
CisgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVn
YXRlKSBfcHJlc2VudGluZ1ZpZXdDb250cm9sbGVyRm9yV2ViVmlldzptX3VpRGVsZWdhdGUtPm1f
d2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKICNlbmRpZgogCiBOU0RpY3Rpb25hcnkgKlVJRGVs
ZWdhdGU6OlVJQ2xpZW50OjpkYXRhRGV0ZWN0aW9uQ29udGV4dCgpCiB7Ci0gICAgaWYgKCFtX3Vp
RGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMuZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJWaWV3
KQorICAgIGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZS5nZXQoKTsKKyAgICBpZiAo
IW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMuZGF0YURldGVjdGlvbkNvbnRleHRGb3JX
ZWJWaWV3KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBt
X3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF9kYXRhRGV0ZWN0aW9uQ29udGV4dEZvcldlYlZpZXc6
bV91aURlbGVnYXRlLm1fd2ViVmlld107CisgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxpZCA8V0tV
SURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfZGF0YURldGVjdGlvbkNvbnRleHRGb3JXZWJW
aWV3Om1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogI2lmIEVOQUJM
RShQT0lOVEVSX0xPQ0spCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OnJlcXVlc3RQb2lu
dGVyTG9jayhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9k
ZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1JlcXVlc3RQb2ludGVyTG9jayAmJiAhbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdEaWRSZXF1ZXN0UG9pbnRlckxvY2tDb21wbGV0aW9u
SGFuZGxlcikKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0UG9pbnRl
ckxvY2sgJiYgIW1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RpZFJlcXVl
c3RQb2ludGVyTG9ja0NvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVn
YXRlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV91aURlbGVnYXRlLm1fZGVsZWdhdGVN
ZXRob2RzLndlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2spIHsKLSAgICAgICAgW3N0YXRpY19jYXN0
PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3UmVxdWVzdFBvaW50
ZXJMb2NrOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIGlmIChtX3VpRGVsZWdhdGUtPm1f
ZGVsZWdhdGVNZXRob2RzLndlYlZpZXdSZXF1ZXN0UG9pbnRlckxvY2spIHsKKyAgICAgICAgW3N0
YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3UmVx
dWVzdFBvaW50ZXJMb2NrOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5k
bGVyQ2FsbENoZWNrZXI6OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3
RGlkUmVxdWVzdFBvaW50ZXJMb2NrOmNvbXBsZXRpb25IYW5kbGVyOikpOwotICAgIFtzdGF0aWNf
Y2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFJlcXVl
c3RQb2ludGVyTG9jazptX3VpRGVsZWdhdGUubV93ZWJWaWV3IGNvbXBsZXRpb25IYW5kbGVyOm1h
a2VCbG9ja1B0cihbY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlciksIHBhZ2UgPSBtYWtlUmVmUHRy
KHBhZ2UpXSAoQk9PTCBhbGxvdykgeworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRl
UHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFJlcXVlc3RQb2ludGVyTG9jazptX3VpRGVs
ZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQ
dHIoW2NoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpLCBwYWdlID0gbWFrZVJlZlB0cihwYWdlKV0g
KEJPT0wgYWxsb3cpIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5kbGVySGFz
QmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2VyLT5kaWRD
YWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTEyMzQsNDEgKzEzOTksNTAgQEAgdm9pZCBVSURl
bGVnYXRlOjpVSUNsaWVudDo6cmVxdWVzdFBvaW50ZXJMb2NrKFdlYlBhZ2VQcm94eSogcGFnZSkK
IAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGlkTG9zZVBvaW50ZXJMb2NrKFdlYlBhZ2VQ
cm94eSopCiB7Ci0gICAgaWYgKCFtX3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmll
d0RpZExvc2VQb2ludGVyTG9jaykKKyAgICBpZiAoIW1fdWlEZWxlZ2F0ZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlLmdldCgp
OworICAgIGlmICghbV91aURlbGVnYXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkTG9z
ZVBvaW50ZXJMb2NrKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLT5tX2RlbGVnYXRlLmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRl
bGVnYXRlKSBfd2ViVmlld0RpZExvc2VQb2ludGVyTG9jazptX3VpRGVsZWdhdGUubV93ZWJWaWV3
XTsKKyAgICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkg
X3dlYlZpZXdEaWRMb3NlUG9pbnRlckxvY2s6bV91aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCku
Z2V0KCldOwogfQogCiAjZW5kaWYKICAgICAKIHZvaWQgVUlEZWxlZ2F0ZTo6VUlDbGllbnQ6OmRp
ZFNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKCkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2Rl
bGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgaWYg
KCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVnYXRl
LT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGlkU2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gZGVsZWdhdGUgPSBtX3VpRGVsZWdhdGUubV9kZWxl
Z2F0ZS5nZXQoKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLT5tX2RlbGVnYXRl
LmdldCgpOwogICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFNo
b3dTYWZlQnJvd3NpbmdXYXJuaW5nOm1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXddOworICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlld0RpZFNo
b3dTYWZlQnJvd3NpbmdXYXJuaW5nOm1fdWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgp
XTsKIH0KIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6Y29uZmlybVBERk9wZW5pbmcoV2Vi
UGFnZVByb3h5JiBwYWdlLCBjb25zdCBXVEY6OlVSTCYgZmlsZVVSTCwgRnJhbWVJbmZvRGF0YSYm
IGZyYW1lSW5mbywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3
U2hvdWxkQWxsb3dQREZBdFVSTFRvT3BlbkZyb21GcmFtZUNvbXBsZXRpb25IYW5kbGVyKQorICAg
IGlmICghbV91aURlbGVnYXRlKQogICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIodHJ1
ZSk7CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7
CisgICAgaWYgKCFtX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdTaG91bGRB
bGxvd1BERkF0VVJMVG9PcGVuRnJvbUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIHJl
dHVybiBjb21wbGV0aW9uSGFuZGxlcih0cnVlKTsKKworICAgIGF1dG8gZGVsZWdhdGUgPSBtX3Vp
RGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAg
cmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKHRydWUpOwogCiAgICAgYXV0byBjaGVja2VyID0gQ29t
cGxldGlvbkhhbmRsZXJDYWxsQ2hlY2tlcjo6Y3JlYXRlKGRlbGVnYXRlLmdldCgpLCBAc2VsZWN0
b3IoX3dlYlZpZXc6c2hvdWxkQWxsb3dQREZBdFVSTDp0b09wZW5Gcm9tRnJhbWU6Y29tcGxldGlv
bkhhbmRsZXI6KSk7Ci0gICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4o
ZGVsZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgc2hvdWxkQWxsb3dQREZB
dFVSTDpmaWxlVVJMIHRvT3BlbkZyb21GcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVh
dGUoV1RGTW92ZShmcmFtZUluZm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9j
a1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hl
Y2tlciA9IFdURk1vdmUoY2hlY2tlcildIChCT09MIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgW3N0
YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVsZWdhdGUpIF93ZWJWaWV3Om1f
dWlEZWxlZ2F0ZS0+bV93ZWJWaWV3LmdldCgpLmdldCgpIHNob3VsZEFsbG93UERGQXRVUkw6Zmls
ZVVSTCB0b09wZW5Gcm9tRnJhbWU6d3JhcHBlcihBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKFdURk1v
dmUoZnJhbWVJbmZvKSwgJnBhZ2UpKSBjb21wbGV0aW9uSGFuZGxlcjptYWtlQmxvY2tQdHIoW2Nv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIGNoZWNrZXIgPSBX
VEZNb3ZlKGNoZWNrZXIpXSAoQk9PTCByZXN1bHQpIG11dGFibGUgewogICAgICAgICBpZiAoY2hl
Y2tlci0+Y29tcGxldGlvbkhhbmRsZXJIYXNCZWVuQ2FsbGVkKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGNoZWNrZXItPmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOwpAQCAtMTI5
NCwxOSArMTQ2OCwyMiBAQCBzdGF0aWMgV2ViQXV0aGVudGljYXRpb25QYW5lbFJlc3VsdCB3ZWJB
dXRoZW50aWNhdGlvblBhbmVsUmVzdWx0KF9XS1dlYkF1dGhlbnRpYwogCiB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpydW5XZWJBdXRoZW50aWNhdGlvblBhbmVsKFdlYlBhZ2VQcm94eSYgcGFn
ZSwgQVBJOjpXZWJBdXRoZW50aWNhdGlvblBhbmVsJiBwYW5lbCwgV2ViRnJhbWVQcm94eSYsIEZy
YW1lSW5mb0RhdGEmJiBmcmFtZUluZm8sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2ViQXV0aGVu
dGljYXRpb25QYW5lbFJlc3VsdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgaWYgKCFt
X3VpRGVsZWdhdGUubV9kZWxlZ2F0ZU1ldGhvZHMud2ViVmlld1J1bldlYkF1dGhlbnRpY2F0aW9u
UGFuZWxJbml0aWF0ZWRCeUZyYW1lQ29tcGxldGlvbkhhbmRsZXIpIHsKKyAgICBpZiAoIW1fdWlE
ZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKFdlYkF1dGhlbnRpY2F0
aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlKTsKKworICAgIGlmICghbV91aURlbGVnYXRlLT5t
X2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3UnVuV2ViQXV0aGVudGljYXRpb25QYW5lbEluaXRpYXRl
ZEJ5RnJhbWVDb21wbGV0aW9uSGFuZGxlcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
ZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0OjpVbmF2YWlsYWJsZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRlLm1fZGVsZWdhdGUu
Z2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9kZWxlZ2F0ZS5nZXQo
KTsKICAgICBpZiAoIWRlbGVnYXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYkF1
dGhlbnRpY2F0aW9uUGFuZWxSZXN1bHQ6OlVuYXZhaWxhYmxlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVyQ2FsbENoZWNrZXI6
OmNyZWF0ZShkZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3OnJ1bldlYkF1dGhlbnRp
Y2F0aW9uUGFuZWw6aW5pdGlhdGVkQnlGcmFtZTpjb21wbGV0aW9uSGFuZGxlcjopKTsKLSAgICBb
KGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPilkZWxlZ2F0ZSBfd2ViVmlldzptX3VpRGVsZWdhdGUu
bV93ZWJWaWV3IHJ1bldlYkF1dGhlbnRpY2F0aW9uUGFuZWw6d3JhcHBlcihwYW5lbCkgaW5pdGlh
dGVkQnlGcmFtZTp3cmFwcGVyKEFQSTo6RnJhbWVJbmZvOjpjcmVhdGUoV1RGTW92ZShmcmFtZUlu
Zm8pLCAmcGFnZSkpIGNvbXBsZXRpb25IYW5kbGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hl
Y2tlcildIChfV0tXZWJBdXRoZW50aWNhdGlvblBhbmVsUmVzdWx0IHJlc3VsdCkgbXV0YWJsZSB7
CisgICAgWyhpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pZGVsZWdhdGUgX3dlYlZpZXc6bV91aURl
bGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcnVuV2ViQXV0aGVudGljYXRpb25QYW5lbDp3
cmFwcGVyKHBhbmVsKSBpbml0aWF0ZWRCeUZyYW1lOndyYXBwZXIoQVBJOjpGcmFtZUluZm86OmNy
ZWF0ZShXVEZNb3ZlKGZyYW1lSW5mbyksICZwYWdlKSkgY29tcGxldGlvbkhhbmRsZXI6bWFrZUJs
b2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBj
aGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKF9XS1dlYkF1dGhlbnRpY2F0aW9uUGFuZWxSZXN1
bHQgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRpb25IYW5k
bGVySGFzQmVlbkNhbGxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBjaGVja2Vy
LT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKQEAgLTEzMTgsMzEgKzE0OTUsNDIgQEAgdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6cnVuV2ViQXV0aGVudGljYXRpb25QYW5lbChXZWJQYWdl
UHJveHkmIHBhZ2UsIEFQSTo6V2UKIAogdm9pZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6aGFzVmlk
ZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UoV2ViUGFnZVByb3h5KiwgYm9vbCBoYXNWaWRl
b0luUGljdHVyZUluUGljdHVyZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVnYXRl
TWV0aG9kcy53ZWJWaWV3SGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVEaWRDaGFuZ2UpCisgICAg
aWYgKCFtX3VpRGVsZWdhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV91aURlbGVn
YXRlLT5tX2RlbGVnYXRlTWV0aG9kcy53ZWJWaWV3SGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVE
aWRDaGFuZ2UpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91
aURlbGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxl
Z2F0ZS0+bV9kZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgW3N0YXRpY19jYXN0PGlkIDxXS1VJRGVsZWdhdGVQcml2YXRlPj4oZGVs
ZWdhdGUpIF93ZWJWaWV3Om1fdWlEZWxlZ2F0ZS5tX3dlYlZpZXcgaGFzVmlkZW9JblBpY3R1cmVJ
blBpY3R1cmVEaWRDaGFuZ2U6aGFzVmlkZW9JblBpY3R1cmVJblBpY3R1cmVdOworICAgIFtzdGF0
aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRlbGVnYXRlKSBfd2ViVmlldzptX3Vp
RGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBoYXNWaWRlb0luUGljdHVyZUluUGljdHVy
ZURpZENoYW5nZTpoYXNWaWRlb0luUGljdHVyZUluUGljdHVyZV07CiB9CiAKIHZvaWQgVUlEZWxl
Z2F0ZTo6VUlDbGllbnQ6OmltYWdlT3JNZWRpYURvY3VtZW50U2l6ZUNoYW5nZWQoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgbmV3U2l6ZSkKIHsKLSAgICBpZiAoIW1fdWlEZWxlZ2F0ZS5tX2RlbGVn
YXRlTWV0aG9kcy53ZWJWaWV3SW1hZ2VPck1lZGlhRG9jdW1lbnRTaXplQ2hhbmdlZCkKKyAgICBp
ZiAoIW1fdWlEZWxlZ2F0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VpRGVsZWdh
dGUtPm1fZGVsZWdhdGVNZXRob2RzLndlYlZpZXdJbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFu
Z2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGRlbGVnYXRlID0gbV91aURlbGVnYXRl
Lm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IG1fdWlEZWxlZ2F0ZS0+bV9k
ZWxlZ2F0ZS5nZXQoKTsKICAgICBpZiAoIWRlbGVnYXRlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBbc3RhdGljX2Nhc3Q8aWQgPFdLVUlEZWxlZ2F0ZVByaXZhdGU+PihkZWxlZ2F0ZSkgX3dlYlZp
ZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBpbWFnZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2Vk
Om5ld1NpemVdOworICAgIFtzdGF0aWNfY2FzdDxpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4+KGRl
bGVnYXRlKSBfd2ViVmlldzptX3VpRGVsZWdhdGUtPm1fd2ViVmlldy5nZXQoKS5nZXQoKSBpbWFn
ZU9yTWVkaWFEb2N1bWVudFNpemVDaGFuZ2VkOm5ld1NpemVdOwogfQogCiB2b2lkIFVJRGVsZWdh
dGU6OlVJQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Npb25S
ZXF1ZXN0KFdlYktpdDo6V2ViUGFnZVByb3h5JiBwYWdlLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiBv
cmlnaW4sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IChpZCA8V0tVSURlbGVnYXRlUHJpdmF0ZT4pbV91aURl
bGVnYXRlLm1fZGVsZWdhdGUuZ2V0KCk7CisgICAgaWYgKCFtX3VpRGVsZWdhdGUpIHsKKyAgICAg
ICAgcGFnZS5yZXF1ZXN0U3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uQnlEZWZhdWx0QWN0aW9u
KG9yaWdpbi5zZWN1cml0eU9yaWdpbigpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGRlbGVnYXRlID0gKGlkIDxXS1VJRGVs
ZWdhdGVQcml2YXRlPiltX3VpRGVsZWdhdGUtPm1fZGVsZWdhdGUuZ2V0KCk7CiAgICAgaWYgKCFk
ZWxlZ2F0ZSkgewogICAgICAgICBwYWdlLnJlcXVlc3RTcGVlY2hSZWNvZ25pdGlvblBlcm1pc3Np
b25CeURlZmF1bHRBY3Rpb24ob3JpZ2luLnNlY3VyaXR5T3JpZ2luKCksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTM1NCw3ICsxNTQyLDcgQEAgdm9p
ZCBVSURlbGVnYXRlOjpVSUNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU3BlZWNoUmVjb2duaXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdChXZWIKICAgICB9CiAKICAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0
aW9uSGFuZGxlckNhbGxDaGVja2VyOjpjcmVhdGUoZGVsZWdhdGUsIEBzZWxlY3Rvcihfd2ViVmll
dzpyZXF1ZXN0U3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uRm9yT3JpZ2luOmRlY2lzaW9uSGFu
ZGxlcjopKTsKLSAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91aURlbGVnYXRlLm1fd2ViVmlldyBy
ZXF1ZXN0U3BlZWNoUmVjb2duaXRpb25QZXJtaXNzaW9uRm9yT3JpZ2luOndyYXBwZXIob3JpZ2lu
KSBkZWNpc2lvbkhhbmRsZXI6bWFrZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IHN0ZDo6
ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIHsgfSksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNr
ZXIpXSAoQk9PTCBncmFudGVkKSBtdXRhYmxlIHsKKyAgICBbZGVsZWdhdGUgX3dlYlZpZXc6bV91
aURlbGVnYXRlLT5tX3dlYlZpZXcuZ2V0KCkuZ2V0KCkgcmVxdWVzdFNwZWVjaFJlY29nbml0aW9u
UGVybWlzc2lvbkZvck9yaWdpbjp3cmFwcGVyKG9yaWdpbikgZGVjaXNpb25IYW5kbGVyOm1ha2VC
bG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5k
bGVyLCB7IH0pLCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0gKEJPT0wgZ3JhbnRlZCkgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9uSGFuZGxlckhhc0JlZW5DYWxs
ZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgY2hlY2tlci0+ZGlkQ2FsbENvbXBs
ZXRpb25IYW5kbGVyKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>