<?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>192450</bug_id>
          
          <creation_ts>2018-12-05 20:17:45 -0800</creation_ts>
          <short_desc>[WebKit] Replace nonprefixed toImpl with WebKit::toImpl under WebKit/UIProcess/API/C</short_desc>
          <delta_ts>2018-12-06 17:36:35 -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>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>192449</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>achristensen</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1485596</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-05 20:17:45 -0800</bug_when>
    <thetext>[WebKit] Replace nonprefixed toImpl with WebKit::toImpl under WebKit/UIProcess/API/C

This is a sub-task of Bug 192449.
There are a lot of nonprefixed toImpl under WebKit/UIProcess/API/C.
I am going to land a patch to replace it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485597</commentid>
    <comment_count>1</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-05 20:21:31 -0800</bug_when>
    <thetext>Here are commands I invoked: 

&gt; name=&quot;(toImpl)&quot;; sed -Ei -e &quot;s/WebKit::$name\\b/\\1/g&quot; -e &quot;s/\\b$name\\b/WebKit::\\1/g&quot; *.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485608</commentid>
    <comment_count>2</comment_count>
      <attachid>356704</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-05 20:38:44 -0800</bug_when>
    <thetext>Created attachment 356704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485764</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-12-06 12:28:50 -0800</bug_when>
    <thetext>Is this necessary? I’m not sure I understand exactly why. I know that sometimes we need to remove &quot;using namespace&quot; because of ambiguity or because it’s outside braces so pollutes other files in unified builds. Is that the case here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1485897</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2018-12-06 17:36:26 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)

I don&apos;t know which names in WebCore and WebKit are conflicting
with which library in internal Mac port. (See Bug 191853 Comment 9)
Also, I don&apos;t know why we can&apos;t rename them in WebKit.
OK, let&apos;s leave them as is until we know the actual problem.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356704</attachid>
            <date>2018-12-05 20:38:44 -0800</date>
            <delta_ts>2018-12-06 17:36:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192450-20181206133842.patch</filename>
            <type>text/plain</type>
            <size>271932</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4OTIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDA2M2ExOWEzZWVkZDk4Njhm
ZDU4NWZiMGQ2ZTgwZWNiNmIxODJkODguLjc1MGJjYjI3MDQ1MzZkNzc3ZWMxNGFjMTg1NjI2Mzlm
MzljMjkzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTgtMTItMDUgIEZ1amlpIEhp
cm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CisKKyAgICAgICAgW1dlYktpdF0gUmVw
bGFjZSBub25wcmVmaXhlZCB0b0ltcGwgd2l0aCBXZWJLaXQ6OnRvSW1wbCB1bmRlciBXZWJLaXQv
VUlQcm9jZXNzL0FQSS9DCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTI0NTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIGNoYW5nZSBpcyBhIHByZXBhcmF0aW9uIGZvciByZW1vdmluZyAidXNpbmcg
bmFtZXNwYWNlIFdlYktpdCIgKEJ1ZyAxOTI0NDkpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9DL1dLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYuY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS0JhY2tGb3J3YXJkTGlzdFJlZi5jcHA6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHRNZW51TGlzdGVuZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0Nvb2tp
ZU1hbmFnZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NyZWRlbnRpYWwuY3Bw
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0Rvd25sb2FkLmNwcDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyLmNwcDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
RnJhbWVIYW5kbGVSZWYuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lSW5m
b1JlZi5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWVQb2xpY3lMaXN0ZW5l
ci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLR2VvbG9jYXRpb25NYW5hZ2VyLmNw
cDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmNwcDoK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0MvV0tJbnNwZWN0b3IuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS01lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL1dLTWVkaWFTZXNzaW9uTWV0YWRhdGEuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvQy9XS01vY2tEaXNwbGF5LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tNb2Nr
TWVkaWFEZXZpY2UuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS05hdmlnYXRpb25E
YXRhUmVmLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tOYXZpZ2F0aW9uUmVzcG9u
c2VSZWYuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS05vdGlmaWNhdGlvbi5jcHA6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLTm90aWZpY2F0aW9uTWFuYWdlci5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qu
Y3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYu
Y3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS09wZW5QYW5lbFJlc3VsdExpc3RlbmVy
LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQYWdlLmNwcDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvV0tQYWdlQ29uZmlndXJhdGlvblJlZi5jcHA6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLUGFnZUdyb3VwLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0Mv
V0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJvdGVjdGlv
blNwYWNlLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tSZXNvdXJjZUNhY2hlTWFu
YWdlci5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuY3BwOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHA6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNw
cDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVz
dC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLVXNlclNjcmlwdFJlZi5jcHA6Cisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcDoKKwogMjAxOC0x
Mi0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IGEgZG9jdW1lbnQgZW50cnkgZnJvbSBOZXR3b3JrTUROU1JlZ2lzdGVyOjptX3NlcnZpY2VzIHdo
ZW4gZG9jdW1lbnQgZ29lcyBhd2F5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwCmluZGV4IGVlODdhYzE5
MTUwNjA2YjRlYjgzYTgzZGQ3YWYzYjI3YjAyNzc4M2MuLjFiMDAzNGEzYmFhNzJlMDVjYzM3YTc1
MTQxZWMyYmZkNGU5NGY4MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQXBwbGljYXRpb25DYWNoZU1hbmFnZXIuY3BwCkBAIC00MCw3ICs0MCw3
IEBAIFdLVHlwZUlEIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJHZXRUeXBlSUQoKQogCiB2b2lk
IFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2lucyhXS0Fw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyUmVmIGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyLCB2b2lkKiBj
b250ZXh0LCBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyR2V0QXBwbGljYXRpb25DYWNoZU9yaWdp
bnNGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gdG9J
bXBsKHJlaW50ZXJwcmV0X2Nhc3Q8V0tXZWJzaXRlRGF0YVN0b3JlUmVmPihhcHBsaWNhdGlvbkNh
Y2hlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFT
dG9yZSA9IFdlYktpdDo6dG9JbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8V0tXZWJzaXRlRGF0YVN0b3Jl
UmVmPihhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCk7CiAgICAg
d2Vic2l0ZURhdGFTdG9yZS5mZXRjaERhdGEoV2Vic2l0ZURhdGFUeXBlOjpPZmZsaW5lV2ViQXBw
bGljYXRpb25DYWNoZSwgeyB9LCBbY29udGV4dCwgY2FsbGJhY2tdKGF1dG8gZGF0YVJlY29yZHMp
IHsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxBUEk6Ok9iamVjdD4+IHNlY3VyaXR5T3JpZ2luczsK
ICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBkYXRhUmVjb3JkIDogZGF0YVJlY29yZHMpIHsKQEAg
LTU0LDE2ICs1NCwxNiBAQCB2b2lkIFdLQXBwbGljYXRpb25DYWNoZU1hbmFnZXJHZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2lucyhXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZwogCiB2b2lkIFdLQXBwbGlj
YXRpb25DYWNoZU1hbmFnZXJEZWxldGVFbnRyaWVzRm9yT3JpZ2luKFdLQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXJSZWYgYXBwbGljYXRpb25DYWNoZU1hbmFnZXIsIFdLU2VjdXJpdHlPcmlnaW5SZWYg
b3JpZ2luKQogewotICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSB0b0ltcGwocmVpbnRlcnBy
ZXRfY2FzdDxXS1dlYnNpdGVEYXRhU3RvcmVSZWY+KGFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyKSkt
PndlYnNpdGVEYXRhU3RvcmUoKTsKKyAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gV2ViS2l0
Ojp0b0ltcGwocmVpbnRlcnByZXRfY2FzdDxXS1dlYnNpdGVEYXRhU3RvcmVSZWY+KGFwcGxpY2F0
aW9uQ2FjaGVNYW5hZ2VyKSktPndlYnNpdGVEYXRhU3RvcmUoKTsKIAogICAgIFdlYnNpdGVEYXRh
UmVjb3JkIGRhdGFSZWNvcmQ7Ci0gICAgZGF0YVJlY29yZC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgdG9JbXBsKG9yaWdpbiktPnNlY3VyaXR5T3JpZ2lu
KCkuZGF0YSgpKTsKKyAgICBkYXRhUmVjb3JkLmFkZChXZWJzaXRlRGF0YVR5cGU6Ok9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlLCBXZWJLaXQ6OnRvSW1wbChvcmlnaW4pLT5zZWN1cml0eU9yaWdp
bigpLmRhdGEoKSk7CiAKICAgICB3ZWJzaXRlRGF0YVN0b3JlLnJlbW92ZURhdGEoV2Vic2l0ZURh
dGFUeXBlOjpPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZSwgeyBkYXRhUmVjb3JkIH0sIFtdIHsg
fSk7CiB9CiAKIHZvaWQgV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlckRlbGV0ZUFsbEVudHJpZXMo
V0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikKIHsK
LSAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gdG9JbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8V0tX
ZWJzaXRlRGF0YVN0b3JlUmVmPihhcHBsaWNhdGlvbkNhY2hlTWFuYWdlcikpLT53ZWJzaXRlRGF0
YVN0b3JlKCk7CisgICAgYXV0byYgd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6dG9JbXBsKHJl
aW50ZXJwcmV0X2Nhc3Q8V0tXZWJzaXRlRGF0YVN0b3JlUmVmPihhcHBsaWNhdGlvbkNhY2hlTWFu
YWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCk7CiAgICAgd2Vic2l0ZURhdGFTdG9yZS5yZW1vdmVE
YXRhKFdlYnNpdGVEYXRhVHlwZTo6T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGUsIC1XYWxsVGlt
ZTo6aW5maW5pdHkoKSwgW10geyB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKaW5kZXggNzNk
NWZmMjhiOTQxZTZhNjkzOTZhN2E5ZTkzODNjOThjYWViMzhmYS4uMDQ2MWVjMTdhODFjYjQ2ZDk4
ZjBlMmUwODdkOGI3MmEwYjFlZjFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5jcHAKQEAgLTQyLDIw
ICs0MiwyMCBAQCBXS1R5cGVJRCBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlR2V0VHlwZUlEKCkK
IAogV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJSZWYgV0tBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUdldERlY2lzaW9uTGlzdGVuZXIoV0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlZiBj
aGFsbGVuZ2UpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwoY2hhbGxlbmdlKS0+bGlzdGVu
ZXIoKSk7CisgICAgcmV0dXJuIHRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjaGFsbGVuZ2UpLT5saXN0
ZW5lcigpKTsKIH0KIAogV0tQcm90ZWN0aW9uU3BhY2VSZWYgV0tBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUdldFByb3RlY3Rpb25TcGFjZShXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVmIGNoYWxs
ZW5nZSkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNoYWxsZW5nZSktPnByb3RlY3Rpb25T
cGFjZSgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoY2hhbGxlbmdlKS0+cHJv
dGVjdGlvblNwYWNlKCkpOwogfQogCiBXS0NyZWRlbnRpYWxSZWYgV0tBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUdldFByb3Bvc2VkQ3JlZGVudGlhbChXS0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUmVm
IGNoYWxsZW5nZSkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNoYWxsZW5nZSktPnByb3Bv
c2VkQ3JlZGVudGlhbCgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoY2hhbGxl
bmdlKS0+cHJvcG9zZWRDcmVkZW50aWFsKCkpOwogfQogCiBpbnQgV0tBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZUdldFByZXZpb3VzRmFpbHVyZUNvdW50KFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VS
ZWYgY2hhbGxlbmdlKQogewotICAgIHJldHVybiB0b0ltcGwoY2hhbGxlbmdlKS0+Y29yZSgpLnBy
ZXZpb3VzRmFpbHVyZUNvdW50KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNoYWxsZW5n
ZSktPmNvcmUoKS5wcmV2aW91c0ZhaWx1cmVDb3VudCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBdXRoZW50aWNhdGlvbkRlY2lz
aW9uTGlzdGVuZXIuY3BwCmluZGV4IDBmYTY4ZGU3NjE2N2Y4MGQzMjdiZGMyMTQ4MjlhOTY1ZmFm
MjY1MmIuLmUzOTIyNjAyM2ViMDcxYzE5ZGNiYjJkNmVkMTdjODdkZjY0YTY0YzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQXV0aGVudGljYXRpb25EZWNpc2lv
bkxpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0F1dGhl
bnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lci5jcHAKQEAgLTQwLDE1ICs0MCwxNSBAQCBXS1R5cGVJ
RCBXS0F1dGhlbnRpY2F0aW9uRGVjaXNpb25MaXN0ZW5lckdldFR5cGVJRCgpCiAKIHZvaWQgV0tB
dXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJVc2VDcmVkZW50aWFsKFdLQXV0aGVudGljYXRp
b25EZWNpc2lvbkxpc3RlbmVyUmVmIGF1dGhlbnRpY2F0aW9uTGlzdGVuZXIsIFdLQ3JlZGVudGlh
bFJlZiBjcmVkZW50aWFsKQogewotICAgIHRvSW1wbChhdXRoZW50aWNhdGlvbkxpc3RlbmVyKS0+
Y29tcGxldGVDaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6VXNl
Q3JlZGVudGlhbCwgY3JlZGVudGlhbCA/IHRvSW1wbChjcmVkZW50aWFsKS0+Y3JlZGVudGlhbCgp
IDogV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChhdXRoZW50aWNh
dGlvbkxpc3RlbmVyKS0+Y29tcGxldGVDaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgY3JlZGVudGlhbCA/IFdlYktpdDo6dG9JbXBsKGNy
ZWRlbnRpYWwpLT5jcmVkZW50aWFsKCkgOiBXZWJDb3JlOjpDcmVkZW50aWFsKCkpOwogfQogCiB2
b2lkIFdLQXV0aGVudGljYXRpb25EZWNpc2lvbkxpc3RlbmVyQ2FuY2VsKFdLQXV0aGVudGljYXRp
b25EZWNpc2lvbkxpc3RlbmVyUmVmIGF1dGhlbnRpY2F0aW9uTGlzdGVuZXIpCiB7Ci0gICAgdG9J
bXBsKGF1dGhlbnRpY2F0aW9uTGlzdGVuZXIpLT5jb21wbGV0ZUNoYWxsZW5nZShBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWwpOworICAgIFdlYktpdDo6dG9JbXBsKGF1
dGhlbnRpY2F0aW9uTGlzdGVuZXIpLT5jb21wbGV0ZUNoYWxsZW5nZShBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWwpOwogfQogCiB2b2lkIFdLQXV0aGVudGljYXRpb25E
ZWNpc2lvbkxpc3RlbmVyUmVqZWN0UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWUoV0tBdXRoZW50
aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXJSZWYgYXV0aGVudGljYXRpb25MaXN0ZW5lcikKIHsKLSAg
ICB0b0ltcGwoYXV0aGVudGljYXRpb25MaXN0ZW5lciktPmNvbXBsZXRlQ2hhbGxlbmdlKEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlJlamVjdFByb3RlY3Rpb25TcGFjZUFuZENv
bnRpbnVlKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChhdXRoZW50aWNhdGlvbkxpc3RlbmVyKS0+Y29t
cGxldGVDaGFsbGVuZ2UoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UmVqZWN0
UHJvdGVjdGlvblNwYWNlQW5kQ29udGludWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQmFja0ZvcndhcmRMaXN0SXRlbVJlZi5jcHAKaW5kZXgg
ZmVhN2ZiOTQxZmY3NTIyNmEwMjllNjEyNTNhYWViMDFkOTcxNTAxNC4uYzFiNzNkZTc0ZGIyZmIy
NWU5M2YyMmI3OTY1MzBkZTU3OWFlN2E5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVmLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYuY3BwCkBAIC0zOCwx
NSArMzgsMTUgQEAgV0tUeXBlSUQgV0tCYWNrRm9yd2FyZExpc3RJdGVtR2V0VHlwZUlEKCkKIAog
V0tVUkxSZWYgV0tCYWNrRm9yd2FyZExpc3RJdGVtQ29weVVSTChXS0JhY2tGb3J3YXJkTGlzdEl0
ZW1SZWYgaXRlbVJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGl0ZW1S
ZWYpLT51cmwoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKFdlYktpdDo6dG9JbXBsKGl0
ZW1SZWYpLT51cmwoKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLQmFja0ZvcndhcmRMaXN0SXRlbUNv
cHlUaXRsZShXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgaXRlbVJlZikKIHsKLSAgICByZXR1cm4g
dG9Db3BpZWRBUEkodG9JbXBsKGl0ZW1SZWYpLT50aXRsZSgpKTsKKyAgICByZXR1cm4gdG9Db3Bp
ZWRBUEkoV2ViS2l0Ojp0b0ltcGwoaXRlbVJlZiktPnRpdGxlKCkpOwogfQogCiBXS1VSTFJlZiBX
S0JhY2tGb3J3YXJkTGlzdEl0ZW1Db3B5T3JpZ2luYWxVUkwoV0tCYWNrRm9yd2FyZExpc3RJdGVt
UmVmIGl0ZW1SZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKHRvSW1wbChpdGVtUmVm
KS0+b3JpZ2luYWxVUkwoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKFdlYktpdDo6dG9J
bXBsKGl0ZW1SZWYpLT5vcmlnaW5hbFVSTCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQmFja0ZvcndhcmRMaXN0UmVmLmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLQmFja0ZvcndhcmRMaXN0UmVmLmNwcAppbmRleCA0YmU3ZmMz
Njk4Y2E1ZmU2ZjIwM2FhMjU4MDZhMWI2ZDJhY2I4ZWU1Li5mZDY4YjA5Yzk5YmQ0YmZlZWExMjBi
MzkwZjc3YWI0MTA5ZjZiZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0JhY2tGb3J3YXJkTGlzdFJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tCYWNrRm9yd2FyZExpc3RSZWYuY3BwCkBAIC0zOSw0NSArMzksNDUgQEAgV0tU
eXBlSUQgV0tCYWNrRm9yd2FyZExpc3RHZXRUeXBlSUQoKQogCiBXS0JhY2tGb3J3YXJkTGlzdEl0
ZW1SZWYgV0tCYWNrRm9yd2FyZExpc3RHZXRDdXJyZW50SXRlbShXS0JhY2tGb3J3YXJkTGlzdFJl
ZiBsaXN0UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwobGlzdFJlZiktPmN1cnJlbnRJ
dGVtKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6OnRvSW1wbChsaXN0UmVmKS0+Y3VycmVu
dEl0ZW0oKSk7CiB9CiAKIFdLQmFja0ZvcndhcmRMaXN0SXRlbVJlZiBXS0JhY2tGb3J3YXJkTGlz
dEdldEJhY2tJdGVtKFdLQmFja0ZvcndhcmRMaXN0UmVmIGxpc3RSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvQVBJKHRvSW1wbChsaXN0UmVmKS0+YmFja0l0ZW0oKSk7CisgICAgcmV0dXJuIHRvQVBJKFdl
YktpdDo6dG9JbXBsKGxpc3RSZWYpLT5iYWNrSXRlbSgpKTsKIH0KIAogV0tCYWNrRm9yd2FyZExp
c3RJdGVtUmVmIFdLQmFja0ZvcndhcmRMaXN0R2V0Rm9yd2FyZEl0ZW0oV0tCYWNrRm9yd2FyZExp
c3RSZWYgbGlzdFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGxpc3RSZWYpLT5mb3J3
YXJkSXRlbSgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwobGlzdFJlZiktPmZv
cndhcmRJdGVtKCkpOwogfQogCiBXS0JhY2tGb3J3YXJkTGlzdEl0ZW1SZWYgV0tCYWNrRm9yd2Fy
ZExpc3RHZXRJdGVtQXRJbmRleChXS0JhY2tGb3J3YXJkTGlzdFJlZiBsaXN0UmVmLCBpbnQgaW5k
ZXgpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChsaXN0UmVmKS0+aXRlbUF0SW5kZXgoaW5k
ZXgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwobGlzdFJlZiktPml0ZW1BdElu
ZGV4KGluZGV4KSk7CiB9CiAKIHZvaWQgV0tCYWNrRm9yd2FyZExpc3RDbGVhcihXS0JhY2tGb3J3
YXJkTGlzdFJlZiBsaXN0UmVmKQogewotICAgIHRvSW1wbChsaXN0UmVmKS0+Y2xlYXIoKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChsaXN0UmVmKS0+Y2xlYXIoKTsKIH0KIAogdW5zaWduZWQgV0tCYWNr
Rm9yd2FyZExpc3RHZXRCYWNrTGlzdENvdW50KFdLQmFja0ZvcndhcmRMaXN0UmVmIGxpc3RSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChsaXN0UmVmKS0+YmFja0xpc3RDb3VudCgpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChsaXN0UmVmKS0+YmFja0xpc3RDb3VudCgpOwogfQogCiB1bnNp
Z25lZCBXS0JhY2tGb3J3YXJkTGlzdEdldEZvcndhcmRMaXN0Q291bnQoV0tCYWNrRm9yd2FyZExp
c3RSZWYgbGlzdFJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGxpc3RSZWYpLT5mb3J3YXJkTGlz
dENvdW50KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGxpc3RSZWYpLT5mb3J3YXJkTGlz
dENvdW50KCk7CiB9CiAKIFdLQXJyYXlSZWYgV0tCYWNrRm9yd2FyZExpc3RDb3B5QmFja0xpc3RX
aXRoTGltaXQoV0tCYWNrRm9yd2FyZExpc3RSZWYgbGlzdFJlZiwgdW5zaWduZWQgbGltaXQpCiB7
Ci0gICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwobGlzdFJlZiktPmJhY2tMaXN0QXNBUElBcnJheVdp
dGhMaW1pdChsaW1pdCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gdG9BUEkoJldlYktpdDo6dG9J
bXBsKGxpc3RSZWYpLT5iYWNrTGlzdEFzQVBJQXJyYXlXaXRoTGltaXQobGltaXQpLmxlYWtSZWYo
KSk7CiB9CiAKIFdLQXJyYXlSZWYgV0tCYWNrRm9yd2FyZExpc3RDb3B5Rm9yd2FyZExpc3RXaXRo
TGltaXQoV0tCYWNrRm9yd2FyZExpc3RSZWYgbGlzdFJlZiwgdW5zaWduZWQgbGltaXQpCiB7Ci0g
ICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwobGlzdFJlZiktPmZvcndhcmRMaXN0QXNBUElBcnJheVdp
dGhMaW1pdChsaW1pdCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gdG9BUEkoJldlYktpdDo6dG9J
bXBsKGxpc3RSZWYpLT5mb3J3YXJkTGlzdEFzQVBJQXJyYXlXaXRoTGltaXQobGltaXQpLmxlYWtS
ZWYoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApp
bmRleCA4NzAxNmFiNzU4ZWJjMTJkMzk4ZGZmZDNjMDViOGYyMWFiNTA1MjY4Li40YjlkNzVmYzhh
MTExOWYwOGZlY2ZjZDZhZDM1YjI3MDYwZGIzYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTg0LDE3ICs4NCwxNyBAQCBXS0NvbnRleHRSZWYg
V0tDb250ZXh0Q3JlYXRlV2l0aEluamVjdGVkQnVuZGxlUGF0aChXS1N0cmluZ1JlZiBwYXRoUmVm
KQogCiBXS0NvbnRleHRSZWYgV0tDb250ZXh0Q3JlYXRlV2l0aENvbmZpZ3VyYXRpb24oV0tDb250
ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKQogewotICAgIHJldHVybiB0b0FQSSgm
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZSgqdG9JbXBsKGNvbmZpZ3VyYXRpb24pKS5sZWFrUmVmKCkp
OworICAgIHJldHVybiB0b0FQSSgmV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZSgqV2ViS2l0Ojp0b0lt
cGwoY29uZmlndXJhdGlvbikpLmxlYWtSZWYoKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0Q2xp
ZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHRDbGllbnRCYXNlKiB3
a0NsaWVudCkKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPmluaXRpYWxpemVDbGllbnQod2tD
bGllbnQpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5pbml0aWFsaXplQ2xpZW50
KHdrQ2xpZW50KTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRJbmplY3RlZEJ1bmRsZUNsaWVudChX
S0NvbnRleHRSZWYgY29udGV4dFJlZiwgY29uc3QgV0tDb250ZXh0SW5qZWN0ZWRCdW5kbGVDbGll
bnRCYXNlKiB3a0NsaWVudCkKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnNldEluamVjdGVk
QnVuZGxlQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29udGV4dEluamVjdGVkQnVuZGxlQ2xp
ZW50Pih3a0NsaWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRJbmpl
Y3RlZEJ1bmRsZUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvbnRleHRJbmplY3RlZEJ1bmRs
ZUNsaWVudD4od2tDbGllbnQpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRIaXN0b3J5Q2xpZW50
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHRIaXN0b3J5Q2xpZW50QmFz
ZSogd2tDbGllbnQpCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBXS0NvbnRleHRTZXRIaXN0b3J5
Q2xpZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHRIaXN0b3J5Q2wK
ICAgICAgICAgfQogICAgIH07CiAKLSAgICBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wgPSAq
dG9JbXBsKGNvbnRleHRSZWYpOworICAgIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCA9ICpX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKTsKICAgICBwcm9jZXNzUG9vbC5zZXRIaXN0b3J5Q2xp
ZW50KHN0ZDo6bWFrZV91bmlxdWU8SGlzdG9yeUNsaWVudD4od2tDbGllbnQpKTsKIAogICAgIGJv
b2wgYWRkc1Zpc2l0ZWRMaW5rcyA9IHByb2Nlc3NQb29sLmhpc3RvcnlDbGllbnQoKS5hZGRzVmlz
aXRlZExpbmtzKCk7CkBAIC0yNjcsMzIgKzI2NywzMiBAQCB2b2lkIFdLQ29udGV4dFNldERvd25s
b2FkQ2xpZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHREb3dubG9h
ZAogCiAgICAgfTsKIAotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0RG93bmxvYWRDbGllbnQo
c3RkOjptYWtlX3VuaXF1ZTxEb3dubG9hZENsaWVudD4od2tDbGllbnQpKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0RG93bmxvYWRDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxE
b3dubG9hZENsaWVudD4od2tDbGllbnQpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRDb25uZWN0
aW9uQ2xpZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBjb25zdCBXS0NvbnRleHRDb25uZWN0
aW9uQ2xpZW50QmFzZSogd2tDbGllbnQpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYpLT5pbml0
aWFsaXplQ29ubmVjdGlvbkNsaWVudCh3a0NsaWVudCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29u
dGV4dFJlZiktPmluaXRpYWxpemVDb25uZWN0aW9uQ2xpZW50KHdrQ2xpZW50KTsKIH0KIAogV0tE
b3dubG9hZFJlZiBXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QoV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0
b0ltcGwoY29udGV4dFJlZiktPmRvd25sb2FkKDAsIHRvSW1wbChyZXF1ZXN0UmVmKS0+cmVzb3Vy
Y2VSZXF1ZXN0KCkpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPmRvd25sb2FkKDAsIFdlYktpdDo6dG9JbXBsKHJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVl
c3QoKSkpOwogfQogCiBXS0Rvd25sb2FkUmVmIFdLQ29udGV4dFJlc3VtZURvd25sb2FkKFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmLCBXS0RhdGFSZWYgcmVzdW1lRGF0YSwgV0tTdHJpbmdSZWYgcGF0
aCkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNvbnRleHRSZWYpLT5yZXN1bWVEb3dubG9h
ZCh0b0ltcGwocmVzdW1lRGF0YSksIHRvV1RGU3RyaW5nKHBhdGgpKSk7CisgICAgcmV0dXJuIHRv
QVBJKFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5yZXN1bWVEb3dubG9hZChXZWJLaXQ6OnRv
SW1wbChyZXN1bWVEYXRhKSwgdG9XVEZTdHJpbmcocGF0aCkpKTsKIH0KIAogdm9pZCBXS0NvbnRl
eHRTZXRJbml0aWFsaXphdGlvblVzZXJEYXRhRm9ySW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsICBXS1R5cGVSZWYgdXNlckRhdGFSZWYpCiB7Ci0gICAgdG9JbXBsKGNvbnRl
eHRSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEodG9JbXBsKHVz
ZXJEYXRhUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEluamVjdGVk
QnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0YShXZWJLaXQ6OnRvSW1wbCh1c2VyRGF0YVJlZikp
OwogfQogCiB2b2lkIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShXS0NvbnRl
eHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWVSZWYsIFdLVHlwZVJlZiBt
ZXNzYWdlQm9keVJlZikKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnBvc3RNZXNzYWdlVG9J
bmplY3RlZEJ1bmRsZSh0b0ltcGwobWVzc2FnZU5hbWVSZWYpLT5zdHJpbmcoKSwgdG9JbXBsKG1l
c3NhZ2VCb2R5UmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShXZWJLaXQ6OnRvSW1wbChtZXNzYWdlTmFtZVJlZiktPnN0cmlu
ZygpLCBXZWJLaXQ6OnRvSW1wbChtZXNzYWdlQm9keVJlZikpOwogfQogCiB2b2lkIFdLQ29udGV4
dEdldEdsb2JhbFN0YXRpc3RpY3MoV0tDb250ZXh0U3RhdGlzdGljcyogc3RhdGlzdGljcykKQEAg
LTMwNiw1MiArMzA2LDUyIEBAIHZvaWQgV0tDb250ZXh0R2V0R2xvYmFsU3RhdGlzdGljcyhXS0Nv
bnRleHRTdGF0aXN0aWNzKiBzdGF0aXN0aWNzKQogCiB2b2lkIFdLQ29udGV4dEFkZFZpc2l0ZWRM
aW5rKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiB2aXNpdGVkVVJMKQogewot
ICAgIFN0cmluZyB2aXNpdGVkVVJMU3RyaW5nID0gdG9JbXBsKHZpc2l0ZWRVUkwpLT5zdHJpbmco
KTsKKyAgICBTdHJpbmcgdmlzaXRlZFVSTFN0cmluZyA9IFdlYktpdDo6dG9JbXBsKHZpc2l0ZWRV
UkwpLT5zdHJpbmcoKTsKICAgICBpZiAodmlzaXRlZFVSTFN0cmluZy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+dmlzaXRlZExpbmtTdG9yZSgp
LmFkZFZpc2l0ZWRMaW5rSGFzaChjb21wdXRlU2hhcmVkU3RyaW5nSGFzaCh2aXNpdGVkVVJMU3Ry
aW5nKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnZpc2l0ZWRMaW5rU3RvcmUo
KS5hZGRWaXNpdGVkTGlua0hhc2goY29tcHV0ZVNoYXJlZFN0cmluZ0hhc2godmlzaXRlZFVSTFN0
cmluZykpOwogfQogCiB2b2lkIFdLQ29udGV4dENsZWFyVmlzaXRlZExpbmtzKFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+dmlzaXRlZExpbmtTdG9y
ZSgpLnJlbW92ZUFsbCgpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT52aXNpdGVk
TGlua1N0b3JlKCkucmVtb3ZlQWxsKCk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0Q2FjaGVNb2Rl
bChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB7Ci0g
ICAgdG9JbXBsKGNvbnRleHRSZWYpLT5zZXRDYWNoZU1vZGVsKHRvQ2FjaGVNb2RlbChjYWNoZU1v
ZGVsKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldENhY2hlTW9kZWwodG9D
YWNoZU1vZGVsKGNhY2hlTW9kZWwpKTsKIH0KIAogV0tDYWNoZU1vZGVsIFdLQ29udGV4dEdldENh
Y2hlTW9kZWwoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRv
SW1wbChjb250ZXh0UmVmKS0+Y2FjaGVNb2RlbCgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPmNhY2hlTW9kZWwoKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0
U2V0TWF4aW11bU51bWJlck9mUHJvY2Vzc2VzKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCB1bnNp
Z25lZCBudW1iZXJPZlByb2Nlc3NlcykKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnNldE1h
eGltdW1OdW1iZXJPZlByb2Nlc3NlcyhudW1iZXJPZlByb2Nlc3Nlcyk7CisgICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPnNldE1heGltdW1OdW1iZXJPZlByb2Nlc3NlcyhudW1iZXJPZlBy
b2Nlc3Nlcyk7CiB9CiAKIHVuc2lnbmVkIFdLQ29udGV4dEdldE1heGltdW1OdW1iZXJPZlByb2Nl
c3NlcyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGNvbnRl
eHRSZWYpLT5tYXhpbXVtTnVtYmVyT2ZQcm9jZXNzZXMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPm1heGltdW1OdW1iZXJPZlByb2Nlc3NlcygpOwogfQogCiB2b2lk
IFdLQ29udGV4dFNldEFsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBib29sIGFsd2F5c1VzZUNvbXBsZXhUZXh0Q29kZVBhdGgpCiB7Ci0gICAgdG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRBbHdheXNVc2VzQ29tcGxleFRleHRDb2RlUGF0aChhbHdheXNV
c2VDb21wbGV4VGV4dENvZGVQYXRoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+
c2V0QWx3YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYWx3YXlzVXNlQ29tcGxleFRleHRDb2Rl
UGF0aCk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCB1c2VGb250U21vb3RoaW5nKQogewotICAgIHRvSW1w
bChjb250ZXh0UmVmKS0+c2V0U2hvdWxkVXNlRm9udFNtb290aGluZyh1c2VGb250U21vb3RoaW5n
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0U2hvdWxkVXNlRm9udFNtb290
aGluZyh1c2VGb250U21vb3RoaW5nKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRBZGRpdGlvbmFs
UGx1Z2luc0RpcmVjdG9yeShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgcGx1
Z2luc0RpcmVjdG9yeSkKIHsKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICB0
b0ltcGwoY29udGV4dFJlZiktPnNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3J5KHRvSW1wbChw
bHVnaW5zRGlyZWN0b3J5KS0+c3RyaW5nKCkpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeShXZWJLaXQ6OnRvSW1wbChwbHVnaW5z
RGlyZWN0b3J5KS0+c3RyaW5nKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29udGV4dFJl
Zik7CiAgICAgVU5VU0VEX1BBUkFNKHBsdWdpbnNEaXJlY3RvcnkpOwpAQCAtMzYxLDcgKzM2MSw3
IEBAIHZvaWQgV0tDb250ZXh0U2V0QWRkaXRpb25hbFBsdWdpbnNEaXJlY3RvcnkoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmCiB2b2lkIFdLQ29udGV4dFJlZnJlc2hQbHVnSW5z
KFdLQ29udGV4dFJlZiBjb250ZXh0KQogewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQotICAgIHRvSW1wbChjb250ZXh0KS0+cmVmcmVzaFBsdWdpbnMoKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChjb250ZXh0KS0+cmVmcmVzaFBsdWdpbnMoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGNvbnRleHQpOwogI2VuZGlmCkBAIC0zNjksNzAgKzM2OSw3MCBAQCB2b2lkIFdLQ29udGV4dFJl
ZnJlc2hQbHVnSW5zKFdLQ29udGV4dFJlZiBjb250ZXh0KQogCiB2b2lkIFdLQ29udGV4dFJlZ2lz
dGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0
cmluZ1JlZiB1cmxTY2hlbWUpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYpLT5yZWdpc3RlclVS
TFNjaGVtZUFzRW1wdHlEb2N1bWVudCh0b0ltcGwodXJsU2NoZW1lKS0+c3RyaW5nKCkpOworICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5yZWdpc3RlclVSTFNjaGVtZUFzRW1wdHlEb2N1
bWVudChXZWJLaXQ6OnRvSW1wbCh1cmxTY2hlbWUpLT5zdHJpbmcoKSk7CiB9CiAKIHZvaWQgV0tD
b250ZXh0UmVnaXN0ZXJVUkxTY2hlbWVBc1NlY3VyZShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
V0tTdHJpbmdSZWYgdXJsU2NoZW1lKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+cmVnaXN0
ZXJVUkxTY2hlbWVBc1NlY3VyZSh0b0ltcGwodXJsU2NoZW1lKS0+c3RyaW5nKCkpOworICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKFdlYktp
dDo6dG9JbXBsKHVybFNjaGVtZSktPnN0cmluZygpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRSZWdp
c3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiB1cmxTY2hlbWUpCiB7Ci0gICAgdG9JbXBsKGNvbnRl
eHRSZWYpLT5yZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5
KHRvSW1wbCh1cmxTY2hlbWUpLT5zdHJpbmcoKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPnJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3ko
V2ViS2l0Ojp0b0ltcGwodXJsU2NoZW1lKS0+c3RyaW5nKCkpOwogfQogCiB2b2lkIFdLQ29udGV4
dFJlZ2lzdGVyVVJMU2NoZW1lQXNDYWNoZVBhcnRpdGlvbmVkKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmLCBXS1N0cmluZ1JlZiB1cmxTY2hlbWUpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYpLT5y
ZWdpc3RlclVSTFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZCh0b0ltcGwodXJsU2NoZW1lKS0+c3Ry
aW5nKCkpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5yZWdpc3RlclVSTFNjaGVt
ZUFzQ2FjaGVQYXJ0aXRpb25lZChXZWJLaXQ6OnRvSW1wbCh1cmxTY2hlbWUpLT5zdHJpbmcoKSk7
CiB9CiAKIHZvaWQgV0tDb250ZXh0UmVnaXN0ZXJVUkxTY2hlbWVBc0NhbkRpc3BsYXlPbmx5SWZD
YW5SZXF1ZXN0KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiB1cmxTY2hlbWUp
CiB7Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYpLT5yZWdpc3RlclVSTFNjaGVtZUFzQ2FuRGlzcGxh
eU9ubHlJZkNhblJlcXVlc3QodG9JbXBsKHVybFNjaGVtZSktPnN0cmluZygpKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cmVnaXN0ZXJVUkxTY2hlbWVBc0NhbkRpc3BsYXlPbmx5
SWZDYW5SZXF1ZXN0KFdlYktpdDo6dG9JbXBsKHVybFNjaGVtZSktPnN0cmluZygpKTsKIH0KIAog
dm9pZCBXS0NvbnRleHRTZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKFdL
Q29udGV4dFJlZiBjb250ZXh0UmVmLCBXS1N0cmluZ1JlZiB1cmxTY2hlbWUpCiB7Ci0gICAgdG9J
bXBsKGNvbnRleHRSZWYpLT5zZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1l
KHRvSW1wbCh1cmxTY2hlbWUpLT5zdHJpbmcoKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPnNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoV2ViS2l0Ojp0
b0ltcGwodXJsU2NoZW1lKS0+c3RyaW5nKCkpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldENhbkhh
bmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBi
b29sIHZhbHVlKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0Q2FuSGFuZGxlSFRUUFNT
ZXJ2ZXJUcnVzdEV2YWx1YXRpb24odmFsdWUpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRS
ZWYpLT5zZXRDYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbih2YWx1ZSk7CiB9CiAK
IHZvaWQgV0tDb250ZXh0U2V0UHJld2FybXNQcm9jZXNzZXNBdXRvbWF0aWNhbGx5KFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBib29sIHZhbHVlKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+
Y29uZmlndXJhdGlvbigpLnNldElzQXV0b21hdGljUHJvY2Vzc1dhcm1pbmdFbmFibGVkKHZhbHVl
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y29uZmlndXJhdGlvbigpLnNldElz
QXV0b21hdGljUHJvY2Vzc1dhcm1pbmdFbmFibGVkKHZhbHVlKTsKIH0KIAogdm9pZCBXS0NvbnRl
eHRTZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIG5hbWUpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYp
LT5zZXRDdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIodG9JbXBsKG5hbWUp
LT5zdHJpbmcoKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEN1c3RvbVdl
YkNvbnRlbnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllcihXZWJLaXQ6OnRvSW1wbChuYW1lKS0+c3Ry
aW5nKCkpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldERpc2tDYWNoZVNwZWN1bGF0aXZlVmFsaWRh
dGlvbkVuYWJsZWQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wgdmFsdWUpCiB7Ci0gICAg
dG9JbXBsKGNvbnRleHRSZWYpLT5jb25maWd1cmF0aW9uKCkuc2V0RGlza0NhY2hlU3BlY3VsYXRp
dmVWYWxpZGF0aW9uRW5hYmxlZCh2YWx1ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPmNvbmZpZ3VyYXRpb24oKS5zZXREaXNrQ2FjaGVTcGVjdWxhdGl2ZVZhbGlkYXRpb25FbmFi
bGVkKHZhbHVlKTsKIH0KIAogdm9pZCBXS0NvbnRleHRQcmVjb25uZWN0VG9TZXJ2ZXIoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLVVJMUmVmIHNlcnZlclVSTFJlZikKIHsKLSAgICB0b0ltcGwo
Y29udGV4dFJlZiktPnByZWNvbm5lY3RUb1NlcnZlcihVUkwoVVJMKCksIHRvV1RGU3RyaW5nKHNl
cnZlclVSTFJlZikpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cHJlY29ubmVj
dFRvU2VydmVyKFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoc2VydmVyVVJMUmVmKSkpOwogfQogCiBX
S0Nvb2tpZU1hbmFnZXJSZWYgV0tDb250ZXh0R2V0Q29va2llTWFuYWdlcihXS0NvbnRleHRSZWYg
Y29udGV4dFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNvbnRleHRSZWYpLT5zdXBw
bGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktp
dDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KSk7CiB9CiAKIFdLV2Vic2l0ZURhdGFTdG9yZVJlZiBXS0NvbnRleHRHZXRXZWJzaXRlRGF0YVN0
b3JlKFdLQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIGF1dG8qIGRhdGFTdG9yZSA9IHRvSW1w
bChjb250ZXh0KS0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgIGF1dG8qIGRhdGFTdG9yZSA9IFdl
YktpdDo6dG9JbXBsKGNvbnRleHQpLT53ZWJzaXRlRGF0YVN0b3JlKCk7CiAgICAgaWYgKCFkYXRh
U3RvcmUpIHsKICAgICAgICAgYXV0byBkZWZhdWx0RGF0YVN0b3JlID0gQVBJOjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCk7Ci0gICAgICAgIHRvSW1wbChjb250ZXh0KS0+c2V0
UHJpbWFyeURhdGFTdG9yZShkZWZhdWx0RGF0YVN0b3JlLmdldCgpKTsKKyAgICAgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dCktPnNldFByaW1hcnlEYXRhU3RvcmUoZGVmYXVsdERhdGFTdG9yZS5n
ZXQoKSk7CiAgICAgICAgIGRhdGFTdG9yZSA9IGRlZmF1bHREYXRhU3RvcmUucHRyKCk7CiAgICAg
fQogCkBAIC00NDYsNyArNDQ2LDcgQEAgV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlclJlZiBXS0Nv
bnRleHRHZXRBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcihXS0NvbnRleHRSZWYgY28KIAogV0tHZW9s
b2NhdGlvbk1hbmFnZXJSZWYgV0tDb250ZXh0R2V0R2VvbG9jYXRpb25NYW5hZ2VyKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoY29udGV4dFJlZikt
PnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCkpOworICAgIHJldHVybiB0
b0FQSShXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c3VwcGxlbWVudDxXZWJHZW9sb2NhdGlv
bk1hbmFnZXJQcm94eT4oKSk7CiB9CiAKIFdLSWNvbkRhdGFiYXNlUmVmIFdLQ29udGV4dEdldElj
b25EYXRhYmFzZShXS0NvbnRleHRSZWYpCkBAIC00NjIsNyArNDYyLDcgQEAgV0tLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyUmVmIFdLQ29udGV4dEdldEtleVZhbHVlU3RvcmFnZU1hbmFnZXIoV0tDb250
ZXh0UmVmIGNvbnQKIFdLTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyUmVmIFdLQ29udGV4dEdldE1l
ZGlhU2Vzc2lvbkZvY3VzTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKICNpZiBFTkFC
TEUoTUVESUFfU0VTU0lPTikKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNvbnRleHQpLT5zdXBw
bGVtZW50PFdlYk1lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlcj4oKSk7CisgICAgcmV0dXJuIHRvQVBJ
KFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5zdXBwbGVtZW50PFdlYk1lZGlhU2Vzc2lvbkZvY3Vz
TWFuYWdlcj4oKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTQ3MSw3ICs0NzEsNyBAQCBXS01lZGlhU2Vzc2lvbkZvY3VzTWFuYWdl
clJlZiBXS0NvbnRleHRHZXRNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIoV0tDb250ZXh0UmVmCiAK
IFdLTm90aWZpY2F0aW9uTWFuYWdlclJlZiBXS0NvbnRleHRHZXROb3RpZmljYXRpb25NYW5hZ2Vy
KFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoY29u
dGV4dFJlZiktPnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpKTsKKyAg
ICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnN1cHBsZW1lbnQ8V2Vi
Tm90aWZpY2F0aW9uTWFuYWdlclByb3h5PigpKTsKIH0KIAogV0tSZXNvdXJjZUNhY2hlTWFuYWdl
clJlZiBXS0NvbnRleHRHZXRSZXNvdXJjZUNhY2hlTWFuYWdlcihXS0NvbnRleHRSZWYgY29udGV4
dCkKQEAgLTQ4MSwxMiArNDgxLDEyIEBAIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJSZWYgV0tDb250
ZXh0R2V0UmVzb3VyY2VDYWNoZU1hbmFnZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpCiAKIHZvaWQg
V0tDb250ZXh0U3RhcnRNZW1vcnlTYW1wbGVyKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmLCBXS0Rv
dWJsZVJlZiBpbnRlcnZhbCkKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnN0YXJ0TWVtb3J5
U2FtcGxlcih0b0ltcGwoaW50ZXJ2YWwpLT52YWx1ZSgpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChj
b250ZXh0UmVmKS0+c3RhcnRNZW1vcnlTYW1wbGVyKFdlYktpdDo6dG9JbXBsKGludGVydmFsKS0+
dmFsdWUoKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U3RvcE1lbW9yeVNhbXBsZXIoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYpLT5zdG9wTWVtb3J5U2Ft
cGxlcigpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zdG9wTWVtb3J5U2FtcGxl
cigpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldEljb25EYXRhYmFzZVBhdGgoV0tDb250ZXh0UmVm
LCBXS1N0cmluZ1JlZikKQEAgLTQ5NSwxMDUgKzQ5NSwxMDUgQEAgdm9pZCBXS0NvbnRleHRTZXRJ
Y29uRGF0YWJhc2VQYXRoKFdLQ29udGV4dFJlZiwgV0tTdHJpbmdSZWYpCiAKIHZvaWQgV0tDb250
ZXh0QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmLCBXS0NlcnRpZmljYXRlSW5mb1JlZiBjZXJ0aWZpY2F0ZVJlZiwgV0tTdHJpbmdSZWYg
aG9zdFJlZikKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPmFsbG93U3BlY2lmaWNIVFRQU0Nl
cnRpZmljYXRlRm9ySG9zdCh0b0ltcGwoY2VydGlmaWNhdGVSZWYpLCB0b0ltcGwoaG9zdFJlZikt
PnN0cmluZygpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+YWxsb3dTcGVjaWZp
Y0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KFdlYktpdDo6dG9JbXBsKGNlcnRpZmljYXRlUmVmKSwg
V2ViS2l0Ojp0b0ltcGwoaG9zdFJlZiktPnN0cmluZygpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRE
aXNhYmxlUHJvY2Vzc1Rlcm1pbmF0aW9uKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewotICAg
IHRvSW1wbChjb250ZXh0UmVmKS0+ZGlzYWJsZVByb2Nlc3NUZXJtaW5hdGlvbigpOworICAgIFdl
YktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5kaXNhYmxlUHJvY2Vzc1Rlcm1pbmF0aW9uKCk7CiB9
CiAKIHZvaWQgV0tDb250ZXh0RW5hYmxlUHJvY2Vzc1Rlcm1pbmF0aW9uKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+ZW5hYmxlUHJvY2Vzc1Rlcm1p
bmF0aW9uKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmVuYWJsZVByb2Nlc3NU
ZXJtaW5hdGlvbigpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldEhUVFBQaXBlbGluaW5nRW5hYmxl
ZChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChj
b250ZXh0UmVmKS0+c2V0SFRUUFBpcGVsaW5pbmdFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktp
dDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRIVFRQUGlwZWxpbmluZ0VuYWJsZWQoZW5hYmxlZCk7
CiB9CiAKIHZvaWQgV0tDb250ZXh0V2FybUluaXRpYWxQcm9jZXNzKFdLQ29udGV4dFJlZiBjb250
ZXh0UmVmKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+cHJld2FybVByb2Nlc3MoV2ViUHJv
Y2Vzc1Bvb2w6Ok1heUNyZWF0ZURlZmF1bHREYXRhU3RvcmU6Olllcyk7CisgICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dFJlZiktPnByZXdhcm1Qcm9jZXNzKFdlYlByb2Nlc3NQb29sOjpNYXlDcmVh
dGVEZWZhdWx0RGF0YVN0b3JlOjpZZXMpOwogfQogCiB2b2lkIFdLQ29udGV4dEdldFN0YXRpc3Rp
Y3MoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIHZvaWQqIGNvbnRleHQsIFdLQ29udGV4dEdldFN0
YXRpc3RpY3NGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPmdl
dFN0YXRpc3RpY3MoMHhGRkZGRkZGRiwgdG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0
LCBjYWxsYmFjaykpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5nZXRTdGF0aXN0
aWNzKDB4RkZGRkZGRkYsIHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJh
Y2spKTsKIH0KIAogdm9pZCBXS0NvbnRleHRHZXRTdGF0aXN0aWNzV2l0aE9wdGlvbnMoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RhdGlzdGljc09wdGlvbnMgb3B0aW9uc01hc2ssIHZvaWQq
IGNvbnRleHQsIFdLQ29udGV4dEdldFN0YXRpc3RpY3NGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAg
ICB0b0ltcGwoY29udGV4dFJlZiktPmdldFN0YXRpc3RpY3Mob3B0aW9uc01hc2ssIHRvR2VuZXJp
Y0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChjb250ZXh0UmVmKS0+Z2V0U3RhdGlzdGljcyhvcHRpb25zTWFzaywgdG9HZW5lcmljQ2FsbGJh
Y2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiBib29sIFdLQ29udGV4dEphdmFT
Y3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7
Ci0gICAgcmV0dXJuIHRvSW1wbChjb250ZXh0UmVmKS0+amF2YVNjcmlwdENvbmZpZ3VyYXRpb25G
aWxlRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+amF2
YVNjcmlwdENvbmZpZ3VyYXRpb25GaWxlRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLQ29udGV4dFNl
dEphdmFTY3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWQoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIGJvb2wgZW5hYmxlKQogewotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0SmF2YVNjcmlw
dENvbmZpZ3VyYXRpb25GaWxlRW5hYmxlZChlbmFibGUpOworICAgIFdlYktpdDo6dG9JbXBsKGNv
bnRleHRSZWYpLT5zZXRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkZpbGVFbmFibGVkKGVuYWJsZSk7
CiB9CiAKIHZvaWQgV0tDb250ZXh0R2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cyhXS0Nv
bnRleHRSZWYgY29udGV4dFJlZikKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPmdhcmJhZ2VD
b2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVm
KS0+Z2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cygpOwogfQogCiB2b2lkIFdLQ29udGV4
dFNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKFdLQ29udGV4dFJlZiBj
b250ZXh0UmVmLCBib29sIGVuYWJsZSkKIHsKLSAgICB0b0ltcGwoY29udGV4dFJlZiktPnNldEph
dmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFibGVkKGVuYWJsZSk7CisgICAgV2ViS2l0
Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJF
bmFibGVkKGVuYWJsZSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0VXNlVGVzdGluZ05ldHdvcmtTZXNz
aW9uKFdLQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHRvSW1wbChjb250ZXh0KS0+dXNlVGVz
dGluZ05ldHdvcmtTZXNzaW9uKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnVzZVRl
c3RpbmdOZXR3b3JrU2Vzc2lvbigpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldEFsbG93c0FueVNT
TENlcnRpZmljYXRlRm9yV2ViU29ja2V0VGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dCwgYm9v
bCBhbGxvd3MpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHQpLT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZUZvcldlYlNvY2tldChhbGxvd3MpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5z
ZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChhbGxvd3MpOwogfQogCiB2b2lk
IFdLQ29udGV4dFNldEFsbG93c0FueVNTTENlcnRpZmljYXRlRm9yU2VydmljZVdvcmtlclRlc3Rp
bmcoV0tDb250ZXh0UmVmIGNvbnRleHQsIGJvb2wgYWxsb3dzKQogewogI2lmIEVOQUJMRShTRVJW
SUNFX1dPUktFUikKLSAgICB0b0ltcGwoY29udGV4dCktPnNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yU2VydmljZVdvcmtlcihhbGxvd3MpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQp
LT5zZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvclNlcnZpY2VXb3JrZXIoYWxsb3dzKTsKICNl
bmRpZgogfQogCiB2b2lkIFdLQ29udGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoV0tDb250ZXh0
UmVmIGNvbnRleHQpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHQpLT5jbGVhckNhY2hlZENyZWRlbnRp
YWxzKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPmNsZWFyQ2FjaGVkQ3JlZGVudGlh
bHMoKTsKIH0KIAogV0tEaWN0aW9uYXJ5UmVmIFdLQ29udGV4dENvcHlQbHVnSW5BdXRvU3RhcnRP
cmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJ
KCZ0b0ltcGwoY29udGV4dFJlZiktPnBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcygpLmxlYWtS
ZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJKCZXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+cGx1
Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzKCkubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS0NvbnRl
eHRTZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYs
IFdLRGljdGlvbmFyeVJlZiBkaWN0aW9uYXJ5UmVmKQogewogICAgIGlmICghZGljdGlvbmFyeVJl
ZikKICAgICAgICAgcmV0dXJuOwotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0UGx1Z0luQXV0
b1N0YXJ0T3JpZ2luSGFzaGVzKCp0b0ltcGwoZGljdGlvbmFyeVJlZikpOworICAgIFdlYktpdDo6
dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoZXMoKldlYktp
dDo6dG9JbXBsKGRpY3Rpb25hcnlSZWYpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRTZXRQbHVnSW5B
dXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0ZXJUaW1lKFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS0RpY3Rpb25hcnlSZWYgZGljdGlvbmFyeVJlZiwgZG91YmxlIHRp
bWUpCiB7CiAgICAgaWYgKCFkaWN0aW9uYXJ5UmVmKQogICAgICAgICByZXR1cm47Ci0gICAgdG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50
cmllc0FkZGVkQWZ0ZXJUaW1lKCp0b0ltcGwoZGljdGlvbmFyeVJlZiksIFdhbGxUaW1lOjpmcm9t
UmF3U2Vjb25kcyh0aW1lKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldFBs
dWdJbkF1dG9TdGFydE9yaWdpbnNGaWx0ZXJpbmdPdXRFbnRyaWVzQWRkZWRBZnRlclRpbWUoKldl
YktpdDo6dG9JbXBsKGRpY3Rpb25hcnlSZWYpLCBXYWxsVGltZTo6ZnJvbVJhd1NlY29uZHModGlt
ZSkpOwogfQogCiB2b2lkIFdLQ29udGV4dFNldFBsdWdJbkF1dG9TdGFydE9yaWdpbnMoV0tDb250
ZXh0UmVmIGNvbnRleHRSZWYsIFdLQXJyYXlSZWYgYXJyYXlSZWYpCiB7CiAgICAgaWYgKCFhcnJh
eVJlZikKICAgICAgICAgcmV0dXJuOwotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0UGx1Z0lu
QXV0b1N0YXJ0T3JpZ2lucygqdG9JbXBsKGFycmF5UmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
Y29udGV4dFJlZiktPnNldFBsdWdJbkF1dG9TdGFydE9yaWdpbnMoKldlYktpdDo6dG9JbXBsKGFy
cmF5UmVmKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbihX
S0NvbnRleHRJbnZhbGlkTWVzc2FnZUZ1bmN0aW9uIGludmFsaWRNZXNzYWdlRnVuY3Rpb24pCkBA
IC02MDMsMjcgKzYwMywyNyBAQCB2b2lkIFdLQ29udGV4dFNldEludmFsaWRNZXNzYWdlRnVuY3Rp
b24oV0tDb250ZXh0SW52YWxpZE1lc3NhZ2VGdW5jdGlvbiBpbnZhbGlkTQogCiB2b2lkIFdLQ29u
dGV4dFNldE1lbW9yeUNhY2hlRGlzYWJsZWQoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIGJvb2wg
ZGlzYWJsZWQpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHRSZWYpLT5zZXRNZW1vcnlDYWNoZURpc2Fi
bGVkKGRpc2FibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0TWVtb3J5
Q2FjaGVEaXNhYmxlZChkaXNhYmxlZCk7CiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0Rm9udFdoaXRl
bGlzdChXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tBcnJheVJlZiBhcnJheVJlZikKIHsKLSAg
ICB0b0ltcGwoY29udGV4dFJlZiktPnNldEZvbnRXaGl0ZWxpc3QodG9JbXBsKGFycmF5UmVmKSk7
CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldEZvbnRXaGl0ZWxpc3QoV2ViS2l0
Ojp0b0ltcGwoYXJyYXlSZWYpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRUZXJtaW5hdGVOZXR3b3Jr
UHJvY2VzcyhXS0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICB0b0ltcGwoY29udGV4dCktPnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnRl
cm1pbmF0ZU5ldHdvcmtQcm9jZXNzKCk7CiB9CiAKIHZvaWQgV0tDb250ZXh0VGVybWluYXRlU2Vy
dmljZVdvcmtlclByb2Nlc3MoV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0gICAgdG9JbXBsKGNv
bnRleHQpLT50ZXJtaW5hdGVTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKCk7CisgICAgV2ViS2l0Ojp0
b0ltcGwoY29udGV4dCktPnRlcm1pbmF0ZVNlcnZpY2VXb3JrZXJQcm9jZXNzZXMoKTsKIH0KIAog
UHJvY2Vzc0lEIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRS
ZWYgY29udGV4dFJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGNvbnRleHRSZWYpLT5uZXR3b3Jr
UHJvY2Vzc0lkZW50aWZpZXIoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJl
ZiktPm5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcigpOwogfQogCiB2b2lkIFdLQ29udGV4dEFkZFN1
cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dFJlZiwgV0tTdHJpbmdSZWYgZG9tYWlu
UmVmLCBXS1N0cmluZ1JlZiBuYW1lUmVmLCBXS0FycmF5UmVmIG1pbWVUeXBlc1JlZiwgV0tBcnJh
eVJlZiBleHRlbnNpb25zUmVmKQpAQCAtNjM5LDE4ICs2MzksMTggQEAgdm9pZCBXS0NvbnRleHRB
ZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIFdLU3RyaW5nUmVmIGRv
bWFpblJlZiwKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAg
IGV4dGVuc2lvbnMuYWRkKHRvV1RGU3RyaW5nKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Fy
cmF5R2V0SXRlbUF0SW5kZXgoZXh0ZW5zaW9uc1JlZiwgaSkpKSk7CiAKLSAgICB0b0ltcGwoY29u
dGV4dFJlZiktPmFkZFN1cHBvcnRlZFBsdWdpbih0b1dURlN0cmluZyhkb21haW5SZWYpLCB0b1dU
RlN0cmluZyhuYW1lUmVmKSwgV1RGTW92ZShtaW1lVHlwZXMpLCBXVEZNb3ZlKGV4dGVuc2lvbnMp
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+YWRkU3VwcG9ydGVkUGx1Z2luKHRv
V1RGU3RyaW5nKGRvbWFpblJlZiksIHRvV1RGU3RyaW5nKG5hbWVSZWYpLCBXVEZNb3ZlKG1pbWVU
eXBlcyksIFdURk1vdmUoZXh0ZW5zaW9ucykpOwogI2VuZGlmCiB9CiAKIHZvaWQgV0tDb250ZXh0
Q2xlYXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogI2lmIEVO
QUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIHRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJT
dXBwb3J0ZWRQbHVnaW5zKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNsZWFy
U3VwcG9ydGVkUGx1Z2lucygpOwogI2VuZGlmCiB9CiAKIHZvaWQgV0tDb250ZXh0U2V0SURCUGVy
T3JpZ2luUXVvdGEoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIHVpbnQ2NF90IHF1b3RhKQogewot
ICAgIHRvSW1wbChjb250ZXh0UmVmKS0+c2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOworICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRD
b25maWd1cmF0aW9uUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYuY3BwCmluZGV4IDg2ZDQxMjk5ZGZhYWIzZDY0ZTdjNDFlMDYw
YzAyZjY2MWNkMWMzN2UuLjNjMjViNzYzYWZlNTA5MWNhNzNjOTg5MGZmOWQ1NGU4ZWUwODhiZGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dENvbmZp
Z3VyYXRpb25SZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYuY3BwCkBAIC01MCwxNTIgKzUwLDE1MiBAQCBXS0NvbnRleHRD
b25maWd1cmF0aW9uUmVmIFdLQ29udGV4dENvbmZpZ3VyYXRpb25DcmVhdGVXaXRoTGVnYWN5T3B0
aW9ucygpCiAKIFdLU3RyaW5nUmVmIFdLQ29udGV4dENvbmZpZ3VyYXRpb25Db3B5RGlza0NhY2hl
RGlyZWN0b3J5KFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsKLSAg
ICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5kaXNrQ2FjaGVEaXJl
Y3RvcnkoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGNvbmZpZ3Vy
YXRpb24pLT5kaXNrQ2FjaGVEaXJlY3RvcnkoKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0Q29uZmln
dXJhdGlvblNldERpc2tDYWNoZURpcmVjdG9yeShXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNv
bmZpZ3VyYXRpb24sIFdLU3RyaW5nUmVmIGRpc2tDYWNoZURpcmVjdG9yeSkKIHsKLSAgICB0b0lt
cGwoY29uZmlndXJhdGlvbiktPnNldERpc2tDYWNoZURpcmVjdG9yeSh0b0ltcGwoZGlza0NhY2hl
RGlyZWN0b3J5KS0+c3RyaW5nKCkpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24p
LT5zZXREaXNrQ2FjaGVEaXJlY3RvcnkoV2ViS2l0Ojp0b0ltcGwoZGlza0NhY2hlRGlyZWN0b3J5
KS0+c3RyaW5nKCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS0NvbnRleHRDb25maWd1cmF0aW9uQ29w
eUFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25m
aWd1cmF0aW9uKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoY29uZmlndXJhdGlv
biktPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJ
KFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5
KCkpOwogfQogCiB2b2lkIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRBcHBsaWNhdGlvbkNhY2hl
RGlyZWN0b3J5KFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbiwgV0tTdHJp
bmdSZWYgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSkKIHsKLSAgICB0b0ltcGwoY29uZmlndXJh
dGlvbiktPnNldEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkodG9JbXBsKGFwcGxpY2F0aW9uQ2Fj
aGVEaXJlY3RvcnkpLT5zdHJpbmcoKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlv
biktPnNldEFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoV2ViS2l0Ojp0b0ltcGwoYXBwbGljYXRp
b25DYWNoZURpcmVjdG9yeSktPnN0cmluZygpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tDb250ZXh0
Q29uZmlndXJhdGlvbkNvcHlJbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeShXS0NvbnRleHRDb25m
aWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRv
SW1wbChjb25maWd1cmF0aW9uKS0+aW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAg
cmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5pbmRleGVk
REJEYXRhYmFzZURpcmVjdG9yeSgpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRDb25maWd1cmF0aW9u
U2V0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBj
b25maWd1cmF0aW9uLCBXS1N0cmluZ1JlZiBpbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSkKIHsK
LSAgICB0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5
KHRvSW1wbChpbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSktPnN0cmluZygpKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rvcnko
V2ViS2l0Ojp0b0ltcGwoaW5kZXhlZERCRGF0YWJhc2VEaXJlY3RvcnkpLT5zdHJpbmcoKSk7CiB9
CiAKIFdLU3RyaW5nUmVmIFdLQ29udGV4dENvbmZpZ3VyYXRpb25Db3B5SW5qZWN0ZWRCdW5kbGVQ
YXRoKFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICByZXR1
cm4gdG9Db3BpZWRBUEkodG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5pbmplY3RlZEJ1bmRsZVBhdGgo
KSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24p
LT5pbmplY3RlZEJ1bmRsZVBhdGgoKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0Q29uZmlndXJhdGlv
blNldEluamVjdGVkQnVuZGxlUGF0aChXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3Vy
YXRpb24sIFdLU3RyaW5nUmVmIGluamVjdGVkQnVuZGxlUGF0aCkKIHsKLSAgICB0b0ltcGwoY29u
ZmlndXJhdGlvbiktPnNldEluamVjdGVkQnVuZGxlUGF0aCh0b0ltcGwoaW5qZWN0ZWRCdW5kbGVQ
YXRoKS0+c3RyaW5nKCkpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRJ
bmplY3RlZEJ1bmRsZVBhdGgoV2ViS2l0Ojp0b0ltcGwoaW5qZWN0ZWRCdW5kbGVQYXRoKS0+c3Ry
aW5nKCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS0NvbnRleHRDb25maWd1cmF0aW9uQ29weUxvY2Fs
U3RvcmFnZURpcmVjdG9yeShXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24p
CiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChjb25maWd1cmF0aW9uKS0+bG9jYWxT
dG9yYWdlRGlyZWN0b3J5KCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1w
bChjb25maWd1cmF0aW9uKS0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkpOwogfQogCiB2b2lkIFdL
Q29udGV4dENvbmZpZ3VyYXRpb25TZXRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoV0tDb250ZXh0Q29u
ZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBXS1N0cmluZ1JlZiBsb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkpCiB7Ci0gICAgdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRMb2NhbFN0b3JhZ2VEaXJl
Y3RvcnkodG9JbXBsKGxvY2FsU3RvcmFnZURpcmVjdG9yeSktPnN0cmluZygpKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KFdlYktp
dDo6dG9JbXBsKGxvY2FsU3RvcmFnZURpcmVjdG9yeSktPnN0cmluZygpKTsKIH0KIAogV0tTdHJp
bmdSZWYgV0tDb250ZXh0Q29uZmlndXJhdGlvbkNvcHlXZWJTUUxEYXRhYmFzZURpcmVjdG9yeShX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgcmV0dXJuIHRv
Q29waWVkQVBJKHRvSW1wbChjb25maWd1cmF0aW9uKS0+d2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnko
KSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24p
LT53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpKTsKIH0KIAogdm9pZCBXS0NvbnRleHRDb25maWd1
cmF0aW9uU2V0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoV0tDb250ZXh0Q29uZmlndXJhdGlvblJl
ZiBjb25maWd1cmF0aW9uLCBXS1N0cmluZ1JlZiB3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSkKIHsK
LSAgICB0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldFdlYlNRTERhdGFiYXNlRGlyZWN0b3J5KHRv
SW1wbCh3ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSktPnN0cmluZygpKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChjb25maWd1cmF0aW9uKS0+c2V0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoV2ViS2l0Ojp0
b0ltcGwod2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkpLT5zdHJpbmcoKSk7CiB9CiAKIFdLU3RyaW5n
UmVmIFdLQ29udGV4dENvbmZpZ3VyYXRpb25Db3B5TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeShX
S0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24pCiB7Ci0gICAgcmV0dXJuIHRv
Q29waWVkQVBJKHRvSW1wbChjb25maWd1cmF0aW9uKS0+bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9y
eSgpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlv
biktPm1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKSk7CiB9CiAKIHZvaWQgV0tDb250ZXh0Q29u
ZmlndXJhdGlvblNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoV0tDb250ZXh0Q29uZmlndXJh
dGlvblJlZiBjb25maWd1cmF0aW9uLCBXS1N0cmluZ1JlZiBtZWRpYUtleXNTdG9yYWdlRGlyZWN0
b3J5KQogewotICAgIHRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0TWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSh0b0ltcGwobWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSktPnN0cmluZygpKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0TWVkaWFLZXlzU3RvcmFnZURpcmVj
dG9yeShXZWJLaXQ6OnRvSW1wbChtZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KS0+c3RyaW5nKCkp
OwogfQogCiBXS1N0cmluZ1JlZiBXS0NvbnRleHRDb25maWd1cmF0aW9uQ29weVJlc291cmNlTG9h
ZFN0YXRpc3RpY3NEaXJlY3RvcnkoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0
aW9uKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoY29uZmlndXJhdGlvbiktPnJl
c291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJ
KFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGly
ZWN0b3J5KCkpOwogfQogCiB2b2lkIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5KFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJh
dGlvbiwgV0tTdHJpbmdSZWYgcmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSkKIHsKLSAg
ICB0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3Rv
cnkodG9JbXBsKHJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkpLT5zdHJpbmcoKSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldFJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NEaXJlY3RvcnkoV2ViS2l0Ojp0b0ltcGwocmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9y
eSktPnN0cmluZygpKTsKIH0KIAogYm9vbCBXS0NvbnRleHRDb25maWd1cmF0aW9uRnVsbHlTeW5j
aHJvbm91c01vZGVJc0FsbG93ZWRGb3JUZXN0aW5nKFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYg
Y29uZmlndXJhdGlvbikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5mdWxs
eVN5bmNocm9ub3VzTW9kZUlzQWxsb3dlZEZvclRlc3RpbmcoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPmZ1bGx5U3luY2hyb25vdXNNb2RlSXNBbGxvd2VkRm9y
VGVzdGluZygpOwogfQogCiB2b2lkIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRGdWxseVN5bmNo
cm9ub3VzTW9kZUlzQWxsb3dlZEZvclRlc3RpbmcoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBj
b25maWd1cmF0aW9uLCBib29sIGFsbG93ZWQpCiB7Ci0gICAgdG9JbXBsKGNvbmZpZ3VyYXRpb24p
LT5zZXRGdWxseVN5bmNocm9ub3VzTW9kZUlzQWxsb3dlZEZvclRlc3RpbmcoYWxsb3dlZCk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldEZ1bGx5U3luY2hyb25vdXNNb2Rl
SXNBbGxvd2VkRm9yVGVzdGluZyhhbGxvd2VkKTsKIH0KIAogV0tBcnJheVJlZiBXS0NvbnRleHRD
b25maWd1cmF0aW9uQ29weU92ZXJyaWRlTGFuZ3VhZ2VzKFdLQ29udGV4dENvbmZpZ3VyYXRpb25S
ZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICByZXR1cm4gdG9BUEkoJkFQSTo6QXJyYXk6OmNyZWF0
ZVN0cmluZ0FycmF5KHRvSW1wbChjb25maWd1cmF0aW9uKS0+b3ZlcnJpZGVMYW5ndWFnZXMoKSku
bGVha1JlZigpKTsKKyAgICByZXR1cm4gdG9BUEkoJkFQSTo6QXJyYXk6OmNyZWF0ZVN0cmluZ0Fy
cmF5KFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5vdmVycmlkZUxhbmd1YWdlcygpKS5s
ZWFrUmVmKCkpOwogfQogCiB2b2lkIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRPdmVycmlkZUxh
bmd1YWdlcyhXS0NvbnRleHRDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIFdLQXJyYXlS
ZWYgb3ZlcnJpZGVMYW5ndWFnZXMpCiB7Ci0gICAgdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRP
dmVycmlkZUxhbmd1YWdlcyh0b0ltcGwob3ZlcnJpZGVMYW5ndWFnZXMpLT50b1N0cmluZ1ZlY3Rv
cigpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0T3ZlcnJpZGVMYW5n
dWFnZXMoV2ViS2l0Ojp0b0ltcGwob3ZlcnJpZGVMYW5ndWFnZXMpLT50b1N0cmluZ1ZlY3Rvcigp
KTsKIH0KIAogYm9vbCBXS0NvbnRleHRDb25maWd1cmF0aW9uU2hvdWxkQ2FwdHVyZUF1ZGlvSW5V
SVByb2Nlc3MoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKQogewotICAg
IHJldHVybiB0b0ltcGwoY29uZmlndXJhdGlvbiktPnNob3VsZENhcHR1cmVBdWRpb0luVUlQcm9j
ZXNzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zaG91bGRD
YXB0dXJlQXVkaW9JblVJUHJvY2VzcygpOwogfQogCiB2b2lkIFdLQ29udGV4dENvbmZpZ3VyYXRp
b25TZXRTaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyhXS0NvbnRleHRDb25maWd1cmF0aW9u
UmVmIGNvbmZpZ3VyYXRpb24sIGJvb2wgc2hvdWxkKQogewotICAgIHRvSW1wbChjb25maWd1cmF0
aW9uKS0+c2V0U2hvdWxkQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3Moc2hvdWxkKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0U2hvdWxkQ2FwdHVyZUF1ZGlvSW5VSVByb2Nl
c3Moc2hvdWxkKTsKIH0KIAogYm9vbCBXS0NvbnRleHRDb25maWd1cmF0aW9uUHJvY2Vzc1N3YXBz
T25OYXZpZ2F0aW9uKFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsK
LSAgICByZXR1cm4gdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5wcm9jZXNzU3dhcHNPbk5hdmlnYXRp
b24oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnByb2Nlc3NT
d2Fwc09uTmF2aWdhdGlvbigpOwogfQogCiB2b2lkIFdLQ29udGV4dENvbmZpZ3VyYXRpb25TZXRQ
cm9jZXNzU3dhcHNPbk5hdmlnYXRpb24oV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1
cmF0aW9uLCBib29sIHN3YXBzKQogewotICAgIHRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0UHJv
Y2Vzc1N3YXBzT25OYXZpZ2F0aW9uKHN3YXBzKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb25maWd1
cmF0aW9uKS0+c2V0UHJvY2Vzc1N3YXBzT25OYXZpZ2F0aW9uKHN3YXBzKTsKIH0KIAogYm9vbCBX
S0NvbnRleHRDb25maWd1cmF0aW9uUHJld2FybXNQcm9jZXNzZXNBdXRvbWF0aWNhbGx5KFdLQ29u
dGV4dENvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KGNvbmZpZ3VyYXRpb24pLT5pc0F1dG9tYXRpY1Byb2Nlc3NXYXJtaW5nRW5hYmxlZCgpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+aXNBdXRvbWF0aWNQcm9jZXNz
V2FybWluZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS0NvbnRleHRDb25maWd1cmF0aW9uU2V0UHJl
d2FybXNQcm9jZXNzZXNBdXRvbWF0aWNhbGx5KFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29u
ZmlndXJhdGlvbiwgYm9vbCBwcmV3YXJtcykKIHsKLSAgICB0b0ltcGwoY29uZmlndXJhdGlvbikt
PnNldElzQXV0b21hdGljUHJvY2Vzc1dhcm1pbmdFbmFibGVkKHByZXdhcm1zKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0SXNBdXRvbWF0aWNQcm9jZXNzV2FybWluZ0Vu
YWJsZWQocHJld2FybXMpOwogfQogCiBib29sIFdLQ29udGV4dENvbmZpZ3VyYXRpb25BbHdheXNL
ZWVwQW5kUmV1c2VTd2FwcGVkUHJvY2Vzc2VzKFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29u
ZmlndXJhdGlvbikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5hbHdheXNL
ZWVwQW5kUmV1c2VTd2FwcGVkUHJvY2Vzc2VzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGNvbmZpZ3VyYXRpb24pLT5hbHdheXNLZWVwQW5kUmV1c2VTd2FwcGVkUHJvY2Vzc2VzKCk7CiB9
CiAKIHZvaWQgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldEFsd2F5c0tlZXBBbmRSZXVzZVN3YXBw
ZWRQcm9jZXNzZXMoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBib29s
IGtlZXBBbmRSZXVzZSkKIHsKLSAgICB0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldEFsd2F5c0tl
ZXBBbmRSZXVzZVN3YXBwZWRQcm9jZXNzZXMoa2VlcEFuZFJldXNlKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChjb25maWd1cmF0aW9uKS0+c2V0QWx3YXlzS2VlcEFuZFJldXNlU3dhcHBlZFByb2Nlc3Nl
cyhrZWVwQW5kUmV1c2UpOwogfQogCiBib29sIFdLQ29udGV4dENvbmZpZ3VyYXRpb25Qcm9jZXNz
U3dhcHNPbldpbmRvd09wZW5XaXRoT3BlbmVyKFdLQ29udGV4dENvbmZpZ3VyYXRpb25SZWYgY29u
ZmlndXJhdGlvbikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5wcm9jZXNz
U3dhcHNPbldpbmRvd09wZW5XaXRoT3BlbmVyKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KGNvbmZpZ3VyYXRpb24pLT5wcm9jZXNzU3dhcHNPbldpbmRvd09wZW5XaXRoT3BlbmVyKCk7CiB9
CiAKIHZvaWQgV0tDb250ZXh0Q29uZmlndXJhdGlvblNldFByb2Nlc3NTd2Fwc09uV2luZG93T3Bl
bldpdGhPcGVuZXIoV0tDb250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uLCBib29s
IHN3YXBzKQogewotICAgIHRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0UHJvY2Vzc1N3YXBzT25X
aW5kb3dPcGVuV2l0aE9wZW5lcihzd2Fwcyk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJh
dGlvbiktPnNldFByb2Nlc3NTd2Fwc09uV2luZG93T3BlbldpdGhPcGVuZXIoc3dhcHMpOwogfQog
CiBpbnQ2NF90IFdLQ29udGV4dENvbmZpZ3VyYXRpb25EaXNrQ2FjaGVTaXplT3ZlcnJpZGUoV0tD
b250ZXh0Q29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0TWVudUxpc3RlbmVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dE1lbnVMaXN0ZW5lci5jcHAKaW5kZXgg
NTk2MzkwN2I0YTE4OGY0ZjJjNDk2ZDVmMDIyMzcyZjdmMzEyMmZkMi4uYzcxYjE2NDhhNjA2NzE1
Y2E4NjkzMjQwOWZmYWZjODA4YzhjMzIzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0TWVudUxpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRNZW51TGlzdGVuZXIuY3BwCkBAIC00NSw3ICs0NSw3
IEBAIFdLVHlwZUlEIFdLQ29udGV4dE1lbnVMaXN0ZW5lckdldFR5cGVJRCgpCiB2b2lkIFdLQ29u
dGV4dE1lbnVMaXN0ZW5lclVzZUNvbnRleHRNZW51SXRlbXMoV0tDb250ZXh0TWVudUxpc3RlbmVy
UmVmIGxpc3RlbmVyUmVmLCBXS0FycmF5UmVmIGFycmF5UmVmKQogewogI2lmIEVOQUJMRShDT05U
RVhUX01FTlVTKQotICAgIFJlZlB0cjxBUEk6OkFycmF5PiBhcnJheSA9IHRvSW1wbChhcnJheVJl
Zik7CisgICAgUmVmUHRyPEFQSTo6QXJyYXk+IGFycmF5ID0gV2ViS2l0Ojp0b0ltcGwoYXJyYXlS
ZWYpOwogICAgIHNpemVfdCBuZXdTaXplID0gYXJyYXkgPyBhcnJheS0+c2l6ZSgpIDogMDsKICAg
ICBWZWN0b3I8UmVmPFdlYkNvbnRleHRNZW51SXRlbT4+IGl0ZW1zOwogICAgIGl0ZW1zLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobmV3U2l6ZSk7CkBAIC01Nyw3ICs1Nyw3IEBAIHZvaWQgV0tDb250
ZXh0TWVudUxpc3RlbmVyVXNlQ29udGV4dE1lbnVJdGVtcyhXS0NvbnRleHRNZW51TGlzdGVuZXJS
ZWYgbGlzdGVuZXJSCiAgICAgICAgIGl0ZW1zLnVuY2hlY2tlZEFwcGVuZCgqaXRlbSk7CiAgICAg
fQogCi0gICAgdG9JbXBsKGxpc3RlbmVyUmVmKS0+dXNlQ29udGV4dE1lbnVJdGVtcyhXVEZNb3Zl
KGl0ZW1zKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwobGlzdGVuZXJSZWYpLT51c2VDb250ZXh0TWVu
dUl0ZW1zKFdURk1vdmUoaXRlbXMpKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxpc3RlbmVy
UmVmKTsKICAgICBVTlVTRURfUEFSQU0oYXJyYXlSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb29raWVNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29va2llTWFuYWdlci5jcHAKaW5kZXggNDkwZjM0NThlZjgwZDQ2
OTJjODhmMTVhNmE3NGNjZTc0M2I2NDYwMy4uY2YyOWM2MzhiNjU1MzViMTU4M2VhOGE0ZTgyZjcy
NzRkNDRlNzJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Nv
b2tpZU1hbmFnZXIuY3BwCkBAIC0zOSw1MCArMzksNTAgQEAgV0tUeXBlSUQgV0tDb29raWVNYW5h
Z2VyR2V0VHlwZUlEKCkKIAogdm9pZCBXS0Nvb2tpZU1hbmFnZXJTZXRDbGllbnQoV0tDb29raWVN
YW5hZ2VyUmVmIGNvb2tpZU1hbmFnZXJSZWYsIGNvbnN0IFdLQ29va2llTWFuYWdlckNsaWVudEJh
c2UqIHdrQ2xpZW50KQogewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyUmVmKS0+aW5pdGlhbGl6
ZUNsaWVudCh3a0NsaWVudCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29va2llTWFuYWdlclJlZikt
PmluaXRpYWxpemVDbGllbnQod2tDbGllbnQpOwogfQogCiB2b2lkIFdLQ29va2llTWFuYWdlckdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyUmVm
LCB2b2lkKiBjb250ZXh0LCBXS0Nvb2tpZU1hbmFnZXJHZXRDb29raWVIb3N0bmFtZXNGdW5jdGlv
biBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwoY29va2llTWFuYWdlclJlZiktPmdldEhvc3RuYW1l
c1dpdGhDb29raWVzKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIHRvR2VuZXJp
Y0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChjb29raWVNYW5hZ2VyUmVmKS0+Z2V0SG9zdG5hbWVzV2l0aENvb2tpZXMoUEFMOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgdG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0
LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLQ29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXNGb3JI
b3N0bmFtZShXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlclJlZiwgV0tTdHJpbmdSZWYg
aG9zdG5hbWUpCiB7Ci0gICAgdG9JbXBsKGNvb2tpZU1hbmFnZXJSZWYpLT5kZWxldGVDb29raWVz
Rm9ySG9zdG5hbWUoUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgdG9JbXBsKGhv
c3RuYW1lKS0+c3RyaW5nKCkpOworICAgIFdlYktpdDo6dG9JbXBsKGNvb2tpZU1hbmFnZXJSZWYp
LT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWUoUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9u
SUQoKSwgV2ViS2l0Ojp0b0ltcGwoaG9zdG5hbWUpLT5zdHJpbmcoKSk7CiB9CiAKIHZvaWQgV0tD
b29raWVNYW5hZ2VyRGVsZXRlQWxsQ29va2llcyhXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFu
YWdlclJlZikKIHsKLSAgICB0b0ltcGwoY29va2llTWFuYWdlclJlZiktPmRlbGV0ZUFsbENvb2tp
ZXMoUEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwoY29va2llTWFuYWdlclJlZiktPmRlbGV0ZUFsbENvb2tpZXMoUEFMOjpTZXNzaW9uSUQ6OmRl
ZmF1bHRTZXNzaW9uSUQoKSk7CiB9CiAKIHZvaWQgV0tDb29raWVNYW5hZ2VyRGVsZXRlQWxsQ29v
a2llc01vZGlmaWVkQWZ0ZXJEYXRlKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyUmVm
LCBkb3VibGUgZGF0ZSkKIHsKLSAgICB0b0ltcGwoY29va2llTWFuYWdlclJlZiktPmRlbGV0ZUFs
bENvb2tpZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCks
IFdhbGxUaW1lOjpmcm9tUmF3U2Vjb25kcyhkYXRlKSwgW10oQ2FsbGJhY2tCYXNlOjpFcnJvcil7
fSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29va2llTWFuYWdlclJlZiktPmRlbGV0ZUFsbENvb2tp
ZXNNb2RpZmllZFNpbmNlKFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIFdhbGxU
aW1lOjpmcm9tUmF3U2Vjb25kcyhkYXRlKSwgW10oQ2FsbGJhY2tCYXNlOjpFcnJvcikgeyB9KTsK
IH0KIAogdm9pZCBXS0Nvb2tpZU1hbmFnZXJTZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KFdLQ29v
a2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyLCBXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9s
aWN5KQogewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBv
bGljeShQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCB0b0hUVFBDb29raWVBY2Nl
cHRQb2xpY3kocG9saWN5KSwgW10oQ2FsbGJhY2tCYXNlOjpFcnJvcil7fSk7CisgICAgV2ViS2l0
Ojp0b0ltcGwoY29va2llTWFuYWdlciktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koUEFMOjpT
ZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KHBv
bGljeSksIFtdKENhbGxiYWNrQmFzZTo6RXJyb3IpIHsgfSk7CiB9CiAKIHZvaWQgV0tDb29raWVN
YW5hZ2VyR2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2ll
TWFuYWdlciwgdm9pZCogY29udGV4dCwgV0tDb29raWVNYW5hZ2VyR2V0SFRUUENvb2tpZUFjY2Vw
dFBvbGljeUZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+
Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpLCB0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uPFdLSFRUUENvb2tpZUFjY2VwdFBvbGljeSwg
SFRUUENvb2tpZUFjY2VwdFBvbGljeT4oY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChjb29raWVNYW5hZ2VyKS0+Z2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShQQUw6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCB0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uPFdL
SFRUUENvb2tpZUFjY2VwdFBvbGljeSwgSFRUUENvb2tpZUFjY2VwdFBvbGljeT4oY29udGV4dCwg
Y2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS0Nvb2tpZU1hbmFnZXJTZXRTdG9yYWdlQWNjZXNzQVBJ
RW5hYmxlZChXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlciwgYm9vbCBlbmFibGVkKQog
ewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+c2V0U3RvcmFnZUFjY2Vzc0FQSUVuYWJsZWQo
ZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29va2llTWFuYWdlciktPnNldFN0b3JhZ2VB
Y2Nlc3NBUElFbmFibGVkKGVuYWJsZWQpOwogfQogCiB2b2lkIFdLQ29va2llTWFuYWdlclN0YXJ0
T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXS0Nvb2tpZU1hbmFnZXJSZWYgY29va2llTWFuYWdlcikK
IHsKLSAgICB0b0ltcGwoY29va2llTWFuYWdlciktPnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChjb29raWVNYW5hZ2VyKS0+c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogfQogCiB2b2lkIFdLQ29va2llTWFuYWdlclN0b3BP
YnNlcnZpbmdDb29raWVDaGFuZ2VzKFdLQ29va2llTWFuYWdlclJlZiBjb29raWVNYW5hZ2VyKQog
ewotICAgIHRvSW1wbChjb29raWVNYW5hZ2VyKS0+c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
Y29va2llTWFuYWdlciktPnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFBBTDo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDcmVkZW50aWFsLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ3JlZGVudGlhbC5jcHAKaW5kZXggMzVlY2IyMDNiZTIwNTkyMjA1YmNjYjJhZTY3YWY1
MmEzOTZkZTc4Zi4uYzZlMGYzYzM0Yzg3ZWI1YjQzYjUyZmI4ODYzNzJlMGI3M2YzZmQzNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDcmVkZW50aWFsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NyZWRlbnRpYWwuY3BwCkBAIC00
MCwxNiArNDAsMTYgQEAgV0tUeXBlSUQgV0tDcmVkZW50aWFsR2V0VHlwZUlEKCkKIAogV0tDcmVk
ZW50aWFsUmVmIFdLQ3JlZGVudGlhbENyZWF0ZShXS1N0cmluZ1JlZiB1c2VybmFtZSwgV0tTdHJp
bmdSZWYgcGFzc3dvcmQsIFdLQ3JlZGVudGlhbFBlcnNpc3RlbmNlIHBlcnNpc3RlbmNlKQogewot
ICAgIHJldHVybiB0b0FQSSgmV2ViQ3JlZGVudGlhbDo6Y3JlYXRlKFdlYkNvcmU6OkNyZWRlbnRp
YWwodG9JbXBsKHVzZXJuYW1lKS0+c3RyaW5nKCksIHRvSW1wbChwYXNzd29yZCktPnN0cmluZygp
LCB0b0NyZWRlbnRpYWxQZXJzaXN0ZW5jZShwZXJzaXN0ZW5jZSkpKS5sZWFrUmVmKCkpOworICAg
IHJldHVybiB0b0FQSSgmV2ViQ3JlZGVudGlhbDo6Y3JlYXRlKFdlYkNvcmU6OkNyZWRlbnRpYWwo
V2ViS2l0Ojp0b0ltcGwodXNlcm5hbWUpLT5zdHJpbmcoKSwgV2ViS2l0Ojp0b0ltcGwocGFzc3dv
cmQpLT5zdHJpbmcoKSwgdG9DcmVkZW50aWFsUGVyc2lzdGVuY2UocGVyc2lzdGVuY2UpKSkubGVh
a1JlZigpKTsKIH0KIAogV0tDcmVkZW50aWFsUmVmIFdLQ3JlZGVudGlhbENyZWF0ZVdpdGhDZXJ0
aWZpY2F0ZUluZm8oV0tDZXJ0aWZpY2F0ZUluZm9SZWYgY2VydGlmaWNhdGVJbmZvKQogewotICAg
IHJldHVybiB0b0FQSSgmV2ViQ3JlZGVudGlhbDo6Y3JlYXRlKHRvSW1wbChjZXJ0aWZpY2F0ZUlu
Zm8pKS5sZWFrUmVmKCkpOworICAgIHJldHVybiB0b0FQSSgmV2ViQ3JlZGVudGlhbDo6Y3JlYXRl
KFdlYktpdDo6dG9JbXBsKGNlcnRpZmljYXRlSW5mbykpLmxlYWtSZWYoKSk7CiB9CiAKIFdLU3Ry
aW5nUmVmIFdLQ3JlZGVudGlhbENvcHlVc2VyKFdLQ3JlZGVudGlhbFJlZiBjcmVkZW50aWFsUmVm
KQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoY3JlZGVudGlhbFJlZiktPmNyZWRl
bnRpYWwoKS51c2VyKCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChj
cmVkZW50aWFsUmVmKS0+Y3JlZGVudGlhbCgpLnVzZXIoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLRG93bmxvYWQuY3BwIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tEb3dubG9hZC5jcHAKaW5kZXggNDhkOGI4Mjg0Yzc2OGQxZDUy
YjNmZGU1ZTI3ZDE3OWM5YjMyNTM5MC4uOTk5NDlkMTI2ZDhkZmUzYTQzM2U0ZDA5MWFhNTUyNjA4
M2FjMGZkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tEb3du
bG9hZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tEb3dubG9hZC5j
cHAKQEAgLTQyLDMyICs0MiwzMiBAQCBXS1R5cGVJRCBXS0Rvd25sb2FkR2V0VHlwZUlEKCkKIAog
dWludDY0X3QgV0tEb3dubG9hZEdldElEKFdLRG93bmxvYWRSZWYgZG93bmxvYWQpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChkb3dubG9hZCktPmRvd25sb2FkSUQoKS5kb3dubG9hZElEKCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKGRvd25sb2FkKS0+ZG93bmxvYWRJRCgpLmRvd25sb2FkSUQo
KTsKIH0KIAogV0tVUkxSZXF1ZXN0UmVmIFdLRG93bmxvYWRDb3B5UmVxdWVzdChXS0Rvd25sb2Fk
UmVmIGRvd25sb2FkKQogewotICAgIHJldHVybiB0b0FQSSgmQVBJOjpVUkxSZXF1ZXN0OjpjcmVh
dGUodG9JbXBsKGRvd25sb2FkKS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpOworICAgIHJldHVybiB0
b0FQSSgmQVBJOjpVUkxSZXF1ZXN0OjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwoZG93bmxvYWQpLT5y
ZXF1ZXN0KCkpLmxlYWtSZWYoKSk7CiB9CiAKIFdLRGF0YVJlZiBXS0Rvd25sb2FkR2V0UmVzdW1l
RGF0YShXS0Rvd25sb2FkUmVmIGRvd25sb2FkKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwo
ZG93bmxvYWQpLT5yZXN1bWVEYXRhKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6OnRvSW1w
bChkb3dubG9hZCktPnJlc3VtZURhdGEoKSk7CiB9CiAKIHZvaWQgV0tEb3dubG9hZENhbmNlbChX
S0Rvd25sb2FkUmVmIGRvd25sb2FkKQogewotICAgIHJldHVybiB0b0ltcGwoZG93bmxvYWQpLT5j
YW5jZWwoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZG93bmxvYWQpLT5jYW5jZWwoKTsK
IH0KIAogV0tQYWdlUmVmIFdLRG93bmxvYWRHZXRPcmlnaW5hdGluZ1BhZ2UoV0tEb3dubG9hZFJl
ZiBkb3dubG9hZCkKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGRvd25sb2FkKS0+b3JpZ2lu
YXRpbmdQYWdlKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6OnRvSW1wbChkb3dubG9hZCkt
Pm9yaWdpbmF0aW5nUGFnZSgpKTsKIH0KIAogV0tBcnJheVJlZiBXS0Rvd25sb2FkQ29weVJlZGly
ZWN0Q2hhaW4oV0tEb3dubG9hZFJlZiBkb3dubG9hZCkKIHsKLSAgICBhdXRvJiByZWRpcmVjdENo
YWluID0gIHRvSW1wbChkb3dubG9hZCktPnJlZGlyZWN0Q2hhaW4oKTsKKyAgICBhdXRvJiByZWRp
cmVjdENoYWluID0gIFdlYktpdDo6dG9JbXBsKGRvd25sb2FkKS0+cmVkaXJlY3RDaGFpbigpOwog
ICAgIFZlY3RvcjxSZWZQdHI8QVBJOjpPYmplY3Q+PiB1cmxzOwogICAgIHVybHMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShyZWRpcmVjdENoYWluLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiByZWRp
cmVjdFVSTCA6IHJlZGlyZWN0Q2hhaW4pCkBAIC03Nyw1ICs3Nyw1IEBAIFdLQXJyYXlSZWYgV0tE
b3dubG9hZENvcHlSZWRpcmVjdENoYWluKFdLRG93bmxvYWRSZWYgZG93bmxvYWQpCiAKIGJvb2wg
V0tEb3dubG9hZEdldFdhc1VzZXJJbml0aWF0ZWQoV0tEb3dubG9hZFJlZiBkb3dubG9hZCkKIHsK
LSAgICByZXR1cm4gdG9JbXBsKGRvd25sb2FkKS0+d2FzVXNlckluaXRpYXRlZCgpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChkb3dubG9hZCktPndhc1VzZXJJbml0aWF0ZWQoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLRm9ybVN1Ym1pc3Npb25M
aXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0Zvcm1TdWJtaXNz
aW9uTGlzdGVuZXIuY3BwCmluZGV4IDg0MmM1MzQ1OGJjMWViZjdhMDgxNmFkODcwNTA3Mjk1Yjhj
MGY2NWMuLjRkYmQwYTk4YTdjZjMwODgzYTYxNTc5NmM0Nzk4NDg3MThkYjhiYTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLRm9ybVN1Ym1pc3Npb25MaXN0ZW5l
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tGb3JtU3VibWlzc2lv
bkxpc3RlbmVyLmNwcApAQCAtMzgsNSArMzgsNSBAQCBXS1R5cGVJRCBXS0Zvcm1TdWJtaXNzaW9u
TGlzdGVuZXJHZXRUeXBlSUQoKQogCiB2b2lkIFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lckNvbnRp
bnVlKFdLRm9ybVN1Ym1pc3Npb25MaXN0ZW5lclJlZiBzdWJtaXNzaW9uTGlzdGVuZXIpCiB7Ci0g
ICAgdG9JbXBsKHN1Ym1pc3Npb25MaXN0ZW5lciktPmNvbnRpbnVlU3VibWlzc2lvbigpOworICAg
IFdlYktpdDo6dG9JbXBsKHN1Ym1pc3Npb25MaXN0ZW5lciktPmNvbnRpbnVlU3VibWlzc2lvbigp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lLmNwcAppbmRleCBhODU2
MmVhN2Y2NTY3ZGIzYWMzMDZmNzdiOTEwM2I5ODM0YWFiYTBjLi4zY2ZlMzk0NjZjNmViNTM2NzYw
ZDc4Y2YxZTFhNDg1ZmE2YWJjNjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0ZyYW1lLmNwcApAQCAtNDMsMTIgKzQzLDEyIEBAIFdLVHlwZUlEIFdLRnJhbWVHZXRUeXBlSUQo
KQogCiBib29sIFdLRnJhbWVJc01haW5GcmFtZShXS0ZyYW1lUmVmIGZyYW1lUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwoZnJhbWVSZWYpLT5pc01haW5GcmFtZSgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChmcmFtZVJlZiktPmlzTWFpbkZyYW1lKCk7CiB9CiAKIFdLRnJhbWVMb2FkU3Rh
dGUgV0tGcmFtZUdldEZyYW1lTG9hZFN0YXRlKFdLRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAg
V2ViRnJhbWVQcm94eSogZnJhbWUgPSB0b0ltcGwoZnJhbWVSZWYpOworICAgIFdlYkZyYW1lUHJv
eHkqIGZyYW1lID0gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpOwogICAgIHN3aXRjaCAoZnJhbWUt
PmZyYW1lTG9hZFN0YXRlKCkuc3RhdGUoKSkgewogICAgIGNhc2UgRnJhbWVMb2FkU3RhdGU6OlN0
YXRlOjpQcm92aXNpb25hbDoKICAgICAgICAgcmV0dXJuIGtXS0ZyYW1lTG9hZFN0YXRlUHJvdmlz
aW9uYWw7CkBAIC02NCw5MCArNjQsOTAgQEAgV0tGcmFtZUxvYWRTdGF0ZSBXS0ZyYW1lR2V0RnJh
bWVMb2FkU3RhdGUoV0tGcmFtZVJlZiBmcmFtZVJlZikKIAogV0tVUkxSZWYgV0tGcmFtZUNvcHlQ
cm92aXNpb25hbFVSTChXS0ZyYW1lUmVmIGZyYW1lUmVmKQogewotICAgIHJldHVybiB0b0NvcGll
ZFVSTEFQSSh0b0ltcGwoZnJhbWVSZWYpLT5wcm92aXNpb25hbFVSTCgpKTsKKyAgICByZXR1cm4g
dG9Db3BpZWRVUkxBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5wcm92aXNpb25hbFVSTCgp
KTsKIH0KIAogV0tVUkxSZWYgV0tGcmFtZUNvcHlVUkwoV0tGcmFtZVJlZiBmcmFtZVJlZikKIHsK
LSAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGZyYW1lUmVmKS0+dXJsKCkpOworICAg
IHJldHVybiB0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiktPnVybCgpKTsK
IH0KIAogV0tVUkxSZWYgV0tGcmFtZUNvcHlVbnJlYWNoYWJsZVVSTChXS0ZyYW1lUmVmIGZyYW1l
UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0ltcGwoZnJhbWVSZWYpLT51bnJl
YWNoYWJsZVVSTCgpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkoV2ViS2l0Ojp0b0ltcGwo
ZnJhbWVSZWYpLT51bnJlYWNoYWJsZVVSTCgpKTsKIH0KIAogdm9pZCBXS0ZyYW1lU3RvcExvYWRp
bmcoV0tGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICB0b0ltcGwoZnJhbWVSZWYpLT5zdG9wTG9h
ZGluZygpOworICAgIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+c3RvcExvYWRpbmcoKTsKIH0K
IAogV0tTdHJpbmdSZWYgV0tGcmFtZUNvcHlNSU1FVHlwZShXS0ZyYW1lUmVmIGZyYW1lUmVmKQog
ewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYpLT5taW1lVHlwZSgpKTsK
KyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5taW1lVHlw
ZSgpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tGcmFtZUNvcHlUaXRsZShXS0ZyYW1lUmVmIGZyYW1l
UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwoZnJhbWVSZWYpLT50aXRsZSgp
KTsKKyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT50aXRs
ZSgpKTsKIH0KIAogV0tQYWdlUmVmIFdLRnJhbWVHZXRQYWdlKFdLRnJhbWVSZWYgZnJhbWVSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChmcmFtZVJlZiktPnBhZ2UoKSk7CisgICAgcmV0
dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+cGFnZSgpKTsKIH0KIAogV0tDZXJ0
aWZpY2F0ZUluZm9SZWYgV0tGcmFtZUdldENlcnRpZmljYXRlSW5mbyhXS0ZyYW1lUmVmIGZyYW1l
UmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoZnJhbWVSZWYpLT5jZXJ0aWZpY2F0ZUlu
Zm8oKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Y2VydGlm
aWNhdGVJbmZvKCkpOwogfQogCiBib29sIFdLRnJhbWVDYW5Qcm92aWRlU291cmNlKFdLRnJhbWVS
ZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChmcmFtZVJlZiktPmNhblByb3ZpZGVT
b3VyY2UoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5jYW5Qcm92aWRl
U291cmNlKCk7CiB9CiAKIGJvb2wgV0tGcmFtZUNhblNob3dNSU1FVHlwZShXS0ZyYW1lUmVmIGZy
YW1lUmVmLCBXS1N0cmluZ1JlZiBtaW1lVHlwZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZy
YW1lUmVmKS0+Y2FuU2hvd01JTUVUeXBlKHRvV1RGU3RyaW5nKG1pbWVUeXBlUmVmKSk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+Y2FuU2hvd01JTUVUeXBlKHRvV1RGU3Ry
aW5nKG1pbWVUeXBlUmVmKSk7CiB9CiAKIGJvb2wgV0tGcmFtZUlzRGlzcGxheWluZ1N0YW5kYWxv
bmVJbWFnZURvY3VtZW50KFdLRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChmcmFtZVJlZiktPmlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZURvY3VtZW50KCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+aXNEaXNwbGF5aW5nU3RhbmRhbG9uZUlt
YWdlRG9jdW1lbnQoKTsKIH0KIAogYm9vbCBXS0ZyYW1lSXNEaXNwbGF5aW5nTWFya3VwRG9jdW1l
bnQoV0tGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGZyYW1lUmVmKS0+
aXNEaXNwbGF5aW5nTWFya3VwRG9jdW1lbnQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwo
ZnJhbWVSZWYpLT5pc0Rpc3BsYXlpbmdNYXJrdXBEb2N1bWVudCgpOwogfQogCiBib29sIFdLRnJh
bWVJc0ZyYW1lU2V0KFdLRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChm
cmFtZVJlZiktPmlzRnJhbWVTZXQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoZnJhbWVS
ZWYpLT5pc0ZyYW1lU2V0KCk7CiB9CiAKIFdLRnJhbWVIYW5kbGVSZWYgV0tGcmFtZUNyZWF0ZUZy
YW1lSGFuZGxlKFdLRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZBUEk6
OkZyYW1lSGFuZGxlOjpjcmVhdGUodG9JbXBsKGZyYW1lUmVmKS0+ZnJhbWVJRCgpKS5sZWFrUmVm
KCkpOworICAgIHJldHVybiB0b0FQSSgmQVBJOjpGcmFtZUhhbmRsZTo6Y3JlYXRlKFdlYktpdDo6
dG9JbXBsKGZyYW1lUmVmKS0+ZnJhbWVJRCgpKS5sZWFrUmVmKCkpOwogfQogCiBXS0ZyYW1lSW5m
b1JlZiBXS0ZyYW1lQ3JlYXRlRnJhbWVJbmZvKFdLRnJhbWVSZWYgZnJhbWVSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvQVBJKCZBUEk6OkZyYW1lSW5mbzo6Y3JlYXRlKCp0b0ltcGwoZnJhbWVSZWYpLCBX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlRnJvbVN0cmluZyh0b0ltcGwoZnJhbWVSZWYp
LT51cmwoKSkpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJKCZBUEk6OkZyYW1lSW5mbzo6
Y3JlYXRlKCpXZWJLaXQ6OnRvSW1wbChmcmFtZVJlZiksIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGVGcm9tU3RyaW5nKFdlYktpdDo6dG9JbXBsKGZyYW1lUmVmKS0+dXJsKCkpKS5sZWFr
UmVmKCkpOwogfQogCiB2b2lkIFdLRnJhbWVHZXRNYWluUmVzb3VyY2VEYXRhKFdLRnJhbWVSZWYg
ZnJhbWVSZWYsIFdLRnJhbWVHZXRSZXNvdXJjZURhdGFGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCog
Y29udGV4dCkKIHsKLSAgICB0b0ltcGwoZnJhbWVSZWYpLT5nZXRNYWluUmVzb3VyY2VEYXRhKHRv
R2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChmcmFtZVJlZiktPmdldE1haW5SZXNvdXJjZURhdGEodG9HZW5lcmljQ2FsbGJhY2tG
dW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLRnJhbWVHZXRSZXNvdXJj
ZURhdGEoV0tGcmFtZVJlZiBmcmFtZVJlZiwgV0tVUkxSZWYgcmVzb3VyY2VVUkwsIFdLRnJhbWVH
ZXRSZXNvdXJjZURhdGFGdW5jdGlvbiBjYWxsYmFjaywgdm9pZCogY29udGV4dCkKIHsKLSAgICB0
b0ltcGwoZnJhbWVSZWYpLT5nZXRSZXNvdXJjZURhdGEodG9JbXBsKHJlc291cmNlVVJMKSwgdG9H
ZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOworICAgIFdlYktpdDo6
dG9JbXBsKGZyYW1lUmVmKS0+Z2V0UmVzb3VyY2VEYXRhKFdlYktpdDo6dG9JbXBsKHJlc291cmNl
VVJMKSwgdG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQog
CiB2b2lkIFdLRnJhbWVHZXRXZWJBcmNoaXZlKFdLRnJhbWVSZWYgZnJhbWVSZWYsIFdLRnJhbWVH
ZXRXZWJBcmNoaXZlRnVuY3Rpb24gY2FsbGJhY2ssIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgdG9J
bXBsKGZyYW1lUmVmKS0+Z2V0V2ViQXJjaGl2ZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNv
bnRleHQsIGNhbGxiYWNrKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoZnJhbWVSZWYpLT5nZXRXZWJB
cmNoaXZlKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWVIYW5kbGVS
ZWYuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZUhhbmRsZVJlZi5j
cHAKaW5kZXggYjM5ZmNhMWJlNTdmMGQyNzRkODQ1N2YwNDNmNTBlYWI2MmYyM2M1OC4uZWI0MjIz
YzFiMmE1OWFjNmI4ZDYyMjFiOGM1MmFkZGQ5ZGVmMzFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZUhhbmRsZVJlZi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZUhhbmRsZVJlZi5jcHAKQEAgLTM4LDUgKzM4LDUg
QEAgV0tUeXBlSUQgV0tGcmFtZUhhbmRsZUdldFR5cGVJRCgpCiAKIHVpbnQ2NF90IFdLRnJhbWVI
YW5kbGVHZXRGcmFtZUlEKFdLRnJhbWVIYW5kbGVSZWYgZnJhbWVIYW5kbGVSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChmcmFtZUhhbmRsZVJlZiktPmZyYW1lSUQoKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0ltcGwoZnJhbWVIYW5kbGVSZWYpLT5mcmFtZUlEKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lSW5mb1JlZi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lSW5mb1JlZi5jcHAKaW5kZXggNmJhNTE3NWJm
ZTM5YTE0MWI0ZjRiZThmZGIxYTcwYjVmZWRmZDUxYy4uOThiNGVmMmZmYTI1OGIxZGYxOWFiN2Q1
YzQ3MzE5OGRjOTJhYjkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tGcmFtZUluZm9SZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLRnJhbWVJbmZvUmVmLmNwcApAQCAtMzksNSArMzksNSBAQCBXS1R5cGVJRCBXS0ZyYW1lSW5m
b0dldFR5cGVJRCgpCiAKIFdLRnJhbWVIYW5kbGVSZWYgV0tGcmFtZUluZm9HZXRGcmFtZUhhbmRs
ZVJlZihXS0ZyYW1lSW5mb1JlZiBmcmFtZUluZm9SZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZ0
b0ltcGwoZnJhbWVJbmZvUmVmKS0+aGFuZGxlKCkpOworICAgIHJldHVybiB0b0FQSSgmV2ViS2l0
Ojp0b0ltcGwoZnJhbWVJbmZvUmVmKS0+aGFuZGxlKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tGcmFtZVBvbGljeUxpc3RlbmVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLRnJhbWVQb2xpY3lMaXN0ZW5lci5jcHAKaW5kZXgg
YTg1YjViY2Q3Y2E1ZDY4NTJiNmI5ODBlMDVhYmNkZjViZDRkNGMzYS4uNDcyZWQ1Y2Y4YjNkNGM5
NDBiMjA2NTFkYzgzMmFlY2IwZTU5ZWRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tGcmFtZVBvbGljeUxpc3RlbmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0ZyYW1lUG9saWN5TGlzdGVuZXIuY3BwCkBAIC00MywyMiArNDMs
MjIgQEAgV0tUeXBlSUQgV0tGcmFtZVBvbGljeUxpc3RlbmVyR2V0VHlwZUlEKCkKIAogdm9pZCBX
S0ZyYW1lUG9saWN5TGlzdGVuZXJVc2UoV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIHBvbGljeUxp
c3RlbmVyUmVmKQogewotICAgIHRvSW1wbChwb2xpY3lMaXN0ZW5lclJlZiktPnVzZSgpOworICAg
IFdlYktpdDo6dG9JbXBsKHBvbGljeUxpc3RlbmVyUmVmKS0+dXNlKCk7CiB9CiAKIHZvaWQgV0tG
cmFtZVBvbGljeUxpc3RlbmVyVXNlSW5OZXdQcm9jZXNzKFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJl
ZiBwb2xpY3lMaXN0ZW5lclJlZikKIHsKLSAgICB0b0ltcGwocG9saWN5TGlzdGVuZXJSZWYpLT51
c2UobnVsbHB0ciwgUHJvY2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudDo6WWVzKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwb2xpY3lMaXN0ZW5lclJlZiktPnVzZShudWxscHRyLCBQcm9jZXNzU3dhcFJl
cXVlc3RlZEJ5Q2xpZW50OjpZZXMpOwogfQogCiBzdGF0aWMgdm9pZCB1c2VXaXRoUG9saWNpZXMo
V0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIHBvbGljeUxpc3RlbmVyUmVmLCBXS1dlYnNpdGVQb2xp
Y2llc1JlZiB3ZWJzaXRlUG9saWNpZXMsIFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQgcHJv
Y2Vzc1N3YXBSZXF1ZXN0ZWRCeUNsaWVudCkKIHsKLSAgICBpZiAoYXV0byogd2Vic2l0ZURhdGFT
dG9yZSA9IHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT53ZWJzaXRlRGF0YVN0b3JlKCkpIHsKKyAg
ICBpZiAoYXV0byogd2Vic2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6dG9JbXBsKHdlYnNpdGVQb2xp
Y2llcyktPndlYnNpdGVEYXRhU3RvcmUoKSkgewogICAgICAgICBhdXRvIHNlc3Npb25JRCA9IHdl
YnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpIHx8IHNl
c3Npb25JRCA9PSBQQUw6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCAiSWYgV2Vic2l0
ZVBvbGljaWVzIHNwZWNpZmllcyBhIFdlYnNpdGVEYXRhU3RvcmUsIHRoZSBkYXRhIHN0b3JlJ3Mg
c2Vzc2lvbiBtdXN0IGJlIGRlZmF1bHQgb3Igbm9uLXBlcnNpc3RlbnQuIik7CiAgICAgfQogCi0g
ICAgdG9JbXBsKHBvbGljeUxpc3RlbmVyUmVmKS0+dXNlKHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMp
LCBwcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwb2xp
Y3lMaXN0ZW5lclJlZiktPnVzZShXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLCBwcm9j
ZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50KTsKIH0KIAogdm9pZCBXS0ZyYW1lUG9saWN5TGlzdGVu
ZXJVc2VXaXRoUG9saWNpZXMoV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIHBvbGljeUxpc3RlbmVy
UmVmLCBXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWNpZXMpCkBAIC03MywxMCArNzMs
MTAgQEAgdm9pZCBXS0ZyYW1lUG9saWN5TGlzdGVuZXJVc2VJbk5ld1Byb2Nlc3NXaXRoUG9saWNp
ZXMoV0tGcmFtZVBvbGljeUxpc3RlbmVyUmVmIHAKIAogdm9pZCBXS0ZyYW1lUG9saWN5TGlzdGVu
ZXJEb3dubG9hZChXS0ZyYW1lUG9saWN5TGlzdGVuZXJSZWYgcG9saWN5TGlzdGVuZXJSZWYpCiB7
Ci0gICAgdG9JbXBsKHBvbGljeUxpc3RlbmVyUmVmKS0+ZG93bmxvYWQoKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChwb2xpY3lMaXN0ZW5lclJlZiktPmRvd25sb2FkKCk7CiB9CiAKIHZvaWQgV0tGcmFt
ZVBvbGljeUxpc3RlbmVySWdub3JlKFdLRnJhbWVQb2xpY3lMaXN0ZW5lclJlZiBwb2xpY3lMaXN0
ZW5lclJlZikKIHsKLSAgICB0b0ltcGwocG9saWN5TGlzdGVuZXJSZWYpLT5pZ25vcmUoKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChwb2xpY3lMaXN0ZW5lclJlZiktPmlnbm9yZSgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tHZW9sb2NhdGlvbk1hbmFnZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tHZW9sb2NhdGlvbk1hbmFnZXIu
Y3BwCmluZGV4IDExYjgzNGI0ZWUyYTlhNjg3NjI2YzczMmJmNThhNDg4MjNmNjMzNGEuLmU4NmQw
NGZlMTczNGU0ZjVjZDAwNDFkZjQ4NDZlMzdiZGZhOGQ2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLR2VvbG9jYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0dlb2xvY2F0aW9uTWFuYWdlci5jcHAKQEAgLTQw
LDIwICs0MCwyMCBAQCBXS1R5cGVJRCBXS0dlb2xvY2F0aW9uTWFuYWdlckdldFR5cGVJRCgpCiAK
IHZvaWQgV0tHZW9sb2NhdGlvbk1hbmFnZXJTZXRQcm92aWRlcihXS0dlb2xvY2F0aW9uTWFuYWdl
clJlZiBnZW9sb2NhdGlvbk1hbmFnZXJSZWYsIGNvbnN0IFdLR2VvbG9jYXRpb25Qcm92aWRlckJh
c2UqIHdrUHJvdmlkZXIpCiB7Ci0gICAgdG9JbXBsKGdlb2xvY2F0aW9uTWFuYWdlclJlZiktPnNl
dFByb3ZpZGVyKHN0ZDo6bWFrZV91bmlxdWU8V2ViR2VvbG9jYXRpb25Qcm92aWRlcj4od2tQcm92
aWRlcikpOworICAgIFdlYktpdDo6dG9JbXBsKGdlb2xvY2F0aW9uTWFuYWdlclJlZiktPnNldFBy
b3ZpZGVyKHN0ZDo6bWFrZV91bmlxdWU8V2ViR2VvbG9jYXRpb25Qcm92aWRlcj4od2tQcm92aWRl
cikpOwogfQogCiB2b2lkIFdLR2VvbG9jYXRpb25NYW5hZ2VyUHJvdmlkZXJEaWRDaGFuZ2VQb3Np
dGlvbihXS0dlb2xvY2F0aW9uTWFuYWdlclJlZiBnZW9sb2NhdGlvbk1hbmFnZXJSZWYsIFdLR2Vv
bG9jYXRpb25Qb3NpdGlvblJlZiBwb3NpdGlvblJlZikKIHsKLSAgICB0b0ltcGwoZ2VvbG9jYXRp
b25NYW5hZ2VyUmVmKS0+cHJvdmlkZXJEaWRDaGFuZ2VQb3NpdGlvbih0b0ltcGwocG9zaXRpb25S
ZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChnZW9sb2NhdGlvbk1hbmFnZXJSZWYpLT5wcm92aWRl
ckRpZENoYW5nZVBvc2l0aW9uKFdlYktpdDo6dG9JbXBsKHBvc2l0aW9uUmVmKSk7CiB9CiAKIHZv
aWQgV0tHZW9sb2NhdGlvbk1hbmFnZXJQcm92aWRlckRpZEZhaWxUb0RldGVybWluZVBvc2l0aW9u
KFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmIGdlb2xvY2F0aW9uTWFuYWdlclJlZikKIHsKLSAgICB0
b0ltcGwoZ2VvbG9jYXRpb25NYW5hZ2VyUmVmKS0+cHJvdmlkZXJEaWRGYWlsVG9EZXRlcm1pbmVQ
b3NpdGlvbigpOworICAgIFdlYktpdDo6dG9JbXBsKGdlb2xvY2F0aW9uTWFuYWdlclJlZiktPnBy
b3ZpZGVyRGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb24oKTsKIH0KIAogdm9pZCBXS0dlb2xvY2F0
aW9uTWFuYWdlclByb3ZpZGVyRGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb25XaXRoRXJyb3JNZXNz
YWdlKFdLR2VvbG9jYXRpb25NYW5hZ2VyUmVmIGdlb2xvY2F0aW9uTWFuYWdlclJlZiwgV0tTdHJp
bmdSZWYgZXJyb3JNZXNzYWdlKQogewotICAgIHRvSW1wbChnZW9sb2NhdGlvbk1hbmFnZXJSZWYp
LT5wcm92aWRlckRpZEZhaWxUb0RldGVybWluZVBvc2l0aW9uKHRvV1RGU3RyaW5nKGVycm9yTWVz
c2FnZSkpOworICAgIFdlYktpdDo6dG9JbXBsKGdlb2xvY2F0aW9uTWFuYWdlclJlZiktPnByb3Zp
ZGVyRGlkRmFpbFRvRGV0ZXJtaW5lUG9zaXRpb24odG9XVEZTdHJpbmcoZXJyb3JNZXNzYWdlKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0dlb2xvY2F0
aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcAppbmRleCA5MGFmZjEyZmQzMmE0OGI4
YmIyNjgzYTEzZTRlZWMwN2YxYWRlNmQyLi4yY2Y3ZGRjZWY3MmY4YmY4ZjNiZjE0ZTdhOTEyOTYz
NzI4MDcyZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0dl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdC5jcHAKQEAgLTM4LDEwICsz
OCwxMCBAQCBXS1R5cGVJRCBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RHZXRUeXBlSUQo
KQogCiB2b2lkIFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdEFsbG93KFdLR2VvbG9jYXRp
b25QZXJtaXNzaW9uUmVxdWVzdFJlZiBnZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwoZ2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZiktPmFs
bG93KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGdlb2xvY2F0aW9uUGVybWlzc2lvblJl
cXVlc3RSZWYpLT5hbGxvdygpOwogfQogCiB2b2lkIFdLR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdERlbnkoV0tHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmIGdlb2xvY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChnZW9sb2NhdGlvblBlcm1p
c3Npb25SZXF1ZXN0UmVmKS0+ZGVueSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChnZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmKS0+ZGVueSgpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tHcmFtbWFyRGV0YWlsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLR3JhbW1hckRldGFpbC5jcHAKaW5kZXggZTJmMzljZDFi
ZjYwMDExZjg1NmI5OTYxNzQ4YWY0NWFhYWQ3MjA4OC4uMzQ4MGQ1NTZhY2MwZWY1NTFmNDA5YzEy
NDkyY2EwZTU2MDY5OTNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tHcmFtbWFyRGV0YWlsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS0dyYW1tYXJEZXRhaWwuY3BwCkBAIC00MCwyNiArNDAsMjYgQEAgV0tUeXBlSUQgV0tHcmFt
bWFyRGV0YWlsR2V0VHlwZUlEKCkKIAogV0tHcmFtbWFyRGV0YWlsUmVmIFdLR3JhbW1hckRldGFp
bENyZWF0ZShpbnQgbG9jYXRpb24sIGludCBsZW5ndGgsIFdLQXJyYXlSZWYgZ3Vlc3NlcywgV0tT
dHJpbmdSZWYgdXNlckRlc2NyaXB0aW9uKQogewotICAgIGF1dG8gZGV0YWlsID0gV2ViR3JhbW1h
ckRldGFpbDo6Y3JlYXRlKGxvY2F0aW9uLCBsZW5ndGgsIHRvSW1wbChndWVzc2VzKSwgdG9XVEZT
dHJpbmcodXNlckRlc2NyaXB0aW9uKSk7CisgICAgYXV0byBkZXRhaWwgPSBXZWJHcmFtbWFyRGV0
YWlsOjpjcmVhdGUobG9jYXRpb24sIGxlbmd0aCwgV2ViS2l0Ojp0b0ltcGwoZ3Vlc3NlcyksIHRv
V1RGU3RyaW5nKHVzZXJEZXNjcmlwdGlvbikpOwogICAgIHJldHVybiB0b0FQSSgmZGV0YWlsLmxl
YWtSZWYoKSk7CiB9CiAKIGludCBXS0dyYW1tYXJEZXRhaWxHZXRMb2NhdGlvbihXS0dyYW1tYXJE
ZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGdyYW1tYXJE
ZXRhaWxSZWYpLT5sb2NhdGlvbigpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChncmFtbWFy
RGV0YWlsUmVmKS0+bG9jYXRpb24oKTsKIH0KIAogaW50IFdLR3JhbW1hckRldGFpbEdldExlbmd0
aChXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFpbFJlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0lt
cGwoZ3JhbW1hckRldGFpbFJlZiktPmxlbmd0aCgpOwogfQogCiBXS0FycmF5UmVmIFdLR3JhbW1h
ckRldGFpbENvcHlHdWVzc2VzKFdLR3JhbW1hckRldGFpbFJlZiBncmFtbWFyRGV0YWlsUmVmKQog
ewotICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYpLT5ndWVzc2VzKCku
bGVha1JlZigpKTsKKyAgICByZXR1cm4gdG9BUEkoJldlYktpdDo6dG9JbXBsKGdyYW1tYXJEZXRh
aWxSZWYpLT5ndWVzc2VzKCkubGVha1JlZigpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tHcmFtbWFy
RGV0YWlsQ29weVVzZXJEZXNjcmlwdGlvbihXS0dyYW1tYXJEZXRhaWxSZWYgZ3JhbW1hckRldGFp
bFJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKGdyYW1tYXJEZXRhaWxSZWYp
LT51c2VyRGVzY3JpcHRpb24oKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9J
bXBsKGdyYW1tYXJEZXRhaWxSZWYpLT51c2VyRGVzY3JpcHRpb24oKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0hpdFRlc3RSZXN1bHQuY3BwIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tIaXRUZXN0UmVzdWx0LmNwcAppbmRleCA0MDgy
MDAyYjA3MjVmZDJiNzIwNmM5YzRlZTU0ODljMWUyZjM4MzZhLi5iNWRkNGRiMDhkMDQ1M2Q0ZTg3
MzYyNmRmOWQxYjJlMTUxNWI1MWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0hpdFRlc3RSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLSGl0VGVzdFJlc3VsdC5jcHAKQEAgLTM5LDQ1ICszOSw0NSBAQCBXS1R5cGVJRCBX
S0hpdFRlc3RSZXN1bHRHZXRUeXBlSUQoKQogCiBXS1VSTFJlZiBXS0hpdFRlc3RSZXN1bHRDb3B5
QWJzb2x1dGVJbWFnZVVSTChXS0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsK
LSAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNv
bHV0ZUltYWdlVVJMKCkpOworICAgIHJldHVybiB0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1w
bChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1dGVJbWFnZVVSTCgpKTsKIH0KIAogV0tVUkxSZWYg
V0tIaXRUZXN0UmVzdWx0Q29weUFic29sdXRlUERGVVJMKFdLSGl0VGVzdFJlc3VsdFJlZiBoaXRU
ZXN0UmVzdWx0UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0ltcGwoaGl0VGVz
dFJlc3VsdFJlZiktPmFic29sdXRlUERGVVJMKCkpOworICAgIHJldHVybiB0b0NvcGllZFVSTEFQ
SShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1dGVQREZVUkwoKSk7CiB9
CiAKIFdLVVJMUmVmIFdLSGl0VGVzdFJlc3VsdENvcHlBYnNvbHV0ZUxpbmtVUkwoV0tIaXRUZXN0
UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJ
KHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1dGVMaW5rVVJMKCkpOworICAgIHJldHVy
biB0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+YWJzb2x1
dGVMaW5rVVJMKCkpOwogfQogCiBXS1VSTFJlZiBXS0hpdFRlc3RSZXN1bHRDb3B5QWJzb2x1dGVN
ZWRpYVVSTChXS0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1
cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5hYnNvbHV0ZU1lZGlh
VVJMKCkpOworICAgIHJldHVybiB0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0
UmVzdWx0UmVmKS0+YWJzb2x1dGVNZWRpYVVSTCgpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tIaXRU
ZXN0UmVzdWx0Q29weUxpbmtMYWJlbChXS0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJl
ZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5s
aW5rTGFiZWwoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKGhpdFRl
c3RSZXN1bHRSZWYpLT5saW5rTGFiZWwoKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLSGl0VGVzdFJl
c3VsdENvcHlMaW5rVGl0bGUoV0tIaXRUZXN0UmVzdWx0UmVmIGhpdFRlc3RSZXN1bHRSZWYpCiB7
Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+bGlua1Rp
dGxlKCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVz
dWx0UmVmKS0+bGlua1RpdGxlKCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS0hpdFRlc3RSZXN1bHRD
b3B5TG9va3VwVGV4dChXS0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdCkKIHsKLSAgICBy
ZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKGhpdFRlc3RSZXN1bHQpLT5sb29rdXBUZXh0KCkpOwor
ICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0KS0+bG9v
a3VwVGV4dCgpKTsKIH0KIAogYm9vbCBXS0hpdFRlc3RSZXN1bHRJc0NvbnRlbnRFZGl0YWJsZShX
S0hpdFRlc3RSZXN1bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KGhpdFRlc3RSZXN1bHRSZWYpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChoaXRUZXN0UmVzdWx0UmVmKS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAog
V0tSZWN0IFdLSGl0VGVzdFJlc3VsdEdldEVsZW1lbnRCb3VuZGluZ0JveChXS0hpdFRlc3RSZXN1
bHRSZWYgaGl0VGVzdFJlc3VsdFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGhpdFRl
c3RSZXN1bHRSZWYpLT5lbGVtZW50Qm91bmRpbmdCb3goKSk7CisgICAgcmV0dXJuIHRvQVBJKFdl
YktpdDo6dG9JbXBsKGhpdFRlc3RSZXN1bHRSZWYpLT5lbGVtZW50Qm91bmRpbmdCb3goKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0luc3BlY3Rvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0luc3BlY3Rvci5jcHAKaW5kZXgg
Y2QyOWViNmVkZDIxNmYwYjk3MWE2MjZlYzMwNDkxYmI0OTU3M2ZjMy4uYWIyNDdhNGZmMTI4ZDcy
MzY3NWM2YjZkZDdiNmNjYTUxYTkyMDJjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tJbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLSW5zcGVjdG9yLmNwcApAQCAtNDEsOTQgKzQxLDk0IEBAIFdLVHlwZUlEIFdLSW5z
cGVjdG9yR2V0VHlwZUlEKCkKIAogV0tQYWdlUmVmIFdLSW5zcGVjdG9yR2V0UGFnZShXS0luc3Bl
Y3RvclJlZiBpbnNwZWN0b3JSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChpbnNwZWN0
b3JSZWYpLT5pbnNwZWN0ZWRQYWdlKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6OnRvSW1w
bChpbnNwZWN0b3JSZWYpLT5pbnNwZWN0ZWRQYWdlKCkpOwogfQogCiBib29sIFdLSW5zcGVjdG9y
SXNDb25uZWN0ZWQoV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwoaW5zcGVjdG9yUmVmKS0+aXNDb25uZWN0ZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwoaW5zcGVjdG9yUmVmKS0+aXNDb25uZWN0ZWQoKTsKIH0KIAogYm9vbCBXS0luc3BlY3Rv
cklzVmlzaWJsZShXS0luc3BlY3RvclJlZiBpbnNwZWN0b3JSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
SW1wbChpbnNwZWN0b3JSZWYpLT5pc1Zpc2libGUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0lt
cGwoaW5zcGVjdG9yUmVmKS0+aXNWaXNpYmxlKCk7CiB9CiAKIGJvb2wgV0tJbnNwZWN0b3JJc0Zy
b250KFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKGlu
c3BlY3RvclJlZiktPmlzRnJvbnQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwoaW5zcGVj
dG9yUmVmKS0+aXNGcm9udCgpOwogfQogCiB2b2lkIFdLSW5zcGVjdG9yQ29ubmVjdChXS0luc3Bl
Y3RvclJlZiBpbnNwZWN0b3JSZWYpCiB7Ci0gICAgdG9JbXBsKGluc3BlY3RvclJlZiktPmNvbm5l
Y3QoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChpbnNwZWN0b3JSZWYpLT5jb25uZWN0KCk7CiB9CiAK
IHZvaWQgV0tJbnNwZWN0b3JTaG93KFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZikKIHsKLSAg
ICB0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c2hvdygpOworICAgIFdlYktpdDo6dG9JbXBsKGluc3Bl
Y3RvclJlZiktPnNob3coKTsKIH0KIAogdm9pZCBXS0luc3BlY3RvckhpZGUoV0tJbnNwZWN0b3JS
ZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5oaWRlKCk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+aGlkZSgpOwogfQogCiB2b2lkIFdLSW5z
cGVjdG9yQ2xvc2UoV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHRvSW1wbChp
bnNwZWN0b3JSZWYpLT5jbG9zZSgpOworICAgIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJlZikt
PmNsb3NlKCk7CiB9CiAKIHZvaWQgV0tJbnNwZWN0b3JTaG93Q29uc29sZShXS0luc3BlY3RvclJl
ZiBpbnNwZWN0b3JSZWYpCiB7Ci0gICAgdG9JbXBsKGluc3BlY3RvclJlZiktPnNob3dDb25zb2xl
KCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c2hvd0NvbnNvbGUoKTsKIH0K
IAogdm9pZCBXS0luc3BlY3RvclNob3dSZXNvdXJjZXMoV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9y
UmVmKQogewotICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5zaG93UmVzb3VyY2VzKCk7CisgICAg
V2ViS2l0Ojp0b0ltcGwoaW5zcGVjdG9yUmVmKS0+c2hvd1Jlc291cmNlcygpOwogfQogCiB2b2lk
IFdLSW5zcGVjdG9yU2hvd01haW5SZXNvdXJjZUZvckZyYW1lKFdLSW5zcGVjdG9yUmVmIGluc3Bl
Y3RvclJlZiwgV0tGcmFtZVJlZiBmcmFtZVJlZikKIHsKLSAgICB0b0ltcGwoaW5zcGVjdG9yUmVm
KS0+c2hvd01haW5SZXNvdXJjZUZvckZyYW1lKHRvSW1wbChmcmFtZVJlZikpOworICAgIFdlYktp
dDo6dG9JbXBsKGluc3BlY3RvclJlZiktPnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJLaXQ6
OnRvSW1wbChmcmFtZVJlZikpOwogfQogCiBib29sIFdLSW5zcGVjdG9ySXNBdHRhY2hlZChXS0lu
c3BlY3RvclJlZiBpbnNwZWN0b3JSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChpbnNwZWN0b3JS
ZWYpLT5pc0F0dGFjaGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJl
ZiktPmlzQXR0YWNoZWQoKTsKIH0KIAogdm9pZCBXS0luc3BlY3RvckF0dGFjaChXS0luc3BlY3Rv
clJlZiBpbnNwZWN0b3JSZWYpCiB7Ci0gICAgYXV0byBpbnNwZWN0b3IgPSB0b0ltcGwoaW5zcGVj
dG9yUmVmKTsKKyAgICBhdXRvIGluc3BlY3RvciA9IFdlYktpdDo6dG9JbXBsKGluc3BlY3RvclJl
Zik7CiAgICAgaW5zcGVjdG9yLT5hdHRhY2goaW5zcGVjdG9yLT5hdHRhY2htZW50U2lkZSgpKTsK
IH0KIAogdm9pZCBXS0luc3BlY3RvckRldGFjaChXS0luc3BlY3RvclJlZiBpbnNwZWN0b3JSZWYp
CiB7Ci0gICAgdG9JbXBsKGluc3BlY3RvclJlZiktPmRldGFjaCgpOworICAgIFdlYktpdDo6dG9J
bXBsKGluc3BlY3RvclJlZiktPmRldGFjaCgpOwogfQogCiBib29sIFdLSW5zcGVjdG9ySXNQcm9m
aWxpbmdQYWdlKFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKGluc3BlY3RvclJlZiktPmlzUHJvZmlsaW5nUGFnZSgpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChpbnNwZWN0b3JSZWYpLT5pc1Byb2ZpbGluZ1BhZ2UoKTsKIH0KIAogdm9pZCBXS0lu
c3BlY3RvclRvZ2dsZVBhZ2VQcm9maWxpbmcoV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVmKQog
ewotICAgIHRvSW1wbChpbnNwZWN0b3JSZWYpLT5zaG93VGltZWxpbmVzKCk7Ci0gICAgdG9JbXBs
KGluc3BlY3RvclJlZiktPnRvZ2dsZVBhZ2VQcm9maWxpbmcoKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChpbnNwZWN0b3JSZWYpLT5zaG93VGltZWxpbmVzKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaW5z
cGVjdG9yUmVmKS0+dG9nZ2xlUGFnZVByb2ZpbGluZygpOwogfQogCiBib29sIFdLSW5zcGVjdG9y
SXNFbGVtZW50U2VsZWN0aW9uQWN0aXZlKFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvclJlZikKIHsK
LSAgICByZXR1cm4gdG9JbXBsKGluc3BlY3RvclJlZiktPmlzRWxlbWVudFNlbGVjdGlvbkFjdGl2
ZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChpbnNwZWN0b3JSZWYpLT5pc0VsZW1lbnRT
ZWxlY3Rpb25BY3RpdmUoKTsKIH0KIAogdm9pZCBXS0luc3BlY3RvclRvZ2dsZUVsZW1lbnRTZWxl
Y3Rpb24oV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVmKQogewotICAgIHRvSW1wbChpbnNwZWN0
b3JSZWYpLT50b2dnbGVFbGVtZW50U2VsZWN0aW9uKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoaW5z
cGVjdG9yUmVmKS0+dG9nZ2xlRWxlbWVudFNlbGVjdGlvbigpOwogfQogCiAjZW5kaWYgLy8gIVBM
QVRGT1JNKElPU19GQU1JTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyLmNwcAppbmRleCBlZmFlYmY3ZTY2YzNi
MjJkMzQ1MGFjMWI5YjIxMTk0OWFkMGZkMzQwLi5kMjMzZWI3ZGExNWM3NWVmNGM2MDk5Y2EzNmJh
NmIwYzdmYjA3ZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0tleVZhbHVlU3RvcmFnZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLS2V5VmFsdWVTdG9yYWdlTWFuYWdlci5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgV0tT
dHJpbmdSZWYgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0TW9kaWZpY2F0aW9uVGltZUtleSgp
CiB2b2lkIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldEtleVZhbHVlU3RvcmFnZU9yaWdpbnMo
V0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIGtleVZhbHVlU3RvcmFnZU1hbmFnZXIsIHZvaWQq
IGNvbnRleHQsIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldEtleVZhbHVlU3RvcmFnZU9yaWdp
bnNGdW5jdGlvbiBjYWxsYmFjaykKIAogewotICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFu
YWdlciA9IHRvSW1wbChyZWludGVycHJldF9jYXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4oa2V5
VmFsdWVTdG9yYWdlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCkuc3RvcmFnZU1hbmFnZXIo
KTsKKyAgICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIgPSBXZWJLaXQ6OnRvSW1wbChy
ZWludGVycHJldF9jYXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4oa2V5VmFsdWVTdG9yYWdlTWFu
YWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCkuc3RvcmFnZU1hbmFnZXIoKTsKICAgICBpZiAoIXN0
b3JhZ2VNYW5hZ2VyKSB7CiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbY29udGV4
dCwgY2FsbGJhY2tdIHsKICAgICAgICAgICAgIGNhbGxiYWNrKHRvQVBJKEFQSTo6QXJyYXk6OmNy
ZWF0ZSgpLnB0cigpKSwgbnVsbHB0ciwgY29udGV4dCk7CkBAIC04Miw3ICs4Miw3IEBAIHZvaWQg
V0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0S2V5VmFsdWVTdG9yYWdlT3JpZ2lucyhXS0tleVZh
bHVlU3RvcmFnZU1hbmFnZXJSCiAKIHZvaWQgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0U3Rv
cmFnZURldGFpbHNCeU9yaWdpbihXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJSZWYga2V5VmFsdWVT
dG9yYWdlTWFuYWdlciwgdm9pZCogY29udGV4dCwgV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0
U3RvcmFnZURldGFpbHNCeU9yaWdpbkZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIFN0b3JhZ2VN
YW5hZ2VyKiBzdG9yYWdlTWFuYWdlciA9IHRvSW1wbChyZWludGVycHJldF9jYXN0PFdLV2Vic2l0
ZURhdGFTdG9yZVJlZj4oa2V5VmFsdWVTdG9yYWdlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3Jl
KCkuc3RvcmFnZU1hbmFnZXIoKTsKKyAgICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIg
PSBXZWJLaXQ6OnRvSW1wbChyZWludGVycHJldF9jYXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4o
a2V5VmFsdWVTdG9yYWdlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCkuc3RvcmFnZU1hbmFn
ZXIoKTsKICAgICBpZiAoIXN0b3JhZ2VNYW5hZ2VyKSB7CiAgICAgICAgIFJ1bkxvb3A6Om1haW4o
KS5kaXNwYXRjaChbY29udGV4dCwgY2FsbGJhY2tdIHsKICAgICAgICAgICAgIGNhbGxiYWNrKHRv
QVBJKEFQSTo6QXJyYXk6OmNyZWF0ZSgpLnB0cigpKSwgbnVsbHB0ciwgY29udGV4dCk7CkBAIC0x
MDAsMTEgKzEwMCwxMSBAQCB2b2lkIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VE
ZXRhaWxzQnlPcmlnaW4oV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUgogCiAgICAgICAgICAgICBS
ZWZQdHI8QVBJOjpPYmplY3Q+IG9yaWdpbiA9IEFQSTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0ZShX
ZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21EYXRhYmFzZUlkZW50aWZpZXIob3JpZ2lu
RGV0YWlscy5vcmlnaW5JZGVudGlmaWVyKS0+c2VjdXJpdHlPcmlnaW4oKSk7CiAKLSAgICAgICAg
ICAgIGRldGFpbHNNYXAuc2V0KHRvSW1wbChXS0tleVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRPcmln
aW5LZXkoKSktPnN0cmluZygpLCBvcmlnaW4pOworICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQo
V2ViS2l0Ojp0b0ltcGwoV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0T3JpZ2luS2V5KCkpLT5z
dHJpbmcoKSwgb3JpZ2luKTsKICAgICAgICAgICAgIGlmIChvcmlnaW5EZXRhaWxzLmNyZWF0aW9u
VGltZSkKLSAgICAgICAgICAgICAgICBkZXRhaWxzTWFwLnNldCh0b0ltcGwoV0tLZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyR2V0Q3JlYXRpb25UaW1lS2V5KCkpLT5zdHJpbmcoKSwgQVBJOjpEb3VibGU6
OmNyZWF0ZShvcmlnaW5EZXRhaWxzLmNyZWF0aW9uVGltZS0+c2Vjb25kc1NpbmNlRXBvY2goKS52
YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgZGV0YWlsc01hcC5zZXQoV2ViS2l0Ojp0b0ltcGwo
V0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyR2V0Q3JlYXRpb25UaW1lS2V5KCkpLT5zdHJpbmcoKSwg
QVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLmNyZWF0aW9uVGltZS0+c2Vjb25kc1Np
bmNlRXBvY2goKS52YWx1ZSgpKSk7CiAgICAgICAgICAgICBpZiAob3JpZ2luRGV0YWlscy5tb2Rp
ZmljYXRpb25UaW1lKQotICAgICAgICAgICAgICAgIGRldGFpbHNNYXAuc2V0KHRvSW1wbChXS0tl
eVZhbHVlU3RvcmFnZU1hbmFnZXJHZXRNb2RpZmljYXRpb25UaW1lS2V5KCkpLT5zdHJpbmcoKSwg
QVBJOjpEb3VibGU6OmNyZWF0ZShvcmlnaW5EZXRhaWxzLm1vZGlmaWNhdGlvblRpbWUtPnNlY29u
ZHNTaW5jZUVwb2NoKCkudmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGRldGFpbHNNYXAuc2V0
KFdlYktpdDo6dG9JbXBsKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldE1vZGlmaWNhdGlvblRp
bWVLZXkoKSktPnN0cmluZygpLCBBUEk6OkRvdWJsZTo6Y3JlYXRlKG9yaWdpbkRldGFpbHMubW9k
aWZpY2F0aW9uVGltZS0+c2Vjb25kc1NpbmNlRXBvY2goKS52YWx1ZSgpKSk7CiAKICAgICAgICAg
ICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQoQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGTW92
ZShkZXRhaWxzTWFwKSkpOwogICAgICAgICB9CkBAIC0xMTUsMTYgKzExNSwxNiBAQCB2b2lkIFdL
S2V5VmFsdWVTdG9yYWdlTWFuYWdlckdldFN0b3JhZ2VEZXRhaWxzQnlPcmlnaW4oV0tLZXlWYWx1
ZVN0b3JhZ2VNYW5hZ2VyUgogCiB2b2lkIFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlckRlbGV0ZUVu
dHJpZXNGb3JPcmlnaW4oV0tLZXlWYWx1ZVN0b3JhZ2VNYW5hZ2VyUmVmIGtleVZhbHVlU3RvcmFn
ZU1hbmFnZXIsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luKQogewotICAgIFN0b3JhZ2VNYW5h
Z2VyKiBzdG9yYWdlTWFuYWdlciA9IHRvSW1wbChyZWludGVycHJldF9jYXN0PFdLV2Vic2l0ZURh
dGFTdG9yZVJlZj4oa2V5VmFsdWVTdG9yYWdlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCku
c3RvcmFnZU1hbmFnZXIoKTsKKyAgICBTdG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIgPSBX
ZWJLaXQ6OnRvSW1wbChyZWludGVycHJldF9jYXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4oa2V5
VmFsdWVTdG9yYWdlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCkuc3RvcmFnZU1hbmFnZXIo
KTsKICAgICBpZiAoIXN0b3JhZ2VNYW5hZ2VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdG9y
YWdlTWFuYWdlci0+ZGVsZXRlTG9jYWxTdG9yYWdlRW50cmllc0Zvck9yaWdpbih0b0ltcGwob3Jp
Z2luKS0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkpOworICAgIHN0b3JhZ2VNYW5hZ2VyLT5kZWxl
dGVMb2NhbFN0b3JhZ2VFbnRyaWVzRm9yT3JpZ2luKFdlYktpdDo6dG9JbXBsKG9yaWdpbiktPnNl
Y3VyaXR5T3JpZ2luKCkuZGF0YSgpKTsKIH0KIAogdm9pZCBXS0tleVZhbHVlU3RvcmFnZU1hbmFn
ZXJEZWxldGVBbGxFbnRyaWVzKFdLS2V5VmFsdWVTdG9yYWdlTWFuYWdlclJlZiBrZXlWYWx1ZVN0
b3JhZ2VNYW5hZ2VyKQogewotICAgIFN0b3JhZ2VNYW5hZ2VyKiBzdG9yYWdlTWFuYWdlciA9IHRv
SW1wbChyZWludGVycHJldF9jYXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4oa2V5VmFsdWVTdG9y
YWdlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCkuc3RvcmFnZU1hbmFnZXIoKTsKKyAgICBT
dG9yYWdlTWFuYWdlciogc3RvcmFnZU1hbmFnZXIgPSBXZWJLaXQ6OnRvSW1wbChyZWludGVycHJl
dF9jYXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4oa2V5VmFsdWVTdG9yYWdlTWFuYWdlcikpLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc3RvcmFnZU1hbmFnZXIoKTsKICAgICBpZiAoIXN0b3JhZ2VNYW5h
Z2VyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyLmNwcAppbmRleCA5NjAz
YmYwNzI1YTZkYmM4ZjcwOTQ5MjU3NmM3M2Y3MGIwNGU2YjA3Li4wOWM5YmFiMTkwYzc2NDZkMWVl
NGJkZGMyMDFjZTJmYzEzMjcxOWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS01lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXIuY3BwCkBAIC00Myw3
ICs0Myw3IEBAIFdLVHlwZUlEIFdLTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyR2V0VHlwZUlEKCkK
IHZvaWQgV0tNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXJTZXRDbGllbnQoV0tNZWRpYVNlc3Npb25G
b2N1c01hbmFnZXJSZWYgbWFuYWdlciwgY29uc3QgV0tNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXJD
bGllbnRCYXNlKiBjbGllbnQpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCi0gICAgdG9J
bXBsKG1hbmFnZXIpLT5pbml0aWFsaXplQ2xpZW50KGNsaWVudCk7CisgICAgV2ViS2l0Ojp0b0lt
cGwobWFuYWdlciktPmluaXRpYWxpemVDbGllbnQoY2xpZW50KTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKG1hbmFnZXIpOwogICAgIFVOVVNFRF9QQVJBTShjbGllbnQpOwpAQCAtNTMsNyArNTMs
NyBAQCB2b2lkIFdLTWVkaWFTZXNzaW9uRm9jdXNNYW5hZ2VyU2V0Q2xpZW50KFdLTWVkaWFTZXNz
aW9uRm9jdXNNYW5hZ2VyUmVmIG1hbmFnZXIsCiBib29sIFdLTWVkaWFTZXNzaW9uRm9jdXNNYW5h
Z2VyVmFsdWVGb3JQbGF5YmFja0F0dHJpYnV0ZShXS01lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlclJl
ZiBtYW5hZ2VyLCBXS01lZGlhU2Vzc2lvbkZvY3VzTWFuYWdlclBsYXliYWNrQXR0cmlidXRlIGF0
dHJpYnV0ZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKLSAgICByZXR1cm4gdG9JbXBs
KG1hbmFnZXIpLT52YWx1ZUZvclBsYXliYWNrQXR0cmlidXRlKGF0dHJpYnV0ZSk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKG1hbmFnZXIpLT52YWx1ZUZvclBsYXliYWNrQXR0cmlidXRlKGF0
dHJpYnV0ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShtYW5hZ2VyKTsKICAgICBVTlVTRURf
UEFSQU0oYXR0cmlidXRlKTsKQEAgLTY0LDcgKzY0LDcgQEAgYm9vbCBXS01lZGlhU2Vzc2lvbkZv
Y3VzTWFuYWdlclZhbHVlRm9yUGxheWJhY2tBdHRyaWJ1dGUoV0tNZWRpYVNlc3Npb25Gb2N1c01h
bmEKIHZvaWQgV0tNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXJTZXRWb2x1bWVPZkZvY3VzZWRNZWRp
YUVsZW1lbnQoV0tNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXJSZWYgbWFuYWdlciwgZG91YmxlIHZv
bHVtZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKLSAgICB0b0ltcGwobWFuYWdlcikt
PnNldFZvbHVtZU9mRm9jdXNlZE1lZGlhRWxlbWVudCh2b2x1bWUpOworICAgIFdlYktpdDo6dG9J
bXBsKG1hbmFnZXIpLT5zZXRWb2x1bWVPZkZvY3VzZWRNZWRpYUVsZW1lbnQodm9sdW1lKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKG1hbmFnZXIpOwogICAgIFVOVVNFRF9QQVJBTSh2b2x1bWUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tNZWRpYVNlc3Np
b25NZXRhZGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS01lZGlhU2Vz
c2lvbk1ldGFkYXRhLmNwcAppbmRleCAzMzBjYTUzYWE2N2M5M2NmMTM1Yjc0NmQ1YzkwZTU5Njk2
NDgzYTUxLi4yZDAzNGYzZDYxYTU4NWI2YjMxZjUzNjc3NWU2NTdhZmI3ODcxMGFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS01lZGlhU2Vzc2lvbk1ldGFkYXRh
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS01lZGlhU2Vzc2lvbk1l
dGFkYXRhLmNwcApAQCAtNDMsNyArNDMsNyBAQCBXS1R5cGVJRCBXS01lZGlhU2Vzc2lvbk1ldGFk
YXRhR2V0VHlwZUlEKCkKIFdLU3RyaW5nUmVmIFdLTWVkaWFTZXNzaW9uTWV0YWRhdGFDb3B5VGl0
bGUoV0tNZWRpYVNlc3Npb25NZXRhZGF0YVJlZiBtZXRhZGF0YSkKIHsKICNpZiBFTkFCTEUoTUVE
SUFfU0VTU0lPTikKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKG1ldGFkYXRhKS0+dGl0
bGUoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKG1ldGFkYXRhKS0+
dGl0bGUoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC01Myw3ICs1Myw3IEBAIFdLU3RyaW5nUmVmIFdLTWVkaWFTZXNzaW9uTWV0
YWRhdGFDb3B5VGl0bGUoV0tNZWRpYVNlc3Npb25NZXRhZGF0YVJlZiBtZXRhZGF0YSkKIFdLU3Ry
aW5nUmVmIFdLTWVkaWFTZXNzaW9uTWV0YWRhdGFDb3B5QXJ0aXN0KFdLTWVkaWFTZXNzaW9uTWV0
YWRhdGFSZWYgbWV0YWRhdGEpCiB7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCi0gICAgcmV0
dXJuIHRvQ29waWVkQVBJKHRvSW1wbChtZXRhZGF0YSktPmFydGlzdCgpKTsKKyAgICByZXR1cm4g
dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwobWV0YWRhdGEpLT5hcnRpc3QoKSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShtZXRhZGF0YSk7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02Myw3
ICs2Myw3IEBAIFdLU3RyaW5nUmVmIFdLTWVkaWFTZXNzaW9uTWV0YWRhdGFDb3B5QXJ0aXN0KFdL
TWVkaWFTZXNzaW9uTWV0YWRhdGFSZWYgbWV0YWRhdGEpCiBXS1N0cmluZ1JlZiBXS01lZGlhU2Vz
c2lvbk1ldGFkYXRhQ29weUFsYnVtKFdLTWVkaWFTZXNzaW9uTWV0YWRhdGFSZWYgbWV0YWRhdGEp
CiB7CiAjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04pCi0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRv
SW1wbChtZXRhZGF0YSktPmFsYnVtKCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6
OnRvSW1wbChtZXRhZGF0YSktPmFsYnVtKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obWV0
YWRhdGEpOwogICAgIHJldHVybiBudWxscHRyOwpAQCAtNzMsNyArNzMsNyBAQCBXS1N0cmluZ1Jl
ZiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhQ29weUFsYnVtKFdLTWVkaWFTZXNzaW9uTWV0YWRhdGFS
ZWYgbWV0YWRhdGEpCiBXS1VSTFJlZiBXS01lZGlhU2Vzc2lvbk1ldGFkYXRhQ29weUFydHdvcmtV
UkwoV0tNZWRpYVNlc3Npb25NZXRhZGF0YVJlZiBtZXRhZGF0YSkKIHsKICNpZiBFTkFCTEUoTUVE
SUFfU0VTU0lPTikKLSAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKG1ldGFkYXRhKS0+
YXJ0d29ya1VSTCgpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRVUkxBUEkoV2ViS2l0Ojp0b0ltcGwo
bWV0YWRhdGEpLT5hcnR3b3JrVVJMKCkpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obWV0YWRh
dGEpOwogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tNb2NrRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS01vY2tEaXNwbGF5LmNwcAppbmRleCBiYTZlMGViNTVkMjhjZjE2ZjkyZjcyODdmYzI2
NzY2OGI3MzAwNjFjLi5jZGNjNDc2M2Q0MTcxMDNmM2NjNDBmMGQ0YTA3YzkwMGY5MmI2YzFmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS01vY2tEaXNwbGF5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS01vY2tEaXNwbGF5LmNwcApA
QCAtMzUsNSArMzUsNSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiB2b2lkIFdLU2VuZERp
c3BsYXlDb25maWd1cmF0aW9uQ2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBj
b250ZXh0KQogewotICAgIHRvSW1wbChjb250ZXh0KS0+c2VuZERpc3BsYXlDb25maWd1cmF0aW9u
Q2hhbmdlZE1lc3NhZ2VGb3JUZXN0aW5nKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCkt
PnNlbmREaXNwbGF5Q29uZmlndXJhdGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZygpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tNb2NrTWVkaWFEZXZp
Y2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tNb2NrTWVkaWFEZXZpY2Uu
Y3BwCmluZGV4IGYyNzYzNjUxMzNjYWE0Mjk0ODc5NjVhOWMzOGUzMTUwMjhmYmY4NDUuLmI3Njk2
OTU3ZWJhYjcxMzNkYWVjMWJiNjUxNzljMGRjMjQyZWMzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLTW9ja01lZGlhRGV2aWNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS01vY2tNZWRpYURldmljZS5jcHAKQEAgLTQ2LDIxICs0
NiwyMSBAQCB2b2lkIFdLQWRkTW9ja01lZGlhRGV2aWNlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBX
S1N0cmluZ1JlZiBwZXJzaXN0ZW50SWQsIFdLU3RyaQogICAgIGVsc2UgaWYgKHR5cGVTdHJpbmcg
IT0gIm1pY3JvcGhvbmUiKQogICAgICAgICByZXR1cm47CiAKLSAgICB0b0ltcGwoY29udGV4dCkt
PmFkZE1vY2tNZWRpYURldmljZSh7IFdlYktpdDo6dG9JbXBsKHBlcnNpc3RlbnRJZCktPnN0cmlu
ZygpLCBXZWJLaXQ6OnRvSW1wbChsYWJlbCktPnN0cmluZygpLCBXVEZNb3ZlKHByb3BlcnRpZXMp
IH0pOworICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHQpLT5hZGRNb2NrTWVkaWFEZXZpY2UoeyBX
ZWJLaXQ6OnRvSW1wbChwZXJzaXN0ZW50SWQpLT5zdHJpbmcoKSwgV2ViS2l0Ojp0b0ltcGwobGFi
ZWwpLT5zdHJpbmcoKSwgV1RGTW92ZShwcm9wZXJ0aWVzKSB9KTsKICNlbmRpZgogfQogCiB2b2lk
IFdLQ2xlYXJNb2NrTWVkaWFEZXZpY2VzKFdLQ29udGV4dFJlZiBjb250ZXh0KQogewotICAgIHRv
SW1wbChjb250ZXh0KS0+Y2xlYXJNb2NrTWVkaWFEZXZpY2VzKCk7CisgICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dCktPmNsZWFyTW9ja01lZGlhRGV2aWNlcygpOwogfQogCiB2b2lkIFdLUmVtb3Zl
TW9ja01lZGlhRGV2aWNlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBwZXJzaXN0
ZW50SWQpCiB7Ci0gICAgdG9JbXBsKGNvbnRleHQpLT5yZW1vdmVNb2NrTWVkaWFEZXZpY2UoV2Vi
S2l0Ojp0b0ltcGwocGVyc2lzdGVudElkKS0+c3RyaW5nKCkpOworICAgIFdlYktpdDo6dG9JbXBs
KGNvbnRleHQpLT5yZW1vdmVNb2NrTWVkaWFEZXZpY2UoV2ViS2l0Ojp0b0ltcGwocGVyc2lzdGVu
dElkKS0+c3RyaW5nKCkpOwogfQogCiB2b2lkIFdLUmVzZXRNb2NrTWVkaWFEZXZpY2VzKFdLQ29u
dGV4dFJlZiBjb250ZXh0KQogewotICAgIHRvSW1wbChjb250ZXh0KS0+cmVzZXRNb2NrTWVkaWFE
ZXZpY2VzKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dCktPnJlc2V0TW9ja01lZGlhRGV2
aWNlcygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tO
YXZpZ2F0aW9uRGF0YVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS05h
dmlnYXRpb25EYXRhUmVmLmNwcAppbmRleCAwYTgxNWJiODI3ZTZmMTI0ZmZhNDlmZGZmNjEwNTFl
MzkwNmY2NmI0Li41NGRhNzA0ODlkYmU3ODhlZDE3MDZkNGQ3Nzc3YWNkZGRmZjgxYTZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS05hdmlnYXRpb25EYXRhUmVm
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS05hdmlnYXRpb25EYXRh
UmVmLmNwcApAQCAtMzksMjEgKzM5LDIxIEBAIFdLVHlwZUlEIFdLTmF2aWdhdGlvbkRhdGFHZXRU
eXBlSUQoKQogCiBXS1N0cmluZ1JlZiBXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKFdLTmF2aWdh
dGlvbkRhdGFSZWYgbmF2aWdhdGlvbkRhdGFSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJ
KHRvSW1wbChuYXZpZ2F0aW9uRGF0YVJlZiktPnRpdGxlKCkpOworICAgIHJldHVybiB0b0NvcGll
ZEFQSShXZWJLaXQ6OnRvSW1wbChuYXZpZ2F0aW9uRGF0YVJlZiktPnRpdGxlKCkpOwogfQogCiBX
S1VSTFJlZiBXS05hdmlnYXRpb25EYXRhQ29weVVSTChXS05hdmlnYXRpb25EYXRhUmVmIG5hdmln
YXRpb25EYXRhUmVmKQogewogICAgIC8vIFRoaXMgcmV0dXJucyB0aGUgVVJMIG9mIHRoZSBvcmln
aW5hbCByZXF1ZXN0IGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBwdXJwb3Nlcy4KLSAgICBy
ZXR1cm4gdG9Db3BpZWRVUkxBUEkodG9JbXBsKG5hdmlnYXRpb25EYXRhUmVmKS0+b3JpZ2luYWxS
ZXF1ZXN0KCkudXJsKCkpOworICAgIHJldHVybiB0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1w
bChuYXZpZ2F0aW9uRGF0YVJlZiktPm9yaWdpbmFsUmVxdWVzdCgpLnVybCgpKTsKIH0KIAogV0tV
UkxSZWYgV0tOYXZpZ2F0aW9uRGF0YUNvcHlOYXZpZ2F0aW9uRGVzdGluYXRpb25VUkwoV0tOYXZp
Z2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW9uRGF0YVJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRV
UkxBUEkodG9JbXBsKG5hdmlnYXRpb25EYXRhUmVmKS0+dXJsKCkpOworICAgIHJldHVybiB0b0Nv
cGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChuYXZpZ2F0aW9uRGF0YVJlZiktPnVybCgpKTsKIH0K
IAogV0tVUkxSZXF1ZXN0UmVmIFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2luYWxSZXF1ZXN0KFdL
TmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlvbkRhdGEpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZB
UEk6OlVSTFJlcXVlc3Q6OmNyZWF0ZSh0b0ltcGwobmF2aWdhdGlvbkRhdGEpLT5vcmlnaW5hbFJl
cXVlc3QoKSkubGVha1JlZigpKTsKKyAgICByZXR1cm4gdG9BUEkoJkFQSTo6VVJMUmVxdWVzdDo6
Y3JlYXRlKFdlYktpdDo6dG9JbXBsKG5hdmlnYXRpb25EYXRhKS0+b3JpZ2luYWxSZXF1ZXN0KCkp
LmxlYWtSZWYoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS05hdmlnYXRpb25SZXNwb25zZVJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS05hdmlnYXRpb25SZXNwb25zZVJlZi5jcHAKaW5kZXggZWQ2ZjIxYjBmNzNjODg5NjNm
OGZhOGFiMTMyODkzNzJjZTY2ZWEyZi4uMGYxOTFkOTYzZTUyZDY2Y2RhNmExNmRhMzZmZGNiOTky
MzllMjRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tOYXZp
Z2F0aW9uUmVzcG9uc2VSZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLTmF2aWdhdGlvblJlc3BvbnNlUmVmLmNwcApAQCAtMzgsNSArMzgsNSBAQCBXS1R5cGVJRCBX
S05hdmlnYXRpb25SZXNwb25zZUdldFR5cGVJRCgpCiAKIGJvb2wgV0tOYXZpZ2F0aW9uUmVzcG9u
c2VDYW5TaG93TUlNRVR5cGUoV0tOYXZpZ2F0aW9uUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChyZXNwb25zZSktPmNhblNob3dNSU1FVHlwZSgpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChyZXNwb25zZSktPmNhblNob3dNSU1FVHlwZSgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tOb3RpZmljYXRpb24uY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tOb3RpZmljYXRpb24uY3BwCmluZGV4IDhi
NmMwMzQ0NDA2ZTk5Yzc3YTc4ZTlmYzc2ODM3OTc2YmY3YjBhYTYuLjRmOTAzMTlmYjE2YjI3NTA4
MTliNjVkODI5YjkyMTM2YzM1ZmMzMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLTm90aWZpY2F0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS05vdGlmaWNhdGlvbi5jcHAKQEAgLTQxLDMyICs0MSwzMiBAQCBXS1R5cGVJRCBX
S05vdGlmaWNhdGlvbkdldFR5cGVJRCgpCiAKIFdLU3RyaW5nUmVmIFdLTm90aWZpY2F0aW9uQ29w
eVRpdGxlKFdLTm90aWZpY2F0aW9uUmVmIG5vdGlmaWNhdGlvbikKIHsKLSAgICByZXR1cm4gdG9D
b3BpZWRBUEkodG9JbXBsKG5vdGlmaWNhdGlvbiktPnRpdGxlKCkpOworICAgIHJldHVybiB0b0Nv
cGllZEFQSShXZWJLaXQ6OnRvSW1wbChub3RpZmljYXRpb24pLT50aXRsZSgpKTsKIH0KIAogV0tT
dHJpbmdSZWYgV0tOb3RpZmljYXRpb25Db3B5Qm9keShXS05vdGlmaWNhdGlvblJlZiBub3RpZmlj
YXRpb24pCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChub3RpZmljYXRpb24pLT5i
b2R5KCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChub3RpZmljYXRp
b24pLT5ib2R5KCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS05vdGlmaWNhdGlvbkNvcHlJY29uVVJM
KFdLTm90aWZpY2F0aW9uUmVmIG5vdGlmaWNhdGlvbikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRB
UEkodG9JbXBsKG5vdGlmaWNhdGlvbiktPmljb25VUkwoKSk7CisgICAgcmV0dXJuIHRvQ29waWVk
QVBJKFdlYktpdDo6dG9JbXBsKG5vdGlmaWNhdGlvbiktPmljb25VUkwoKSk7CiB9CiAKIFdLU3Ry
aW5nUmVmIFdLTm90aWZpY2F0aW9uQ29weVRhZyhXS05vdGlmaWNhdGlvblJlZiBub3RpZmljYXRp
b24pCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChub3RpZmljYXRpb24pLT50YWco
KSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9JbXBsKG5vdGlmaWNhdGlvbikt
PnRhZygpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tOb3RpZmljYXRpb25Db3B5TGFuZyhXS05vdGlm
aWNhdGlvblJlZiBub3RpZmljYXRpb24pCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1w
bChub3RpZmljYXRpb24pLT5sYW5nKCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6
OnRvSW1wbChub3RpZmljYXRpb24pLT5sYW5nKCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS05vdGlm
aWNhdGlvbkNvcHlEaXIoV0tOb3RpZmljYXRpb25SZWYgbm90aWZpY2F0aW9uKQogewotICAgIHN3
aXRjaCAodG9JbXBsKG5vdGlmaWNhdGlvbiktPmRpcigpKSB7CisgICAgc3dpdGNoIChXZWJLaXQ6
OnRvSW1wbChub3RpZmljYXRpb24pLT5kaXIoKSkgewogICAgIGNhc2UgV2ViQ29yZTo6Tm90aWZp
Y2F0aW9uRGlyZWN0aW9uOjpBdXRvOgogICAgICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoImF1dG8iKTsKICAgICBjYXNlIFdlYkNvcmU6Ok5vdGlmaWNhdGlvbkRpcmVj
dGlvbjo6THRyOgpAQCAtODAsMTAgKzgwLDEwIEBAIFdLU3RyaW5nUmVmIFdLTm90aWZpY2F0aW9u
Q29weURpcihXS05vdGlmaWNhdGlvblJlZiBub3RpZmljYXRpb24pCiAKIFdLU2VjdXJpdHlPcmln
aW5SZWYgV0tOb3RpZmljYXRpb25HZXRTZWN1cml0eU9yaWdpbihXS05vdGlmaWNhdGlvblJlZiBu
b3RpZmljYXRpb24pCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChub3RpZmljYXRpb24pLT5v
cmlnaW4oKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBsKG5vdGlmaWNhdGlvbikt
Pm9yaWdpbigpKTsKIH0KIAogdWludDY0X3QgV0tOb3RpZmljYXRpb25HZXRJRChXS05vdGlmaWNh
dGlvblJlZiBub3RpZmljYXRpb24pCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChub3RpZmljYXRpb24p
LT5ub3RpZmljYXRpb25JRCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChub3RpZmljYXRp
b24pLT5ub3RpZmljYXRpb25JRCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tOb3RpZmljYXRpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLTm90aWZpY2F0aW9uTWFuYWdlci5jcHAKaW5kZXggYjIyM2Q2Zjg3YmZh
NWU5NmUzZTUwZGEyZGQ3OGZmMGQyZGQ0MTZjZS4uNmFlOWNiMTE2YWE3M2Q0OWU2ZDhiMGI4NTM5
OWU4YzRjNTA5MDc1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tOb3RpZmljYXRpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS05vdGlmaWNhdGlvbk1hbmFnZXIuY3BwCkBAIC00MSwzNSArNDEsMzUgQEAgV0tUeXBl
SUQgV0tOb3RpZmljYXRpb25NYW5hZ2VyR2V0VHlwZUlEKCkKIAogdm9pZCBXS05vdGlmaWNhdGlv
bk1hbmFnZXJTZXRQcm92aWRlcihXS05vdGlmaWNhdGlvbk1hbmFnZXJSZWYgbWFuYWdlclJlZiwg
Y29uc3QgV0tOb3RpZmljYXRpb25Qcm92aWRlckJhc2UqIHdrUHJvdmlkZXIpCiB7Ci0gICAgdG9J
bXBsKG1hbmFnZXJSZWYpLT5zZXRQcm92aWRlcihzdGQ6Om1ha2VfdW5pcXVlPFdlYk5vdGlmaWNh
dGlvblByb3ZpZGVyPih3a1Byb3ZpZGVyKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwobWFuYWdlclJl
ZiktPnNldFByb3ZpZGVyKHN0ZDo6bWFrZV91bmlxdWU8V2ViTm90aWZpY2F0aW9uUHJvdmlkZXI+
KHdrUHJvdmlkZXIpKTsKIH0KIAogdm9pZCBXS05vdGlmaWNhdGlvbk1hbmFnZXJQcm92aWRlckRp
ZFNob3dOb3RpZmljYXRpb24oV0tOb3RpZmljYXRpb25NYW5hZ2VyUmVmIG1hbmFnZXJSZWYsIHVp
bnQ2NF90IG5vdGlmaWNhdGlvbklEKQogewotICAgIHRvSW1wbChtYW5hZ2VyUmVmKS0+cHJvdmlk
ZXJEaWRTaG93Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklEKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChtYW5hZ2VyUmVmKS0+cHJvdmlkZXJEaWRTaG93Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklE
KTsKIH0KIAogdm9pZCBXS05vdGlmaWNhdGlvbk1hbmFnZXJQcm92aWRlckRpZENsaWNrTm90aWZp
Y2F0aW9uKFdLTm90aWZpY2F0aW9uTWFuYWdlclJlZiBtYW5hZ2VyUmVmLCB1aW50NjRfdCBub3Rp
ZmljYXRpb25JRCkKIHsKLSAgICB0b0ltcGwobWFuYWdlclJlZiktPnByb3ZpZGVyRGlkQ2xpY2tO
b3RpZmljYXRpb24obm90aWZpY2F0aW9uSUQpOworICAgIFdlYktpdDo6dG9JbXBsKG1hbmFnZXJS
ZWYpLT5wcm92aWRlckRpZENsaWNrTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklEKTsKIH0KIAog
dm9pZCBXS05vdGlmaWNhdGlvbk1hbmFnZXJQcm92aWRlckRpZENsb3NlTm90aWZpY2F0aW9ucyhX
S05vdGlmaWNhdGlvbk1hbmFnZXJSZWYgbWFuYWdlclJlZiwgV0tBcnJheVJlZiBub3RpZmljYXRp
b25JRHMpCiB7Ci0gICAgdG9JbXBsKG1hbmFnZXJSZWYpLT5wcm92aWRlckRpZENsb3NlTm90aWZp
Y2F0aW9ucyh0b0ltcGwobm90aWZpY2F0aW9uSURzKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwobWFu
YWdlclJlZiktPnByb3ZpZGVyRGlkQ2xvc2VOb3RpZmljYXRpb25zKFdlYktpdDo6dG9JbXBsKG5v
dGlmaWNhdGlvbklEcykpOwogfQogCiB2b2lkIFdLTm90aWZpY2F0aW9uTWFuYWdlclByb3ZpZGVy
RGlkVXBkYXRlTm90aWZpY2F0aW9uUG9saWN5KFdLTm90aWZpY2F0aW9uTWFuYWdlclJlZiBtYW5h
Z2VyUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgYm9vbCBhbGxvd2VkKQogewotICAg
IHRvSW1wbChtYW5hZ2VyUmVmKS0+cHJvdmlkZXJEaWRVcGRhdGVOb3RpZmljYXRpb25Qb2xpY3ko
dG9JbXBsKG9yaWdpbiksIGFsbG93ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKG1hbmFnZXJSZWYp
LT5wcm92aWRlckRpZFVwZGF0ZU5vdGlmaWNhdGlvblBvbGljeShXZWJLaXQ6OnRvSW1wbChvcmln
aW4pLCBhbGxvd2VkKTsKIH0KIAogdm9pZCBXS05vdGlmaWNhdGlvbk1hbmFnZXJQcm92aWRlckRp
ZFJlbW92ZU5vdGlmaWNhdGlvblBvbGljaWVzKFdLTm90aWZpY2F0aW9uTWFuYWdlclJlZiBtYW5h
Z2VyUmVmLCBXS0FycmF5UmVmIG9yaWdpbnMpCiB7Ci0gICAgdG9JbXBsKG1hbmFnZXJSZWYpLT5w
cm92aWRlckRpZFJlbW92ZU5vdGlmaWNhdGlvblBvbGljaWVzKHRvSW1wbChvcmlnaW5zKSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwobWFuYWdlclJlZiktPnByb3ZpZGVyRGlkUmVtb3ZlTm90aWZpY2F0
aW9uUG9saWNpZXMoV2ViS2l0Ojp0b0ltcGwob3JpZ2lucykpOwogfQogCiB1aW50NjRfdCBXS05v
dGlmaWNhdGlvbk1hbmFnZXJHZXRMb2NhbElERm9yVGVzdGluZyhXS05vdGlmaWNhdGlvbk1hbmFn
ZXJSZWYgbWFuYWdlciwgV0tOb3RpZmljYXRpb25SZWYgbm90aWZpY2F0aW9uKQogewotICAgIHJl
dHVybiB0b0ltcGwobWFuYWdlciktPm5vdGlmaWNhdGlvbkxvY2FsSURGb3JUZXN0aW5nKHRvSW1w
bChub3RpZmljYXRpb24pKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwobWFuYWdlciktPm5v
dGlmaWNhdGlvbkxvY2FsSURGb3JUZXN0aW5nKFdlYktpdDo6dG9JbXBsKG5vdGlmaWNhdGlvbikp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tOb3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcAppbmRleCA1OTYzNDhkNzI2ZWRj
NDJiMGM3NzA0MGI5OTVjYzg4N2ZlMWU1NGFjLi43ZTc0ZmExZjM2N2UyOTY5ZTllZDg2YzZkNWFj
NTVlYmNlYmM2NmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0LmNwcApAQCAtMzgs
MTAgKzM4LDEwIEBAIFdLVHlwZUlEIFdLTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RHZXRU
eXBlSUQoKQogCiB2b2lkIFdLTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RBbGxvdyhXS05v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmIG5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0KQogewotICAgIHJldHVybiB0b0ltcGwobm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3Qp
LT5hbGxvdygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChub3RpZmljYXRpb25QZXJtaXNz
aW9uUmVxdWVzdCktPmFsbG93KCk7CiB9CiAKIHZvaWQgV0tOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdERlbnkoV0tOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZiBub3RpZmljYXRp
b25QZXJtaXNzaW9uUmVxdWVzdCkKIHsKLSAgICByZXR1cm4gdG9JbXBsKG5vdGlmaWNhdGlvblBl
cm1pc3Npb25SZXF1ZXN0KS0+ZGVueSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChub3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdCktPmRlbnkoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLT3BlblBhbmVsUGFyYW1ldGVyc1JlZi5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYuY3Bw
CmluZGV4IGFmYWY2ZTQ4YmMzNmE5NTc3MmMxM2U1N2MyYjJhODJkMThkZDM0NzQuLjEyZmNkNGI5
NzhjYjczNjY3ZWRhYTE0MTQyZGNkZmU3MmQ1YjllODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLT3BlblBhbmVsUGFyYW1ldGVyc1JlZi5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmLmNwcApA
QCAtNDAsMjIgKzQwLDIyIEBAIFdLVHlwZUlEIFdLT3BlblBhbmVsUGFyYW1ldGVyc0dldFR5cGVJ
RCgpCiAKIGJvb2wgV0tPcGVuUGFuZWxQYXJhbWV0ZXJzR2V0QWxsb3dzRGlyZWN0b3JpZXMoV0tP
cGVuUGFuZWxQYXJhbWV0ZXJzUmVmIHBhcmFtZXRlcnNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChwYXJhbWV0ZXJzUmVmKS0+YWxsb3dEaXJlY3RvcmllcygpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwYXJhbWV0ZXJzUmVmKS0+YWxsb3dEaXJlY3RvcmllcygpOwogfQogCiBib29sIFdL
T3BlblBhbmVsUGFyYW1ldGVyc0dldEFsbG93c011bHRpcGxlRmlsZXMoV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzUmVmIHBhcmFtZXRlcnNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYXJhbWV0ZXJz
UmVmKS0+YWxsb3dNdWx0aXBsZUZpbGVzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBh
cmFtZXRlcnNSZWYpLT5hbGxvd011bHRpcGxlRmlsZXMoKTsKIH0KIAogV0tBcnJheVJlZiBXS09w
ZW5QYW5lbFBhcmFtZXRlcnNDb3B5QWNjZXB0ZWRNSU1FVHlwZXMoV0tPcGVuUGFuZWxQYXJhbWV0
ZXJzUmVmIHBhcmFtZXRlcnNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFyYW1l
dGVyc1JlZiktPmFjY2VwdE1JTUVUeXBlcygpLmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJ
KCZXZWJLaXQ6OnRvSW1wbChwYXJhbWV0ZXJzUmVmKS0+YWNjZXB0TUlNRVR5cGVzKCkubGVha1Jl
ZigpKTsKIH0KIAogV0tBcnJheVJlZiBXS09wZW5QYW5lbFBhcmFtZXRlcnNDb3B5QWNjZXB0ZWRG
aWxlRXh0ZW5zaW9ucyhXS09wZW5QYW5lbFBhcmFtZXRlcnNSZWYgcGFyYW1ldGVyc1JlZikKIHsK
LSAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYXJhbWV0ZXJzUmVmKS0+YWNjZXB0RmlsZUV4dGVu
c2lvbnMoKS5sZWFrUmVmKCkpOworICAgIHJldHVybiB0b0FQSSgmV2ViS2l0Ojp0b0ltcGwocGFy
YW1ldGVyc1JlZiktPmFjY2VwdEZpbGVFeHRlbnNpb25zKCkubGVha1JlZigpKTsKIH0KIAogLy8g
RGVwcmVjYXRlZC4KQEAgLTY3LDcgKzY3LDcgQEAgV0tTdHJpbmdSZWYgV0tPcGVuUGFuZWxQYXJh
bWV0ZXJzQ29weUNhcHR1cmUoV0tPcGVuUGFuZWxQYXJhbWV0ZXJzUmVmKQogYm9vbCBXS09wZW5Q
YW5lbFBhcmFtZXRlcnNHZXRNZWRpYUNhcHR1cmVUeXBlKFdLT3BlblBhbmVsUGFyYW1ldGVyc1Jl
ZiBwYXJhbWV0ZXJzUmVmKQogewogI2lmIEVOQUJMRShNRURJQV9DQVBUVVJFKQotICAgIHJldHVy
biB0b0ltcGwocGFyYW1ldGVyc1JlZiktPm1lZGlhQ2FwdHVyZVR5cGUoKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0ltcGwocGFyYW1ldGVyc1JlZiktPm1lZGlhQ2FwdHVyZVR5cGUoKTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKHBhcmFtZXRlcnNSZWYpOwogICAgIHJldHVybiBmYWxzZTsKQEAg
LTc2LDUgKzc2LDUgQEAgYm9vbCBXS09wZW5QYW5lbFBhcmFtZXRlcnNHZXRNZWRpYUNhcHR1cmVU
eXBlKFdLT3BlblBhbmVsUGFyYW1ldGVyc1JlZiBwYXJhbWV0ZXIKIAogV0tBcnJheVJlZiBXS09w
ZW5QYW5lbFBhcmFtZXRlcnNDb3B5U2VsZWN0ZWRGaWxlTmFtZXMoV0tPcGVuUGFuZWxQYXJhbWV0
ZXJzUmVmIHBhcmFtZXRlcnNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFyYW1l
dGVyc1JlZiktPnNlbGVjdGVkRmlsZU5hbWVzKCkubGVha1JlZigpKTsKKyAgICByZXR1cm4gdG9B
UEkoJldlYktpdDo6dG9JbXBsKHBhcmFtZXRlcnNSZWYpLT5zZWxlY3RlZEZpbGVOYW1lcygpLmxl
YWtSZWYoKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S09wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3BwCmluZGV4IDRhMGZmYzQyZTU5NDFjMzA2
YmNmZmJmODhjZTE1YWNjNzA5OWI1Y2UuLjhhNmUyZGRjNGNhZDc3MzlmYjRmYjg1N2VlNTg2N2Iw
MGQ3NWQ3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3BwCkBAIC01NiwxMCArNTYsMTAgQEAgc3Rh
dGljIFZlY3RvcjxTdHJpbmc+IGZpbGVQYXRoc0Zyb21GaWxlVVJMcyhjb25zdCBBUEk6OkFycmF5
JiBmaWxlVVJMcykKIAogdm9pZCBXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyQ2hvb3NlRmlsZXMo
V0tPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lclJlZiBsaXN0ZW5lclJlZiwgV0tBcnJheVJlZiBmaWxl
VVJMc1JlZikKIHsKLSAgICB0b0ltcGwobGlzdGVuZXJSZWYpLT5jaG9vc2VGaWxlcyhmaWxlUGF0
aHNGcm9tRmlsZVVSTHMoKnRvSW1wbChmaWxlVVJMc1JlZikpKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChsaXN0ZW5lclJlZiktPmNob29zZUZpbGVzKGZpbGVQYXRoc0Zyb21GaWxlVVJMcygqV2ViS2l0
Ojp0b0ltcGwoZmlsZVVSTHNSZWYpKSk7CiB9CiAKIHZvaWQgV0tPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lckNhbmNlbChXS09wZW5QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVyUmVmKQogewot
ICAgIHRvSW1wbChsaXN0ZW5lclJlZiktPmNhbmNlbCgpOworICAgIFdlYktpdDo6dG9JbXBsKGxp
c3RlbmVyUmVmKS0+Y2FuY2VsKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1BhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQ
YWdlLmNwcAppbmRleCAyNTM3NDM5NjQxYjZmZmUyN2UxNjI2MTU1NDM4NTI1MTUwMzM0NjY4Li5h
NmQ1ZDc1NmJjNmY0Yzg4NmNkYTk4ZWU4ZGMxNTQwOGE4MDc2MDM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUGFnZS5jcHAKQEAgLTE0MCw2NSArMTQwLDY1IEBAIFdLVHlwZUlE
IFdLUGFnZUdldFR5cGVJRCgpCiAKIFdLQ29udGV4dFJlZiBXS1BhZ2VHZXRDb250ZXh0KFdLUGFn
ZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBhZ2VSZWYpLT5wcm9j
ZXNzKCkucHJvY2Vzc1Bvb2woKSk7CisgICAgcmV0dXJuIHRvQVBJKCZXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkpOwogfQogCiBXS1BhZ2VHcm91cFJlZiBX
S1BhZ2VHZXRQYWdlR3JvdXAoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJ
KCZ0b0ltcGwocGFnZVJlZiktPnBhZ2VHcm91cCgpKTsKKyAgICByZXR1cm4gdG9BUEkoJldlYktp
dDo6dG9JbXBsKHBhZ2VSZWYpLT5wYWdlR3JvdXAoKSk7CiB9CiAKIFdLUGFnZUNvbmZpZ3VyYXRp
b25SZWYgV0tQYWdlQ29weVBhZ2VDb25maWd1cmF0aW9uKFdLUGFnZVJlZiBwYWdlUmVmKQogewot
ICAgIHJldHVybiB0b0FQSSgmdG9JbXBsKHBhZ2VSZWYpLT5jb25maWd1cmF0aW9uKCkuY29weSgp
LmxlYWtSZWYoKSk7CisgICAgcmV0dXJuIHRvQVBJKCZXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
Y29uZmlndXJhdGlvbigpLmNvcHkoKS5sZWFrUmVmKCkpOwogfQogCiB2b2lkIFdLUGFnZUxvYWRV
UkwoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLVVJMUmVmIFVSTFJlZikKIHsKLSAgICB0b0ltcGwocGFn
ZVJlZiktPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoVVJMUmVmKSkpOworICAg
IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIHRvV1RGU3Ry
aW5nKFVSTFJlZikpKTsKIH0KIAogdm9pZCBXS1BhZ2VMb2FkVVJMV2l0aFNob3VsZE9wZW5FeHRl
cm5hbFVSTHNQb2xpY3koV0tQYWdlUmVmIHBhZ2VSZWYsIFdLVVJMUmVmIFVSTFJlZiwgYm9vbCBz
aG91bGRPcGVuRXh0ZXJuYWxVUkxzKQogewogICAgIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xp
Y3kgc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSA9IHNob3VsZE9wZW5FeHRlcm5hbFVSTHMg
PyBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdyA6IFNob3VsZE9wZW5F
eHRlcm5hbFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93OwotICAgIHRvSW1wbChwYWdlUmVmKS0+
bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCB0b1dURlN0cmluZyhVUkxSZWYpKSwgc2hvdWxkT3BlbkV4
dGVybmFsVVJMc1BvbGljeSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmxvYWRSZXF1
ZXN0KFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoVVJMUmVmKSksIHNob3VsZE9wZW5FeHRlcm5hbFVS
THNQb2xpY3kpOwogfQogCiB2b2lkIFdLUGFnZUxvYWRVUkxXaXRoVXNlckRhdGEoV0tQYWdlUmVm
IHBhZ2VSZWYsIFdLVVJMUmVmIFVSTFJlZiwgV0tUeXBlUmVmIHVzZXJEYXRhUmVmKQogewotICAg
IHRvSW1wbChwYWdlUmVmKS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCB0b1dURlN0cmluZyhVUkxS
ZWYpKSwgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxkTm90QWxsb3csIHRvSW1w
bCh1c2VyRGF0YVJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5sb2FkUmVxdWVz
dChVUkwoVVJMKCksIHRvV1RGU3RyaW5nKFVSTFJlZikpLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxz
UG9saWN5OjpTaG91bGROb3RBbGxvdywgV2ViS2l0Ojp0b0ltcGwodXNlckRhdGFSZWYpKTsKIH0K
IAogdm9pZCBXS1BhZ2VMb2FkVVJMUmVxdWVzdChXS1BhZ2VSZWYgcGFnZVJlZiwgV0tVUkxSZXF1
ZXN0UmVmIHVybFJlcXVlc3RSZWYpCiB7Ci0gICAgYXV0byByZXNvdXJjZVJlcXVlc3QgPSB0b0lt
cGwodXJsUmVxdWVzdFJlZiktPnJlc291cmNlUmVxdWVzdCgpOwotICAgIHRvSW1wbChwYWdlUmVm
KS0+bG9hZFJlcXVlc3QoV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpKTsKKyAgICBhdXRvIHJlc291
cmNlUmVxdWVzdCA9IFdlYktpdDo6dG9JbXBsKHVybFJlcXVlc3RSZWYpLT5yZXNvdXJjZVJlcXVl
c3QoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+bG9hZFJlcXVlc3QoV1RGTW92ZShy
ZXNvdXJjZVJlcXVlc3QpKTsKIH0KIAogdm9pZCBXS1BhZ2VMb2FkVVJMUmVxdWVzdFdpdGhVc2Vy
RGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tVUkxSZXF1ZXN0UmVmIHVybFJlcXVlc3RSZWYsIFdL
VHlwZVJlZiB1c2VyRGF0YVJlZikKIHsKLSAgICBhdXRvIHJlc291cmNlUmVxdWVzdCA9IHRvSW1w
bCh1cmxSZXF1ZXN0UmVmKS0+cmVzb3VyY2VSZXF1ZXN0KCk7Ci0gICAgdG9JbXBsKHBhZ2VSZWYp
LT5sb2FkUmVxdWVzdChXVEZNb3ZlKHJlc291cmNlUmVxdWVzdCksIFNob3VsZE9wZW5FeHRlcm5h
bFVSTHNQb2xpY3k6OlNob3VsZE5vdEFsbG93LCB0b0ltcGwodXNlckRhdGFSZWYpKTsKKyAgICBh
dXRvIHJlc291cmNlUmVxdWVzdCA9IFdlYktpdDo6dG9JbXBsKHVybFJlcXVlc3RSZWYpLT5yZXNv
dXJjZVJlcXVlc3QoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+bG9hZFJlcXVlc3Qo
V1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpLCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpT
aG91bGROb3RBbGxvdywgV2ViS2l0Ojp0b0ltcGwodXNlckRhdGFSZWYpKTsKIH0KIAogdm9pZCBX
S1BhZ2VMb2FkRmlsZShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tVUkxSZWYgZmlsZVVSTCwgV0tVUkxS
ZWYgcmVzb3VyY2VEaXJlY3RvcnlVUkwpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5sb2FkRmls
ZSh0b1dURlN0cmluZyhmaWxlVVJMKSwgdG9XVEZTdHJpbmcocmVzb3VyY2VEaXJlY3RvcnlVUkwp
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+bG9hZEZpbGUodG9XVEZTdHJpbmcoZmls
ZVVSTCksIHRvV1RGU3RyaW5nKHJlc291cmNlRGlyZWN0b3J5VVJMKSk7CiB9CiAKIHZvaWQgV0tQ
YWdlTG9hZEZpbGVXaXRoVXNlckRhdGEoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLVVJMUmVmIGZpbGVV
UkwsIFdLVVJMUmVmIHJlc291cmNlRGlyZWN0b3J5VVJMLCBXS1R5cGVSZWYgdXNlckRhdGFSZWYp
CiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5sb2FkRmlsZSh0b1dURlN0cmluZyhmaWxlVVJMKSwg
dG9XVEZTdHJpbmcocmVzb3VyY2VEaXJlY3RvcnlVUkwpLCB0b0ltcGwodXNlckRhdGFSZWYpKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+bG9hZEZpbGUodG9XVEZTdHJpbmcoZmlsZVVS
TCksIHRvV1RGU3RyaW5nKHJlc291cmNlRGlyZWN0b3J5VVJMKSwgV2ViS2l0Ojp0b0ltcGwodXNl
ckRhdGFSZWYpKTsKIH0KIAogdm9pZCBXS1BhZ2VMb2FkRGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwg
V0tEYXRhUmVmIGRhdGFSZWYsIFdLU3RyaW5nUmVmIE1JTUVUeXBlUmVmLCBXS1N0cmluZ1JlZiBl
bmNvZGluZ1JlZiwgV0tVUkxSZWYgYmFzZVVSTFJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZikt
PmxvYWREYXRhKHRvSW1wbChkYXRhUmVmKS0+ZGF0YVJlZmVyZW5jZSgpLCB0b1dURlN0cmluZyhN
SU1FVHlwZVJlZiksIHRvV1RGU3RyaW5nKGVuY29kaW5nUmVmKSwgdG9XVEZTdHJpbmcoYmFzZVVS
TFJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5sb2FkRGF0YShXZWJLaXQ6OnRv
SW1wbChkYXRhUmVmKS0+ZGF0YVJlZmVyZW5jZSgpLCB0b1dURlN0cmluZyhNSU1FVHlwZVJlZiks
IHRvV1RGU3RyaW5nKGVuY29kaW5nUmVmKSwgdG9XVEZTdHJpbmcoYmFzZVVSTFJlZikpOwogfQog
CiB2b2lkIFdLUGFnZUxvYWREYXRhV2l0aFVzZXJEYXRhKFdLUGFnZVJlZiBwYWdlUmVmLCBXS0Rh
dGFSZWYgZGF0YVJlZiwgV0tTdHJpbmdSZWYgTUlNRVR5cGVSZWYsIFdLU3RyaW5nUmVmIGVuY29k
aW5nUmVmLCBXS1VSTFJlZiBiYXNlVVJMUmVmLCBXS1R5cGVSZWYgdXNlckRhdGFSZWYpCiB7Ci0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5sb2FkRGF0YSh0b0ltcGwoZGF0YVJlZiktPmRhdGFSZWZlcmVu
Y2UoKSwgdG9XVEZTdHJpbmcoTUlNRVR5cGVSZWYpLCB0b1dURlN0cmluZyhlbmNvZGluZ1JlZiks
IHRvV1RGU3RyaW5nKGJhc2VVUkxSZWYpLCB0b0ltcGwodXNlckRhdGFSZWYpKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlUmVmKS0+bG9hZERhdGEoV2ViS2l0Ojp0b0ltcGwoZGF0YVJlZiktPmRh
dGFSZWZlcmVuY2UoKSwgdG9XVEZTdHJpbmcoTUlNRVR5cGVSZWYpLCB0b1dURlN0cmluZyhlbmNv
ZGluZ1JlZiksIHRvV1RGU3RyaW5nKGJhc2VVUkxSZWYpLCBXZWJLaXQ6OnRvSW1wbCh1c2VyRGF0
YVJlZikpOwogfQogCiBzdGF0aWMgU3RyaW5nIGVuY29kaW5nT2YoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCkBAIC0yMTgsNyArMjE4LDcgQEAgc3RhdGljIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhRnJv
bShjb25zdCBTdHJpbmcmIHN0cmluZykKIHN0YXRpYyB2b2lkIGxvYWRTdHJpbmcoV0tQYWdlUmVm
IHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHN0cmluZ1JlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgU3RyaW5nJiBiYXNlVVJMLCBXS1R5cGVSZWYgdXNlckRhdGFSZWYpCiB7CiAgICAgU3Ry
aW5nIHN0cmluZyA9IHRvV1RGU3RyaW5nKHN0cmluZ1JlZik7Ci0gICAgdG9JbXBsKHBhZ2VSZWYp
LT5sb2FkRGF0YShkYXRhRnJvbShzdHJpbmcpLCBtaW1lVHlwZSwgZW5jb2RpbmdPZihzdHJpbmcp
LCBiYXNlVVJMLCB0b0ltcGwodXNlckRhdGFSZWYpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdl
UmVmKS0+bG9hZERhdGEoZGF0YUZyb20oc3RyaW5nKSwgbWltZVR5cGUsIGVuY29kaW5nT2Yoc3Ry
aW5nKSwgYmFzZVVSTCwgV2ViS2l0Ojp0b0ltcGwodXNlckRhdGFSZWYpKTsKIH0KIAogdm9pZCBX
S1BhZ2VMb2FkSFRNTFN0cmluZyhXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgaHRtbFN0
cmluZ1JlZiwgV0tVUkxSZWYgYmFzZVVSTFJlZikKQEAgLTIzOSw3ICsyMzksNyBAQCB2b2lkIFdL
UGFnZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1Jl
ZiBodG1sU3RyaW5nUmVmLAogdm9pZCBXS1BhZ2VMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZ1dpdGhV
c2VyRGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgaHRtbFN0cmluZ1JlZiwgV0tV
UkxSZWYgYmFzZVVSTFJlZiwgV0tVUkxSZWYgdW5yZWFjaGFibGVVUkxSZWYsIFdLVHlwZVJlZiB1
c2VyRGF0YVJlZikKIHsKICAgICBTdHJpbmcgc3RyaW5nID0gdG9XVEZTdHJpbmcoaHRtbFN0cmlu
Z1JlZik7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5sb2FkQWx0ZXJuYXRlSFRNTChkYXRhRnJvbShz
dHJpbmcpLCBlbmNvZGluZ09mKHN0cmluZyksIFVSTChVUkwoKSwgdG9XVEZTdHJpbmcoYmFzZVVS
TFJlZikpLCBVUkwoVVJMKCksIHRvV1RGU3RyaW5nKHVucmVhY2hhYmxlVVJMUmVmKSksIHRvSW1w
bCh1c2VyRGF0YVJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5sb2FkQWx0ZXJu
YXRlSFRNTChkYXRhRnJvbShzdHJpbmcpLCBlbmNvZGluZ09mKHN0cmluZyksIFVSTChVUkwoKSwg
dG9XVEZTdHJpbmcoYmFzZVVSTFJlZikpLCBVUkwoVVJMKCksIHRvV1RGU3RyaW5nKHVucmVhY2hh
YmxlVVJMUmVmKSksIFdlYktpdDo6dG9JbXBsKHVzZXJEYXRhUmVmKSk7CiB9CiAKIHZvaWQgV0tQ
YWdlTG9hZFBsYWluVGV4dFN0cmluZyhXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgcGxh
aW5UZXh0U3RyaW5nUmVmKQpAQCAtMjU0LDE3ICsyNTQsMTcgQEAgdm9pZCBXS1BhZ2VMb2FkUGxh
aW5UZXh0U3RyaW5nV2l0aFVzZXJEYXRhKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBw
bGFpblQKIAogdm9pZCBXS1BhZ2VMb2FkV2ViQXJjaGl2ZURhdGEoV0tQYWdlUmVmIHBhZ2VSZWYs
IFdLRGF0YVJlZiB3ZWJBcmNoaXZlRGF0YVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmxv
YWRXZWJBcmNoaXZlRGF0YSh0b0ltcGwod2ViQXJjaGl2ZURhdGFSZWYpKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChwYWdlUmVmKS0+bG9hZFdlYkFyY2hpdmVEYXRhKFdlYktpdDo6dG9JbXBsKHdlYkFy
Y2hpdmVEYXRhUmVmKSk7CiB9CiAKIHZvaWQgV0tQYWdlTG9hZFdlYkFyY2hpdmVEYXRhV2l0aFVz
ZXJEYXRhKFdLUGFnZVJlZiBwYWdlUmVmLCBXS0RhdGFSZWYgd2ViQXJjaGl2ZURhdGFSZWYsIFdL
VHlwZVJlZiB1c2VyRGF0YVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmxvYWRXZWJBcmNo
aXZlRGF0YSh0b0ltcGwod2ViQXJjaGl2ZURhdGFSZWYpLCB0b0ltcGwodXNlckRhdGFSZWYpKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+bG9hZFdlYkFyY2hpdmVEYXRhKFdlYktpdDo6
dG9JbXBsKHdlYkFyY2hpdmVEYXRhUmVmKSwgV2ViS2l0Ojp0b0ltcGwodXNlckRhdGFSZWYpKTsK
IH0KIAogdm9pZCBXS1BhZ2VTdG9wTG9hZGluZyhXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0
b0ltcGwocGFnZVJlZiktPnN0b3BMb2FkaW5nKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnN0b3BMb2FkaW5nKCk7CiB9CiAKIHZvaWQgV0tQYWdlUmVsb2FkKFdLUGFnZVJlZiBwYWdl
UmVmKQpAQCAtMjc1LDE0NCArMjc1LDE0NCBAQCB2b2lkIFdLUGFnZVJlbG9hZChXS1BhZ2VSZWYg
cGFnZVJlZikKICAgICAgICAgcmVsb2FkT3B0aW9ucy5hZGQoV2ViQ29yZTo6UmVsb2FkT3B0aW9u
OjpFeHBpcmVkT25seSk7CiAjZW5kaWYKIAotICAgIHRvSW1wbChwYWdlUmVmKS0+cmVsb2FkKHJl
bG9hZE9wdGlvbnMpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5yZWxvYWQocmVsb2Fk
T3B0aW9ucyk7CiB9CiAKIHZvaWQgV0tQYWdlUmVsb2FkV2l0aG91dENvbnRlbnRCbG9ja2VycyhX
S1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnJlbG9hZChXZWJDb3Jl
OjpSZWxvYWRPcHRpb246OkRpc2FibGVDb250ZW50QmxvY2tlcnMpOworICAgIFdlYktpdDo6dG9J
bXBsKHBhZ2VSZWYpLT5yZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpEaXNhYmxlQ29udGVu
dEJsb2NrZXJzKTsKIH0KIAogdm9pZCBXS1BhZ2VSZWxvYWRGcm9tT3JpZ2luKFdLUGFnZVJlZiBw
YWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9w
dGlvbjo6RnJvbU9yaWdpbik7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnJlbG9hZChX
ZWJDb3JlOjpSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwogfQogCiB2b2lkIFdLUGFnZVJlbG9h
ZEV4cGlyZWRPbmx5KFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+
cmVsb2FkKFdlYkNvcmU6OlJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOworICAgIFdlYktpdDo6
dG9JbXBsKHBhZ2VSZWYpLT5yZWxvYWQoV2ViQ29yZTo6UmVsb2FkT3B0aW9uOjpFeHBpcmVkT25s
eSk7CiB9CiAKIGJvb2wgV0tQYWdlVHJ5Q2xvc2UoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+dHJ5Q2xvc2UoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwocGFnZVJlZiktPnRyeUNsb3NlKCk7CiB9CiAKIHZvaWQgV0tQYWdlQ2xvc2UoV0tQYWdl
UmVmIHBhZ2VSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jbG9zZSgpOworICAgIFdlYktp
dDo6dG9JbXBsKHBhZ2VSZWYpLT5jbG9zZSgpOwogfQogCiBib29sIFdLUGFnZUlzQ2xvc2VkKFdL
UGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPmlzQ2xvc2Vk
KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5pc0Nsb3NlZCgpOwogfQog
CiB2b2lkIFdLUGFnZUdvRm9yd2FyZChXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwo
cGFnZVJlZiktPmdvRm9yd2FyZCgpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5nb0Zv
cndhcmQoKTsKIH0KIAogYm9vbCBXS1BhZ2VDYW5Hb0ZvcndhcmQoV0tQYWdlUmVmIHBhZ2VSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+YmFja0ZvcndhcmRMaXN0KCkuZm9yd2Fy
ZEl0ZW0oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmJhY2tGb3J3YXJk
TGlzdCgpLmZvcndhcmRJdGVtKCk7CiB9CiAKIHZvaWQgV0tQYWdlR29CYWNrKFdLUGFnZVJlZiBw
YWdlUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Z29CYWNrKCk7CisgICAgV2ViS2l0Ojp0
b0ltcGwocGFnZVJlZiktPmdvQmFjaygpOwogfQogCiBib29sIFdLUGFnZUNhbkdvQmFjayhXS1Bh
Z2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5iYWNrRm9yd2Fy
ZExpc3QoKS5iYWNrSXRlbSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
YmFja0ZvcndhcmRMaXN0KCkuYmFja0l0ZW0oKTsKIH0KIAogdm9pZCBXS1BhZ2VHb1RvQmFja0Zv
cndhcmRMaXN0SXRlbShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tCYWNrRm9yd2FyZExpc3RJdGVtUmVm
IGl0ZW1SZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nb1RvQmFja0ZvcndhcmRJdGVtKCp0
b0ltcGwoaXRlbVJlZikpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5nb1RvQmFja0Zv
cndhcmRJdGVtKCpXZWJLaXQ6OnRvSW1wbChpdGVtUmVmKSk7CiB9CiAKIHZvaWQgV0tQYWdlVHJ5
UmVzdG9yZVNjcm9sbFBvc2l0aW9uKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHRvSW1wbChw
YWdlUmVmKS0+dHJ5UmVzdG9yZVNjcm9sbFBvc2l0aW9uKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cGFnZVJlZiktPnRyeVJlc3RvcmVTY3JvbGxQb3NpdGlvbigpOwogfQogCiBXS0JhY2tGb3J3YXJk
TGlzdFJlZiBXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3QoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFnZVJlZiktPmJhY2tGb3J3YXJkTGlzdCgpKTsKKyAg
ICByZXR1cm4gdG9BUEkoJldlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5iYWNrRm9yd2FyZExpc3Qo
KSk7CiB9CiAKIGJvb2wgV0tQYWdlV2lsbEhhbmRsZUhvcml6b250YWxTY3JvbGxFdmVudHMoV0tQ
YWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+d2lsbEhhbmRs
ZUhvcml6b250YWxTY3JvbGxFdmVudHMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFn
ZVJlZiktPndpbGxIYW5kbGVIb3Jpem9udGFsU2Nyb2xsRXZlbnRzKCk7CiB9CiAKIHZvaWQgV0tQ
YWdlVXBkYXRlV2Vic2l0ZVBvbGljaWVzKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1dlYnNpdGVQb2xp
Y2llc1JlZiB3ZWJzaXRlUG9saWNpZXNSZWYpCiB7Ci0gICAgYXV0byBkYXRhID0gdG9JbXBsKHdl
YnNpdGVQb2xpY2llc1JlZiktPmRhdGEoKTsKKyAgICBhdXRvIGRhdGEgPSBXZWJLaXQ6OnRvSW1w
bCh3ZWJzaXRlUG9saWNpZXNSZWYpLT5kYXRhKCk7CiAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9N
RVNTQUdFKCFkYXRhLndlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLCAiU2V0dGluZyBXZWJzaXRl
UG9saWNpZXMuV2Vic2l0ZURhdGFTdG9yZSBpcyBvbmx5IHN1cHBvcnRlZCBkdXJpbmcgV0tGcmFt
ZVBvbGljeUxpc3RlbmVyVXNlV2l0aFBvbGljaWVzKCkuIik7Ci0gICAgdG9JbXBsKHBhZ2VSZWYp
LT51cGRhdGVXZWJzaXRlUG9saWNpZXMoV1RGTW92ZShkYXRhKSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiktPnVwZGF0ZVdlYnNpdGVQb2xpY2llcyhXVEZNb3ZlKGRhdGEpKTsKIH0KIAog
V0tTdHJpbmdSZWYgV0tQYWdlQ29weVRpdGxlKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJl
dHVybiB0b0NvcGllZEFQSSh0b0ltcGwocGFnZVJlZiktPnBhZ2VMb2FkU3RhdGUoKS50aXRsZSgp
KTsKKyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnBhZ2VM
b2FkU3RhdGUoKS50aXRsZSgpKTsKIH0KIAogV0tGcmFtZVJlZiBXS1BhZ2VHZXRNYWluRnJhbWUo
V0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChwYWdlUmVmKS0+
bWFpbkZyYW1lKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
bWFpbkZyYW1lKCkpOwogfQogCiBXS0ZyYW1lUmVmIFdLUGFnZUdldEZvY3VzZWRGcmFtZShXS1Bh
Z2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBhZ2VSZWYpLT5mb2N1
c2VkRnJhbWUoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5m
b2N1c2VkRnJhbWUoKSk7CiB9CiAKIFdLRnJhbWVSZWYgV0tQYWdlR2V0RnJhbWVTZXRMYXJnZXN0
RnJhbWUoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChwYWdl
UmVmKS0+ZnJhbWVTZXRMYXJnZXN0RnJhbWUoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6
dG9JbXBsKHBhZ2VSZWYpLT5mcmFtZVNldExhcmdlc3RGcmFtZSgpKTsKIH0KIAogdWludDY0X3Qg
V0tQYWdlR2V0UmVuZGVyVHJlZVNpemUoV0tQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIHRv
SW1wbChwYWdlKS0+cmVuZGVyVHJlZVNpemUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwo
cGFnZSktPnJlbmRlclRyZWVTaXplKCk7CiB9CiAKIFdLSW5zcGVjdG9yUmVmIFdLUGFnZUdldElu
c3BlY3RvcihXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKHBh
Z2VSZWYpLT5pbnNwZWN0b3IoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5pbnNwZWN0b3IoKSk7CiB9CiAKIGRvdWJsZSBXS1BhZ2VHZXRFc3RpbWF0ZWRQcm9n
cmVzcyhXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5l
c3RpbWF0ZWRQcm9ncmVzcygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tQYWdlQ29weVVzZXJBZ2Vu
dChXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKHBh
Z2VSZWYpLT51c2VyQWdlbnQoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9J
bXBsKHBhZ2VSZWYpLT51c2VyQWdlbnQoKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlB
cHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwYWdlUmVmKS0+YXBwbGljYXRpb25OYW1lRm9yVXNlckFn
ZW50KCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
YXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50KCkpOwogfQogCiB2b2lkIFdLUGFnZVNldEFwcGxp
Y2F0aW9uTmFtZUZvclVzZXJBZ2VudChXS1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgYXBw
bGljYXRpb25OYW1lUmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0QXBwbGljYXRpb25O
YW1lRm9yVXNlckFnZW50KHRvV1RGU3RyaW5nKGFwcGxpY2F0aW9uTmFtZVJlZikpOworICAgIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRBcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQodG9X
VEZTdHJpbmcoYXBwbGljYXRpb25OYW1lUmVmKSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLUGFnZUNv
cHlDdXN0b21Vc2VyQWdlbnQoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29w
aWVkQVBJKHRvSW1wbChwYWdlUmVmKS0+Y3VzdG9tVXNlckFnZW50KCkpOworICAgIHJldHVybiB0
b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y3VzdG9tVXNlckFnZW50KCkpOwog
fQogCiB2b2lkIFdLUGFnZVNldEN1c3RvbVVzZXJBZ2VudChXS1BhZ2VSZWYgcGFnZVJlZiwgV0tT
dHJpbmdSZWYgdXNlckFnZW50UmVmKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0Q3VzdG9t
VXNlckFnZW50KHRvV1RGU3RyaW5nKHVzZXJBZ2VudFJlZikpOworICAgIFdlYktpdDo6dG9JbXBs
KHBhZ2VSZWYpLT5zZXRDdXN0b21Vc2VyQWdlbnQodG9XVEZTdHJpbmcodXNlckFnZW50UmVmKSk7
CiB9CiAKIHZvaWQgV0tQYWdlU2V0VXNlckNvbnRlbnRFeHRlbnNpb25zRW5hYmxlZChXS1BhZ2VS
ZWYgcGFnZVJlZiwgYm9vbCBlbmFibGVkKQpAQCAtNDIyLDIyICs0MjIsMjIgQEAgdm9pZCBXS1Bh
Z2VTZXRVc2VyQ29udGVudEV4dGVuc2lvbnNFbmFibGVkKFdLUGFnZVJlZiBwYWdlUmVmLCBib29s
IGVuYWJsZWQpCiAKIGJvb2wgV0tQYWdlU3VwcG9ydHNUZXh0RW5jb2RpbmcoV0tQYWdlUmVmIHBh
Z2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+c3VwcG9ydHNUZXh0RW5jb2Rp
bmcoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnN1cHBvcnRzVGV4dEVu
Y29kaW5nKCk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLUGFnZUNvcHlDdXN0b21UZXh0RW5jb2RpbmdO
YW1lKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwo
cGFnZVJlZiktPmN1c3RvbVRleHRFbmNvZGluZ05hbWUoKSk7CisgICAgcmV0dXJuIHRvQ29waWVk
QVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jdXN0b21UZXh0RW5jb2RpbmdOYW1lKCkpOwog
fQogCiB2b2lkIFdLUGFnZVNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUoV0tQYWdlUmVmIHBhZ2VS
ZWYsIFdLU3RyaW5nUmVmIGVuY29kaW5nTmFtZVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJlZikt
PnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUodG9XVEZTdHJpbmcoZW5jb2RpbmdOYW1lUmVmKSk7
CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEN1c3RvbVRleHRFbmNvZGluZ05hbWUo
dG9XVEZTdHJpbmcoZW5jb2RpbmdOYW1lUmVmKSk7CiB9CiAKIHZvaWQgV0tQYWdlVGVybWluYXRl
KFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIFJlZjxXZWJQcm9jZXNzUHJveHk+IHByb3RlY3Rl
ZFByb2Nlc3NQcm94eSh0b0ltcGwocGFnZVJlZiktPnByb2Nlc3MoKSk7CisgICAgUmVmPFdlYlBy
b2Nlc3NQcm94eT4gcHJvdGVjdGVkUHJvY2Vzc1Byb3h5KFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYp
LT5wcm9jZXNzKCkpOwogICAgIHByb3RlY3RlZFByb2Nlc3NQcm94eS0+cmVxdWVzdFRlcm1pbmF0
aW9uKFByb2Nlc3NUZXJtaW5hdGlvblJlYXNvbjo6UmVxdWVzdGVkQnlDbGllbnQpOwogfQogCkBA
IC00NTksNyArNDU5LDcgQEAgV0tUeXBlUmVmIFdLUGFnZUNvcHlTZXNzaW9uU3RhdGUoV0tQYWdl
UmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdLUGFnZVNlc3Npb24KICAgICBib29sIHNob3Vs
ZFJldHVybkRhdGEgPSAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihjb250ZXh0KSAmIDEp
OwogICAgIGNvbnRleHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oY29udGV4dCkgJiB+MSk7CiAKLSAgICBhdXRvIHNlc3Npb25TdGF0ZSA9IHRv
SW1wbChwYWdlUmVmKS0+c2Vzc2lvblN0YXRlKFtwYWdlUmVmLCBjb250ZXh0LCBmaWx0ZXJdKFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pIHsKKyAgICBhdXRvIHNlc3Npb25TdGF0ZSA9IFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXNzaW9uU3RhdGUoW3BhZ2VSZWYsIGNvbnRleHQsIGZp
bHRlcl0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkgewogICAgICAgICBpZiAoZmlsdGVy
KSB7CiAgICAgICAgICAgICBpZiAoIWZpbHRlcihwYWdlUmVmLCBXS1BhZ2VHZXRTZXNzaW9uQmFj
a0ZvcndhcmRMaXN0SXRlbVZhbHVlVHlwZSgpLCB0b0FQSSgmaXRlbSksIGNvbnRleHQpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ4MiwxNiArNDgyLDE2IEBAIHN0YXRpYyB2
b2lkIHJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1R5cGVSZWYg
c2Vzc2lvblN0YXRlUmVmCiAgICAgU2Vzc2lvblN0YXRlIHNlc3Npb25TdGF0ZTsKIAogICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFNhZmFyaS4g
UmVtb3ZlIGl0IG9uY2UgU2FmYXJpIG5vIGxvbmdlciBkZXBlbmRzIG9uIGl0LgotICAgIGlmICh0
b0ltcGwoc2Vzc2lvblN0YXRlUmVmKS0+dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpEYXRh
KSB7Ci0gICAgICAgIGlmICghZGVjb2RlTGVnYWN5U2Vzc2lvblN0YXRlKHRvSW1wbChzdGF0aWNf
Y2FzdDxXS0RhdGFSZWY+KHNlc3Npb25TdGF0ZVJlZikpLT5ieXRlcygpLCB0b0ltcGwoc3RhdGlj
X2Nhc3Q8V0tEYXRhUmVmPihzZXNzaW9uU3RhdGVSZWYpKS0+c2l6ZSgpLCBzZXNzaW9uU3RhdGUp
KQorICAgIGlmIChXZWJLaXQ6OnRvSW1wbChzZXNzaW9uU3RhdGVSZWYpLT50eXBlKCkgPT0gQVBJ
OjpPYmplY3Q6OlR5cGU6OkRhdGEpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVMZWdhY3lTZXNzaW9u
U3RhdGUoV2ViS2l0Ojp0b0ltcGwoc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPihzZXNzaW9uU3RhdGVS
ZWYpKS0+Ynl0ZXMoKSwgV2ViS2l0Ojp0b0ltcGwoc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPihzZXNz
aW9uU3RhdGVSZWYpKS0+c2l6ZSgpLCBzZXNzaW9uU3RhdGUpKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVCh0b0ltcGwoc2Vzc2lvblN0YXRlUmVmKS0+
dHlwZSgpID09IEFQSTo6T2JqZWN0OjpUeXBlOjpTZXNzaW9uU3RhdGUpOworICAgICAgICBBU1NF
UlQoV2ViS2l0Ojp0b0ltcGwoc2Vzc2lvblN0YXRlUmVmKS0+dHlwZSgpID09IEFQSTo6T2JqZWN0
OjpUeXBlOjpTZXNzaW9uU3RhdGUpOwogCi0gICAgICAgIHNlc3Npb25TdGF0ZSA9IHRvSW1wbChz
dGF0aWNfY2FzdDxXS1Nlc3Npb25TdGF0ZVJlZj4oc2Vzc2lvblN0YXRlUmVmKSktPnNlc3Npb25T
dGF0ZSgpOworICAgICAgICBzZXNzaW9uU3RhdGUgPSBXZWJLaXQ6OnRvSW1wbChzdGF0aWNfY2Fz
dDxXS1Nlc3Npb25TdGF0ZVJlZj4oc2Vzc2lvblN0YXRlUmVmKSktPnNlc3Npb25TdGF0ZSgpOwog
ICAgIH0KIAotICAgIHRvSW1wbChwYWdlUmVmKS0+cmVzdG9yZUZyb21TZXNzaW9uU3RhdGUoV1RG
TW92ZShzZXNzaW9uU3RhdGUpLCBuYXZpZ2F0ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdURk1vdmUoc2Vzc2lvblN0YXRlKSwgbmF2aWdh
dGUpOwogfQogCiB2b2lkIFdLUGFnZVJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlKFdLUGFnZVJlZiBw
YWdlUmVmLCBXS1R5cGVSZWYgc2Vzc2lvblN0YXRlUmVmKQpAQCAtNTA2LDE4NyArNTA2LDE4NyBA
QCB2b2lkIFdLUGFnZVJlc3RvcmVGcm9tU2Vzc2lvblN0YXRlV2l0aG91dE5hdmlnYXRpb24oV0tQ
YWdlUmVmIHBhZ2VSZWYsIFdLVHlwZVJlZgogCiBkb3VibGUgV0tQYWdlR2V0VGV4dFpvb21GYWN0
b3IoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+dGV4
dFpvb21GYWN0b3IoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnRleHRa
b29tRmFjdG9yKCk7CiB9CiAKIGRvdWJsZSBXS1BhZ2VHZXRCYWNraW5nU2NhbGVGYWN0b3IoV0tQ
YWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+ZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmRldmljZVNj
YWxlRmFjdG9yKCk7CiB9CiAKIHZvaWQgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9y
KFdLUGFnZVJlZiBwYWdlUmVmLCBkb3VibGUgY3VzdG9tU2NhbGVGYWN0b3IpCiB7Ci0gICAgdG9J
bXBsKHBhZ2VSZWYpLT5zZXRDdXN0b21EZXZpY2VTY2FsZUZhY3RvcihjdXN0b21TY2FsZUZhY3Rv
cik7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEN1c3RvbURldmljZVNjYWxlRmFj
dG9yKGN1c3RvbVNjYWxlRmFjdG9yKTsKIH0KIAogYm9vbCBXS1BhZ2VTdXBwb3J0c1RleHRab29t
KFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPnN1cHBv
cnRzVGV4dFpvb20oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnN1cHBv
cnRzVGV4dFpvb20oKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRUZXh0Wm9vbUZhY3RvcihXS1BhZ2VS
ZWYgcGFnZVJlZiwgZG91YmxlIHpvb21GYWN0b3IpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5z
ZXRUZXh0Wm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KS0+c2V0VGV4dFpvb21GYWN0b3Ioem9vbUZhY3Rvcik7CiB9CiAKIGRvdWJsZSBXS1BhZ2VHZXRQ
YWdlWm9vbUZhY3RvcihXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBh
Z2VSZWYpLT5wYWdlWm9vbUZhY3RvcigpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdl
UmVmKS0+cGFnZVpvb21GYWN0b3IoKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRQYWdlWm9vbUZhY3Rv
cihXS1BhZ2VSZWYgcGFnZVJlZiwgZG91YmxlIHpvb21GYWN0b3IpCiB7Ci0gICAgdG9JbXBsKHBh
Z2VSZWYpLT5zZXRQYWdlWm9vbUZhY3Rvcih6b29tRmFjdG9yKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChwYWdlUmVmKS0+c2V0UGFnZVpvb21GYWN0b3Ioem9vbUZhY3Rvcik7CiB9CiAKIHZvaWQgV0tQ
YWdlU2V0UGFnZUFuZFRleHRab29tRmFjdG9ycyhXS1BhZ2VSZWYgcGFnZVJlZiwgZG91YmxlIHBh
Z2Vab29tRmFjdG9yLCBkb3VibGUgdGV4dFpvb21GYWN0b3IpCiB7Ci0gICAgdG9JbXBsKHBhZ2VS
ZWYpLT5zZXRQYWdlQW5kVGV4dFpvb21GYWN0b3JzKHBhZ2Vab29tRmFjdG9yLCB0ZXh0Wm9vbUZh
Y3Rvcik7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFBhZ2VBbmRUZXh0Wm9vbUZh
Y3RvcnMocGFnZVpvb21GYWN0b3IsIHRleHRab29tRmFjdG9yKTsKIH0KIAogdm9pZCBXS1BhZ2VT
ZXRTY2FsZUZhY3RvcihXS1BhZ2VSZWYgcGFnZVJlZiwgZG91YmxlIHNjYWxlLCBXS1BvaW50IG9y
aWdpbikKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnNjYWxlUGFnZShzY2FsZSwgdG9JbnRQb2lu
dChvcmlnaW4pKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2NhbGVQYWdlKHNjYWxl
LCB0b0ludFBvaW50KG9yaWdpbikpOwogfQogCiBkb3VibGUgV0tQYWdlR2V0U2NhbGVGYWN0b3Io
V0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+cGFnZVNj
YWxlRmFjdG9yKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5wYWdlU2Nh
bGVGYWN0b3IoKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRVc2VGaXhlZExheW91dChXS1BhZ2VSZWYg
cGFnZVJlZiwgYm9vbCBmaXhlZCkKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnNldFVzZUZpeGVk
TGF5b3V0KGZpeGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0VXNlRml4ZWRM
YXlvdXQoZml4ZWQpOwogfQogCiB2b2lkIFdLUGFnZVNldEZpeGVkTGF5b3V0U2l6ZShXS1BhZ2VS
ZWYgcGFnZVJlZiwgV0tTaXplIHNpemUpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRGaXhl
ZExheW91dFNpemUodG9JbnRTaXplKHNpemUpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVm
KS0+c2V0Rml4ZWRMYXlvdXRTaXplKHRvSW50U2l6ZShzaXplKSk7CiB9CiAKIGJvb2wgV0tQYWdl
VXNlRml4ZWRMYXlvdXQoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChw
YWdlUmVmKS0+dXNlRml4ZWRMYXlvdXQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFn
ZVJlZiktPnVzZUZpeGVkTGF5b3V0KCk7CiB9CiAKIFdLU2l6ZSBXS1BhZ2VGaXhlZExheW91dFNp
emUoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKHRvSW1wbChwYWdlUmVm
KS0+Zml4ZWRMYXlvdXRTaXplKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+Zml4ZWRMYXlvdXRTaXplKCkpOwogfQogCiB2b2lkIFdLUGFnZUxpc3RlbkZvckxh
eW91dE1pbGVzdG9uZXMoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLTGF5b3V0TWlsZXN0b25lcyBtaWxl
c3RvbmVzKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+bGlzdGVuRm9yTGF5b3V0TWlsZXN0b25l
cyh0b0xheW91dE1pbGVzdG9uZXMobWlsZXN0b25lcykpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5saXN0ZW5Gb3JMYXlvdXRNaWxlc3RvbmVzKHRvTGF5b3V0TWlsZXN0b25lcyhtaWxl
c3RvbmVzKSk7CiB9CiAKIGJvb2wgV0tQYWdlSGFzSG9yaXpvbnRhbFNjcm9sbGJhcihXS1BhZ2VS
ZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5oYXNIb3Jpem9udGFs
U2Nyb2xsYmFyKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5oYXNIb3Jp
em9udGFsU2Nyb2xsYmFyKCk7CiB9CiAKIGJvb2wgV0tQYWdlSGFzVmVydGljYWxTY3JvbGxiYXIo
V0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+aGFzVmVy
dGljYWxTY3JvbGxiYXIoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmhh
c1ZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAKIHZvaWQgV0tQYWdlU2V0U3VwcHJlc3NTY3JvbGxi
YXJBbmltYXRpb25zKFdLUGFnZVJlZiBwYWdlUmVmLCBib29sIHN1cHByZXNzQW5pbWF0aW9ucykK
IHsKLSAgICB0b0ltcGwocGFnZVJlZiktPnNldFN1cHByZXNzU2Nyb2xsYmFyQW5pbWF0aW9ucyhz
dXBwcmVzc0FuaW1hdGlvbnMpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRTdXBw
cmVzc1Njcm9sbGJhckFuaW1hdGlvbnMoc3VwcHJlc3NBbmltYXRpb25zKTsKIH0KIAogYm9vbCBX
S1BhZ2VBcmVTY3JvbGxiYXJBbmltYXRpb25zU3VwcHJlc3NlZChXS1BhZ2VSZWYgcGFnZVJlZikK
IHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5hcmVTY3JvbGxiYXJBbmltYXRpb25zU3Vw
cHJlc3NlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+YXJlU2Nyb2xs
YmFyQW5pbWF0aW9uc1N1cHByZXNzZWQoKTsKIH0KIAogYm9vbCBXS1BhZ2VJc1Bpbm5lZFRvTGVm
dFNpZGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+
aXNQaW5uZWRUb0xlZnRTaWRlKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYp
LT5pc1Bpbm5lZFRvTGVmdFNpZGUoKTsKIH0KIAogYm9vbCBXS1BhZ2VJc1Bpbm5lZFRvUmlnaHRT
aWRlKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPmlz
UGlubmVkVG9SaWdodFNpZGUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
PmlzUGlubmVkVG9SaWdodFNpZGUoKTsKIH0KIAogYm9vbCBXS1BhZ2VJc1Bpbm5lZFRvVG9wU2lk
ZShXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5pc1Bp
bm5lZFRvVG9wU2lkZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aXNQ
aW5uZWRUb1RvcFNpZGUoKTsKIH0KIAogYm9vbCBXS1BhZ2VJc1Bpbm5lZFRvQm90dG9tU2lkZShX
S1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5pc1Bpbm5l
ZFRvQm90dG9tU2lkZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aXNQ
aW5uZWRUb0JvdHRvbVNpZGUoKTsKIH0KIAogYm9vbCBXS1BhZ2VSdWJiZXJCYW5kc0F0TGVmdChX
S1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5ydWJiZXJC
YW5kc0F0TGVmdCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cnViYmVy
QmFuZHNBdExlZnQoKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRSdWJiZXJCYW5kc0F0TGVmdChXS1Bh
Z2VSZWYgcGFnZVJlZiwgYm9vbCBydWJiZXJCYW5kc0F0TGVmdCkKIHsKLSAgICB0b0ltcGwocGFn
ZVJlZiktPnNldFJ1YmJlckJhbmRzQXRMZWZ0KHJ1YmJlckJhbmRzQXRMZWZ0KTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0UnViYmVyQmFuZHNBdExlZnQocnViYmVyQmFuZHNBdExl
ZnQpOwogfQogCiBib29sIFdLUGFnZVJ1YmJlckJhbmRzQXRSaWdodChXS1BhZ2VSZWYgcGFnZVJl
ZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5ydWJiZXJCYW5kc0F0UmlnaHQoKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnJ1YmJlckJhbmRzQXRSaWdodCgp
OwogfQogCiB2b2lkIFdLUGFnZVNldFJ1YmJlckJhbmRzQXRSaWdodChXS1BhZ2VSZWYgcGFnZVJl
ZiwgYm9vbCBydWJiZXJCYW5kc0F0UmlnaHQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRS
dWJiZXJCYW5kc0F0UmlnaHQocnViYmVyQmFuZHNBdFJpZ2h0KTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChwYWdlUmVmKS0+c2V0UnViYmVyQmFuZHNBdFJpZ2h0KHJ1YmJlckJhbmRzQXRSaWdodCk7CiB9
CiAKIGJvb2wgV0tQYWdlUnViYmVyQmFuZHNBdFRvcChXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5ydWJiZXJCYW5kc0F0VG9wKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5ydWJiZXJCYW5kc0F0VG9wKCk7CiB9CiAKIHZvaWQg
V0tQYWdlU2V0UnViYmVyQmFuZHNBdFRvcChXS1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCBydWJiZXJC
YW5kc0F0VG9wKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0UnViYmVyQmFuZHNBdFRvcChy
dWJiZXJCYW5kc0F0VG9wKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0UnViYmVy
QmFuZHNBdFRvcChydWJiZXJCYW5kc0F0VG9wKTsKIH0KIAogYm9vbCBXS1BhZ2VSdWJiZXJCYW5k
c0F0Qm90dG9tKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJl
ZiktPnJ1YmJlckJhbmRzQXRCb3R0b20oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFn
ZVJlZiktPnJ1YmJlckJhbmRzQXRCb3R0b20oKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRSdWJiZXJC
YW5kc0F0Qm90dG9tKFdLUGFnZVJlZiBwYWdlUmVmLCBib29sIHJ1YmJlckJhbmRzQXRCb3R0b20p
CiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRSdWJiZXJCYW5kc0F0Qm90dG9tKHJ1YmJlckJh
bmRzQXRCb3R0b20pOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRSdWJiZXJCYW5k
c0F0Qm90dG9tKHJ1YmJlckJhbmRzQXRCb3R0b20pOwogfQogCiBib29sIFdLUGFnZVZlcnRpY2Fs
UnViYmVyQmFuZGluZ0lzRW5hYmxlZChXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4g
dG9JbXBsKHBhZ2VSZWYpLT52ZXJ0aWNhbFJ1YmJlckJhbmRpbmdJc0VuYWJsZWQoKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnZlcnRpY2FsUnViYmVyQmFuZGluZ0lzRW5h
YmxlZCgpOwogfQogCiB2b2lkIFdLUGFnZVNldEVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyhX
S1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCBlbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRpbmcpCiB7Ci0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRFbmFibGVWZXJ0aWNhbFJ1YmJlckJhbmRpbmcoZW5hYmxl
VmVydGljYWxSdWJiZXJCYW5kaW5nKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0
RW5hYmxlVmVydGljYWxSdWJiZXJCYW5kaW5nKGVuYWJsZVZlcnRpY2FsUnViYmVyQmFuZGluZyk7
CiB9CiAKIGJvb2wgV0tQYWdlSG9yaXpvbnRhbFJ1YmJlckJhbmRpbmdJc0VuYWJsZWQoV0tQYWdl
UmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+aG9yaXpvbnRhbFJ1
YmJlckJhbmRpbmdJc0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPmhvcml6b250YWxSdWJiZXJCYW5kaW5nSXNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQYWdl
U2V0RW5hYmxlSG9yaXpvbnRhbFJ1YmJlckJhbmRpbmcoV0tQYWdlUmVmIHBhZ2VSZWYsIGJvb2wg
ZW5hYmxlSG9yaXpvbnRhbFJ1YmJlckJhbmRpbmcpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5z
ZXRFbmFibGVIb3Jpem9udGFsUnViYmVyQmFuZGluZyhlbmFibGVIb3Jpem9udGFsUnViYmVyQmFu
ZGluZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEVuYWJsZUhvcml6b250YWxS
dWJiZXJCYW5kaW5nKGVuYWJsZUhvcml6b250YWxSdWJiZXJCYW5kaW5nKTsKIH0KIAogdm9pZCBX
S1BhZ2VTZXRCYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoV0tQYWdlUmVmIHBhZ2VSZWYsIGJv
b2wgYmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+
c2V0QmFja2dyb3VuZEV4dGVuZHNCZXlvbmRQYWdlKGJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFn
ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEJhY2tncm91bmRFeHRlbmRzQmV5
b25kUGFnZShiYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UpOwogfQogCiBib29sIFdLUGFnZUJh
Y2tncm91bmRFeHRlbmRzQmV5b25kUGFnZShXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKHBhZ2VSZWYpLT5iYWNrZ3JvdW5kRXh0ZW5kc0JleW9uZFBhZ2UoKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmJhY2tncm91bmRFeHRlbmRzQmV5b25kUGFn
ZSgpOwogfQogCiB2b2lkIFdLUGFnZVNldFBhZ2luYXRpb25Nb2RlKFdLUGFnZVJlZiBwYWdlUmVm
LCBXS1BhZ2luYXRpb25Nb2RlIHBhZ2luYXRpb25Nb2RlKQpAQCAtNzExLDEyICs3MTEsMTIgQEAg
dm9pZCBXS1BhZ2VTZXRQYWdpbmF0aW9uTW9kZShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tQYWdpbmF0
aW9uTW9kZSBwYWdpbmF0aW9uTW9kZSkKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0UGFnaW5hdGlvbk1vZGUobW9kZSk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFBhZ2luYXRpb25Nb2RlKG1vZGUpOwogfQogCiBX
S1BhZ2luYXRpb25Nb2RlIFdLUGFnZUdldFBhZ2luYXRpb25Nb2RlKFdLUGFnZVJlZiBwYWdlUmVm
KQogewotICAgIHN3aXRjaCAodG9JbXBsKHBhZ2VSZWYpLT5wYWdpbmF0aW9uTW9kZSgpKSB7Cisg
ICAgc3dpdGNoIChXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cGFnaW5hdGlvbk1vZGUoKSkgewog
ICAgIGNhc2UgUGFnaW5hdGlvbjo6VW5wYWdpbmF0ZWQ6CiAgICAgICAgIHJldHVybiBrV0tQYWdp
bmF0aW9uTW9kZVVucGFnaW5hdGVkOwogICAgIGNhc2UgUGFnaW5hdGlvbjo6TGVmdFRvUmlnaHRQ
YWdpbmF0ZWQ6CkBAIC03MzUsMTAyICs3MzUsMTAyIEBAIFdLUGFnaW5hdGlvbk1vZGUgV0tQYWdl
R2V0UGFnaW5hdGlvbk1vZGUoV0tQYWdlUmVmIHBhZ2VSZWYpCiAKIHZvaWQgV0tQYWdlU2V0UGFn
aW5hdGlvbkJlaGF2ZXNMaWtlQ29sdW1ucyhXS1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCBiZWhhdmVz
TGlrZUNvbHVtbnMpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRQYWdpbmF0aW9uQmVoYXZl
c0xpa2VDb2x1bW5zKGJlaGF2ZXNMaWtlQ29sdW1ucyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFn
ZVJlZiktPnNldFBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoYmVoYXZlc0xpa2VDb2x1bW5z
KTsKIH0KIAogYm9vbCBXS1BhZ2VHZXRQYWdpbmF0aW9uQmVoYXZlc0xpa2VDb2x1bW5zKFdLUGFn
ZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZVJlZiktPnBhZ2luYXRpb25C
ZWhhdmVzTGlrZUNvbHVtbnMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJlZikt
PnBhZ2luYXRpb25CZWhhdmVzTGlrZUNvbHVtbnMoKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRQYWdl
TGVuZ3RoKFdLUGFnZVJlZiBwYWdlUmVmLCBkb3VibGUgcGFnZUxlbmd0aCkKIHsKLSAgICB0b0lt
cGwocGFnZVJlZiktPnNldFBhZ2VMZW5ndGgocGFnZUxlbmd0aCk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocGFnZVJlZiktPnNldFBhZ2VMZW5ndGgocGFnZUxlbmd0aCk7CiB9CiAKIGRvdWJsZSBXS1Bh
Z2VHZXRQYWdlTGVuZ3RoKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0b0ltcGwo
cGFnZVJlZiktPnBhZ2VMZW5ndGgoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZVJl
ZiktPnBhZ2VMZW5ndGgoKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRHYXBCZXR3ZWVuUGFnZXMoV0tQ
YWdlUmVmIHBhZ2VSZWYsIGRvdWJsZSBnYXApCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRH
YXBCZXR3ZWVuUGFnZXMoZ2FwKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0R2Fw
QmV0d2VlblBhZ2VzKGdhcCk7CiB9CiAKIGRvdWJsZSBXS1BhZ2VHZXRHYXBCZXR3ZWVuUGFnZXMo
V0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+Z2FwQmV0
d2VlblBhZ2VzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5nYXBCZXR3
ZWVuUGFnZXMoKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRQYWdpbmF0aW9uTGluZUdyaWRFbmFibGVk
KFdLUGFnZVJlZiBwYWdlUmVmLCBib29sIGxpbmVHcmlkRW5hYmxlZCkKIHsKLSAgICB0b0ltcGwo
cGFnZVJlZiktPnNldFBhZ2luYXRpb25MaW5lR3JpZEVuYWJsZWQobGluZUdyaWRFbmFibGVkKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0UGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxl
ZChsaW5lR3JpZEVuYWJsZWQpOwogfQogCiBib29sIFdLUGFnZUdldFBhZ2luYXRpb25MaW5lR3Jp
ZEVuYWJsZWQoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVm
KS0+cGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChwYWdlUmVmKS0+cGFnaW5hdGlvbkxpbmVHcmlkRW5hYmxlZCgpOwogfQogCiB1bnNpZ25lZCBX
S1BhZ2VHZXRQYWdlQ291bnQoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChwYWdlUmVmKS0+cGFnZUNvdW50KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VS
ZWYpLT5wYWdlQ291bnQoKTsKIH0KIAogYm9vbCBXS1BhZ2VDYW5EZWxldGUoV0tQYWdlUmVmIHBh
Z2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwYWdlUmVmKS0+Y2FuRGVsZXRlKCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jYW5EZWxldGUoKTsKIH0KIAogYm9vbCBX
S1BhZ2VIYXNTZWxlY3RlZFJhbmdlKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwocGFnZVJlZiktPmhhc1NlbGVjdGVkUmFuZ2UoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwocGFnZVJlZiktPmhhc1NlbGVjdGVkUmFuZ2UoKTsKIH0KIAogYm9vbCBXS1BhZ2VJc0Nv
bnRlbnRFZGl0YWJsZShXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBh
Z2VSZWYpLT5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRNYWludGFp
bnNJbmFjdGl2ZVNlbGVjdGlvbihXS1BhZ2VSZWYgcGFnZVJlZiwgYm9vbCBuZXdWYWx1ZSkKIHsK
LSAgICByZXR1cm4gdG9JbXBsKHBhZ2VSZWYpLT5zZXRNYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlv
bihuZXdWYWx1ZSk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRNYWlu
dGFpbnNJbmFjdGl2ZVNlbGVjdGlvbihuZXdWYWx1ZSk7CiB9CiAKIHZvaWQgV0tQYWdlQ2VudGVy
U2VsZWN0aW9uSW5WaXNpYmxlQXJlYShXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICByZXR1cm4g
dG9JbXBsKHBhZ2VSZWYpLT5jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVhKCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jZW50ZXJTZWxlY3Rpb25JblZpc2libGVBcmVh
KCk7CiB9CiAKIHZvaWQgV0tQYWdlRmluZFN0cmluZ01hdGNoZXMoV0tQYWdlUmVmIHBhZ2VSZWYs
IFdLU3RyaW5nUmVmIHN0cmluZywgV0tGaW5kT3B0aW9ucyBvcHRpb25zLCB1bnNpZ25lZCBtYXhN
YXRjaENvdW50KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+ZmluZFN0cmluZ01hdGNoZXModG9J
bXBsKHN0cmluZyktPnN0cmluZygpLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhNYXRjaENv
dW50KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+ZmluZFN0cmluZ01hdGNoZXMoV2Vi
S2l0Ojp0b0ltcGwoc3RyaW5nKS0+c3RyaW5nKCksIHRvRmluZE9wdGlvbnMob3B0aW9ucyksIG1h
eE1hdGNoQ291bnQpOwogfQogCiB2b2lkIFdLUGFnZUdldEltYWdlRm9yRmluZE1hdGNoKFdLUGFn
ZVJlZiBwYWdlUmVmLCBpbnQzMl90IG1hdGNoSW5kZXgpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYp
LT5nZXRJbWFnZUZvckZpbmRNYXRjaChtYXRjaEluZGV4KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChw
YWdlUmVmKS0+Z2V0SW1hZ2VGb3JGaW5kTWF0Y2gobWF0Y2hJbmRleCk7CiB9CiAKIHZvaWQgV0tQ
YWdlU2VsZWN0RmluZE1hdGNoKFdLUGFnZVJlZiBwYWdlUmVmLCBpbnQzMl90IG1hdGNoSW5kZXgp
CiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZWxlY3RGaW5kTWF0Y2gobWF0Y2hJbmRleCk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNlbGVjdEZpbmRNYXRjaChtYXRjaEluZGV4KTsK
IH0KIAogdm9pZCBXS1BhZ2VGaW5kU3RyaW5nKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1Jl
ZiBzdHJpbmcsIFdLRmluZE9wdGlvbnMgb3B0aW9ucywgdW5zaWduZWQgbWF4TWF0Y2hDb3VudCkK
IHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmZpbmRTdHJpbmcodG9JbXBsKHN0cmluZyktPnN0cmlu
ZygpLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhNYXRjaENvdW50KTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChwYWdlUmVmKS0+ZmluZFN0cmluZyhXZWJLaXQ6OnRvSW1wbChzdHJpbmcpLT5zdHJp
bmcoKSwgdG9GaW5kT3B0aW9ucyhvcHRpb25zKSwgbWF4TWF0Y2hDb3VudCk7CiB9CiAKIHZvaWQg
V0tQYWdlSGlkZUZpbmRVSShXS1BhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICB0b0ltcGwocGFnZVJl
ZiktPmhpZGVGaW5kVUkoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+aGlkZUZpbmRV
SSgpOwogfQogCiB2b2lkIFdLUGFnZUNvdW50U3RyaW5nTWF0Y2hlcyhXS1BhZ2VSZWYgcGFnZVJl
ZiwgV0tTdHJpbmdSZWYgc3RyaW5nLCBXS0ZpbmRPcHRpb25zIG9wdGlvbnMsIHVuc2lnbmVkIG1h
eE1hdGNoQ291bnQpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jb3VudFN0cmluZ01hdGNoZXMo
dG9JbXBsKHN0cmluZyktPnN0cmluZygpLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMpLCBtYXhNYXRj
aENvdW50KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Y291bnRTdHJpbmdNYXRjaGVz
KFdlYktpdDo6dG9JbXBsKHN0cmluZyktPnN0cmluZygpLCB0b0ZpbmRPcHRpb25zKG9wdGlvbnMp
LCBtYXhNYXRjaENvdW50KTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVDbGll
bnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUNvbnRleHRNZW51Q2xpZW50QmFzZSog
d2tDbGllbnQpCkBAIC04ODEsNyArODgxLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlQ29udGV4dE1l
bnVDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUNvbnRleHRNZW51Q2wKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG1fY2xpZW50LmdldENvbnRleHRNZW51
RnJvbVByb3Bvc2VkTWVudV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwKHRvQVBJKCZwYWdlKSwgdG9B
UEkoQVBJOjpBcnJheTo6Y3JlYXRlKFdURk1vdmUocHJvcG9zZWRNZW51SXRlbXMpKS5wdHIoKSks
ICZuZXdNZW51LCB0b0FQSSh1c2VyRGF0YSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CiAK
LSAgICAgICAgICAgIFJlZlB0cjxBUEk6OkFycmF5PiBhcnJheSA9IGFkb3B0UmVmKHRvSW1wbChu
ZXdNZW51KSk7CisgICAgICAgICAgICBSZWZQdHI8QVBJOjpBcnJheT4gYXJyYXkgPSBhZG9wdFJl
ZihXZWJLaXQ6OnRvSW1wbChuZXdNZW51KSk7CiAKICAgICAgICAgICAgIFZlY3RvcjxSZWY8V2Vi
Q29udGV4dE1lbnVJdGVtPj4gY3VzdG9tTWVudTsKICAgICAgICAgICAgIHNpemVfdCBuZXdTaXpl
ID0gYXJyYXkgPyBhcnJheS0+c2l6ZSgpIDogMDsKQEAgLTkzNCw3ICs5MzQsNyBAQCB2b2lkIFdL
UGFnZVNldFBhZ2VDb250ZXh0TWVudUNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQ
YWdlQ29udGV4dE1lbnVDbAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHRvSW1wbChwYWdlUmVm
KS0+c2V0Q29udGV4dE1lbnVDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxDb250ZXh0TWVudUNsaWVu
dD4od2tDbGllbnQpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0Q29udGV4dE1l
bnVDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxDb250ZXh0TWVudUNsaWVudD4od2tDbGllbnQpKTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VSZWYpOwogICAgIFVOVVNFRF9QQVJBTSh3a0Ns
aWVudCk7CkBAIC05NDMsNyArOTQzLDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlQ29udGV4dE1lbnVD
bGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZUNvbnRleHRNZW51Q2wKIAogdm9p
ZCBXS1BhZ2VTZXRQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYs
IGNvbnN0IFdLUGFnZURpYWdub3N0aWNMb2dnaW5nQ2xpZW50QmFzZSogd2tDbGllbnQpCiB7Ci0g
ICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXREaWFnbm9zdGljTG9nZ2luZ0NsaWVudChzdGQ6Om1ha2Vf
dW5pcXVlPFdlYlBhZ2VEaWFnbm9zdGljTG9nZ2luZ0NsaWVudD4od2tDbGllbnQpKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQoc3RkOjpt
YWtlX3VuaXF1ZTxXZWJQYWdlRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ+KHdrQ2xpZW50KSk7CiB9
CiAKIHZvaWQgV0tQYWdlU2V0UGFnZUZpbmRDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0
IFdLUGFnZUZpbmRDbGllbnRCYXNlKiB3a0NsaWVudCkKQEAgLTk4MSw3ICs5ODEsNyBAQCB2b2lk
IFdLUGFnZVNldFBhZ2VGaW5kQ2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VG
aW5kQ2xpZW50QmFzZSogd2tDbAogICAgICAgICB9CiAgICAgfTsKIAotICAgIHRvSW1wbChwYWdl
UmVmKS0+c2V0RmluZENsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEZpbmRDbGllbnQ+KHdrQ2xpZW50
KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEZpbmRDbGllbnQoc3RkOjptYWtl
X3VuaXF1ZTxGaW5kQ2xpZW50Pih3a0NsaWVudCkpOwogfQogCiB2b2lkIFdLUGFnZVNldFBhZ2VG
aW5kTWF0Y2hlc0NsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlRmluZE1hdGNo
ZXNDbGllbnRCYXNlKiB3a0NsaWVudCkKQEAgLTEwMjQsMTcgKzEwMjQsMTcgQEAgdm9pZCBXS1Bh
Z2VTZXRQYWdlRmluZE1hdGNoZXNDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFn
ZUZpbmRNYXRjaGVzQ2wKICAgICAgICAgfQogICAgIH07CiAKLSAgICB0b0ltcGwocGFnZVJlZikt
PnNldEZpbmRNYXRjaGVzQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8RmluZE1hdGNoZXNDbGllbnQ+
KHdrQ2xpZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldEZpbmRNYXRjaGVz
Q2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8RmluZE1hdGNoZXNDbGllbnQ+KHdrQ2xpZW50KSk7CiB9
CiAKIHZvaWQgV0tQYWdlU2V0UGFnZUluamVjdGVkQnVuZGxlQ2xpZW50KFdLUGFnZVJlZiBwYWdl
UmVmLCBjb25zdCBXS1BhZ2VJbmplY3RlZEJ1bmRsZUNsaWVudEJhc2UqIHdrQ2xpZW50KQogewot
ICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQod2tDbGllbnQpOwor
ICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRJbmplY3RlZEJ1bmRsZUNsaWVudCh3a0Ns
aWVudCk7CiB9CiAKIHZvaWQgV0tQYWdlU2V0UGFnZUZvcm1DbGllbnQoV0tQYWdlUmVmIHBhZ2VS
ZWYsIGNvbnN0IFdLUGFnZUZvcm1DbGllbnRCYXNlKiB3a0NsaWVudCkKIHsKLSAgICB0b0ltcGwo
cGFnZVJlZiktPnNldEZvcm1DbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxXZWJGb3JtQ2xpZW50Pih3
a0NsaWVudCkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5zZXRGb3JtQ2xpZW50KHN0
ZDo6bWFrZV91bmlxdWU8V2ViRm9ybUNsaWVudD4od2tDbGllbnQpKTsKIH0KIAogdm9pZCBXS1Bh
Z2VTZXRQYWdlTG9hZGVyQ2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBXS1BhZ2VMb2Fk
ZXJDbGllbnRCYXNlKiB3a0NsaWVudCkKQEAgLTExODMsNyArMTE4Myw3IEBAIHZvaWQgV0tQYWdl
U2V0UGFnZUxvYWRlckNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlTG9hZGVy
Q2xpZW50QmFzZSoKICAgICAgICAgfQogICAgIH07CiAKLSAgICBXZWJQYWdlUHJveHkqIHdlYlBh
Z2VQcm94eSA9IHRvSW1wbChwYWdlUmVmKTsKKyAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2VQcm94
eSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpOwogCiAgICAgYXV0byBsb2FkZXJDbGllbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPExvYWRlckNsaWVudD4od2tDbGllbnQpOwogCkBAIC0xMjY3LDcgKzEy
NjcsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VQb2xpY3lDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYs
IGNvbnN0IFdLUGFnZVBvbGljeUNsaWVudEJhc2UqCiAgICAgICAgIH0KICAgICB9OwogCi0gICAg
dG9JbXBsKHBhZ2VSZWYpLT5zZXRQb2xpY3lDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxQb2xpY3lD
bGllbnQ+KHdrQ2xpZW50KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnNldFBvbGlj
eUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPFBvbGljeUNsaWVudD4od2tDbGllbnQpKTsKIH0KIAog
bmFtZXNwYWNlIFdlYktpdCB7CkBAIC0xNDEyLDcgKzE0MTIsNyBAQCBXS1R5cGVJRCBXS1BhZ2VS
dW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWxSZXN1bHRMaXN0ZW5lckdldFR5cGVJRCgpCiAKIHZv
aWQgV0tQYWdlUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsUmVzdWx0TGlzdGVuZXJDYWxsKFdL
UGFnZVJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbFJlc3VsdExpc3RlbmVyUmVmIGxpc3RlbmVy
LCBib29sIHJlc3VsdCkKIHsKLSAgICB0b0ltcGwobGlzdGVuZXIpLT5jYWxsKHJlc3VsdCk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwobGlzdGVuZXIpLT5jYWxsKHJlc3VsdCk7CiB9CiAKIFdLVHlwZUlE
IFdLUGFnZVJ1bkphdmFTY3JpcHRBbGVydFJlc3VsdExpc3RlbmVyR2V0VHlwZUlEKCkKQEAgLTE0
MjIsNyArMTQyMiw3IEBAIFdLVHlwZUlEIFdLUGFnZVJ1bkphdmFTY3JpcHRBbGVydFJlc3VsdExp
c3RlbmVyR2V0VHlwZUlEKCkKIAogdm9pZCBXS1BhZ2VSdW5KYXZhU2NyaXB0QWxlcnRSZXN1bHRM
aXN0ZW5lckNhbGwoV0tQYWdlUnVuSmF2YVNjcmlwdEFsZXJ0UmVzdWx0TGlzdGVuZXJSZWYgbGlz
dGVuZXIpCiB7Ci0gICAgdG9JbXBsKGxpc3RlbmVyKS0+Y2FsbCgpOworICAgIFdlYktpdDo6dG9J
bXBsKGxpc3RlbmVyKS0+Y2FsbCgpOwogfQogCiBXS1R5cGVJRCBXS1BhZ2VSdW5KYXZhU2NyaXB0
Q29uZmlybVJlc3VsdExpc3RlbmVyR2V0VHlwZUlEKCkKQEAgLTE0MzIsNyArMTQzMiw3IEBAIFdL
VHlwZUlEIFdLUGFnZVJ1bkphdmFTY3JpcHRDb25maXJtUmVzdWx0TGlzdGVuZXJHZXRUeXBlSUQo
KQogCiB2b2lkIFdLUGFnZVJ1bkphdmFTY3JpcHRDb25maXJtUmVzdWx0TGlzdGVuZXJDYWxsKFdL
UGFnZVJ1bkphdmFTY3JpcHRDb25maXJtUmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVuZXIsIGJvb2wg
cmVzdWx0KQogewotICAgIHRvSW1wbChsaXN0ZW5lciktPmNhbGwocmVzdWx0KTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChsaXN0ZW5lciktPmNhbGwocmVzdWx0KTsKIH0KIAogV0tUeXBlSUQgV0tQYWdl
UnVuSmF2YVNjcmlwdFByb21wdFJlc3VsdExpc3RlbmVyR2V0VHlwZUlEKCkKQEAgLTE0NDIsNyAr
MTQ0Miw3IEBAIFdLVHlwZUlEIFdLUGFnZVJ1bkphdmFTY3JpcHRQcm9tcHRSZXN1bHRMaXN0ZW5l
ckdldFR5cGVJRCgpCiAKIHZvaWQgV0tQYWdlUnVuSmF2YVNjcmlwdFByb21wdFJlc3VsdExpc3Rl
bmVyQ2FsbChXS1BhZ2VSdW5KYXZhU2NyaXB0UHJvbXB0UmVzdWx0TGlzdGVuZXJSZWYgbGlzdGVu
ZXIsIFdLU3RyaW5nUmVmIHJlc3VsdCkKIHsKLSAgICB0b0ltcGwobGlzdGVuZXIpLT5jYWxsKHRv
V1RGU3RyaW5nKHJlc3VsdCkpOworICAgIFdlYktpdDo6dG9JbXBsKGxpc3RlbmVyKS0+Y2FsbCh0
b1dURlN0cmluZyhyZXN1bHQpKTsKIH0KIAogV0tUeXBlSUQgV0tQYWdlUmVxdWVzdFN0b3JhZ2VB
Y2Nlc3NDb25maXJtUmVzdWx0TGlzdGVuZXJHZXRUeXBlSUQoKQpAQCAtMTQ1Miw3ICsxNDUyLDcg
QEAgV0tUeXBlSUQgV0tQYWdlUmVxdWVzdFN0b3JhZ2VBY2Nlc3NDb25maXJtUmVzdWx0TGlzdGVu
ZXJHZXRUeXBlSUQoKQogCiB2b2lkIFdLUGFnZVJlcXVlc3RTdG9yYWdlQWNjZXNzQ29uZmlybVJl
c3VsdExpc3RlbmVyQ2FsbChXS1BhZ2VSZXF1ZXN0U3RvcmFnZUFjY2Vzc0NvbmZpcm1SZXN1bHRM
aXN0ZW5lclJlZiBsaXN0ZW5lciwgYm9vbCByZXN1bHQpCiB7Ci0gICAgdG9JbXBsKGxpc3RlbmVy
KS0+Y2FsbChyZXN1bHQpOworICAgIFdlYktpdDo6dG9JbXBsKGxpc3RlbmVyKS0+Y2FsbChyZXN1
bHQpOwogfQogCiB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwg
Y29uc3QgV0tQYWdlVUlDbGllbnRCYXNlKiB3a0NsaWVudCkKQEAgLTE0NzcsNyArMTQ3Nyw3IEBA
IHZvaWQgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KFdLUGFnZVJlZiBwYWdlUmVmLCBjb25zdCBXS1Bh
Z2VVSUNsaWVudEJhc2UqIHdrQ2xpZW50CiAKICAgICAgICAgICAgICAgICBhdXRvIGFwaVdpbmRv
d0ZlYXR1cmVzID0gQVBJOjpXaW5kb3dGZWF0dXJlczo6Y3JlYXRlKHdpbmRvd0ZlYXR1cmVzKTsK
IAotICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihhZG9wdFJlZih0b0lt
cGwobV9jbGllbnQuY3JlYXRlTmV3UGFnZSh0b0FQSSgmcGFnZSksIHRvQVBJKGNvbmZpZ3VyYXRp
b24ucHRyKCkpLCB0b0FQSShhcGlOYXZpZ2F0aW9uQWN0aW9uLnB0cigpKSwgdG9BUEkoYXBpV2lu
ZG93RmVhdHVyZXMucHRyKCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihhZG9wdFJlZihXZWJLaXQ6OnRvSW1w
bChtX2NsaWVudC5jcmVhdGVOZXdQYWdlKHRvQVBJKCZwYWdlKSwgdG9BUEkoY29uZmlndXJhdGlv
bi5wdHIoKSksIHRvQVBJKGFwaU5hdmlnYXRpb25BY3Rpb24ucHRyKCkpLCB0b0FQSShhcGlXaW5k
b3dGZWF0dXJlcy5wdHIoKSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKSk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKG1fY2xpZW50LmNyZWF0ZU5ld1BhZ2Vf
ZGVwcmVjYXRlZEZvclVzZVdpdGhWMSB8fCBtX2NsaWVudC5jcmVhdGVOZXdQYWdlX2RlcHJlY2F0
ZWRGb3JVc2VXaXRoVjApIHsKQEAgLTE1MDIsMTEgKzE1MDIsMTEgQEAgdm9pZCBXS1BhZ2VTZXRQ
YWdlVUlDbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNvbnN0IFdLUGFnZVVJQ2xpZW50QmFzZSog
d2tDbGllbnQKIAogICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudC5jcmVhdGVOZXdQYWdlX2Rl
cHJlY2F0ZWRGb3JVc2VXaXRoVjEpIHsKICAgICAgICAgICAgICAgICAgICAgUmVmPEFQSTo6VVJM
UmVxdWVzdD4gcmVxdWVzdCA9IEFQSTo6VVJMUmVxdWVzdDo6Y3JlYXRlKHJlc291cmNlUmVxdWVz
dCk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihhZG9wdFJl
Zih0b0ltcGwobV9jbGllbnQuY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYxKHRv
QVBJKCZwYWdlKSwgdG9BUEkocmVxdWVzdC5wdHIoKSksIHRvQVBJKGZlYXR1cmVzTWFwLnB0cigp
KSwgdG9BUEkobmF2aWdhdGlvbkFjdGlvbkRhdGEubW9kaWZpZXJzKSwgdG9BUEkobmF2aWdhdGlv
bkFjdGlvbkRhdGEubW91c2VCdXR0b24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoYWRvcHRSZWYoV2Vi
S2l0Ojp0b0ltcGwobV9jbGllbnQuY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYx
KHRvQVBJKCZwYWdlKSwgdG9BUEkocmVxdWVzdC5wdHIoKSksIHRvQVBJKGZlYXR1cmVzTWFwLnB0
cigpKSwgdG9BUEkobmF2aWdhdGlvbkFjdGlvbkRhdGEubW9kaWZpZXJzKSwgdG9BUEkobmF2aWdh
dGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24pLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSkp
OwogICAgICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQobV9jbGll
bnQuY3JlYXRlTmV3UGFnZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoYWRvcHRSZWYodG9JbXBsKG1fY2xpZW50LmNyZWF0
ZU5ld1BhZ2VfZGVwcmVjYXRlZEZvclVzZVdpdGhWMCh0b0FQSSgmcGFnZSksIHRvQVBJKGZlYXR1
cmVzTWFwLnB0cigpKSwgdG9BUEkobmF2aWdhdGlvbkFjdGlvbkRhdGEubW9kaWZpZXJzKSwgdG9B
UEkobmF2aWdhdGlvbkFjdGlvbkRhdGEubW91c2VCdXR0b24pLCBtX2NsaWVudC5iYXNlLmNsaWVu
dEluZm8pKSkpOworICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihhZG9w
dFJlZihXZWJLaXQ6OnRvSW1wbChtX2NsaWVudC5jcmVhdGVOZXdQYWdlX2RlcHJlY2F0ZWRGb3JV
c2VXaXRoVjAodG9BUEkoJnBhZ2UpLCB0b0FQSShmZWF0dXJlc01hcC5wdHIoKSksIHRvQVBJKG5h
dmlnYXRpb25BY3Rpb25EYXRhLm1vZGlmaWVycyksIHRvQVBJKG5hdmlnYXRpb25BY3Rpb25EYXRh
Lm1vdXNlQnV0dG9uKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkpKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIobnVsbHB0cik7CkBAIC0xNjQwLDcg
KzE2NDAsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwg
Y29uc3QgV0tQYWdlVUlDbGllbnRCYXNlKiB3a0NsaWVudAogCiAgICAgICAgICAgICBpZiAobV9j
bGllbnQucnVuSmF2YVNjcmlwdFByb21wdF9kZXByZWNhdGVkRm9yVXNlV2l0aFY1KSB7CiAgICAg
ICAgICAgICAgICAgUmVmUHRyPEFQSTo6U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luID0g
QVBJOjpTZWN1cml0eU9yaWdpbjo6Y3JlYXRlKHNlY3VyaXR5T3JpZ2luRGF0YS5wcm90b2NvbCwg
c2VjdXJpdHlPcmlnaW5EYXRhLmhvc3QsIHNlY3VyaXR5T3JpZ2luRGF0YS5wb3J0KTsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IHN0cmluZyA9IGFkb3B0UmVmKHRvSW1wbCht
X2NsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjUodG9BUEko
cGFnZSksIHRvQVBJKG1lc3NhZ2UuaW1wbCgpKSwgdG9BUEkoZGVmYXVsdFZhbHVlLmltcGwoKSks
IHRvQVBJKGZyYW1lKSwgdG9BUEkoc2VjdXJpdHlPcmlnaW4uZ2V0KCkpLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pKSk7CisgICAgICAgICAgICAgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBzdHJp
bmcgPSBhZG9wdFJlZihXZWJLaXQ6OnRvSW1wbChtX2NsaWVudC5ydW5KYXZhU2NyaXB0UHJvbXB0
X2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjUodG9BUEkocGFnZSksIHRvQVBJKG1lc3NhZ2UuaW1wbCgp
KSwgdG9BUEkoZGVmYXVsdFZhbHVlLmltcGwoKSksIHRvQVBJKGZyYW1lKSwgdG9BUEkoc2VjdXJp
dHlPcmlnaW4uZ2V0KCkpLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0cmluZykKICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoc3RyaW5nLT5zdHJpbmcoKSk7CkBAIC0xNjUwLDcgKzE2NTAsNyBA
QCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQ
YWdlVUlDbGllbnRCYXNlKiB3a0NsaWVudAogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBpZiAobV9jbGllbnQucnVuSmF2YVNjcmlwdFByb21wdF9kZXByZWNhdGVkRm9y
VXNlV2l0aFYwKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBzdHJpbmcg
PSBhZG9wdFJlZih0b0ltcGwobV9jbGllbnQucnVuSmF2YVNjcmlwdFByb21wdF9kZXByZWNhdGVk
Rm9yVXNlV2l0aFYwKHRvQVBJKHBhZ2UpLCB0b0FQSShtZXNzYWdlLmltcGwoKSksIHRvQVBJKGRl
ZmF1bHRWYWx1ZS5pbXBsKCkpLCB0b0FQSShmcmFtZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
bykpKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8QVBJOjpTdHJpbmc+IHN0cmluZyA9IGFkb3B0
UmVmKFdlYktpdDo6dG9JbXBsKG1fY2xpZW50LnJ1bkphdmFTY3JpcHRQcm9tcHRfZGVwcmVjYXRl
ZEZvclVzZVdpdGhWMCh0b0FQSShwYWdlKSwgdG9BUEkobWVzc2FnZS5pbXBsKCkpLCB0b0FQSShk
ZWZhdWx0VmFsdWUuaW1wbCgpKSwgdG9BUEkoZnJhbWUpLCBtX2NsaWVudC5iYXNlLmNsaWVudElu
Zm8pKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHN0cmluZykKICAg
ICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoc3RyaW5nLT5zdHJpbmcoKSk7CkBA
IC0yMDQ2LDcgKzIwNDYsNyBAQCB2b2lkIFdLUGFnZVNldFBhZ2VVSUNsaWVudChXS1BhZ2VSZWYg
cGFnZVJlZiwgY29uc3QgV0tQYWdlVUlDbGllbnRCYXNlKiB3a0NsaWVudAogICAgICAgICB9CiAg
ICAgfTsKIAotICAgIHRvSW1wbChwYWdlUmVmKS0+c2V0VUlDbGllbnQoc3RkOjptYWtlX3VuaXF1
ZTxVSUNsaWVudD4od2tDbGllbnQpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+c2V0
VUlDbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxVSUNsaWVudD4od2tDbGllbnQpKTsKIH0KIAogdm9p
ZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3Qg
V0tQYWdlTmF2aWdhdGlvbkNsaWVudEJhc2UqIHdrQ2xpZW50KQpAQCAtMjE3NCw3ICsyMTc0LDcg
QEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwg
Y29uc3QgV0tQYWdlTmF2aWdhdGlvbkNsaWUKICAgICAgICAgUmVmUHRyPEFQSTo6RGF0YT4gd2Vi
Q3J5cHRvTWFzdGVyS2V5KFdlYlBhZ2VQcm94eSYgcGFnZSkgb3ZlcnJpZGUKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKG1fY2xpZW50LmNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKHRvSW1wbChtX2NsaWVudC5jb3B5V2ViQ3J5cHRvTWFz
dGVyS2V5KHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihXZWJLaXQ6OnRvSW1wbChtX2NsaWVudC5jb3B5V2Vi
Q3J5cHRvTWFzdGVyS2V5KHRvQVBJKCZwYWdlKSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKSkp
OwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4gbWFzdGVyS2V5OwogI2lmIEVOQUJMRShX
RUJfQ1JZUFRPKQpAQCAtMjE4OCw3ICsyMTg4LDcgQEAgdm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdh
dGlvbkNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29uc3QgV0tQYWdlTmF2aWdhdGlvbkNsaWUK
ICAgICAgICAgUmVmUHRyPEFQSTo6U3RyaW5nPiBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcoV2ViUGFnZVByb3h5JiBwYWdlLCB1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFJl
ZlB0cjxBUEk6OlN0cmluZz4mIGNoYWxsZW5nZVN0cmluZywgY29uc3QgVVJMJiB1cmwpIG92ZXJy
aWRlCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX2NsaWVudC5jb3B5U2lnbmVkUHVibGlj
S2V5QW5kQ2hhbGxlbmdlU3RyaW5nKQotICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZih0
b0ltcGwobV9jbGllbnQuY29weVNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyh0b0FQ
SSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbykpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoV2ViS2l0Ojp0b0ltcGwobV9jbGllbnQuY29weVNpZ25lZFB1YmxpY0tl
eUFuZENoYWxsZW5nZVN0cmluZyh0b0FQSSgmcGFnZSksIG1fY2xpZW50LmJhc2UuY2xpZW50SW5m
bykpKTsKICAgICAgICAgICAgIHJldHVybiBBUEk6OlN0cmluZzo6Y3JlYXRlKFdlYkNvcmU6OnNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgsIGNoYWxsZW5nZVN0
cmluZy0+c3RyaW5nKCksIHVybCkpOwogICAgICAgICB9CiAKQEAgLTIyNDYsNyArMjI0Niw3IEBA
IHZvaWQgV0tQYWdlU2V0UGFnZU5hdmlnYXRpb25DbGllbnQoV0tQYWdlUmVmIHBhZ2VSZWYsIGNv
bnN0IFdLUGFnZU5hdmlnYXRpb25DbGllCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cmlu
ZyB1bmF2YWlsYWJpbGl0eURlc2NyaXB0aW9uOwogICAgICAgICAgICAgaWYgKHVuYXZhaWxhYmls
aXR5RGVzY3JpcHRpb25PdXQpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8QVBJOjpTdHJpbmc+
IHdlYlVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb24gPSBhZG9wdFJlZih0b0ltcGwodW5hdmFpbGFi
aWxpdHlEZXNjcmlwdGlvbk91dCkpOworICAgICAgICAgICAgICAgIFJlZlB0cjxBUEk6OlN0cmlu
Zz4gd2ViVW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbiA9IGFkb3B0UmVmKFdlYktpdDo6dG9JbXBs
KHVuYXZhaWxhYmlsaXR5RGVzY3JpcHRpb25PdXQpKTsKICAgICAgICAgICAgICAgICB1bmF2YWls
YWJpbGl0eURlc2NyaXB0aW9uID0gd2ViVW5hdmFpbGFiaWxpdHlEZXNjcmlwdGlvbi0+c3RyaW5n
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIyNTUsMTQgKzIyNTUsMTQgQEAg
dm9pZCBXS1BhZ2VTZXRQYWdlTmF2aWdhdGlvbkNsaWVudChXS1BhZ2VSZWYgcGFnZVJlZiwgY29u
c3QgV0tQYWdlTmF2aWdhdGlvbkNsaWUKICNlbmRpZgogICAgIH07CiAKLSAgICBXZWJQYWdlUHJv
eHkqIHdlYlBhZ2VQcm94eSA9IHRvSW1wbChwYWdlUmVmKTsKKyAgICBXZWJQYWdlUHJveHkqIHdl
YlBhZ2VQcm94eSA9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpOwogCiAgICAgd2ViUGFnZVByb3h5
LT5zZXROYXZpZ2F0aW9uQ2xpZW50KG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvbkNsaWVudD4od2tD
bGllbnQpKTsKIH0KIAogdm9pZCBXS1BhZ2VSdW5KYXZhU2NyaXB0SW5NYWluRnJhbWUoV0tQYWdl
UmVmIHBhZ2VSZWYsIFdLU3RyaW5nUmVmIHNjcmlwdFJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdl
UnVuSmF2YVNjcmlwdEZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+
cnVuSmF2YVNjcmlwdEluTWFpbkZyYW1lKHRvSW1wbChzY3JpcHRSZWYpLT5zdHJpbmcoKSwgdHJ1
ZSwgW2NvbnRleHQsIGNhbGxiYWNrXShBUEk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmV0dXJu
VmFsdWUsIGJvb2wsIGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFpbHMmLCBDYWxsYmFja0Jh
c2U6OkVycm9yIGVycm9yKSB7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnJ1bkphdmFT
Y3JpcHRJbk1haW5GcmFtZShXZWJLaXQ6OnRvSW1wbChzY3JpcHRSZWYpLT5zdHJpbmcoKSwgdHJ1
ZSwgW2NvbnRleHQsIGNhbGxiYWNrXShBUEk6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSogcmV0dXJu
VmFsdWUsIGJvb2wsIGNvbnN0IFdlYkNvcmU6OkV4Y2VwdGlvbkRldGFpbHMmLCBDYWxsYmFja0Jh
c2U6OkVycm9yIGVycm9yKSB7CiAgICAgICAgIGNhbGxiYWNrKHRvQVBJKHJldHVyblZhbHVlKSwg
KGVycm9yICE9IENhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUpID8gdG9BUEkoQVBJOjpFcnJvcjo6
Y3JlYXRlKCkucHRyKCkpIDogMCwgY29udGV4dCk7CiAgICAgfSk7CiB9CkBAIC0yMjkwLDQ1ICsy
MjkwLDQ1IEBAIHN0YXRpYyBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFN0cmluZyYsIFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+IHRvR2VuZXJpCiAKIHZvaWQgV0tQYWdlUmVuZGVyVHJl
ZUV4dGVybmFsUmVwcmVzZW50YXRpb24oV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQs
IFdLUGFnZVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRnVuY3Rpb24gY2FsbGJhY2sp
CiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5nZXRSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRh
dGlvbih0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmdldFJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0
aW9uKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAog
dm9pZCBXS1BhZ2VHZXRTb3VyY2VGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZVJlZiwgV0tGcmFtZVJl
ZiBmcmFtZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdlR2V0U291cmNlRm9yRnJhbWVGdW5jdGlv
biBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmdldFNvdXJjZUZvckZyYW1lKHRv
SW1wbChmcmFtZVJlZiksIHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJh
Y2spKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Z2V0U291cmNlRm9yRnJhbWUoV2Vi
S2l0Ojp0b0ltcGwoZnJhbWVSZWYpLCB0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQs
IGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0Q29udGVudHNBc1N0cmluZyhXS1BhZ2VS
ZWYgcGFnZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdlR2V0Q29udGVudHNBc1N0cmluZ0Z1bmN0
aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+Z2V0Q29udGVudHNBc1N0cmlu
Zyh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZVJlZiktPmdldENvbnRlbnRzQXNTdHJpbmcodG9HZW5lcmljQ2FsbGJh
Y2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLUGFnZUdldEJ5dGVj
b2RlUHJvZmlsZShXS1BhZ2VSZWYgcGFnZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdlR2V0Qnl0
ZWNvZGVQcm9maWxlRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5n
ZXRCeXRlY29kZVByb2ZpbGUodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxs
YmFjaykpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5nZXRCeXRlY29kZVByb2ZpbGUo
dG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lk
IFdLUGFnZUdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQoV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQq
IGNvbnRleHQsIFdLUGFnZUdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXRGdW5jdGlvbiBjYWxsYmFj
aykKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmdldFNhbXBsaW5nUHJvZmlsZXJPdXRwdXQodG9H
ZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykpOworICAgIFdlYktpdDo6
dG9JbXBsKHBhZ2VSZWYpLT5nZXRTYW1wbGluZ1Byb2ZpbGVyT3V0cHV0KHRvR2VuZXJpY0NhbGxi
YWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXS1BhZ2VJc1dlYlBy
b2Nlc3NSZXNwb25zaXZlKFdLUGFnZVJlZiBwYWdlUmVmLCB2b2lkKiBjb250ZXh0LCBXS1BhZ2VJ
c1dlYlByb2Nlc3NSZXNwb25zaXZlRnVuY3Rpb24gY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKHBh
Z2VSZWYpLT5pc1dlYlByb2Nlc3NSZXNwb25zaXZlKFtjb250ZXh0LCBjYWxsYmFja10oYm9vbCBp
c1dlYlByb2Nlc3NSZXNwb25zaXZlKSB7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmlz
V2ViUHJvY2Vzc1Jlc3BvbnNpdmUoW2NvbnRleHQsIGNhbGxiYWNrXShib29sIGlzV2ViUHJvY2Vz
c1Jlc3BvbnNpdmUpIHsKICAgICAgICAgY2FsbGJhY2soaXNXZWJQcm9jZXNzUmVzcG9uc2l2ZSwg
Y29udGV4dCk7CiAgICAgfSk7CiB9CiAKIHZvaWQgV0tQYWdlR2V0U2VsZWN0aW9uQXNXZWJBcmNo
aXZlRGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdlR2V0U2VsZWN0
aW9uQXNXZWJBcmNoaXZlRGF0YUZ1bmN0aW9uIGNhbGxiYWNrKQogewotICAgIHRvSW1wbChwYWdl
UmVmKS0+Z2V0U2VsZWN0aW9uQXNXZWJBcmNoaXZlRGF0YSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0
aW9uKGNvbnRleHQsIGNhbGxiYWNrKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPmdl
dFNlbGVjdGlvbkFzV2ViQXJjaGl2ZURhdGEodG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbihjb250
ZXh0LCBjYWxsYmFjaykpOwogfQogCiB2b2lkIFdLUGFnZUdldENvbnRlbnRzQXNNSFRNTERhdGEo
V0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdLUGFnZUdldENvbnRlbnRzQXNNSFRN
TERhdGFGdW5jdGlvbiBjYWxsYmFjaykKIHsKICNpZiBFTkFCTEUoTUhUTUwpCi0gICAgdG9JbXBs
KHBhZ2VSZWYpLT5nZXRDb250ZW50c0FzTUhUTUxEYXRhKHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rp
b24oY29udGV4dCwgY2FsbGJhY2spKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+Z2V0
Q29udGVudHNBc01IVE1MRGF0YSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKGNvbnRleHQsIGNh
bGxiYWNrKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlUmVmKTsKICAgICBVTlVTRURf
UEFSQU0oY29udGV4dCk7CkBAIC0yMzM4LDE0ICsyMzM4LDE0IEBAIHZvaWQgV0tQYWdlR2V0Q29u
dGVudHNBc01IVE1MRGF0YShXS1BhZ2VSZWYgcGFnZVJlZiwgdm9pZCogY29udGV4dCwgV0tQYWdl
R2V0Q29uCiAKIHZvaWQgV0tQYWdlRm9yY2VSZXBhaW50KFdLUGFnZVJlZiBwYWdlUmVmLCB2b2lk
KiBjb250ZXh0LCBXS1BhZ2VGb3JjZVJlcGFpbnRGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICB0
b0ltcGwocGFnZVJlZiktPmZvcmNlUmVwYWludChWb2lkQ2FsbGJhY2s6OmNyZWF0ZShbY29udGV4
dCwgY2FsbGJhY2tdKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgeworICAgIFdl
YktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5mb3JjZVJlcGFpbnQoVm9pZENhbGxiYWNrOjpjcmVhdGUo
W2NvbnRleHQsIGNhbGxiYWNrXShXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsK
ICAgICAgICAgY2FsbGJhY2soZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpO
b25lID8gbnVsbHB0ciA6IHRvQVBJKEFQSTo6RXJyb3I6OmNyZWF0ZSgpLnB0cigpKSwgY29udGV4
dCk7CiAgICAgfSkpOwogfQogCiBXS19FWFBPUlQgV0tVUkxSZWYgV0tQYWdlQ29weVBlbmRpbmdB
UElSZXF1ZXN0VVJMKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIGNvbnN0IFN0cmluZyYgcGVu
ZGluZ0FQSVJlcXVlc3RVUkwgPSB0b0ltcGwocGFnZVJlZiktPnBhZ2VMb2FkU3RhdGUoKS5wZW5k
aW5nQVBJUmVxdWVzdFVSTCgpOworICAgIGNvbnN0IFN0cmluZyYgcGVuZGluZ0FQSVJlcXVlc3RV
UkwgPSBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cGFnZUxvYWRTdGF0ZSgpLnBlbmRpbmdBUElS
ZXF1ZXN0VVJMKCk7CiAKICAgICBpZiAocGVuZGluZ0FQSVJlcXVlc3RVUkwuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjM1NSwzNCArMjM1NSwzNCBAQCBXS19FWFBPUlQg
V0tVUkxSZWYgV0tQYWdlQ29weVBlbmRpbmdBUElSZXF1ZXN0VVJMKFdLUGFnZVJlZiBwYWdlUmVm
KQogCiBXS1VSTFJlZiBXS1BhZ2VDb3B5QWN0aXZlVVJMKFdLUGFnZVJlZiBwYWdlUmVmKQogewot
ICAgIHJldHVybiB0b0NvcGllZFVSTEFQSSh0b0ltcGwocGFnZVJlZiktPnBhZ2VMb2FkU3RhdGUo
KS5hY3RpdmVVUkwoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKFdlYktpdDo6dG9JbXBs
KHBhZ2VSZWYpLT5wYWdlTG9hZFN0YXRlKCkuYWN0aXZlVVJMKCkpOwogfQogCiBXS1VSTFJlZiBX
S1BhZ2VDb3B5UHJvdmlzaW9uYWxVUkwoV0tQYWdlUmVmIHBhZ2VSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvQ29waWVkVVJMQVBJKHRvSW1wbChwYWdlUmVmKS0+cGFnZUxvYWRTdGF0ZSgpLnByb3Zpc2lv
bmFsVVJMKCkpOworICAgIHJldHVybiB0b0NvcGllZFVSTEFQSShXZWJLaXQ6OnRvSW1wbChwYWdl
UmVmKS0+cGFnZUxvYWRTdGF0ZSgpLnByb3Zpc2lvbmFsVVJMKCkpOwogfQogCiBXS1VSTFJlZiBX
S1BhZ2VDb3B5Q29tbWl0dGVkVVJMKFdLUGFnZVJlZiBwYWdlUmVmKQogewotICAgIHJldHVybiB0
b0NvcGllZFVSTEFQSSh0b0ltcGwocGFnZVJlZiktPnBhZ2VMb2FkU3RhdGUoKS51cmwoKSk7Cisg
ICAgcmV0dXJuIHRvQ29waWVkVVJMQVBJKFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5wYWdlTG9h
ZFN0YXRlKCkudXJsKCkpOwogfQogCiBXS1N0cmluZ1JlZiBXS1BhZ2VDb3B5U3RhbmRhcmRVc2Vy
QWdlbnRXaXRoQXBwbGljYXRpb25OYW1lKFdLU3RyaW5nUmVmIGFwcGxpY2F0aW9uTmFtZSkKIHsK
LSAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudCh0
b0ltcGwoYXBwbGljYXRpb25OYW1lKS0+c3RyaW5nKCkpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRB
UEkoV2ViUGFnZVByb3h5OjpzdGFuZGFyZFVzZXJBZ2VudChXZWJLaXQ6OnRvSW1wbChhcHBsaWNh
dGlvbk5hbWUpLT5zdHJpbmcoKSkpOwogfQogCiB2b2lkIFdLUGFnZVZhbGlkYXRlQ29tbWFuZChX
S1BhZ2VSZWYgcGFnZVJlZiwgV0tTdHJpbmdSZWYgY29tbWFuZCwgdm9pZCogY29udGV4dCwgV0tQ
YWdlVmFsaWRhdGVDb21tYW5kQ2FsbGJhY2sgY2FsbGJhY2spCiB7Ci0gICAgdG9JbXBsKHBhZ2VS
ZWYpLT52YWxpZGF0ZUNvbW1hbmQodG9JbXBsKGNvbW1hbmQpLT5zdHJpbmcoKSwgW2NvbnRleHQs
IGNhbGxiYWNrXShjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCBib29sIGlzRW5hYmxlZCwgaW50
MzJfdCBzdGF0ZSwgV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocGFnZVJlZiktPnZhbGlkYXRlQ29tbWFuZChXZWJLaXQ6OnRvSW1wbChjb21t
YW5kKS0+c3RyaW5nKCksIFtjb250ZXh0LCBjYWxsYmFja10oY29uc3QgU3RyaW5nJiBjb21tYW5k
TmFtZSwgYm9vbCBpc0VuYWJsZWQsIGludDMyX3Qgc3RhdGUsIFdlYktpdDo6Q2FsbGJhY2tCYXNl
OjpFcnJvciBlcnJvcikgewogICAgICAgICBjYWxsYmFjayh0b0FQSShBUEk6OlN0cmluZzo6Y3Jl
YXRlKGNvbW1hbmROYW1lKS5wdHIoKSksIGlzRW5hYmxlZCwgc3RhdGUsIGVycm9yICE9IFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6Tm9uZSA/IHRvQVBJKEFQSTo6RXJyb3I6OmNyZWF0ZSgp
LnB0cigpKSA6IDAsIGNvbnRleHQpOwogICAgIH0pOwogfQogCiB2b2lkIFdLUGFnZUV4ZWN1dGVD
b21tYW5kKFdLUGFnZVJlZiBwYWdlUmVmLCBXS1N0cmluZ1JlZiBjb21tYW5kKQogewotICAgIHRv
SW1wbChwYWdlUmVmKS0+ZXhlY3V0ZUVkaXRDb21tYW5kKHRvSW1wbChjb21tYW5kKS0+c3RyaW5n
KCkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5leGVjdXRlRWRpdENvbW1hbmQoV2Vi
S2l0Ojp0b0ltcGwoY29tbWFuZCktPnN0cmluZygpKTsKIH0KIAogI2lmIFBMQVRGT1JNKENPQ09B
KQpAQCAtMjM5Nyw3ICsyMzk3LDcgQEAgc3RhdGljIFByaW50SW5mbyBwcmludEluZm9Gcm9tV0tQ
cmludEluZm8oY29uc3QgV0tQcmludEluZm8mIHByaW50SW5mbykKIAogdm9pZCBXS1BhZ2VDb21w
dXRlUGFnZXNGb3JQcmludGluZyhXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tQ
cmludEluZm8gcHJpbnRJbmZvLCBXS1BhZ2VDb21wdXRlUGFnZXNGb3JQcmludGluZ0Z1bmN0aW9u
IGNhbGxiYWNrLCB2b2lkKiBjb250ZXh0KQogewotICAgIHRvSW1wbChwYWdlKS0+Y29tcHV0ZVBh
Z2VzRm9yUHJpbnRpbmcodG9JbXBsKGZyYW1lKSwgcHJpbnRJbmZvRnJvbVdLUHJpbnRJbmZvKHBy
aW50SW5mbyksIENvbXB1dGVkUGFnZXNDYWxsYmFjazo6Y3JlYXRlKFtjb250ZXh0LCBjYWxsYmFj
a10oY29uc3QgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+JiByZWN0cywgZG91YmxlIHNjYWxlRmFj
dG9yLCBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwYWdlKS0+Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmcoV2ViS2l0Ojp0b0ltcGwoZnJhbWUp
LCBwcmludEluZm9Gcm9tV0tQcmludEluZm8ocHJpbnRJbmZvKSwgQ29tcHV0ZWRQYWdlc0NhbGxi
YWNrOjpjcmVhdGUoW2NvbnRleHQsIGNhbGxiYWNrXShjb25zdCBWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4mIHJlY3RzLCBkb3VibGUgc2NhbGVGYWN0b3IsIFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpF
cnJvciBlcnJvcikgewogICAgICAgICBWZWN0b3I8V0tSZWN0PiB3a1JlY3RzKHJlY3RzLnNpemUo
KSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCiAg
ICAgICAgICAgICB3a1JlY3RzW2ldID0gdG9BUEkocmVjdHNbaV0pOwpAQCAtMjQwNywzNCArMjQw
NywzNCBAQCB2b2lkIFdLUGFnZUNvbXB1dGVQYWdlc0ZvclByaW50aW5nKFdLUGFnZVJlZiBwYWdl
LCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1ByaW50SW5mbwogCiB2b2lkIFdLUGFnZUJlZ2luUHJpbnRp
bmcoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLUHJpbnRJbmZvIHByaW50SW5m
bykKIHsKLSAgICB0b0ltcGwocGFnZSktPmJlZ2luUHJpbnRpbmcodG9JbXBsKGZyYW1lKSwgcHJp
bnRJbmZvRnJvbVdLUHJpbnRJbmZvKHByaW50SW5mbykpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2UpLT5iZWdpblByaW50aW5nKFdlYktpdDo6dG9JbXBsKGZyYW1lKSwgcHJpbnRJbmZvRnJvbVdL
UHJpbnRJbmZvKHByaW50SW5mbykpOwogfQogCiB2b2lkIFdLUGFnZURyYXdQYWdlc1RvUERGKFdL
UGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS1ByaW50SW5mbyBwcmludEluZm8sIHVp
bnQzMl90IGZpcnN0LCB1aW50MzJfdCBjb3VudCwgV0tQYWdlRHJhd1RvUERGRnVuY3Rpb24gY2Fs
bGJhY2ssIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5kcmF3UGFnZXNUb1BE
Rih0b0ltcGwoZnJhbWUpLCBwcmludEluZm9Gcm9tV0tQcmludEluZm8ocHJpbnRJbmZvKSwgZmly
c3QsIGNvdW50LCBEYXRhQ2FsbGJhY2s6OmNyZWF0ZSh0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9u
KGNvbnRleHQsIGNhbGxiYWNrKSkpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5kcmF3UGFn
ZXNUb1BERihXZWJLaXQ6OnRvSW1wbChmcmFtZSksIHByaW50SW5mb0Zyb21XS1ByaW50SW5mbyhw
cmludEluZm8pLCBmaXJzdCwgY291bnQsIERhdGFDYWxsYmFjazo6Y3JlYXRlKHRvR2VuZXJpY0Nh
bGxiYWNrRnVuY3Rpb24oY29udGV4dCwgY2FsbGJhY2spKSk7CiB9CiAKIHZvaWQgV0tQYWdlRW5k
UHJpbnRpbmcoV0tQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5lbmRQcmludGlu
ZygpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5lbmRQcmludGluZygpOwogfQogI2VuZGlm
CiAKIGJvb2wgV0tQYWdlR2V0SXNDb250cm9sbGVkQnlBdXRvbWF0aW9uKFdLUGFnZVJlZiBwYWdl
KQogewotICAgIHJldHVybiB0b0ltcGwocGFnZSktPmlzQ29udHJvbGxlZEJ5QXV0b21hdGlvbigp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+aXNDb250cm9sbGVkQnlBdXRvbWF0
aW9uKCk7CiB9CiAKIHZvaWQgV0tQYWdlU2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihXS1BhZ2VS
ZWYgcGFnZSwgYm9vbCBjb250cm9sbGVkKQogewotICAgIHRvSW1wbChwYWdlKS0+c2V0Q29udHJv
bGxlZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+
c2V0Q29udHJvbGxlZEJ5QXV0b21hdGlvbihjb250cm9sbGVkKTsKIH0KIAogYm9vbCBXS1BhZ2VH
ZXRBbGxvd3NSZW1vdGVJbnNwZWN0aW9uKFdLUGFnZVJlZiBwYWdlKQogewogI2lmIEVOQUJMRShS
RU1PVEVfSU5TUEVDVE9SKQotICAgIHJldHVybiB0b0ltcGwocGFnZSktPmFsbG93c1JlbW90ZUlu
c3BlY3Rpb24oKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocGFnZSktPmFsbG93c1JlbW90
ZUluc3BlY3Rpb24oKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIHJldHVy
biBmYWxzZTsKQEAgLTI0NDQsNyArMjQ0NCw3IEBAIGJvb2wgV0tQYWdlR2V0QWxsb3dzUmVtb3Rl
SW5zcGVjdGlvbihXS1BhZ2VSZWYgcGFnZSkKIHZvaWQgV0tQYWdlU2V0QWxsb3dzUmVtb3RlSW5z
cGVjdGlvbihXS1BhZ2VSZWYgcGFnZSwgYm9vbCBhbGxvdykKIHsKICNpZiBFTkFCTEUoUkVNT1RF
X0lOU1BFQ1RPUikKLSAgICB0b0ltcGwocGFnZSktPnNldEFsbG93c1JlbW90ZUluc3BlY3Rpb24o
YWxsb3cpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5zZXRBbGxvd3NSZW1vdGVJbnNwZWN0
aW9uKGFsbG93KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIFVOVVNFRF9Q
QVJBTShhbGxvdyk7CkBAIC0yNDUzLDI4ICsyNDUzLDI4IEBAIHZvaWQgV0tQYWdlU2V0QWxsb3dz
UmVtb3RlSW5zcGVjdGlvbihXS1BhZ2VSZWYgcGFnZSwgYm9vbCBhbGxvdykKIAogdm9pZCBXS1Bh
Z2VTZXRNZWRpYVZvbHVtZShXS1BhZ2VSZWYgcGFnZSwgZmxvYXQgdm9sdW1lKQogewotICAgIHRv
SW1wbChwYWdlKS0+c2V0TWVkaWFWb2x1bWUodm9sdW1lKTsgICAgCisgICAgV2ViS2l0Ojp0b0lt
cGwocGFnZSktPnNldE1lZGlhVm9sdW1lKHZvbHVtZSk7ICAgIAogfQogCiB2b2lkIFdLUGFnZVNl
dE11dGVkKFdLUGFnZVJlZiBwYWdlLCBXS01lZGlhTXV0ZWRTdGF0ZSBtdXRlZCkKIHsKLSAgICB0
b0ltcGwocGFnZSktPnNldE11dGVkKG11dGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+
c2V0TXV0ZWQobXV0ZWQpOwogfQogCiB2b2lkIFdLUGFnZVNldE1lZGlhQ2FwdHVyZUVuYWJsZWQo
V0tQYWdlUmVmIHBhZ2UsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocGFnZSktPnNldE1l
ZGlhQ2FwdHVyZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPnNl
dE1lZGlhQ2FwdHVyZUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQYWdlR2V0TWVkaWFD
YXB0dXJlRW5hYmxlZChXS1BhZ2VSZWYgcGFnZSkKIHsKLSAgICByZXR1cm4gdG9JbXBsKHBhZ2Up
LT5tZWRpYUNhcHR1cmVFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2Up
LT5tZWRpYUNhcHR1cmVFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQYWdlRGlkQWxsb3dQb2ludGVy
TG9jayhXS1BhZ2VSZWYgcGFnZSkKIHsKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIHRv
SW1wbChwYWdlKS0+ZGlkQWxsb3dQb2ludGVyTG9jaygpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2UpLT5kaWRBbGxvd1BvaW50ZXJMb2NrKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdl
KTsKICNlbmRpZgpAQCAtMjQ4Myw3ICsyNDgzLDcgQEAgdm9pZCBXS1BhZ2VEaWRBbGxvd1BvaW50
ZXJMb2NrKFdLUGFnZVJlZiBwYWdlKQogdm9pZCBXS1BhZ2VDbGVhclVzZXJNZWRpYVN0YXRlKFdL
UGFnZVJlZiBwYWdlKQogewogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgdG9JbXBsKHBh
Z2UpLT5jbGVhclVzZXJNZWRpYVN0YXRlKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPmNs
ZWFyVXNlck1lZGlhU3RhdGUoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogI2Vu
ZGlmCkBAIC0yNDkyLDcgKzI0OTIsNyBAQCB2b2lkIFdLUGFnZUNsZWFyVXNlck1lZGlhU3RhdGUo
V0tQYWdlUmVmIHBhZ2UpCiB2b2lkIFdLUGFnZURpZERlbnlQb2ludGVyTG9jayhXS1BhZ2VSZWYg
cGFnZSkKIHsKICNpZiBFTkFCTEUoUE9JTlRFUl9MT0NLKQotICAgIHRvSW1wbChwYWdlKS0+ZGlk
RGVueVBvaW50ZXJMb2NrKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPmRpZERlbnlQb2lu
dGVyTG9jaygpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAjZW5kaWYKQEAgLTI1
MDEsNyArMjUwMSw3IEBAIHZvaWQgV0tQYWdlRGlkRGVueVBvaW50ZXJMb2NrKFdLUGFnZVJlZiBw
YWdlKQogYm9vbCBXS1BhZ2VIYXNNZWRpYVNlc3Npb25XaXRoQWN0aXZlTWVkaWFFbGVtZW50cyhX
S1BhZ2VSZWYgcGFnZSkKIHsKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKLSAgICByZXR1cm4g
dG9JbXBsKHBhZ2UpLT5oYXNNZWRpYVNlc3Npb25XaXRoQWN0aXZlTWVkaWFFbGVtZW50cygpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+aGFzTWVkaWFTZXNzaW9uV2l0aEFjdGl2
ZU1lZGlhRWxlbWVudHMoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIHJl
dHVybiBmYWxzZTsKQEAgLTI1MjgsNyArMjUyOCw3IEBAIHZvaWQgV0tQYWdlSGFuZGxlTWVkaWFF
dmVudChXS1BhZ2VSZWYgcGFnZSwgV0tNZWRpYUV2ZW50VHlwZSB3a0V2ZW50VHlwZSkKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHRvSW1wbChwYWdlKS0+aGFuZGxlTWVkaWFFdmVudChl
dmVudFR5cGUpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5oYW5kbGVNZWRpYUV2ZW50KGV2
ZW50VHlwZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICAgICBVTlVTRURfUEFS
QU0od2tFdmVudFR5cGUpOwpAQCAtMjUzNywxNSArMjUzNywxNSBAQCB2b2lkIFdLUGFnZUhhbmRs
ZU1lZGlhRXZlbnQoV0tQYWdlUmVmIHBhZ2UsIFdLTWVkaWFFdmVudFR5cGUgd2tFdmVudFR5cGUp
CiAKIHZvaWQgV0tQYWdlUG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFdLUGFnZVJlZiBwYWdl
UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZVJlZiwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5UmVm
KQogewotICAgIHRvSW1wbChwYWdlUmVmKS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKHRv
SW1wbChtZXNzYWdlTmFtZVJlZiktPnN0cmluZygpLCB0b0ltcGwobWVzc2FnZUJvZHlSZWYpKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+cG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxl
KFdlYktpdDo6dG9JbXBsKG1lc3NhZ2VOYW1lUmVmKS0+c3RyaW5nKCksIFdlYktpdDo6dG9JbXBs
KG1lc3NhZ2VCb2R5UmVmKSk7CiB9CiAKIFdLQXJyYXlSZWYgV0tQYWdlQ29weVJlbGF0ZWRQYWdl
cyhXS1BhZ2VSZWYgcGFnZVJlZikKIHsKICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4g
cmVsYXRlZFBhZ2VzOwogCi0gICAgZm9yIChhdXRvJiBwYWdlIDogdG9JbXBsKHBhZ2VSZWYpLT5w
cm9jZXNzKCkucGFnZXMoKSkgewotICAgICAgICBpZiAocGFnZSAhPSB0b0ltcGwocGFnZVJlZikp
CisgICAgZm9yIChhdXRvJiBwYWdlIDogV2ViS2l0Ojp0b0ltcGwocGFnZVJlZiktPnByb2Nlc3Mo
KS5wYWdlcygpKSB7CisgICAgICAgIGlmIChwYWdlICE9IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYp
KQogICAgICAgICAgICAgcmVsYXRlZFBhZ2VzLmFwcGVuZChwYWdlKTsKICAgICB9CiAKQEAgLTI1
NTQsOCArMjU1NCw4IEBAIFdLQXJyYXlSZWYgV0tQYWdlQ29weVJlbGF0ZWRQYWdlcyhXS1BhZ2VS
ZWYgcGFnZVJlZikKIAogV0tGcmFtZVJlZiBXS1BhZ2VMb29rVXBGcmFtZUZyb21IYW5kbGUoV0tQ
YWdlUmVmIHBhZ2VSZWYsIFdLRnJhbWVIYW5kbGVSZWYgaGFuZGxlUmVmKQogewotICAgIGF1dG8g
cGFnZSA9IHRvSW1wbChwYWdlUmVmKTsKLSAgICBhdXRvIGZyYW1lID0gcGFnZS0+cHJvY2Vzcygp
LndlYkZyYW1lKHRvSW1wbChoYW5kbGVSZWYpLT5mcmFtZUlEKCkpOworICAgIGF1dG8gcGFnZSA9
IFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpOworICAgIGF1dG8gZnJhbWUgPSBwYWdlLT5wcm9jZXNz
KCkud2ViRnJhbWUoV2ViS2l0Ojp0b0ltcGwoaGFuZGxlUmVmKS0+ZnJhbWVJRCgpKTsKICAgICBp
ZiAoIWZyYW1lIHx8IGZyYW1lLT5wYWdlKCkgIT0gcGFnZSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTI1NjQsMTQgKzI1NjQsMTQgQEAgV0tGcmFtZVJlZiBXS1BhZ2VMb29rVXBGcmFt
ZUZyb21IYW5kbGUoV0tQYWdlUmVmIHBhZ2VSZWYsIFdLRnJhbWVIYW5kbGVSZWYgaGFuZGwKIAog
dm9pZCBXS1BhZ2VTZXRNYXlTdGFydE1lZGlhV2hlbkluV2luZG93KFdLUGFnZVJlZiBwYWdlUmVm
LCBib29sIG1heVN0YXJ0TWVkaWEpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5zZXRNYXlTdGFy
dE1lZGlhV2hlbkluV2luZG93KG1heVN0YXJ0TWVkaWEpOworICAgIFdlYktpdDo6dG9JbXBsKHBh
Z2VSZWYpLT5zZXRNYXlTdGFydE1lZGlhV2hlbkluV2luZG93KG1heVN0YXJ0TWVkaWEpOwogfQog
CiAKIHZvaWQgV0tQYWdlU2VsZWN0Q29udGV4dE1lbnVJdGVtKFdLUGFnZVJlZiBwYWdlLCBXS0Nv
bnRleHRNZW51SXRlbVJlZiBpdGVtKQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAg
IHRvSW1wbChwYWdlKS0+Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoKHRvSW1wbChpdGVtKS0+ZGF0
YSgpKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPmNvbnRleHRNZW51SXRlbVNlbGVjdGVk
KChXZWJLaXQ6OnRvSW1wbChpdGVtKS0+ZGF0YSgpKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShwYWdlKTsKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC0yNTgwLDcgKzI1ODAsNyBAQCB2
b2lkIFdLUGFnZVNlbGVjdENvbnRleHRNZW51SXRlbShXS1BhZ2VSZWYgcGFnZSwgV0tDb250ZXh0
TWVudUl0ZW1SZWYgaXRlbSkKIAogV0tTY3JvbGxQaW5uaW5nQmVoYXZpb3IgV0tQYWdlR2V0U2Ny
b2xsUGlubmluZ0JlaGF2aW9yKFdLUGFnZVJlZiBwYWdlKQogewotICAgIFNjcm9sbFBpbm5pbmdC
ZWhhdmlvciBwaW5uaW5nID0gdG9JbXBsKHBhZ2UpLT5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKTsK
KyAgICBTY3JvbGxQaW5uaW5nQmVoYXZpb3IgcGlubmluZyA9IFdlYktpdDo6dG9JbXBsKHBhZ2Up
LT5zY3JvbGxQaW5uaW5nQmVoYXZpb3IoKTsKICAgICAKICAgICBzd2l0Y2ggKHBpbm5pbmcpIHsK
ICAgICBjYXNlIFdlYkNvcmU6OlNjcm9sbFBpbm5pbmdCZWhhdmlvcjo6RG9Ob3RQaW46CkBAIC0y
NjEzLDI3ICsyNjEzLDI3IEBAIHZvaWQgV0tQYWdlU2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKFdL
UGFnZVJlZiBwYWdlLCBXS1Njcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5uCiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICB0b0ltcGwocGFnZSktPnNldFNjcm9s
bFBpbm5pbmdCZWhhdmlvcihjb3JlUGlubmluZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSkt
PnNldFNjcm9sbFBpbm5pbmdCZWhhdmlvcihjb3JlUGlubmluZyk7CiB9CiAKIGJvb2wgV0tQYWdl
R2V0QWRkc1Zpc2l0ZWRMaW5rcyhXS1BhZ2VSZWYgcGFnZSkKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHBhZ2UpLT5hZGRzVmlzaXRlZExpbmtzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBh
Z2UpLT5hZGRzVmlzaXRlZExpbmtzKCk7CiB9CiAKIHZvaWQgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRM
aW5rcyhXS1BhZ2VSZWYgcGFnZSwgYm9vbCBhZGRzVmlzaXRlZExpbmtzKQogewotICAgIHRvSW1w
bChwYWdlKS0+c2V0QWRkc1Zpc2l0ZWRMaW5rcyhhZGRzVmlzaXRlZExpbmtzKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwYWdlKS0+c2V0QWRkc1Zpc2l0ZWRMaW5rcyhhZGRzVmlzaXRlZExpbmtzKTsK
IH0KIAogYm9vbCBXS1BhZ2VJc1BsYXlpbmdBdWRpbyhXS1BhZ2VSZWYgcGFnZSkKIHsKLSAgICBy
ZXR1cm4gdG9JbXBsKHBhZ2UpLT5pc1BsYXlpbmdBdWRpbygpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwYWdlKS0+aXNQbGF5aW5nQXVkaW8oKTsKIH0KIAogV0tNZWRpYVN0YXRlIFdLUGFn
ZUdldE1lZGlhU3RhdGUoV0tQYWdlUmVmIHBhZ2UpCiB7Ci0gICAgV2ViQ29yZTo6TWVkaWFQcm9k
dWNlcjo6TWVkaWFTdGF0ZUZsYWdzIGNvcmVTdGF0ZSA9IHRvSW1wbChwYWdlKS0+bWVkaWFTdGF0
ZUZsYWdzKCk7CisgICAgV2ViQ29yZTo6TWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIGNv
cmVTdGF0ZSA9IFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5tZWRpYVN0YXRlRmxhZ3MoKTsKICAgICBX
S01lZGlhU3RhdGUgc3RhdGUgPSBrV0tNZWRpYUlzTm90UGxheWluZzsKIAogICAgIGlmIChjb3Jl
U3RhdGUgJiBXZWJDb3JlOjpNZWRpYVByb2R1Y2VyOjpJc1BsYXlpbmdBdWRpbykKQEAgLTI2NTQs
NDMgKzI2NTQsNDMgQEAgV0tNZWRpYVN0YXRlIFdLUGFnZUdldE1lZGlhU3RhdGUoV0tQYWdlUmVm
IHBhZ2UpCiAKIHZvaWQgV0tQYWdlQ2xlYXJXaGVlbEV2ZW50VGVzdFRyaWdnZXIoV0tQYWdlUmVm
IHBhZ2VSZWYpCiB7Ci0gICAgdG9JbXBsKHBhZ2VSZWYpLT5jbGVhcldoZWVsRXZlbnRUZXN0VHJp
Z2dlcigpOworICAgIFdlYktpdDo6dG9JbXBsKHBhZ2VSZWYpLT5jbGVhcldoZWVsRXZlbnRUZXN0
VHJpZ2dlcigpOwogfQogCiB2b2lkIFdLUGFnZUNhbGxBZnRlck5leHRQcmVzZW50YXRpb25VcGRh
dGUoV0tQYWdlUmVmIHBhZ2VSZWYsIHZvaWQqIGNvbnRleHQsIFdLUGFnZVBvc3RQcmVzZW50YXRp
b25VcGRhdGVGdW5jdGlvbiBjYWxsYmFjaykKIHsKLSAgICB0b0ltcGwocGFnZVJlZiktPmNhbGxB
ZnRlck5leHRQcmVzZW50YXRpb25VcGRhdGUoW2NvbnRleHQsIGNhbGxiYWNrXShXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlUmVmKS0+
Y2FsbEFmdGVyTmV4dFByZXNlbnRhdGlvblVwZGF0ZShbY29udGV4dCwgY2FsbGJhY2tdKFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAgICBjYWxsYmFjayhlcnJvciAh
PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok5vbmUgPyB0b0FQSShBUEk6OkVycm9yOjpj
cmVhdGUoKS5wdHIoKSkgOiAwLCBjb250ZXh0KTsKICAgICB9KTsKIH0KIAogYm9vbCBXS1BhZ2VH
ZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChXS1BhZ2VSZWYgcGFnZSkKIHsKLSAgICByZXR1cm4g
dG9JbXBsKHBhZ2UpLT5pc1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVkKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHBhZ2UpLT5pc1Jlc291cmNlQ2FjaGluZ0Rpc2FibGVkKCk7CiB9CiAKIHZv
aWQgV0tQYWdlU2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoV0tQYWdlUmVmIHBhZ2UsIGJvb2wg
ZGlzYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHBhZ2UpLT5zZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZChkaXNhYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZSktPnNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkKGRpc2FibGVkKTsKIH0KIAogdm9pZCBXS1BhZ2VTZXRJZ25vcmVzVmlld3BvcnRT
Y2FsZUxpbWl0cyhXS1BhZ2VSZWYgcGFnZSwgYm9vbCBpZ25vcmVzVmlld3BvcnRTY2FsZUxpbWl0
cykKIHsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHRvSW1wbChwYWdlKS0+c2V0Rm9y
Y2VBbHdheXNVc2VyU2NhbGFibGUoaWdub3Jlc1ZpZXdwb3J0U2NhbGVMaW1pdHMpOworICAgIFdl
YktpdDo6dG9JbXBsKHBhZ2UpLT5zZXRGb3JjZUFsd2F5c1VzZXJTY2FsYWJsZShpZ25vcmVzVmll
d3BvcnRTY2FsZUxpbWl0cyk7CiAjZW5kaWYKIH0KIAogUHJvY2Vzc0lEIFdLUGFnZUdldFByb2Nl
c3NJZGVudGlmaWVyKFdLUGFnZVJlZiBwYWdlKQogewotICAgIHJldHVybiB0b0ltcGwocGFnZSkt
PnByb2Nlc3NJZGVudGlmaWVyKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBhZ2UpLT5w
cm9jZXNzSWRlbnRpZmllcigpOwogfQogCiAjaWZkZWYgX19CTE9DS1NfXwogdm9pZCBXS1BhZ2VH
ZXRBcHBsaWNhdGlvbk1hbmlmZXN0X2IoV0tQYWdlUmVmIHBhZ2UsIFdLUGFnZUdldEFwcGxpY2F0
aW9uTWFuaWZlc3RCbG9jayBibG9jaykKIHsKICNpZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZF
U1QpCi0gICAgdG9JbXBsKHBhZ2UpLT5nZXRBcHBsaWNhdGlvbk1hbmlmZXN0KFtibG9ja10oY29u
c3Qgc3RkOjpvcHRpb25hbDxXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0PiAmbWFuaWZlc3Qs
IENhbGxiYWNrQmFzZTo6RXJyb3IpIHsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlKS0+Z2V0QXBw
bGljYXRpb25NYW5pZmVzdChbYmxvY2tdKGNvbnN0IHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6QXBw
bGljYXRpb25NYW5pZmVzdD4gJm1hbmlmZXN0LCBDYWxsYmFja0Jhc2U6OkVycm9yKSB7CiAgICAg
ICAgIGJsb2NrKCk7CiAgICAgfSk7CiAjZWxzZSAvLyBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZF
U1QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1BhZ2VDb25m
aWd1cmF0aW9uUmVmLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUNv
bmZpZ3VyYXRpb25SZWYuY3BwCmluZGV4IGM3NTRhOWY1NmY2YmNmYTA2N2IyMGNhZTdlMDk4YWMw
ZTIyNTExN2MuLjY0ZGFkY2IyMDlhZDAwYzAyYzBlN2M0MDQ2MjcyYzQ4MmY1ZDAxMDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUNvbmZpZ3VyYXRpb25S
ZWYuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUNvbmZpZ3Vy
YXRpb25SZWYuY3BwCkBAIC00Niw3MCArNDYsNzAgQEAgV0tQYWdlQ29uZmlndXJhdGlvblJlZiBX
S1BhZ2VDb25maWd1cmF0aW9uQ3JlYXRlKCkKIAogV0tDb250ZXh0UmVmIFdLUGFnZUNvbmZpZ3Vy
YXRpb25HZXRDb250ZXh0KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsK
LSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5wcm9jZXNzUG9vbCgpKTsK
KyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnByb2Nlc3NQ
b29sKCkpOwogfQogCiB2b2lkIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRDb250ZXh0KFdLUGFnZUNv
bmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbiwgV0tDb250ZXh0UmVmIGNvbnRleHQpCiB7Ci0g
ICAgdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRQcm9jZXNzUG9vbCh0b0ltcGwoY29udGV4dCkp
OworICAgIFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRQcm9jZXNzUG9vbChXZWJL
aXQ6OnRvSW1wbChjb250ZXh0KSk7CiB9CiAKIFdLUGFnZUdyb3VwUmVmIFdLUGFnZUNvbmZpZ3Vy
YXRpb25HZXRQYWdlR3JvdXAoV0tQYWdlQ29uZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKQog
ewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoY29uZmlndXJhdGlvbiktPnBhZ2VHcm91cCgpKTsK
KyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnBhZ2VHcm91
cCgpKTsKIH0KIAogdm9pZCBXS1BhZ2VDb25maWd1cmF0aW9uU2V0UGFnZUdyb3VwKFdLUGFnZUNv
bmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbiwgV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKQog
ewotICAgIHRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0UGFnZUdyb3VwKHRvSW1wbChwYWdlR3Jv
dXApKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0UGFnZUdyb3VwKFdl
YktpdDo6dG9JbXBsKHBhZ2VHcm91cCkpOwogfQogCiBXS1VzZXJDb250ZW50Q29udHJvbGxlclJl
ZiBXS1BhZ2VDb25maWd1cmF0aW9uR2V0VXNlckNvbnRlbnRDb250cm9sbGVyKFdLUGFnZUNvbmZp
Z3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICByZXR1cm4gdG9BUEkodG9JbXBsKGNv
bmZpZ3VyYXRpb24pLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CisgICAgcmV0dXJuIHRvQVBJ
KFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSk7
CiB9CiAKIHZvaWQgV0tQYWdlQ29uZmlndXJhdGlvblNldFVzZXJDb250ZW50Q29udHJvbGxlcihX
S1BhZ2VDb25maWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIFdLVXNlckNvbnRlbnRDb250cm9s
bGVyUmVmIHVzZXJDb250ZW50Q29udHJvbGxlcikKIHsKLSAgICB0b0ltcGwoY29uZmlndXJhdGlv
biktPnNldFVzZXJDb250ZW50Q29udHJvbGxlcih0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVy
KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldFVzZXJDb250ZW50Q29u
dHJvbGxlcihXZWJLaXQ6OnRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xsZXIpKTsKIH0KIAogV0tQ
cmVmZXJlbmNlc1JlZiBXS1BhZ2VDb25maWd1cmF0aW9uR2V0UHJlZmVyZW5jZXMoV0tQYWdlQ29u
ZmlndXJhdGlvblJlZiBjb25maWd1cmF0aW9uKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwo
Y29uZmlndXJhdGlvbiktPnByZWZlcmVuY2VzKCkpOworICAgIHJldHVybiB0b0FQSShXZWJLaXQ6
OnRvSW1wbChjb25maWd1cmF0aW9uKS0+cHJlZmVyZW5jZXMoKSk7CiB9CiAKIHZvaWQgV0tQYWdl
Q29uZmlndXJhdGlvblNldFByZWZlcmVuY2VzKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmln
dXJhdGlvbiwgV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlcykKIHsKLSAgICB0b0ltcGwoY29u
ZmlndXJhdGlvbiktPnNldFByZWZlcmVuY2VzKHRvSW1wbChwcmVmZXJlbmNlcykpOworICAgIFdl
YktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRQcmVmZXJlbmNlcyhXZWJLaXQ6OnRvSW1w
bChwcmVmZXJlbmNlcykpOwogfQogCiBXS1BhZ2VSZWYgV0tQYWdlQ29uZmlndXJhdGlvbkdldFJl
bGF0ZWRQYWdlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbikKIHsKLSAgICBy
ZXR1cm4gdG9BUEkodG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5yZWxhdGVkUGFnZSgpKTsKKyAgICBy
ZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnJlbGF0ZWRQYWdlKCkp
OwogfQogCiB2b2lkIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRSZWxhdGVkUGFnZShXS1BhZ2VDb25m
aWd1cmF0aW9uUmVmIGNvbmZpZ3VyYXRpb24sIFdLUGFnZVJlZiByZWxhdGVkUGFnZSkKIHsKLSAg
ICB0b0ltcGwoY29uZmlndXJhdGlvbiktPnNldFJlbGF0ZWRQYWdlKHRvSW1wbChyZWxhdGVkUGFn
ZSkpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRSZWxhdGVkUGFnZShX
ZWJLaXQ6OnRvSW1wbChyZWxhdGVkUGFnZSkpOwogfQogCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYg
V0tQYWdlQ29uZmlndXJhdGlvbkdldFdlYnNpdGVEYXRhU3RvcmUoV0tQYWdlQ29uZmlndXJhdGlv
blJlZiBjb25maWd1cmF0aW9uKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwoY29uZmlndXJh
dGlvbiktPndlYnNpdGVEYXRhU3RvcmUoKSk7CisgICAgcmV0dXJuIHRvQVBJKFdlYktpdDo6dG9J
bXBsKGNvbmZpZ3VyYXRpb24pLT53ZWJzaXRlRGF0YVN0b3JlKCkpOwogfQogCiB2b2lkIFdLUGFn
ZUNvbmZpZ3VyYXRpb25TZXRXZWJzaXRlRGF0YVN0b3JlKFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYg
Y29uZmlndXJhdGlvbiwgV0tXZWJzaXRlRGF0YVN0b3JlUmVmIHdlYnNpdGVEYXRhU3RvcmUpCiB7
Ci0gICAgdG9JbXBsKGNvbmZpZ3VyYXRpb24pLT5zZXRXZWJzaXRlRGF0YVN0b3JlKHRvSW1wbCh3
ZWJzaXRlRGF0YVN0b3JlKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwoY29uZmlndXJhdGlvbiktPnNl
dFdlYnNpdGVEYXRhU3RvcmUoV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZURhdGFTdG9yZSkpOwogfQog
CiB2b2lkIFdLUGFnZUNvbmZpZ3VyYXRpb25TZXRJbml0aWFsQ2FwaXRhbGl6YXRpb25FbmFibGVk
KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmlndXJhdGlvbiwgYm9vbCBlbmFibGVkKQogewot
ICAgIHRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0SW5pdGlhbENhcGl0YWxpemF0aW9uRW5hYmxl
ZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChjb25maWd1cmF0aW9uKS0+c2V0SW5pdGlh
bENhcGl0YWxpemF0aW9uRW5hYmxlZChlbmFibGVkKTsKIH0KIAogdm9pZCBXS1BhZ2VDb25maWd1
cmF0aW9uU2V0QmFja2dyb3VuZENQVUxpbWl0KFdLUGFnZUNvbmZpZ3VyYXRpb25SZWYgY29uZmln
dXJhdGlvbiwgZG91YmxlIGNwdUxpbWl0KQogewotICAgIHRvSW1wbChjb25maWd1cmF0aW9uKS0+
c2V0Q1BVTGltaXQoY3B1TGltaXQpOworICAgIFdlYktpdDo6dG9JbXBsKGNvbmZpZ3VyYXRpb24p
LT5zZXRDUFVMaW1pdChjcHVMaW1pdCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1BhZ2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1BhZ2VHcm91cC5jcHAKaW5kZXggMDM3NzQxMGVhN2U2N2U2YjA5MTBjZmJjMDVhOWIz
MmY1OGNiNDNlMi4uZjZlZmM0ZDEyNGIzMDg4MTU5MDE0Mjk0NzZlNTAyNWM5OTE4N2RjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQYWdlR3JvdXAuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUGFnZUdyb3VwLmNwcApAQCAtNTMs
MTcgKzUzLDE3IEBAIFdLUGFnZUdyb3VwUmVmIFdLUGFnZUdyb3VwQ3JlYXRlV2l0aElkZW50aWZp
ZXIoV0tTdHJpbmdSZWYgaWRlbnRpZmllcikKIAogdm9pZCBXS1BhZ2VHcm91cFNldFByZWZlcmVu
Y2VzKFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZiwgV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlc1JlZikKIHsKLSAgICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+c2V0UHJlZmVyZW5jZXModG9J
bXBsKHByZWZlcmVuY2VzUmVmKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVmKS0+
c2V0UHJlZmVyZW5jZXMoV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpKTsKIH0KIAogV0tQ
cmVmZXJlbmNlc1JlZiBXS1BhZ2VHcm91cEdldFByZWZlcmVuY2VzKFdLUGFnZUdyb3VwUmVmIHBh
Z2VHcm91cFJlZikKIHsKLSAgICByZXR1cm4gdG9BUEkoJnRvSW1wbChwYWdlR3JvdXBSZWYpLT5w
cmVmZXJlbmNlcygpKTsKKyAgICByZXR1cm4gdG9BUEkoJldlYktpdDo6dG9JbXBsKHBhZ2VHcm91
cFJlZiktPnByZWZlcmVuY2VzKCkpOwogfQogCiBXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiBX
S1BhZ2VHcm91cEdldFVzZXJDb250ZW50Q29udHJvbGxlcihXS1BhZ2VHcm91cFJlZiBwYWdlR3Jv
dXBSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQVBJKCZ0b0ltcGwocGFnZUdyb3VwUmVmKS0+dXNlckNv
bnRlbnRDb250cm9sbGVyKCkpOworICAgIHJldHVybiB0b0FQSSgmV2ViS2l0Ojp0b0ltcGwocGFn
ZUdyb3VwUmVmKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkpOwogfQogCiB2b2lkIFdLUGFnZUdy
b3VwQWRkVXNlclN0eWxlU2hlZXQoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1N0cmlu
Z1JlZiBzb3VyY2VSZWYsIFdLVVJMUmVmIGJhc2VVUkxSZWYsIFdLQXJyYXlSZWYgd2hpdGVsaXN0
ZWRVUkxQYXR0ZXJucywgV0tBcnJheVJlZiBibGFja2xpc3RlZFVSTFBhdHRlcm5zLCBXS1VzZXJD
b250ZW50SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMpCkBAIC03NCwxNyArNzQsMTcgQEAg
dm9pZCBXS1BhZ2VHcm91cEFkZFVzZXJTdHlsZVNoZWV0KFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91
cFJlZiwgV0tTdHJpbmdSZWYgc291cmMKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBiYXNl
VVJMU3RyaW5nID0gdG9XVEZTdHJpbmcoYmFzZVVSTFJlZik7Ci0gICAgYXV0byB3aGl0ZWxpc3Qg
PSB0b0ltcGwod2hpdGVsaXN0ZWRVUkxQYXR0ZXJucyk7Ci0gICAgYXV0byBibGFja2xpc3QgPSB0
b0ltcGwoYmxhY2tsaXN0ZWRVUkxQYXR0ZXJucyk7CisgICAgYXV0byB3aGl0ZWxpc3QgPSBXZWJL
aXQ6OnRvSW1wbCh3aGl0ZWxpc3RlZFVSTFBhdHRlcm5zKTsKKyAgICBhdXRvIGJsYWNrbGlzdCA9
IFdlYktpdDo6dG9JbXBsKGJsYWNrbGlzdGVkVVJMUGF0dGVybnMpOwogCiAgICAgUmVmPEFQSTo6
VXNlclN0eWxlU2hlZXQ+IHVzZXJTdHlsZVNoZWV0ID0gQVBJOjpVc2VyU3R5bGVTaGVldDo6Y3Jl
YXRlKFdlYkNvcmU6OlVzZXJTdHlsZVNoZWV0IHsgc291cmNlLCAoYmFzZVVSTFN0cmluZy5pc0Vt
cHR5KCkgPyBXVEY6OmJsYW5rVVJMKCkgOiAgVVJMKFVSTCgpLCBiYXNlVVJMU3RyaW5nKSksIHdo
aXRlbGlzdCA/IHdoaXRlbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+KCks
IGJsYWNrbGlzdCA/IGJsYWNrbGlzdC0+dG9TdHJpbmdWZWN0b3IoKSA6IFZlY3RvcjxTdHJpbmc+
KCksIHRvVXNlckNvbnRlbnRJbmplY3RlZEZyYW1lcyhpbmplY3RlZEZyYW1lcyksIFdlYkNvcmU6
OlVzZXJTdHlsZVVzZXJMZXZlbCB9LCBBUEk6OlVzZXJDb250ZW50V29ybGQ6Om5vcm1hbFdvcmxk
KCkpOwogCi0gICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJDb250ZW50Q29udHJvbGxlcigp
LmFkZFVzZXJTdHlsZVNoZWV0KHVzZXJTdHlsZVNoZWV0LmdldCgpKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwYWdlR3JvdXBSZWYpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5hZGRVc2VyU3R5bGVT
aGVldCh1c2VyU3R5bGVTaGVldC5nZXQoKSk7CiB9CiAKIHZvaWQgV0tQYWdlR3JvdXBSZW1vdmVB
bGxVc2VyU3R5bGVTaGVldHMoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwKQogewotICAgIHRvSW1w
bChwYWdlR3JvdXApLT51c2VyQ29udGVudENvbnRyb2xsZXIoKS5yZW1vdmVBbGxVc2VyU3R5bGVT
aGVldHMoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXApLT51c2VyQ29udGVudENvbnRy
b2xsZXIoKS5yZW1vdmVBbGxVc2VyU3R5bGVTaGVldHMoKTsKIH0KIAogdm9pZCBXS1BhZ2VHcm91
cEFkZFVzZXJTY3JpcHQoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1N0cmluZ1JlZiBz
b3VyY2VSZWYsIFdLVVJMUmVmIGJhc2VVUkxSZWYsIFdLQXJyYXlSZWYgd2hpdGVsaXN0ZWRVUkxQ
YXR0ZXJucywgV0tBcnJheVJlZiBibGFja2xpc3RlZFVSTFBhdHRlcm5zLCBXS1VzZXJDb250ZW50
SW5qZWN0ZWRGcmFtZXMgaW5qZWN0ZWRGcmFtZXMsIF9XS1VzZXJTY3JpcHRJbmplY3Rpb25UaW1l
IGluamVjdGlvblRpbWUpCkBAIC05NSwxNSArOTUsMTUgQEAgdm9pZCBXS1BhZ2VHcm91cEFkZFVz
ZXJTY3JpcHQoV0tQYWdlR3JvdXBSZWYgcGFnZUdyb3VwUmVmLCBXS1N0cmluZ1JlZiBzb3VyY2VS
ZWYKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBiYXNlVVJMU3RyaW5nID0gdG9XVEZTdHJp
bmcoYmFzZVVSTFJlZik7Ci0gICAgYXV0byB3aGl0ZWxpc3QgPSB0b0ltcGwod2hpdGVsaXN0ZWRV
UkxQYXR0ZXJucyk7Ci0gICAgYXV0byBibGFja2xpc3QgPSB0b0ltcGwoYmxhY2tsaXN0ZWRVUkxQ
YXR0ZXJucyk7CisgICAgYXV0byB3aGl0ZWxpc3QgPSBXZWJLaXQ6OnRvSW1wbCh3aGl0ZWxpc3Rl
ZFVSTFBhdHRlcm5zKTsKKyAgICBhdXRvIGJsYWNrbGlzdCA9IFdlYktpdDo6dG9JbXBsKGJsYWNr
bGlzdGVkVVJMUGF0dGVybnMpOwogICAgIAogICAgIGF1dG8gdXJsID0gYmFzZVVSTFN0cmluZy5p
c0VtcHR5KCkgPyBXVEY6OmJsYW5rVVJMKCkgOiAgVVJMKFVSTCgpLCBiYXNlVVJMU3RyaW5nKTsK
ICAgICBSZWY8QVBJOjpVc2VyU2NyaXB0PiB1c2VyU2NyaXB0ID0gQVBJOjpVc2VyU2NyaXB0Ojpj
cmVhdGUoV2ViQ29yZTo6VXNlclNjcmlwdCB7IFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh1cmwp
LCB3aGl0ZWxpc3QgPyB3aGl0ZWxpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3RyaW5n
PigpLCBibGFja2xpc3QgPyBibGFja2xpc3QtPnRvU3RyaW5nVmVjdG9yKCkgOiBWZWN0b3I8U3Ry
aW5nPigpLCB0b1VzZXJTY3JpcHRJbmplY3Rpb25UaW1lKGluamVjdGlvblRpbWUpLCB0b1VzZXJD
b250ZW50SW5qZWN0ZWRGcmFtZXMoaW5qZWN0ZWRGcmFtZXMpIH0sIEFQSTo6VXNlckNvbnRlbnRX
b3JsZDo6bm9ybWFsV29ybGQoKSk7Ci0gICAgdG9JbXBsKHBhZ2VHcm91cFJlZiktPnVzZXJDb250
ZW50Q29udHJvbGxlcigpLmFkZFVzZXJTY3JpcHQodXNlclNjcmlwdC5nZXQoKSwgSW5qZWN0VXNl
clNjcmlwdEltbWVkaWF0ZWx5OjpObyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocGFnZUdyb3VwUmVm
KS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkuYWRkVXNlclNjcmlwdCh1c2VyU2NyaXB0LmdldCgp
LCBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRlbHk6Ok5vKTsKIH0KIAogdm9pZCBXS1BhZ2VHcm91
cFJlbW92ZUFsbFVzZXJTY3JpcHRzKFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cFJlZikKIHsKLSAg
ICB0b0ltcGwocGFnZUdyb3VwUmVmKS0+dXNlckNvbnRlbnRDb250cm9sbGVyKCkucmVtb3ZlQWxs
VXNlclNjcmlwdHMoKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwYWdlR3JvdXBSZWYpLT51c2VyQ29u
dGVudENvbnRyb2xsZXIoKS5yZW1vdmVBbGxVc2VyU2NyaXB0cygpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAppbmRleCA5YmM5NGI0Nzc1
NDhiMWY5NjFiNWYwMTlmMjk4NDE2YmQ0MmE5NDUwLi4xZGJhNjE2NzYzMWM5NGQ2YzIzY2QwODU4
Y2U4MjZjNmE2Y2QxMDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Qy9XS1ByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcApAQCAtNTQsNzA5ICs1NCw3MDkgQEAgV0tQcmVmZXJlbmNlc1JlZiBX
S1ByZWZlcmVuY2VzQ3JlYXRlV2l0aElkZW50aWZpZXIoV0tTdHJpbmdSZWYgaWRlbnRpZmllclJl
ZikKIAogV0tQcmVmZXJlbmNlc1JlZiBXS1ByZWZlcmVuY2VzQ3JlYXRlQ29weShXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIGF1dG8gcHJlZmVyZW5jZXMgPSB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5jb3B5KCk7CisgICAgYXV0byBwcmVmZXJlbmNlcyA9IFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Y29weSgpOwogICAgIHJldHVybiB0b0FQSSgmcHJlZmVy
ZW5jZXMubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzRW5hYmxlQWxsRXhwZXJp
bWVudGFsRmVhdHVyZXMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5lbmFibGVBbGxFeHBlcmltZW50YWxGZWF0dXJlcygpOwor
ICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZW5hYmxlQWxsRXhwZXJpbWVudGFs
RmVhdHVyZXMoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RXhwZXJpbWVudGFsRmVhdHVy
ZUZvcktleShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIHZhbHVlLCBXS1N0
cmluZ1JlZiBleHBlcmltZW50YWxGZWF0dXJlS2V5KQogewotICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldEV4cGVyaW1lbnRhbEZlYXR1cmVFbmFibGVkRm9yS2V5KHRvV1RGU3RyaW5nKGV4
cGVyaW1lbnRhbEZlYXR1cmVLZXkpLCB2YWx1ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRFeHBlcmltZW50YWxGZWF0dXJlRW5hYmxlZEZvcktleSh0b1dURlN0cmlu
ZyhleHBlcmltZW50YWxGZWF0dXJlS2V5KSwgdmFsdWUpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5j
ZXNSZXNldEFsbEludGVybmFsRGVidWdGZWF0dXJlcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnJlc2V0QWxsSW50ZXJuYWxE
ZWJ1Z0ZlYXR1cmVzKCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5yZXNl
dEFsbEludGVybmFsRGVidWdGZWF0dXJlcygpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRJ
bnRlcm5hbERlYnVnRmVhdHVyZUZvcktleShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
LCBib29sIHZhbHVlLCBXS1N0cmluZ1JlZiBpbnRlcm5hbERlYnVnRmVhdHVyZUtleSkKIHsKLSAg
ICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRJbnRlcm5hbERlYnVnRmVhdHVyZUVuYWJsZWRG
b3JLZXkodG9XVEZTdHJpbmcoaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVLZXkpLCB2YWx1ZSk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRJbnRlcm5hbERlYnVnRmVhdHVyZUVu
YWJsZWRGb3JLZXkodG9XVEZTdHJpbmcoaW50ZXJuYWxEZWJ1Z0ZlYXR1cmVLZXkpLCB2YWx1ZSk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgamF2YVNjcmlwdEVuYWJsZWQpCiB7Ci0gICAgdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SmF2YVNjcmlwdEVuYWJsZWQoamF2YVNjcmlwdEVuYWJs
ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SmF2YVNjcmlwdEVu
YWJsZWQoamF2YVNjcmlwdEVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRKYXZh
U2NyaXB0RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJl
dHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5qYXZhU2NyaXB0RW5hYmxlZCgpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmphdmFTY3JpcHRFbmFibGVkKCk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEphdmFTY3JpcHRNYXJrdXBFbmFibGVkKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgamF2YVNjcmlwdE1hcmt1cEVuYWJsZWQp
CiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SmF2YVNjcmlwdE1hcmt1cEVuYWJs
ZWQoamF2YVNjcmlwdE1hcmt1cEVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0SmF2YVNjcmlwdE1hcmt1cEVuYWJsZWQoamF2YVNjcmlwdE1hcmt1cEVuYWJs
ZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5qYXZhU2NyaXB0TWFya3VwRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmphdmFTY3JpcHRNYXJrdXBFbmFibGVkKCk7CiB9
CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkK
IHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkobG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShsb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHkpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
KCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldExvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFn
ZUxvYWRpbmdQcmVmZXJlbmNlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
bG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UpCiB7Ci0gICAgdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGlu
Z1ByZWZlcmVuY2UobG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2Up
OworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TG9hZHNTaXRlSWNvbnNJ
Z25vcmluZ0ltYWdlTG9hZGluZ1ByZWZlcmVuY2UobG9hZHNTaXRlSWNvbnNJZ25vcmluZ0ltYWdl
TG9hZGluZ1ByZWZlcmVuY2UpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRMb2Fkc1NpdGVJ
Y29uc0lnbm9yaW5nSW1hZ2VMb2FkaW5nUHJlZmVyZW5jZShXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5sb2Fkc1Np
dGVJY29uc0lnbm9yaW5nSW1hZ2VMb2FkaW5nUHJlZmVyZW5jZSgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmxvYWRzU2l0ZUljb25zSWdub3JpbmdJbWFnZUxv
YWRpbmdQcmVmZXJlbmNlKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE9mZmxpbmVXZWJB
cHBsaWNhdGlvbkNhY2hlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBi
b29sIG9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQob2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChvZmZsaW5lV2Vi
QXBwbGljYXRpb25DYWNoZUVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRPZmZs
aW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+b2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+b2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKCk7CiB9CiAKIHZv
aWQgV0tQcmVmZXJlbmNlc1NldExvY2FsU3RvcmFnZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZiwgYm9vbCBsb2NhbFN0b3JhZ2VFbmFibGVkKQogewotICAgIHRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNldExvY2FsU3RvcmFnZUVuYWJsZWQobG9jYWxTdG9yYWdlRW5hYmxl
ZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRMb2NhbFN0b3JhZ2VF
bmFibGVkKGxvY2FsU3RvcmFnZUVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRM
b2NhbFN0b3JhZ2VFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmxvY2FsU3RvcmFnZUVuYWJsZWQoKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5sb2NhbFN0b3JhZ2VF
bmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldERhdGFiYXNlc0VuYWJsZWQoV0tQ
cmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBkYXRhYmFzZXNFbmFibGVkKQogewot
ICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldERhdGFiYXNlc0VuYWJsZWQoZGF0YWJhc2Vz
RW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXREYXRhYmFz
ZXNFbmFibGVkKGRhdGFiYXNlc0VuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRE
YXRhYmFzZXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmRhdGFiYXNlc0VuYWJsZWQoKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5kYXRhYmFzZXNFbmFibGVkKCk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFhTU0F1ZGl0b3JFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgeHNzQXVkaXRvckVuYWJsZWQpCiB7Ci0gICAgdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0WFNTQXVkaXRvckVuYWJsZWQoeHNzQXVkaXRvckVuYWJs
ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0WFNTQXVkaXRvckVu
YWJsZWQoeHNzQXVkaXRvckVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRYU1NB
dWRpdG9yRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJl
dHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT54c3NBdWRpdG9yRW5hYmxlZCgpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnhzc0F1ZGl0b3JFbmFibGVkKCk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmcmFtZUZsYXR0ZW5pbmdFbmFibGVkKQog
ewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQo
ZnJhbWVGbGF0dGVuaW5nRW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGZyYW1lRmxhdHRlbmluZ0VuYWJsZWQpOwog
fQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPmZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5mcmFtZUZsYXR0ZW5pbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQg
V0tQcmVmZXJlbmNlc1NldFBsdWdpbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYsIGJvb2wgcGx1Z2luc0VuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0UGx1Z2luc0VuYWJsZWQocGx1Z2luc0VuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0UGx1Z2luc0VuYWJsZWQocGx1Z2luc0VuYWJsZWQpOwogfQog
CiBib29sIFdLUHJlZmVyZW5jZXNHZXRQbHVnaW5zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wbHVn
aW5zRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnBsdWdpbnNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEphdmFFbmFibGVk
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgamF2YUVuYWJsZWQpCiB7Ci0g
ICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SmF2YUVuYWJsZWQoamF2YUVuYWJsZWQpOwor
ICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SmF2YUVuYWJsZWQoamF2YUVu
YWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRKYXZhRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5qYXZhRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPmphdmFFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEphdmFFbmFi
bGVkRm9yTG9jYWxGaWxlcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGph
dmFFbmFibGVkRm9yTG9jYWxGaWxlcykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMoamF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEphdmFFbmFibGVkRm9yTG9jYWxG
aWxlcyhqYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNH
ZXRKYXZhRW5hYmxlZEZvckxvY2FsRmlsZXMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+amF2YUVuYWJsZWRGb3JM
b2NhbEZpbGVzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
amF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEph
dmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZiwgYm9vbCBqYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KQog
ewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93
c0F1dG9tYXRpY2FsbHkoamF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRKYXZhU2NyaXB0Q2FuT3Blbldp
bmRvd3NBdXRvbWF0aWNhbGx5KGphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkp
OwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRv
bWF0aWNhbGx5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRp
Y2FsbHkoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5qYXZh
U2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJl
bmNlc1NldFN0b3JhZ2VBY2Nlc3NQcm9tcHRzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKGVuYWJs
ZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRTdG9yYWdlQWNjZXNzUHJvbXB0c0VuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c3RvcmFnZUFjY2Vzc1Byb21wdHNFbmFibGVkKCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c3RvcmFnZUFjY2Vzc1Byb21wdHNF
bmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEh5cGVybGlua0F1ZGl0aW5nRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGh5cGVybGlua0F1ZGl0
aW5nRW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRIeXBlcmxpbmtB
dWRpdGluZ0VuYWJsZWQoaHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZChoeXBlcmxp
bmtBdWRpdGluZ0VuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRIeXBlcmxpbmtB
dWRpdGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aHlwZXJsaW5rQXVk
aXRpbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFN0YW5kYXJkRm9udEZh
bWlseShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBXS1N0cmluZ1JlZiBmYW1pbHkp
CiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U3RhbmRhcmRGb250RmFtaWx5KHRv
V1RGU3RyaW5nKGZhbWlseSkpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0U3RhbmRhcmRGb250RmFtaWx5KHRvV1RGU3RyaW5nKGZhbWlseSkpOwogfQogCiBXS1N0cmlu
Z1JlZiBXS1ByZWZlcmVuY2VzQ29weVN0YW5kYXJkRm9udEZhbWlseShXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zdGFuZGFyZEZvbnRGYW1pbHkoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJ
KFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c3RhbmRhcmRGb250RmFtaWx5KCkpOwog
fQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRGaXhlZEZvbnRGYW1pbHkoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZiwgV0tTdHJpbmdSZWYgZmFtaWx5KQogewotICAgIHRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldEZpeGVkRm9udEZhbWlseSh0b1dURlN0cmluZyhmYW1pbHkpKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEZpeGVkRm9udEZhbWlseSh0b1dU
RlN0cmluZyhmYW1pbHkpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tQcmVmZXJlbmNlc0NvcHlGaXhl
ZEZvbnRGYW1pbHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1
cm4gdG9Db3BpZWRBUEkodG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Zml4ZWRGb250RmFtaWx5KCkp
OworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PmZpeGVkRm9udEZhbWlseSgpKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0U2VyaWZGb250
RmFtaWx5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIFdLU3RyaW5nUmVmIGZhbWls
eSkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTZXJpZkZvbnRGYW1pbHkodG9X
VEZTdHJpbmcoZmFtaWx5KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRTZXJpZkZvbnRGYW1pbHkodG9XVEZTdHJpbmcoZmFtaWx5KSk7CiB9CiAKIFdLU3RyaW5nUmVm
IFdLUHJlZmVyZW5jZXNDb3B5U2VyaWZGb250RmFtaWx5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNlcmlmRm9udEZhbWlseSgpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXJpZkZvbnRGYW1pbHkoKSk7CiB9CiAKIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldFNhbnNTZXJpZkZvbnRGYW1pbHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlc1JlZiwgV0tTdHJpbmdSZWYgZmFtaWx5KQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkodG9XVEZTdHJpbmcoZmFtaWx5KSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KHRvV1RG
U3RyaW5nKGZhbWlseSkpOwogfQogCiBXS1N0cmluZ1JlZiBXS1ByZWZlcmVuY2VzQ29weVNhbnNT
ZXJpZkZvbnRGYW1pbHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICBy
ZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2Fuc1NlcmlmRm9udEZh
bWlseSgpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5zYW5zU2VyaWZGb250RmFtaWx5KCkpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNT
ZXRDdXJzaXZlRm9udEZhbWlseShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBXS1N0
cmluZ1JlZiBmYW1pbHkpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q3Vyc2l2
ZUZvbnRGYW1pbHkodG9XVEZTdHJpbmcoZmFtaWx5KSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRDdXJzaXZlRm9udEZhbWlseSh0b1dURlN0cmluZyhmYW1pbHkpKTsK
IH0KIAogV0tTdHJpbmdSZWYgV0tQcmVmZXJlbmNlc0NvcHlDdXJzaXZlRm9udEZhbWlseShXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5jdXJzaXZlRm9udEZhbWlseSgpKTsKKyAgICByZXR1cm4g
dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5jdXJzaXZlRm9udEZh
bWlseSgpKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RmFudGFzeUZvbnRGYW1pbHkoV0tQ
cmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgV0tTdHJpbmdSZWYgZmFtaWx5KQogewotICAg
IHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEZhbnRhc3lGb250RmFtaWx5KHRvV1RGU3RyaW5n
KGZhbWlseSkpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RmFudGFz
eUZvbnRGYW1pbHkodG9XVEZTdHJpbmcoZmFtaWx5KSk7CiB9CiAKIFdLU3RyaW5nUmVmIFdLUHJl
ZmVyZW5jZXNDb3B5RmFudGFzeUZvbnRGYW1pbHkoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKIHsKLSAgICByZXR1cm4gdG9Db3BpZWRBUEkodG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
ZmFudGFzeUZvbnRGYW1pbHkoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+ZmFudGFzeUZvbnRGYW1pbHkoKSk7CiB9CiAKIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldFBpY3RvZ3JhcGhGb250RmFtaWx5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYsIFdLU3RyaW5nUmVmIGZhbWlseSkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseSh0b1dURlN0cmluZyhmYW1pbHkpKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KHRv
V1RGU3RyaW5nKGZhbWlseSkpOwogfQogCiBXS1N0cmluZ1JlZiBXS1ByZWZlcmVuY2VzQ29weVBp
Y3RvZ3JhcGhGb250RmFtaWx5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBpY3RvZ3JhcGhG
b250RmFtaWx5KCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnBpY3RvZ3JhcGhGb250RmFtaWx5KCkpOwogfQogCiB2b2lkIFdLUHJlZmVy
ZW5jZXNTZXREZWZhdWx0Rm9udFNpemUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwg
dWludDMyX3Qgc2l6ZSkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXREZWZhdWx0
Rm9udFNpemUoc2l6ZSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRE
ZWZhdWx0Rm9udFNpemUoc2l6ZSk7CiB9CiAKIHVpbnQzMl90IFdLUHJlZmVyZW5jZXNHZXREZWZh
dWx0Rm9udFNpemUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZGVmYXVsdEZvbnRTaXplKCk7CiB9CiAK
IHZvaWQgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRGaXhlZEZvbnRTaXplKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXNSZWYsIHVpbnQzMl90IHNpemUpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzaXplKTsKIH0KIAog
dWludDMyX3QgV0tQcmVmZXJlbmNlc0dldERlZmF1bHRGaXhlZEZvbnRTaXplKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPmRlZmF1bHRGaXhlZEZvbnRTaXplKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKTsKIH0KIAogdm9pZCBXS1ByZWZl
cmVuY2VzU2V0TWluaW11bUZvbnRTaXplKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYs
IHVpbnQzMl90IHNpemUpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TWluaW11
bUZvbnRTaXplKHNpemUpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0
TWluaW11bUZvbnRTaXplKHNpemUpOwogfQogCiB1aW50MzJfdCBXS1ByZWZlcmVuY2VzR2V0TWlu
aW11bUZvbnRTaXplKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0
dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm1pbmltdW1Gb250U2l6ZSgpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm1pbmltdW1Gb250U2l6ZSgpOwogfQog
CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldENvb2tpZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldENvb2tpZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRDb29raWVFbmFibGVkKGVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVy
ZW5jZXNHZXRDb29raWVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7
Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmNvb2tpZUVuYWJsZWQoKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5jb29raWVFbmFibGVkKCk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEVkaXRhYmxlTGlua0JlaGF2aW9yKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIFdLRWRpdGFibGVMaW5rQmVoYXZpb3Igd2tCZWhhdmlv
cikKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRFZGl0YWJsZUxpbmtCZWhhdmlv
cih0b0VkaXRhYmxlTGlua0JlaGF2aW9yKHdrQmVoYXZpb3IpKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNldEVkaXRhYmxlTGlua0JlaGF2aW9yKHRvRWRpdGFibGVMaW5r
QmVoYXZpb3Iod2tCZWhhdmlvcikpOwogfQogCiBXS0VkaXRhYmxlTGlua0JlaGF2aW9yIFdLUHJl
ZmVyZW5jZXNHZXRFZGl0YWJsZUxpbmtCZWhhdmlvcihXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQogewotICAgIHJldHVybiB0b0FQSShzdGF0aWNfY2FzdDxXZWJDb3JlOjpFZGl0YWJs
ZUxpbmtCZWhhdmlvcj4odG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZWRpdGFibGVMaW5rQmVoYXZp
b3IoKSkpOworICAgIHJldHVybiB0b0FQSShzdGF0aWNfY2FzdDxXZWJDb3JlOjpFZGl0YWJsZUxp
bmtCZWhhdmlvcj4oV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5lZGl0YWJsZUxpbmtC
ZWhhdmlvcigpKSk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldERlZmF1bHRUZXh0RW5jb2Rp
bmdOYW1lKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIFdLU3RyaW5nUmVmIG5hbWUp
CiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05h
bWUodG9XVEZTdHJpbmcobmFtZSkpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUodG9XVEZTdHJpbmcobmFtZSkpOwogfQogCiBX
S1N0cmluZ1JlZiBXS1ByZWZlcmVuY2VzQ29weURlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkpOworICAgIHJl
dHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmRlZmF1bHRU
ZXh0RW5jb2RpbmdOYW1lKCkpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQcml2YXRlQnJv
d3NpbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFi
bGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0UHJp
dmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0
UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wcml2YXRlQnJvd3NpbmdFbmFi
bGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXREZXZlbG9wZXJF
eHRyYXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFi
bGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5kZXZlbG9wZXJFeHRyYXNFbmFi
bGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZGV2ZWxv
cGVyRXh0cmFzRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0
UnVudGltZUZsYWdzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIFdLSmF2YVNjcmlw
dFJ1bnRpbWVGbGFnU2V0IGphdmFTY3JpcHRSdW50aW1lRmxhZ1NldCkKIHsKLSAgICB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRKYXZhU2NyaXB0UnVudGltZUZsYWdzKGphdmFTY3JpcHRSdW50
aW1lRmxhZ1NldCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRKYXZh
U2NyaXB0UnVudGltZUZsYWdzKGphdmFTY3JpcHRSdW50aW1lRmxhZ1NldCk7CiB9CiAKIFdLSmF2
YVNjcmlwdFJ1bnRpbWVGbGFnU2V0IFdLUHJlZmVyZW5jZXNHZXRKYXZhU2NyaXB0UnVudGltZUZs
YWdzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPmphdmFTY3JpcHRSdW50aW1lRmxhZ3MoKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5qYXZhU2NyaXB0UnVudGltZUZsYWdzKCk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFRleHRBcmVhc0FyZVJlc2l6YWJsZShXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIHJlc2l6YWJsZSkKIHsKLSAgICB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUocmVzaXphYmxlKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFRleHRBcmVhc0FyZVJlc2l6YWJs
ZShyZXNpemFibGUpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRUZXh0QXJlYXNBcmVSZXNp
emFibGUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAg
ICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTdWJwaXhlbEFudGlhbGlhc2VkTGF5ZXJUZXh0
RW5hYmxlZChmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFN1
YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJl
ZmVyZW5jZXNHZXRTdWJwaXhlbEFudGlhbGlhc2VkTGF5ZXJUZXh0RW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zdWJwaXhlbEFudGlhbGlhc2VkTGF5ZXJUZXh0RW5hYmxlZCgpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRl
eHRFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkRHJhd2lu
Z0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewot
ICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQo
ZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBY2NlbGVyYXRl
ZERyYXdpbmdFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVy
YXRlZERyYXdpbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hY2NlbGVy
YXRlZERyYXdpbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldENhbnZhc1Vz
ZXNBY2NlbGVyYXRlZERyYXdpbmcoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9v
bCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldENhbnZhc1VzZXNBY2Nl
bGVyYXRlZERyYXdpbmcoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKGZsYWcpOwogfQogCiBib29sIFdLUHJl
ZmVyZW5jZXNHZXRDYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmNh
bnZhc1VzZXNBY2NlbGVyYXRlZERyYXdpbmcoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5jYW52YXNVc2VzQWNjZWxlcmF0ZWREcmF3aW5nKCk7CiB9CiAKIHZv
aWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZChmbGFnKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdF
bmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJl
dHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxl
ZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldENvbXBv
c2l0aW5nQm9yZGVyc1Zpc2libGUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9v
bCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldENvbXBvc2l0aW5nQm9y
ZGVyc1Zpc2libGUoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5j
ZXNHZXRDb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmNvbXBvc2l0aW5n
Qm9yZGVyc1Zpc2libGUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5jb21wb3NpdGluZ0JvcmRlcnNWaXNpYmxlKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNl
c1NldENvbXBvc2l0aW5nUmVwYWludENvdW50ZXJzVmlzaWJsZShXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKGZsYWcpOworICAgIFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNp
YmxlKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRDb21wb3NpdGluZ1JlcGFpbnRD
b3VudGVyc1Zpc2libGUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Y29tcG9zaXRpbmdSZXBhaW50Q291bnRlcnNW
aXNpYmxlKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Y29t
cG9zaXRpbmdSZXBhaW50Q291bnRlcnNWaXNpYmxlKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNl
c1NldFRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yVmlzaWJsZShXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0
VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JWaXNpYmxlKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JWaXNpYmxlKGZsYWcp
OwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRUaWxlZFNjcm9sbGluZ0luZGljYXRvclZpc2li
bGUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JWaXNpYmxlKCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JWaXNpYmxlKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkdMRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0V2ViR0xFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0V2ViR0xFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdL
UHJlZmVyZW5jZXNHZXRXZWJHTEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViR0xFbmFibGVkKCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViR0xFbmFibGVk
KCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmlu
ZyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Rm9yY2VTb2Z0d2FyZVdlYkdMUmVuZGVyaW5nKGZsYWcp
OworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Rm9yY2VTb2Z0d2FyZVdl
YkdMUmVuZGVyaW5nKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRGb3JjZVNvZnR3
YXJlV2ViR0xSZW5kZXJpbmcoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Zm9yY2VTb2Z0d2FyZVdlYkdMUmVuZGVy
aW5nKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Zm9yY2VT
b2Z0d2FyZVdlYkdMUmVuZGVyaW5nKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2Vs
ZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJv
b2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBY2NlbGVyYXRlZDJk
Q2FudmFzRW5hYmxlZChmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnNldEFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVy
ZW5jZXNHZXRBY2NlbGVyYXRlZDJEQ2FudmFzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hY2NlbGVy
YXRlZDJkQ2FudmFzRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPmFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVm
ZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJB
bmltYXRpb25zRW5hYmxlZChmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5j
ZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBbmltYXRpb25zRW5h
YmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPndlYkFu
aW1hdGlvbnNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwg
Ym9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFdlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGZsYWcpOwog
fQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
ZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXROZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyhmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNVc2VM
ZWdhY3lUZXh0QWxpZ25Qb3NpdGlvbmVkRWxlbWVudEJlaGF2aW9yKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnVz
ZUxlZ2FjeVRleHRBbGlnblBvc2l0aW9uZWRFbGVtZW50QmVoYXZpb3IoKTsKKyAgICByZXR1cm4g
V2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT51c2VMZWdhY3lUZXh0QWxpZ25Qb3NpdGlv
bmVkRWxlbWVudEJlaGF2aW9yKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFVzZUxlZ2Fj
eVRleHRBbGlnblBvc2l0aW9uZWRFbGVtZW50QmVoYXZpb3IoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dFVzZUxlZ2FjeVRleHRBbGlnblBvc2l0aW9uZWRFbGVtZW50QmVoYXZpb3IoZmxhZyk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRVc2VMZWdhY3lUZXh0QWxpZ25Qb3Np
dGlvbmVkRWxlbWVudEJlaGF2aW9yKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRO
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5uZWVkc1NpdGVTcGVjaWZpY1F1
aXJrcygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEZvcmNlRlRQ
RGlyZWN0b3J5TGlzdGluZ3MoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBm
bGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEZvcmNlRlRQRGlyZWN0b3J5
TGlzdGluZ3MoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRG
b3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNH
ZXRGb3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmZvcmNlRlRQRGlyZWN0
b3J5TGlzdGluZ3MoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5mb3JjZUZUUERpcmVjdG9yeUxpc3RpbmdzKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1Nl
dEZUUERpcmVjdG9yeVRlbXBsYXRlUGF0aChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
LCBXS1N0cmluZ1JlZiBwYXRoUmVmKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dEZUUERpcmVjdG9yeVRlbXBsYXRlUGF0aCh0b1dURlN0cmluZyhwYXRoUmVmKSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRGVFBEaXJlY3RvcnlUZW1wbGF0ZVBhdGgo
dG9XVEZTdHJpbmcocGF0aFJlZikpOwogfQogCiBXS1N0cmluZ1JlZiBXS1ByZWZlcmVuY2VzQ29w
eUZUUERpcmVjdG9yeVRlbXBsYXRlUGF0aChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5mdHBE
aXJlY3RvcnlUZW1wbGF0ZVBhdGgoKSk7CisgICAgcmV0dXJuIHRvQ29waWVkQVBJKFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZnRwRGlyZWN0b3J5VGVtcGxhdGVQYXRoKCkpOwogfQog
CiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRUYWJzVG9MaW5rcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIHRhYnNUb0xpbmtzKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldFRhYnNUb0xpbmtzKHRhYnNUb0xpbmtzKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldFRhYnNUb0xpbmtzKHRhYnNUb0xpbmtzKTsKIH0KIAogYm9vbCBXS1By
ZWZlcmVuY2VzR2V0VGFic1RvTGlua3MoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikK
IHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dGFic1RvTGlua3MoKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT50YWJzVG9MaW5rcygpOwog
fQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldEROU1ByZWZldGNoaW5nRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJL
aXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEROU1ByZWZldGNoaW5nRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKFdL
UHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPmRuc1ByZWZldGNoaW5nRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmRuc1ByZWZldGNoaW5nRW5hYmxlZCgpOwogfQogCiB2
b2lkIFdLUHJlZmVyZW5jZXNTZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoZW5hYmxlZCk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5h
YmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0QXV0aG9yQW5kVXNlclN0
eWxlc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hdXRob3JBbmRVc2Vy
U3R5bGVzRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTaG91bGRQcmludEJh
Y2tncm91bmRzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsK
LSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTaG91bGRQcmludEJhY2tncm91bmRzKGZs
YWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2hvdWxkUHJpbnRC
YWNrZ3JvdW5kcyhmbGFnKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0U2hvdWxkUHJpbnRC
YWNrZ3JvdW5kcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVy
biB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zaG91bGRQcmludEJhY2tncm91bmRzKCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2hvdWxkUHJpbnRCYWNrZ3Jv
dW5kcygpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRET01UaW1lcnNUaHJvdHRsaW5nRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0g
ICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RE9NVGltZXJzVGhyb3R0bGluZ0VuYWJsZWQo
ZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRET01UaW1l
cnNUaHJvdHRsaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0
RE9NVGltZXJzVGhyb3R0bGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZG9tVGltZXJzVGhyb3R0
bGluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5kb21UaW1lcnNUaHJvdHRsaW5nRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNT
ZXRXZWJBcmNoaXZlRGVidWdNb2RlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0V2Vi
QXJjaGl2ZURlYnVnTW9kZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRXZWJBcmNoaXZlRGVidWdNb2RlRW5hYmxlZChlbmFibGVkKTsKIH0K
IAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0V2ViQXJjaGl2ZURlYnVnTW9kZUVuYWJsZWQoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+d2ViQXJjaGl2ZURlYnVnTW9kZUVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBcmNoaXZlRGVidWdNb2RlRW5hYmxlZCgpOwog
fQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRMb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVk
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRMb2NhbEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVk
KGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TG9jYWxG
aWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0TG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5sb2Nh
bEZpbGVDb250ZW50U25pZmZpbmdFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+bG9jYWxGaWxlQ29udGVudFNuaWZmaW5nRW5hYmxlZCgpOwogfQog
CiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRVc2VzUGFnZUNhY2hlKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+c2V0VXNlc1BhZ2VDYWNoZShlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZl
cmVuY2VzR2V0UGFnZUNhY2hlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT51c2VzUGFnZUNhY2hlKCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dXNlc1BhZ2VDYWNo
ZSgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBwYWdlQ2FjaGVTdXBwb3J0c1Bs
dWdpbnMpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0UGFnZUNhY2hlU3VwcG9y
dHNQbHVnaW5zKHBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucyk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRQYWdlQ2FjaGVTdXBwb3J0c1BsdWdpbnMocGFnZUNhY2hlU3Vw
cG9ydHNQbHVnaW5zKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0UGFnZUNhY2hlU3VwcG9y
dHNQbHVnaW5zKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBhZ2VDYWNoZVN1cHBvcnRzUGx1Z2lucygpOworICAg
IHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBhZ2VDYWNoZVN1cHBvcnRz
UGx1Z2lucygpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRQYWdpbmF0ZUR1cmluZ0xheW91
dEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQog
ewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFBhZ2luYXRlRHVyaW5nTGF5b3V0RW5h
YmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFBh
Z2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0UGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBhZ2luYXRl
RHVyaW5nTGF5b3V0RW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJl
ZmVyZW5jZXNTZXRET01QYXN0ZUFsbG93ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldERPTVBh
c3RlQWxsb3dlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnNldERPTVBhc3RlQWxsb3dlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0
RE9NUGFzdGVBbGxvd2VkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmRvbVBhc3RlQWxsb3dlZCgpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmRvbVBhc3RlQWxsb3dlZCgpOwog
fQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKFdL
UHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGVuYWJs
ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SmF2YVNjcmlwdENh
bkFjY2Vzc0NsaXBib2FyZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0SmF2
YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5qYXZhU2NyaXB0Q2FuQWNj
ZXNzQ2xpcGJvYXJkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+amF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5j
ZXNTZXRGdWxsU2NyZWVuRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBi
b29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RnVsbFNjcmVl
bkVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRGdWxsU2NyZWVuRW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0
RnVsbFNjcmVlbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZnVsbFNjcmVlbkVuYWJsZWQoKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5mdWxsU2NyZWVuRW5hYmxl
ZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7
Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBX
S1ByZWZlcmVuY2VzR2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+YXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRBVkZvdW5kYXRpb25FbmFibGVkKFdL
UHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBVkZvdW5kYXRpb25FbmFibGVkKGVuYWJsZWQpOworICAg
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChl
bmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0QVZGb3VuZGF0aW9uRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5pc0FWRm91bmRhdGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5pc0FWRm91bmRhdGlvbkVuYWJsZWQoKTsKIH0KIAog
dm9pZCBXS1ByZWZlcmVuY2VzU2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChlbmFi
bGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEFWRm91bmRhdGlv
bk5TVVJMU2Vzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dEFWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aXNBVkZvdW5k
YXRpb25OU1VSTFNlc3Npb25FbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+aXNBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkKCk7CiB9CiAK
IHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYlNlY3VyaXR5RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0V2ViU2VjdXJpdHlFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0V2ViU2VjdXJpdHlFbmFibGVkKGVuYWJsZWQpOwogfQogCiBi
b29sIFdLUHJlZmVyZW5jZXNHZXRXZWJTZWN1cml0eUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2Vi
U2VjdXJpdHlFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+d2ViU2VjdXJpdHlFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFVu
aXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMc0FsbG93ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlc1JlZiwgYm9vbCBhbGxvd2VkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGFsbG93ZWQpOworICAgIFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVS
THMoYWxsb3dlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFVuaXZlcnNhbEFjY2Vzc0Zy
b21GaWxlVVJMc0FsbG93ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9t
RmlsZVVSTHMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5h
bGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcygpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5j
ZXNTZXRGaWxlQWNjZXNzRnJvbUZpbGVVUkxzQWxsb3dlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGFsbG93ZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGFsbG93ZWQpOworICAgIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGFsbG93
ZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRGaWxlQWNjZXNzRnJvbUZpbGVVUkxzQWxs
b3dlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5hbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hbGxvd0ZpbGVBY2Nlc3NGcm9t
RmlsZVVSTHMoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TmVlZHNTdG9yYWdlQWNjZXNz
RnJvbUZpbGVVUkxzUXVpcmsoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBu
ZWVkc1F1aXJrKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE5lZWRzU3RvcmFn
ZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrKG5lZWRzUXVpcmspOworICAgIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0TmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmso
bmVlZHNRdWlyayk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldE5lZWRzU3RvcmFnZUFjY2Vz
c0Zyb21GaWxlVVJMc1F1aXJrKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm5lZWRzU3RvcmFnZUFjY2Vzc0Zyb21G
aWxlVVJMc1F1aXJrKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+bmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoKTsKIH0KIAogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0SGl4aWU3NldlYlNvY2tldFByb3RvY29sRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmLCBib29sIC8qZW5hYmxlZCovKQpAQCAtNzcwLDE2MiArNzcwLDE2MiBAQCBib29sIFdLUHJl
ZmVyZW5jZXNHZXRIaXhpZTc2V2ViU29ja2V0UHJvdG9jb2xFbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYpCiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1lZGlhUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0
dXJlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRSZXF1aXJlc1VzZXJHZXN0dXJlRm9yTWVkaWFQbGF5
YmFjayhmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFJlcXVp
cmVzVXNlckdlc3R1cmVGb3JNZWRpYVBsYXliYWNrKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVy
ZW5jZXNHZXRNZWRpYVBsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5y
ZXF1aXJlc1VzZXJHZXN0dXJlRm9yTWVkaWFQbGF5YmFjaygpOworICAgIHJldHVybiBXZWJLaXQ6
OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnJlcXVpcmVzVXNlckdlc3R1cmVGb3JNZWRpYVBsYXli
YWNrKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFZpZGVvUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsK
LSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRSZXF1aXJlc1VzZXJHZXN0dXJlRm9yVmlk
ZW9QbGF5YmFjayhmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dFJlcXVpcmVzVXNlckdlc3R1cmVGb3JWaWRlb1BsYXliYWNrKGZsYWcpOwogfQogCiBib29sIFdL
UHJlZmVyZW5jZXNHZXRWaWRlb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5yZXF1aXJlc1VzZXJHZXN0dXJlRm9yVmlkZW9QbGF5YmFjaygpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnJlcXVpcmVzVXNlckdlc3R1cmVGb3JWaWRl
b1BsYXliYWNrKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEF1ZGlvUGxheWJhY2tSZXF1
aXJlc1VzZXJHZXN0dXJlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxh
ZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRSZXF1aXJlc1VzZXJHZXN0dXJl
Rm9yQXVkaW9QbGF5YmFjayhmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldFJlcXVpcmVzVXNlckdlc3R1cmVGb3JBdWRpb1BsYXliYWNrKGZsYWcpOwogfQogCiBi
b29sIFdLUHJlZmVyZW5jZXNHZXRBdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZShXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5yZXF1aXJlc1VzZXJHZXN0dXJlRm9yQXVkaW9QbGF5YmFjaygpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnJlcXVpcmVzVXNlckdlc3R1cmVG
b3JBdWRpb1BsYXliYWNrKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1haW5Db250ZW50
VXNlckdlc3R1cmVPdmVycmlkZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE1haW5Db250
ZW50VXNlckdlc3R1cmVPdmVycmlkZUVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRNYWluQ29udGVudFVzZXJHZXN0dXJlT3ZlcnJpZGVFbmFibGVk
KGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRNYWluQ29udGVudFVzZXJHZXN0dXJl
T3ZlcnJpZGVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm1haW5Db250ZW50VXNlckdlc3R1cmVPdmVy
cmlkZUVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5tYWluQ29udGVudFVzZXJHZXN0dXJlT3ZlcnJpZGVFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldE1lZGlhUGxheWJhY2tBbGxvd3NJbmxpbmUoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnNldEFsbG93c0lubGluZU1lZGlhUGxheWJhY2soZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRBbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrKGZsYWcpOwogfQog
CiBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYVBsYXliYWNrQWxsb3dzSW5saW5lKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPmFsbG93c0lubGluZU1lZGlhUGxheWJhY2soKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrKCk7CiB9CiAK
IHZvaWQgV0tQcmVmZXJlbmNlc1NldElubGluZU1lZGlhUGxheWJhY2tSZXF1aXJlc1BsYXlzSW5s
aW5lQXR0cmlidXRlKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykK
IHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRJbmxpbmVNZWRpYVBsYXliYWNrUmVx
dWlyZXNQbGF5c0lubGluZUF0dHJpYnV0ZShmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldElubGluZU1lZGlhUGxheWJhY2tSZXF1aXJlc1BsYXlzSW5saW5lQXR0
cmlidXRlKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRJbmxpbmVNZWRpYVBsYXli
YWNrUmVxdWlyZXNQbGF5c0lubGluZUF0dHJpYnV0ZShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5pbmxpbmVNZWRp
YVBsYXliYWNrUmVxdWlyZXNQbGF5c0lubGluZUF0dHJpYnV0ZSgpOworICAgIHJldHVybiBXZWJL
aXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmlubGluZU1lZGlhUGxheWJhY2tSZXF1aXJlc1Bs
YXlzSW5saW5lQXR0cmlidXRlKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEJlYWNvbkFQ
SUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewot
ICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEJlYWNvbkFQSUVuYWJsZWQoZmxhZyk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRCZWFjb25BUElFbmFibGVkKGZs
YWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRCZWFjb25BUElFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPmJlYWNvbkFQSUVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5iZWFjb25BUElFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNl
c1NldERpcmVjdG9yeVVwbG9hZEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldERpcmVjdG9y
eVVwbG9hZEVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXREaXJlY3RvcnlVcGxvYWRFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5j
ZXNHZXREaXJlY3RvcnlVcGxvYWRFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmRpcmVjdG9yeVVwbG9h
ZEVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5k
aXJlY3RvcnlVcGxvYWRFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1lZGlh
Q29udHJvbHNTY2FsZVdpdGhQYWdlWm9vbShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
LCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TWVkaWFDb250
cm9sc1NjYWxlV2l0aFBhZ2Vab29tKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0TWVkaWFDb250cm9sc1NjYWxlV2l0aFBhZ2Vab29tKGZsYWcpOwogfQogCiBi
b29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYUNvbnRyb2xzU2NhbGVXaXRoUGFnZVpvb20oV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+bWVkaWFDb250cm9sc1NjYWxlV2l0aFBhZ2Vab29tKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVkaWFDb250cm9sc1NjYWxlV2l0aFBhZ2Va
b29tKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1vZGVybk1lZGlhQ29udHJvbHNFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChmbGFn
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE1vZGVybk1lZGlhQ29u
dHJvbHNFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRNb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxl
ZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm1vZGVybk1l
ZGlhQ29udHJvbHNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkF1dGhl
bnRpY2F0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZs
YWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0V2ViQXV0aGVudGljYXRpb25F
bmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0V2Vi
QXV0aGVudGljYXRpb25FbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRX
ZWJBdXRoZW50aWNhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikK
IHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViQXV0aGVudGljYXRpb25F
bmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2Vi
QXV0aGVudGljYXRpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEludmlz
aWJsZU1lZGlhQXV0b3BsYXlQZXJtaXR0ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEludmlzaWJs
ZUF1dG9wbGF5Tm90UGVybWl0dGVkKCFmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldEludmlzaWJsZUF1dG9wbGF5Tm90UGVybWl0dGVkKCFmbGFnKTsKIH0KIAog
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0SW52aXNpYmxlTWVkaWFBdXRvcGxheVBlcm1pdHRlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiAhdG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+aW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQoKTsKKyAgICByZXR1cm4g
IVdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aW52aXNpYmxlQXV0b3BsYXlOb3RQZXJt
aXR0ZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0U2hvd3NUb29sVGlwT3ZlclRydW5j
YXRlZFRleHQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewot
ICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNob3dzVG9vbFRpcE92ZXJUcnVuY2F0ZWRU
ZXh0KGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2hvd3NU
b29sVGlwT3ZlclRydW5jYXRlZFRleHQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dFNob3dzVG9vbFRpcE92ZXJUcnVuY2F0ZWRUZXh0KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNob3dzVG9vbFRp
cE92ZXJUcnVuY2F0ZWRUZXh0KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2hvd3NUb29sVGlwT3ZlclRydW5jYXRlZFRleHQoKTsKIH0KIAogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRN
b2NrU2Nyb2xsYmFyc0VuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5zZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tb2NrU2Nyb2xs
YmFyc0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5tb2NrU2Nyb2xsYmFyc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0QXR0
YWNobWVudEVsZW1lbnRFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJv
b2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBdHRhY2htZW50RWxl
bWVudEVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNl
c0dldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hdHRhY2htZW50RWxl
bWVudEVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5hdHRhY2htZW50RWxlbWVudEVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0
V2ViQXVkaW9FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5h
YmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBdWRpb0VuYWJsZWQo
ZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBdWRp
b0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkF1ZGlvRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBdWRpb0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBdWRpb0VuYWJsZWQoKTsKIH0KIAogdm9pZCBX
S1ByZWZlcmVuY2VzU2V0QXBwbGljYXRpb25DaHJvbWVNb2RlRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmLCBib29sKQpAQCAtOTUyLDE4OSArOTUyLDE4OSBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRJ
bnNwZWN0b3JVc2VzV2ViS2l0VXNlckludGVyZmFjZShXS1ByZWZlcmVuY2VzUmVmKQogCiB2b2lk
IFdLUHJlZmVyZW5jZXNTZXRTdXBwcmVzc2VzSW5jcmVtZW50YWxSZW5kZXJpbmcoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldFN1cHByZXNzZXNJbmNyZW1lbnRhbFJlbmRlcmluZyhlbmFibGVkKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFN1cHByZXNzZXNJbmNyZW1l
bnRhbFJlbmRlcmluZyhlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0U3VwcHJl
c3Nlc0luY3JlbWVudGFsUmVuZGVyaW5nKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnN1cHByZXNzZXNJbmNyZW1l
bnRhbFJlbmRlcmluZygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnN1cHByZXNzZXNJbmNyZW1lbnRhbFJlbmRlcmluZygpOwogfQogCiB2b2lkIFdLUHJlZmVy
ZW5jZXNTZXRCYWNrc3BhY2VLZXlOYXZpZ2F0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0QmFja3NwYWNlS2V5TmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRCYWNrc3BhY2VLZXlOYXZpZ2F0aW9uRW5hYmxl
ZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0QmFja3NwYWNlS2V5TmF2aWdh
dGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YmFja3NwYWNlS2V5TmF2aWdhdGlvbkVuYWJsZWQo
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5iYWNrc3BhY2VL
ZXlOYXZpZ2F0aW9uRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRDYXJldEJy
b3dzaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJs
ZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q2FyZXRCcm93c2luZ0VuYWJs
ZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRDYXJl
dEJyb3dzaW5nRW5hYmxlZChlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0Q2Fy
ZXRCcm93c2luZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTaG91bGREaXNwbGF5U3VidGl0
bGVzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAg
ICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTaG91bGREaXNwbGF5U3VidGl0bGVzKGVuYWJs
ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2hvdWxkRGlzcGxh
eVN1YnRpdGxlcyhlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0U2hvdWxkRGlz
cGxheVN1YnRpdGxlcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJl
dHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zaG91bGREaXNwbGF5U3VidGl0bGVzKCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2hvdWxkRGlzcGxheVN1
YnRpdGxlcygpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTaG91bGREaXNwbGF5Q2FwdGlv
bnMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAg
IHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNob3VsZERpc3BsYXlDYXB0aW9ucyhlbmFibGVk
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNob3VsZERpc3BsYXlD
YXB0aW9ucyhlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0U2hvdWxkRGlzcGxh
eUNhcHRpb25zKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJu
IHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNob3VsZERpc3BsYXlDYXB0aW9ucygpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNob3VsZERpc3BsYXlDYXB0aW9u
cygpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRTaG91bGREaXNwbGF5VGV4dERlc2NyaXB0
aW9ucyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0g
ICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2hvdWxkRGlzcGxheVRleHREZXNjcmlwdGlv
bnMoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTaG91
bGREaXNwbGF5VGV4dERlc2NyaXB0aW9ucyhlbmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0U2hvdWxkRGlzcGxheVRleHREZXNjcmlwdGlvbnMoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2hvdWxk
RGlzcGxheVRleHREZXNjcmlwdGlvbnMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zaG91bGREaXNwbGF5VGV4dERlc2NyaXB0aW9ucygpOwogfQogCiB2b2lk
IFdLUHJlZmVyZW5jZXNTZXROb3RpZmljYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXROb3RpZmljYXRpb25zRW5hYmxlZChlbmFibGVkKTsKIH0KIAog
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0Tm90aWZpY2F0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
bm90aWZpY2F0aW9uc0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5ub3RpZmljYXRpb25zRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5j
ZXNTZXRTaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0U2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbihl
bmFibGVkKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0U2hvdWxkUmVzcGVjdEltYWdlT3Jp
ZW50YXRpb24oV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4g
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24oKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zaG91bGRSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbigpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRSZXF1ZXN0QW5p
bWF0aW9uRnJhbWVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
ZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRSZXF1ZXN0QW5pbWF0aW9u
RnJhbWVFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lRW5hYmxlZChmbGFnKTsKIH0KIAogYm9vbCBXS1ByZWZl
cmVuY2VzR2V0UmVxdWVzdEFuaW1hdGlvbkZyYW1lRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5yZXF1
ZXN0QW5pbWF0aW9uRnJhbWVFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+cmVxdWVzdEFuaW1hdGlvbkZyYW1lRW5hYmxlZCgpOwogfQogCiB2b2lk
IFdLUHJlZmVyZW5jZXNTZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZiwgV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgcG9saWN5KQogewotICAgIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeSh0b1N0b3JhZ2VC
bG9ja2luZ1BvbGljeShwb2xpY3kpKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeSh0b1N0b3JhZ2VCbG9ja2luZ1BvbGljeShwb2xp
Y3kpKTsKIH0KIAogV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgV0tQcmVmZXJlbmNlc0dldFN0b3Jh
Z2VCbG9ja2luZ1BvbGljeShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAg
IHJldHVybiB0b0FQSShzdGF0aWNfY2FzdDxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6U3RvcmFn
ZUJsb2NraW5nUG9saWN5Pih0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zdG9yYWdlQmxvY2tpbmdQ
b2xpY3koKSkpOworICAgIHJldHVybiB0b0FQSShzdGF0aWNfY2FzdDxXZWJDb3JlOjpTZWN1cml0
eU9yaWdpbjo6U3RvcmFnZUJsb2NraW5nUG9saWN5PihXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnN0b3JhZ2VCbG9ja2luZ1BvbGljeSgpKSk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNl
c1Jlc2V0VGVzdFJ1bm5lck92ZXJyaWRlcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQogewogICAgIC8vIEN1cnJlbnRseSB3ZSByZXNldCB0aGUgb3ZlcnJpZGVzIG9uIHRoZSB3ZWIg
cHJvY2VzcyB3aGVuIHByZWZlcmVuY2VzRGlkQ2hhbmdlKCkgaXMgY2FsbGVkLiBTaW5jZSBXVFIg
cHJlZmVyZW5jZXMKICAgICAvLyBhcmUgdXN1YWxseSBhbHdheXMgdGhlIHNhbWUgKGluIHRoZSBV
SSBwcm9jZXNzKSwgdGhleSBhcmUgbm90IHNlbnQgdG8gd2ViIHByb2Nlc3MsIG5vdCB0cmlnZ2Vy
aW5nIHRoZSByZXNldC4KLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5mb3JjZVVwZGF0ZSgp
OworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Zm9yY2VVcGRhdGUoKTsKIH0K
IAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RGlhZ25vc3RpY0xvZ2dpbmdFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXREaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQoZW5hYmxlZCk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXREaWFnbm9zdGljTG9nZ2luZ0VuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldERpYWdub3N0aWNMb2dnaW5n
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5kaWFnbm9zdGljTG9nZ2luZ0VuYWJsZWQoKTsKKyAgICBy
ZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5kaWFnbm9zdGljTG9nZ2luZ0Vu
YWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0QXN5bmNocm9ub3VzUGx1Z2luSW5p
dGlhbGl6YXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBc3luY2hyb25vdXNQ
bHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRBc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJs
ZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFzeW5jaHJvbm91c1BsdWdp
bkluaXRpYWxpemF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hc3luY2hyb25vdXNQbHVnaW5J
bml0aWFsaXphdGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5hc3luY2hyb25vdXNQbHVnaW5Jbml0aWFsaXphdGlvbkVuYWJsZWQoKTsKIH0K
IAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0QXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25F
bmFibGVkRm9yQWxsUGx1Z2lucyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29s
IGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QXN5bmNocm9ub3Vz
UGx1Z2luSW5pdGlhbGl6YXRpb25FbmFibGVkRm9yQWxsUGx1Z2lucyhlbmFibGVkKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEFzeW5jaHJvbm91c1BsdWdpbkluaXRp
YWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdpbnMoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldEFzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBs
dWdpbnMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+YXN5bmNocm9ub3VzUGx1Z2luSW5pdGlhbGl6YXRpb25FbmFi
bGVkRm9yQWxsUGx1Z2lucygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPmFzeW5jaHJvbm91c1BsdWdpbkluaXRpYWxpemF0aW9uRW5hYmxlZEZvckFsbFBsdWdp
bnMoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0QXJ0aWZpY2lhbFBsdWdpbkluaXRpYWxp
emF0aW9uRGVsYXlFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
ZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBcnRpZmljaWFsUGx1
Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxh
eUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFydGlmaWNpYWxQ
bHVnaW5Jbml0aWFsaXphdGlvbkRlbGF5RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hcnRpZmljaWFs
UGx1Z2luSW5pdGlhbGl6YXRpb25EZWxheUVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hcnRpZmljaWFsUGx1Z2luSW5pdGlhbGl6YXRpb25EZWxh
eUVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0VGFiVG9MaW5rc0VuYWJsZWQo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFRhYlRvTGlua3NFbmFibGVkKGVuYWJsZWQpOworICAg
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0VGFiVG9MaW5rc0VuYWJsZWQoZW5h
YmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFRhYlRvTGlua3NFbmFibGVkKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnRhYlRvTGlua3NFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+dGFiVG9MaW5rc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZl
cmVuY2VzU2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKGVuYWJsZWQpOworICAg
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRh
dGlvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEludGVyYWN0
aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmludGVyYWN0aXZlRm9ybVZh
bGlkYXRpb25FbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+aW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChlbmFibGVk
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNjcm9sbGluZ1BlcmZv
cm1hbmNlTG9nZ2luZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2Nyb2xs
aW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKTsK
IH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0UGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0UGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZChlbmFibGVkKTsK
KyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFBsdWdJblNuYXBzaG90dGlu
Z0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBsdWdJblNuYXBz
aG90dGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBsdWdJblNuYXBz
aG90dGluZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0UGx1Z2luU2FuZGJv
eFByb2ZpbGVzRW5hYmxlZEZvckFsbFBsdWdpbnMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZiwgYm9vbCBlbmFibGVkKQpAQCAtMTE0MiwyMDIgKzExNDIsMjAyIEBAIHZvaWQgV0tQcmVm
ZXJlbmNlc1NldFBsdWdpblNhbmRib3hQcm9maWxlc0VuYWJsZWRGb3JBbGxQbHVnaW5zKFdLUHJl
ZmVyZW5jZXNSZWYKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkgJiYgUExBVEZPUk0o
TUFDKQogICAgIFdlYktpdDo6UGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLnNldEV4
cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoZW5hYmxlZCk7CiAjZW5kaWYK
LSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRFeHBlcmltZW50YWxQbHVnSW5TYW5kYm94
UHJvZmlsZXNFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0RXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFByb2ZpbGVzRW5hYmxlZChlbmFibGVk
KTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0UGx1Z2luU2FuZGJveFByb2ZpbGVzRW5hYmxl
ZEZvckFsbFBsdWdpbnMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZXhwZXJpbWVudGFsUGx1Z0luU2FuZGJveFBy
b2ZpbGVzRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPmV4cGVyaW1lbnRhbFBsdWdJblNhbmRib3hQcm9maWxlc0VuYWJsZWQoKTsKIH0KIAogdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0U25hcHNob3RBbGxQbHVnSW5zKFdLUHJlZmVyZW5jZXNSZWYgcHJl
ZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRTbmFwc2hvdEFsbFBsdWdJbnMoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRTbmFwc2hvdEFsbFBsdWdJbnMoZW5hYmxlZCk7CiB9CiAKIGJvb2wg
V0tQcmVmZXJlbmNlc0dldFNuYXBzaG90QWxsUGx1Z0lucyhXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zbmFwc2hv
dEFsbFBsdWdJbnMoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zbmFwc2hvdEFsbFBsdWdJbnMoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0QXV0b3N0
YXJ0T3JpZ2luUGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0QXV0b3N0YXJ0T3JpZ2luUGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZChlbmFibGVkKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEF1dG9zdGFydE9yaWdpblBsdWdJ
blNuYXBzaG90dGluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dEF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBzaG90dGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
YXV0b3N0YXJ0T3JpZ2luUGx1Z0luU25hcHNob3R0aW5nRW5hYmxlZCgpOworICAgIHJldHVybiBX
ZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmF1dG9zdGFydE9yaWdpblBsdWdJblNuYXBz
aG90dGluZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0UHJpbWFyeVBsdWdJ
blNuYXBzaG90RGV0ZWN0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
LCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0UHJpbWFy
eVBsdWdJblNuYXBzaG90RGV0ZWN0aW9uRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFByaW1hcnlQbHVnSW5TbmFwc2hvdERldGVjdGlvbkVu
YWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFByaW1hcnlQbHVnSW5T
bmFwc2hvdERldGVjdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikK
IHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cHJpbWFyeVBsdWdJblNuYXBz
aG90RGV0ZWN0aW9uRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnByaW1hcnlQbHVnSW5TbmFwc2hvdERldGVjdGlvbkVuYWJsZWQoKTsKIH0KIAog
dm9pZCBXS1ByZWZlcmVuY2VzU2V0UERGUGx1Z2luRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0UERGUGx1Z2luRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldFBERlBsdWdpbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQ
cmVmZXJlbmNlc0dldFBERlBsdWdpbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cGRmUGx1Z2luRW5h
YmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnBkZlBs
dWdpbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RW5jb2RpbmdEZXRlY3Rv
ckVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQog
ewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGVu
YWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0VXNlc0VuY29k
aW5nRGV0ZWN0b3IoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEVuY29kaW5n
RGV0ZWN0b3JFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnVzZXNFbmNvZGluZ0RldGVjdG9yKCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dXNlc0VuY29kaW5nRGV0
ZWN0b3IoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0VGV4dEF1dG9zaXppbmdFbmFibGVk
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgdGV4dEF1dG9zaXppbmdFbmFi
bGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFRleHRBdXRvc2l6aW5nRW5h
YmxlZCh0ZXh0QXV0b3NpemluZ0VuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0VGV4dEF1dG9zaXppbmdFbmFibGVkKHRleHRBdXRvc2l6aW5nRW5hYmxlZCk7
CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFRleHRBdXRvc2l6aW5nRW5hYmxlZChXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT50ZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT50ZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBX
S1ByZWZlcmVuY2VzU2V0QWdncmVzc2l2ZVRpbGVSZXRlbnRpb25FbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRBZ2dyZXNzaXZlVGlsZVJldGVudGlvbkVuYWJsZWQoZW5hYmxlZCk7Cisg
ICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBZ2dyZXNzaXZlVGlsZVJldGVu
dGlvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFnZ3Jlc3Np
dmVUaWxlUmV0ZW50aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQog
ewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hZ2dyZXNzaXZlVGlsZVJldGVu
dGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5hZ2dyZXNzaXZlVGlsZVJldGVudGlvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVu
Y2VzU2V0TG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKGVuYWJs
ZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TG9nc1BhZ2VNZXNz
YWdlc1RvU3lzdGVtQ29uc29sZUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldExvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPmxvZ3NQYWdlTWVzc2FnZXNUb1N5c3RlbUNvbnNvbGVFbmFibGVkKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bG9nc1BhZ2VNZXNzYWdlc1RvU3lzdGVt
Q29uc29sZUVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0UGFnZVZpc2liaWxp
dHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dFBhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKGVuYWJsZWQpOwor
ICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0UGFnZVZpc2liaWxpdHlCYXNl
ZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldFBhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnBhZ2VWaXNpYmlsaXR5QmFzZWRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cGFnZVZpc2liaWxp
dHlCYXNlZFByb2Nlc3NTdXBwcmVzc2lvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVu
Y2VzU2V0U21hcnRJbnNlcnREZWxldGVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRT
bWFydEluc2VydERlbGV0ZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRTbWFydEluc2VydERlbGV0ZUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
IGJvb2wgV0tQcmVmZXJlbmNlc0dldFNtYXJ0SW5zZXJ0RGVsZXRlRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zbWFydEluc2VydERlbGV0ZUVuYWJsZWQoKTsKIH0KIAogdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+c2V0U2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZChlbmFibGVk
KTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNlbGVjdFRyYWlsaW5n
V2hpdGVzcGFjZUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNl
bGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2VsZWN0VHJhaWxp
bmdXaGl0ZXNwYWNlRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKTsKIH0KIAogdm9pZCBX
S1ByZWZlcmVuY2VzU2V0U2hvd3NVUkxzSW5Ub29sVGlwc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldFNob3dzVVJMc0luVG9vbFRpcHNFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktp
dDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2hvd3NVUkxzSW5Ub29sVGlwc0VuYWJsZWQo
ZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNob3dzVVJMc0luVG9vbFRpcHNF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnNob3dzVVJMc0luVG9vbFRpcHNFbmFibGVkKCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2hvd3NVUkxzSW5Ub29sVGlw
c0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0SGlkZGVuUGFnZURPTVRpbWVy
VGhyb3R0bGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBl
bmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEhpZGRlblBhZ2VET01U
aW1lclRocm90dGxpbmdFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoZW5hYmxl
ZCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdBdXRvSW5jcmVhc2VzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5h
YmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRIaWRkZW5QYWdlRE9NVGlt
ZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyhlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVh
c2VzKGVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRIaWRkZW5QYWdlRE9NVGlt
ZXJUaHJvdHRsaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewot
ICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5oaWRkZW5QYWdlRE9NVGltZXJUaHJv
dHRsaW5nRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKCk7CiB9CiAKIGJvb2wgV0tQ
cmVmZXJlbmNlc0dldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKFdL
UHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aGlkZGVuUGFnZURP
TVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5zZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoZW5hYmxl
ZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRIaWRkZW5QYWdlQ1NT
QW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldEhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9u
U3VzcGVuc2lvbkVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0SW5jcmVtZW50
YWxSZW5kZXJpbmdTdXBwcmVzc2lvblRpbWVvdXQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZiwgZG91YmxlIHRpbWVvdXQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0
SW5jcmVtZW50YWxSZW5kZXJpbmdTdXBwcmVzc2lvblRpbWVvdXQodGltZW91dCk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRJbmNyZW1lbnRhbFJlbmRlcmluZ1N1cHBy
ZXNzaW9uVGltZW91dCh0aW1lb3V0KTsKIH0KIAogZG91YmxlIFdLUHJlZmVyZW5jZXNHZXRJbmNy
ZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNzaW9uVGltZW91dChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5p
bmNyZW1lbnRhbFJlbmRlcmluZ1N1cHByZXNzaW9uVGltZW91dCgpKTsKKyAgICByZXR1cm4gdG9B
UEkoV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5pbmNyZW1lbnRhbFJlbmRlcmluZ1N1
cHByZXNzaW9uVGltZW91dCgpKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0VGhyZWFkZWRT
Y3JvbGxpbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5h
YmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRUaHJlYWRlZFNjcm9sbGlu
Z0VuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRUaHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldFRocmVhZGVkU2Nyb2xsaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT50aHJlYWRlZFNj
cm9sbGluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT50aHJlYWRlZFNjcm9sbGluZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0U2ltcGxlTGluZUxheW91dEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNpbXBsZUxp
bmVMYXlvdXRFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0U2ltcGxlTGluZUxheW91dEVuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldFNpbXBsZUxpbmVMYXlvdXRFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNpbXBsZUxpbmVM
YXlvdXRFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2ltcGxlTGluZUxheW91dEVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0
U2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dFNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0Vu
YWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNpbXBsZUxpbmVMYXlvdXRE
ZWJ1Z0JvcmRlcnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNpbXBsZUxpbmVMYXlvdXREZWJ1Z0Jv
cmRlcnNFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0TmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiwgYm9vbCkKQEAgLTEzNTMsNjIgKzEzNTMsNjIgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0
TmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZikKIAogdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0RGVmZXJyZWRDU1NQYXJzZXJFbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXREZWZlcnJlZENTU1BhcnNlckVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXREZWZlcnJlZENTU1BhcnNlckVuYWJsZWQoZmxhZyk7CiB9
CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldERlZmVycmVkQ1NTUGFyc2VyRW5hYmxlZChXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5kZWZlcnJlZENTU1BhcnNlckVuYWJsZWQoKTsKIH0KIAog
dm9pZCBXS1ByZWZlcmVuY2VzU2V0U3VicGl4ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0U3VicGl4ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZChm
bGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFN1YnBpeGVsQ1NT
T01FbGVtZW50TWV0cmljc0VuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dFN1YnBpeGVsQ1NTT01FbGVtZW50TWV0cmljc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c3VicGl4
ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnN1YnBpeGVsQ1NTT01FbGVtZW50TWV0cmljc0VuYWJsZWQoKTsK
IH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0VXNlR2lhbnRUaWxlcyhXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0VXNlR2lhbnRUaWxlcyhmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldFVzZUdpYW50VGlsZXMoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dFVzZUdpYW50VGlsZXMoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICBy
ZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dXNlR2lhbnRUaWxlcygpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnVzZUdpYW50VGlsZXMoKTsKIH0KIAog
dm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFEZXZpY2VzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0TWVkaWFEZXZpY2VzRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNldE1lZGlhRGV2aWNlc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
IGJvb2wgV0tQcmVmZXJlbmNlc0dldE1lZGlhRGV2aWNlc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
bWVkaWFEZXZpY2VzRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPm1lZGlhRGV2aWNlc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0TWVkaWFTdHJlYW1FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJv
b2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRNZWRpYVN0cmVh
bUVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRNZWRpYVN0cmVhbUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dE1lZGlhU3RyZWFtRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewot
ICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tZWRpYVN0cmVhbUVuYWJsZWQoKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tZWRpYVN0cmVhbUVu
YWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0UGVlckNvbm5lY3Rpb25FbmFibGVk
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRQZWVyQ29ubmVjdGlvbkVuYWJsZWQoZW5hYmxlZCk7
CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRQZWVyQ29ubmVjdGlvbkVu
YWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFBlZXJDb25uZWN0aW9u
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wZWVyQ29ubmVjdGlvbkVuYWJsZWQo
KTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViUlRDTGVnYWN5QVBJRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmLCBib29sKQpAQCAtMTQyMiwxMTIgKzE0MjIsMTEyIEBAIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldFdlYlJUQ0xlZ2FjeUFQSUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZikKIAogdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0V2ViUlRDTUROU0lDRUNhbmRpZGF0ZXNFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRXZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoZW5hYmxlZCk7
CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJSVENNRE5TSUNFQ2Fu
ZGlkYXRlc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYlJU
Q01ETlNJQ0VDYW5kaWRhdGVzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
KQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJSVENNRE5TSUNFQ2Fu
ZGlkYXRlc0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT53ZWJSVENNRE5TSUNFQ2FuZGlkYXRlc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZl
cmVuY2VzU2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5zcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoKTsKIH0KIAog
dm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFTb3VyY2VFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRNZWRpYVNvdXJjZUVuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRNZWRpYVNvdXJjZUVuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJv
b2wgV0tQcmVmZXJlbmNlc0dldE1lZGlhU291cmNlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tZWRp
YVNvdXJjZUVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5tZWRpYVNvdXJjZUVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0U291
cmNlQnVmZmVyQ2hhbmdlVHlwZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNvdXJj
ZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+c2V0U291cmNlQnVmZmVyQ2hhbmdlVHlwZUVuYWJsZWQoZW5hYmxlZCk7
CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNvdXJjZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVk
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNvdXJjZUJ1ZmZlckNoYW5nZVR5cGVFbmFibGVkKCk7CisgICAgcmV0
dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c291cmNlQnVmZmVyQ2hhbmdlVHlw
ZUVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0Vmlld0dlc3R1cmVEZWJ1Z2dp
bmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkK
IHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRWaWV3R2VzdHVyZURlYnVnZ2luZ0Vu
YWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRW
aWV3R2VzdHVyZURlYnVnZ2luZ0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldFZpZXdHZXN0dXJlRGVidWdnaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT52aWV3R2Vz
dHVyZURlYnVnZ2luZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT52aWV3R2VzdHVyZURlYnVnZ2luZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0U2hvdWxkQ29udmVydFBvc2l0aW9uU3R5bGVPbkNvcHkoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBjb252ZXJ0KQogewotICAgIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldFNob3VsZENvbnZlcnRQb3NpdGlvblN0eWxlT25Db3B5KGNvbnZlcnQpOwor
ICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2hvdWxkQ29udmVydFBvc2l0
aW9uU3R5bGVPbkNvcHkoY29udmVydCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNob3Vs
ZENvbnZlcnRQb3NpdGlvblN0eWxlT25Db3B5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNob3VsZENvbnZlcnRQ
b3NpdGlvblN0eWxlT25Db3B5KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2hvdWxkQ29udmVydFBvc2l0aW9uU3R5bGVPbkNvcHkoKTsKIH0KIAogdm9pZCBX
S1ByZWZlcmVuY2VzU2V0VGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldFRlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKGVuYWJsZWQpOworICAg
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0VGVsZXBob25lTnVtYmVyUGFyc2lu
Z0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFRlbGVwaG9uZU51
bWJlclBhcnNpbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0g
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnRlbGVwaG9uZU51bWJlclBhcnNpbmdF
bmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dGVs
ZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0
RW5hYmxlSW5oZXJpdFVSSVF1ZXJ5Q29tcG9uZW50KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRF
bmFibGVJbmhlcml0VVJJUXVlcnlDb21wb25lbnQoZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXRFbmFibGVJbmhlcml0VVJJUXVlcnlDb21wb25lbnQoZW5h
YmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEVuYWJsZUluaGVyaXRVUklRdWVyeUNv
bXBvbmVudChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5lbmFibGVJbmhlcml0VVJJUXVlcnlDb21wb25lbnQoKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5lbmFibGVJbmhlcml0
VVJJUXVlcnlDb21wb25lbnQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0U2VydmljZUNv
bnRyb2xzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJs
ZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2VydmljZUNvbnRyb2xzRW5h
YmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFNl
cnZpY2VDb250cm9sc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dl
dFNlcnZpY2VDb250cm9sc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikK
IHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2VydmljZUNvbnRyb2xzRW5h
YmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNlcnZp
Y2VDb250cm9sc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0SW1hZ2VDb250
cm9sc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVk
KQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEltYWdlQ29udHJvbHNFbmFibGVk
KGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SW1hZ2VD
b250cm9sc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEltYWdl
Q29udHJvbHNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmltYWdlQ29udHJvbHNFbmFibGVkKCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aW1hZ2VDb250cm9sc0Vu
YWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0R2FtZXBhZHNFbmFibGVkKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRHYW1lcGFkc0VuYWJsZWQoZW5hYmxlZCk7CisgICAgV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRHYW1lcGFkc0VuYWJsZWQoZW5hYmxlZCk7CiB9
CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEdhbWVwYWRzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5n
YW1lcGFkc0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5nYW1lcGFkc0VuYWJsZWQoKTsKIH0KIAogLy8gRklYTUU6IFJlbW92ZSB0aGVzZSB3aGVu
IHBvc3NpYmxlLgpAQCAtMTU0MiwxMiArMTU0MiwxMiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRM
b25nTW91c2VQcmVzc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIAog
dm9pZCBXS1ByZWZlcmVuY2VzU2V0TWluaW11bVpvb21Gb250U2l6ZShXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmLCBkb3VibGUgc2l6ZSkKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRNaW5pbXVtWm9vbUZvbnRTaXplKHNpemUpOworICAgIFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+c2V0TWluaW11bVpvb21Gb250U2l6ZShzaXplKTsKIH0KIAogZG91Ymxl
IFdLUHJlZmVyZW5jZXNHZXRNaW5pbXVtWm9vbUZvbnRTaXplKFdLUHJlZmVyZW5jZXNSZWYgcHJl
ZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm1pbmlt
dW1ab29tRm9udFNpemUoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5taW5pbXVtWm9vbUZvbnRTaXplKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFu
dGlhbGlhc2VkRm9udERpbGF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sKQpAQCAt
MTU2MiwyNTIgKzE1NjIsMjUyIEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFudGlhbGlhc2VkRm9u
dERpbGF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKQogCiB2b2lkIFdLUHJlZmVyZW5jZXNT
ZXRWaXNpYmxlRGVidWdPdmVybGF5UmVnaW9ucyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmLCBXS0RlYnVnT3ZlcmxheVJlZ2lvbnMgdmlzaWJsZVJlZ2lvbnMpCiB7Ci0gICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0VmlzaWJsZURlYnVnT3ZlcmxheVJlZ2lvbnModmlzaWJsZVJl
Z2lvbnMpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0VmlzaWJsZURl
YnVnT3ZlcmxheVJlZ2lvbnModmlzaWJsZVJlZ2lvbnMpOwogfQogCiBXS0RlYnVnT3ZlcmxheVJl
Z2lvbnMgV0tQcmVmZXJlbmNlc0dldFZpc2libGVEZWJ1Z092ZXJsYXlSZWdpb25zKFdLUHJlZmVy
ZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnZpc2libGVEZWJ1Z092ZXJsYXlSZWdpb25zKCk7CisgICAgcmV0dXJuIFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dmlzaWJsZURlYnVnT3ZlcmxheVJlZ2lvbnMoKTsKIH0K
IAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0SWdub3JlVmlld3BvcnRTY2FsaW5nQ29uc3RyYWludHMo
V0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnNldElnbm9yZVZpZXdwb3J0U2NhbGluZ0NvbnN0cmFpbnRz
KGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SWdub3Jl
Vmlld3BvcnRTY2FsaW5nQ29uc3RyYWludHMoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldElnbm9yZVZpZXdwb3J0U2NhbGluZ0NvbnN0cmFpbnRzKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmln
bm9yZVZpZXdwb3J0U2NhbGluZ0NvbnN0cmFpbnRzKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+aWdub3JlVmlld3BvcnRTY2FsaW5nQ29uc3RyYWludHMoKTsK
IH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TWV0YVJlZnJlc2hFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRIVFRQRXF1aXZFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SFRUUEVxdWl2RW5hYmxlZChlbmFibGVkKTsKIH0KIAog
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0TWV0YVJlZnJlc2hFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmh0
dHBFcXVpdkVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5odHRwRXF1aXZFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEhUVFBF
cXVpdkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVk
KQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEhUVFBFcXVpdkVuYWJsZWQoZW5h
YmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRIVFRQRXF1aXZF
bmFibGVkKGVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRIVFRQRXF1aXZFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPmh0dHBFcXVpdkVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5odHRwRXF1aXZFbmFibGVkKCk7CiB9CiAKIHZvaWQg
V0tQcmVmZXJlbmNlc1NldEFsbG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRBbGxvd3NBaXJQbGF5Rm9yTWVkaWFQbGF5YmFjayhlbmFibGVkKTsKKyAg
ICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEFsbG93c0FpclBsYXlGb3JNZWRp
YVBsYXliYWNrKGVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRBbGxvd3NBaXJQ
bGF5Rm9yTWVkaWFQbGF5YmFjayhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewot
ICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hbGxvd3NBaXJQbGF5Rm9yTWVkaWFQ
bGF5YmFjaygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFs
bG93c0FpclBsYXlGb3JNZWRpYVBsYXliYWNrKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1Nl
dFVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZiwgX1dLVXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeSB1c2VySW50ZXJmYWNlRGlyZWN0
aW9uUG9saWN5KQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFVzZXJJbnRlcmZh
Y2VEaXJlY3Rpb25Qb2xpY3kodXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeSk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9s
aWN5KHVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3kpOwogfQogCiBfV0tVc2VySW50ZXJmYWNl
RGlyZWN0aW9uUG9saWN5IFdLUHJlZmVyZW5jZXNHZXRVc2VySW50ZXJmYWNlRGlyZWN0aW9uUG9s
aWN5KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PF9XS1VzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k+KHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnVzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3koKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PF9XS1VzZXJJbnRlcmZhY2VEaXJlY3Rpb25Qb2xpY3k+KFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+dXNlckludGVyZmFjZURpcmVjdGlvblBvbGljeSgpKTsKIH0KIAogdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUoZW5hYmxlZCk7CisgICAg
V2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZp
c2libGUoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFJlc291cmNlVXNhZ2VP
dmVybGF5VmlzaWJsZShXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJl
dHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUo
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5yZXNvdXJjZVVz
YWdlT3ZlcmxheVZpc2libGUoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVu
YWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TW9ja0NhcHR1cmVEZXZp
Y2VzRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bW9ja0Nh
cHR1cmVEZXZpY2VzRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPm1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZl
cmVuY2VzU2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+c2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZChlbmFibGVkKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQo
ZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldElDRUNhbmRpZGF0ZUZpbHRlcmlu
Z0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4g
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aWNlQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZCgpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmljZUNhbmRpZGF0ZUZp
bHRlcmluZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0RW51bWVyYXRpbmdB
bGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1Jl
ZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEVudW1l
cmF0aW5nQWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNl
c0VuYWJsZWQoZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldEVudW1lcmF0aW5n
QWxsTmV0d29ya0ludGVyZmFjZXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmVudW1lcmF0aW5nQWxs
TmV0d29ya0ludGVyZmFjZXNFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+ZW51bWVyYXRpbmdBbGxOZXR3b3JrSW50ZXJmYWNlc0VuYWJsZWQoKTsK
IH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25u
ZWN0aW9uKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZW5hYmxlZCkKIHsK
LSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3Vy
ZUNvbm5lY3Rpb24oZW5hYmxlZCk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oZW5hYmxlZCk7CiB9CiAK
IGJvb2wgV0tQcmVmZXJlbmNlc0dldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bihXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5tZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKTsK
KyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0SW5h
Y3RpdmVNZWRpYUNhcHR1cmVTdGVhbVJlcHJvbXB0SW50ZXJ2YWxJbk1pbnV0ZXMoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgZG91YmxlIGludGVydmFsKQogewotICAgIHRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNldEluYWN0aXZlTWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVy
dmFsSW5NaW51dGVzKGludGVydmFsKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldEluYWN0aXZlTWVkaWFDYXB0dXJlU3RlYW1SZXByb21wdEludGVydmFsSW5NaW51dGVz
KGludGVydmFsKTsKIH0KIAogZG91YmxlIFdLUHJlZmVyZW5jZXNHZXRJbmFjdGl2ZU1lZGlhQ2Fw
dHVyZVN0ZWFtUmVwcm9tcHRJbnRlcnZhbEluTWludXRlcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5pbmFjdGl2
ZU1lZGlhQ2FwdHVyZVN0ZWFtUmVwcm9tcHRJbnRlcnZhbEluTWludXRlcygpOworICAgIHJldHVy
biBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmluYWN0aXZlTWVkaWFDYXB0dXJlU3Rl
YW1SZXByb21wdEludGVydmFsSW5NaW51dGVzKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1Nl
dEZldGNoQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZs
YWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RmV0Y2hBUElFbmFibGVkKGZs
YWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RmV0Y2hBUElFbmFi
bGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRGZXRjaEFQSUVuYWJsZWQoV0tQ
cmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+ZmV0Y2hBUElFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+ZmV0Y2hBUElFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJl
bmNlc1NldERpc3BsYXlDb250ZW50c0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldERpc3Bs
YXlDb250ZW50c0VuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXREaXNwbGF5Q29udGVudHNFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVy
ZW5jZXNHZXREaXNwbGF5Q29udGVudHNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmRpc3BsYXlDb250
ZW50c0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5kaXNwbGF5Q29udGVudHNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldERh
dGFUcmFuc2Zlckl0ZW1zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBi
b29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RGF0YVRyYW5zZmVy
SXRlbXNFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0RGF0YVRyYW5zZmVySXRlbXNFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5j
ZXNHZXREYXRhVHJhbnNmZXJJdGVtc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZGF0YVRyYW5zZmVy
SXRlbXNFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+ZGF0YVRyYW5zZmVySXRlbXNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1Nl
dEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGZsYWcpOwogfQogCiBib29s
IFdLUHJlZmVyZW5jZXNHZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCk7CiB9CiAK
IHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYlNoYXJlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0V2ViU2hhcmVFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0V2ViU2hhcmVFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNH
ZXRXZWJTaGFyZUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViU2hhcmVFbmFibGVkKCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViU2hhcmVFbmFibGVkKCk7
CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldERvd25sb2FkQXR0cmlidXRlRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+c2V0RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVkKGZsYWcpOworICAgIFdl
YktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVk
KGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXREb3dubG9hZEF0dHJpYnV0ZUVuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+ZG93bmxvYWRBdHRyaWJ1dGVFbmFibGVkKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+ZG93bmxvYWRBdHRyaWJ1dGVFbmFibGVk
KCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxl
ZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkKGZsYWcp
OworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0SW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRJbnRlcnNlY3Rp
b25PYnNlcnZlckVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAg
ICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFi
bGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+aW50ZXJz
ZWN0aW9uT2JzZXJ2ZXJFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldE1lbnVJ
dGVtRWxlbWVudEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBm
bGFnKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRNZW51SXRlbUVs
ZW1lbnRFbmFibGVkKGZsYWcpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJl
bmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVudUl0ZW1F
bGVtZW50RW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPm1lbnVJdGVtRWxlbWVudEVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2VzU2V0
VXNlclRpbWluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBm
bGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFVzZXJUaW1pbmdFbmFibGVk
KGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0VXNlclRpbWlu
Z0VuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFVzZXJUaW1pbmdFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnVzZXJUaW1pbmdFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+dXNlclRpbWluZ0VuYWJsZWQoKTsKIH0KIAogdm9p
ZCBXS1ByZWZlcmVuY2VzU2V0UmVzb3VyY2VUaW1pbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYg
cHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRSZXNvdXJjZVRpbWluZ0VuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRSZXNvdXJjZVRpbWluZ0VuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wg
V0tQcmVmZXJlbmNlc0dldFJlc291cmNlVGltaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5yZXNv
dXJjZVRpbWluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5yZXNvdXJjZVRpbWluZ0VuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRGZXRjaEFQ
SUtlZXBBbGl2ZUVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVm
ZXJlbmNlc0dldEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5mZXRjaEFQ
SUtlZXBBbGl2ZUVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5mZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVu
Y2VzU2V0U2VsZWN0aW9uUGFpbnRpbmdXaXRob3V0U2VsZWN0aW9uR2Fwc0VuYWJsZWQoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldFNlbGVjdGlvblBhaW50aW5nV2l0aG91dFNlbGVjdGlvbkdhcHNFbmFi
bGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0U2VsZWN0
aW9uUGFpbnRpbmdXaXRob3V0U2VsZWN0aW9uR2Fwc0VuYWJsZWQoZmxhZyk7CiB9CiAKIGJvb2wg
V0tQcmVmZXJlbmNlc0dldFNlbGVjdGlvblBhaW50aW5nV2l0aG91dFNlbGVjdGlvbkdhcHNFbmFi
bGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNlbGVjdGlvblBhaW50aW5nV2l0aG91dFNlbGVjdGlvbkdhcHNF
bmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2Vs
ZWN0aW9uUGFpbnRpbmdXaXRob3V0U2VsZWN0aW9uR2Fwc0VuYWJsZWQoKTsKIH0KIAogdm9pZCBX
S1ByZWZlcmVuY2VzU2V0QWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2soV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNldEFsbG93c1BpY3R1cmVJblBpY3R1cmVNZWRpYVBsYXliYWNrKGVu
YWJsZWQpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QWxsb3dzUGlj
dHVyZUluUGljdHVyZU1lZGlhUGxheWJhY2soZW5hYmxlZCk7CiB9CiAKIGJvb2wgV0tQcmVmZXJl
bmNlc0dldEFsbG93c1BpY3R1cmVJblBpY3R1cmVNZWRpYVBsYXliYWNrKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PmFsbG93c1BpY3R1cmVJblBpY3R1cmVNZWRpYVBsYXliYWNrKCk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YWxsb3dzUGljdHVyZUluUGljdHVyZU1lZGlhUGxh
eWJhY2soKTsKIH0KIAogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFwcGxlUGF5RW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQpAQCAtMTgzMiwyNzAgKzE4MzIs
MjcwIEBAIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFwcGxlUGF5Q2FwYWJpbGl0eURpc2Nsb3N1cmVB
bGxvd2VkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyCiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldExp
bmtQcmVsb2FkRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZs
YWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TGlua1ByZWxvYWRFbmFibGVk
KGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TGlua1ByZWxv
YWRFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRMaW5rUHJlbG9hZEVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+bGlua1ByZWxvYWRFbmFibGVkKCk7CisgICAgcmV0dXJuIFdl
YktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bGlua1ByZWxvYWRFbmFibGVkKCk7CiB9CiAK
IHZvaWQgV0tQcmVmZXJlbmNlc1NldE1lZGlhUHJlbG9hZGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldE1lZGlhUHJlbG9hZGluZ0VuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXRNZWRpYVByZWxvYWRpbmdFbmFibGVkKGZsYWcpOwogfQog
CiBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYVByZWxvYWRpbmdFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPm1lZGlhUHJlbG9hZGluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5tZWRpYVByZWxvYWRpbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldExhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+c2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKGZsYWcpOworICAgIFdlYktp
dDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFi
bGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRMYXJnZUltYWdlQXN5bmNEZWNv
ZGluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bGFyZ2VJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVk
KCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bGFyZ2VJbWFn
ZUFzeW5jRGVjb2RpbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFuaW1h
dGVkSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QW5pbWF0
ZWRJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+c2V0QW5pbWF0ZWRJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKGZsYWcp
OwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRBbmltYXRlZEltYWdlQXN5bmNEZWNvZGluZ0Vu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+YW5pbWF0ZWRJbWFnZUFzeW5jRGVjb2RpbmdFbmFibGVkKCk7
CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YW5pbWF0ZWRJbWFn
ZUFzeW5jRGVjb2RpbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFNob3Vs
ZFN1cHByZXNzS2V5Ym9hcmRJbnB1dER1cmluZ1Byb3Zpc2lvbmFsTmF2aWdhdGlvbihXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+c2V0U2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZ0R1cmluZ1By
b3Zpc2lvbmFsTmF2aWdhdGlvbihmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldFNob3VsZFN1cHByZXNzVGV4dElucHV0RnJvbUVkaXRpbmdEdXJpbmdQcm92aXNp
b25hbE5hdmlnYXRpb24oZmxhZyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldFNob3VsZFN1
cHByZXNzS2V5Ym9hcmRJbnB1dER1cmluZ1Byb3Zpc2lvbmFsTmF2aWdhdGlvbihXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zaG91bGRTdXBwcmVzc1RleHRJbnB1dEZyb21FZGl0aW5nRHVyaW5nUHJvdmlzaW9uYWxO
YXZpZ2F0aW9uKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2hvdWxkU3VwcHJlc3NUZXh0SW5wdXRGcm9tRWRpdGluZ0R1cmluZ1Byb3Zpc2lvbmFsTmF2aWdh
dGlvbigpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRNZWRpYVVzZXJHZXN0dXJlSW5oZXJp
dHNGcm9tRG9jdW1lbnQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFn
KQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE1lZGlhVXNlckdlc3R1cmVJbmhl
cml0c0Zyb21Eb2N1bWVudChmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldE1lZGlhVXNlckdlc3R1cmVJbmhlcml0c0Zyb21Eb2N1bWVudChmbGFnKTsKIH0KIAog
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0TWVkaWFVc2VyR2VzdHVyZUluaGVyaXRzRnJvbURvY3VtZW50
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPm1lZGlhVXNlckdlc3R1cmVJbmhlcml0c0Zyb21Eb2N1bWVudCgpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPm1lZGlhVXNlckdlc3R1
cmVJbmhlcml0c0Zyb21Eb2N1bWVudCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXRNZWRp
YUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBXS1N0cmluZ1JlZiBjb2RlY3MpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQodG9X
VEZTdHJpbmcoY29kZWNzKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCh0b1dURlN0cmluZyhj
b2RlY3MpKTsKIH0KIAogV0tTdHJpbmdSZWYgV0tQcmVmZXJlbmNlc0NvcHlNZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmKQogewotICAgIHJldHVybiB0b0NvcGllZEFQSSh0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5t
ZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpKTsKKyAgICByZXR1cm4g
dG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5tZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpKTsKIH0KIAogdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0SXNTZWN1cmVDb250ZXh0QXR0cmlidXRlRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0
SXNTZWN1cmVDb250ZXh0QXR0cmlidXRlRW5hYmxlZChmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNldElzU2VjdXJlQ29udGV4dEF0dHJpYnV0ZUVuYWJsZWQoZmxh
Zyk7CiB9CiAKIGJvb2wgV0tQcmVmZXJlbmNlc0dldElzU2VjdXJlQ29udGV4dEF0dHJpYnV0ZUVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+aXNTZWN1cmVDb250ZXh0QXR0cmlidXRlRW5hYmxlZCgpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmlzU2VjdXJlQ29udGV4
dEF0dHJpYnV0ZUVuYWJsZWQoKTsKIH0KIAogYm9vbCBXS1ByZWZlcmVuY2VzR2V0TGVnYWN5RW5j
cnlwdGVkTWVkaWFBUElFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7
Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmxlZ2FjeUVuY3J5cHRlZE1lZGlh
QVBJRW5hYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PmxlZ2FjeUVuY3J5cHRlZE1lZGlhQVBJRW5hYmxlZCgpOwogfQogCiB2b2lkIFdLUHJlZmVyZW5j
ZXNTZXRMZWdhY3lFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZiwgYm9vbCBlbmFibGVkKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5j
ZXNSZWYpLT5zZXRMZWdhY3lFbmNyeXB0ZWRNZWRpYUFQSUVuYWJsZWQoZW5hYmxlZCk7CisgICAg
cmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TGVnYWN5RW5jcnlwdGVk
TWVkaWFBUElFbmFibGVkKGVuYWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRBbGxv
d01lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0QXNGYWxsYmFjayhXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVy
ZW5jZXNSZWYpLT5hbGxvd01lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0
QXNGYWxsYmFjaygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PmFsbG93TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnRBc0ZhbGxiYWNr
KCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFsbG93TWVkaWFDb250ZW50VHlwZXNSZXF1
aXJpbmdIYXJkd2FyZVN1cHBvcnRBc0ZhbGxiYWNrKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYsIGJvb2wgYWxsb3cpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnNldEFsbG93TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnRBc0ZhbGxi
YWNrKGFsbG93KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXRBbGxvd01lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0QXNGYWxsYmFj
ayhhbGxvdyk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEluc3BlY3RvckFkZGl0aW9uc0Vu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAg
IHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQoZmxh
Zyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRJbnNwZWN0b3JBZGRp
dGlvbnNFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRJbnNwZWN0b3JB
ZGRpdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAg
cmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQo
KTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5pbnNwZWN0b3JB
ZGRpdGlvbnNFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFN0b3JhZ2VBY2Nl
c3NBUElFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykK
IHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTdG9yYWdlQWNjZXNzQVBJRW5hYmxl
ZChmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFN0b3JhZ2VB
Y2Nlc3NBUElFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRTdG9yYWdl
QWNjZXNzQVBJRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAg
IHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCgp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnN0b3JhZ2VBY2Nl
c3NBUElFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2Vzc2liaWxpdHlP
YmplY3RNb2RlbEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBm
bGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEFjY2Vzc2liaWxpdHlPYmpl
Y3RNb2RlbEVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRBY2Nlc3NpYmlsaXR5T2JqZWN0TW9kZWxFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdL
UHJlZmVyZW5jZXNHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0TW9kZWxFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPmFjY2Vzc2liaWxpdHlPYmplY3RNb2RlbEVuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5hY2Nlc3NpYmlsaXR5T2JqZWN0TW9kZWxFbmFibGVk
KCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFyaWFSZWZsZWN0aW9uRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+c2V0QXJpYVJlZmxlY3Rpb25FbmFibGVkKGZsYWcpOworICAgIFdlYktp
dDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0QXJpYVJlZmxlY3Rpb25FbmFibGVkKGZsYWcp
OwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRBcmlhUmVmbGVjdGlvbkVuYWJsZWQoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+YXJpYVJlZmxlY3Rpb25FbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+YXJpYVJlZmxlY3Rpb25FbmFibGVkKCk7CiB9CiAKIHZvaWQg
V0tQcmVmZXJlbmNlc1NldENTU09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldENTU09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0
Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRDU1NPTVZpZXdTY3JvbGxpbmdBUElFbmFibGVk
KGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRDU1NPTVZpZXdTY3JvbGxpbmdBUElF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPmNzc09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQoKTsKKyAg
ICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5jc3NPTVZpZXdTY3JvbGxp
bmdBUElFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFNob3VsZEFsbG93VXNl
ckluc3RhbGxlZEZvbnRzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxh
ZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRTaG91bGRBbGxvd1VzZXJJbnN0
YWxsZWRGb250cyhmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVy
ZW5jZXNHZXRTaG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cyhXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zaG91
bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChw
cmVmZXJlbmNlc1JlZiktPnNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRzKCk7CiB9CiAKIHZv
aWQgV0tQcmVmZXJlbmNlc1NldE1lZGlhQ2FwYWJpbGl0aWVzRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVu
Y2VzUmVmKS0+c2V0TWVkaWFDYXBhYmlsaXRpZXNFbmFibGVkKGVuYWJsZWQpOworICAgIFdlYktp
dDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TWVkaWFDYXBhYmlsaXRpZXNFbmFibGVkKGVu
YWJsZWQpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRNZWRpYUNhcGFiaWxpdGllc0VuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXBhYmlsaXRpZXNFbmFibGVkKCk7CisgICAgcmV0dXJu
IFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+bWVkaWFDYXBhYmlsaXRpZXNFbmFibGVk
KCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJj
ZXNUb0Fza0ZvckNyZWRlbnRpYWxzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJv
b2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRBbGxvd0Nyb3NzT3Jp
Z2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyhmbGFnKTsKKyAgICBXZWJLaXQ6OnRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPnNldEFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fz
a0ZvckNyZWRlbnRpYWxzKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRBbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyhXS1ByZWZlcmVuY2VzUmVm
IHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5h
bGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscygpOworICAgIHJl
dHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFsbG93Q3Jvc3NPcmlnaW5TdWJy
ZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1Nl
dENyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRD
cm9zc09yaWdpblJlc291cmNlUG9saWN5RW5hYmxlZChmbGFnKTsKKyAgICBXZWJLaXQ6OnRvSW1w
bChwcmVmZXJlbmNlc1JlZiktPnNldENyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lFbmFibGVkKGZs
YWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRDcm9zc09yaWdpblJlc291cmNlUG9saWN5
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogewotICAgIHJldHVybiB0
b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5jcm9zc09yaWdpblJlc291cmNlUG9saWN5RW5hYmxlZCgp
OworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmNyb3NzT3JpZ2lu
UmVzb3VyY2VQb2xpY3lFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFJlc3Ry
aWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwg
Ym9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFJlc3RyaWN0ZWRI
VFRQUmVzcG9uc2VBY2Nlc3MoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT5zZXRSZXN0cmljdGVkSFRUUFJlc3BvbnNlQWNjZXNzKGZsYWcpOwogfQogCiBib29sIFdL
UHJlZmVyZW5jZXNHZXRSZXN0cmljdGVkSFRUUFJlc3BvbnNlQWNjZXNzKFdLUHJlZmVyZW5jZXNS
ZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZikt
PnJlc3RyaWN0ZWRIVFRQUmVzcG9uc2VBY2Nlc3MoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5yZXN0cmljdGVkSFRUUFJlc3BvbnNlQWNjZXNzKCk7CiB9CiAK
IHZvaWQgV0tQcmVmZXJlbmNlc1NldFNlcnZlclRpbWluZ0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPnNldFNlcnZlclRpbWluZ0VuYWJsZWQoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJl
ZmVyZW5jZXNSZWYpLT5zZXRTZXJ2ZXJUaW1pbmdFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdL
UHJlZmVyZW5jZXNHZXRTZXJ2ZXJUaW1pbmdFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNlcnZlclRp
bWluZ0VuYWJsZWQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXJ2ZXJUaW1pbmdFbmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldENvbG9y
RmlsdGVyRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcp
CiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q29sb3JGaWx0ZXJFbmFibGVkKGZs
YWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q29sb3JGaWx0ZXJF
bmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRDb2xvckZpbHRlckVuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+Y29sb3JGaWx0ZXJFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktp
dDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Y29sb3JGaWx0ZXJFbmFibGVkKCk7CiB9CiAKIHZv
aWQgV0tQcmVmZXJlbmNlc1NldFByb2Nlc3NTd2FwT25OYXZpZ2F0aW9uRW5hYmxlZChXS1ByZWZl
cmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBsKHByZWZl
cmVuY2VzUmVmKS0+c2V0UHJvY2Vzc1N3YXBPbkNyb3NzU2l0ZU5hdmlnYXRpb25FbmFibGVkKGZs
YWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0UHJvY2Vzc1N3YXBP
bkNyb3NzU2l0ZU5hdmlnYXRpb25FbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5j
ZXNHZXRQcm9jZXNzU3dhcE9uTmF2aWdhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cHJvY2Vz
c1N3YXBPbkNyb3NzU2l0ZU5hdmlnYXRpb25FbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+cHJvY2Vzc1N3YXBPbkNyb3NzU2l0ZU5hdmlnYXRpb25F
bmFibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFB1bmNoT3V0V2hpdGVCYWNrZ3Jv
dW5kc0luRGFya01vZGUoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFn
KQogewotICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFB1bmNoT3V0V2hpdGVCYWNrZ3Jv
dW5kc0luRGFya01vZGUoZmxhZyk7CisgICAgV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5zZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKGZsYWcpOwogfQogCiBib29s
IFdLUHJlZmVyZW5jZXNHZXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlKFdLUHJl
ZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUoKTsKKyAgICByZXR1
cm4gV2ViS2l0Ojp0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5wdW5jaE91dFdoaXRlQmFja2dyb3Vu
ZHNJbkRhcmtNb2RlKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYlNRTERpc2FibGVk
KFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKLSAgICB0b0lt
cGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJTUUxEaXNhYmxlZChmbGFnKTsKKyAgICBXZWJLaXQ6
OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFdlYlNRTERpc2FibGVkKGZsYWcpOwogfQogCiBi
b29sIFdLUHJlZmVyZW5jZXNHZXRXZWJTUUxEaXNhYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmKQogewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJTUUxE
aXNhYmxlZCgpOworICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcmVmZXJlbmNlc1JlZiktPndl
YlNRTERpc2FibGVkKCk7CiB9CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVBdWRpb0lu
VUlQcm9jZXNzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZs
YWcpCiB7Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q2FwdHVyZUF1ZGlvSW5VSVBy
b2Nlc3NFbmFibGVkKGZsYWcpOworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0Q2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJl
ZmVyZW5jZXNHZXRDYXB0dXJlQXVkaW9JblVJUHJvY2Vzc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
ZiBwcmVmZXJlbmNlc1JlZikKIHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
Y2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+Y2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3NFbmFibGVkKCk7CiB9
CiAKIHZvaWQgV0tQcmVmZXJlbmNlc1NldENhcHR1cmVWaWRlb0luVUlQcm9jZXNzRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7Ci0gICAgdG9JbXBs
KHByZWZlcmVuY2VzUmVmKS0+c2V0Q2FwdHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKGZsYWcp
OworICAgIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0Q2FwdHVyZVZpZGVvSW5V
SVByb2Nlc3NFbmFibGVkKGZsYWcpOwogfQogCiBib29sIFdLUHJlZmVyZW5jZXNHZXRDYXB0dXJl
VmlkZW9JblVJUHJvY2Vzc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikK
IHsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+Y2FwdHVyZVZpZGVvSW5VSVBy
b2Nlc3NFbmFibGVkKCk7CisgICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHByZWZlcmVuY2VzUmVm
KS0+Y2FwdHVyZVZpZGVvSW5VSVByb2Nlc3NFbmFibGVkKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Byb3RlY3Rpb25TcGFjZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Byb3RlY3Rpb25TcGFjZS5jcHAKaW5kZXggN2U3NjRi
OTAwZTNmZDY0ZTg0NTEyNWExMzRkOTRmOGMyYjVjZmMwYy4uZDBhNzU5YmM2YjA2MTcyNDg3ZDMw
OWIxYWY5M2Q3OGVjN2IwMGQyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcm90ZWN0aW9uU3BhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUHJvdGVjdGlvblNwYWNlLmNwcApAQCAtMzgsMzUgKzM4LDM1IEBAIFdLVHlwZUlE
IFdLUHJvdGVjdGlvblNwYWNlR2V0VHlwZUlEKCkKIAogV0tTdHJpbmdSZWYgV0tQcm90ZWN0aW9u
U3BhY2VDb3B5SG9zdChXS1Byb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2VSZWYpCiB7
Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwcm90ZWN0aW9uU3BhY2VSZWYpLT5ob3N0
KCkpOworICAgIHJldHVybiB0b0NvcGllZEFQSShXZWJLaXQ6OnRvSW1wbChwcm90ZWN0aW9uU3Bh
Y2VSZWYpLT5ob3N0KCkpOwogfQogCiBpbnQgV0tQcm90ZWN0aW9uU3BhY2VHZXRQb3J0KFdLUHJv
dGVjdGlvblNwYWNlUmVmIHByb3RlY3Rpb25TcGFjZVJlZikKIHsKLSAgICByZXR1cm4gdG9JbXBs
KHByb3RlY3Rpb25TcGFjZVJlZiktPnBvcnQoKTsKKyAgICByZXR1cm4gV2ViS2l0Ojp0b0ltcGwo
cHJvdGVjdGlvblNwYWNlUmVmKS0+cG9ydCgpOwogfQogCiBXS1N0cmluZ1JlZiBXS1Byb3RlY3Rp
b25TcGFjZUNvcHlSZWFsbShXS1Byb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2VSZWYp
CiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbChwcm90ZWN0aW9uU3BhY2VSZWYpLT5y
ZWFsbSgpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0b0ltcGwocHJvdGVjdGlv
blNwYWNlUmVmKS0+cmVhbG0oKSk7CiB9CiAKIGJvb2wgV0tQcm90ZWN0aW9uU3BhY2VHZXRJc1By
b3h5KFdLUHJvdGVjdGlvblNwYWNlUmVmIHByb3RlY3Rpb25TcGFjZVJlZikKIHsKLSAgICByZXR1
cm4gdG9JbXBsKHByb3RlY3Rpb25TcGFjZVJlZiktPmlzUHJveHkoKTsKKyAgICByZXR1cm4gV2Vi
S2l0Ojp0b0ltcGwocHJvdGVjdGlvblNwYWNlUmVmKS0+aXNQcm94eSgpOwogfQogCiBXS1Byb3Rl
Y3Rpb25TcGFjZVNlcnZlclR5cGUgV0tQcm90ZWN0aW9uU3BhY2VHZXRTZXJ2ZXJUeXBlKFdLUHJv
dGVjdGlvblNwYWNlUmVmIHByb3RlY3Rpb25TcGFjZVJlZikKIHsKLSAgICByZXR1cm4gdG9BUEko
dG9JbXBsKHByb3RlY3Rpb25TcGFjZVJlZiktPnNlcnZlclR5cGUoKSk7CisgICAgcmV0dXJuIHRv
QVBJKFdlYktpdDo6dG9JbXBsKHByb3RlY3Rpb25TcGFjZVJlZiktPnNlcnZlclR5cGUoKSk7CiB9
CiAKIGJvb2wgV0tQcm90ZWN0aW9uU3BhY2VHZXRSZWNlaXZlc0NyZWRlbnRpYWxTZWN1cmVseShX
S1Byb3RlY3Rpb25TcGFjZVJlZiBwcm90ZWN0aW9uU3BhY2VSZWYpCiB7Ci0gICAgcmV0dXJuIHRv
SW1wbChwcm90ZWN0aW9uU3BhY2VSZWYpLT5yZWNlaXZlc0NyZWRlbnRpYWxTZWN1cmVseSgpOwor
ICAgIHJldHVybiBXZWJLaXQ6OnRvSW1wbChwcm90ZWN0aW9uU3BhY2VSZWYpLT5yZWNlaXZlc0Ny
ZWRlbnRpYWxTZWN1cmVseSgpOwogfQogCiBXS1Byb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9u
U2NoZW1lIFdLUHJvdGVjdGlvblNwYWNlR2V0QXV0aGVudGljYXRpb25TY2hlbWUoV0tQcm90ZWN0
aW9uU3BhY2VSZWYgcHJvdGVjdGlvblNwYWNlUmVmKQogewotICAgIHJldHVybiB0b0FQSSh0b0lt
cGwocHJvdGVjdGlvblNwYWNlUmVmKS0+YXV0aGVudGljYXRpb25TY2hlbWUoKSk7CisgICAgcmV0
dXJuIHRvQVBJKFdlYktpdDo6dG9JbXBsKHByb3RlY3Rpb25TcGFjZVJlZiktPmF1dGhlbnRpY2F0
aW9uU2NoZW1lKCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tSZXNvdXJjZUNhY2hlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcAppbmRleCA0NDJmYzhmODZjNDBhZDZhZTll
NjViZTQ0M2RkMDQ5NmFiN2Q1MmNkLi4yNTBkZjY3NWI1ZWE4ZmFjZmVlNTQ5YTRkNmY3M2U0OWM4
MjY4NTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1Jlc291
cmNlQ2FjaGVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1Jlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcApAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGVzKFdLUmVzb3VyY2VDYWNoZXNU
b0NsZWFyIGNhYwogCiB2b2lkIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJHZXRDYWNoZU9yaWdpbnMo
V0tSZXNvdXJjZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFnZXIsIHZvaWQqIGNvbnRleHQsIFdL
UmVzb3VyY2VDYWNoZU1hbmFnZXJHZXRDYWNoZU9yaWdpbnNGdW5jdGlvbiBjYWxsYmFjaykKIHsK
LSAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gdG9JbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8V0tX
ZWJzaXRlRGF0YVN0b3JlUmVmPihjYWNoZU1hbmFnZXIpKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwor
ICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OnRvSW1wbChyZWludGVycHJldF9j
YXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4oY2FjaGVNYW5hZ2VyKSktPndlYnNpdGVEYXRhU3Rv
cmUoKTsKICAgICB3ZWJzaXRlRGF0YVN0b3JlLmZldGNoRGF0YSh0b1dlYnNpdGVEYXRhVHlwZXMo
V0tSZXNvdXJjZUNhY2hlc1RvQ2xlYXJBbGwpLCB7IH0sIFtjb250ZXh0LCBjYWxsYmFja10oYXV0
byBkYXRhUmVjb3JkcykgewogICAgICAgICBWZWN0b3I8UmVmUHRyPEFQSTo6T2JqZWN0Pj4gc2Vj
dXJpdHlPcmlnaW5zOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGRhdGFSZWNvcmQgOiBkYXRh
UmVjb3JkcykgewpAQCAtNjQsMjAgKzY0LDIwIEBAIHZvaWQgV0tSZXNvdXJjZUNhY2hlTWFuYWdl
ckdldENhY2hlT3JpZ2lucyhXS1Jlc291cmNlQ2FjaGVNYW5hZ2VyUmVmIGNhY2hlTWFuYWdlCiAK
IHZvaWQgV0tSZXNvdXJjZUNhY2hlTWFuYWdlckNsZWFyQ2FjaGVGb3JPcmlnaW4oV0tSZXNvdXJj
ZUNhY2hlTWFuYWdlclJlZiBjYWNoZU1hbmFnZXIsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2lu
LCBXS1Jlc291cmNlQ2FjaGVzVG9DbGVhciBjYWNoZXNUb0NsZWFyKQogewotICAgIGF1dG8mIHdl
YnNpdGVEYXRhU3RvcmUgPSB0b0ltcGwocmVpbnRlcnByZXRfY2FzdDxXS1dlYnNpdGVEYXRhU3Rv
cmVSZWY+KGNhY2hlTWFuYWdlcikpLT53ZWJzaXRlRGF0YVN0b3JlKCk7CisgICAgYXV0byYgd2Vi
c2l0ZURhdGFTdG9yZSA9IFdlYktpdDo6dG9JbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8V0tXZWJzaXRl
RGF0YVN0b3JlUmVmPihjYWNoZU1hbmFnZXIpKS0+d2Vic2l0ZURhdGFTdG9yZSgpOwogCiAgICAg
VmVjdG9yPFdlYnNpdGVEYXRhUmVjb3JkPiBkYXRhUmVjb3JkczsKIAogICAgIHsKICAgICAgICAg
V2Vic2l0ZURhdGFSZWNvcmQgZGF0YVJlY29yZDsKLSAgICAgICAgZGF0YVJlY29yZC5hZGQoV2Vi
c2l0ZURhdGFUeXBlOjpNZW1vcnlDYWNoZSwgdG9JbXBsKG9yaWdpbiktPnNlY3VyaXR5T3JpZ2lu
KCkuZGF0YSgpKTsKKyAgICAgICAgZGF0YVJlY29yZC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpNZW1v
cnlDYWNoZSwgV2ViS2l0Ojp0b0ltcGwob3JpZ2luKS0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkp
OwogCiAgICAgICAgIGRhdGFSZWNvcmRzLmFwcGVuZChkYXRhUmVjb3JkKTsKICAgICB9CiAKICAg
ICBpZiAoY2FjaGVzVG9DbGVhciA9PSBXS1Jlc291cmNlQ2FjaGVzVG9DbGVhckFsbCkgewogICAg
ICAgICBXZWJzaXRlRGF0YVJlY29yZCBkYXRhUmVjb3JkOwotICAgICAgICBkYXRhUmVjb3JkLmFk
ZChXZWJzaXRlRGF0YVR5cGU6OkRpc2tDYWNoZSwgdG9JbXBsKG9yaWdpbiktPnNlY3VyaXR5T3Jp
Z2luKCkuZGF0YSgpKTsKKyAgICAgICAgZGF0YVJlY29yZC5hZGQoV2Vic2l0ZURhdGFUeXBlOjpE
aXNrQ2FjaGUsIFdlYktpdDo6dG9JbXBsKG9yaWdpbiktPnNlY3VyaXR5T3JpZ2luKCkuZGF0YSgp
KTsKIAogICAgICAgICBkYXRhUmVjb3Jkcy5hcHBlbmQoZGF0YVJlY29yZCk7CiAgICAgfQpAQCAt
ODcsNiArODcsNiBAQCB2b2lkIFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJDbGVhckNhY2hlRm9yT3Jp
Z2luKFdLUmVzb3VyY2VDYWNoZU1hbmFnZXJSZWYgY2FjaGVNYQogCiB2b2lkIFdLUmVzb3VyY2VD
YWNoZU1hbmFnZXJDbGVhckNhY2hlRm9yQWxsT3JpZ2lucyhXS1Jlc291cmNlQ2FjaGVNYW5hZ2Vy
UmVmIGNhY2hlTWFuYWdlciwgV0tSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgY2FjaGVzVG9DbGVhcikK
IHsKLSAgICBhdXRvJiB3ZWJzaXRlRGF0YVN0b3JlID0gdG9JbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8
V0tXZWJzaXRlRGF0YVN0b3JlUmVmPihjYWNoZU1hbmFnZXIpKS0+d2Vic2l0ZURhdGFTdG9yZSgp
OworICAgIGF1dG8mIHdlYnNpdGVEYXRhU3RvcmUgPSBXZWJLaXQ6OnRvSW1wbChyZWludGVycHJl
dF9jYXN0PFdLV2Vic2l0ZURhdGFTdG9yZVJlZj4oY2FjaGVNYW5hZ2VyKSktPndlYnNpdGVEYXRh
U3RvcmUoKTsKICAgICB3ZWJzaXRlRGF0YVN0b3JlLnJlbW92ZURhdGEodG9XZWJzaXRlRGF0YVR5
cGVzKGNhY2hlc1RvQ2xlYXIpLCAtV2FsbFRpbWU6OmluZmluaXR5KCksIFtdIHsgfSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuY3BwCmluZGV4
IGM4ZTc1NjBiMTc1NjFhMjVlNDJiYTE5YzY5Y2E2YjBjNGJjNTliZTEuLmEzNTQ4ZWE5NTc2ZmY0
NjgwNmQwNmU2MjhmNzhiMWMwY2E4NDQ4NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuY3BwCkBAIC02MSwxMiArNjEsMTIgQEAgdm9pZCBXS1Rl
eHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQp
CiAKIHZvaWQgV0tUZXh0Q2hlY2tlckNoZWNrU3BlbGxpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wg
c3RhcnRCZWZvcmVTZWxlY3Rpb24pCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigp
LT5jaGVja1NwZWxsaW5nKHRvSW1wbChwYWdlKSwgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOworICAg
IFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2hlY2tTcGVsbGluZyhXZWJLaXQ6OnRvSW1w
bChwYWdlKSwgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOwogfQogCiB2b2lkIFdLVGV4dENoZWNrZXJD
aGFuZ2VTcGVsbGluZ1RvV29yZChXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgd29yZCkKIHsK
LSAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNoYW5nZVNwZWxsaW5nVG9Xb3JkKHRv
SW1wbChwYWdlKSwgdG9XVEZTdHJpbmcod29yZCkpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5n
bGV0b24oKS0+Y2hhbmdlU3BlbGxpbmdUb1dvcmQoV2ViS2l0Ojp0b0ltcGwocGFnZSksIHRvV1RG
U3RyaW5nKHdvcmQpKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1VzZXJDb250ZW50Q29udHJvbGxlclJlZi5jcHAKaW5kZXgg
ZjE1N2MwN2M5YThmMzY0YTc1YjliNTcwZmFlZDI5MTUxZGE5MGM4YS4uNDdiNzlkYzEwZWE0MThi
MjM0MTQ3NTVlZmI2ZDM3Y2ZhMWQ5ODkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmLmNwcApAQCAt
NDcsMzAgKzQ3LDMwIEBAIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmIFdLVXNlckNvbnRlbnRD
b250cm9sbGVyQ3JlYXRlKCkKIAogV0tBcnJheVJlZiBXS1VzZXJDb250ZW50Q29udHJvbGxlckNv
cHlVc2VyU2NyaXB0cyhXS1VzZXJDb250ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRy
b2xsZXJSZWYpCiB7Ci0gICAgUmVmPEFQSTo6QXJyYXk+IHVzZXJTY3JpcHRzID0gdG9JbXBsKHVz
ZXJDb250ZW50Q29udHJvbGxlclJlZiktPnVzZXJTY3JpcHRzKCkuY29weSgpOworICAgIFJlZjxB
UEk6OkFycmF5PiB1c2VyU2NyaXB0cyA9IFdlYktpdDo6dG9JbXBsKHVzZXJDb250ZW50Q29udHJv
bGxlclJlZiktPnVzZXJTY3JpcHRzKCkuY29weSgpOwogICAgIHJldHVybiB0b0FQSSgmdXNlclNj
cmlwdHMubGVha1JlZigpKTsKIH0KIAogdm9pZCBXS1VzZXJDb250ZW50Q29udHJvbGxlckFkZFVz
ZXJTY3JpcHQoV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZWYgdXNlckNvbnRlbnRDb250cm9sbGVy
UmVmLCBXS1VzZXJTY3JpcHRSZWYgdXNlclNjcmlwdFJlZikKIHsKLSAgICB0b0ltcGwodXNlckNv
bnRlbnRDb250cm9sbGVyUmVmKS0+YWRkVXNlclNjcmlwdCgqdG9JbXBsKHVzZXJTY3JpcHRSZWYp
LCBJbmplY3RVc2VyU2NyaXB0SW1tZWRpYXRlbHk6Ok5vKTsKKyAgICBXZWJLaXQ6OnRvSW1wbCh1
c2VyQ29udGVudENvbnRyb2xsZXJSZWYpLT5hZGRVc2VyU2NyaXB0KCpXZWJLaXQ6OnRvSW1wbCh1
c2VyU2NyaXB0UmVmKSwgSW5qZWN0VXNlclNjcmlwdEltbWVkaWF0ZWx5OjpObyk7CiB9CiAKIHZv
aWQgV0tVc2VyQ29udGVudENvbnRyb2xsZXJSZW1vdmVBbGxVc2VyU2NyaXB0cyhXS1VzZXJDb250
ZW50Q29udHJvbGxlclJlZiB1c2VyQ29udGVudENvbnRyb2xsZXJSZWYpCiB7Ci0gICAgdG9JbXBs
KHVzZXJDb250ZW50Q29udHJvbGxlclJlZiktPnJlbW92ZUFsbFVzZXJTY3JpcHRzKCk7CisgICAg
V2ViS2l0Ojp0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsVXNlclNj
cmlwdHMoKTsKIH0KIAogdm9pZCBXS1VzZXJDb250ZW50Q29udHJvbGxlckFkZFVzZXJDb250ZW50
RmlsdGVyKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmIHVzZXJDb250ZW50Q29udHJvbGxlclJl
ZiwgV0tVc2VyQ29udGVudEZpbHRlclJlZiB1c2VyQ29udGVudEZpbHRlclJlZikKIHsKICNpZiBF
TkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbCh1c2VyQ29udGVudENvbnRyb2xs
ZXJSZWYpLT5hZGRDb250ZW50UnVsZUxpc3QoKnRvSW1wbCh1c2VyQ29udGVudEZpbHRlclJlZikp
OworICAgIFdlYktpdDo6dG9JbXBsKHVzZXJDb250ZW50Q29udHJvbGxlclJlZiktPmFkZENvbnRl
bnRSdWxlTGlzdCgqV2ViS2l0Ojp0b0ltcGwodXNlckNvbnRlbnRGaWx0ZXJSZWYpKTsKICNlbmRp
ZgogfQogCiB2b2lkIFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVtb3ZlQWxsVXNlckNvbnRlbnRG
aWx0ZXJzKFdLVXNlckNvbnRlbnRDb250cm9sbGVyUmVmIHVzZXJDb250ZW50Q29udHJvbGxlclJl
ZikKIHsKICNpZiBFTkFCTEUoQ09OVEVOVF9FWFRFTlNJT05TKQotICAgIHRvSW1wbCh1c2VyQ29u
dGVudENvbnRyb2xsZXJSZWYpLT5yZW1vdmVBbGxDb250ZW50UnVsZUxpc3RzKCk7CisgICAgV2Vi
S2l0Ojp0b0ltcGwodXNlckNvbnRlbnRDb250cm9sbGVyUmVmKS0+cmVtb3ZlQWxsQ29udGVudFJ1
bGVMaXN0cygpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5jcHAKaW5kZXggODljZmVh
YWU3YWU0YzA0OWFhZTFkNWNhYzdjMWNhNDAwN2QwNDQ2MS4uNGM1MzE2MTFhMmQzZDM5MDdiMzE3
MmMwYjE4ZDVkMGQxYWQxZDhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmNwcApAQCAtNDIsNiAr
NDIsNiBAQCBXS1R5cGVJRCBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja0dldFR5cGVJRCgpCiAK
IHZvaWQgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nlc3NJbmZvKFdL
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrUmVmIHVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UmVm
LCBXS1N0cmluZ1JlZiwgYm9vbCBhbGxvd2VkKQogewotICAgIHRvSW1wbCh1c2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdFJlZiktPnNldFVzZXJNZWRpYUFjY2Vzc0luZm8oYWxsb3dlZCk7CisgICAg
V2ViS2l0Ojp0b0ltcGwodXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RSZWYpLT5zZXRVc2VyTWVk
aWFBY2Nlc3NJbmZvKGFsbG93ZWQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQy9XS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QuY3BwCmlu
ZGV4IDQ1MzY2OTUxMmJmYzU5ZTA3YjQ3YTcwZTBkZjA2YjhkMTlhZGY0NTkuLjdkNGM2ZDZkNDRl
ODY5YTNmYmViMDdmZDg0NTgxMGZiYmE3ZmExZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3Qu
Y3BwCkBAIC0zNiw3ICszNiw3IEBAIFdLVHlwZUlEIFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVl
c3RHZXRUeXBlSUQoKQogCiB2b2lkIFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RBbGxvdyhX
S1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UmVmIHVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0
UmVmLCBXS1N0cmluZ1JlZiBhdWRpb0RldmljZVVJRCwgV0tTdHJpbmdSZWYgdmlkZW9EZXZpY2VV
SUQpCiB7Ci0gICAgdG9JbXBsKHVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UmVmKS0+YWxsb3co
dG9XVEZTdHJpbmcoYXVkaW9EZXZpY2VVSUQpLCB0b1dURlN0cmluZyh2aWRlb0RldmljZVVJRCkp
OworICAgIFdlYktpdDo6dG9JbXBsKHVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0UmVmKS0+YWxs
b3codG9XVEZTdHJpbmcoYXVkaW9EZXZpY2VVSUQpLCB0b1dURlN0cmluZyh2aWRlb0RldmljZVVJ
RCkpOwogfQogCiBzdGF0aWMgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RQcm94eTo6VXNlck1l
ZGlhQWNjZXNzRGVuaWFsUmVhc29uIHRvV0soVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3REZW5p
YWxSZWFzb24gcmVhc29uKQpAQCAtNzIsMTQgKzcyLDE0IEBAIHN0YXRpYyBVc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdFByb3h5OjpVc2VyTWVkaWFBY2Nlc3NEZW5pYWxSZWFzb24gdG9XSyhVc2Vy
TWVkCiAKIHZvaWQgV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdERlbnkoV0tVc2VyTWVkaWFQ
ZXJtaXNzaW9uUmVxdWVzdFJlZiB1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFJlZiwgVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3REZW5pYWxSZWFzb24gcmVhc29uKQogewotICAgIHRvSW1wbCh1
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFJlZiktPmRlbnkodG9XSyhyZWFzb24pKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbCh1c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFJlZiktPmRlbnkodG9XSyhy
ZWFzb24pKTsKIH0KIAogV0tBcnJheVJlZiBXS1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0Vmlk
ZW9EZXZpY2VVSURzKFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RSZWYgdXNlck1lZGlhUGVy
bWlzc2lvblJlZikKIHsKICAgICBXS011dGFibGVBcnJheVJlZiBhcnJheSA9IFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCk7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBmb3IgKGF1dG8mIGRl
dmljZVVJRCA6IHRvSW1wbCh1c2VyTWVkaWFQZXJtaXNzaW9uUmVmKS0+dmlkZW9EZXZpY2VVSURz
KCkpCisgICAgZm9yIChhdXRvJiBkZXZpY2VVSUQgOiBXZWJLaXQ6OnRvSW1wbCh1c2VyTWVkaWFQ
ZXJtaXNzaW9uUmVmKS0+dmlkZW9EZXZpY2VVSURzKCkpCiAgICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKGFycmF5LCB0b0FQSShBUEk6OlN0cmluZzo6Y3JlYXRlKGRldmljZVVJRCkucHRyKCkpKTsK
ICNlbmRpZgogICAgIHJldHVybiBhcnJheTsKQEAgLTg5LDcgKzg5LDcgQEAgV0tBcnJheVJlZiBX
S1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0QXVkaW9EZXZpY2VVSURzKFdLVXNlck1lZGlhUGVy
bWlzc2lvblJlcXUKIHsKICAgICBXS011dGFibGVBcnJheVJlZiBhcnJheSA9IFdLTXV0YWJsZUFy
cmF5Q3JlYXRlKCk7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBmb3IgKGF1dG8mIGRl
dmljZVVJRCA6IHRvSW1wbCh1c2VyTWVkaWFQZXJtaXNzaW9uUmVmKS0+YXVkaW9EZXZpY2VVSURz
KCkpCisgICAgZm9yIChhdXRvJiBkZXZpY2VVSUQgOiBXZWJLaXQ6OnRvSW1wbCh1c2VyTWVkaWFQ
ZXJtaXNzaW9uUmVmKS0+YXVkaW9EZXZpY2VVSURzKCkpCiAgICAgICAgIFdLQXJyYXlBcHBlbmRJ
dGVtKGFycmF5LCB0b0FQSShBUEk6OlN0cmluZzo6Y3JlYXRlKGRldmljZVVJRCkucHRyKCkpKTsK
ICNlbmRpZgogICAgIHJldHVybiBhcnJheTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLVXNlclNjcmlwdFJlZi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS1VzZXJTY3JpcHRSZWYuY3BwCmluZGV4IDE3ZTc2Mjk2MWRlMjNmMzE5MTBkNDMx
MDc0NWZhYWYyZjMyZGYxYjguLjIzNzA0NjYxZDQ3YTM2MWNmMzU0MjhmNTNlMmJhYzIzMTEwZGQ2
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLVXNlclNjcmlw
dFJlZi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tVc2VyU2NyaXB0
UmVmLmNwcApAQCAtNDMsMTUgKzQzLDE1IEBAIFdLVXNlclNjcmlwdFJlZiBXS1VzZXJTY3JpcHRD
cmVhdGVXaXRoU291cmNlKFdLU3RyaW5nUmVmIHNvdXJjZVJlZiwgX1dLVXNlclNjcmlwCiAKIFdL
U3RyaW5nUmVmIFdLVXNlclNjcmlwdENvcHlTb3VyY2UoV0tVc2VyU2NyaXB0UmVmIHVzZXJTY3Jp
cHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvQ29waWVkQVBJKHRvSW1wbCh1c2VyU2NyaXB0UmVmKS0+
dXNlclNjcmlwdCgpLnNvdXJjZSgpKTsKKyAgICByZXR1cm4gdG9Db3BpZWRBUEkoV2ViS2l0Ojp0
b0ltcGwodXNlclNjcmlwdFJlZiktPnVzZXJTY3JpcHQoKS5zb3VyY2UoKSk7CiB9CiAKIF9XS1Vz
ZXJTY3JpcHRJbmplY3Rpb25UaW1lIFdLVXNlclNjcmlwdEdldEluamVjdGlvblRpbWUoV0tVc2Vy
U2NyaXB0UmVmIHVzZXJTY3JpcHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvV0tVc2VyU2NyaXB0SW5q
ZWN0aW9uVGltZSh0b0ltcGwodXNlclNjcmlwdFJlZiktPnVzZXJTY3JpcHQoKS5pbmplY3Rpb25U
aW1lKCkpOworICAgIHJldHVybiB0b1dLVXNlclNjcmlwdEluamVjdGlvblRpbWUoV2ViS2l0Ojp0
b0ltcGwodXNlclNjcmlwdFJlZiktPnVzZXJTY3JpcHQoKS5pbmplY3Rpb25UaW1lKCkpOwogfQog
CiBib29sIFdLVXNlclNjcmlwdEdldE1haW5GcmFtZU9ubHkoV0tVc2VyU2NyaXB0UmVmIHVzZXJT
Y3JpcHRSZWYpCiB7Ci0gICAgcmV0dXJuIHRvSW1wbCh1c2VyU2NyaXB0UmVmKS0+dXNlclNjcmlw
dCgpLmluamVjdGVkRnJhbWVzKCkgPT0gV2ViQ29yZTo6SW5qZWN0SW5Ub3BGcmFtZU9ubHk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHVzZXJTY3JpcHRSZWYpLT51c2VyU2NyaXB0KCkuaW5q
ZWN0ZWRGcmFtZXMoKSA9PSBXZWJDb3JlOjpJbmplY3RJblRvcEZyYW1lT25seTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLV2Vic2l0ZVBvbGljaWVzLmNwcApp
bmRleCA2NjhlZGIyNWQ1ZjI5ZDAzZmZiZDNlMWJkMzdiN2ZjYWQ5N2FjOWE5Li5hNjAwMzlkNmM3
OWI3NjlmMzE2MDUwYTk5MjVkZmE4ZmJjNzViYzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1dlYnNpdGVQb2xpY2llcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tXZWJzaXRlUG9saWNpZXMuY3BwCkBAIC00OCwxOCArNDgsMTgg
QEAgV0tXZWJzaXRlUG9saWNpZXNSZWYgV0tXZWJzaXRlUG9saWNpZXNDcmVhdGUoKQogCiB2b2lk
IFdLV2Vic2l0ZVBvbGljaWVzU2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChXS1dlYnNpdGVQb2xp
Y2llc1JlZiB3ZWJzaXRlUG9saWNpZXMsIGJvb2wgZW5hYmxlZCkKIHsKLSAgICB0b0ltcGwod2Vi
c2l0ZVBvbGljaWVzKS0+c2V0Q29udGVudEJsb2NrZXJzRW5hYmxlZChlbmFibGVkKTsKKyAgICBX
ZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5zZXRDb250ZW50QmxvY2tlcnNFbmFibGVk
KGVuYWJsZWQpOwogfQogCiBib29sIFdLV2Vic2l0ZVBvbGljaWVzR2V0Q29udGVudEJsb2NrZXJz
RW5hYmxlZChXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWNpZXMpCiB7Ci0gICAgcmV0
dXJuIHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5jb250ZW50QmxvY2tlcnNFbmFibGVkKCk7Cisg
ICAgcmV0dXJuIFdlYktpdDo6dG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPmNvbnRlbnRCbG9ja2Vy
c0VuYWJsZWQoKTsKIH0KIAogV0tfRVhQT1JUIFdLRGljdGlvbmFyeVJlZiBXS1dlYnNpdGVQb2xp
Y2llc0NvcHlDdXN0b21IZWFkZXJGaWVsZHMoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBv
bGljaWVzKQogewogICAgIEhhc2hNYXA8V1RGOjpTdHJpbmcsIFJlZlB0cjxBUEk6Ok9iamVjdD4+
IGZpZWxkczsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogdG9JbXBsKHdlYnNpdGVQb2xp
Y2llcyktPmN1c3RvbUhlYWRlckZpZWxkcygpKQorICAgIGZvciAoY29uc3QgYXV0byYgZmllbGQg
OiBXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5jdXN0b21IZWFkZXJGaWVsZHMoKSkK
ICAgICAgICAgZmllbGRzLmFkZChmaWVsZC5uYW1lKCksIEFQSTo6U3RyaW5nOjpjcmVhdGUoZmll
bGQudmFsdWUoKSkpOwogICAgIHJldHVybiB0b0FQSShBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShX
VEZNb3ZlKGZpZWxkcykpLnB0cigpKTsKIH0KQEAgLTcyLDExICs3MiwxMSBAQCBXS19FWFBPUlQg
dm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEN1c3RvbUhlYWRlckZpZWxkcyhXS1dlYnNpdGVQb2xp
Y2llc1JlZiB3ZWJzaQogICAgIGZpZWxkcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBXS1N0
cmluZ1JlZiBuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLQXJyYXlHZXRJdGVtQXRJ
bmRleChrZXlzLmdldCgpLCBpKSk7Ci0gICAgICAgIGF1dG8gZmllbGQgPSBXZWJDb3JlOjpIVFRQ
SGVhZGVyRmllbGQ6OmNyZWF0ZSh0b0ltcGwobmFtZSktPnN0cmluZygpLCB0b0ltcGwoc3RhdGlj
X2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkoZGljdGlvbmFyeSwg
bmFtZSkpKS0+c3RyaW5nKCkpOworICAgICAgICBhdXRvIGZpZWxkID0gV2ViQ29yZTo6SFRUUEhl
YWRlckZpZWxkOjpjcmVhdGUoV2ViS2l0Ojp0b0ltcGwobmFtZSktPnN0cmluZygpLCBXZWJLaXQ6
OnRvSW1wbChzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShkaWN0aW9uYXJ5LCBuYW1lKSkpLT5zdHJpbmcoKSk7CiAgICAgICAgIGlmIChmaWVsZCAmJiBz
dGFydHNXaXRoTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGZpZWxkLT5uYW1lKCksICJ4LSIpKQog
ICAgICAgICAgICAgZmllbGRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKCpmaWVsZCkpOwogICAg
IH0KLSAgICB0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0Q3VzdG9tSGVhZGVyRmllbGRzKFdU
Rk1vdmUoZmllbGRzKSk7CisgICAgV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0
Q3VzdG9tSGVhZGVyRmllbGRzKFdURk1vdmUoZmllbGRzKSk7CiB9CiAKIHZvaWQgV0tXZWJzaXRl
UG9saWNpZXNTZXRBbGxvd2VkQXV0b3BsYXlRdWlya3MoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vi
c2l0ZVBvbGljaWVzLCBXS1dlYnNpdGVBdXRvcGxheVF1aXJrIGFsbG93ZWRRdWlya3MpCkBAIC05
MSwxMyArOTEsMTMgQEAgdm9pZCBXS1dlYnNpdGVQb2xpY2llc1NldEFsbG93ZWRBdXRvcGxheVF1
aXJrcyhXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWMKICAgICBpZiAoYWxsb3dlZFF1
aXJrcyAmIGtXS1dlYnNpdGVBdXRvcGxheVF1aXJrQXJiaXRyYXJ5VXNlckdlc3R1cmVzKQogICAg
ICAgICBxdWlya3MuYWRkKFdlYnNpdGVBdXRvcGxheVF1aXJrOjpBcmJpdHJhcnlVc2VyR2VzdHVy
ZXMpOwogCi0gICAgdG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPnNldEFsbG93ZWRBdXRvcGxheVF1
aXJrcyhxdWlya3MpOworICAgIFdlYktpdDo6dG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPnNldEFs
bG93ZWRBdXRvcGxheVF1aXJrcyhxdWlya3MpOwogfQogCiBXS1dlYnNpdGVBdXRvcGxheVF1aXJr
IFdLV2Vic2l0ZVBvbGljaWVzR2V0QWxsb3dlZEF1dG9wbGF5UXVpcmtzKFdLV2Vic2l0ZVBvbGlj
aWVzUmVmIHdlYnNpdGVQb2xpY2llcykKIHsKICAgICBXS1dlYnNpdGVBdXRvcGxheVF1aXJrIHF1
aXJrcyA9IDA7Ci0gICAgYXV0byBhbGxvd2VkUXVpcmtzID0gdG9JbXBsKHdlYnNpdGVQb2xpY2ll
cyktPmFsbG93ZWRBdXRvcGxheVF1aXJrcygpOworICAgIGF1dG8gYWxsb3dlZFF1aXJrcyA9IFdl
YktpdDo6dG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPmFsbG93ZWRBdXRvcGxheVF1aXJrcygpOwog
CiAgICAgaWYgKGFsbG93ZWRRdWlya3MuY29udGFpbnMoV2Vic2l0ZUF1dG9wbGF5UXVpcms6OlN5
bnRoZXNpemVkUGF1c2VFdmVudHMpKQogICAgICAgICBxdWlya3MgfD0ga1dLV2Vic2l0ZUF1dG9w
bGF5UXVpcmtTeW50aGVzaXplZFBhdXNlRXZlbnRzOwpAQCAtMTEzLDcgKzExMyw3IEBAIFdLV2Vi
c2l0ZUF1dG9wbGF5UXVpcmsgV0tXZWJzaXRlUG9saWNpZXNHZXRBbGxvd2VkQXV0b3BsYXlRdWly
a3MoV0tXZWJzaXRlUG9saWNpCiAKIFdLV2Vic2l0ZUF1dG9wbGF5UG9saWN5IFdLV2Vic2l0ZVBv
bGljaWVzR2V0QXV0b3BsYXlQb2xpY3koV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGlj
aWVzKQogewotICAgIHN3aXRjaCAodG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPmF1dG9wbGF5UG9s
aWN5KCkpIHsKKyAgICBzd2l0Y2ggKFdlYktpdDo6dG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPmF1
dG9wbGF5UG9saWN5KCkpIHsKICAgICBjYXNlIFdlYktpdDo6V2Vic2l0ZUF1dG9wbGF5UG9saWN5
OjpEZWZhdWx0OgogICAgICAgICByZXR1cm4ga1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5RGVmYXVs
dDsKICAgICBjYXNlIFdlYnNpdGVBdXRvcGxheVBvbGljeTo6QWxsb3c6CkBAIC0xMzEsMTYgKzEz
MSwxNiBAQCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0QXV0b3BsYXlQb2xpY3koV0tXZWJzaXRl
UG9saWNpZXNSZWYgd2Vic2l0ZVBvbGljaWVzLCBXSwogewogICAgIHN3aXRjaCAocG9saWN5KSB7
CiAgICAgY2FzZSBrV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3lEZWZhdWx0OgotICAgICAgICB0b0lt
cGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0QXV0b3BsYXlQb2xpY3koV2Vic2l0ZUF1dG9wbGF5UG9s
aWN5OjpEZWZhdWx0KTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+
c2V0QXV0b3BsYXlQb2xpY3koV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZWZhdWx0KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2Uga1dLV2Vic2l0ZUF1dG9wbGF5UG9saWN5QWxsb3c6Ci0gICAg
ICAgIHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5zZXRBdXRvcGxheVBvbGljeShXZWJzaXRlQXV0
b3BsYXlQb2xpY3k6OkFsbG93KTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZVBvbGlj
aWVzKS0+c2V0QXV0b3BsYXlQb2xpY3koV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpBbGxvdyk7CiAg
ICAgICAgIHJldHVybjsKICAgICBjYXNlIGtXS1dlYnNpdGVBdXRvcGxheVBvbGljeUFsbG93V2l0
aG91dFNvdW5kOgotICAgICAgICB0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0QXV0b3BsYXlQ
b2xpY3koV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpBbGxvd1dpdGhvdXRTb3VuZCk7CisgICAgICAg
IFdlYktpdDo6dG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPnNldEF1dG9wbGF5UG9saWN5KFdlYnNp
dGVBdXRvcGxheVBvbGljeTo6QWxsb3dXaXRob3V0U291bmQpOwogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBrV0tXZWJzaXRlQXV0b3BsYXlQb2xpY3lEZW55OgotICAgICAgICB0b0ltcGwod2Vi
c2l0ZVBvbGljaWVzKS0+c2V0QXV0b3BsYXlQb2xpY3koV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpE
ZW55KTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0QXV0b3Bs
YXlQb2xpY3koV2Vic2l0ZUF1dG9wbGF5UG9saWN5OjpEZW55KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lk
IFdLV2Vic2l0ZVBvbGljaWVzU2V0QXV0b3BsYXlQb2xpY3koV0tXZWJzaXRlUG9saWNpZXNSZWYg
d2Vic2l0ZVBvbGljaWVzLCBXSwogCiBXS1dlYnNpdGVQb3BVcFBvbGljeSBXS1dlYnNpdGVQb2xp
Y2llc0dldFBvcFVwUG9saWN5KFdLV2Vic2l0ZVBvbGljaWVzUmVmIHdlYnNpdGVQb2xpY2llcykK
IHsKLSAgICBzd2l0Y2ggKHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5wb3BVcFBvbGljeSgpKSB7
CisgICAgc3dpdGNoIChXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5wb3BVcFBvbGlj
eSgpKSB7CiAgICAgY2FzZSBXZWJzaXRlUG9wVXBQb2xpY3k6OkRlZmF1bHQ6CiAgICAgICAgIHJl
dHVybiBrV0tXZWJzaXRlUG9wVXBQb2xpY3lEZWZhdWx0OwogICAgIGNhc2UgV2Vic2l0ZVBvcFVw
UG9saWN5OjpBbGxvdzoKQEAgLTE2NCwxMyArMTY0LDEzIEBAIHZvaWQgV0tXZWJzaXRlUG9saWNp
ZXNTZXRQb3BVcFBvbGljeShXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWNpZXMsIFdL
V2ViCiB7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBjYXNlIGtXS1dlYnNpdGVQb3BVcFBv
bGljeURlZmF1bHQ6Ci0gICAgICAgIHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5zZXRQb3BVcFBv
bGljeShXZWJzaXRlUG9wVXBQb2xpY3k6OkRlZmF1bHQpOworICAgICAgICBXZWJLaXQ6OnRvSW1w
bCh3ZWJzaXRlUG9saWNpZXMpLT5zZXRQb3BVcFBvbGljeShXZWJzaXRlUG9wVXBQb2xpY3k6OkRl
ZmF1bHQpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBrV0tXZWJzaXRlUG9wVXBQb2xpY3lB
bGxvdzoKLSAgICAgICAgdG9JbXBsKHdlYnNpdGVQb2xpY2llcyktPnNldFBvcFVwUG9saWN5KFdl
YnNpdGVQb3BVcFBvbGljeTo6QWxsb3cpOworICAgICAgICBXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRl
UG9saWNpZXMpLT5zZXRQb3BVcFBvbGljeShXZWJzaXRlUG9wVXBQb2xpY3k6OkFsbG93KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2Uga1dLV2Vic2l0ZVBvcFVwUG9saWN5QmxvY2s6Ci0gICAg
ICAgIHRvSW1wbCh3ZWJzaXRlUG9saWNpZXMpLT5zZXRQb3BVcFBvbGljeShXZWJzaXRlUG9wVXBQ
b2xpY3k6OkJsb2NrKTsKKyAgICAgICAgV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+
c2V0UG9wVXBQb2xpY3koV2Vic2l0ZVBvcFVwUG9saWN5OjpCbG9jayk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xNzgsMTEgKzE3OCwxMSBA
QCB2b2lkIFdLV2Vic2l0ZVBvbGljaWVzU2V0UG9wVXBQb2xpY3koV0tXZWJzaXRlUG9saWNpZXNS
ZWYgd2Vic2l0ZVBvbGljaWVzLCBXS1dlYgogCiBXS1dlYnNpdGVEYXRhU3RvcmVSZWYgV0tXZWJz
aXRlUG9saWNpZXNHZXREYXRhU3RvcmUoV0tXZWJzaXRlUG9saWNpZXNSZWYgd2Vic2l0ZVBvbGlj
aWVzKQogewotICAgIHJldHVybiB0b0FQSSh0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+d2Vic2l0
ZURhdGFTdG9yZSgpKTsKKyAgICByZXR1cm4gdG9BUEkoV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZVBv
bGljaWVzKS0+d2Vic2l0ZURhdGFTdG9yZSgpKTsKIH0KIAogdm9pZCBXS1dlYnNpdGVQb2xpY2ll
c1NldERhdGFTdG9yZShXS1dlYnNpdGVQb2xpY2llc1JlZiB3ZWJzaXRlUG9saWNpZXMsIFdLV2Vi
c2l0ZURhdGFTdG9yZVJlZiB3ZWJzaXRlRGF0YVN0b3JlKQogewotICAgIHRvSW1wbCh3ZWJzaXRl
UG9saWNpZXMpLT5zZXRXZWJzaXRlRGF0YVN0b3JlKHRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7
CisgICAgV2ViS2l0Ojp0b0ltcGwod2Vic2l0ZVBvbGljaWVzKS0+c2V0V2Vic2l0ZURhdGFTdG9y
ZShXZWJLaXQ6OnRvSW1wbCh3ZWJzaXRlRGF0YVN0b3JlKSk7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>