<?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>157329</bug_id>
          
          <creation_ts>2016-05-03 15:58:47 -0700</creation_ts>
          <short_desc>Modern IDB: Add thread identifiers and assertions to IDB DOM objects</short_desc>
          <delta_ts>2016-05-05 15:18:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149953</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1189887</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-03 15:58:47 -0700</bug_when>
    <thetext>Modern IDB: Add thread identifiers and assertions to IDB DOM objects

Getting some easy to review stuff out of my tree while I work on other tasks.

IDB DOM objects will need to track their originating threads to run in workers, and by default should only allow any method to be called from that originating thread.

Some of the assertions will be reworked/removed as more development takes place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189889</commentid>
    <comment_count>1</comment_count>
      <attachid>278037</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-03 16:01:54 -0700</bug_when>
    <thetext>Created attachment 278037
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189895</commentid>
    <comment_count>2</comment_count>
      <attachid>278037</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-03 16:12:07 -0700</bug_when>
    <thetext>Comment on attachment 278037
Patch

assertions!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189905</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-03 16:53:03 -0700</bug_when>
    <thetext>A few quibbles here, will obviously fix before landing when I get back to this.

Marking obsolete to hide from EWS continuing to waste time on it (is that a thing?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190475</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-05-05 15:14:15 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/200483</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>278037</attachid>
            <date>2016-05-03 16:01:54 -0700</date>
            <delta_ts>2016-05-03 16:52:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>76908</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzZWYxOGI5Li4wNTZkZThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEx
IEBACisyMDE2LTA1LTAzICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAg
ICAgICBNb2Rlcm4gSURCOiBBZGQgdGhyZWFkIGlkZW50aWZpZXJzIGFuZCBhc3NlcnRpb25zIHRv
IElEQiBET00gb2JqZWN0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NzMyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAoTm8gY3VycmVudCBjaGFuZ2UgaW4gYmVoYXZpb3IsIHdp
bGwgYmUgdGVzdGVkIGFzIGJ1ZyAxNDk5NTMgbWFrZXMgcHJvZ3Jlc3MpLgorCisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvcjo6SURCQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6fklEQkN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnNvdXJjZXNEZWxldGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZWZmZWN0aXZlT2JqZWN0U3RvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6SURCQ3Vyc29yOjp0cmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJD
dXJzb3I6OmRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJz
b3I6OmRlbGV0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6c2V0R2V0
UmVzdWx0KToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjp2ZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpvYmplY3RT
dG9yZU5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZTo6bWF5YmVDbG9zZUluU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
OjphY3RpdmVET01PYmplY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpj
YW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpzdGFydFZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlk
U3RhcnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6d2lsbENv
bW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkaWRDb21t
aXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6d2lsbEFib3J0
VHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZEFib3J0VHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmRpZENvbW1pdE9yQWJv
cnRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZmlyZVZlcnNp
b25DaGFuZ2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlzcGF0Y2hF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXhJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkaWREZWxldGVJbmRleEluZm8pOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6b3JpZ2luVGhyZWFkSUQpOgorICAgICAgICAKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRl
eDo6SURCSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6On5JREJJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6bmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJ
bmRleDo6b2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmtleVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OnVuaXF1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJJbmRleDo6bXVsdGlFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3Bl
bkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6ZG9Db3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJJbmRleDo6b3BlbktleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJJbmRleDo6ZG9HZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmRvR2V0S2V5KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4OjptYXJrQXNEZWxldGVkKToKKyAgICAgICAgCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OklEQk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjp+SURCT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmU6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6
OmtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4TmFtZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphdXRvSW5jcmVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnB1
dE9yQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkb0RlbGV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlOjppbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVs
ZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRvQ291bnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om1hcmtBc0RlbGV0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OnJvbGxiYWNrSW5mb0ZvclZlcnNpb25DaGFuZ2VB
Ym9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2Vk
SW5kZXhlcyk6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5E
QlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6fklEQk9w
ZW5EQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6b25FcnJv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0Ojp2ZXJzaW9uQ2hhbmdlVHJh
bnNhY3Rpb25EaWRGaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6
ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT3BlbkRCUmVxdWVzdDo6b25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0QmxvY2tlZCk6CisgICAgICAgIAor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCUmVxdWVzdDo6fklEQlJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6ZXJyb3JDb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJSZXF1ZXN0OjpzZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6cmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpzb3Vy
Y2VPYmplY3RTdG9yZUlkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6
c291cmNlSW5kZXhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnJl
cXVlc3RlZEluZGV4UmVjb3JkVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0Ojpl
dmVudFRhcmdldEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjphY3Rp
dmVET01PYmplY3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmNhblN1c3Bl
bmRGb3JEb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6
aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnN0b3Ap
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZW5xdWV1ZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SURCUmVxdWVzdDo6dW5jYXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpJREJSZXF1ZXN0OjpzZXRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVx
dWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c2V0
UmVzdWx0VG9VbmRlZmluZWQpOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVzdWx0
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29y
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlJlcXVlc3Q6Om9uU3VjY2Vzcyk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCUmVx
dWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b3JpZ2luVGhyZWFkSUQpOgor
ICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246On5JREJUcmFuc2FjdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6bW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbjo6ZGIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnNlcnZl
ckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnRyYW5zaXRpb25lZFRvRmluaXNoaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphYm9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6YWJvcnRPblNlcnZlckFuZENhbmNlbFJlcXVlc3RzKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0
aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnN0b3ApOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjppc0ZpbmlzaGVkT3JGaW5pc2hpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb246OmFkZFJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb246OnJlbW92ZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b246OnNjaGVkdWxlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpzY2hlZHVsZU9wZXJhdGlvblRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpvcGVyYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNvbW1pdE9u
U2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpmaW5pc2hBYm9ydE9y
Q29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRTdGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6bm90aWZ5RGlkQWJvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZEFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpkaWRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb246OmZpcmVPbkNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
OjpmaXJlT25BYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZW5xdWV1
ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0U3RvcmVPblNl
cnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkQ3JlYXRlT2JqZWN0
U3RvcmVPblNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y3JlYXRl
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4T25T
ZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZUluZGV4
T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RPcGVu
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkb1JlcXVlc3RPcGVu
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25T
ZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZE9wZW5DdXJzb3JP
blNlcnZlcik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNvck9uU2Vy
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29y
T25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRS
ZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldEtleSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEluZGV4UmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkR2V0UmVjb3JkT25TZXJ2ZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkR2V0Q291bnRPblNlcnZlcik6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6cmVxdWVzdERlbGV0ZVJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZVJlY29yZE9uU2VydmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q2xlYXJPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6Y2xlYXJPYmplY3RTdG9yZU9uU2VydmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWRDbGVhck9iamVjdFN0b3JlT25T
ZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFk
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6cHV0T3JBZGRPblNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGlkUHV0T3JBZGRPblNlcnZlcik6
CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlT25TZXJ2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZU9iamVjdFN0
b3JlT25TZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmRlbGV0ZUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWxldGVJbmRleE9uU2Vy
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVJbmRleE9u
U2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25EaWRD
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6ZXN0YWJsaXNoT25T
ZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFjdGl2YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpkZWFjdGl2YXRlKToKKwogMjAxNi0wNS0w
MyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIERyb3Agc29tZSB1
bm5lY2Vzc2FyeSBleGNlcHRpb24gY2hlY2tpbmcgaW4gdGhlIGdlbmVyYXRlZCBiaW5kaW5ncwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKaW5kZXgg
MDEzYzdmNy4uZjNkNzAzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCiAjaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIklEQkRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJ
REJHZXRSZXN1bHQuaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgpAQCAtMTE2LDYgKzExNyw4IEBA
IElEQkN1cnNvcjo6SURCQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURCT2Jq
ZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjCiAgICAgLCBtX2luZm8oaW5mbykKICAgICAsIG1fb2Jq
ZWN0U3RvcmUoJm9iamVjdFN0b3JlKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV9vYmplY3RTdG9yZS0+bW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVh
ZElEKCkpOworCiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKQEAgLTEyNCwxNSArMTI3LDIw
IEBAIElEQkN1cnNvcjo6SURCQ3Vyc29yKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgSURC
SW5kZXgmIGluZGV4LCBjb25zdCBJREJDdXJzCiAgICAgLCBtX2luZm8oaW5mbykKICAgICAsIG1f
aW5kZXgoJmluZGV4KQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vYmplY3RT
dG9yZS0+bW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwor
CiAgICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKIElEQkN1cnNvcjo6fklEQkN1cnNvcigpCiB7
CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFu
c2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiB9CiAKIGJvb2wgSURCQ3Vy
c29yOjpzb3VyY2VzRGVsZXRlZCgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2lu
VGhyZWFkSUQoKSk7CisKICAgICBpZiAobV9vYmplY3RTdG9yZSkKICAgICAgICAgcmV0dXJuIG1f
b2JqZWN0U3RvcmUtPmlzRGVsZXRlZCgpOwogCkBAIC0xNDIsNiArMTUwLDggQEAgYm9vbCBJREJD
dXJzb3I6OnNvdXJjZXNEZWxldGVkKCkgY29uc3QKIAogSURCT2JqZWN0U3RvcmUmIElEQkN1cnNv
cjo6ZWZmZWN0aXZlT2JqZWN0U3RvcmUoKSBjb25zdAogeworICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gbV9vYmplY3RTdG9yZS0+bW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9y
aWdpblRocmVhZElEKCkpOworCiAgICAgaWYgKG1fb2JqZWN0U3RvcmUpCiAgICAgICAgIHJldHVy
biAqbV9vYmplY3RTdG9yZTsKIApAQCAtMTUxLDE3ICsxNjEsMjAgQEAgSURCT2JqZWN0U3RvcmUm
IElEQkN1cnNvcjo6ZWZmZWN0aXZlT2JqZWN0U3RvcmUoKSBjb25zdAogCiBJREJUcmFuc2FjdGlv
biYgSURCQ3Vyc29yOjp0cmFuc2FjdGlvbigpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLmRhdGFiYXNlKCku
b3JpZ2luVGhyZWFkSUQoKSk7CiAgICAgcmV0dXJuIGVmZmVjdGl2ZU9iamVjdFN0b3JlKCkubW9k
ZXJuVHJhbnNhY3Rpb24oKTsKIH0KIAogY29uc3QgU3RyaW5nJiBJREJDdXJzb3I6OmRpcmVjdGlv
bigpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3Jl
LT5tb2Rlcm5UcmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAgICAg
cmV0dXJuIGRpcmVjdGlvblRvU3RyaW5nKG1faW5mby5jdXJzb3JEaXJlY3Rpb24oKSk7CiB9CiAK
IFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJDdXJzb3I6OnVwZGF0ZShFeGVjU3RhdGUm
IGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6dXBkYXRlIik7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLmRhdGFiYXNl
KCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoc291cmNlc0RlbGV0ZWQoKSkgewogICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwpA
QCAtMjIwLDYgKzIzMyw3IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJSZXF1ZXN0PiBJREJDdXJzb3I6
OnVwZGF0ZShFeGVjU3RhdGUmIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIEV4CiB2b2lkIElEQkN1cnNv
cjo6YWR2YW5jZSh1bnNpZ25lZCBjb3VudCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjphZHZhbmNlIik7CisgICAgQVNTRVJU
KGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLmRh
dGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoIW1fcmVxdWVzdCkgewogICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwpA
QCAtMjY3LDYgKzI4MSw3IEBAIHZvaWQgSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEpTVmFsdWUga2V5VmFsCiB2b2lkIElEQkN1cnNv
cjo6Y29udGludWVGdW5jdGlvbihjb25zdCBJREJLZXlEYXRhJiBrZXksIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkN1cnNvcjo6Y29udGlu
dWVGdW5jdGlvbiAodG8ga2V5ICVzKSIsIGtleS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLT5tb2Rlcm5U
cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAoIW1f
cmVxdWVzdCkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFs
aWRTdGF0ZUVycm9yOwpAQCAtMzE2LDYgKzMzMSw4IEBAIHZvaWQgSURCQ3Vyc29yOjpjb250aW51
ZUZ1bmN0aW9uKGNvbnN0IElEQktleURhdGEmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
CiAKIHZvaWQgSURCQ3Vyc29yOjp1bmNoZWNrZWRJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQktleURh
dGEmIGtleSwgdW5zaWduZWQgY291bnQpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9
PSBtX29iamVjdFN0b3JlLT5tb2Rlcm5UcmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhy
ZWFkSUQoKSk7CisKICAgICArK21fb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ7CiAKICAgICBtX3Jl
cXVlc3QtPndpbGxJdGVyYXRlQ3Vyc29yKCp0aGlzKTsKQEAgLTMyNSw2ICszNDIsNyBAQCB2b2lk
IElEQkN1cnNvcjo6dW5jaGVja2VkSXRlcmF0ZUN1cnNvcihjb25zdCBJREJLZXlEYXRhJiBrZXks
IHVuc2lnbmVkIGNvdW50KQogUmVmUHRyPFdlYkNvcmU6OklEQlJlcXVlc3Q+IElEQkN1cnNvcjo6
ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCQ3Vyc29yOjpk
ZWxldGVGdW5jdGlvbiIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vYmplY3RT
dG9yZS0+bW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwog
CiAgICAgaWYgKHNvdXJjZXNEZWxldGVkKCkpIHsKICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKQEAgLTM3MCw2ICszODgsNyBAQCBSZWZQ
dHI8V2ViQ29yZTo6SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVGdW5jdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiBjbwogdm9pZCBJREJDdXJzb3I6OnNldEdldFJlc3VsdChJREJSZXF1
ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJHZXRSZXN1bHQmIGdldFJlc3VsdCkKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCQ3Vyc29yOjpzZXRHZXRSZXN1bHQgLSBjdXJyZW50IGtleSAlcyIsIGdl
dFJlc3VsdC5rZXlEYXRhKCkubG9nZ2luZ1N0cmluZygpLnN1YnN0cmluZygwLCAxMDApLnV0Zjgo
KS5kYXRhKCkpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vYmplY3RTdG9yZS0+
bW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAg
YXV0byogY29udGV4dCA9IHJlcXVlc3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlm
ICghY29udGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlLmNwcAppbmRleCAxMmQwYzYxLi4zYzdlODJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC02MiwyNiArNjIsMzIgQEAg
SURCRGF0YWJhc2U6OklEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IElEQkNsaWVudDo6SURCQ29ubmVjdGkKIAogSURCRGF0YWJhc2U6On5JREJEYXRhYmFzZSgpCiB7
CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKICAgICBt
X2Nvbm5lY3Rpb25Qcm94eS0+Y29ubmVjdGlvblRvU2VydmVyKCkudW5yZWdpc3RlckRhdGFiYXNl
Q29ubmVjdGlvbigqdGhpcyk7CiB9CiAKIGJvb2wgSURCRGF0YWJhc2U6Omhhc1BlbmRpbmdBY3Rp
dml0eSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRo
cmVhZElEKTsKICAgICByZXR1cm4gIW1fY2xvc2VkSW5TZXJ2ZXI7CiB9CiAKIGNvbnN0IFN0cmlu
ZyBJREJEYXRhYmFzZTo6bmFtZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX29yaWdpblRocmVhZElEKTsKICAgICByZXR1cm4gbV9pbmZvLm5hbWUoKTsKIH0KIAog
dWludDY0X3QgSURCRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAogeworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CiAgICAgcmV0dXJuIG1faW5mby52ZXJz
aW9uKCk7CiB9CiAKIFJlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFzZTo6b2JqZWN0U3Rv
cmVOYW1lcygpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdp
blRocmVhZElEKTsKKwogICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVz
ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBuYW1lIDogbV9pbmZv
Lm9iamVjdFN0b3JlTmFtZXMoKSkKICAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG5h
bWUpOwpAQCAtOTksNiArMTA1LDcgQEAgUmVmUHRyPFdlYkNvcmU6OklEQk9iamVjdFN0b3JlPiBJ
REJEYXRhYmFzZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW0KIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlIC0gKCVzICVzKSIs
IG1faW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKIAorICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CiAgICAgQVNTRVJU
KCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi0+aXNWZXJzaW9uQ2hhbmdlKCkpOwogCiAgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbikgewpAQCAtMTQ0LDYgKzE1MSw4IEBAIFJlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp0cmFuc2FjdGlvbiIpOwogCisgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKKwogICAgIGlmIChtX2Ns
b3NlUGVuZGluZykgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJGYWls
ZWQgdG8gZXhlY3V0ZSAndHJhbnNhY3Rpb24nIG9uICdJREJEYXRhYmFzZSc6IFRoZSBkYXRhYmFz
ZSBjb25uZWN0aW9uIGlzIGNsb3NpbmcuIik7CkBAIC0xOTMsNiArMjAyLDggQEAgUmVmUHRyPFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCoKIAogUmVmUHRyPFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uPiBJREJEYXRh
YmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZSwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5U
aHJlYWRJRCk7CisKICAgICBWZWN0b3I8U3RyaW5nPiBvYmplY3RTdG9yZXMoMSk7CiAgICAgb2Jq
ZWN0U3RvcmVzWzBdID0gb2JqZWN0U3RvcmU7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uKGNvbnRl
eHQsIG9iamVjdFN0b3JlcywgbW9kZSwgZWMpOwpAQCAtMjAyLDYgKzIxMyw4IEBAIHZvaWQgSURC
RGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
LCBFeGNlcHRpb25Db2RlCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkZWxl
dGVPYmplY3RTdG9yZSIpOwogCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdp
blRocmVhZElEKTsKKwogICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKICAg
ICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsK
ICAgICAgICAgZWMubWVzc2FnZSA9IEFTQ0lJTGl0ZXJhbCgiRmFpbGVkIHRvIGV4ZWN1dGUgJ2Rl
bGV0ZU9iamVjdFN0b3JlJyBvbiAnSURCRGF0YWJhc2UnOiBUaGUgZGF0YWJhc2UgaXMgbm90IHJ1
bm5pbmcgYSB2ZXJzaW9uIGNoYW5nZSB0cmFuc2FjdGlvbi4iKTsKQEAgLTIyNyw2ICsyNDAsOCBA
QCB2b2lkIElEQkRhdGFiYXNlOjpjbG9zZSgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRh
dGFiYXNlOjpjbG9zZSAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVy
KTsKIAorICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CisK
ICAgICBtX2Nsb3NlUGVuZGluZyA9IHRydWU7CiAgICAgbWF5YmVDbG9zZUluU2VydmVyKCk7CiB9
CkBAIC0yMzUsNiArMjUwLDggQEAgdm9pZCBJREJEYXRhYmFzZTo6bWF5YmVDbG9zZUluU2VydmVy
KCkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6Om1heWJlQ2xvc2VJblNlcnZl
ciAtICUiIFBSSXU2NCwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKIAorICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CisKICAgICBpZiAobV9j
bG9zZWRJblNlcnZlcikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTAsMTEgKzI2NywxNCBAQCB2
b2lkIElEQkRhdGFiYXNlOjptYXliZUNsb3NlSW5TZXJ2ZXIoKQogCiBjb25zdCBjaGFyKiBJREJE
YXRhYmFzZTo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKICAgICByZXR1cm4gIklEQkRhdGFiYXNl
IjsKIH0KIAogYm9vbCBJREJEYXRhYmFzZTo6Y2FuU3VzcGVuZEZvckRvY3VtZW50U3VzcGVuc2lv
bigpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVh
ZElEKTsKKwogICAgIC8vIEZJWE1FOiBUaGlzIHZhbHVlIHdpbGwgc29tZXRpbWVzIGJlIGZhbHNl
IHdoZW4gZGF0YWJhc2Ugb3BlcmF0aW9ucyBhcmUgYWN0dWFsbHkgaW4gcHJvZ3Jlc3MuCiAgICAg
Ly8gU3VjaCBkYXRhYmFzZSBvcGVyYXRpb25zIGRvIG5vdCB5ZXQgZXhpc3QuCiAgICAgcmV0dXJu
IHRydWU7CkBAIC0yNjQsNiArMjg0LDggQEAgdm9pZCBJREJEYXRhYmFzZTo6c3RvcCgpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpzdG9wIC0gJSIgUFJJdTY0LCBtX2RhdGFi
YXNlQ29ubmVjdGlvbklkZW50aWZpZXIpOwogCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9
PSBtX29yaWdpblRocmVhZElEKTsKKwogICAgIFZlY3RvcjxJREJSZXNvdXJjZUlkZW50aWZpZXI+
IHRyYW5zYWN0aW9uSWRlbnRpZmllcnM7CiAgICAgdHJhbnNhY3Rpb25JZGVudGlmaWVycy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fYWN0aXZlVHJhbnNhY3Rpb25zLnNpemUoKSk7CiAKQEAgLTI4
Myw2ICszMDUsNyBAQCBSZWY8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjpzdGFydFZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdAogewogICAgIExPRyhJbmRleGVk
REIsICJJREJEYXRhYmFzZTo6c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJXMiLCBpbmZv
LmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhyZWFkSUQpOwogICAgIEFTU0VSVCghbV92
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwogICAgIEFTU0VSVChpbmZvLm1vZGUoKSA9PSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7CiAgICAgQVNTRVJUKCFtX2Ns
b3NlUGVuZGluZyk7CkBAIC0zMDAsNiArMzIzLDcgQEAgdm9pZCBJREJEYXRhYmFzZTo6ZGlkU3Rh
cnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRTdGFydFRyYW5zYWN0aW9uICVzIiwgdHJhbnNhY3Rp
b24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgQVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKIAogICAgIC8vIEl0IGlzIHBvc3NpYmxl
IGZvciB0aGUgY2xpZW50IHRvIGhhdmUgYWJvcnRlZCBhIHRyYW5zYWN0aW9uIGJlZm9yZSB0aGUg
c2VydmVyIHJlcGxpZXMgYmFjayB0aGF0IGl0IGhhcyBzdGFydGVkLgogICAgIGlmIChtX2Fib3J0
aW5nVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkp
KQpAQCAtMzEyLDYgKzMzNiw4IEBAIHZvaWQgSURCRGF0YWJhc2U6OndpbGxDb21taXRUcmFuc2Fj
dGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwg
IklEQkRhdGFiYXNlOjp3aWxsQ29tbWl0VHJhbnNhY3Rpb24gJXMiLCB0cmFuc2FjdGlvbi5pbmZv
KCkuaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAorICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CisKICAgICBhdXRvIHJl
ZlRyYW5zYWN0aW9uID0gbV9hY3RpdmVUcmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbi5pbmZv
KCkuaWRlbnRpZmllcigpKTsKICAgICBBU1NFUlQocmVmVHJhbnNhY3Rpb24pOwogICAgIG1fY29t
bWl0dGluZ1RyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSwg
V1RGTW92ZShyZWZUcmFuc2FjdGlvbikpOwpAQCAtMzIxLDYgKzM0Nyw4IEBAIHZvaWQgSURCRGF0
YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCRGF0YWJhc2U6OmRpZENvbW1pdFRyYW5zYWN0aW9u
ICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhy
ZWFkSUQpOworCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID09ICZ0cmFuc2Fj
dGlvbikKICAgICAgICAgbV9pbmZvLnNldFZlcnNpb24odHJhbnNhY3Rpb24uaW5mbygpLm5ld1Zl
cnNpb24oKSk7CiAKQEAgLTMzMSw2ICszNTksOCBAQCB2b2lkIElEQkRhdGFiYXNlOjp3aWxsQWJv
cnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQkRhdGFiYXNlOjp3aWxsQWJvcnRUcmFuc2FjdGlvbiAlcyIsIHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCkubG9nZ2luZ1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKKwogICAg
IGF1dG8gcmVmVHJhbnNhY3Rpb24gPSBtX2FjdGl2ZVRyYW5zYWN0aW9ucy50YWtlKHRyYW5zYWN0
aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpOwogICAgIGlmICghcmVmVHJhbnNhY3Rpb24pCiAgICAg
ICAgIHJlZlRyYW5zYWN0aW9uID0gbV9jb21taXR0aW5nVHJhbnNhY3Rpb25zLnRha2UodHJhbnNh
Y3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSk7CkBAIC0zNDksNiArMzc5LDggQEAgdm9pZCBJREJE
YXRhYmFzZTo6ZGlkQWJvcnRUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24p
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQkRhdGFiYXNlOjpkaWRBYm9ydFRyYW5zYWN0aW9u
ICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CiAKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhy
ZWFkSUQpOworCiAgICAgaWYgKHRyYW5zYWN0aW9uLmlzVmVyc2lvbkNoYW5nZSgpKSB7CiAgICAg
ICAgIEFTU0VSVCh0cmFuc2FjdGlvbi5vcmlnaW5hbERhdGFiYXNlSW5mbygpKTsKICAgICAgICAg
QVNTRVJUKG1faW5mby52ZXJzaW9uKCkgPT0gdHJhbnNhY3Rpb24ub3JpZ2luYWxEYXRhYmFzZUlu
Zm8oKS0+dmVyc2lvbigpKTsKQEAgLTM2Myw2ICszOTUsOCBAQCB2b2lkIElEQkRhdGFiYXNlOjpk
aWRDb21taXRPckFib3J0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQog
ewogICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlkQ29tbWl0T3JBYm9ydFRyYW5z
YWN0aW9uICVzIiwgdHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CiAKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb3Jp
Z2luVGhyZWFkSUQpOworCiAgICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uID09ICZ0
cmFuc2FjdGlvbikKICAgICAgICAgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSBudWxscHRy
OwogCkBAIC0zOTEsNiArNDI1LDggQEAgdm9pZCBJREJEYXRhYmFzZTo6ZmlyZVZlcnNpb25DaGFu
Z2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHJlcXVlc3RJZGUKICAgICB1aW50
NjRfdCBjdXJyZW50VmVyc2lvbiA9IG1faW5mby52ZXJzaW9uKCk7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIklEQkRhdGFiYXNlOjpmaXJlVmVyc2lvbkNoYW5nZUV2ZW50IC0gY3VycmVudCB2ZXJzaW9u
ICUiIFBSSXU2NCAiLCByZXF1ZXN0ZWQgdmVyc2lvbiAlIiBQUkl1NjQgIiwgY29ubmVjdGlvbiAl
IiBQUkl1NjQsIGN1cnJlbnRWZXJzaW9uLCByZXF1ZXN0ZWRWZXJzaW9uLCBtX2RhdGFiYXNlQ29u
bmVjdGlvbklkZW50aWZpZXIpOwogCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29y
aWdpblRocmVhZElEKTsKKwogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIHx8IG1f
Y2xvc2VQZW5kaW5nKSB7CiAgICAgICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kaWRGaXJlVmVyc2lv
bkNoYW5nZUV2ZW50KG1fZGF0YWJhc2VDb25uZWN0aW9uSWRlbnRpZmllciwgcmVxdWVzdElkZW50
aWZpZXIpOwogICAgICAgICByZXR1cm47CkBAIC00MDQsNiArNDQwLDcgQEAgdm9pZCBJREJEYXRh
YmFzZTo6ZmlyZVZlcnNpb25DaGFuZ2VFdmVudChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXIm
IHJlcXVlc3RJZGUKIGJvb2wgSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJEYXRhYmFzZTo6ZGlzcGF0Y2hFdmVudCAoJSIg
UFJJdTY0ICIpIiwgbV9kYXRhYmFzZUNvbm5lY3Rpb25JZGVudGlmaWVyKTsKKyAgICBBU1NFUlQo
Y3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhyZWFkSUQpOwogCiAgICAgYm9vbCByZXN1bHQg
PSBFdmVudFRhcmdldFdpdGhJbmxpbmVEYXRhOjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKIApAQCAt
NDE1LDYgKzQ1Miw4IEBAIGJvb2wgSURCRGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2
ZW50KQogCiB2b2lkIElEQkRhdGFiYXNlOjpkaWRDcmVhdGVJbmRleEluZm8oY29uc3QgSURCSW5k
ZXhJbmZvJiBpbmZvKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5U
aHJlYWRJRCk7CisKICAgICBhdXRvKiBvYmplY3RTdG9yZSA9IG1faW5mby5pbmZvRm9yRXhpc3Rp
bmdPYmplY3RTdG9yZShpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKTsKICAgICBBU1NFUlQo
b2JqZWN0U3RvcmUpOwogICAgIG9iamVjdFN0b3JlLT5hZGRFeGlzdGluZ0luZGV4KGluZm8pOwpA
QCAtNDIyLDYgKzQ2MSw4IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRpZENyZWF0ZUluZGV4SW5mbyhj
b25zdCBJREJJbmRleEluZm8mIGluZm8pCiAKIHZvaWQgSURCRGF0YWJhc2U6OmRpZERlbGV0ZUlu
ZGV4SW5mbyhjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKKwogICAgIGF1dG8qIG9iamVjdFN0b3JlID0g
bV9pbmZvLmluZm9Gb3JFeGlzdGluZ09iamVjdFN0b3JlKGluZm8ub2JqZWN0U3RvcmVJZGVudGlm
aWVyKCkpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZSk7CiAgICAgb2JqZWN0U3RvcmUtPmRlbGV0
ZUluZGV4KGluZm8ubmFtZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5oCmluZGV4IGM5YjhkOWEuLmQ5OGQ4M2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaApAQCAtMTAxLDYgKzEwMSw4IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgZmluYWw7CiAK
KyAgICBUaHJlYWRJZGVudGlmaWVyIG9yaWdpblRocmVhZElEKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5UaHJlYWRJRDsgfQorCiBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQmLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Qcm94eSYsIGNvbnN0IElEQlJl
c3VsdERhdGEmKTsKIApAQCAtMTE5LDYgKzEyMSw4IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxJ
REJSZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fYWN0aXZlVHJh
bnNhY3Rpb25zOwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+PiBtX2NvbW1pdHRpbmdUcmFuc2FjdGlvbnM7CiAgICAgSGFzaE1hcDxJREJS
ZXNvdXJjZUlkZW50aWZpZXIsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4+IG1fYWJvcnRpbmdUcmFu
c2FjdGlvbnM7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIG1fb3JpZ2luVGhyZWFkSUQgeyBjdXJy
ZW50VGhyZWFkKCkgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAppbmRleCA0ODk1MTIwLi4yYWY3
YWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRl
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3Bw
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAiSURCQ3Vyc29yLmgiCisjaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1ZGUgIklEQktleVJhbmdlRGF0YS5oIgog
I2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCkBAIC00NiwxMSArNDcsMTQgQEAgSURCSW5kZXg6
OklEQkluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQkluZGV4
SW5mbyYgaW5mbywgSUQKICAgICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9vYmplY3RTdG9yZShv
YmplY3RTdG9yZSkKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb2JqZWN0U3Rv
cmUubW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOworCiAg
ICAgc3VzcGVuZElmTmVlZGVkKCk7CiB9CiAKIElEQkluZGV4Ojp+SURCSW5kZXgoKQogeworICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlv
bigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiB9CiAKIGNvbnN0IGNoYXIqIElEQklu
ZGV4OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTcwLDMyICs3NCwzOCBAQCBib29s
IElEQkluZGV4OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAogCiBjb25zdCBTdHJpbmcmIElE
QkluZGV4OjpuYW1lKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1f
b2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElE
KCkpOwogICAgIHJldHVybiBtX2luZm8ubmFtZSgpOwogfQogCiBSZWZQdHI8SURCT2JqZWN0U3Rv
cmU+IElEQkluZGV4OjpvYmplY3RTdG9yZSgpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5U
aHJlYWRJRCgpKTsKICAgICByZXR1cm4gJm1fb2JqZWN0U3RvcmU7CiB9CiAKIGNvbnN0IElEQktl
eVBhdGgmIElEQkluZGV4OjprZXlQYXRoKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgpLm9y
aWdpblRocmVhZElEKCkpOwogICAgIHJldHVybiBtX2luZm8ua2V5UGF0aCgpOwogfQogCiBib29s
IElEQkluZGV4Ojp1bmlxdWUoKSBjb25zdAogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkg
PT0gbV9vYmplY3RTdG9yZS5tb2Rlcm5UcmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhy
ZWFkSUQoKSk7CiAgICAgcmV0dXJuIG1faW5mby51bmlxdWUoKTsKIH0KIAogYm9vbCBJREJJbmRl
eDo6bXVsdGlFbnRyeSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJ
RCgpKTsKICAgICByZXR1cm4gbV9pbmZvLm11bHRpRW50cnkoKTsKIH0KIAogUmVmUHRyPElEQlJl
cXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRl
eHQsIElEQktleVJhbmdlKiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQklu
ZGV4OjpvcGVuQ3Vyc29yIik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVj
dFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsK
IAogICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewogICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwpA
QCAtMTI4LDYgKzEzOCw4IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbkN1cnNv
cihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSCiBSZWZQdHI8SURCUmVx
dWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgSlNWYWx1ZSBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbkN1cnNv
ciIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vYmplY3RTdG9yZS5tb2Rlcm5U
cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CisKICAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBl
Yy5jb2RlKTsKICAgICBpZiAoZWMuY29kZSkgewogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnb3BlbkN1cnNvcicgb24gJ0lEQkluZGV4JzogVGhl
IHBhcmFtZXRlciBpcyBub3QgYSB2YWxpZCBrZXkuIik7CkBAIC0xNjAsNiArMTcyLDggQEAgUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBj
b250ZXh0LCBKU1ZhbHVlIGtleSwKIAogUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0Nv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJhbmdlRGF0
YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCkuZGF0YWJh
c2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKKwogICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9vYmplY3RT
dG9yZS5pc0RlbGV0ZWQoKSkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZXhlY3V0ZSAnY291bnQnIG9uICdJREJJbmRleCc6IFRoZSBpbmRleCBvciBp
dHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CkBAIC0xODQsNiArMTk4LDcgQEAg
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0NvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IElEQksKIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6b3Bl
bktleUN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJLZXlSYW5nZSog
cmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJJbmRleDo6b3BlbktleUN1cnNv
ciIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vYmplY3RTdG9yZS5tb2Rlcm5U
cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9k
ZWxldGVkIHx8IG1fb2JqZWN0U3RvcmUuaXNEZWxldGVkKCkpIHsKICAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKQEAgLTI0MSw2ICsyNTYs
OCBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiBjb250ZXh0LCBKU1ZhbHVlIGtleSwgRQogCiBSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5k
ZXg6OmRvR2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IElEQktleVJh
bmdlRGF0YSYgcmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7CisgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3JlLm1vZGVyblRyYW5zYWN0aW9uKCku
ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKKwogICAgIGlmIChtX2RlbGV0ZWQgfHwgbV9v
YmplY3RTdG9yZS5pc0RlbGV0ZWQoKSkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwogICAgICAgICBlYy5tZXNzYWdlID0gQVNDSUlM
aXRlcmFsKCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0JyBvbiAnSURCSW5kZXgnOiBUaGUgaW5kZXgg
b3IgaXRzIG9iamVjdCBzdG9yZSBoYXMgYmVlbiBkZWxldGVkLiIpOwpAQCAtMjg1LDYgKzMwMiw4
IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmIGNvbnRleHQsIEpTVmFsdWUga2V5CiAKIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRl
eDo6ZG9HZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgSURCS2V5
UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKKyAgICBB
U1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb2JqZWN0U3RvcmUubW9kZXJuVHJhbnNhY3Rpb24o
KS5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOworCiAgICAgaWYgKG1fZGVsZXRlZCB8fCBt
X29iamVjdFN0b3JlLmlzRGVsZXRlZCgpKSB7CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7CiAgICAgICAgIGVjLm1lc3NhZ2UgPSBBU0NJ
SUxpdGVyYWwoIkZhaWxlZCB0byBleGVjdXRlICdnZXRLZXknIG9uICdJREJJbmRleCc6IFRoZSBp
bmRleCBvciBpdHMgb2JqZWN0IHN0b3JlIGhhcyBiZWVuIGRlbGV0ZWQuIik7CkBAIC0zMDgsNiAr
MzI3LDggQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4Ojpkb0dldEtleShTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBJREIKIAogdm9pZCBJREJJbmRleDo6bWFya0Fz
RGVsZXRlZCgpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29iamVjdFN0b3Jl
Lm1vZGVyblRyYW5zYWN0aW9uKCkuZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKKwogICAg
IEFTU0VSVCghbV9kZWxldGVkKTsKICAgICBtX2RlbGV0ZWQgPSB0cnVlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCmluZGV4
IGJjZDMyNTcuLjliZWFmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTYzLDExICs2MywxNCBAQCBJREJPYmplY3RT
dG9yZTo6SURCT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29u
c3QgSURCT2JqZWN0UwogICAgICwgbV9vcmlnaW5hbEluZm8oaW5mbykKICAgICAsIG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOworCiAgICAgc3VzcGVuZElm
TmVlZGVkKCk7CiB9CiAKIElEQk9iamVjdFN0b3JlOjp+SURCT2JqZWN0U3RvcmUoKQogeworICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5vcmln
aW5UaHJlYWRJRCgpKTsKIH0KIAogY29uc3QgY2hhciogSURCT2JqZWN0U3RvcmU6OmFjdGl2ZURP
TU9iamVjdE5hbWUoKSBjb25zdApAQCAtODcsMTYgKzkwLDIwIEBAIGJvb2wgSURCT2JqZWN0U3Rv
cmU6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAKIGNvbnN0IFN0cmluZyYgSURCT2JqZWN0
U3RvcmU6Om5hbWUoKSBjb25zdAogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICByZXR1cm4gbV9p
bmZvLm5hbWUoKTsKIH0KIAogY29uc3QgSURCS2V5UGF0aCYgSURCT2JqZWN0U3RvcmU6OmtleVBh
dGgoKSBjb25zdAogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICByZXR1cm4gbV9pbmZvLmtleVBh
dGgoKTsKIH0KIAogUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlOjppbmRleE5h
bWVzKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CisKICAgICBSZWZQdHI8RE9NU3RyaW5n
TGlzdD4gaW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwogICAgIGZvciAoYXV0
byYgbmFtZSA6IG1faW5mby5pbmRleE5hbWVzKCkpCiAgICAgICAgIGluZGV4TmFtZXMtPmFwcGVu
ZChuYW1lKTsKQEAgLTEwNywxNyArMTE0LDIwIEBAIFJlZlB0cjxET01TdHJpbmdMaXN0PiBJREJP
YmplY3RTdG9yZTo6aW5kZXhOYW1lcygpIGNvbnN0CiAKIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4g
SURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uKCkKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7XAogICAg
IHJldHVybiAmbV90cmFuc2FjdGlvbi5nZXQoKTsKIH0KIAogYm9vbCBJREJPYmplY3RTdG9yZTo6
YXV0b0luY3JlbWVudCgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogICAgIHJldHVybiBt
X2luZm8uYXV0b0luY3JlbWVudCgpOwogfQogCiBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0
U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCS2V5
UmFuZ2UqIHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6
Om9wZW5DdXJzb3IiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBpZiAobV9kZWxldGVkKSB7
CiAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJy
b3I7CkBAIC0xNTQsNiArMTY0LDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEoKIFJlZlB0cjxJ
REJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNv
bnRleHQsIEpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6Z2V0Iik7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkp
OwogCiAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwpAQCAt
MTgxLDYgKzE5Miw3IEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIEpTVmFsdWUKIFJlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElE
QktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6OmdldCIpOworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgp
KTsKIAogICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewogICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKQEAg
LTIyNyw2ICsyMzksNyBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dEZv
ckN1cnNvclVwZGF0ZShFeGVjU3RhdGUmIHN0YXRlLCBKU1ZhbHVlCiBSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OnB1dE9yQWRkKEV4ZWNTdGF0ZSYgc3RhdGUsIEpTVmFsdWUgdmFs
dWUsIFJlZlB0cjxJREJLZXk+IGtleSwgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGUgb3ZlcndyaXRlTW9kZSwgSW5saW5lS2V5Q2hlY2sgaW5saW5lS2V5Q2hlY2ssIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0
b3JlOjpwdXRPckFkZCIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGF1dG8gY29udGV4dCA9
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSk7CiAgICAgaWYgKCFj
b250ZXh0KSB7CkBAIC0zMzcsNiArMzUwLDcgQEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXgKIFJl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZG9EZWxldGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgSURCS2V5UmFuZ2UqIGtleVJhbmdlLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPYmplY3RTdG9yZTo6ZGVs
ZXRlRnVuY3Rpb24iKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICAvLyBUaGUgSURCIHNwZWMg
Zm9yIHNldmVyYWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlv
biByZWxhdGVkIGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3JlCiAgICAgLy8gdGhlIGV4Y2Vw
dGlvbiBmb3IgYW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCkBAIC0zOTIsNiArNDA2LDcg
QEAgUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjptb2Rlcm5EZWxldGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwKIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCT2JqZWN0U3RvcmU6
OmNsZWFyIik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgLy8gVGhlIElEQiBzcGVjIGZvciBz
ZXZlcmFsIElEQk9iamVjdFN0b3JlIG1ldGhvZHMgc3RhdGVzIHRoYXQgdHJhbnNhY3Rpb24gcmVs
YXRlZCBleGNlcHRpb25zIHNob3VsZCBmaXJlIGJlZm9yZQogICAgIC8vIHRoZSBleGNlcHRpb24g
Zm9yIGFuIG9iamVjdCBzdG9yZSBiZWluZyBkZWxldGVkLgpAQCAtNDIzLDYgKzQzOCw3IEBAIFJl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCYgY29udGV4dCwgRXhjZXB0CiBSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpj
cmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJP
YmplY3RTdG9yZTo6Y3JlYXRlSW5kZXggJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5vcmlnaW5U
aHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpIHsKICAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKQEAgLTQ4MSw2ICs0OTcsNyBA
QCBSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgU3RyaQogUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9y
ZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQk9iamVjdFN0b3JlOjppbmRleCIpOwor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5v
cmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTUxOSw2ICs1MzYsNyBAQCBSZWZQdHI8SURCSW5k
ZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgRXhjZXB0
aW9uQ29kZVdpdAogdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5n
JiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQogewogICAgIExPRyhJbmRleGVk
REIsICJJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXggJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkp
OworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChtX2RlbGV0ZWQpIHsKICAgICAgICAgZWMu
Y29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKQEAgLTU4NSw2
ICs2MDMsOCBAQCBSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNvdW50KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIElEQktleQogCiBSZWZQdHI8SURCUmVxdWVzdD4g
SURCT2JqZWN0U3RvcmU6OmRvQ291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFi
YXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CisKICAgICAvLyBUaGUgSURCIHNwZWMgZm9yIHNldmVy
YWwgSURCT2JqZWN0U3RvcmUgbWV0aG9kcyBzdGF0ZXMgdGhhdCB0cmFuc2FjdGlvbiByZWxhdGVk
IGV4Y2VwdGlvbnMgc2hvdWxkIGZpcmUgYmVmb3JlCiAgICAgLy8gdGhlIGV4Y2VwdGlvbiBmb3Ig
YW4gb2JqZWN0IHN0b3JlIGJlaW5nIGRlbGV0ZWQuCiAgICAgLy8gSG93ZXZlciwgYSBoYW5kZnVs
IG9mIFczQyBJREIgdGVzdHMgZXhwZWN0IHRoZSBkZWxldGVkIGV4Y2VwdGlvbiBldmVuIHRob3Vn
aCB0aGUgdHJhbnNhY3Rpb24gaW5hY3RpdmUgZXhjZXB0aW9uIGFsc28gYXBwbGllcy4KQEAgLTYx
MiwxNiArNjMyLDIwIEBAIFJlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZG9Db3Vu
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zCiAKIHZvaWQgSURCT2JqZWN0
U3RvcmU6Om1hcmtBc0RlbGV0ZWQoKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICBtX2RlbGV0
ZWQgPSB0cnVlOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlOjpyb2xsYmFja0luZm9Gb3JWZXJz
aW9uQ2hhbmdlQWJvcnQoKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV90cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKS5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICBtX2luZm8gPSBtX29y
aWdpbmFsSW5mbzsKIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZTo6dmlzaXRSZWZlcmVuY2VkSW5k
ZXhlcyhTbG90VmlzaXRvciYgdmlzaXRvcikgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkub3JpZ2luVGhyZWFkSUQoKSk7CisK
ICAgICBMb2NrZXI8TG9jaz4gbG9ja2VyKG1fcmVmZXJlbmNlZEluZGV4TG9jayk7CiAgICAgZm9y
IChhdXRvJiBpbmRleCA6IG1fcmVmZXJlbmNlZEluZGV4ZXMudmFsdWVzKCkpCiAgICAgICAgIHZp
c2l0b3IuYWRkT3BhcXVlUm9vdChpbmRleC5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPcGVuREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZW5EQlJlcXVlc3QuY3BwCmluZGV4IGFiNGMyMzku
LjkzMTkyNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9wZW5EQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9wZW5EQlJlcXVlc3QuY3BwCkBAIC02MiwxNiArNjIsMjEgQEAgSURCT3BlbkRCUmVxdWVz
dDo6SURCT3BlbkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJREJD
bGllbnQ6OkkKIAogSURCT3BlbkRCUmVxdWVzdDo6fklEQk9wZW5EQlJlcXVlc3QoKQogeworICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CiB9CiAKIHZvaWQg
SURCT3BlbkRCUmVxdWVzdDo6b25FcnJvcihjb25zdCBJREJSZXN1bHREYXRhJiBkYXRhKQogewor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gb3JpZ2luVGhyZWFkSUQoKSk7CisKICAgICBt
X2RvbUVycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShkYXRhLmVycm9yKCkubmFtZSgpLCBkYXRhLmVy
cm9yKCkubWVzc2FnZSgpKTsKICAgICBlbnF1ZXVlRXZlbnQoSURCUmVxdWVzdENvbXBsZXRpb25F
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVlLCB0cnVlLCAqdGhpcykp
OwogfQogCiB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbkRp
ZEZpbmlzaCgpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJ
RCgpKTsKKwogICAgIC8vIDMuMy43ICJ2ZXJzaW9uY2hhbmdlIiB0cmFuc2FjdGlvbiBzdGVwcwog
ICAgIC8vIFdoZW4gdGhlIHRyYW5zYWN0aW9uIGlzIGZpbmlzaGVkLCBhZnRlciBmaXJpbmcgY29t
cGxldGUvYWJvcnQgb24gdGhlIHRyYW5zYWN0aW9uLCBpbW1lZGlhdGVseSBzZXQgcmVxdWVzdCdz
IHRyYW5zYWN0aW9uIHByb3BlcnR5IHRvIG51bGwuCiAgICAgbV9zaG91bGRFeHBvc2VUcmFuc2Fj
dGlvblRvRE9NID0gZmFsc2U7CkBAIC04MSw2ICs4Niw3IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVz
dDo6ZmlyZVN1Y2Nlc3NBZnRlclZlcnNpb25DaGFuZ2VDb21taXQoKQogewogICAgIExPRyhJbmRl
eGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpmaXJlU3VjY2Vzc0FmdGVyVmVyc2lvbkNoYW5nZUNv
bW1pdCgpIik7CiAKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElE
KCkpOwogICAgIEFTU0VSVChoYXNQZW5kaW5nQWN0aXZpdHkoKSk7CiAgICAgbV90cmFuc2FjdGlv
bi0+YWRkUmVxdWVzdCgqdGhpcyk7CiAKQEAgLTk0LDYgKzEwMCw3IEBAIHZvaWQgSURCT3BlbkRC
UmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJzaW9uQ2hhbmdlQ29tcGxldGlvbigpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQk9wZW5EQlJlcXVlc3Q6OmZpcmVFcnJvckFmdGVyVmVyc2lvbkNo
YW5nZUNvbXBsZXRpb24oKSIpOwogCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmln
aW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQoaGFzUGVuZGluZ0FjdGl2aXR5KCkpOwogCiAgICAg
SURCRXJyb3IgaWRiRXJyb3IoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpOwpAQCAt
MTA2LDYgKzExMyw4IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6ZmlyZUVycm9yQWZ0ZXJWZXJz
aW9uQ2hhbmdlQ29tcGxldGlvbigpCiAKIGJvb2wgSURCT3BlbkRCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudChFdmVudCYgZXZlbnQpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmln
aW5UaHJlYWRJRCgpKTsKKwogICAgIGJvb2wgcmVzdWx0ID0gSURCUmVxdWVzdDo6ZGlzcGF0Y2hF
dmVudChldmVudCk7CiAKICAgICBpZiAobV90cmFuc2FjdGlvbiAmJiBtX3RyYW5zYWN0aW9uLT5p
c1ZlcnNpb25DaGFuZ2UoKSAmJiAoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2
ZW50IHx8IGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50KSkKQEAgLTEx
OCw2ICsxMjcsOCBAQCB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6Om9uU3VjY2Vzcyhjb25zdCBJREJS
ZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJS
ZXF1ZXN0OjpvblN1Y2Nlc3MoKSIpOwogCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBv
cmlnaW5UaHJlYWRJRCgpKTsKKwogICAgIHNldFJlc3VsdChJREJEYXRhYmFzZTo6Y3JlYXRlKCpz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGNvbm5lY3Rpb25Qcm94eSgpLCByZXN1bHREYXRhKSk7
CiAgICAgbV9pc0RvbmUgPSB0cnVlOwogCkBAIC0xMjYsNiArMTM3LDggQEAgdm9pZCBJREJPcGVu
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIAog
dm9pZCBJREJPcGVuREJSZXF1ZXN0OjpvblVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzdWx0RGF0
YSYgcmVzdWx0RGF0YSkKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRo
cmVhZElEKCkpOworCiAgICAgUmVmPElEQkRhdGFiYXNlPiBkYXRhYmFzZSA9IElEQkRhdGFiYXNl
OjpjcmVhdGUoKnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgY29ubmVjdGlvblByb3h5KCksIHJl
c3VsdERhdGEpOwogICAgIFJlZjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBkYXRhYmFz
ZS0+c3RhcnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24ocmVzdWx0RGF0YS50cmFuc2FjdGlvbklu
Zm8oKSwgKnRoaXMpOwogCkBAIC0xNDcsNiArMTYwLDggQEAgdm9pZCBJREJPcGVuREJSZXF1ZXN0
OjpvblVwZ3JhZGVOZWVkZWQoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIAogdm9p
ZCBJREJPcGVuREJSZXF1ZXN0OjpvbkRlbGV0ZURhdGFiYXNlU3VjY2Vzcyhjb25zdCBJREJSZXN1
bHREYXRhJiByZXN1bHREYXRhKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gb3Jp
Z2luVGhyZWFkSUQoKSk7CisKICAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0gcmVzdWx0RGF0YS5k
YXRhYmFzZUluZm8oKS52ZXJzaW9uKCk7CiAKICAgICBMT0coSW5kZXhlZERCLCAiSURCT3BlbkRC
UmVxdWVzdDo6b25EZWxldGVEYXRhYmFzZVN1Y2Nlc3MoKSAtIGN1cnJlbnQgdmVyc2lvbiBpcyAl
IiBQUkl1NjQsIG9sZFZlcnNpb24pOwpAQCAtMTYxLDYgKzE3Niw4IEBAIHZvaWQgSURCT3BlbkRC
UmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRhJiBkYXRhKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0Q29tcGxldGVkIik7
CiAKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG9yaWdpblRocmVhZElEKCkpOworCiAg
ICAgLy8gSWYgYW4gT3BlbiByZXF1ZXN0IHdhcyBjb21wbGV0ZWQgYWZ0ZXIgdGhlIHBhZ2UgaGFz
IG5hdmlnYXRlZCwgbGVhdmluZyB0aGlzIHJlcXVlc3QKICAgICAvLyB3aXRoIGEgc3RvcHBlZCBz
Y3JpcHQgZXhlY3V0aW9uIGNvbnRleHQsIHdlIG5lZWQgdG8gbWVzc2FnZSBiYWNrIHRvIHRoZSBz
ZXJ2ZXIgc28gaXQKICAgICAvLyBkb2Vzbid0IGhhbmcgd2FpdGluZyBvbiBhIGRhdGFiYXNlIGNv
bm5lY3Rpb24gb3IgdHJhbnNhY3Rpb24gdGhhdCB3aWxsIG5ldmVyIGV4aXN0LgpAQCAtMTk5LDYg
KzIxNiw4IEBAIHZvaWQgSURCT3BlbkRCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChjb25zdCBJ
REJSZXN1bHREYXRhJiBkYXRhKQogCiB2b2lkIElEQk9wZW5EQlJlcXVlc3Q6OnJlcXVlc3RCbG9j
a2VkKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNpb24pCiB7CisgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBvcmlnaW5UaHJlYWRJRCgpKTsKKwogICAgIExPRyhJbmRl
eGVkREIsICJJREJPcGVuREJSZXF1ZXN0OjpyZXF1ZXN0QmxvY2tlZCIpOwogICAgIGVucXVldWVF
dmVudChJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9u
LCBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDg5ODA5ZTQuLmZkY2UyOTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBA
IC0xMTksMTcgKzExOSwyMyBAQCBJREJSZXF1ZXN0OjpJREJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgSW5kZXhlZAogCiBJREJSZXF1ZXN0
Ojp+SURCUmVxdWVzdCgpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdp
blRocmVhZElEKTsKKwogICAgIGlmIChtX2N1cnNvclJlc3VsdCkKICAgICAgICAgbV9jdXJzb3JS
ZXN1bHQtPmNsZWFyUmVxdWVzdCgpOwogfQogCiB1bnNpZ25lZCBzaG9ydCBJREJSZXF1ZXN0Ojpl
cnJvckNvZGUoRXhjZXB0aW9uQ29kZSYpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKKwogICAgIHJldHVybiAwOwogfQogCiBSZWZQdHI8
RE9NRXJyb3I+IElEQlJlcXVlc3Q6OmVycm9yKEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
IGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElE
KTsKKwogICAgIGlmIChtX2lzRG9uZSkKICAgICAgICAgcmV0dXJuIG1fZG9tRXJyb3I7CiAKQEAg
LTE0MCw2ICsxNDYsNyBAQCBSZWZQdHI8RE9NRXJyb3I+IElEQlJlcXVlc3Q6OmVycm9yKEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIGNvbnN0CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0U291
cmNlKElEQkN1cnNvciYgY3Vyc29yKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV9vcmlnaW5UaHJlYWRJRCk7CiAgICAgQVNTRVJUKCFtX2N1cnNvclJlcXVlc3ROb3RpZmllcik7
CiAKICAgICBtX29iamVjdFN0b3JlU291cmNlID0gbnVsbHB0cjsKQEAgLTE1Myw2ICsxNjAsNyBA
QCB2b2lkIElEQlJlcXVlc3Q6OnNldFNvdXJjZShJREJDdXJzb3ImIGN1cnNvcikKIAogdm9pZCBJ
REJSZXF1ZXN0OjpzZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJl
YWRJRCk7CiAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uKTsKICAgICBBU1NFUlQodHJhbnNhY3Rp
b24uaXNWZXJzaW9uQ2hhbmdlKCkpOwogICAgIEFTU0VSVCghdHJhbnNhY3Rpb24uaXNGaW5pc2hl
ZE9yRmluaXNoaW5nKCkpOwpAQCAtMTYyLDExICsxNzAsMTQgQEAgdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQog
CiBSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb24+IElEQlJlcXVlc3Q6OnRyYW5zYWN0aW9u
KCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhyZWFk
SUQpOwogICAgIHJldHVybiBtX3Nob3VsZEV4cG9zZVRyYW5zYWN0aW9uVG9ET00gPyBtX3RyYW5z
YWN0aW9uIDogbnVsbHB0cjsKIH0KIAogY29uc3QgU3RyaW5nJiBJREJSZXF1ZXN0OjpyZWFkeVN0
YXRlKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhy
ZWFkSUQpOworCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gcGVuZGluZ1N0cmlu
ZyhBU0NJSUxpdGVyYWwoInBlbmRpbmciKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gZG9uZVN0cmluZyhBU0NJSUxpdGVyYWwoImRvbmUiKSk7CiAgICAgcmV0dXJuIG1faXNE
b25lID8gZG9uZVN0cmluZyA6IHBlbmRpbmdTdHJpbmc7CkBAIC0xNzQsNiArMTg1LDggQEAgY29u
c3QgU3RyaW5nJiBJREJSZXF1ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKIAogdWludDY0X3QgSURC
UmVxdWVzdDo6c291cmNlT2JqZWN0U3RvcmVJZGVudGlmaWVyKCkgY29uc3QKIHsKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhyZWFkSUQpOworCiAgICAgaWYgKG1fb2Jq
ZWN0U3RvcmVTb3VyY2UpCiAgICAgICAgIHJldHVybiBtX29iamVjdFN0b3JlU291cmNlLT5pbmZv
KCkuaWRlbnRpZmllcigpOwogICAgIGlmIChtX2luZGV4U291cmNlKQpAQCAtMTgzLDYgKzE5Niw4
IEBAIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZU9iamVjdFN0b3JlSWRlbnRpZmllcigpIGNv
bnN0CiAKIHVpbnQ2NF90IElEQlJlcXVlc3Q6OnNvdXJjZUluZGV4SWRlbnRpZmllcigpIGNvbnN0
CiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKKwog
ICAgIGlmICghbV9pbmRleFNvdXJjZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIG1f
aW5kZXhTb3VyY2UtPmluZm8oKS5pZGVudGlmaWVyKCk7CkBAIC0xOTAsNiArMjA1LDcgQEAgdWlu
dDY0X3QgSURCUmVxdWVzdDo6c291cmNlSW5kZXhJZGVudGlmaWVyKCkgY29uc3QKIAogSW5kZXhl
ZERCOjpJbmRleFJlY29yZFR5cGUgSURCUmVxdWVzdDo6cmVxdWVzdGVkSW5kZXhSZWNvcmRUeXBl
KCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhyZWFk
SUQpOwogICAgIEFTU0VSVChtX2luZGV4U291cmNlKTsKIAogICAgIHJldHVybiBtX3JlcXVlc3Rl
ZEluZGV4UmVjb3JkVHlwZTsKQEAgLTE5NywzMiArMjEzLDQwIEBAIEluZGV4ZWREQjo6SW5kZXhS
ZWNvcmRUeXBlIElEQlJlcXVlc3Q6OnJlcXVlc3RlZEluZGV4UmVjb3JkVHlwZSgpIGNvbnN0CiAK
IEV2ZW50VGFyZ2V0SW50ZXJmYWNlIElEQlJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkg
Y29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhyZWFkSUQp
OworCiAgICAgcmV0dXJuIElEQlJlcXVlc3RFdmVudFRhcmdldEludGVyZmFjZVR5cGU7CiB9CiAK
IGNvbnN0IGNoYXIqIElEQlJlcXVlc3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAogewor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CisKICAgICBy
ZXR1cm4gIklEQlJlcXVlc3QiOwogfQogCiBib29sIElEQlJlcXVlc3Q6OmNhblN1c3BlbmRGb3JE
b2N1bWVudFN1c3BlbnNpb24oKSBjb25zdAogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkg
PT0gbV9vcmlnaW5UaHJlYWRJRCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIElEQlJl
cXVlc3Q6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiB7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKICAgICByZXR1cm4gbV9oYXNQZW5kaW5nQWN0
aXZpdHk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6c3RvcCgpCiB7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKICAgICBBU1NFUlQoIW1fY29udGV4dFN0
b3BwZWQpOwogICAgIG1fY29udGV4dFN0b3BwZWQgPSB0cnVlOwogfQogCiB2b2lkIElEQlJlcXVl
c3Q6OmVucXVldWVFdmVudChSZWY8RXZlbnQ+JiYgZXZlbnQpCiB7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX29yaWdpblRocmVhZElEKTsKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKSB8fCBtX2NvbnRleHRTdG9wcGVkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIz
NCw2ICsyNTgsNyBAQCBib29sIElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50
KQogewogICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50IC0gJXMg
KCVwKSIsIGV2ZW50LnR5cGUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCB0aGlzKTsKIAorICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CiAgICAgQVNTRVJU
KG1faGFzUGVuZGluZ0FjdGl2aXR5KTsKICAgICBBU1NFUlQoIW1fY29udGV4dFN0b3BwZWQpOwog
CkBAIC0yODEsMTIgKzMwNiwxNiBAQCB2b2lkIElEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9u
SW5FdmVudEhhbmRsZXIoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJSZXF1ZXN0Ojp1bmNh
dWdodEV4Y2VwdGlvbkluRXZlbnRIYW5kbGVyIik7CiAKKyAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IG1fb3JpZ2luVGhyZWFkSUQpOworCiAgICAgaWYgKG1fdHJhbnNhY3Rpb24gJiYgbV9p
ZGJFcnJvci5jb2RlKCkgIT0gSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpCiAgICAg
ICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0RHVlVG9GYWlsZWRSZXF1ZXN0KERPTUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6QWJvcnRFcnJvciksIEFTQ0lJTGl0ZXJhbCgiSURCVHJhbnNhY3Rpb24gd2lsbCBhYm9ydCBk
dWUgdG8gdW5jYXVnaHQgZXhjZXB0aW9uIGluIGFuIGV2ZW50IGhhbmRsZXIiKSkpOwogfQogCiB2
b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdChjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhKQogewor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CisKICAgICBh
dXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4
dCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjk3LDYgKzMyNiw4IEBAIHZvaWQgSURCUmVxdWVzdDo6
c2V0UmVzdWx0KGNvbnN0IElEQktleURhdGEmIGtleURhdGEpCiAKIHZvaWQgSURCUmVxdWVzdDo6
c2V0UmVzdWx0KHVpbnQ2NF90IG51bWJlcikKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgp
ID09IG1fb3JpZ2luVGhyZWFkSUQpOworCiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKQEAgLTMw
Nyw2ICszMzgsOCBAQCB2b2lkIElEQlJlcXVlc3Q6OnNldFJlc3VsdCh1aW50NjRfdCBudW1iZXIp
CiAKIHZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9TdHJ1Y3R1cmVkQ2xvbmUoY29uc3QgSURC
VmFsdWUmIHZhbHVlKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5U
aHJlYWRJRCk7CisKICAgICBMT0coSW5kZXhlZERCLCAiSURCUmVxdWVzdDo6c2V0UmVzdWx0VG9T
dHJ1Y3R1cmVkQ2xvbmUiKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CkBAIC0zMTksNiArMzUyLDggQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRU
b1N0cnVjdHVyZWRDbG9uZShjb25zdCBJREJWYWx1ZSYgdmFsdWUpCiAKIHZvaWQgSURCUmVxdWVz
dDo6Y2xlYXJSZXN1bHQoKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmln
aW5UaHJlYWRJRCk7CisKICAgICBtX3NjcmlwdFJlc3VsdCA9IHsgfTsKICAgICBtX2N1cnNvclJl
c3VsdCA9IG51bGxwdHI7CiAgICAgbV9kYXRhYmFzZVJlc3VsdCA9IG51bGxwdHI7CkBAIC0zMjYs
NiArMzYxLDggQEAgdm9pZCBJREJSZXF1ZXN0OjpjbGVhclJlc3VsdCgpCiAKIHZvaWQgSURCUmVx
dWVzdDo6c2V0UmVzdWx0VG9VbmRlZmluZWQoKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
KCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CisKICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwpAQCAt
MzM2LDExICszNzMsMTQgQEAgdm9pZCBJREJSZXF1ZXN0OjpzZXRSZXN1bHRUb1VuZGVmaW5lZCgp
CiAKIElEQkN1cnNvciogSURCUmVxdWVzdDo6cmVzdWx0Q3Vyc29yKCkKIHsKKyAgICBBU1NFUlQo
Y3VycmVudFRocmVhZCgpID09IG1fb3JpZ2luVGhyZWFkSUQpOworCiAgICAgcmV0dXJuIG1fY3Vy
c29yUmVzdWx0LmdldCgpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OndpbGxJdGVyYXRlQ3Vyc29y
KElEQkN1cnNvciYgY3Vyc29yKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9v
cmlnaW5UaHJlYWRJRCk7CiAgICAgQVNTRVJUKG1faXNEb25lKTsKICAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7CkBAIC0zNjIs
NiArNDAyLDcgQEAgdm9pZCBJREJSZXF1ZXN0Ojp3aWxsSXRlcmF0ZUN1cnNvcihJREJDdXJzb3Im
IGN1cnNvcikKIAogdm9pZCBJREJSZXF1ZXN0OjpkaWRPcGVuT3JJdGVyYXRlQ3Vyc29yKGNvbnN0
IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQo
KSA9PSBtX29yaWdpblRocmVhZElEKTsKICAgICBBU1NFUlQobV9wZW5kaW5nQ3Vyc29yKTsKIAog
ICAgIGNsZWFyUmVzdWx0KCk7CkBAIC0zODAsNiArNDIxLDggQEAgdm9pZCBJREJSZXF1ZXN0Ojpk
aWRPcGVuT3JJdGVyYXRlQ3Vyc29yKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiAK
IHZvaWQgSURCUmVxdWVzdDo6cmVxdWVzdENvbXBsZXRlZChjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJl
YWRJRCk7CisKICAgICBtX2lzRG9uZSA9IHRydWU7CiAKICAgICBtX2lkYkVycm9yID0gcmVzdWx0
RGF0YS5lcnJvcigpOwpAQCAtMzkzLDcgKzQzNiw5IEBAIHZvaWQgSURCUmVxdWVzdDo6b25FcnJv
cigpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlJlcXVlc3Q6Om9uRXJyb3IiKTsKIAorICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CiAgICAgQVNTRVJU
KCFtX2lkYkVycm9yLmlzTnVsbCgpKTsKKwogICAgIG1fZG9tRXJyb3IgPSBET01FcnJvcjo6Y3Jl
YXRlKG1faWRiRXJyb3IubmFtZSgpLCBtX2lkYkVycm9yLm1lc3NhZ2UoKSk7CiAgICAgZW5xdWV1
ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRydWUp
KTsKIH0KQEAgLTQwMSwxMiArNDQ2LDE1IEBAIHZvaWQgSURCUmVxdWVzdDo6b25FcnJvcigpCiB2
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcygpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlJl
cXVlc3Q6Om9uU3VjY2VzcyIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9vcmln
aW5UaHJlYWRJRCk7CiAKICAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuc3VjY2Vzc0V2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHQoUmVmPElEQkRhdGFiYXNlPiYmIGRhdGFiYXNlKQogeworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV9vcmlnaW5UaHJlYWRJRCk7CisKICAgICBjbGVhclJlc3VsdCgpOwog
ICAgIG1fZGF0YWJhc2VSZXN1bHQgPSBXVEZNb3ZlKGRhdGFiYXNlKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAppbmRleCBlMjQ2M2U4Li4wMzEz
MTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1
ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5o
CkBAIC0xMDQsNiArMTA0LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNQZW5kaW5nQWN0aXZp
dHkoKSBjb25zdCBmaW5hbDsKIAorICAgIFRocmVhZElkZW50aWZpZXIgb3JpZ2luVGhyZWFkSUQo
KSBjb25zdCB7IHJldHVybiBtX29yaWdpblRocmVhZElEOyB9CisKIHByb3RlY3RlZDoKICAgICBJ
REJSZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Qcm94eSYpOwogCkBAIC0xNzAsNiArMTcyLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2NvcGVHdWFyZD4gbV9jdXJzb3JSZXF1ZXN0Tm90aWZpZXI7CiAKICAgICBSZWY8SURC
Q2xpZW50OjpJREJDb25uZWN0aW9uUHJveHk+IG1fY29ubmVjdGlvblByb3h5OworCisgICAgVGhy
ZWFkSWRlbnRpZmllciBtX29yaWdpblRocmVhZElEIHsgY3VycmVudFRocmVhZCgpIH07CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZjI5NWM3NC4uYzg5ODg3NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcApAQCAtMTMxLDYgKzEzMSw3IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihJ
REJEYXRhYmFzZSYgZGF0YWJhc2UsIGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYKIAogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNhY3Rpb24gLSAlcyIsIG1f
aW5mby5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRU
aHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIHJlbGF4QWRv
cHRpb25SZXF1aXJlbWVudCgpOwogCkBAIC0xNTUsMTAgKzE1NiwxMyBAQCBJREJUcmFuc2FjdGlv
bjo6SURCVHJhbnNhY3Rpb24oSURCRGF0YWJhc2UmIGRhdGFiYXNlLCBjb25zdCBJREJUcmFuc2Fj
dGlvbkluZm8mCiAKIElEQlRyYW5zYWN0aW9uOjp+SURCVHJhbnNhY3Rpb24oKQogeworICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiB9
CiAKIGNvbnN0IFN0cmluZyYgSURCVHJhbnNhY3Rpb246Om1vZGUoKSBjb25zdAogeworICAgIEFT
U0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CisK
ICAgICBzd2l0Y2ggKG1faW5mby5tb2RlKCkpIHsKICAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25Nb2RlOjpSZWFkT25seToKICAgICAgICAgcmV0dXJuIElEQlRyYW5zYWN0aW9uOjptb2Rl
UmVhZE9ubHkoKTsKQEAgLTE3MywyMiArMTc3LDI2IEBAIGNvbnN0IFN0cmluZyYgSURCVHJhbnNh
Y3Rpb246Om1vZGUoKSBjb25zdAogCiBXZWJDb3JlOjpJREJEYXRhYmFzZSogSURCVHJhbnNhY3Rp
b246OmRiKCkKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9y
aWdpblRocmVhZElEKCkpOwogICAgIHJldHVybiAmbV9kYXRhYmFzZS5nZXQoKTsKIH0KIAogSURC
Q2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIElEQlRyYW5zYWN0aW9uOjpzZXJ2ZXJDb25u
ZWN0aW9uKCkKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9y
aWdpblRocmVhZElEKCkpOwogICAgIHJldHVybiBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9u
KCk7CiB9CiAKIFJlZlB0cjxET01FcnJvcj4gSURCVHJhbnNhY3Rpb246OmVycm9yKCkgY29uc3QK
IHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZElEKCkpOwogICAgIHJldHVybiBtX2RvbUVycm9yOwogfQogCiBSZWZQdHI8V2ViQ29yZTo6SURC
T2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9i
amVjdFN0b3JlTmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlIik7CisgICAgQVNTRVJUKGN1
cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlm
ICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTIzNSw2ICsyNDMsOCBAQCBSZWZQdHI8V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU+IElEQlRyYW5z
YWN0aW9uOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG9iamVjdAogdm9pZCBJREJUcmFuc2Fj
dGlvbjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QoRE9NRXJyb3ImIGVycm9yKQogewogICAgIExP
RyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6YWJvcnREdWVUb0ZhaWxlZFJlcXVlc3QiKTsK
KyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElE
KCkpOworCiAgICAgaWYgKGlzRmluaXNoZWRPckZpbmlzaGluZygpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTI0NSw2ICsyNTUsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjphYm9ydER1ZVRvRmFp
bGVkUmVxdWVzdChET01FcnJvciYgZXJyb3IpCiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OnRyYW5z
aXRpb25lZFRvRmluaXNoaW5nKEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZSBzdGF0ZSkKIHsK
KyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElE
KCkpOworCiAgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CiAgICAgbV9zdGF0
ZSA9IHN0YXRlOwogICAgIEFTU0VSVChpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CkBAIC0yNTQs
NiArMjY2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6dHJhbnNpdGlvbmVkVG9GaW5pc2hpbmco
SW5kZXhlZERCOjpUcmFuc2FjdGlvblN0YXRlIHN0YXRlKQogdm9pZCBJREJUcmFuc2FjdGlvbjo6
YWJvcnQoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmFib3J0Iik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9
PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmIChpc0ZpbmlzaGVkT3JG
aW5pc2hpbmcoKSkgewogICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Oklu
dmFsaWRTdGF0ZUVycm9yOwpAQCAtMjc5LDcgKzI5Miw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246
OmFib3J0KEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCiB2b2lkIElEQlRyYW5zYWN0aW9u
OjphYm9ydE9uU2VydmVyQW5kQ2FuY2VsUmVxdWVzdHMoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbiYgb3BlcmF0aW9uKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6YWJvcnRPblNlcnZlckFuZENhbmNlbFJlcXVlc3RzIik7Ci0KKyAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VSVCht
X3RyYW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuaXNFbXB0eSgpKTsKIAogICAgIHNlcnZlckNvbm5l
Y3Rpb24oKS5hYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKQEAgLTI5NywyMiArMzEwLDI2IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246OmFib3J0T25TZXJ2ZXJBbmRDYW5jZWxSZXF1ZXN0cyhJREJDbGll
bnQ6OlRyYW5zYWN0aW9uT3BlcmF0CiAKIGNvbnN0IGNoYXIqIElEQlRyYW5zYWN0aW9uOjphY3Rp
dmVET01PYmplY3ROYW1lKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09
IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIHJldHVybiAiSURCVHJhbnNhY3Rp
b24iOwogfQogCiBib29sIElEQlRyYW5zYWN0aW9uOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNw
ZW5zaW9uKCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBJREJU
cmFuc2FjdGlvbjo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKIHsKKyAgICBBU1NFUlQoY3Vy
cmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIHJldHVy
biAhbV9jb250ZXh0U3RvcHBlZCAmJiBtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25T
dGF0ZTo6RmluaXNoZWQ7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OnN0b3AoKQogewogICAg
IExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6c3RvcCIpOworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICAvLyBJ
REJEYXRhYmFzZTo6c3RvcCgpIGNhbGxzIElEQlRyYW5zYWN0aW9uOjpzdG9wKCkgZm9yIGVhY2gg
b2YgaXRzIGFjdGl2ZSB0cmFuc2FjdGlvbnMuCiAgICAgLy8gU2luY2UgdGhlIG9yZGVyIG9mIGNh
bGxpbmcgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCkgaXMgcmFuZG9tLCB3ZSBtaWdodCBhbHJlYWR5
IGhhdmUgYmVlbiBzdG9wcGVkLgpAQCAtMzMwLDExICszNDcsMTQgQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6c3RvcCgpCiAKIGJvb2wgSURCVHJhbnNhY3Rpb246OmlzQWN0aXZlKCkgY29uc3QKIHsK
KyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElE
KCkpOwogICAgIHJldHVybiBtX3N0YXRlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6
QWN0aXZlOwogfQogCiBib29sIElEQlRyYW5zYWN0aW9uOjppc0ZpbmlzaGVkT3JGaW5pc2hpbmco
KSBjb25zdAogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkSUQoKSk7CisKICAgICByZXR1cm4gbV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5z
YWN0aW9uU3RhdGU6OkNvbW1pdHRpbmcKICAgICAgICAgfHwgbV9zdGF0ZSA9PSBJbmRleGVkREI6
OlRyYW5zYWN0aW9uU3RhdGU6OkFib3J0aW5nCiAgICAgICAgIHx8IG1fc3RhdGUgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZDsKQEAgLTM0MiwxMSArMzYyLDEzIEBAIGJv
b2wgSURCVHJhbnNhY3Rpb246OmlzRmluaXNoZWRPckZpbmlzaGluZygpIGNvbnN0CiAKIHZvaWQg
SURCVHJhbnNhY3Rpb246OmFkZFJlcXVlc3QoSURCUmVxdWVzdCYgcmVxdWVzdCkKIHsKKyAgICBB
U1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwog
ICAgIG1fb3BlblJlcXVlc3RzLmFkZCgmcmVxdWVzdCk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rp
b246OnJlbW92ZVJlcXVlc3QoSURCUmVxdWVzdCYgcmVxdWVzdCkKIHsKKyAgICBBU1NFUlQoY3Vy
cmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VS
VChtX29wZW5SZXF1ZXN0cy5jb250YWlucygmcmVxdWVzdCkpOwogICAgIG1fb3BlblJlcXVlc3Rz
LnJlbW92ZSgmcmVxdWVzdCk7CiB9CkBAIC0zNTQsNiArMzc2LDcgQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6cmVtb3ZlUmVxdWVzdChJREJSZXF1ZXN0JiByZXF1ZXN0KQogdm9pZCBJREJUcmFuc2Fj
dGlvbjo6c2NoZWR1bGVPcGVyYXRpb24oUmVmUHRyPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24+JiYgb3BlcmF0aW9uKQogewogICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbk9wZXJhdGlv
bk1hcC5jb250YWlucyhvcGVyYXRpb24tPmlkZW50aWZpZXIoKSkpOworICAgIEFTU0VSVChjdXJy
ZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBtX3Ry
YW5zYWN0aW9uT3BlcmF0aW9uUXVldWUuYXBwZW5kKG9wZXJhdGlvbik7CiAgICAgbV90cmFuc2Fj
dGlvbk9wZXJhdGlvbk1hcC5zZXQob3BlcmF0aW9uLT5pZGVudGlmaWVyKCksIFdURk1vdmUob3Bl
cmF0aW9uKSk7CkBAIC0zNjMsNiArMzg2LDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6c2NoZWR1
bGVPcGVyYXRpb24oUmVmUHRyPElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24+JiYKIAog
dm9pZCBJREJUcmFuc2FjdGlvbjo6c2NoZWR1bGVPcGVyYXRpb25UaW1lcigpCiB7CisgICAgQVNT
RVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKKwog
ICAgIGlmICghbV9vcGVyYXRpb25UaW1lci5pc0FjdGl2ZSgpKQogICAgICAgICBtX29wZXJhdGlv
blRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KQEAgLTM3MCw2ICszOTUsNyBAQCB2b2lkIElEQlRy
YW5zYWN0aW9uOjpzY2hlZHVsZU9wZXJhdGlvblRpbWVyKCkKIHZvaWQgSURCVHJhbnNhY3Rpb246
Om9wZXJhdGlvblRpbWVyRmlyZWQoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2Fj
dGlvbjo6b3BlcmF0aW9uVGltZXJGaXJlZCAoJXApIiwgdGhpcyk7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIGlmICgh
bV9zdGFydGVkT25TZXJ2ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM5MSw3ICs0MTcsNyBAQCB2
b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25UaW1lckZpcmVkKCkKIHZvaWQgSURCVHJhbnNh
Y3Rpb246OmNvbW1pdCgpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpj
b21taXQiKTsKLQorICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkSUQoKSk7CiAgICAgQVNTRVJUKCFpc0ZpbmlzaGVkT3JGaW5pc2hpbmcoKSk7CiAK
ICAgICB0cmFuc2l0aW9uZWRUb0ZpbmlzaGluZyhJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6
OkNvbW1pdHRpbmcpOwpAQCAtNDA0LDYgKzQzMCw4IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNv
bW1pdCgpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlcihJREJDbGllbnQ6OlRy
YW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpjb21taXRPblNlcnZlciIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
KCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CisKICAgICBzZXJ2ZXJDb25uZWN0
aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24oKnRoaXMpOwogCiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rp
b25PcGVyYXRpb25NYXAuY29udGFpbnMob3BlcmF0aW9uLmlkZW50aWZpZXIoKSkpOwpAQCAtNDEz
LDEyICs0NDEsMTUgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Y29tbWl0T25TZXJ2ZXIoSURCQ2xp
ZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uKQogdm9pZCBJREJUcmFuc2FjdGlv
bjo6ZmluaXNoQWJvcnRPckNvbW1pdCgpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvblN0YXRlOjpGaW5pc2hlZCk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKKwogICAgIG1fc3RhdGUgPSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlzaGVkOwogfQogCiB2b2lkIElEQlRyYW5z
YWN0aW9uOjpkaWRTdGFydChjb25zdCBJREJFcnJvciYgZXJyb3IpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRTdGFydCIpOworICAgIEFTU0VSVChjdXJyZW50VGhy
ZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBtX2RhdGFiYXNl
LT5kaWRTdGFydFRyYW5zYWN0aW9uKCp0aGlzKTsKIApAQCAtNDM2LDYgKzQ2Nyw4IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb246OmRpZFN0YXJ0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKIAogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6bm90aWZ5RGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogewor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQo
KSk7CisKICAgICBtX2RhdGFiYXNlLT5kaWRBYm9ydFRyYW5zYWN0aW9uKCp0aGlzKTsKICAgICBt
X2lkYkVycm9yID0gZXJyb3I7CiAgICAgZmlyZU9uQWJvcnQoKTsKQEAgLTQ0OSw2ICs0ODIsNyBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uOjpub3RpZnlEaWRBYm9ydChjb25zdCBJREJFcnJvciYgZXJy
b3IpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRBYm9ydChjb25zdCBJREJFcnJvciYgZXJyb3Ip
CiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRBYm9ydCIpOworICAg
IEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7
CiAKICAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkZpbmlz
aGVkKQogICAgICAgICByZXR1cm47CkBAIC00NjEsNyArNDk1LDcgQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6ZGlkQWJvcnQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogdm9pZCBJREJUcmFuc2FjdGlv
bjo6ZGlkQ29tbWl0KGNvbnN0IElEQkVycm9yJiBlcnJvcikKIHsKICAgICBMT0coSW5kZXhlZERC
LCAiSURCVHJhbnNhY3Rpb246OmRpZENvbW1pdCIpOwotCisgICAgQVNTRVJUKGN1cnJlbnRUaHJl
YWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQobV9zdGF0
ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3RhdGU6OkNvbW1pdHRpbmcpOwogCiAgICAgaWYg
KGVycm9yLmlzTnVsbCgpKSB7CkBAIC00NzgsMTggKzUxMiwyMSBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uOjpkaWRDb21taXQoY29uc3QgSURCRXJyb3ImIGVycm9yKQogdm9pZCBJREJUcmFuc2FjdGlv
bjo6ZmlyZU9uQ29tcGxldGUoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlv
bjo6ZmlyZU9uQ29tcGxldGUiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKIH0KIAogdm9pZCBJ
REJUcmFuc2FjdGlvbjo6ZmlyZU9uQWJvcnQoKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6ZmlyZU9uQWJvcnQiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09
IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIGVucXVldWVFdmVudChFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50LCB0cnVlLCBmYWxzZSkpOwogfQogCiB2b2lk
IElEQlRyYW5zYWN0aW9uOjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQogewogICAg
IEFTU0VSVChtX3N0YXRlICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0ZTo6RmluaXNoZWQp
OworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
SUQoKSk7CiAKICAgICBpZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSB8fCBtX2NvbnRleHRT
dG9wcGVkKQogICAgICAgICByZXR1cm47CkBAIC01MDIsNiArNTM5LDcgQEAgYm9vbCBJREJUcmFu
c2FjdGlvbjo6ZGlzcGF0Y2hFdmVudChFdmVudCYgZXZlbnQpCiB7CiAgICAgTE9HKEluZGV4ZWRE
QiwgIklEQlRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50Iik7CiAKKyAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VSVChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7
CiAgICAgQVNTRVJUKGV2ZW50LnRhcmdldCgpID09IHRoaXMpOwpAQCAtNTM1LDYgKzU3Myw3IEBA
IFJlZjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlSW5mbyYKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rp
b246OmNyZWF0ZU9iamVjdFN0b3JlIik7CiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsK
ICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgUmVmPElE
Qk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpjcmVhdGUoKnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSwgaW5mbywgKnRoaXMpOwogICAgIG1fcmVmZXJlbmNlZE9iamVj
dFN0b3Jlcy5zZXQoaW5mby5uYW1lKCksICZvYmplY3RTdG9yZS5nZXQoKSk7CkBAIC01NDgsNyAr
NTg3LDcgQEAgUmVmPElEQk9iamVjdFN0b3JlPiBJREJUcmFuc2FjdGlvbjo6Y3JlYXRlT2JqZWN0
U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJgogdm9pZCBJREJUcmFuc2FjdGlvbjo6Y3Jl
YXRlT2JqZWN0U3RvcmVPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBv
cGVyYXRpb24sIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKLQor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQo
KSk7CiAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKIAogICAgIG1fZGF0YWJhc2UtPnNl
cnZlckNvbm5lY3Rpb24oKS5jcmVhdGVPYmplY3RTdG9yZShvcGVyYXRpb24sIGluZm8pOwpAQCAt
NTU3LDcgKzU5Niw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmNyZWF0ZU9iamVjdFN0b3JlT25T
ZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYKIHZvaWQgSURCVHJhbnNhY3Rp
b246OmRpZENyZWF0ZU9iamVjdFN0b3JlT25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVz
dWx0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZENyZWF0
ZU9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKLQorICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0g
bV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHRE
YXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpDcmVhdGVPYmplY3RTdG9y
ZVN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJyb3IpOwog
fQogCkBAIC01NjUsNiArNjA0LDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkluZGV4PiBJREJUcmFu
c2FjdGlvbjo6Y3JlYXRlSW5kZXgoSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3IKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4Iik7CiAgICAgQVNTRVJU
KGlzVmVyc2lvbkNoYW5nZSgpKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKCFzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNTc4LDcgKzYxOCw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJREJJbmRleD4gSURCVHJhbnNhY3Rpb246OmNyZWF0ZUluZGV4KElEQk9iamVj
dFN0b3JlJiBvYmplY3RTdG9yCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpjcmVhdGVJbmRleE9uU2Vy
dmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29uc3QgSURC
SW5kZXhJbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
Y3JlYXRlSW5kZXhPblNlcnZlciIpOwotCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdl
KCkpOwogCiAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLmNyZWF0ZUluZGV4KG9w
ZXJhdGlvbiwgaW5mbyk7CkBAIC01ODcsNiArNjI3LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6
Y3JlYXRlSW5kZXhPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVy
YXQKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENyZWF0ZUluZGV4T25TZXJ2ZXIoY29uc3QgSURC
UmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNh
Y3Rpb246OmRpZENyZWF0ZUluZGV4T25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVh
ZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKHJlc3VsdERh
dGEudHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkNyZWF0ZUluZGV4U3VjY2VzcykKICAgICAgICAg
cmV0dXJuOwpAQCAtNjA0LDYgKzY0NSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZENyZWF0
ZUluZGV4T25TZXJ2ZXIoY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIFJlZjxJREJS
ZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udGV4dCwgSURCT2JqZWN0U3RvcmUmIG9iamVjdFN0b3JlLCBjb25zdCBJREJD
dXJzb3JJbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdE9wZW5DdXJzb3IiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0
YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgcmV0dXJuIGRvUmVxdWVzdE9wZW5DdXJz
b3IoY29udGV4dCwgSURCQ3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoKnRoaXMsIG9iamVjdFN0b3Jl
LCBpbmZvKSk7CiB9CkBAIC02MTEsNiArNjUzLDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5z
YWN0aW9uOjpyZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXgK
IFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdE9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSURCSW5kZXgmIGluZGV4LCBjb25zdCBJREJDdXJz
b3JJbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVx
dWVzdE9wZW5DdXJzb3IiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKGluZm8uY3Vyc29yVHlwZSgpID09IElu
ZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSkKICAgICAgICAgcmV0dXJuIGRvUmVxdWVzdE9w
ZW5DdXJzb3IoY29udGV4dCwgSURCQ3Vyc29yOjpjcmVhdGUoKnRoaXMsIGluZGV4LCBpbmZvKSk7
CkBAIC02MjEsNiArNjY0LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXgKIFJlZjxJREJSZXF1
ZXN0PiBJREJUcmFuc2FjdGlvbjo6ZG9SZXF1ZXN0T3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0JiBjb250ZXh0LCBSZWY8SURCQ3Vyc29yPiYmIGN1cnNvcikKIHsKICAgICBBU1NFUlQo
aXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIGN1cnNvci5nZXQoKSwgKnRoaXMpOwogICAgIGFkZFJlcXVl
c3QocmVxdWVzdC5nZXQoKSk7CkBAIC02MzQsNiArNjc4LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElE
QlRyYW5zYWN0aW9uOjpkb1JlcXVlc3RPcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnQKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9wZW5DdXJzb3JPblNlcnZlcihJREJDbGllbnQ6
OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0IElEQkN1cnNvckluZm8mIGlu
Zm8pCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25T
ZXJ2ZXIiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdp
blRocmVhZElEKCkpOwogCiAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLm9wZW5D
dXJzb3Iob3BlcmF0aW9uLCBpbmZvKTsKIH0KQEAgLTY0MSw2ICs2ODYsNyBAQCB2b2lkIElEQlRy
YW5zYWN0aW9uOjpvcGVuQ3Vyc29yT25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJh
dGlvbiYgb3BlcmF0aQogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkT3BlbkN1cnNvck9uU2VydmVy
KElEQlJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7
CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWRPcGVuQ3Vyc29yT25TZXJ2
ZXIiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRo
cmVhZElEKCkpOwogCiAgICAgcmVxdWVzdC5kaWRPcGVuT3JJdGVyYXRlQ3Vyc29yKHJlc3VsdERh
dGEpOwogfQpAQCAtNjUwLDYgKzY5Niw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Oml0ZXJhdGVD
dXJzb3IoSURCQ3Vyc29yJiBjdXJzb3IsIGNvbnN0IElEQktleURhdGEmIGtleSwgdW5zCiAgICAg
TE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yIik7CiAgICAgQVNT
RVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VSVChjdXJzb3IucmVxdWVzdCgpKTsKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAg
ICAgYWRkUmVxdWVzdCgqY3Vyc29yLnJlcXVlc3QoKSk7CiAKQEAgLTY2MCw2ICs3MDcsNyBAQCB2
b2lkIElEQlRyYW5zYWN0aW9uOjppdGVyYXRlQ3Vyc29yKElEQkN1cnNvciYgY3Vyc29yLCBjb25z
dCBJREJLZXlEYXRhJiBrZXksIHVucwogdm9pZCBJREJUcmFuc2FjdGlvbjo6aXRlcmF0ZUN1cnNv
ck9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvbiwgY29u
c3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCB1bnNpZ25lZCBsb25nJiBjb3VudCkKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246Oml0ZXJhdGVDdXJzb3JPblNlcnZlciIpOwor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQo
KSk7CiAKICAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuaXRlcmF0ZUN1cnNvcihvcGVyYXRpb24sIGtl
eSwgY291bnQpOwogfQpAQCAtNjY3LDYgKzcxNSw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246Oml0
ZXJhdGVDdXJzb3JPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVy
CiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRJdGVyYXRlQ3Vyc29yT25TZXJ2ZXIoSURCUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZEl0ZXJhdGVDdXJzb3JPblNlcnZlciIpOwor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQo
KSk7CiAKICAgICByZXF1ZXN0LmRpZE9wZW5Pckl0ZXJhdGVDdXJzb3IocmVzdWx0RGF0YSk7CiB9
CkBAIC02NzYsNiArNzI1LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1
ZXN0R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQKICAgICBMT0coSW5k
ZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRSZWNvcmQiKTsKICAgICBBU1NFUlQo
aXNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKCFrZXlSYW5nZURhdGEuaXNOdWxsKTsKKyAgICBBU1NF
UlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAg
ICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwg
b2JqZWN0U3RvcmUsICp0aGlzKTsKICAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwpAQCAt
Njg5LDEyICs3MzksMTYgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0
R2V0UmVjb3JkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQKIFJlZjxJREJSZXF1ZXN0
PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkK
IHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1ZSIp
OworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFk
SUQoKSk7CisKICAgICByZXR1cm4gcmVxdWVzdEluZGV4UmVjb3JkKGNvbnRleHQsIGluZGV4LCBJ
bmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6VmFsdWUsIHJhbmdlKTsKIH0KIAogUmVmPElEQlJl
cXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0R2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQmIGNvbnRleHQsIElEQkluZGV4JiBpbmRleCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5n
ZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RHZXRWYWx1
ZSIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhy
ZWFkSUQoKSk7CisKICAgICByZXR1cm4gcmVxdWVzdEluZGV4UmVjb3JkKGNvbnRleHQsIGluZGV4
LCBJbmRleGVkREI6OkluZGV4UmVjb3JkVHlwZTo6S2V5LCByYW5nZSk7CiB9CiAKQEAgLTcwMyw2
ICs3NTcsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3RJbmRleFJl
Y29yZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZQogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6cmVxdWVzdEdldFZhbHVlIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkp
OwogICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxsKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgp
ID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgUmVmPElEQlJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGVHZXQoY29udGV4dCwgaW5kZXgsIHR5cGUsICp0
aGlzKTsKICAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0KCkpOwpAQCAtNzE2LDYgKzc3MSw3IEBA
IFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6cmVxdWVzdEluZGV4UmVjb3JkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRlCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpnZXRSZWNvcmRP
blNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24sIGNvbnN0
IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRy
YW5zYWN0aW9uOjpnZXRSZWNvcmRPblNlcnZlciIpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFk
KCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAKICAgICBzZXJ2ZXJDb25uZWN0
aW9uKCkuZ2V0UmVjb3JkKG9wZXJhdGlvbiwga2V5UmFuZ2UpOwogfQpAQCAtNzIzLDYgKzc3OSw3
IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OmdldFJlY29yZE9uU2VydmVyKElEQkNsaWVudDo6VHJh
bnNhY3Rpb25PcGVyYXRpb24mIG9wZXJhdGlvCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWRHZXRS
ZWNvcmRPblNlcnZlcihJREJSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBJREJSZXN1bHREYXRhJiBy
ZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGlkR2V0
UmVjb3JkT25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgaWYgKHJlc3VsdERhdGEudHlwZSgpID09IElE
QlJlc3VsdFR5cGU6OkVycm9yKSB7CiAgICAgICAgIHJlcXVlc3QucmVxdWVzdENvbXBsZXRlZChy
ZXN1bHREYXRhKTsKQEAgLTc1Myw2ICs4MTAsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3RDb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBJRAog
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVzdENvdW50IChJREJPYmpl
Y3RTdG9yZSkiKTsKICAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKCFyYW5nZS5p
c051bGwpOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2lu
VGhyZWFkSUQoKSk7CiAKICAgICBSZWY8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBvYmplY3RTdG9yZSwgKnRoaXMpOwogICAgIGFkZFJlcXVlc3QocmVx
dWVzdC5nZXQoKSk7CkBAIC03NjcsNiArODI1LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5z
YWN0aW9uOjpyZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSUQK
ICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OnJlcXVlc3RDb3VudCAoSURCSW5k
ZXgpIik7CiAgICAgQVNTRVJUKGlzQWN0aXZlKCkpOwogICAgIEFTU0VSVCghcmFuZ2UuaXNOdWxs
KTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVh
ZElEKCkpOwogCiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVh
dGVDb3VudChjb250ZXh0LCBpbmRleCwgKnRoaXMpOwogICAgIGFkZFJlcXVlc3QocmVxdWVzdC5n
ZXQoKSk7CkBAIC03NzksNiArODM4LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9u
OjpyZXF1ZXN0Q291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgSUQKIHZvaWQg
SURCVHJhbnNhY3Rpb246OmdldENvdW50T25TZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9w
ZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQogewog
ICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRPblNlcnZlciIpOwor
ICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQo
KSk7CiAKICAgICBzZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0Q291bnQob3BlcmF0aW9uLCBrZXlSYW5n
ZSk7CiB9CkBAIC03ODYsNiArODQ2LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6Z2V0Q291bnRP
blNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24KIHZvaWQg
SURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
SURCVHJhbnNhY3Rpb246OmRpZEdldENvdW50T25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgcmVxdWVz
dC5zZXRSZXN1bHQocmVzdWx0RGF0YS5yZXN1bHRJbnRlZ2VyKCkpOwogICAgIHJlcXVlc3QucmVx
dWVzdENvbXBsZXRlZChyZXN1bHREYXRhKTsKQEAgLTc5Niw2ICs4NTcsNyBAQCBSZWY8SURCUmVx
dWVzdD4gSURCVHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCYgY29udAogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6cmVxdWVz
dERlbGV0ZVJlY29yZCIpOwogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQoIXJh
bmdlLmlzTnVsbCk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVx
dWVzdDo6Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CiAgICAgYWRkUmVxdWVz
dChyZXF1ZXN0LmdldCgpKTsKQEAgLTgwNyw2ICs4NjksNyBAQCBSZWY8SURCUmVxdWVzdD4gSURC
VHJhbnNhY3Rpb246OnJlcXVlc3REZWxldGVSZWNvcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYg
Y29udAogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlUmVjb3JkT25TZXJ2ZXIoSURCQ2xpZW50
OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCBJREJLZXlSYW5nZURhdGEm
IGtleVJhbmdlKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRl
UmVjb3JkT25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJh
c2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgc2VydmVyQ29ubmVjdGlvbigpLmRlbGV0ZVJl
Y29yZChvcGVyYXRpb24sIGtleVJhbmdlKTsKIH0KQEAgLTgxNCw2ICs4NzcsNyBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpkZWxldGVSZWNvcmRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9u
T3BlcmF0aW9uJiBvcGVyYQogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlUmVjb3JkT25T
ZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0
YSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZVJlY29y
ZE9uU2VydmVyIik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIHJlcXVlc3Quc2V0UmVzdWx0VG9VbmRlZmluZWQoKTsK
ICAgICByZXF1ZXN0LnJlcXVlc3RDb21wbGV0ZWQocmVzdWx0RGF0YSk7CkBAIC04MjMsNiArODg3
LDcgQEAgUmVmPElEQlJlcXVlc3Q+IElEQlRyYW5zYWN0aW9uOjpyZXF1ZXN0Q2xlYXJPYmplY3RT
dG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JgogewogICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6cmVxdWVzdENsZWFyT2JqZWN0U3RvcmUiKTsKICAgICBBU1NFUlQoaXNBY3Rp
dmUoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5U
aHJlYWRJRCgpKTsKIAogICAgIFJlZjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIG9iamVjdFN0b3JlLCAqdGhpcyk7CiAgICAgYWRkUmVxdWVzdChyZXF1
ZXN0LmdldCgpKTsKQEAgLTgzNyw2ICs5MDIsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURCVHJhbnNh
Y3Rpb246OnJlcXVlc3RDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmCiB2
b2lkIElEQlRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIoSURCQ2xpZW50OjpU
cmFuc2FjdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBjb25zdCB1aW50NjRfdCYgb2JqZWN0U3Rv
cmVJZGVudGlmaWVyKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6Y2xl
YXJPYmplY3RTdG9yZU9uU2VydmVyIik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBt
X2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIHNlcnZlckNvbm5lY3Rpb24oKS5j
bGVhck9iamVjdFN0b3JlKG9wZXJhdGlvbiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKTsKIH0KQEAg
LTg0NCw2ICs5MTAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpjbGVhck9iamVjdFN0b3JlT25T
ZXJ2ZXIoSURCQ2xpZW50OjpUcmFuc2FjdGlvbk9wZXJhdGlvbiYgbwogdm9pZCBJREJUcmFuc2Fj
dGlvbjo6ZGlkQ2xlYXJPYmplY3RTdG9yZU9uU2VydmVyKElEQlJlcXVlc3QmIHJlcXVlc3QsIGNv
bnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklE
QlRyYW5zYWN0aW9uOjpkaWRDbGVhck9iamVjdFN0b3JlT25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQo
Y3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAg
cmVxdWVzdC5zZXRSZXN1bHRUb1VuZGVmaW5lZCgpOwogICAgIHJlcXVlc3QucmVxdWVzdENvbXBs
ZXRlZChyZXN1bHREYXRhKTsKQEAgLTg1NSw2ICs5MjIsNyBAQCBSZWY8SURCUmVxdWVzdD4gSURC
VHJhbnNhY3Rpb246OnJlcXVlc3RQdXRPckFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LAogICAgIEFTU0VSVChpc0FjdGl2ZSgpKTsKICAgICBBU1NFUlQoIWlzUmVhZE9ubHkoKSk7
CiAgICAgQVNTRVJUKG9iamVjdFN0b3JlLmluZm8oKS5hdXRvSW5jcmVtZW50KCkgfHwga2V5KTsK
KyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElE
KCkpOwogCiAgICAgUmVmPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgb2JqZWN0U3RvcmUsICp0aGlzKTsKICAgICBhZGRSZXF1ZXN0KHJlcXVlc3QuZ2V0
KCkpOwpAQCAtODY4LDcgKzkzNiw3IEBAIFJlZjxJREJSZXF1ZXN0PiBJREJUcmFuc2FjdGlvbjo6
cmVxdWVzdFB1dE9yQWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsCiB2b2lkIElE
QlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24mIG9wZXJhdGlvbiwgUmVmUHRyPElEQktleT4ga2V5LCBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSwgY29uc3QgSW5kZXhlZERCOjpPYmplY3RTdG9yZU92ZXJ3cml0ZU1v
ZGUmIG92ZXJ3cml0ZU1vZGUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9u
OjpwdXRPckFkZE9uU2VydmVyIik7Ci0KKyAgICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1f
ZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsK
ICAgICBBU1NFUlQodmFsdWUpOwogCkBAIC04OTcsNiArOTY1LDcgQEAgdm9pZCBJREJUcmFuc2Fj
dGlvbjo6cHV0T3JBZGRPblNlcnZlcihJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBv
cGVyYXRpb24KIHZvaWQgSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIoSURCUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgSURCUmVzdWx0RGF0YSYgcmVzdWx0RGF0YSkKIHsKICAgICBM
T0coSW5kZXhlZERCLCAiSURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIiKTsKKyAg
ICBBU1NFUlQoY3VycmVudFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkp
OwogCiAgICAgaWYgKGF1dG8qIHJlc3VsdCA9IHJlc3VsdERhdGEucmVzdWx0S2V5KCkpCiAgICAg
ICAgIHJlcXVlc3Quc2V0UmVzdWx0KCpyZXN1bHQpOwpAQCAtOTA4LDcgKzk3Nyw3IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb246OmRpZFB1dE9yQWRkT25TZXJ2ZXIoSURCUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgSURCUmVzdWx0RGF0CiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkKIHsKICAgICBMT0coSW5kZXhlZERCLCAi
SURCVHJhbnNhY3Rpb246OmRlbGV0ZU9iamVjdFN0b3JlIik7Ci0KKyAgICBBU1NFUlQoY3VycmVu
dFRocmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogICAgIEFTU0VSVChp
c1ZlcnNpb25DaGFuZ2UoKSk7CiAKICAgICBpZiAoYXV0byBvYmplY3RTdG9yZSA9IG1fcmVmZXJl
bmNlZE9iamVjdFN0b3Jlcy50YWtlKG9iamVjdFN0b3JlTmFtZSkpCkBAIC05MjIsNiArOTkxLDcg
QEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlcihJREJDbGll
bnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJgogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFu
c2FjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmVPblNlcnZlciIpOwogICAgIEFTU0VSVChpc1ZlcnNp
b25DaGFuZ2UoKSk7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5v
cmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIHNlcnZlckNvbm5lY3Rpb24oKS5kZWxldGVPYmplY3RT
dG9yZShvcGVyYXRpb24sIG9iamVjdFN0b3JlTmFtZSk7CiB9CkBAIC05MjksMTMgKzk5OSwxNCBA
QCB2b2lkIElEQlRyYW5zYWN0aW9uOjpkZWxldGVPYmplY3RTdG9yZU9uU2VydmVyKElEQkNsaWVu
dDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVP
YmplY3RTdG9yZU9uU2VydmVyKGNvbnN0IElEQlJlc3VsdERhdGEmIHJlc3VsdERhdGEpCiB7CiAg
ICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0aW9uOjpkaWREZWxldGVPYmplY3RTdG9yZU9u
U2VydmVyIik7CisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5vcmln
aW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdERhdGEsIHJlc3VsdERhdGEu
dHlwZSgpID09IElEQlJlc3VsdFR5cGU6OkRlbGV0ZU9iamVjdFN0b3JlU3VjY2VzcyB8fCByZXN1
bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpFcnJvcik7CiB9CiAKIHZvaWQgSURCVHJh
bnNhY3Rpb246OmRlbGV0ZUluZGV4KHVpbnQ2NF90IG9iamVjdFN0b3JlSWRlbnRpZmllciwgY29u
c3QgU3RyaW5nJiBpbmRleE5hbWUpCiB7CiAgICAgTE9HKEluZGV4ZWREQiwgIklEQlRyYW5zYWN0
aW9uOjpkZWxldGVJbmRleCIpOwotCisgICAgQVNTRVJUKGN1cnJlbnRUaHJlYWQoKSA9PSBtX2Rh
dGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKICAgICBBU1NFUlQoaXNWZXJzaW9uQ2hhbmdlKCkp
OwogCiAgICAgYXV0byBvcGVyYXRpb24gPSBJREJDbGllbnQ6OmNyZWF0ZVRyYW5zYWN0aW9uT3Bl
cmF0aW9uKCp0aGlzLCAmSURCVHJhbnNhY3Rpb246OmRpZERlbGV0ZUluZGV4T25TZXJ2ZXIsICZJ
REJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNlcnZlciwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleE5hbWUpOwpAQCAtOTQ2LDYgKzEwMTcsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpk
ZWxldGVJbmRleE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24mIG9wZXJh
dAogewogICAgIExPRyhJbmRleGVkREIsICJJREJUcmFuc2FjdGlvbjo6ZGVsZXRlSW5kZXhPblNl
cnZlciIpOwogICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7CisgICAgQVNTRVJUKGN1cnJl
bnRUaHJlYWQoKSA9PSBtX2RhdGFiYXNlLT5vcmlnaW5UaHJlYWRJRCgpKTsKIAogICAgIHNlcnZl
ckNvbm5lY3Rpb24oKS5kZWxldGVJbmRleChvcGVyYXRpb24sIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhOYW1lKTsKIH0KQEAgLTk1MywxMiArMTAyNSwxNSBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uOjpkZWxldGVJbmRleE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVyYXRpb24m
IG9wZXJhdAogdm9pZCBJREJUcmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlcihjb25z
dCBJREJSZXN1bHREYXRhJiByZXN1bHREYXRhKQogewogICAgIExPRyhJbmRleGVkREIsICJJREJU
cmFuc2FjdGlvbjo6ZGlkRGVsZXRlSW5kZXhPblNlcnZlciIpOworICAgIEFTU0VSVChjdXJyZW50
VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CiAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHREYXRhLCByZXN1bHREYXRhLnR5cGUoKSA9PSBJREJSZXN1bHRUeXBlOjpEZWxl
dGVJbmRleFN1Y2Nlc3MgfHwgcmVzdWx0RGF0YS50eXBlKCkgPT0gSURCUmVzdWx0VHlwZTo6RXJy
b3IpOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25EaWRDb21wbGV0ZShJREJD
bGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYXRpb24pCiB7CiAgICAgQVNTRVJUKG1f
dHJhbnNhY3Rpb25PcGVyYXRpb25NYXAuZ2V0KG9wZXJhdGlvbi5pZGVudGlmaWVyKCkpID09ICZv
cGVyYXRpb24pOworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3Jp
Z2luVGhyZWFkSUQoKSk7CisKICAgICBtX3RyYW5zYWN0aW9uT3BlcmF0aW9uTWFwLnJlbW92ZShv
cGVyYXRpb24uaWRlbnRpZmllcigpKTsKIAogICAgIHNjaGVkdWxlT3BlcmF0aW9uVGltZXIoKTsK
QEAgLTk2NywxMiArMTA0MiwxNSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uOjpvcGVyYXRpb25EaWRD
b21wbGV0ZShJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uJiBvcGVyYQogdm9pZCBJREJU
cmFuc2FjdGlvbjo6ZXN0YWJsaXNoT25TZXJ2ZXIoKQogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJUcmFuc2FjdGlvbjo6ZXN0YWJsaXNoT25TZXJ2ZXIiKTsKKyAgICBBU1NFUlQoY3VycmVudFRo
cmVhZCgpID09IG1fZGF0YWJhc2UtPm9yaWdpblRocmVhZElEKCkpOwogCiAgICAgc2VydmVyQ29u
bmVjdGlvbigpLmVzdGFibGlzaFRyYW5zYWN0aW9uKCp0aGlzKTsKIH0KIAogdm9pZCBJREJUcmFu
c2FjdGlvbjo6YWN0aXZhdGUoKQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9k
YXRhYmFzZS0+b3JpZ2luVGhyZWFkSUQoKSk7CisKICAgICBpZiAoaXNGaW5pc2hlZE9yRmluaXNo
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTgxLDYgKzEwNTksOCBAQCB2b2lkIElEQlRy
YW5zYWN0aW9uOjphY3RpdmF0ZSgpCiAKIHZvaWQgSURCVHJhbnNhY3Rpb246OmRlYWN0aXZhdGUo
KQogeworICAgIEFTU0VSVChjdXJyZW50VGhyZWFkKCkgPT0gbV9kYXRhYmFzZS0+b3JpZ2luVGhy
ZWFkSUQoKSk7CisKICAgICBpZiAobV9zdGF0ZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uU3Rh
dGU6OkFjdGl2ZSkKICAgICAgICAgbV9zdGF0ZSA9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25TdGF0
ZTo6SW5hY3RpdmU7CiAK
</data>
<flag name="review"
          id="302183"
          type_id="1"
          status="+"
          setter="achristensen"
    />
          </attachment>
      

    </bug>

</bugzilla>