<?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>235229</bug_id>
          
          <creation_ts>2022-01-14 04:59:09 -0800</creation_ts>
          <short_desc>[GTK][a11y] Stop using isolated tree for the ATSPI implementation</short_desc>
          <delta_ts>2022-01-17 00:16:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>230253</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>annulen</cc>
    
    <cc>aperez</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1830881</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-01-14 04:59:09 -0800</bug_when>
    <thetext>Isolated tree performance is not good enough with many websites, so for now we will stop using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1830883</commentid>
    <comment_count>1</comment_count>
      <attachid>449164</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-01-14 05:02:24 -0800</bug_when>
    <thetext>Created attachment 449164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1831418</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-01-17 00:16:28 -0800</bug_when>
    <thetext>Committed r288089 (246103@trunk): &lt;https://commits.webkit.org/246103@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>449164</attachid>
            <date>2022-01-14 05:02:24 -0800</date>
            <delta_ts>2022-01-14 07:55:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-atspi-no-isolated-tree.diff</filename>
            <type>text/plain</type>
            <size>230936</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjOGM3NzJjMjVjZDAuLjA1
MTgzMGZjNDUxYSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE0IEBACisyMDIyLTAxLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBTdG9wIHVzaW5nIGlzb2xhdGVkIHRyZWUg
Zm9yIHRoZSBBVFNQSSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRG8gbm90IGVuYWJsZSBpc29sYXRlZCB0cmVlIGZvciBBVFNQ
SS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlOgorCiAyMDIyLTAx
LTEzICBBbGVqYW5kcm8gRy4gQ2FzdHJvICA8YWxleEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdW1dQRV1bV2ViR0wyXSBjb21waWxhdGlvbiBmaXhlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDZjZTRkYWM3
OTQ2Ni4uODk4YTE2YTFjZDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjA1IEBACisyMDIyLTAx
LTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1RLXVthMTF5XSBTdG9wIHVzaW5nIGlzb2xhdGVkIHRyZWUgZm9yIHRoZSBBVFNQSSBpbXBs
ZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjM1MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSXNvbGF0ZWQgdHJlZSBwZXJmb3JtYW5jZSBpcyBub3QgZ29vZCBlbm91Z2ggd2l0aCBtYW55
IHdlYnNpdGVzLCBzbyBmb3Igbm93IHdlIHdpbGwgc3RvcCB1c2luZyBpdC4KKworICAgICAgICAq
IFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RD
YWNoZUF0c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBvc3RQbGF0
Zm9ybU5vdGlmaWNhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwb3N0
VGV4dFN0YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uRm9y
VGV4dENvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6cG9zdFRleHRS
ZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aXNJc29sYXRlZFRyZWVFbmFibGVkKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmluaXRpYWxpemVTZWNvbmRhcnlB
WFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp1c2Vk
T25BWFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3Bp
Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6ZGlkQ29u
bmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6OmluaXRpYWxpemVS
ZWdpc3RyeSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6OmFkZEV2ZW50
TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpyZW1vdmVF
dmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6YWRk
Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6cmVtb3ZlQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6c2hvdWxkRW1pdFNp
Z25hbCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6OnVuaXF1ZU5hbWUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpudWxsUmVmZXJl
bmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6YXBwbGlj
YXRpb25SZWZlcmVuY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0
c3BpOjpyZWdpc3RlclJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3Bp
Ojp1bnJlZ2lzdGVyUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnJlZ2lzdGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6
dW5yZWdpc3Rlck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnJlZ2lzdGVySHlwZXJsaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNw
aTo6cGFyZW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OmNoaWxkcmVuQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6OnRl
eHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6dGV4dEF0
dHJpYnV0ZXNDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6
dGV4dENhcmV0TW92ZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjp0
ZXh0U2VsZWN0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRz
cGk6OnZhbHVlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6
OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3Bp
Ojpsb2FkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjplbnN1
cmVDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6OmFkZFRvQ2Fj
aGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6OnNjaGVk
dWxlQ2FjaGVVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjph
ZGRBY2Nlc3NpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlBdHNwaTo6cmVt
b3ZlQWNjZXNzaWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5QXRzcGk6OkFj
Y2Vzc2liaWxpdHlBdHNwaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5QXRzcGk6OnJ1bkxvb3AgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmg6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QWN0aW9uQXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphY3Rpb25OYW1lIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6bG9jYWxpemVkQWN0aW9uTmFtZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmFjdGlv
bktleUJpbmRpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpkb0FjdGlvbiBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9B
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjYWNoZURlc3Ryb3llZCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmVsZW1lbnREZXN0cm95ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb290KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cmVnaXN0ZXJPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpkaWRVbnJlZ2lzdGVy
T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cGF0
aCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJlZmVyZW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Omh5cGVybGlu
a1JlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjogY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjaGlsZENvdW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBdCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkcmVuIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aW5kZXhJblBhcmVu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om5h
bWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpk
ZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OmxvY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6aXNEZWZ1bmN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6aWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRBdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cmVsYXRpb25NYXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpidWlsZFJlbGF0aW9u
U2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
YnVpbGRJbnRlcmZhY2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6c2VyaWFsaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBZGRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkUmVtb3ZlZCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmxvYWRFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmVmZmVjdGl2ZVJvbGUgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb2xlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm9sZU5hbWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpsb2NhbGl6ZWRSb2xlTmFt
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnVw
ZGF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphY2Nlc3NpYmlsaXR5UGxhdGZvcm1JbmNsdWRlc09iamVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmF0dGFjaCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmRldGFjaCk6IERlbGV0ZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGku
aDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RDb21w
b25lbnRBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OmhpdFRlc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjplbGVtZW50UmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OmZvY3VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6b3BhY2l0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNjcm9sbFRvTWFrZVZpc2libGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzY3JvbGxUb1BvaW50IGNvbnN0
KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3REb2N1
bWVudEF0c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6ZG9jdW1lbnRBdHRyaWJ1dGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpkb2N1bWVudEF0dHJpYnV0ZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpkb2N1bWVudExvY2FsZSBjb25zdCk6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0SHlwZXJsaW5r
QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp1
cmwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpv
ZmZzZXRJblBhcmVudCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nl
c3NpYmlsaXR5T2JqZWN0SHlwZXJ0ZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpoeXBlcmxpbmtDb3VudCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Omh5cGVybGluayBjb25zdCk6CisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW1hZ2VBdHNwaS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmltYWdlRGVz
Y3JpcHRpb24gY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJp
bGl0eU9iamVjdFNlbGVjdGlvbkF0c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0aW9uQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZWxlY3RlZENoaWxkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2V0Q2hpbGRTZWxlY3RlZCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmRlc2Vs
ZWN0U2VsZWN0ZWRDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OmlzQ2hpbGRTZWxlY3RlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVjdEFsbCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNsZWFyU2VsZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0aW9uQ2hhbmdl
ZCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFi
bGVBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnJvd0NvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6Y29sdW1uQ291bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpjZWxsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6dGFibGVDYXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2VsbEluZGV4IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm93QXRJbmRleCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNvbHVtbkF0SW5kZXggY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb3dIZWFkZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjb2x1
bW5IZWFkZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpyb3dEZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OmNvbHVtbkRlc2NyaXB0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm93RXh0ZW50IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29sdW1uRXh0ZW50IGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2VsbHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb3dzIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm93SGVhZGVy
cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNv
bHVtbkhlYWRlcnMgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNz
aWJpbGl0eU9iamVjdFRhYmxlQ2VsbEF0c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6Y2VsbFJvd0hlYWRlcnMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjZWxsQ29sdW1uSGVhZGVycyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd1NwYW4gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjb2x1bW5T
cGFuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
Y2VsbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vz
c2liaWxpdHlPYmplY3RUZXh0QXRzcGkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjp0ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmdldExlbmd0aEZvclRleHRSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRJbnNlcnRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHREZWxldGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Ym91bmRhcnlPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0QXRPZmZz
ZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpj
aGFyYWN0ZXJBdE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OmJvdW5kc0ZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dEV4dGVudHMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpvZmZzZXRBdFBvaW50IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Ym91bmRzRm9yU2VsZWN0
aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
c2VsZWN0ZWRSYW5nZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnNlbGVjdGlvbkJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNldFNlbGVjdGVkUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZWxlY3RSYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVjdGlvbkNoYW5nZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0QXR0cmlidXRlcyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRBdHRy
aWJ1dGVzV2l0aFVURjhPZmZzZXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjp0ZXh0QXR0cmlidXRlc0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzY3JvbGxUb01ha2VWaXNpYmxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Nyb2xsVG9Qb2lu
dCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0VmFsdWVBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OmN1cnJlbnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OnNldEN1cnJlbnRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6Om1pbmltdW1WYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om1heGltdW1WYWx1ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om1pbmltdW1JbmNyZW1lbnQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp2YWx1
ZUNoYW5nZWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJv
b3RBdHNwaS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpB
Y2Nlc3NpYmlsaXR5Um9vdEF0c3BpKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
b290QXRzcGk6OnJlZ2lzdGVyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlSb290QXRzcGk6OnVucmVnaXN0ZXJPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJvb3RBdHNwaTo6cmVnaXN0ZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSb290QXRzcGk6OmRpZFVucmVnaXN0ZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnNldFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJvb3RBdHNwaTo6ZW1iZWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eVJvb3RBdHNwaTo6YXBwbGljYXRpb25SZWZlcmVuY2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6cmVmZXJlbmNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnBhcmVudFJlZmVyZW5jZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpjaGlsZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpjaGlsZEFkZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnNlcmlhbGl6ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpmcmFtZVJl
Y3QgY29uc3QpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJv
b3RBdHNwaS5oOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL2F0c3BpL0FY
SXNvbGF0ZWRPYmplY3RBdHNwaS5jcHA6IFJlbW92ZWQuCisgICAgICAgIChXZWJDb3JlOjpBWElz
b2xhdGVkT2JqZWN0Ojppbml0aWFsaXplUGxhdGZvcm1Qcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRPYmplY3Q6OmF0dGFjaFBsYXRmb3JtV3JhcHBlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkT2JqZWN0OjpkZXRhY2hQbGF0
Zm9ybVdyYXBwZXIpOiBEZWxldGVkLgorCiAyMDIyLTAxLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVthMTF5XSBVbnJlZ2lzdGVy
IG9iamVjdHMgYW5kIGNsZWFyIGNhY2hlIHdoZW4gbGFzdCBjbGllbnQgZGlzY29ubmVjdCB3aXRo
IEFUU1BJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDQ5MTc4NmI1MWQzZS4uMWViNTA1N2ZhYzY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtNTUsOCArNTUsNiBAQCBhY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RWYWx1ZUF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNw
aS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9hdHNwaS9BWE9iamVj
dENhY2hlQXRzcGkuY3BwCiAKLWFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL2F0c3BpL0FYSXNv
bGF0ZWRPYmplY3RBdHNwaS5jcHAKLQogZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3Bw
CiAKIGVkaXRpbmcvYXRzcGkvRnJhbWVTZWxlY3Rpb25BdHNwaS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0c3BpLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0c3BpLmNw
cAppbmRleCA4YjNlOTExOTFmNzMuLmZjNThlOTQ5ODYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BWE9iamVjdENhY2hlQXRzcGkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQVhPYmplY3RDYWNoZUF0c3BpLmNwcApA
QCAtNjksMjMgKzY5LDggQEAgdm9pZCBBWE9iamVjdENhY2hlOjpwbGF0Zm9ybVBlcmZvcm1EZWZl
cnJlZENhY2hlVXBkYXRlKCkKICAgICBtX2RlZmVycmVkUGFyZW50Q2hhbmdlZExpc3QuY2xlYXIo
KTsKIH0KIAotYm9vbCBBWE9iamVjdENhY2hlOjppc0lzb2xhdGVkVHJlZUVuYWJsZWQoKQotewot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFYT2JqZWN0Q2FjaGU6OmluaXRpYWxpemVTZWNv
bmRhcnlBWFRocmVhZCgpCi17Ci19Ci0KLWJvb2wgQVhPYmplY3RDYWNoZTo6dXNlZE9uQVhUaHJl
YWQoKQotewotICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RQ
bGF0Zm9ybU5vdGlmaWNhdGlvbihBWENvcmVPYmplY3QqIGNvcmVPYmplY3QsIEFYTm90aWZpY2F0
aW9uIG5vdGlmaWNhdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgYXV0byogd3JhcHBlciA9IGNvcmVPYmplY3QtPndyYXBwZXIoKTsKICAgICBpZiAoIXdy
YXBwZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTIyMCw3ICsyMDUsNiBAQCB2b2lkIEFYT2JqZWN0
Q2FjaGU6OnBvc3RQbGF0Zm9ybU5vdGlmaWNhdGlvbihBWENvcmVPYmplY3QqIGNvcmVPYmplY3Qs
IEFYTm90aWZpYwogCiB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFuZ2VQbGF0
Zm9ybU5vdGlmaWNhdGlvbihBWENvcmVPYmplY3QqIGNvcmVPYmplY3QsIGNvbnN0IEFYVGV4dFN0
YXRlQ2hhbmdlSW50ZW50JiwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIWNvcmVPYmplY3Qp
CiAgICAgICAgIGNvcmVPYmplY3QgPSByb290V2ViQXJlYSgpOwogCkBAIC0yMzYsNyArMjIwLDYg
QEAgdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4dFN0YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmlj
YXRpb24oQVhDb3JlT2JqZWN0KiBjb3JlT2IKIAogdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0VGV4
dFN0YXRlQ2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVjdCogY29y
ZU9iamVjdCwgQVhUZXh0RWRpdFR5cGUgZWRpdFR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI2NSw3ICsyNDgsNiBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnBvc3RUZXh0U3RhdGVDaGFu
Z2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KgogCiB2b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnBvc3RUZXh0UmVwbGFjZW1lbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbkZvclRleHRD
b250cm9sKEFYQ29yZU9iamVjdCogY29yZU9iamVjdCwgY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4
dCwgY29uc3QgU3RyaW5nJiBpbnNlcnRlZFRleHQsIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
JikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFjb3Jl
T2JqZWN0KQogICAgICAgICBjb3JlT2JqZWN0ID0gcm9vdFdlYkFyZWEoKTsKIApAQCAtMjg3LDcg
KzI2OSw2IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3Jt
Tm90aWZpY2F0aW9uRm9yVGV4dENvbnRyb2woQVhDb3JlCiAKIHZvaWQgQVhPYmplY3RDYWNoZTo6
cG9zdFRleHRSZXBsYWNlbWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFYQ29yZU9iamVjdCogY29y
ZU9iamVjdCwgQVhUZXh0RWRpdFR5cGUsIGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIEFYVGV4
dEVkaXRUeXBlLCBjb25zdCBTdHJpbmcmIGluc2VydGVkVGV4dCwgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgaWYgKCFjb3JlT2JqZWN0KQogICAgICAgICBjb3JlT2JqZWN0ID0gcm9vdFdlYkFyZWEoKTsK
IApAQCAtMzA5LDcgKzI5MCw2IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6cG9zdFRleHRSZXBsYWNl
bWVudFBsYXRmb3JtTm90aWZpY2F0aW9uKEFYQ29yZU9iamVjdCogY29yZU9iCiAKIHZvaWQgQVhP
YmplY3RDYWNoZTo6ZnJhbWVMb2FkaW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBBWExvYWRpbmdFdmVudCBsb2FkaW5nRXZlbnQpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghY29yZU9iamVj
dCkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKaW5kZXggMWJkOGIyZGUxNDQx
Li45Y2VjYWQyMWJhMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmgiCiAjaW5jbHVkZSA8Z2lvL2dpby5oPgog
I2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvU29ydGVkQXJy
YXlNYXAuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgpAQCAtMzksNjkgKzM4LDgxIEBAIEFjY2Vz
c2liaWxpdHlBdHNwaSYgQWNjZXNzaWJpbGl0eUF0c3BpOjpzaW5nbGV0b24oKQogICAgIHJldHVy
biBhdHNwaTsKIH0KIAotQWNjZXNzaWJpbGl0eUF0c3BpOjpBY2Nlc3NpYmlsaXR5QXRzcGkoKQot
ICAgIDogbV9xdWV1ZShXb3JrUXVldWU6OmNyZWF0ZSgib3JnLndlYmtpdC5hMTF5IikpCit2b2lk
IEFjY2Vzc2liaWxpdHlBdHNwaTo6Y29ubmVjdChjb25zdCBTdHJpbmcmIGJ1c0FkZHJlc3MpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChidXNBZGRyZXNz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc0Nvbm5lY3RpbmcgPSB0cnVl
OworICAgIGdfZGJ1c19jb25uZWN0aW9uX25ld19mb3JfYWRkcmVzcyhidXNBZGRyZXNzLnV0Zjgo
KS5kYXRhKCksCisgICAgICAgIHN0YXRpY19jYXN0PEdEQnVzQ29ubmVjdGlvbkZsYWdzPihHX0RC
VVNfQ09OTkVDVElPTl9GTEFHU19BVVRIRU5USUNBVElPTl9DTElFTlQgfCBHX0RCVVNfQ09OTkVD
VElPTl9GTEFHU19NRVNTQUdFX0JVU19DT05ORUNUSU9OKSwgbnVsbHB0ciwgbnVsbHB0ciwKKyAg
ICAgICAgW10oR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0
YSkgeworICAgICAgICAgICAgYXV0byYgYXRzcGkgPSAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0
eUF0c3BpKj4odXNlckRhdGEpOworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOworICAgICAgICAgICAgYXRzcGkuZGlkQ29ubmVjdChhZG9wdEdSZWYoZ19kYnVzX2Nvbm5l
Y3Rpb25fbmV3X2Zvcl9hZGRyZXNzX2ZpbmlzaChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpKTsK
KyAgICAgICAgICAgIGlmIChlcnJvcikKKyAgICAgICAgICAgICAgICBnX3dhcm5pbmcoIkNhbid0
IGNvbm5lY3QgdG8gYTExeSBidXM6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICB9LCB0
aGlzKTsKIH0KIAotdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OmNvbm5lY3QoY29uc3QgU3RyaW5n
JiBidXNBZGRyZXNzKQordm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OmRpZENvbm5lY3QoR1JlZlB0
cjxHREJ1c0Nvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKGJ1c0FkZHJlc3MuaXNFbXB0eSgpKQorICAgIG1faXND
b25uZWN0aW5nID0gZmFsc2U7CisgICAgbV9jb25uZWN0aW9uID0gV1RGTW92ZShjb25uZWN0aW9u
KTsKKyAgICBpZiAoIW1fY29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIGJ1c0FkZHJlc3MgPSBidXNBZGRyZXNzLmlzb2xhdGVkQ29weSgp
XSB7Ci0gICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICAgICAgbV9jb25u
ZWN0aW9uID0gYWRvcHRHUmVmKGdfZGJ1c19jb25uZWN0aW9uX25ld19mb3JfYWRkcmVzc19zeW5j
KGJ1c0FkZHJlc3MudXRmOCgpLmRhdGEoKSwKLSAgICAgICAgICAgIHN0YXRpY19jYXN0PEdEQnVz
Q29ubmVjdGlvbkZsYWdzPihHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19BVVRIRU5USUNBVElPTl9D
TElFTlQgfCBHX0RCVVNfQ09OTkVDVElPTl9GTEFHU19NRVNTQUdFX0JVU19DT05ORUNUSU9OKSwK
LSAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOwotCi0gICAg
ICAgIGlmIChtX2Nvbm5lY3Rpb24pCi0gICAgICAgICAgICBpbml0aWFsaXplUmVnaXN0cnkoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ193YXJuaW5nKCJDYW4ndCBjb25uZWN0IHRvIGEx
MXkgYnVzOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICB9KTsKKyAgICBmb3IgKGF1dG8mIHBl
bmRpbmdSZWdpc3RyYXRpb24gOiBtX3BlbmRpbmdSb290UmVnaXN0cmF0aW9ucykKKyAgICAgICAg
cmVnaXN0ZXJSb290KHBlbmRpbmdSZWdpc3RyYXRpb24ucm9vdCwgV1RGTW92ZShwZW5kaW5nUmVn
aXN0cmF0aW9uLmludGVyZmFjZXMpLCBXVEZNb3ZlKHBlbmRpbmdSZWdpc3RyYXRpb24uY29tcGxl
dGlvbkhhbmRsZXIpKTsKKyAgICBtX3BlbmRpbmdSb290UmVnaXN0cmF0aW9ucy5jbGVhcigpOwor
CisgICAgaW5pdGlhbGl6ZVJlZ2lzdHJ5KCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUF0c3Bp
Ojppbml0aWFsaXplUmVnaXN0cnkoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9jb25uZWN0aW9uKTsKLSAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgbV9yZWdpc3RyeSA9IGFkb3B0R1JlZihnX2RidXNfcHJv
eHlfbmV3X3N5bmMobV9jb25uZWN0aW9uLmdldCgpLCBHX0RCVVNfUFJPWFlfRkxBR1NfRE9fTk9U
X0xPQURfUFJPUEVSVElFUywgbnVsbHB0ciwKLSAgICAgICAgIm9yZy5hMTF5LmF0c3BpLlJlZ2lz
dHJ5IiwgIi9vcmcvYTExeS9hdHNwaS9yZWdpc3RyeSIsICJvcmcuYTExeS5hdHNwaS5SZWdpc3Ry
eSIsIG51bGxwdHIsICZlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmICghbV9yZWdpc3RyeSkgewot
ICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBjb25uZWN0IHRvIGF0c3BpIHJlZ2lzdHJ5OiAl
c1xuIiwgZXJyb3ItPm1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZ19z
aWduYWxfY29ubmVjdChtX3JlZ2lzdHJ5LmdldCgpLCAiZy1zaWduYWwiLCBHX0NBTExCQUNLKCtb
XShHREJ1c1Byb3h5KiwgY2hhciosIGNoYXIqIHNpZ25hbCwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMs
IEFjY2Vzc2liaWxpdHlBdHNwaSogYXRzcGkpIHsKLSAgICAgICAgY29uc3QgY2hhciogZGJ1c05h
bWU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50TmFtZTsKLSAgICAgICAgaWYgKCFnX3N0cmNt
cDAoc2lnbmFsLCAiRXZlbnRMaXN0ZW5lclJlZ2lzdGVyZWQiKSkgewotICAgICAgICAgICAgZ192
YXJpYW50X2dldChwYXJhbWV0ZXJzLCAiKCZzJnNAYXMpIiwgJmRidXNOYW1lLCAmZXZlbnROYW1l
LCBudWxscHRyKTsKLSAgICAgICAgICAgIGF0c3BpLT5hZGRFdmVudExpc3RlbmVyKGRidXNOYW1l
LCBldmVudE5hbWUpOwotICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsLCAiRXZl
bnRMaXN0ZW5lckRlcmVnaXN0ZXJlZCIpKSB7Ci0gICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBh
cmFtZXRlcnMsICIoJnMmcykiLCAmZGJ1c05hbWUsICZldmVudE5hbWUpOwotICAgICAgICAgICAg
YXRzcGktPnJlbW92ZUV2ZW50TGlzdGVuZXIoZGJ1c05hbWUsIGV2ZW50TmFtZSk7CisgICAgZ19k
YnVzX3Byb3h5X25ldyhtX2Nvbm5lY3Rpb24uZ2V0KCksIEdfREJVU19QUk9YWV9GTEFHU19ET19O
T1RfTE9BRF9QUk9QRVJUSUVTLCBudWxscHRyLAorICAgICAgICAib3JnLmExMXkuYXRzcGkuUmVn
aXN0cnkiLCAiL29yZy9hMTF5L2F0c3BpL3JlZ2lzdHJ5IiwgIm9yZy5hMTF5LmF0c3BpLlJlZ2lz
dHJ5IiwgbnVsbHB0ciwgW10oR09iamVjdCosIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRl
ciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvJiBhdHNwaSA9ICpzdGF0aWNfY2FzdDxBY2Nlc3Np
YmlsaXR5QXRzcGkqPih1c2VyRGF0YSk7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBl
cnJvcjsKKyAgICAgICAgYXRzcGkubV9yZWdpc3RyeSA9IGFkb3B0R1JlZihnX2RidXNfcHJveHlf
bmV3X2ZpbmlzaChyZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICBpZiAoIWF0c3Bp
Lm1fcmVnaXN0cnkpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiRmFpbGVkIHRvIGNvbm5lY3Qg
dG8gYXRzcGkgcmVnaXN0cnk6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICB9KSwgdGhpcyk7CiAKLSAgICBHUmVmUHRyPEdWYXJpYW50
PiByZXN1bHQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfc3luYyhtX3JlZ2lzdHJ5Lmdl
dCgpLCAiR2V0UmVnaXN0ZXJlZEV2ZW50cyIsIG51bGxwdHIsIEdfREJVU19DQUxMX0ZMQUdTX05P
TkUsIC0xLCBudWxscHRyLCAmZXJyb3Iub3V0UHRyKCkpKTsKLSAgICBpZiAoIXJlc3VsdCkgewot
ICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgYXRzcGkgcmVnaXN0ZXJlZCBldmVudCBs
aXN0ZW5lcnM6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXRzcGkubV9yZWdpc3RyeS5nZXQoKSwgImctc2ln
bmFsIiwgR19DQUxMQkFDSygrW10oR0RCdXNQcm94eSosIGNoYXIqLCBjaGFyKiBzaWduYWwsIEdW
YXJpYW50KiBwYXJhbWV0ZXJzLCBBY2Nlc3NpYmlsaXR5QXRzcGkqIGF0c3BpKSB7CisgICAgICAg
ICAgICBjb25zdCBjaGFyKiBkYnVzTmFtZTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV2ZW50
TmFtZTsKKyAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKHNpZ25hbCwgIkV2ZW50TGlzdGVuZXJS
ZWdpc3RlcmVkIikpIHsKKyAgICAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMs
ICIoJnMmc0BhcykiLCAmZGJ1c05hbWUsICZldmVudE5hbWUsIG51bGxwdHIpOworICAgICAgICAg
ICAgICAgIGF0c3BpLT5hZGRFdmVudExpc3RlbmVyKGRidXNOYW1lLCBldmVudE5hbWUpOworICAg
ICAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbCwgIkV2ZW50TGlzdGVuZXJEZXJl
Z2lzdGVyZWQiKSkgeworICAgICAgICAgICAgICAgIGdfdmFyaWFudF9nZXQocGFyYW1ldGVycywg
IigmcyZzKSIsICZkYnVzTmFtZSwgJmV2ZW50TmFtZSk7CisgICAgICAgICAgICAgICAgYXRzcGkt
PnJlbW92ZUV2ZW50TGlzdGVuZXIoZGJ1c05hbWUsIGV2ZW50TmFtZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pLCAmYXRzcGkpOworCisgICAgICAgIGdfZGJ1c19wcm94eV9jYWxsKGF0c3Bp
Lm1fcmVnaXN0cnkuZ2V0KCksICJHZXRSZWdpc3RlcmVkRXZlbnRzIiwgbnVsbHB0ciwgR19EQlVT
X0NBTExfRkxBR1NfTk9ORSwgLTEsIG51bGxwdHIsIFtdKEdPYmplY3QqIHByb3h5LCBHQXN5bmNS
ZXN1bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgICAgIGF1dG8mIGF0
c3BpID0gKnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlBdHNwaSo+KHVzZXJEYXRhKTsKKyAgICAg
ICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IHJlc3VsdFZhcmlhbnQgPSBhZG9wdEdSZWYoZ19kYnVzX3Byb3h5X2NhbGxfZmlu
aXNoKEdfREJVU19QUk9YWShwcm94eSksIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CisgICAg
ICAgICAgICBpZiAoIXJlc3VsdFZhcmlhbnQpIHsKKyAgICAgICAgICAgICAgICBnX3dhcm5pbmco
IkZhaWxlZCB0byBnZXQgYXRzcGkgcmVnaXN0ZXJlZCBldmVudCBsaXN0ZW5lcnM6ICVzXG4iLCBl
cnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQog
Ci0gICAgR1JlZlB0cjxHVmFyaWFudD4gZXZlbnRzOwotICAgIGdfdmFyaWFudF9nZXQocmVzdWx0
LmdldCgpLCAiKEBhKHNzKSkiLCAmZXZlbnRzLm91dFB0cigpKTsKLSAgICBHVmFyaWFudEl0ZXIg
aXRlcjsKLSAgICBnX3ZhcmlhbnRfaXRlcl9pbml0KCZpdGVyLCBldmVudHMuZ2V0KCkpOwotICAg
IGNvbnN0IGNoYXIqIGRidXNOYW1lOwotICAgIGNvbnN0IGNoYXIqIGV2ZW50TmFtZTsKLSAgICB3
aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgIigmcyZzKSIsICZkYnVzTmFtZSwgJmV2
ZW50TmFtZSkpCi0gICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZGJ1c05hbWUsIGV2ZW50TmFtZSk7
CisgICAgICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiBldmVudHM7CisgICAgICAgICAgICBnX3Zh
cmlhbnRfZ2V0KHJlc3VsdFZhcmlhbnQuZ2V0KCksICIoQGEoc3MpKSIsICZldmVudHMub3V0UHRy
KCkpOworICAgICAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7CisgICAgICAgICAgICBnX3Zhcmlh
bnRfaXRlcl9pbml0KCZpdGVyLCBldmVudHMuZ2V0KCkpOworICAgICAgICAgICAgY29uc3QgY2hh
ciogZGJ1c05hbWU7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBldmVudE5hbWU7CisgICAgICAg
ICAgICB3aGlsZSAoZ192YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgIigmcyZzKSIsICZkYnVzTmFt
ZSwgJmV2ZW50TmFtZSkpCisgICAgICAgICAgICAgICAgYXRzcGkuYWRkRXZlbnRMaXN0ZW5lcihk
YnVzTmFtZSwgZXZlbnROYW1lKTsKKyAgICAgICAgfSwgJmF0c3BpKTsKKyAgICB9LCB0aGlzKTsK
IH0KIAogc3RhdGljIEdVbmlxdWVQdHI8Y2hhcio+IGV2ZW50Q29udmVydGluZ0RldGFpbFRvTm9u
Q2FtZWxDYXNlKGNvbnN0IGNoYXIqIGV2ZW50TmFtZSkKQEAgLTEzMiw3ICsxNDMsNiBAQCBzdGF0
aWMgR1VuaXF1ZVB0cjxjaGFyKj4gZXZlbnRDb252ZXJ0aW5nRGV0YWlsVG9Ob25DYW1lbENhc2Uo
Y29uc3QgY2hhciogZXZlbnROYQogCiB2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6YWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBjaGFyKiBkYnVzTmFtZSwgY29uc3QgY2hhciogZXZlbnROYW1lKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byYgbGlzdGVuZXJz
ID0gbV9ldmVudExpc3RlbmVycy5lbnN1cmUoZGJ1c05hbWUsIFtdIHsKICAgICAgICAgcmV0dXJu
IFZlY3RvcjxHVW5pcXVlUHRyPGNoYXIqPj4geyB9OwogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsK
QEAgLTE1NCw3ICsxNjQsNiBAQCBzdGF0aWMgYm9vbCBldmVudElzU3VidHlwZShjaGFyKiogbmVl
ZGxlLCBjaGFyKiogaGF5c3RhY2spCiAKIHZvaWQgQWNjZXNzaWJpbGl0eUF0c3BpOjpyZW1vdmVF
dmVudExpc3RlbmVyKGNvbnN0IGNoYXIqIGRidXNOYW1lLCBjb25zdCBjaGFyKiBldmVudE5hbWUp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIWV2ZW50
TmFtZSB8fCAhKmV2ZW50TmFtZSkgewogICAgICAgICBtX2V2ZW50TGlzdGVuZXJzLnJlbW92ZShk
YnVzTmFtZSk7CiAgICAgICAgIHJldHVybjsKQEAgLTE3NSw3ICsxODQsNiBAQCB2b2lkIEFjY2Vz
c2liaWxpdHlBdHNwaTo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBjaGFyKiBkYnVzTmFtZSwg
Y29uc3QgY2hhciogZQogCiB2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6YWRkQ2xpZW50KGNvbnN0
IGNoYXIqIGRidXNOYW1lKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
CiAgICAgaWYgKG1fY2xpZW50cy5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChhdXRvKiByb290
T2JqZWN0IDogbV9yb290T2JqZWN0cy5rZXlzKCkpCiAgICAgICAgICAgICByb290T2JqZWN0LT5y
ZWdpc3RlclRyZWUoKTsKQEAgLTIwMSw3ICsyMDksNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlBdHNw
aTo6YWRkQ2xpZW50KGNvbnN0IGNoYXIqIGRidXNOYW1lKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlB
dHNwaTo6cmVtb3ZlQ2xpZW50KGNvbnN0IGNoYXIqIGRidXNOYW1lKQogewotICAgIFJFTEVBU0Vf
QVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byBpZCA9IG1fY2xpZW50cy50YWtlKGRi
dXNOYW1lKTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CkBAIC0yMjQsOCArMjMxLDYg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnJlbW92ZUNsaWVudChjb25zdCBjaGFyKiBkYnVz
TmFtZSkKIAogYm9vbCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNob3VsZEVtaXRTaWduYWwoY29uc3Qg
Y2hhciogaW50ZXJmYWNlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBkZXRhaWwpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQogICAgIC8vIEFsd2F5cyBl
bWl0IHNpZ25hbHMgaWYgd2UgY291bGRuJ3QgY29ubmVjdCB0byB0aGUgcmVnaXN0cnkuCiAgICAg
aWYgKCFtX3JlZ2lzdHJ5KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI0NSwyNyArMjUwLDE4
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUF0c3BpOjpzaG91bGRFbWl0U2lnbmFsKGNvbnN0IGNoYXIq
IGludGVyZmFjZSwgY29uc3QgY2hhciogbmFtCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1SdW5M
b29wJiBBY2Nlc3NpYmlsaXR5QXRzcGk6OnJ1bkxvb3AoKSBjb25zdAotewotICAgIHJldHVybiBt
X3F1ZXVlLT5ydW5Mb29wKCk7Ci19Ci0KIGNvbnN0IGNoYXIqIEFjY2Vzc2liaWxpdHlBdHNwaTo6
dW5pcXVlTmFtZSgpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgp
KTsKICAgICByZXR1cm4gbV9jb25uZWN0aW9uID8gZ19kYnVzX2Nvbm5lY3Rpb25fZ2V0X3VuaXF1
ZV9uYW1lKG1fY29ubmVjdGlvbi5nZXQoKSkgOiBudWxscHRyOwogfQogCiBHVmFyaWFudCogQWNj
ZXNzaWJpbGl0eUF0c3BpOjpudWxsUmVmZXJlbmNlKCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3KCIoc28pIiwg
dW5pcXVlTmFtZSgpLCAiL29yZy9hMTF5L2F0c3BpL251bGwiKTsKIH0KIAogR1ZhcmlhbnQqIEFj
Y2Vzc2liaWxpdHlBdHNwaTo6YXBwbGljYXRpb25SZWZlcmVuY2UoKSBjb25zdAogewotICAgIFJF
TEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KICAgICAvLyBUaGUgYXBwbGljYXRpb24g
aXMgdGhlIHNhbWUgZm9yIGFsbCByb290IG9iamVjdHMsIHNvIGp1c3QgdXNlIHRoZSBmaXJzdCBy
b290IG9iamVjdCB0aGF0IGlzIGFscmVhZHkgZW1iZWRkZWQuCiAgICAgZm9yIChhdXRvKiByb290
T2JqZWN0IDogbV9yb290T2JqZWN0cy5rZXlzKCkpIHsKICAgICAgICAgaWYgKCFyb290T2JqZWN0
LT5wYXRoKCkuaXNOdWxsKCkpCkBAIC0yNzcsNDkgKzI3Myw0OCBAQCBHVmFyaWFudCogQWNjZXNz
aWJpbGl0eUF0c3BpOjphcHBsaWNhdGlvblJlZmVyZW5jZSgpIGNvbnN0CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eUF0c3BpOjpyZWdpc3RlclJvb3QoQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSYgcm9vdE9i
amVjdCwgVmVjdG9yPHN0ZDo6cGFpcjxHREJ1c0ludGVyZmFjZUluZm8qLCBHREJ1c0ludGVyZmFj
ZVZUYWJsZSo+PiYmIGludGVyZmFjZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgU3Ry
aW5nJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCByb290T2JqZWN0ID0gUmVm
IHsgcm9vdE9iamVjdCB9LCBpbnRlcmZhY2VzID0gV1RGTW92ZShpbnRlcmZhY2VzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oKSBtdXRhYmxlIHsKLSAg
ICAgICAgU3RyaW5nIHJlZmVyZW5jZTsKLSAgICAgICAgaWYgKG1fY29ubmVjdGlvbikgewotICAg
ICAgICAgICAgZW5zdXJlQ2FjaGUoKTsKLSAgICAgICAgICAgIFN0cmluZyBwYXRoID0gbWFrZVN0
cmluZygiL29yZy9hMTF5L3dlYmtpdC9hY2Nlc3NpYmxlLyIsIGNyZWF0ZUNhbm9uaWNhbFVVSURT
dHJpbmcoKS5yZXBsYWNlKCctJywgJ18nKSk7Ci0gICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQs
IDM+IHJlZ2lzdGVyZWRPYmplY3RzOwotICAgICAgICAgICAgcmVnaXN0ZXJlZE9iamVjdHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShpbnRlcmZhY2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGludGVyZmFjZSA6IGludGVyZmFjZXMpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIGlkID0gZ19kYnVzX2Nvbm5lY3Rpb25fcmVnaXN0ZXJfb2JqZWN0KG1fY29ubmVjdGlvbi5n
ZXQoKSwgcGF0aC51dGY4KCkuZGF0YSgpLCBpbnRlcmZhY2UuZmlyc3QsIGludGVyZmFjZS5zZWNv
bmQsIHJvb3RPYmplY3QucHRyKCksIG51bGxwdHIsIG51bGxwdHIpOwotICAgICAgICAgICAgICAg
IHJlZ2lzdGVyZWRPYmplY3RzLnVuY2hlY2tlZEFwcGVuZChpZCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBtX3Jvb3RPYmplY3RzLmFkZChyb290T2JqZWN0LnB0cigpLCBXVEZNb3ZlKHJl
Z2lzdGVyZWRPYmplY3RzKSk7Ci0gICAgICAgICAgICByZWZlcmVuY2UgPSBtYWtlU3RyaW5nKHVu
aXF1ZU5hbWUoKSwgJzonLCBwYXRoKTsKLSAgICAgICAgICAgIHJvb3RPYmplY3QtPnNldFBhdGgo
V1RGTW92ZShwYXRoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgUnVuTG9vcDo6bWFpbigpLmRpc3Bh
dGNoKFtyZWZlcmVuY2UgPSByZWZlcmVuY2UuaXNvbGF0ZWRDb3B5KCksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7Ci0gICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihyZWZlcmVuY2UpOwotICAgICAgICB9KTsKLSAgICB9KTsKKyAg
ICBpZiAobV9pc0Nvbm5lY3RpbmcpIHsKKyAgICAgICAgbV9wZW5kaW5nUm9vdFJlZ2lzdHJhdGlv
bnMuYXBwZW5kKHsgcm9vdE9iamVjdCwgV1RGTW92ZShpbnRlcmZhY2VzKSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcikgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1f
Y29ubmVjdGlvbikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZW5zdXJlQ2FjaGUoKTsKKyAgICBTdHJpbmcgcGF0aCA9IG1h
a2VTdHJpbmcoIi9vcmcvYTExeS93ZWJraXQvYWNjZXNzaWJsZS8iLCBjcmVhdGVDYW5vbmljYWxV
VUlEU3RyaW5nKCkucmVwbGFjZSgnLScsICdfJykpOworICAgIFZlY3Rvcjx1bnNpZ25lZCwgMz4g
cmVnaXN0ZXJlZE9iamVjdHM7CisgICAgcmVnaXN0ZXJlZE9iamVjdHMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShpbnRlcmZhY2VzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmZh
Y2UgOiBpbnRlcmZhY2VzKSB7CisgICAgICAgIGF1dG8gaWQgPSBnX2RidXNfY29ubmVjdGlvbl9y
ZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9uLmdldCgpLCBwYXRoLnV0ZjgoKS5kYXRhKCksIGlu
dGVyZmFjZS5maXJzdCwgaW50ZXJmYWNlLnNlY29uZCwgJnJvb3RPYmplY3QsIG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICByZWdpc3RlcmVkT2JqZWN0cy51bmNoZWNrZWRBcHBlbmQoaWQpOwor
ICAgIH0KKyAgICBtX3Jvb3RPYmplY3RzLmFkZCgmcm9vdE9iamVjdCwgV1RGTW92ZShyZWdpc3Rl
cmVkT2JqZWN0cykpOworICAgIFN0cmluZyByZWZlcmVuY2UgPSBtYWtlU3RyaW5nKHVuaXF1ZU5h
bWUoKSwgJzonLCBwYXRoKTsKKyAgICByb290T2JqZWN0LnNldFBhdGgoV1RGTW92ZShwYXRoKSk7
CisgICAgY29tcGxldGlvbkhhbmRsZXIocmVmZXJlbmNlKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmls
aXR5QXRzcGk6OnVucmVnaXN0ZXJSb290KEFjY2Vzc2liaWxpdHlSb290QXRzcGkmIHJvb3RPYmpl
Y3QpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCByb290T2JqZWN0ID0gUmVmIHsgcm9vdE9iamVjdCB9XSB7Ci0gICAg
ICAgIGlmICghbV9jb25uZWN0aW9uKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9j
b25uZWN0aW9uKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25f
ZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCByb290T2JqZWN0LT5wYXRo
KCkudXRmOCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3BpLkV2ZW50Lk9iamVjdCIsICJTdGF0ZUNo
YW5nZWQiLAotICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCAiZGVmdW5j
dCIsIFRSVUUsIDAsIGdfdmFyaWFudF9uZXdfc3RyaW5nKCIwIiksIG51bGxwdHIpLCBudWxscHRy
KTsKKyAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCks
IG51bGxwdHIsIHJvb3RPYmplY3QucGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNw
aS5FdmVudC5PYmplY3QiLCAiU3RhdGVDaGFuZ2VkIiwKKyAgICAgICAgZ192YXJpYW50X25ldygi
KHNpaXZhe3N2fSkiLCAiZGVmdW5jdCIsIFRSVUUsIDAsIGdfdmFyaWFudF9uZXdfc3RyaW5nKCIw
IiksIG51bGxwdHIpLCBudWxscHRyKTsKIAotICAgICAgICBhdXRvIHJlZ2lzdGVyZWRPYmplY3Rz
ID0gbV9yb290T2JqZWN0cy50YWtlKHJvb3RPYmplY3QucHRyKCkpOwotICAgICAgICBnX2RidXNf
Y29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsICIvb3Jn
L2ExMXkvYXRzcGkvY2FjaGUiLCAib3JnLmExMXkuYXRzcGkuQ2FjaGUiLCAiUmVtb3ZlQWNjZXNz
aWJsZSIsCi0gICAgICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoKHNvKSkiLCB1bmlxdWVOYW1lKCks
IHJvb3RPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpKSwgbnVsbHB0cik7Ci0gICAgICAgIGZv
ciAoYXV0byBpZCA6IHJlZ2lzdGVyZWRPYmplY3RzKQotICAgICAgICAgICAgZ19kYnVzX2Nvbm5l
Y3Rpb25fdW5yZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9uLmdldCgpLCBpZCk7Ci0gICAgfSk7
CisgICAgYXV0byByZWdpc3RlcmVkT2JqZWN0cyA9IG1fcm9vdE9iamVjdHMudGFrZSgmcm9vdE9i
amVjdCk7CisgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdl
dCgpLCBudWxscHRyLCAiL29yZy9hMTF5L2F0c3BpL2NhY2hlIiwgIm9yZy5hMTF5LmF0c3BpLkNh
Y2hlIiwgIlJlbW92ZUFjY2Vzc2libGUiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoKHNvKSki
LCB1bmlxdWVOYW1lKCksIHJvb3RPYmplY3QucGF0aCgpLnV0ZjgoKS5kYXRhKCkpLCBudWxscHRy
KTsKKyAgICBmb3IgKGF1dG8gaWQgOiByZWdpc3RlcmVkT2JqZWN0cykKKyAgICAgICAgZ19kYnVz
X2Nvbm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9uLmdldCgpLCBpZCk7CiB9
CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5QXRzcGk6OnJlZ2lzdGVyT2JqZWN0KEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaSYgYXRzcGlPYmplY3QsIFZlY3RvcjxzdGQ6OnBhaXI8R0RCdXNJbnRlcmZh
Y2VJbmZvKiwgR0RCdXNJbnRlcmZhY2VWVGFibGUqPj4mJiBpbnRlcmZhY2VzKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1faXND
b25uZWN0aW5nKTsKICAgICBpZiAoIW1fY29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuIHsgfTsK
IApAQCAtMzM4LDMxICszMzMsMjggQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlBdHNwaTo6cmVnaXN0
ZXJPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBhdHNwaU9iamVjdCwKIAogdm9pZCBB
Y2Nlc3NpYmlsaXR5QXRzcGk6OnVucmVnaXN0ZXJPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpJiBhdHNwaU9iamVjdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgbV9xdWV1ZS0+ZGlzcGF0Y2goW3RoaXMsIGF0c3BpT2JqZWN0ID0gUmVmIHsgYXRzcGlP
YmplY3QgfV0gewotICAgICAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9pc0Nvbm5lY3RpbmcpOworICAgIGlmICghbV9jb25u
ZWN0aW9uKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKG1fYXRzcGlIeXBlcmxpbmtz
LmNvbnRhaW5zKGF0c3BpT2JqZWN0LnB0cigpKSkgewotICAgICAgICAgICAgYXV0byByZWdpc3Rl
cmVkT2JqZWN0cyA9IG1fYXRzcGlIeXBlcmxpbmtzLnRha2UoYXRzcGlPYmplY3QucHRyKCkpOwot
ICAgICAgICAgICAgZm9yIChhdXRvIGlkIDogcmVnaXN0ZXJlZE9iamVjdHMpCi0gICAgICAgICAg
ICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fdW5yZWdpc3Rlcl9vYmplY3QobV9jb25uZWN0aW9uLmdl
dCgpLCBpZCk7Ci0gICAgICAgIH0KKyAgICBpZiAobV9hdHNwaUh5cGVybGlua3MuY29udGFpbnMo
JmF0c3BpT2JqZWN0KSkgeworICAgICAgICBhdXRvIHJlZ2lzdGVyZWRPYmplY3RzID0gbV9hdHNw
aUh5cGVybGlua3MudGFrZSgmYXRzcGlPYmplY3QpOworICAgICAgICBmb3IgKGF1dG8gaWQgOiBy
ZWdpc3RlcmVkT2JqZWN0cykKKyAgICAgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0
ZXJfb2JqZWN0KG1fY29ubmVjdGlvbi5nZXQoKSwgaWQpOworICAgIH0KIAotICAgICAgICBnX2Ri
dXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsIGF0
c3BpT2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3BpLkV2ZW50Lk9i
amVjdCIsICJTdGF0ZUNoYW5nZWQiLAotICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZh
e3N2fSkiLCAiZGVmdW5jdCIsIFRSVUUsIDAsIGdfdmFyaWFudF9uZXdfc3RyaW5nKCIwIiksIG51
bGxwdHIpLCBudWxscHRyKTsKKyAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nv
bm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsIGF0c3BpT2JqZWN0LnBhdGgoKS51dGY4KCkuZGF0YSgp
LCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIlN0YXRlQ2hhbmdlZCIsCisgICAgICAg
IGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgImRlZnVuY3QiLCBUUlVFLCAwLCBnX3Zhcmlh
bnRfbmV3X3N0cmluZygiMCIpLCBudWxscHRyKSwgbnVsbHB0cik7CiAKLSAgICAgICAgcmVtb3Zl
QWNjZXNzaWJsZShhdHNwaU9iamVjdCk7CisgICAgcmVtb3ZlQWNjZXNzaWJsZShhdHNwaU9iamVj
dCk7CiAKLSAgICAgICAgYXV0byByZWdpc3RlcmVkT2JqZWN0cyA9IG1fYXRzcGlPYmplY3RzLnRh
a2UoYXRzcGlPYmplY3QucHRyKCkpOwotICAgICAgICBmb3IgKGF1dG8gaWQgOiByZWdpc3RlcmVk
T2JqZWN0cykKLSAgICAgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX3VucmVnaXN0ZXJfb2JqZWN0
KG1fY29ubmVjdGlvbi5nZXQoKSwgaWQpOwotICAgIH0pOworICAgIGF1dG8gcmVnaXN0ZXJlZE9i
amVjdHMgPSBtX2F0c3BpT2JqZWN0cy50YWtlKCZhdHNwaU9iamVjdCk7CisgICAgZm9yIChhdXRv
IGlkIDogcmVnaXN0ZXJlZE9iamVjdHMpCisgICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX3VucmVn
aXN0ZXJfb2JqZWN0KG1fY29ubmVjdGlvbi5nZXQoKSwgaWQpOwogfQogCiBTdHJpbmcgQWNjZXNz
aWJpbGl0eUF0c3BpOjpyZWdpc3Rlckh5cGVybGluayhBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkm
IGF0c3BpT2JqZWN0LCBWZWN0b3I8c3RkOjpwYWlyPEdEQnVzSW50ZXJmYWNlSW5mbyosIEdEQnVz
SW50ZXJmYWNlVlRhYmxlKj4+JiYgaW50ZXJmYWNlcykKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jb25uZWN0aW9uKQogICAgICAgICByZXR1cm4g
eyB9OwogCkBAIC0zODAsMzAgKzM3MiwyNiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eUF0c3BpOjpy
ZWdpc3Rlckh5cGVybGluayhBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6cGFyZW50Q2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGkmIGF0c3BpT2JqZWN0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgYXRzcGlPYmplY3QgPSBSZWYgeyBhdHNw
aU9iamVjdCB9XSB7Ci0gICAgICAgIGlmICghbV9jb25uZWN0aW9uKQotICAgICAgICAgICAgcmV0
dXJuOworICAgIGlmICghbV9jb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
Ly8gQWx3YXlzIGVtaXQgcGFyZW50Q2hhbmdlZCB3aGVuIHRoZSB0cmVlIGlzIHJlZ2lzdGVyZWQg
YmVjYXVzZSB0aGUgYXRzcGkgY2FjaGUgYWx3YXlzIGNvbnN1bWVzIGl0LgotICAgICAgICBpZiAo
IWF0c3BpT2JqZWN0LT5pc1RyZWVSZWdpc3RlcmVkKCkpCi0gICAgICAgICAgICByZXR1cm47Cisg
ICAgLy8gQWx3YXlzIGVtaXQgcGFyZW50Q2hhbmdlZCB3aGVuIHRoZSB0cmVlIGlzIHJlZ2lzdGVy
ZWQgYmVjYXVzZSB0aGUgYXRzcGkgY2FjaGUgYWx3YXlzIGNvbnN1bWVzIGl0LgorICAgIGlmICgh
YXRzcGlPYmplY3QuaXNUcmVlUmVnaXN0ZXJlZCgpKQorICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgLy8gRW1pdCBwYXJlbnRDaGFuZ2VkIG9ubHkgaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IHJl
Z2lzdGVyZWQsIG90aGVyd2lzZSByZWdpc3RlciB0aGUgb2JqZWN0LAotICAgICAgICAvLyB3aXRo
b3V0IGVtaXR0aW5nIHRoZSBzaWduYWwsIGJlY2F1c2Ugb3JnLmExMXkuYXRzcGkuQ2FjaGUuQWRk
QWNjZXNzaWJsZSgpIHdpbGwgdXBkYXRlIHRoZSBjYWNoZS4KLSAgICAgICAgaWYgKGF0c3BpT2Jq
ZWN0LT5yZWdpc3Rlck9iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIEVtaXQg
cGFyZW50Q2hhbmdlZCBvbmx5IGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSByZWdpc3RlcmVkLCBv
dGhlcndpc2UgcmVnaXN0ZXIgdGhlIG9iamVjdCwKKyAgICAvLyB3aXRob3V0IGVtaXR0aW5nIHRo
ZSBzaWduYWwsIGJlY2F1c2Ugb3JnLmExMXkuYXRzcGkuQ2FjaGUuQWRkQWNjZXNzaWJsZSgpIHdp
bGwgdXBkYXRlIHRoZSBjYWNoZS4KKyAgICBpZiAoYXRzcGlPYmplY3QucmVnaXN0ZXJPYmplY3Qo
KSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlP
YmplY3QuZ2V0KCkpOworICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmplY3QpOwogCi0g
ICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwg
bnVsbHB0ciwgYXRzcGlPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXkuYXRz
cGkuRXZlbnQuT2JqZWN0IiwgIlByb3BlcnR5Q2hhbmdlIiwKLSAgICAgICAgICAgIGdfdmFyaWFu
dF9uZXcoIihzaWl2YXtzdn0pIiwgImFjY2Vzc2libGUtcGFyZW50IiwgMCwgMCwgYXRzcGlPYmpl
Y3QtPnBhcmVudFJlZmVyZW5jZSgpLCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgfSk7CisgICAg
Z19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRy
LCBhdHNwaU9iamVjdC5wYXRoKCkudXRmOCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3BpLkV2ZW50
Lk9iamVjdCIsICJQcm9wZXJ0eUNoYW5nZSIsCisgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2
YXtzdn0pIiwgImFjY2Vzc2libGUtcGFyZW50IiwgMCwgMCwgYXRzcGlPYmplY3QucGFyZW50UmVm
ZXJlbmNlKCksIG51bGxwdHIpLCBudWxscHRyKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRz
cGk6OnBhcmVudENoYW5nZWQoQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSYgcm9vdE9iamVjdCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jb25uZWN0
aW9uKQogICAgICAgICByZXR1cm47CiAKQEAgLTQxMywyMDkgKzQwMSwxNzEgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5QXRzcGk6OnBhcmVudENoYW5nZWQoQWNjZXNzaWJpbGl0eVJvb3RBdHNwaSYgcm9v
dE9iamVjdCkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OmNoaWxkcmVuQ2hhbmdlZChBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0LCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkmIGNoaWxkLCBDaGlsZHJlbkNoYW5nZWQgY2hhbmdlKQogewotICAgIFJFTEVBU0VfQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLQogI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKICAgICBub3Rp
ZnlDaGlsZHJlbkNoYW5nZWQoYXRzcGlPYmplY3QsIGNoaWxkLCBjaGFuZ2UpOwogI2VuZGlmCiAK
LSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgYXRzcGlPYmplY3QgPSBSZWYgeyBhdHNwaU9i
amVjdCB9LCBjaGlsZCA9IFJlZiB7IGNoaWxkIH0sIGNoYW5nZV0gewotICAgICAgICBpZiAoIW1f
Y29ubmVjdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29ubmVjdGlvbikK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIC8vIEFsd2F5cyBlbWl0IENoaWxkcmVuQ2hhbmdl
ZCB3aGVuIHRoZSB0cmVlIGlzIHJlZ2lzdGVyZWQgYmVjYXVzZSB0aGUgYXRzcGkgY2FjaGUgYWx3
YXlzIGNvbnN1bWVzIGl0LgotICAgICAgICBpZiAoIWF0c3BpT2JqZWN0LT5pc1RyZWVSZWdpc3Rl
cmVkKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgLy8gQWx3YXlzIGVtaXQgQ2hpbGRyZW5D
aGFuZ2VkIHdoZW4gdGhlIHRyZWUgaXMgcmVnaXN0ZXJlZCBiZWNhdXNlIHRoZSBhdHNwaSBjYWNo
ZSBhbHdheXMgY29uc3VtZXMgaXQuCisgICAgaWYgKCFhdHNwaU9iamVjdC5pc1RyZWVSZWdpc3Rl
cmVkKCkpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBhZGRUb0NhY2hlSWZQZW5kaW5nKGF0
c3BpT2JqZWN0LmdldCgpKTsKLSAgICAgICAgYWRkVG9DYWNoZUlmUGVuZGluZyhjaGlsZC5nZXQo
KSk7CisgICAgYWRkVG9DYWNoZUlmUGVuZGluZyhhdHNwaU9iamVjdCk7CisgICAgYWRkVG9DYWNo
ZUlmUGVuZGluZyhjaGlsZCk7CiAKLSAgICAgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWdu
YWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9iamVjdC0+cGF0aCgpLnV0Zjgo
KS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiQ2hpbGRyZW5DaGFuZ2Vk
IiwKLSAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2KHNvKSkiLCBjaGFuZ2UgPT0gQ2hp
bGRyZW5DaGFuZ2VkOjpBZGRlZCA/ICJhZGQiIDogInJlbW92ZSIsIGNoaWxkLT5pbmRleEluUGFy
ZW50Rm9yQ2hpbGRyZW5DaGFuZ2VkKGNoYW5nZSksCi0gICAgICAgICAgICAwLCBnX3ZhcmlhbnRf
bmV3KCIoc28pIiwgdW5pcXVlTmFtZSgpLCBjaGlsZC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkpLCB1
bmlxdWVOYW1lKCksIGF0c3BpT2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSksIG51bGxwdHIp
OwotICAgIH0pOworICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlv
bi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3QucGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcu
YTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiQ2hpbGRyZW5DaGFuZ2VkIiwKKyAgICAgICAgZ192
YXJpYW50X25ldygiKHNpaXYoc28pKSIsIGNoYW5nZSA9PSBDaGlsZHJlbkNoYW5nZWQ6OkFkZGVk
ID8gImFkZCIgOiAicmVtb3ZlIiwgY2hpbGQuaW5kZXhJblBhcmVudEZvckNoaWxkcmVuQ2hhbmdl
ZChjaGFuZ2UpLAorICAgICAgICAwLCBnX3ZhcmlhbnRfbmV3KCIoc28pIiwgdW5pcXVlTmFtZSgp
LCBjaGlsZC5wYXRoKCkudXRmOCgpLmRhdGEoKSksIHVuaXF1ZU5hbWUoKSwgYXRzcGlPYmplY3Qu
cGF0aCgpLnV0ZjgoKS5kYXRhKCkpLCBudWxscHRyKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5
QXRzcGk6OmNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpJiByb290T2JqZWN0
LCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGNoaWxkLCBDaGlsZHJlbkNoYW5nZWQgY2hhbmdl
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCByb290T2JqZWN0ID0gUmVmIHsgcm9vdE9iamVjdCB9LCBjaGlsZCA9
IFJlZiB7IGNoaWxkIH0sIGNoYW5nZV0gewotICAgICAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJu
OwogCi0gICAgICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoY2hpbGQuZ2V0KCkpOworICAgIGFkZFRv
Q2FjaGVJZlBlbmRpbmcoY2hpbGQpOwogCi0gICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRf
c2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgcm9vdE9iamVjdC0+cGF0aCgpLnV0
ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiQ2hpbGRyZW5DaGFu
Z2VkIiwKLSAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2KHNvKSkiLCBjaGFuZ2UgPT0g
Q2hpbGRyZW5DaGFuZ2VkOjpBZGRlZCA/ICJhZGQiIDogInJlbW92ZSIsIDAsCi0gICAgICAgICAg
ICAwLCBnX3ZhcmlhbnRfbmV3KCIoc28pIiwgdW5pcXVlTmFtZSgpLCBjaGlsZC0+cGF0aCgpLnV0
ZjgoKS5kYXRhKCkpLCB1bmlxdWVOYW1lKCksIHJvb3RPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0
YSgpKSwgbnVsbHB0cik7Ci0gICAgfSk7CisgICAgZ19kYnVzX2Nvbm5lY3Rpb25fZW1pdF9zaWdu
YWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCByb290T2JqZWN0LnBhdGgoKS51dGY4KCku
ZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIkNoaWxkcmVuQ2hhbmdlZCIs
CisgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2KHNvKSkiLCBjaGFuZ2UgPT0gQ2hpbGRyZW5D
aGFuZ2VkOjpBZGRlZCA/ICJhZGQiIDogInJlbW92ZSIsIDAsCisgICAgICAgIDAsIGdfdmFyaWFu
dF9uZXcoIihzbykiLCB1bmlxdWVOYW1lKCksIGNoaWxkLnBhdGgoKS51dGY4KCkuZGF0YSgpKSwg
dW5pcXVlTmFtZSgpLCByb290T2JqZWN0LnBhdGgoKS51dGY4KCkuZGF0YSgpKSwgbnVsbHB0cik7
CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eUF0c3BpOjpzdGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpJiBhdHNwaU9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkK
IHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KICNpZiBFTkFCTEUoREVW
RUxPUEVSX01PREUpCiAgICAgbm90aWZ5U3RhdGVDaGFuZ2VkKGF0c3BpT2JqZWN0LCBuYW1lLCB2
YWx1ZSk7CiAjZW5kaWYKIAotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVj
dCA9IFJlZiB7IGF0c3BpT2JqZWN0IH0sIG5hbWUgPSBDU3RyaW5nKG5hbWUpLCB2YWx1ZV0gewot
ICAgICAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IW1fY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghc2hvdWxkRW1p
dFNpZ25hbCgiT2JqZWN0IiwgIlN0YXRlQ2hhbmdlZCIsIG5hbWUuZGF0YSgpKSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIXNob3VsZEVtaXRTaWduYWwoIk9iamVjdCIsICJTdGF0ZUNo
YW5nZWQiLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGFkZFRvQ2FjaGVJZlBl
bmRpbmcoYXRzcGlPYmplY3QpOworICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmplY3Qp
OwogCi0gICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5n
ZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmEx
MXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIlN0YXRlQ2hhbmdlZCIsCi0gICAgICAgICAgICBnX3Zh
cmlhbnRfbmV3KCIoc2lpdmF7c3Z9KSIsIG5hbWUuZGF0YSgpLCB2YWx1ZSwgMCwgZ192YXJpYW50
X25ld19zdHJpbmcoIjAiKSwgbnVsbHB0ciksIG51bGxwdHIpOwotICAgIH0pOworICAgIGdfZGJ1
c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRz
cGlPYmplY3QucGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmpl
Y3QiLCAiU3RhdGVDaGFuZ2VkIiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSki
LCBuYW1lLCB2YWx1ZSwgMCwgZ192YXJpYW50X25ld19zdHJpbmcoIjAiKSwgbnVsbHB0ciksIG51
bGxwdHIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6dGV4dENoYW5nZWQoQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpJiBhdHNwaU9iamVjdCwgY29uc3QgY2hhciogY2hhbmdlVHlwZSwg
Q1N0cmluZyYmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAg
IFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQogI2lmIEVOQUJMRShERVZFTE9QRVJf
TU9ERSkKICAgICBub3RpZnlUZXh0Q2hhbmdlZChhdHNwaU9iamVjdCk7CiAjZW5kaWYKIAotICAg
IG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2JqZWN0
IH0sIGNoYW5nZVR5cGUgPSBDU3RyaW5nKGNoYW5nZVR5cGUpLCB0ZXh0ID0gV1RGTW92ZSh0ZXh0
KSwgb2Zmc2V0LCBsZW5ndGhdIHsKLSAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpZiAoIXNob3VsZEVtaXRTaWduYWwoIk9iamVjdCIsICJUZXh0Q2hhbmdlZCIsIGNo
YW5nZVR5cGUuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXNob3VsZEVt
aXRTaWduYWwoIk9iamVjdCIsICJUZXh0Q2hhbmdlZCIsIGNoYW5nZVR5cGUpKQorICAgICAgICBy
ZXR1cm47CiAKLSAgICAgICAgYWRkVG9DYWNoZUlmUGVuZGluZyhhdHNwaU9iamVjdCk7CisgICAg
YWRkVG9DYWNoZUlmUGVuZGluZyhhdHNwaU9iamVjdCk7CiAKLSAgICAgICAgZ19kYnVzX2Nvbm5l
Y3Rpb25fZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9iamVj
dC0+cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAi
VGV4dENoYW5nZWQiLAotICAgICAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCBj
aGFuZ2VUeXBlLmRhdGEoKSwgb2Zmc2V0LCBsZW5ndGgsIGdfdmFyaWFudF9uZXdfc3RyaW5nKHRl
eHQuZGF0YSgpKSwgbnVsbHB0ciksIG51bGxwdHIpOwotICAgIH0pOworICAgIGdfZGJ1c19jb25u
ZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmpl
Y3QucGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAi
VGV4dENoYW5nZWQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc2lpdmF7c3Z9KSIsIGNoYW5n
ZVR5cGUsIG9mZnNldCwgbGVuZ3RoLCBnX3ZhcmlhbnRfbmV3X3N0cmluZyh0ZXh0LmRhdGEoKSks
IG51bGxwdHIpLCBudWxscHRyKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnRleHRB
dHRyaWJ1dGVzQ2hhbmdlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0KQog
ewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX3F1ZXVlLT5kaXNw
YXRjaChbdGhpcywgYXRzcGlPYmplY3QgPSBSZWYgeyBhdHNwaU9iamVjdCB9XSB7Ci0gICAgICAg
IGlmICghbV9jb25uZWN0aW9uKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghbV9jb25u
ZWN0aW9uKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFzaG91bGRFbWl0U2lnbmFs
KCJPYmplY3QiLCAiVGV4dEF0dHJpYnV0ZXNDaGFuZ2VkIikpCi0gICAgICAgICAgICByZXR1cm47
CisgICAgaWYgKCFzaG91bGRFbWl0U2lnbmFsKCJPYmplY3QiLCAiVGV4dEF0dHJpYnV0ZXNDaGFu
Z2VkIikpCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBhZGRUb0NhY2hlSWZQZW5kaW5nKGF0
c3BpT2JqZWN0KTsKKyAgICBhZGRUb0NhY2hlSWZQZW5kaW5nKGF0c3BpT2JqZWN0KTsKIAotICAg
ICAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51
bGxwdHIsIGF0c3BpT2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3Bp
LkV2ZW50Lk9iamVjdCIsICJUZXh0QXR0cmlidXRlc0NoYW5nZWQiLAotICAgICAgICAgICAgZ192
YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCAiIiwgMCwgMCwgZ192YXJpYW50X25ld19zdHJpbmco
IiIpLCBudWxscHRyKSwgbnVsbHB0cik7Ci0gICAgfSk7CisgICAgZ19kYnVzX2Nvbm5lY3Rpb25f
ZW1pdF9zaWduYWwobV9jb25uZWN0aW9uLmdldCgpLCBudWxscHRyLCBhdHNwaU9iamVjdC5wYXRo
KCkudXRmOCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3BpLkV2ZW50Lk9iamVjdCIsICJUZXh0QXR0
cmlidXRlc0NoYW5nZWQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc2lpdmF7c3Z9KSIsICIi
LCAwLCAwLCBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIiksIG51bGxwdHIpLCBudWxscHRyKTsKIH0K
IAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnRleHRDYXJldE1vdmVkKEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaSYgYXRzcGlPYmplY3QsIHVuc2lnbmVkIGNhcmV0T2Zmc2V0KQogewotICAgIFJF
TEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQogI2lmIEVOQUJMRShERVZFTE9QRVJfTU9E
RSkKICAgICBub3RpZnlUZXh0Q2FyZXRNb3ZlZChhdHNwaU9iamVjdCwgY2FyZXRPZmZzZXQpOwog
I2VuZGlmCiAKLSAgICBtX3F1ZXVlLT5kaXNwYXRjaChbdGhpcywgYXRzcGlPYmplY3QgPSBSZWYg
eyBhdHNwaU9iamVjdCB9LCBjYXJldE9mZnNldF0gewotICAgICAgICBpZiAoIW1fY29ubmVjdGlv
bikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29ubmVjdGlvbikKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGlmICghc2hvdWxkRW1pdFNpZ25hbCgiT2JqZWN0IiwgIlRleHRD
YXJldE1vdmVkIikpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCFzaG91bGRFbWl0U2ln
bmFsKCJPYmplY3QiLCAiVGV4dENhcmV0TW92ZWQiKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAg
ICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmplY3QpOworICAgIGFkZFRvQ2FjaGVJZlBl
bmRpbmcoYXRzcGlPYmplY3QpOwogCi0gICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2ln
bmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3QtPnBhdGgoKS51dGY4
KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIlRleHRDYXJldE1vdmVk
IiwKLSAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgIiIsIGNhcmV0T2Zm
c2V0LCAwLCBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIiksIG51bGxwdHIpLCBudWxscHRyKTsKLSAg
ICB9KTsKKyAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0
KCksIG51bGxwdHIsIGF0c3BpT2JqZWN0LnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXku
YXRzcGkuRXZlbnQuT2JqZWN0IiwgIlRleHRDYXJldE1vdmVkIiwKKyAgICAgICAgZ192YXJpYW50
X25ldygiKHNpaXZhe3N2fSkiLCAiIiwgY2FyZXRPZmZzZXQsIDAsIGdfdmFyaWFudF9uZXdfc3Ry
aW5nKCIiKSwgbnVsbHB0ciksIG51bGxwdHIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlBdHNw
aTo6dGV4dFNlbGVjdGlvbkNoYW5nZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBhdHNwaU9i
amVjdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9xdWV1
ZS0+ZGlzcGF0Y2goW3RoaXMsIGF0c3BpT2JqZWN0ID0gUmVmIHsgYXRzcGlPYmplY3QgfV0gewot
ICAgICAgICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IW1fY29ubmVjdGlvbikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghc2hvdWxkRW1p
dFNpZ25hbCgiT2JqZWN0IiwgIlRleHRTZWxlY3Rpb25DaGFuZ2VkIikpCi0gICAgICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFzaG91bGRFbWl0U2lnbmFsKCJPYmplY3QiLCAiVGV4dFNlbGVjdGlv
bkNoYW5nZWQiKSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGFkZFRvQ2FjaGVJZlBlbmRp
bmcoYXRzcGlPYmplY3QpOworICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmplY3QpOwog
Ci0gICAgICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQo
KSwgbnVsbHB0ciwgYXRzcGlPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXku
YXRzcGkuRXZlbnQuT2JqZWN0IiwgIlRleHRTZWxlY3Rpb25DaGFuZ2VkIiwKLSAgICAgICAgICAg
IGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgIiIsIDAsIDAsIGdfdmFyaWFudF9uZXdfc3Ry
aW5nKCIiKSwgbnVsbHB0ciksIG51bGxwdHIpOwotICAgIH0pOworICAgIGdfZGJ1c19jb25uZWN0
aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3Qu
cGF0aCgpLnV0ZjgoKS5kYXRhKCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiVGV4
dFNlbGVjdGlvbkNoYW5nZWQiLAorICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc2lpdmF7c3Z9KSIs
ICIiLCAwLCAwLCBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIiksIG51bGxwdHIpLCBudWxscHRyKTsK
IH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnZhbHVlQ2hhbmdlZChBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0LCBkb3VibGUgdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCiAjaWYgRU5BQkxFKERFVkVMT1BFUl9NT0RFKQogICAg
IG5vdGlmeVZhbHVlQ2hhbmdlZChhdHNwaU9iamVjdCk7CiAjZW5kaWYKIAotICAgIG1fcXVldWUt
PmRpc3BhdGNoKFt0aGlzLCBhdHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2JqZWN0IH0sIHZhbHVl
XSB7Ci0gICAgICAgIGlmICghbV9jb25uZWN0aW9uKQotICAgICAgICAgICAgcmV0dXJuOworICAg
IGlmICghbV9jb25uZWN0aW9uKQorICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCFzaG91
bGRFbWl0U2lnbmFsKCJPYmplY3QiLCAiUHJvcGVydHlDaGFuZ2UiLCAiYWNjZXNzaWJsZS12YWx1
ZSIpKQotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghc2hvdWxkRW1pdFNpZ25hbCgiT2Jq
ZWN0IiwgIlByb3BlcnR5Q2hhbmdlIiwgImFjY2Vzc2libGUtdmFsdWUiKSkKKyAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmplY3QpOworICAgIGFk
ZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmplY3QpOwogCi0gICAgICAgIGdfZGJ1c19jb25uZWN0
aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3Qt
PnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIlBy
b3BlcnR5Q2hhbmdlIiwKLSAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwg
ImFjY2Vzc2libGUtdmFsdWUiLCAwLCAwLCBnX3ZhcmlhbnRfbmV3X2RvdWJsZSh2YWx1ZSksIG51
bGxwdHIpLCBudWxscHRyKTsKLSAgICB9KTsKKyAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3Np
Z25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsIGF0c3BpT2JqZWN0LnBhdGgoKS51dGY4
KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQuT2JqZWN0IiwgIlByb3BlcnR5Q2hhbmdl
IiwKKyAgICAgICAgZ192YXJpYW50X25ldygiKHNpaXZhe3N2fSkiLCAiYWNjZXNzaWJsZS12YWx1
ZSIsIDAsIDAsIGdfdmFyaWFudF9uZXdfZG91YmxlKHZhbHVlKSwgbnVsbHB0ciksIG51bGxwdHIp
OwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6c2VsZWN0aW9uQ2hhbmdlZChBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKLQogI2lmIEVOQUJMRShERVZFTE9QRVJfTU9ERSkKICAgICBub3RpZnlT
ZWxlY3Rpb25DaGFuZ2VkKGF0c3BpT2JqZWN0KTsKICNlbmRpZgogCi0gICAgbV9xdWV1ZS0+ZGlz
cGF0Y2goW3RoaXMsIGF0c3BpT2JqZWN0ID0gUmVmIHsgYXRzcGlPYmplY3QgfV0gewotICAgICAg
ICBpZiAoIW1fY29ubmVjdGlvbikKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29u
bmVjdGlvbikKKyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmICghc2hvdWxkRW1pdFNpZ25h
bCgiT2JqZWN0IiwgIlNlbGVjdGlvbkNoYW5nZWQiKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXNob3VsZEVtaXRTaWduYWwoIk9iamVjdCIsICJTZWxlY3Rpb25DaGFuZ2VkIikpCisg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBhZGRUb0NhY2hlSWZQZW5kaW5nKGF0c3BpT2JqZWN0
KTsKKyAgICBhZGRUb0NhY2hlSWZQZW5kaW5nKGF0c3BpT2JqZWN0KTsKIAotICAgICAgICBnX2Ri
dXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nvbm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsIGF0
c3BpT2JqZWN0LT5wYXRoKCkudXRmOCgpLmRhdGEoKSwgIm9yZy5hMTF5LmF0c3BpLkV2ZW50Lk9i
amVjdCIsICJTZWxlY3Rpb25DaGFuZ2VkIiwKLSAgICAgICAgICAgIGdfdmFyaWFudF9uZXcoIihz
aWl2YXtzdn0pIiwgIiIsIDAsIDAsIGdfdmFyaWFudF9uZXdfc3RyaW5nKCIiKSwgbnVsbHB0ciks
IG51bGxwdHIpOwotICAgIH0pOworICAgIGdfZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1f
Y29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwgYXRzcGlPYmplY3QucGF0aCgpLnV0ZjgoKS5kYXRh
KCksICJvcmcuYTExeS5hdHNwaS5FdmVudC5PYmplY3QiLCAiU2VsZWN0aW9uQ2hhbmdlZCIsCisg
ICAgICAgIGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgIiIsIDAsIDAsIGdfdmFyaWFudF9u
ZXdfc3RyaW5nKCIiKSwgbnVsbHB0ciksIG51bGxwdHIpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlBdHNwaTo6bG9hZEV2ZW50KEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYgYXRzcGlPYmplY3Qs
IENTdHJpbmcmJiBldmVudCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0KICNpZiBFTkFCTEUoREVWRUxPUEVSX01PREUpCiAgICAgbm90aWZ5TG9hZEV2ZW50KGF0c3Bp
T2JqZWN0LCBldmVudCk7CiAjZW5kaWYKIAotICAgIG1fcXVldWUtPmRpc3BhdGNoKFt0aGlzLCBh
dHNwaU9iamVjdCA9IFJlZiB7IGF0c3BpT2JqZWN0IH0sIGV2ZW50ID0gV1RGTW92ZShldmVudCld
IHsKLSAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCi0gICAgICAgICAgICByZXR1cm47CisgICAg
aWYgKCFtX2Nvbm5lY3Rpb24pCisgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoIXNob3Vs
ZEVtaXRTaWduYWwoIkRvY3VtZW50IiwgZXZlbnQuZGF0YSgpKSkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXNob3VsZEVtaXRTaWduYWwoIkRvY3VtZW50IiwgZXZlbnQuZGF0YSgpKSkK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmpl
Y3QpOworICAgIGFkZFRvQ2FjaGVJZlBlbmRpbmcoYXRzcGlPYmplY3QpOwogCi0gICAgICAgIGdf
ZGJ1c19jb25uZWN0aW9uX2VtaXRfc2lnbmFsKG1fY29ubmVjdGlvbi5nZXQoKSwgbnVsbHB0ciwg
YXRzcGlPYmplY3QtPnBhdGgoKS51dGY4KCkuZGF0YSgpLCAib3JnLmExMXkuYXRzcGkuRXZlbnQu
RG9jdW1lbnQiLCBldmVudC5kYXRhKCksCi0gICAgICAgICAgICBnX3ZhcmlhbnRfbmV3KCIoc2lp
dmF7c3Z9KSIsICIiLCAwLCAwLCBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIiksIG51bGxwdHIpLCBu
dWxscHRyKTsKLSAgICB9KTsKKyAgICBnX2RidXNfY29ubmVjdGlvbl9lbWl0X3NpZ25hbChtX2Nv
bm5lY3Rpb24uZ2V0KCksIG51bGxwdHIsIGF0c3BpT2JqZWN0LnBhdGgoKS51dGY4KCkuZGF0YSgp
LCAib3JnLmExMXkuYXRzcGkuRXZlbnQuRG9jdW1lbnQiLCBldmVudC5kYXRhKCksCisgICAgICAg
IGdfdmFyaWFudF9uZXcoIihzaWl2YXtzdn0pIiwgIiIsIDAsIDAsIGdfdmFyaWFudF9uZXdfc3Ry
aW5nKCIiKSwgbnVsbHB0ciksIG51bGxwdHIpOwogfQogCiBzdHJ1Y3QgUm9sZU5hbWVFbnRyeSB7
CkBAIC03NjMsNyArNzEzLDYgQEAgY29uc3QgY2hhciogQWNjZXNzaWJpbGl0eUF0c3BpOjpsb2Nh
bGl6ZWRSb2xlTmFtZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogR0RCdXNJbnRlcmZhY2VWVGFi
bGUgQWNjZXNzaWJpbGl0eUF0c3BpOjpzX2NhY2hlRnVuY3Rpb25zID0gewogICAgIC8vIG1ldGhv
ZF9jYWxsCiAgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqIHNlbmRlciwgY29u
c3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBtZXRob2ROYW1lLCBHVmFyaWFu
dCosIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEp
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICAgICAgaWYg
KCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldEl0ZW1zIikpIHsKICAgICAgICAgICAgIGF1dG8m
IGF0c3BpID0gKnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlBdHNwaSo+KHVzZXJEYXRhKTsKICAg
ICAgICAgICAgIGF0c3BpLmFkZENsaWVudChzZW5kZXIpOwpAQCAtODA1LDcgKzc1NCw2IEBAIEdE
QnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlBdHNwaTo6c19jYWNoZUZ1bmN0aW9ucyA9
IHsKIAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OmVuc3VyZUNhY2hlKCkKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIGlmIChtX2NhY2hlSUQgfHwgIW1fY29u
bmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC04MTQsNyArNzYyLDYgQEAgdm9pZCBBY2Nl
c3NpYmlsaXR5QXRzcGk6OmVuc3VyZUNhY2hlKCkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6
OmFkZFRvQ2FjaGVJZk5lZWRlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgYXRzcGlPYmpl
Y3QudXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgaWYgKGF0c3BpT2JqZWN0LmlzRGVmdW5jdCgp
KQogICAgICAgICByZXR1cm47CkBAIC04NDcsNyArNzk0LDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5
QXRzcGk6OmNhY2hlVXBkYXRlVGltZXJGaXJlZCgpCiAKIHZvaWQgQWNjZXNzaWJpbGl0eUF0c3Bp
OjpzY2hlZHVsZUNhY2hlVXBkYXRlKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIGlmICghbV9jYWNoZVVwZGF0ZVRpbWVyKQogICAgICAgICBtX2NhY2hlVXBk
YXRlVGltZXIgPSBtYWtlVW5pcXVlPFJ1bkxvb3A6OlRpbWVyPEFjY2Vzc2liaWxpdHlBdHNwaT4+
KFJ1bkxvb3A6OmN1cnJlbnQoKSwgdGhpcywgJkFjY2Vzc2liaWxpdHlBdHNwaTo6Y2FjaGVVcGRh
dGVUaW1lckZpcmVkKTsKIApAQCAtODU3LDcgKzgwMyw2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eUF0
c3BpOjpzY2hlZHVsZUNhY2hlVXBkYXRlKCkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5QXRzcGk6OmFk
ZEFjY2Vzc2libGUoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBhdHNwaU9iamVjdCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jb25uZWN0aW9u
KQogICAgICAgICByZXR1cm47CiAKQEAgLTg2Nyw3ICs4MTIsNiBAQCB2b2lkIEFjY2Vzc2liaWxp
dHlBdHNwaTo6YWRkQWNjZXNzaWJsZShBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2Jq
ZWN0KQogCiB2b2lkIEFjY2Vzc2liaWxpdHlBdHNwaTo6cmVtb3ZlQWNjZXNzaWJsZShBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkmIGF0c3BpT2JqZWN0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7CiAgICAgaWYgKG1fY2FjaGVVcGRhdGVMaXN0LnJlbW92ZSgmYXRzcGlP
YmplY3QpKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmggYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5oCmluZGV4IGY1ZDNkNzZjZjFl
NC4uMzU0YjE5NjA1ZGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlBdHNwaS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eUF0c3BpLmgKQEAgLTI0LDggKzI0LDggQEAKICNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVk
ZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL1dvcmtRdWV1ZS5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL0dSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAKQEAg
LTQ4LDggKzQ4LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBjb25uZWN0KGNvbnN0IFN0cmluZyYp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUnVuTG9vcCYgcnVuTG9vcCgpIGNvbnN0OwotCiAgICAg
Y29uc3QgY2hhciogdW5pcXVlTmFtZSgpIGNvbnN0OwogICAgIEdWYXJpYW50KiBudWxsUmVmZXJl
bmNlKCkgY29uc3Q7CiAgICAgR1ZhcmlhbnQqIGFwcGxpY2F0aW9uUmVmZXJlbmNlKCkgY29uc3Q7
CkBAIC05Miw4ICs5MCwxNSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBBY2Nl
c3NpYmlsaXR5QXRzcGkoKTsKKyAgICBBY2Nlc3NpYmlsaXR5QXRzcGkoKSA9IGRlZmF1bHQ7CisK
KyAgICBzdHJ1Y3QgUGVuZGluZ1Jvb3RSZWdpc3RyYXRpb24geworICAgICAgICBSZWY8QWNjZXNz
aWJpbGl0eVJvb3RBdHNwaT4gcm9vdDsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxHREJ1c0lu
dGVyZmFjZUluZm8qLCBHREJ1c0ludGVyZmFjZVZUYWJsZSo+PiBpbnRlcmZhY2VzOworICAgICAg
ICBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFN0cmluZyYpPiBjb21wbGV0aW9uSGFuZGxl
cjsKKyAgICB9OwogCisgICAgdm9pZCBkaWRDb25uZWN0KEdSZWZQdHI8R0RCdXNDb25uZWN0aW9u
PiYmKTsKICAgICB2b2lkIGluaXRpYWxpemVSZWdpc3RyeSgpOwogICAgIHZvaWQgYWRkRXZlbnRM
aXN0ZW5lcihjb25zdCBjaGFyKiBkYnVzTmFtZSwgY29uc3QgY2hhciogZXZlbnROYW1lKTsKICAg
ICB2b2lkIHJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgY2hhciogZGJ1c05hbWUsIGNvbnN0IGNo
YXIqIGV2ZW50TmFtZSk7CkBAIC0xMjIsOSArMTI3LDEwIEBAIHByaXZhdGU6CiAKICAgICBzdGF0
aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc19jYWNoZUZ1bmN0aW9uczsKIAotICAgIFJlZjxXb3Jr
UXVldWU+IG1fcXVldWU7CisgICAgYm9vbCBtX2lzQ29ubmVjdGluZyB7IGZhbHNlIH07CiAgICAg
R1JlZlB0cjxHREJ1c0Nvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICBHUmVmUHRyPEdEQnVz
UHJveHk+IG1fcmVnaXN0cnk7CisgICAgVmVjdG9yPFBlbmRpbmdSb290UmVnaXN0cmF0aW9uPiBt
X3BlbmRpbmdSb290UmVnaXN0cmF0aW9uczsKICAgICBIYXNoTWFwPENTdHJpbmcsIFZlY3RvcjxH
VW5pcXVlUHRyPGNoYXIqPj4+IG1fZXZlbnRMaXN0ZW5lcnM7CiAgICAgSGFzaE1hcDxBY2Nlc3Np
YmlsaXR5Um9vdEF0c3BpKiwgVmVjdG9yPHVuc2lnbmVkLCAyPj4gbV9yb290T2JqZWN0czsKICAg
ICBIYXNoTWFwPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSosIFZlY3Rvcjx1bnNpZ25lZCwgMjA+
PiBtX2F0c3BpT2JqZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEFjdGlvbkF0c3BpLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEFjdGlvbkF0c3BpLmNw
cAppbmRleCBiYmMxMzAyNTQ1NjguLjQ0NDM5OGRlYTQ2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QWN0aW9uQXRzcGku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eU9iamVjdEFjdGlvbkF0c3BpLmNwcApAQCAtMzEsNyArMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfYWN0
aW9uRnVuY3Rpb25zID0gewogICAgIC8vIG1ldGhvZF9jYWxsCiAgICAgW10oR0RCdXNDb25uZWN0
aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2No
YXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRp
b24qIGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAq
c3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAg
ICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKIApAQCAtNTcsNyArNTYsNiBA
QCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfYWN0aW9u
RnVuY3Rpb25zID0gewogICAgIH0sCiAgICAgLy8gZ2V0X3Byb3BlcnR5CiAgICAgW10oR0RCdXND
b25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29u
c3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRh
KSAtPiBHVmFyaWFudCogewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwogICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0gUmVmIHsgKnN0YXRpY19jYXN0PEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9OwogICAgICAgICBhdHNwaU9iamVjdC0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7CiAKQEAgLTc1LDMxICs3MywyMiBAQCBHREJ1c0ludGVyZmFjZVZU
YWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfYWN0aW9uRnVuY3Rpb25zID0gewogCiBT
dHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphY3Rpb25OYW1lKCkgY29uc3QKIHsKLSAg
ICBBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0gaXNNYWluVGhyZWFkKCkgPyBtX2NvcmVPYmplY3Qg
OiBtX2F4T2JqZWN0OwotICAgIHJldHVybiBheE9iamVjdCA/IGF4T2JqZWN0LT5hY3Rpb25WZXJi
KCkgOiBTdHJpbmcoKTsKKyAgICByZXR1cm4gbV9jb3JlT2JqZWN0ID8gbV9jb3JlT2JqZWN0LT5h
Y3Rpb25WZXJiKCkgOiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6bG9jYWxpemVkQWN0aW9uTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXhPYmpl
Y3QgPyBtX2F4T2JqZWN0LT5sb2NhbGl6ZWRBY3Rpb25WZXJiKCkgOiBTdHJpbmcoKTsKKyAgICBy
ZXR1cm4gbV9jb3JlT2JqZWN0ID8gbV9jb3JlT2JqZWN0LT5sb2NhbGl6ZWRBY3Rpb25WZXJiKCkg
OiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YWN0aW9u
S2V5QmluZGluZygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYXhPYmplY3QgPyBtX2F4T2JqZWN0
LT5hY2Nlc3NLZXkoKSA6IFN0cmluZygpOworICAgIHJldHVybiBtX2NvcmVPYmplY3QgPyBtX2Nv
cmVPYmplY3QtPmFjY2Vzc0tleSgpIDogU3RyaW5nKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpkb0FjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxib29sPihbdGhpc10oKSAtPiBib29sIHsK
LSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIG1fY29yZU9iamVjdC0+cGVyZm9y
bURlZmF1bHRBY3Rpb24oKTsKLSAgICB9KTsKKyAgICByZXR1cm4gbV9jb3JlT2JqZWN0ID8gbV9j
b3JlT2JqZWN0LT5wZXJmb3JtRGVmYXVsdEFjdGlvbigpIDogZmFsc2U7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAppbmRleCBiZDc3MDIz
NjZjOTIuLmVkYWViMzE5N2FlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcApAQCAt
MjEsNyArMjEsNiBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIgogCiAj
aWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKLSNpbmNsdWRlICJBWElzb2xh
dGVkT2JqZWN0LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUF0c3BpRW51bXMuaCIKICNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaS5oIgpAQCAtMzIsNyArMzEsNiBAQAogI2luY2x1ZGUgIlJlbmRlck9iamVj
dC5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGli
Lmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTUsMjUgKzExMywxMiBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaShBWENvcmVPYmplY3QqIGNvcmVP
YmplY3QsIEFjYwogICAgICwgbV9pbnRlcmZhY2VzKGludGVyZmFjZXNGb3JPYmplY3QoKm1fY29y
ZU9iamVjdCkpCiAgICAgLCBtX3Jvb3Qocm9vdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphdHRhY2go
QVhDb3JlT2JqZWN0KiBheE9iamVjdCkKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpczxBWElzb2xh
dGVkT2JqZWN0PigqYXhPYmplY3QpKTsKLSAgICBtX2F4T2JqZWN0ID0gYXhPYmplY3Q7Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpkZXRhY2goKQotewotICAgIG1fYXhPYmpl
Y3QgPSBudWxscHRyOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2FjaGVE
ZXN0cm95ZWQoKQogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBt
X2NvcmVPYmplY3QgPSBudWxscHRyOwotICAgIGlmICghbV9pc1JlZ2lzdGVyZWQubG9hZCgpKQor
ICAgIGlmICghbV9pc1JlZ2lzdGVyZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX3Bh
cmVudCAmJiAhKm1fcGFyZW50ICYmIG1fcm9vdCkKQEAgLTE0NCw5ICsxMjksOCBAQCB2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2FjaGVEZXN0cm95ZWQoKQogCiB2b2lkIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6ZWxlbWVudERlc3Ryb3llZCgpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIG1fY29yZU9iamVjdCA9IG51bGxwdHI7Ci0gICAgaWYg
KCFtX2lzUmVnaXN0ZXJlZC5sb2FkKCkpCisgICAgaWYgKCFtX2lzUmVnaXN0ZXJlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKG1fcGFyZW50KSB7CkBAIC00MDUsNyArMzg5LDYgQEAgc3Rh
dGljIHVuc2lnbmVkIGF0c3BpUm9sZShBY2Nlc3NpYmlsaXR5Um9sZSByb2xlKQogR0RCdXNJbnRl
cmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX2FjY2Vzc2libGVGdW5jdGlv
bnMgPSB7CiAgICAgLy8gbWV0aG9kX2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25z
dCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9k
TmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKICAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKICAgICAgICAgYXRzcGlP
YmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogCkBAIC00NTksNyArNDQyLDYgQEAgR0RCdXNJ
bnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX2FjY2Vzc2libGVGdW5j
dGlvbnMgPSB7CiAgICAgfSwKICAgICAvLyBnZXRfcHJvcGVydHkKICAgICBbXShHREJ1c0Nvbm5l
Y3Rpb24qLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBn
Y2hhciogcHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvciwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+
IEdWYXJpYW50KiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKIApAQCAtNDcwLDcgKzQ1Miw3IEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxl
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19hY2Nlc3NpYmxlRnVuY3Rpb25zID0gewogICAg
ICAgICBpZiAoIWdfc3RyY21wMChwcm9wZXJ0eU5hbWUsICJMb2NhbGUiKSkKICAgICAgICAgICAg
IHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZyhhdHNwaU9iamVjdC0+bG9jYWxlKCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwgIkFjY2Vzc2li
bGVJZCIpKQotICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfc3RyaW5nKGF0c3BpT2Jq
ZWN0LT5tX2F4T2JqZWN0ID8gU3RyaW5nOjpudW1iZXIoYXRzcGlPYmplY3QtPm1fYXhPYmplY3Qt
Pm9iamVjdElEKCkudG9VSW50NjQoKSkudXRmOCgpLmRhdGEoKSA6ICIiKTsKKyAgICAgICAgICAg
IHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZyhhdHNwaU9iamVjdC0+bV9jb3JlT2JqZWN0ID8g
U3RyaW5nOjpudW1iZXIoYXRzcGlPYmplY3QtPm1fY29yZU9iamVjdC0+b2JqZWN0SUQoKS50b1VJ
bnQ2NCgpKS51dGY4KCkuZGF0YSgpIDogIiIpOwogICAgICAgICBpZiAoIWdfc3RyY21wMChwcm9w
ZXJ0eU5hbWUsICJQYXJlbnQiKSkKICAgICAgICAgICAgIHJldHVybiBhdHNwaU9iamVjdC0+cGFy
ZW50UmVmZXJlbmNlKCk7CiAgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwgIkNo
aWxkQ291bnQiKSkKQEAgLTQ4Nyw5ICs0NjksNiBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfYWNjZXNzaWJsZUZ1bmN0aW9ucyA9IHsKIAogQWNjZXNz
aWJpbGl0eVJvb3RBdHNwaSogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb290KCkKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQobV9j
b3JlT2JqZWN0KTsKLQogICAgIGlmICghbV9yb290KSB7CiAgICAgICAgIGlmIChhdXRvKiBkb2N1
bWVudCA9IG1fY29yZU9iamVjdC0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgIG1fcm9vdCA9IGRv
Y3VtZW50LT5wYWdlKCktPmFjY2Vzc2liaWxpdHlSb290T2JqZWN0KCk7CkBAIC01MDQsMTEgKzQ4
MywxMCBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aXNUcmVlUmVnaXN0ZXJlZCgp
IGNvbnN0CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyZWdpc3Rlck9iamVjdCgp
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fcGF0
aC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9pc1JlZ2lzdGVyZWQu
c3RvcmUodHJ1ZSk7CisgICAgbV9pc1JlZ2lzdGVyZWQgPSB0cnVlOwogICAgIFZlY3RvcjxzdGQ6
OnBhaXI8R0RCdXNJbnRlcmZhY2VJbmZvKiwgR0RCdXNJbnRlcmZhY2VWVGFibGUqPj4gaW50ZXJm
YWNlczsKICAgICBpZiAobV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6QWNjZXNzaWJs
ZSkpCiAgICAgICAgIGludGVyZmFjZXMuYXBwZW5kKHsgY29uc3RfY2FzdDxHREJ1c0ludGVyZmFj
ZUluZm8qPigmd2Via2l0X2FjY2Vzc2libGVfaW50ZXJmYWNlKSwgJnNfYWNjZXNzaWJsZUZ1bmN0
aW9ucyB9KTsKQEAgLTU0MywyNiArNTIxLDIzIEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpyZWdpc3Rlck9iamVjdCgpCiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpk
aWRVbnJlZ2lzdGVyT2JqZWN0KCkKIHsKLSAgICBtX2lzUmVnaXN0ZXJlZC5zdG9yZShmYWxzZSk7
CisgICAgbV9pc1JlZ2lzdGVyZWQgPSBmYWxzZTsKICAgICBtX3BhdGggPSB7IH07CiB9CiAKIGNv
bnN0IFN0cmluZyYgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpwYXRoKCkKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIHJlZ2lzdGVyT2JqZWN0KCk7CiAgICAg
cmV0dXJuIG1fcGF0aDsKIH0KIAogR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
cmVmZXJlbmNlKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAg
IHJldHVybiBnX3ZhcmlhbnRfbmV3KCIoc28pIiwgQWNjZXNzaWJpbGl0eUF0c3BpOjpzaW5nbGV0
b24oKS51bmlxdWVOYW1lKCksIHBhdGgoKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogR1ZhcmlhbnQq
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aHlwZXJsaW5rUmVmZXJlbmNlKCkKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgIGlmIChtX2h5cGVybGlua1BhdGgu
aXNOdWxsKCkpIHsKICAgICAgICAgcmVnaXN0ZXJPYmplY3QoKTsKICAgICAgICAgbV9oeXBlcmxp
bmtQYXRoID0gQWNjZXNzaWJpbGl0eUF0c3BpOjpzaW5nbGV0b24oKS5yZWdpc3Rlckh5cGVybGlu
aygqdGhpcywgeyB7IGNvbnN0X2Nhc3Q8R0RCdXNJbnRlcmZhY2VJbmZvKj4oJndlYmtpdF9oeXBl
cmxpbmtfaW50ZXJmYWNlKSwgJnNfaHlwZXJsaW5rRnVuY3Rpb25zIH0gfSk7CkBAIC01NzMsNyAr
NTQ4LDYgQEAgR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aHlwZXJsaW5rUmVm
ZXJlbmNlKCkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNldFBhcmVudChzdGQ6
Om9wdGlvbmFsPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+IGF0c3BpUGFyZW50KQogewotICAg
IFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAobV9wYXJlbnQgPT0gYXRz
cGlQYXJlbnQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTkyLDExICs1NjYsMTAgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNldFBhcmVudChzdGQ6Om9wdGlvbmFsPEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaSoKIAogc3RkOjpvcHRpb25hbDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkqPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnBhcmVudCgpIGNvbnN0CiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAg
aWYgKCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBh
dXRvKiBheFBhcmVudCA9IG1fYXhPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAg
IGF1dG8qIGF4UGFyZW50ID0gbV9jb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsK
ICAgICBpZiAoIWF4UGFyZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtNjIxLDIw
ICs1OTQsMTUgQEAgR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cGFyZW50UmVm
ZXJlbmNlKCkgY29uc3QKIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjaGls
ZENvdW50KCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwot
ICAgIGlmICghbV9heE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9h
eE9iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCk7CisgICAgcmV0dXJuIG1fY29yZU9iamVjdCA/IG1f
Y29yZU9iamVjdC0+Y2hpbGRyZW4oKS5zaXplKCkgOiAwOwogfQogCiBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
ICghbV9heE9iamVjdCkKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IG1fYXhPYmplY3QtPmNoaWxkcmVu
KCk7CisgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX2NvcmVPYmplY3QtPmNoaWxkcmVuKCk7
CiAgICAgaWYgKGluZGV4ID49IGNoaWxkcmVuLnNpemUoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTY1NCwyNCArNjIyLDIwIEBAIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpPj4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp3cmFwcGVyVmVjdG9yCiAKIFZl
Y3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4gQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpjaGlsZHJlbigpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgaWYgKCFtX2NvcmVPYmplY3QpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gd3JhcHBlclZlY3RvcihtX2F4T2JqZWN0
LT5jaGlsZHJlbigpKTsKKyAgICByZXR1cm4gd3JhcHBlclZlY3RvcihtX2NvcmVPYmplY3QtPmNo
aWxkcmVuKCkpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjppbmRleEluUGFy
ZW50KCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAg
IGlmICghbV9heE9iamVjdCkgeworICAgIGlmICghbV9jb3JlT2JqZWN0KSB7CiAgICAgICAgIG1f
aW5kZXhJblBhcmVudCA9IC0xOwogICAgICAgICByZXR1cm4gbV9pbmRleEluUGFyZW50OwogICAg
IH0KIAotICAgIG1fYXhPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgYXV0byog
YXhQYXJlbnQgPSBtX2F4T2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBhdXRv
KiBheFBhcmVudCA9IG1fY29yZU9iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7CiAgICAg
aWYgKCFheFBhcmVudCkgewogICAgICAgICBtX2luZGV4SW5QYXJlbnQgPSAwOwogICAgICAgICBy
ZXR1cm4gbV9pbmRleEluUGFyZW50OwpAQCAtNjgwLDcgKzY0NCw3IEBAIGludCBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OmluZGV4SW5QYXJlbnQoKSBjb25zdAogICAgIGNvbnN0IGF1dG8mIGNo
aWxkcmVuID0gYXhQYXJlbnQtPmNoaWxkcmVuKCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSAwOwog
ICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewotICAgICAgICBpZiAoY2hp
bGQuZ2V0KCkgPT0gbV9heE9iamVjdCkgeworICAgICAgICBpZiAoY2hpbGQuZ2V0KCkgPT0gbV9j
b3JlT2JqZWN0KSB7CiAgICAgICAgICAgICBtX2luZGV4SW5QYXJlbnQgPSBpbmRleDsKICAgICAg
ICAgICAgIHJldHVybiBtX2luZGV4SW5QYXJlbnQ7CiAgICAgICAgIH0KQEAgLTcwMiwxOCArNjY2
LDE3IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmluZGV4SW5QYXJlbnRGb3JDaGls
ZHJlbkNoYW5nZWQoQWNjZXNzaWJpbGl0eUF0c3BpCiAKIENTdHJpbmcgQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpuYW1lKCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwotICAgIGlmICghbV9heE9iamVjdCkKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKICAg
ICAgICAgcmV0dXJuICIiOwogCi0gICAgaWYgKG1fYXhPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFj
Y2Vzc2liaWxpdHlSb2xlOjpMaXN0Qm94T3B0aW9uIHx8IG1fYXhPYmplY3QtPnJvbGVWYWx1ZSgp
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51TGlzdE9wdGlvbikgewotICAgICAgICBhdXRvIHZh
bHVlID0gbV9heE9iamVjdC0+c3RyaW5nVmFsdWUoKTsKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5y
b2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEJveE9wdGlvbiB8fCBtX2NvcmVP
YmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51TGlzdE9wdGlvbikg
eworICAgICAgICBhdXRvIHZhbHVlID0gbV9jb3JlT2JqZWN0LT5zdHJpbmdWYWx1ZSgpOwogICAg
ICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZS51dGY4
KCk7CiAgICAgfQogCiAgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7Ci0g
ICAgbV9heE9iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQodGV4dE9yZGVyKTsKKyAgICBtX2NvcmVP
YmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7CiAKICAgICBmb3IgKGNvbnN0IGF1
dG8mIHRleHQgOiB0ZXh0T3JkZXIpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMg
aGVyZSBiZWNhdXNlIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0Ojp0aXRsZUVsZW1lbnRUZXh0KCkK
QEAgLTczNCwxMiArNjk3LDExIEBAIENTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpu
YW1lKCkgY29uc3QKIAogQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmRlc2NyaXB0
aW9uKCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAg
IGlmICghbV9heE9iamVjdCkKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJu
ICIiOwogCiAgICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlUZXh0PiB0ZXh0T3JkZXI7Ci0gICAgbV9h
eE9iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQodGV4dE9yZGVyKTsKKyAgICBtX2NvcmVPYmplY3Qt
PmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7CiAKICAgICBib29sIG5hbWVUZXh0QXZhaWxh
YmxlID0gZmFsc2U7CiAgICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0IDogdGV4dE9yZGVyKSB7CkBA
IC03NjIsOCArNzI0LDcgQEAgQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmRlc2Ny
aXB0aW9uKCkgY29uc3QKIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6bG9jYWxl
KCkgY29uc3QKIHsKLSAgICBhdXRvKiBheE9iamVjdCA9IGlzTWFpblRocmVhZCgpID8gbV9jb3Jl
T2JqZWN0IDogbV9heE9iamVjdDsKLSAgICByZXR1cm4gYXhPYmplY3QgPyBheE9iamVjdC0+bGFu
Z3VhZ2UoKSA6IFN0cmluZygpOworICAgIHJldHVybiBtX2NvcmVPYmplY3QgPyBtX2NvcmVPYmpl
Y3QtPmxhbmd1YWdlKCkgOiBTdHJpbmcoKTsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkSW5jbHVk
ZU9yaWVudGF0aW9uU3RhdGUoY29uc3QgQVhDb3JlT2JqZWN0JiBjb3JlT2JqZWN0KQpAQCAtNzg0
LDEzNiArNzQ1LDEyNSBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbmNsdWRlT3JpZW50YXRpb25TdGF0
ZShjb25zdCBBWENvcmVPYmplY3QmIGNvcmVPYmplY3QpCiAKIHVpbnQ2NF90IEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6c3RhdGUoKSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8dWludDY0X3Q+KFt0aGlzXSgpIC0+IHVpbnQ2
NF90IHsKLSAgICAgICAgdWludDY0X3Qgc3RhdGVzID0gMDsKLQotICAgICAgICBhdXRvIGFkZFN0
YXRlID0gWyZdKEF0c3BpOjpTdGF0ZSBhdHNwaVN0YXRlKSB7Ci0gICAgICAgICAgICBzdGF0ZXMg
fD0gKEdfR1VJTlQ2NF9DT05TVEFOVCgxKSA8PCBhdHNwaVN0YXRlKTsKLSAgICAgICAgfTsKKyAg
ICB1aW50NjRfdCBzdGF0ZXMgPSAwOwogCi0gICAgICAgIGlmIChtX2NvcmVPYmplY3QpCi0gICAg
ICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIGF1dG8gYWRk
U3RhdGUgPSBbJl0oQXRzcGk6OlN0YXRlIGF0c3BpU3RhdGUpIHsKKyAgICAgICAgc3RhdGVzIHw9
IChHX0dVSU5UNjRfQ09OU1RBTlQoMSkgPDwgYXRzcGlTdGF0ZSk7CisgICAgfTsKIAotICAgICAg
ICBpZiAoIW1fY29yZU9iamVjdCkgewotICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRl
OjpEZWZ1bmN0KTsKLSAgICAgICAgICAgIHJldHVybiBzdGF0ZXM7Ci0gICAgICAgIH0KKyAgICBp
ZiAoIW1fY29yZU9iamVjdCkgeworICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkRlZnVu
Y3QpOworICAgICAgICByZXR1cm4gc3RhdGVzOworICAgIH0KIAotICAgICAgICBpZiAobV9jb3Jl
T2JqZWN0LT5pc0VuYWJsZWQoKSkgewotICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRl
OjpFbmFibGVkKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2Vuc2l0aXZl
KTsKLSAgICAgICAgfQorICAgIGlmIChtX2NvcmVPYmplY3QtPmlzRW5hYmxlZCgpKSB7CisgICAg
ICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6RW5hYmxlZCk7CisgICAgICAgIGFkZFN0YXRlKEF0
c3BpOjpTdGF0ZTo6U2Vuc2l0aXZlKTsKKyAgICB9CiAKLSAgICAgICAgaWYgKG1fY29yZU9iamVj
dC0+aXNWaXNpYmxlKCkpIHsKLSAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6Vmlz
aWJsZSk7Ci0gICAgICAgICAgICBpZiAoIW1fY29yZU9iamVjdC0+aXNPZmZTY3JlZW4oKSkKLSAg
ICAgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlNob3dpbmcpOwotICAgICAgICB9
CisgICAgaWYgKG1fY29yZU9iamVjdC0+aXNWaXNpYmxlKCkpIHsKKyAgICAgICAgYWRkU3RhdGUo
QXRzcGk6OlN0YXRlOjpWaXNpYmxlKTsKKyAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QtPmlzT2Zm
U2NyZWVuKCkpCisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlNob3dpbmcpOwor
ICAgIH0KIAotICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5pc1NlbGVjdGVkT3B0aW9uQWN0aXZl
KCkgfHwgbV9jb3JlT2JqZWN0LT5jdXJyZW50U3RhdGUoKSAhPSBBY2Nlc3NpYmlsaXR5Q3VycmVu
dFN0YXRlOjpGYWxzZSkKLSAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6QWN0aXZl
KTsKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5pc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgfHwgbV9j
b3JlT2JqZWN0LT5jdXJyZW50U3RhdGUoKSAhPSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpG
YWxzZSkKKyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpBY3RpdmUpOwogCi0gICAgICAg
IGlmIChtX2NvcmVPYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCkpCi0gICAgICAgICAgICBh
ZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkZvY3VzYWJsZSk7CisgICAgaWYgKG1fY29yZU9iamVjdC0+
Y2FuU2V0Rm9jdXNBdHRyaWJ1dGUoKSkKKyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpG
b2N1c2FibGUpOwogCi0gICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzRm9jdXNlZCgpICYmICFt
X2NvcmVPYmplY3QtPmFjdGl2ZURlc2NlbmRhbnQoKSkKLSAgICAgICAgICAgIGFkZFN0YXRlKEF0
c3BpOjpTdGF0ZTo6Rm9jdXNlZCk7Ci0gICAgICAgIGVsc2UgaWYgKG1fY29yZU9iamVjdC0+aXNB
Y3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKCkpIHsKLSAgICAgICAgICAgIGFkZFN0
YXRlKEF0c3BpOjpTdGF0ZTo6Rm9jdXNhYmxlKTsKLSAgICAgICAgICAgIGFkZFN0YXRlKEF0c3Bp
OjpTdGF0ZTo6Rm9jdXNlZCk7Ci0gICAgICAgIH0KKyAgICBpZiAobV9jb3JlT2JqZWN0LT5pc0Zv
Y3VzZWQoKSAmJiAhbV9jb3JlT2JqZWN0LT5hY3RpdmVEZXNjZW5kYW50KCkpCisgICAgICAgIGFk
ZFN0YXRlKEF0c3BpOjpTdGF0ZTo6Rm9jdXNlZCk7CisgICAgZWxzZSBpZiAobV9jb3JlT2JqZWN0
LT5pc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIoKSkgeworICAgICAgICBhZGRT
dGF0ZShBdHNwaTo6U3RhdGU6OkZvY3VzYWJsZSk7CisgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpT
dGF0ZTo6Rm9jdXNlZCk7CisgICAgfQogCi0gICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmNhblNl
dFZhbHVlQXR0cmlidXRlKCkpIHsKLSAgICAgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPnN1cHBv
cnRzQ2hlY2tlZCgpKQotICAgICAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6Q2hl
Y2thYmxlKTsKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKSB7
CisgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPnN1cHBvcnRzQ2hlY2tlZCgpKQorICAgICAgICAg
ICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpDaGVja2FibGUpOwogCi0gICAgICAgICAgICBpZiAo
bV9jb3JlT2JqZWN0LT5pc1RleHRDb250cm9sKCkgfHwgbV9jb3JlT2JqZWN0LT5pc05vbk5hdGl2
ZVRleHRDb250cm9sKCkpCi0gICAgICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpF
ZGl0YWJsZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9jb3JlT2JqZWN0LT5zdXBwb3J0c1JlYWRP
bmx5KCkpCi0gICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlJlYWRPbmx5KTsKKyAg
ICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpIHx8IG1fY29yZU9iamVjdC0+
aXNOb25OYXRpdmVUZXh0Q29udHJvbCgpKQorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0
YXRlOjpFZGl0YWJsZSk7CisgICAgfSBlbHNlIGlmIChtX2NvcmVPYmplY3QtPnN1cHBvcnRzUmVh
ZE9ubHkoKSkKKyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpSZWFkT25seSk7CiAKLSAg
ICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNDaGVja2VkKCkpCi0gICAgICAgICAgICBhZGRTdGF0
ZShBdHNwaTo6U3RhdGU6OkNoZWNrZWQpOworICAgIGlmIChtX2NvcmVPYmplY3QtPmlzQ2hlY2tl
ZCgpKQorICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkNoZWNrZWQpOwogCi0gICAgICAg
IGlmIChtX2NvcmVPYmplY3QtPmlzUHJlc3NlZCgpKQotICAgICAgICAgICAgYWRkU3RhdGUoQXRz
cGk6OlN0YXRlOjpQcmVzc2VkKTsKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5pc1ByZXNzZWQoKSkK
KyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpQcmVzc2VkKTsKIAotICAgICAgICBpZiAo
bV9jb3JlT2JqZWN0LT5pc1JlcXVpcmVkKCkpCi0gICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6
U3RhdGU6OlJlcXVpcmVkKTsKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5pc1JlcXVpcmVkKCkpCisg
ICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6UmVxdWlyZWQpOwogCi0gICAgICAgIGlmICht
X2NvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYSB8
fCBtX2NvcmVPYmplY3QtPmFyaWFJc011bHRpbGluZSgpKQotICAgICAgICAgICAgYWRkU3RhdGUo
QXRzcGk6OlN0YXRlOjpNdWx0aUxpbmUpOwotICAgICAgICBlbHNlIGlmIChtX2NvcmVPYmplY3Qt
PnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0RmllbGQgfHwgbV9jb3JlT2Jq
ZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U2VhcmNoRmllbGQpCi0gICAg
ICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlNpbmdsZUxpbmUpOworICAgIGlmIChtX2Nv
cmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYSB8fCBt
X2NvcmVPYmplY3QtPmFyaWFJc011bHRpbGluZSgpKQorICAgICAgICBhZGRTdGF0ZShBdHNwaTo6
U3RhdGU6Ok11bHRpTGluZSk7CisgICAgZWxzZSBpZiAobV9jb3JlT2JqZWN0LT5yb2xlVmFsdWUo
KSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZpZWxkIHx8IG1fY29yZU9iamVjdC0+cm9sZVZh
bHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlNlYXJjaEZpZWxkKQorICAgICAgICBhZGRTdGF0
ZShBdHNwaTo6U3RhdGU6OlNpbmdsZUxpbmUpOwogCi0gICAgICAgIGlmIChtX2NvcmVPYmplY3Qt
PmlzVGV4dENvbnRyb2woKSkKLSAgICAgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2Vs
ZWN0YWJsZVRleHQpOworICAgIGlmIChtX2NvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAg
ICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpTZWxlY3RhYmxlVGV4dCk7CiAKLSAgICAgICAg
aWYgKG1fY29yZU9iamVjdC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSkKLSAgICAgICAgICAg
IGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2VsZWN0YWJsZSk7CisgICAgaWYgKG1fY29yZU9iamVj
dC0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1dGUoKSkKKyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0
YXRlOjpTZWxlY3RhYmxlKTsKIAotICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5pc011bHRpU2Vs
ZWN0YWJsZSgpKQotICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpNdWx0aXNlbGVj
dGFibGUpOworICAgIGlmIChtX2NvcmVPYmplY3QtPmlzTXVsdGlTZWxlY3RhYmxlKCkpCisgICAg
ICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6TXVsdGlzZWxlY3RhYmxlKTsKIAotICAgICAgICBp
ZiAobV9jb3JlT2JqZWN0LT5pc1NlbGVjdGVkKCkpCi0gICAgICAgICAgICBhZGRTdGF0ZShBdHNw
aTo6U3RhdGU6OlNlbGVjdGVkKTsKKyAgICBpZiAobV9jb3JlT2JqZWN0LT5pc1NlbGVjdGVkKCkp
CisgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0ZTo6U2VsZWN0ZWQpOwogCi0gICAgICAgIGlm
IChtX2NvcmVPYmplY3QtPmNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkpCi0gICAgICAgICAgICBh
ZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkV4cGFuZGFibGUpOworICAgIGlmIChtX2NvcmVPYmplY3Qt
PmNhblNldEV4cGFuZGVkQXR0cmlidXRlKCkpCisgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpTdGF0
ZTo6RXhwYW5kYWJsZSk7CiAKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNFeHBhbmRlZCgp
KQotICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpFeHBhbmRlZCk7CisgICAgaWYg
KG1fY29yZU9iamVjdC0+aXNFeHBhbmRlZCgpKQorICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3Rh
dGU6OkV4cGFuZGVkKTsKIAotICAgICAgICBpZiAobV9jb3JlT2JqZWN0LT5oYXNQb3B1cCgpKQot
ICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpIYXNQb3B1cCk7CisgICAgaWYgKG1f
Y29yZU9iamVjdC0+aGFzUG9wdXAoKSkKKyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpI
YXNQb3B1cCk7CiAKLSAgICAgICAgaWYgKHNob3VsZEluY2x1ZGVPcmllbnRhdGlvblN0YXRlKCpt
X2NvcmVPYmplY3QpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fY29yZU9iamVjdC0+b3JpZW50
YXRpb24oKSkgewotICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5T3JpZW50YXRpb246Okhv
cml6b250YWw6Ci0gICAgICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpIb3Jpem9u
dGFsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJp
bGl0eU9yaWVudGF0aW9uOjpWZXJ0aWNhbDoKLSAgICAgICAgICAgICAgICBhZGRTdGF0ZShBdHNw
aTo6U3RhdGU6OlZlcnRpY2FsKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpVbmRlZmluZWQ6Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgaWYgKHNob3VsZEluY2x1ZGVPcmllbnRhdGlv
blN0YXRlKCptX2NvcmVPYmplY3QpKSB7CisgICAgICAgIHN3aXRjaCAobV9jb3JlT2JqZWN0LT5v
cmllbnRhdGlvbigpKSB7CisgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eU9yaWVudGF0aW9uOjpI
b3Jpem9udGFsOgorICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpIb3Jpem9udGFs
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlPcmllbnRh
dGlvbjo6VmVydGljYWw6CisgICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OlZlcnRp
Y2FsKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlPcmll
bnRhdGlvbjo6VW5kZWZpbmVkOgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICB9
CiAKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNJbmRldGVybWluYXRlKCkpCi0gICAgICAg
ICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkluZGV0ZXJtaW5hdGUpOwotICAgICAgICBlbHNl
IGlmICgobV9jb3JlT2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpIHx8IG1fY29yZU9iamVjdC0+
aXNNZW51SXRlbSgpIHx8IG1fY29yZU9iamVjdC0+aXNUb2dnbGVCdXR0b24oKSkgJiYgbV9jb3Jl
T2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0
ZTo6TWl4ZWQpCi0gICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkluZGV0ZXJtaW5h
dGUpOworICAgIGlmIChtX2NvcmVPYmplY3QtPmlzSW5kZXRlcm1pbmF0ZSgpKQorICAgICAgICBh
ZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkluZGV0ZXJtaW5hdGUpOworICAgIGVsc2UgaWYgKChtX2Nv
cmVPYmplY3QtPmlzQ2hlY2tib3hPclJhZGlvKCkgfHwgbV9jb3JlT2JqZWN0LT5pc01lbnVJdGVt
KCkgfHwgbV9jb3JlT2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKSAmJiBtX2NvcmVPYmplY3QtPmNo
ZWNrYm94T3JSYWRpb1ZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpNaXhlZCkK
KyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpJbmRldGVybWluYXRlKTsKIAotICAgICAg
ICBpZiAobV9jb3JlT2JqZWN0LT5pc01vZGFsTm9kZSgpKQotICAgICAgICAgICAgYWRkU3RhdGUo
QXRzcGk6OlN0YXRlOjpNb2RhbCk7CisgICAgaWYgKG1fY29yZU9iamVjdC0+aXNNb2RhbE5vZGUo
KSkKKyAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpNb2RhbCk7CiAKLSAgICAgICAgaWYg
KG1fY29yZU9iamVjdC0+aXNCdXN5KCkpCi0gICAgICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3Rh
dGU6OkJ1c3kpOworICAgIGlmIChtX2NvcmVPYmplY3QtPmlzQnVzeSgpKQorICAgICAgICBhZGRT
dGF0ZShBdHNwaTo6U3RhdGU6OkJ1c3kpOwogCi0gICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlu
dmFsaWRTdGF0dXMoKSAhPSAiZmFsc2UiKQotICAgICAgICAgICAgYWRkU3RhdGUoQXRzcGk6OlN0
YXRlOjpJbnZhbGlkRW50cnkpOworICAgIGlmIChtX2NvcmVPYmplY3QtPmludmFsaWRTdGF0dXMo
KSAhPSAiZmFsc2UiKQorICAgICAgICBhZGRTdGF0ZShBdHNwaTo6U3RhdGU6OkludmFsaWRFbnRy
eSk7CiAKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+c3VwcG9ydHNBdXRvQ29tcGxldGUoKSAm
JiBtX2NvcmVPYmplY3QtPmF1dG9Db21wbGV0ZVZhbHVlKCkgIT0gIm5vbmUiKQotICAgICAgICAg
ICAgYWRkU3RhdGUoQXRzcGk6OlN0YXRlOjpTdXBwb3J0c0F1dG9jb21wbGV0aW9uKTsKKyAgICBp
ZiAobV9jb3JlT2JqZWN0LT5zdXBwb3J0c0F1dG9Db21wbGV0ZSgpICYmIG1fY29yZU9iamVjdC0+
YXV0b0NvbXBsZXRlVmFsdWUoKSAhPSAibm9uZSIpCisgICAgICAgIGFkZFN0YXRlKEF0c3BpOjpT
dGF0ZTo6U3VwcG9ydHNBdXRvY29tcGxldGlvbik7CiAKLSAgICAgICAgcmV0dXJuIHN0YXRlczsK
LSAgICB9KTsKKyAgICByZXR1cm4gc3RhdGVzOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaTo6aXNEZWZ1bmN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6
cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGJvb2w+KFt0aGlzXSgpIC0+IGJvb2wgewotICAg
ICAgICByZXR1cm4gIW1fY29yZU9iamVjdDsKLSAgICB9KTsKKyAgICByZXR1cm4gIW1fY29yZU9i
amVjdDsKIH0KIAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aWQoKSBjb25zdAog
ewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9jb3JlT2Jq
ZWN0KQotICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCiAgICAg
aWYgKCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKQEAgLTkyNSwxNiArODc1
LDEyIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmlkKCkgY29uc3QKIAogSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjphdHRyaWJ1dGVz
KCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgSGFz
aE1hcDxTdHJpbmcsIFN0cmluZz4gbWFwOwogI2lmIFBMQVRGT1JNKEdUSykKICAgICBtYXAuYWRk
KCJ0b29sa2l0IiwgIldlYktpdEdUSyIpOwogI2VsaWYgUExBVEZPUk0oV1BFKQogICAgIG1hcC5h
ZGQoInRvb2xraXQiLCAiV1BFV2ViS2l0Iik7CiAjZW5kaWYKLSAgICBpZiAobV9jb3JlT2JqZWN0
KQotICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCiAgICAgaWYg
KCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiBtYXA7CiAKQEAgLTEwOTMsMjIgKzEwMzks
MTMgQEAgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjph
dHRyaWJ1dGVzKCkgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmJ1aWxk
QXR0cmlidXRlcyhHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byBh
dHRyaWJ1dGVzID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEhh
c2hNYXA8U3RyaW5nLCBTdHJpbmc+PihbdGhpc10oKSAtPiBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiB7Ci0gICAgICAgIHJldHVybiB0aGlzLT5hdHRyaWJ1dGVzKCk7Ci0gICAgfSk7Ci0KLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0IDogYXR0cmlidXRlcykKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0
IDogYXR0cmlidXRlcygpKQogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwg
Intzc30iLCBpdC5rZXkudXRmOCgpLmRhdGEoKSwgaXQudmFsdWUudXRmOCgpLmRhdGEoKSk7CiB9
CiAKIEhhc2hNYXA8dWludDMyX3QsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpPj4+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cmVsYXRpb25NYXAoKSBjb25zdAogewot
ICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQogICAgIEhhc2hNYXA8dWludDMy
X3QsIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4+IG1hcDsKLSAgICBp
ZiAobV9jb3JlT2JqZWN0KQotICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOwotCiAgICAgaWYgKCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiBtYXA7CiAKQEAg
LTExOTksMTEgKzExMzYsNyBAQCBIYXNoTWFwPHVpbnQzMl90LCBWZWN0b3I8UmVmUHRyPEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaT4+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QQogCiB2b2lkIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6YnVpbGRSZWxhdGlvblNldChHVmFyaWFudEJ1aWxkZXIqIGJ1
aWxkZXIpIGNvbnN0CiB7Ci0gICAgYXV0byByZWxhdGlvbk1hcCA9IEFjY2Vzc2liaWxpdHk6OnJl
dHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxIYXNoTWFwPHVpbnQzMl90LCBWZWN0b3I8UmVmUHRy
PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4+Pj4oW3RoaXNdKCkgLT4gSGFzaE1hcDx1aW50MzJf
dCwgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+Pj4gewotICAgICAgICBy
ZXR1cm4gdGhpcy0+cmVsYXRpb25NYXAoKTsKLSAgICB9KTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgaXQgOiByZWxhdGlvbk1hcCkgeworICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiByZWxhdGlv
bk1hcCgpKSB7CiAgICAgICAgIEdWYXJpYW50QnVpbGRlciBhcnJheUJ1aWxkZXIgPSBHX1ZBUklB
TlRfQlVJTERFUl9JTklUKEdfVkFSSUFOVF9UWVBFKCJhKHNvKSIpKTsKICAgICAgICAgZm9yIChj
b25zdCBhdXRvJiBhdHNwaU9iamVjdCA6IGl0LnZhbHVlKQogICAgICAgICAgICAgZ192YXJpYW50
X2J1aWxkZXJfYWRkKCZhcnJheUJ1aWxkZXIsICJAKHNvKSIsIGF0c3BpT2JqZWN0LT5yZWZlcmVu
Y2UoKSk7CkBAIC0xMjEzLDcgKzExNDYsNiBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6YnVpbGRSZWxhdGlvblNldChHVmFyaWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0CiAKIHZv
aWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpidWlsZEludGVyZmFjZXMoR1ZhcmlhbnRCdWls
ZGVyKiBidWlsZGVyKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7CiAgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OkFjY2Vzc2libGUp
KQogICAgICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgInMiLCB3ZWJraXRfYWNj
ZXNzaWJsZV9pbnRlcmZhY2UubmFtZSk7CiAgICAgaWYgKG1faW50ZXJmYWNlcy5jb250YWlucyhJ
bnRlcmZhY2U6OkNvbXBvbmVudCkpCkBAIC0xMjQyLDcgKzExNzQsNiBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6YnVpbGRJbnRlcmZhY2VzKEdWYXJpYW50QnVpbGRlciogYnVpbGRl
cikgY29uc3QKIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlcmlhbGl6ZShHVmFy
aWFudEJ1aWxkZXIqIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgIihzbykiLCBB
Y2Nlc3NpYmlsaXR5QXRzcGk6OnNpbmdsZXRvbigpLnVuaXF1ZU5hbWUoKSwgbV9wYXRoLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiQChzbykiLCBB
Y2Nlc3NpYmlsaXR5QXRzcGk6OnNpbmdsZXRvbigpLmFwcGxpY2F0aW9uUmVmZXJlbmNlKCkpOwog
ICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiQChzbykiLCBwYXJlbnRSZWZlcmVu
Y2UoKSk7CkBAIC0xMjY5LDggKzEyMDAsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6c2VyaWFsaXplKEdWYXJpYW50QnVpbGRlciogYnVpbGRlcikgY29uc3QKIAogdm9pZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoaWxkQWRkZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
JiBjaGlsZCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYg
KCFtX2lzUmVnaXN0ZXJlZC5sb2FkKCkpCisgICAgaWYgKCFtX2lzUmVnaXN0ZXJlZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFtX2NvcmVPYmplY3QgfHwgbV9jb3JlT2JqZWN0LT5hY2Nl
c3NpYmlsaXR5SXNJZ25vcmVkKCkpCkBAIC0xMjgxLDggKzEyMTEsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRBZGRlZChBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkmIGNo
aWxkKQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRSZW1vdmVkKEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaSYgY2hpbGQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIGlmICghbV9pc1JlZ2lzdGVyZWQubG9hZCgpKQorICAgIGlmICghbV9p
c1JlZ2lzdGVyZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9jb3JlT2JqZWN0IHx8
IG1fY29yZU9iamVjdC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQpAQCAtMTI5Myw3MCArMTIy
Miw0OSBAQCB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2hpbGRSZW1vdmVkKEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaSYgY2hpbGQpCiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpzdGF0ZUNoYW5nZWQoY29uc3QgY2hhciogbmFtZSwgYm9vbCB2YWx1ZSkKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQWNjZXNzaWJpbGl0eUF0c3BpOjpz
aW5nbGV0b24oKS5zdGF0ZUNoYW5nZWQoKnRoaXMsIG5hbWUsIHZhbHVlKTsKIH0KIAogdm9pZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmxvYWRFdmVudChjb25zdCBjaGFyKiBldmVudCkKIHsK
LSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQWNjZXNzaWJpbGl0eUF0
c3BpOjpzaW5nbGV0b24oKS5sb2FkRXZlbnQoKnRoaXMsIGV2ZW50KTsKIH0KIAogc3RkOjpvcHRp
b25hbDx1bnNpZ25lZD4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjplZmZlY3RpdmVSb2xlKCkg
Y29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIFJFTEVB
U0VfQVNTRVJUKG1fYXhPYmplY3QpOwotCi0gICAgc3dpdGNoIChtX2F4T2JqZWN0LT5yb2xlVmFs
dWUoKSkgewotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RNYXJrZXI6Ci0gICAgICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8dW5zaWdu
ZWQ+KFt0aGlzXSgpIC0+IHVuc2lnbmVkIHsKLSAgICAgICAgICAgIGlmIChtX2NvcmVPYmplY3Qp
Ci0gICAgICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLQot
ICAgICAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEF0
c3BpOjpSb2xlOjpJbnZhbGlkUm9sZTsKLQotICAgICAgICAgICAgYXV0byogcmVuZGVyZXIgPSBt
X2NvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIgJiYg
cmVuZGVyZXItPmlzSW1hZ2UoKSA/IEF0c3BpOjpSb2xlOjpJbWFnZSA6IEF0c3BpOjpSb2xlOjpU
ZXh0OwotICAgICAgICB9KTsKKyAgICBzd2l0Y2ggKG1fY29yZU9iamVjdC0+cm9sZVZhbHVlKCkp
IHsKKyAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0TWFya2VyOiB7CisgICAgICAgIGF1
dG8qIHJlbmRlcmVyID0gbV9jb3JlT2JqZWN0LT5yZW5kZXJlcigpOworICAgICAgICByZXR1cm4g
cmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzSW1hZ2UoKSA/IEF0c3BpOjpSb2xlOjpJbWFnZSA6IEF0
c3BpOjpSb2xlOjpUZXh0OworICAgIH0KICAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpNYXRo
RWxlbWVudDoKLSAgICAgICAgaWYgKG1fYXhPYmplY3QtPmlzTWF0aFJvdygpKQorICAgICAgICBp
ZiAobV9jb3JlT2JqZWN0LT5pc01hdGhSb3coKSkKICAgICAgICAgICAgIHJldHVybiBBdHNwaTo6
Um9sZTo6UGFuZWw7Ci0gICAgICAgIGlmIChtX2F4T2JqZWN0LT5pc01hdGhUYWJsZSgpKQorICAg
ICAgICBpZiAobV9jb3JlT2JqZWN0LT5pc01hdGhUYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJu
IEF0c3BpOjpSb2xlOjpUYWJsZTsKLSAgICAgICAgaWYgKG1fYXhPYmplY3QtPmlzTWF0aFRhYmxl
Um93KCkpCisgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzTWF0aFRhYmxlUm93KCkpCiAgICAg
ICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6OlRhYmxlUm93OwotICAgICAgICBpZiAobV9heE9i
amVjdC0+aXNNYXRoVGFibGVDZWxsKCkpCisgICAgICAgIGlmIChtX2NvcmVPYmplY3QtPmlzTWF0
aFRhYmxlQ2VsbCgpKQogICAgICAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpUYWJsZUNlbGw7
Ci0gICAgICAgIGlmIChtX2F4T2JqZWN0LT5pc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpIHx8
IG1fYXhPYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0KCkpCisgICAgICAgIGlmIChtX2NvcmVPYmpl
Y3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgfHwgbV9jb3JlT2JqZWN0LT5pc01hdGhN
dWx0aXNjcmlwdCgpKQogICAgICAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpTZWN0aW9uOwot
ICAgICAgICBpZiAobV9heE9iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKKyAgICAgICAgaWYgKG1f
Y29yZU9iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkKICAgICAgICAgICAgIHJldHVybiBBdHNwaTo6
Um9sZTo6TWF0aEZyYWN0aW9uOwotICAgICAgICBpZiAobV9heE9iamVjdC0+aXNNYXRoU3F1YXJl
Um9vdCgpIHx8IG1fY29yZU9iamVjdC0+aXNNYXRoUm9vdCgpKQorICAgICAgICBpZiAobV9jb3Jl
T2JqZWN0LT5pc01hdGhTcXVhcmVSb290KCkgfHwgbV9jb3JlT2JqZWN0LT5pc01hdGhSb290KCkp
CiAgICAgICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6Ok1hdGhSb290OwotICAgICAgICBpZiAo
bV9heE9iamVjdC0+aXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoU2NyaXB0T2Jq
ZWN0VHlwZTo6U3Vic2NyaXB0KQotICAgICAgICAgICAgfHwgbV9heE9iamVjdC0+aXNNYXRoTXVs
dGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGU6OlBy
ZVN1YnNjcmlwdCkKLSAgICAgICAgICAgIHx8IG1fYXhPYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0
T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlOjpQb3N0U3Vic2Ny
aXB0KSkKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vz
c2liaWxpdHlNYXRoU2NyaXB0T2JqZWN0VHlwZTo6U3Vic2NyaXB0KQorICAgICAgICAgICAgfHwg
bV9jb3JlT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aE11
bHRpc2NyaXB0T2JqZWN0VHlwZTo6UHJlU3Vic2NyaXB0KQorICAgICAgICAgICAgfHwgbV9jb3Jl
T2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2Ny
aXB0T2JqZWN0VHlwZTo6UG9zdFN1YnNjcmlwdCkpCiAgICAgICAgICAgICByZXR1cm4gQXRzcGk6
OlJvbGU6OlN1YnNjcmlwdDsKLSAgICAgICAgaWYgKG1fYXhPYmplY3QtPmlzTWF0aFNjcmlwdE9i
amVjdChBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGU6OlN1cGVyc2NyaXB0KQotICAg
ICAgICAgICAgfHwgbV9heE9iamVjdC0+aXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJp
bGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGU6OlByZVN1cGVyc2NyaXB0KQotICAgICAgICAg
ICAgfHwgbV9heE9iamVjdC0+aXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1h
dGhNdWx0aXNjcmlwdE9iamVjdFR5cGU6OlBvc3RTdXBlcnNjcmlwdCkpCisgICAgICAgIGlmICht
X2NvcmVPYmplY3QtPmlzTWF0aFNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9i
amVjdFR5cGU6OlN1cGVyc2NyaXB0KQorICAgICAgICAgICAgfHwgbV9jb3JlT2JqZWN0LT5pc01h
dGhNdWx0aXNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlw
ZTo6UHJlU3VwZXJzY3JpcHQpCisgICAgICAgICAgICB8fCBtX2NvcmVPYmplY3QtPmlzTWF0aE11
bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlOjpQ
b3N0U3VwZXJzY3JpcHQpKQogICAgICAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpTdXBlcnNj
cmlwdDsKLSAgICAgICAgaWYgKG1fYXhPYmplY3QtPmlzTWF0aFRva2VuKCkpCisgICAgICAgIGlm
IChtX2NvcmVPYmplY3QtPmlzTWF0aFRva2VuKCkpCiAgICAgICAgICAgICByZXR1cm4gQXRzcGk6
OlJvbGU6OlN0YXRpYzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6TGlzdEl0ZW06IHsKLSAgICAgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlvbmFsUm9sZSA9
IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxib29sPihbdGhpc10o
KSAtPiBib29sIHsKLSAgICAgICAgICAgIGlmIChtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICAg
ICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgICAgICAgICAgaWYg
KCFtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEF0c3BpOjpSb2xlOjpJbnZh
bGlkUm9sZTsKLQotICAgICAgICAgICAgcmV0dXJuIG1fY29yZU9iamVjdC0+aW5oZXJpdHNQcmVz
ZW50YXRpb25hbFJvbGUoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGlmIChpbmhlcml0c1ByZXNl
bnRhdGlvbmFsUm9sZSkKKyAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aW5oZXJpdHNQcmVzZW50
YXRpb25hbFJvbGUoKSkKICAgICAgICAgICAgIHJldHVybiBBdHNwaTo6Um9sZTo6U2VjdGlvbjsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTM2OSwxNCArMTI3NywxMyBAQCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmVmZmVjdGl2ZVJvbGUoKSBj
b25zdAogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvbGUoKSBjb25zdAog
ewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2F4T2Jq
ZWN0KQorICAgIGlmICghbV9jb3JlT2JqZWN0KQogICAgICAgICByZXR1cm4gQXRzcGk6OlJvbGU6
OkludmFsaWRSb2xlOwogCiAgICAgaWYgKGF1dG8gZWZmZWN0aXZlID0gZWZmZWN0aXZlUm9sZSgp
KQogICAgICAgICByZXR1cm4gKmVmZmVjdGl2ZTsKIAotICAgIHJldHVybiBhdHNwaVJvbGUobV9h
eE9iamVjdC0+cm9sZVZhbHVlKCkpOworICAgIHJldHVybiBhdHNwaVJvbGUobV9jb3JlT2JqZWN0
LT5yb2xlVmFsdWUoKSk7CiB9CiAKIFN0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmVm
ZmVjdGl2ZVJvbGVOYW1lKCkgY29uc3QKQEAgLTE0MjAsMTUgKzEzMjcsMTQgQEAgU3RyaW5nIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZWZmZWN0aXZlUm9sZU5hbWUoKSBjb25zdAogCiBTdHJp
bmcgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb2xlTmFtZSgpIGNvbnN0CiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAg
aWYgKCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiAiaW52YWxpZCI7CiAKICAgICBhdXRv
IGVmZmVjdGl2ZSA9IGVmZmVjdGl2ZVJvbGVOYW1lKCk7CiAgICAgaWYgKCFlZmZlY3RpdmUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gZWZmZWN0aXZlOwogCi0gICAgcmV0dXJuIG1fYXhPYmpl
Y3QtPnJvbGVQbGF0Zm9ybVN0cmluZygpOworICAgIHJldHVybiBtX2NvcmVPYmplY3QtPnJvbGVQ
bGF0Zm9ybVN0cmluZygpOwogfQogCiBjb25zdCBjaGFyKiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OmVmZmVjdGl2ZUxvY2FsaXplZFJvbGVOYW1lKCkgY29uc3QKQEAgLTE0NzIsMjYgKzEzNzgs
MTkgQEAgY29uc3QgY2hhciogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjplZmZlY3RpdmVMb2Nh
bGl6ZWRSb2xlTmFtZSgpIGNvbnN0CiAKIGNvbnN0IGNoYXIqIEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6bG9jYWxpemVkUm9sZU5hbWUoKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2F4T2JqZWN0KQorICAgIGlmICghbV9jb3JlT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gXygiaW52YWxpZCIpOwogCiAgICAgaWYgKGNvbnN0IGF1dG8q
IGVmZmVjdGl2ZSA9IGVmZmVjdGl2ZUxvY2FsaXplZFJvbGVOYW1lKCkpCiAgICAgICAgIHJldHVy
biBlZmZlY3RpdmU7CiAKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eUF0c3BpOjpsb2NhbGl6ZWRS
b2xlTmFtZShtX2F4T2JqZWN0LT5yb2xlVmFsdWUoKSk7CisgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlBdHNwaTo6bG9jYWxpemVkUm9sZU5hbWUobV9jb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSk7CiB9
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp1cGRhdGVCYWNraW5nU3RvcmUoKQog
ewotICAgIGlmIChpc01haW5UaHJlYWQoKSkgewotICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQot
ICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX2F4T2JqZWN0KQotICAgICAgICBtX2F4T2JqZWN0
LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAobV9jb3JlT2JqZWN0KQorICAgICAgICBt
X2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5
cGUgZGV0YWNobWVudFR5cGUpCkBAIC0xNTE2LDggKzE0MTUsNiBAQCBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50KCkgY29uc3QKIAogQWNjZXNz
aWJpbGl0eU9iamVjdEluY2x1c2lvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5
UGxhdGZvcm1JbmNsdWRlc09iamVjdCgpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotCiAgICAgYXV0byogcGFyZW50ID0gcGFyZW50T2JqZWN0KCk7CiAgICAg
aWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9u
OjpEZWZhdWx0QmVoYXZpb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaAppbmRleCAwNDgzODZh
ODM5MWYuLjNiNTkyODJkNGUyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oCkBAIC0yMyw5
ICsyMyw4IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUF0c3BpLmgiCiAjaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25TZXQuaD4KLSNpbmNsdWRl
IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0dEQnVz
SW50ZXJmYWNlVlRhYmxlIEdEQnVzSW50ZXJmYWNlVlRhYmxlOwpAQCAtMzYsNyArMzUsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBWENvcmVPYmplY3Q7CiBjbGFzcyBBY2Nlc3NpYmls
aXR5Um9vdEF0c3BpOwogCi1jbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkgZmluYWwgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLCBXVEY6
OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiB7CitjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGkgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4gY3JlYXRl
KEFYQ29yZU9iamVjdCosIEFjY2Vzc2liaWxpdHlSb290QXRzcGkqKTsKICAgICB+QWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpKCkgPSBkZWZhdWx0OwpAQCAtMjQxLDE2ICsyNDAsMTUgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc190YWJsZUZ1bmN0aW9uczsKICAg
ICBzdGF0aWMgR0RCdXNJbnRlcmZhY2VWVGFibGUgc190YWJsZUNlbGxGdW5jdGlvbnM7CiAKLSAg
ICBBWENvcmVPYmplY3QqIG1fYXhPYmplY3QgeyBudWxscHRyIH07CiAgICAgQVhDb3JlT2JqZWN0
KiBtX2NvcmVPYmplY3QgeyBudWxscHRyIH07CiAgICAgT3B0aW9uU2V0PEludGVyZmFjZT4gbV9p
bnRlcmZhY2VzOwogICAgIEFjY2Vzc2liaWxpdHlSb290QXRzcGkqIG1fcm9vdCB7IG51bGxwdHIg
fTsKICAgICBzdGQ6Om9wdGlvbmFsPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+IG1fcGFyZW50
OwotICAgIEF0b21pYzxib29sPiBtX2lzUmVnaXN0ZXJlZCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2lzUmVnaXN0ZXJlZCB7IGZhbHNlIH07CiAgICAgU3RyaW5nIG1fcGF0aDsKICAgICBTdHJpbmcg
bV9oeXBlcmxpbmtQYXRoOwogICAgIGludDY0X3QgbV9sYXN0U2VsZWN0aW9uQ2hhbmdlZFRpbWUg
eyAtMSB9OwotICAgIG11dGFibGUgc3RkOjphdG9taWM8Ym9vbD4gbV9oYXNMaXN0TWFya2VyQXRT
dGFydDsKKyAgICBtdXRhYmxlIGJvb2wgbV9oYXNMaXN0TWFya2VyQXRTdGFydDsKICAgICBtdXRh
YmxlIGludCBtX2luZGV4SW5QYXJlbnQgeyAtMSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29tcG9uZW50
QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmls
aXR5T2JqZWN0Q29tcG9uZW50QXRzcGkuY3BwCmluZGV4IGE0OGYxZTFhZDdjMy4uNjQwNGUxYmRl
MGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vz
c2liaWxpdHlPYmplY3RDb21wb25lbnRBdHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0Q29tcG9uZW50QXRzcGkuY3BwCkBA
IC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmgiCiAK
ICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUU1BJKQotI2luY2x1ZGUgIkFYSXNv
bGF0ZWRPYmplY3QuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5QXRzcGkuaCIKICNpbmNsdWRl
ICJBY2Nlc3NpYmlsaXR5QXRzcGlFbnVtcy5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmpl
Y3RJbnRlcmZhY2UuaCIKQEAgLTM0LDcgKzMzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0RC
dXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX2NvbXBvbmVudEZ1
bmN0aW9ucyA9IHsKICAgICAvLyBtZXRob2RfY2FsbAogICAgIFtdKEdEQnVzQ29ubmVjdGlvbios
IGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBt
ZXRob2ROYW1lLCBHVmFyaWFudCogcGFyYW1ldGVycywgR0RCdXNNZXRob2RJbnZvY2F0aW9uKiBp
bnZvY2F0aW9uLCBncG9pbnRlciB1c2VyRGF0YSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwogICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0gUmVmIHsgKnN0YXRp
Y19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9OwogICAgICAgICBh
dHNwaU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAKQEAgLTk0LDE0NiArOTIsMTIxIEBA
IEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19jb21wb25l
bnRGdW5jdGlvbnMgPSB7CiAKIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpoaXRUZXN0KGNvbnN0IEludFBvaW50JiBwb2ludCwgdWludDMyX3QgY29v
cmRpbmF0ZVR5cGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZl
VmFsdWVGcm9tTWFpblRocmVhZDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPihbdGhpcywgJnBv
aW50LCBjb29yZGluYXRlVHlwZV0oKSAtPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIHsKLSAg
ICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRl
QmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBJbnRQb2ludCBjb252ZXJ0ZWRQb2ludCA9IHBv
aW50OwotICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0LT5kb2N1bWVu
dEZyYW1lVmlldygpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUeXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXM6
Ci0gICAgICAgICAgICAgICAgY29udmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPnNjcmVlblRvQ29u
dGVudHMocG9pbnQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBB
dHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVzOgotICAgICAgICAgICAgICAg
IGNvbnZlcnRlZFBvaW50ID0gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHBvaW50KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVU
eXBlOjpQYXJlbnRDb29yZGluYXRlczoKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQ2hpbGRyZW5J
Zk5lY2Vzc2FyeSgpOwotICAgICAgICBpZiAoYXV0byogY29yZU9iamVjdCA9IG1fY29yZU9iamVj
dC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29udmVydGVkUG9pbnQpKQotICAgICAgICAgICAgcmV0
dXJuIGNvcmVPYmplY3QtPndyYXBwZXIoKTsKLQorICAgIGlmICghbV9jb3JlT2JqZWN0KQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9KTsKLX0KLQotSW50UmVjdCBBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OmVsZW1lbnRSZWN0KHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlKSBjb25zdAot
ewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8
SW50UmVjdD4oW3RoaXMsIGNvb3JkaW5hdGVUeXBlXSgpIC0+IEludFJlY3QgewotICAgICAgICBp
ZiAobV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5n
U3RvcmUoKTsKLQotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICAgICAgYXV0byByZWN0ID0gc25hcHBlZEludFJlY3QobV9jb3JlT2JqZWN0
LT5lbGVtZW50UmVjdCgpKTsKLSAgICAgICAgYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0
LT5kb2N1bWVudEZyYW1lVmlldygpOwotICAgICAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAg
ICAgIHJldHVybiByZWN0OwogCisgICAgSW50UG9pbnQgY29udmVydGVkUG9pbnQgPSBwb2ludDsK
KyAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmll
dygpKSB7CiAgICAgICAgIHN3aXRjaCAoY29vcmRpbmF0ZVR5cGUpIHsKICAgICAgICAgY2FzZSBB
dHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzOgotICAgICAgICAgICAgcmV0
dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1NjcmVlbihyZWN0KTsKKyAgICAgICAgICAgIGNvbnZl
cnRlZFBvaW50ID0gZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvaW50KTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93Q29v
cmRpbmF0ZXM6Ci0gICAgICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93
KHJlY3QpOworICAgICAgICAgICAgY29udmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1Rv
Q29udGVudHMocG9pbnQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXRzcGk6
OkNvb3JkaW5hdGVUeXBlOjpQYXJlbnRDb29yZGluYXRlczoKLSAgICAgICAgICAgIHJldHVybiBy
ZWN0OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvcmVP
YmplY3QtPnVwZGF0ZUNoaWxkcmVuSWZOZWNlc3NhcnkoKTsKKyAgICBpZiAoYXV0byogY29yZU9i
amVjdCA9IG1fY29yZU9iamVjdC0+YWNjZXNzaWJpbGl0eUhpdFRlc3QoY29udmVydGVkUG9pbnQp
KQorICAgICAgICByZXR1cm4gY29yZU9iamVjdC0+d3JhcHBlcigpOworCisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CiAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
KTsKK0ludFJlY3QgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjplbGVtZW50UmVjdCh1aW50MzJf
dCBjb29yZGluYXRlVHlwZSkgY29uc3QKK3sKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gcmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1fY29yZU9i
amVjdC0+ZWxlbWVudFJlY3QoKSk7CisgICAgYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0
LT5kb2N1bWVudEZyYW1lVmlldygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1
cm4gcmVjdDsKKworICAgIHN3aXRjaCAoY29vcmRpbmF0ZVR5cGUpIHsKKyAgICBjYXNlIEF0c3Bp
OjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXM6CisgICAgICAgIHJldHVybiBmcmFt
ZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4ocmVjdCk7CisgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0
ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVzOgorICAgICAgICByZXR1cm4gZnJhbWVWaWV3LT5jb250
ZW50c1RvV2luZG93KHJlY3QpOworICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpQYXJl
bnRDb29yZGluYXRlczoKKyAgICAgICAgcmV0dXJuIHJlY3Q7CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OmZvY3VzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgaWYgKCFtX2Nv
cmVPYmplY3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fYXhPYmplY3QtPnNldEZv
Y3VzZWQodHJ1ZSk7Ci0gICAgbV9heE9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAg
cmV0dXJuIG1fYXhPYmplY3QtPmlzRm9jdXNlZCgpOworICAgIG1fY29yZU9iamVjdC0+c2V0Rm9j
dXNlZCh0cnVlKTsKKyAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAg
IHJldHVybiBtX2NvcmVPYmplY3QtPmlzRm9jdXNlZCgpOwogfQogCiBmbG9hdCBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6Om9wYWNpdHkoKSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8ZmxvYXQ+KFt0aGlzXSgpIC0+IGZsb2F0
IHsKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9iamVjdC0+
dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCi0gICAg
ICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJu
IDE7CiAKLSAgICAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gbV9jb3JlT2JqZWN0LT5yZW5kZXJl
cigpKQotICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLm9wYWNpdHkoKTsKKyAg
ICBpZiAoYXV0byogcmVuZGVyZXIgPSBtX2NvcmVPYmplY3QtPnJlbmRlcmVyKCkpCisgICAgICAg
IHJldHVybiByZW5kZXJlci0+c3R5bGUoKS5vcGFjaXR5KCk7CiAKLSAgICAgICAgcmV0dXJuIDE7
Ci0gICAgfSk7CisgICAgcmV0dXJuIDE7CiB9CiAKIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpzY3JvbGxUb01ha2VWaXNpYmxlKHVpbnQzMl90IHNjcm9sbFR5cGUpIGNvbnN0CiB7Ci0g
ICAgQWNjZXNzaWJpbGl0eTo6cGVyZm9ybUZ1bmN0aW9uT25NYWluVGhyZWFkKFt0aGlzLCBzY3Jv
bGxUeXBlXSB7Ci0gICAgICAgIGlmIChtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICBtX2NvcmVP
YmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgICAgIGlmICghbV9jb3JlT2JqZWN0
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnblg7
Ci0gICAgICAgIFNjcm9sbEFsaWdubWVudCBhbGlnblk7Ci0gICAgICAgIHN3aXRjaCAoc2Nyb2xs
VHlwZSkgewotICAgICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpUb3BMZWZ0OgotICAgICAg
ICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkxlZnRBbHdheXM7Ci0gICAgICAg
ICAgICBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9wQWx3YXlzOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OkJvdHRvbVJpZ2h0Ogot
ICAgICAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnblJpZ2h0QWx3YXlzOwot
ICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkJvdHRvbUFsd2F5czsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpUb3BF
ZGdlOgotICAgICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpCb3R0b21FZGdlOgotICAgICAg
ICAgICAgLy8gQWxpZ24gdG8gYSBwYXJ0aWN1bGFyIGVkZ2UgaXMgbm90IHN1cHBvcnRlZCwgaXQn
cyBhbHdheXMgdGhlIGNsb3Nlc3QgZWRnZS4KLSAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFs
aWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKLSAgICAgICAgICAgIGFsaWduWSA9IFNjcm9s
bEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpMZWZ0RWRnZToKLSAgICAgICAgY2FzZSBBdHNw
aTo6U2Nyb2xsVHlwZTo6UmlnaHRFZGdlOgotICAgICAgICAgICAgLy8gQWxpZ24gdG8gYSBwYXJ0
aWN1bGFyIGVkZ2UgaXMgbm90IHN1cHBvcnRlZCwgaXQncyBhbHdheXMgdGhlIGNsb3Nlc3QgZWRn
ZS4KLSAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5l
ZWRlZDsKLSAgICAgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJ
Zk5lZWRlZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEF0c3BpOjpTY3JvbGxU
eXBlOjpBbnl3aGVyZToKLSAgICAgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxp
Z25DZW50ZXJJZk5lZWRlZDsKLSAgICAgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6
YWxpZ25DZW50ZXJJZk5lZWRlZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg
ICAgICAgbV9jb3JlT2JqZWN0LT5zY3JvbGxUb01ha2VWaXNpYmxlKHsgU2VsZWN0aW9uUmV2ZWFs
TW9kZTo6UmV2ZWFsLCBhbGlnblgsIGFsaWduWSwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9s
bGluZzo6WWVzIH0pOwotICAgIH0pOworICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBTY3JvbGxBbGlnbm1lbnQgYWxpZ25YOworICAgIFNjcm9sbEFsaWdubWVu
dCBhbGlnblk7CisgICAgc3dpdGNoIChzY3JvbGxUeXBlKSB7CisgICAgY2FzZSBBdHNwaTo6U2Ny
b2xsVHlwZTo6VG9wTGVmdDoKKyAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkxlZnRBbHdheXM7CisgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BB
bHdheXM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OkJvdHRv
bVJpZ2h0OgorICAgICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduUmlnaHRBbHdh
eXM7CisgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Cb3R0b21BbHdheXM7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OlRvcEVkZ2U6Cisg
ICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6Qm90dG9tRWRnZToKKyAgICAgICAgLy8gQWxpZ24g
dG8gYSBwYXJ0aWN1bGFyIGVkZ2UgaXMgbm90IHN1cHBvcnRlZCwgaXQncyBhbHdheXMgdGhlIGNs
b3Nlc3QgZWRnZS4KKyAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRl
cklmTmVlZGVkOworICAgICAgICBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdl
SWZOZWVkZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6Okxl
ZnRFZGdlOgorICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OlJpZ2h0RWRnZToKKyAgICAgICAg
Ly8gQWxpZ24gdG8gYSBwYXJ0aWN1bGFyIGVkZ2UgaXMgbm90IHN1cHBvcnRlZCwgaXQncyBhbHdh
eXMgdGhlIGNsb3Nlc3QgZWRnZS4KKyAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50Ojph
bGlnblRvRWRnZUlmTmVlZGVkOworICAgICAgICBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFs
aWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXRzcGk6OlNjcm9s
bFR5cGU6OkFueXdoZXJlOgorICAgICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWdu
Q2VudGVySWZOZWVkZWQ7CisgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25D
ZW50ZXJJZk5lZWRlZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgbV9jb3JlT2JqZWN0
LT5zY3JvbGxUb01ha2VWaXNpYmxlKHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBhbGln
blgsIGFsaWduWSwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogfQog
CiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Nyb2xsVG9Qb2ludChjb25zdCBJbnRQ
b2ludCYgcG9pbnQsIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlKSBjb25zdAogewotICAgIEFjY2Vz
c2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbdGhpcywgcG9pbnQsIGNvb3Jk
aW5hdGVUeXBlXSB7Ci0gICAgICAgIGlmIChtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICBtX2Nv
cmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgICAgIGlmICghbV9jb3JlT2Jq
ZWN0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIEludFBvaW50IGNvbnZlcnRlZFBv
aW50KHBvaW50KTsKLSAgICAgICAgaWYgKGNvb3JkaW5hdGVUeXBlID09IEF0c3BpOjpDb29yZGlu
YXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBmcmFt
ZVZpZXcgPSBtX2NvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCkpCi0gICAgICAgICAgICAg
ICAgY29udmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVWaWV3
LT5zY3JlZW5Ub0NvbnRlbnRzKHBvaW50KSk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9jb3JlT2Jq
ZWN0LT5zY3JvbGxUb0dsb2JhbFBvaW50KGNvbnZlcnRlZFBvaW50KTsKLSAgICB9KTsKKyAgICBp
ZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgY29udmVy
dGVkUG9pbnQocG9pbnQpOworICAgIGlmIChjb29yZGluYXRlVHlwZSA9PSBBdHNwaTo6Q29vcmRp
bmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzKSB7CisgICAgICAgIGlmIChhdXRvKiBmcmFtZVZp
ZXcgPSBtX2NvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCkpCisgICAgICAgICAgICBjb252
ZXJ0ZWRQb2ludCA9IGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVZpZXctPnNjcmVl
blRvQ29udGVudHMocG9pbnQpKTsKKyAgICB9CisgICAgbV9jb3JlT2JqZWN0LT5zY3JvbGxUb0ds
b2JhbFBvaW50KGNvbnZlcnRlZFBvaW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmls
aXR5T2JqZWN0RG9jdW1lbnRBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3REb2N1bWVudEF0c3BpLmNwcAppbmRleCA4YmNkN2E0
MGU4ZmYuLjhlMjRjMjY1MjdhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0RG9jdW1lbnRBdHNwaS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0RG9jdW1l
bnRBdHNwaS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0RCdXNJ
bnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX2RvY3VtZW50RnVuY3Rp
b25zID0gewogICAgIC8vIG1ldGhvZF9jYWxsCiAgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29u
c3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhv
ZE5hbWUsIEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9j
YXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01h
aW5UaHJlYWQoKSk7CiAgICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nh
c3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAgICAgIGF0c3Bp
T2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKIApAQCAtNTUsNyArNTQsNiBAQCBHREJ1c0lu
dGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfZG9jdW1lbnRGdW5jdGlv
bnMgPSB7CiAgICAgfSwKICAgICAvLyBnZXRfcHJvcGVydHkKICAgICBbXShHREJ1c0Nvbm5lY3Rp
b24qLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hh
ciogcHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvciwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdW
YXJpYW50KiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAg
ICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKIApAQCAtNzUsODQgKzczLDY5IEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19kb2N1bWVudEZ1bmN0aW9ucyA9IHsKIAogU3RyaW5n
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZG9jdW1lbnRBdHRyaWJ1dGUoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVl
RnJvbU1haW5UaHJlYWQ8U3RyaW5nPihbdGhpcywgbmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5KCld
KCkgLT4gU3RyaW5nIHsKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1f
Y29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVP
YmplY3QpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIGF1dG8qIGRvY3VtZW50
ID0gbV9jb3JlT2JqZWN0LT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgICAgICBpZiAobmFtZSA9PSAiRG9jVHlwZSJfcykK
LSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC0+ZG9jdHlwZSgpID8gZG9jdW1lbnQtPmRvY3R5
cGUoKS0+bmFtZSgpLmlzb2xhdGVkQ29weSgpIDogU3RyaW5nKCk7Ci0gICAgICAgIGlmIChuYW1l
ID09ICJFbmNvZGluZyJfcykKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC0+Y2hhcnNldCgp
Lmlzb2xhdGVkQ29weSgpOwotICAgICAgICBpZiAobmFtZSA9PSAiVVJJIl9zKQotICAgICAgICAg
ICAgcmV0dXJuIGRvY3VtZW50LT5kb2N1bWVudFVSSSgpLmlzb2xhdGVkQ29weSgpOwotICAgICAg
ICBpZiAobmFtZSA9PSAiTWltZVR5cGUiX3MpCi0gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQt
PmNvbnRlbnRUeXBlKCkuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgICAgIGlmIChuYW1lID09ICJUaXRs
ZSJfcykKLSAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC0+dGl0bGUoKS5pc29sYXRlZENvcHko
KTsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIHsgfTsKIAorICAgIGF1
dG8qIGRvY3VtZW50ID0gbV9jb3JlT2JqZWN0LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1l
bnQpCiAgICAgICAgIHJldHVybiB7IH07Ci0gICAgfSk7CisKKyAgICBpZiAobmFtZSA9PSAiRG9j
VHlwZSJfcykKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5kb2N0eXBlKCkgPyBkb2N1bWVudC0+
ZG9jdHlwZSgpLT5uYW1lKCkgOiBTdHJpbmcoKTsKKyAgICBpZiAobmFtZSA9PSAiRW5jb2Rpbmci
X3MpCisgICAgICAgIHJldHVybiBkb2N1bWVudC0+Y2hhcnNldCgpOworICAgIGlmIChuYW1lID09
ICJVUkkiX3MpCisgICAgICAgIHJldHVybiBkb2N1bWVudC0+ZG9jdW1lbnRVUkkoKTsKKyAgICBp
ZiAobmFtZSA9PSAiTWltZVR5cGUiX3MpCisgICAgICAgIHJldHVybiBkb2N1bWVudC0+Y29udGVu
dFR5cGUoKTsKKyAgICBpZiAobmFtZSA9PSAiVGl0bGUiX3MpCisgICAgICAgIHJldHVybiBkb2N1
bWVudC0+dGl0bGUoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZG9jdW1lbnRBdHRyaWJ1dGVzKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhy
ZWFkPEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+PihbdGhpc10oKSAtPiBIYXNoTWFwPFN0cmluZywg
U3RyaW5nPiB7Ci0gICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKLSAgICAgICAg
aWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2lu
Z1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICByZXR1
cm4gbWFwOworICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1hcDsKKyAgICBpZiAoIW1fY29y
ZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1hcDsKIAotICAgICAgICBhdXRvKiBkb2N1bWVudCA9
IG1fY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAg
ICAgICAgIHJldHVybiBtYXA7CisgICAgYXV0byogZG9jdW1lbnQgPSBtX2NvcmVPYmplY3QtPmRv
Y3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1hcDsKIAotICAg
ICAgICBpZiAoYXV0byogZG9jdHlwZSA9IGRvY3VtZW50LT5kb2N0eXBlKCkpCi0gICAgICAgICAg
ICBtYXAuYWRkKCJEb2NUeXBlIl9zLCBkb2N0eXBlLT5uYW1lKCkpOworICAgIGlmIChhdXRvKiBk
b2N0eXBlID0gZG9jdW1lbnQtPmRvY3R5cGUoKSkKKyAgICAgICAgbWFwLmFkZCgiRG9jVHlwZSJf
cywgZG9jdHlwZS0+bmFtZSgpKTsKIAotICAgICAgICBhdXRvIGNoYXJzZXQgPSBkb2N1bWVudC0+
Y2hhcnNldCgpOwotICAgICAgICBpZiAoIWNoYXJzZXQuaXNFbXB0eSgpKQotICAgICAgICAgICAg
bWFwLmFkZCgiRW5jb2RpbmciX3MsIFdURk1vdmUoY2hhcnNldCkpOworICAgIGF1dG8gY2hhcnNl
dCA9IGRvY3VtZW50LT5jaGFyc2V0KCk7CisgICAgaWYgKCFjaGFyc2V0LmlzRW1wdHkoKSkKKyAg
ICAgICAgbWFwLmFkZCgiRW5jb2RpbmciX3MsIFdURk1vdmUoY2hhcnNldCkpOwogCi0gICAgICAg
IGF1dG8gdXJpID0gZG9jdW1lbnQtPmRvY3VtZW50VVJJKCk7Ci0gICAgICAgIGlmICghdXJpLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIG1hcC5hZGQoIlVSSSJfcywgV1RGTW92ZSh1cmkpKTsKKyAg
ICBhdXRvIHVyaSA9IGRvY3VtZW50LT5kb2N1bWVudFVSSSgpOworICAgIGlmICghdXJpLmlzRW1w
dHkoKSkKKyAgICAgICAgbWFwLmFkZCgiVVJJIl9zLCBXVEZNb3ZlKHVyaSkpOwogCi0gICAgICAg
IGF1dG8gY29udGVudFR5cGUgPSBkb2N1bWVudC0+Y29udGVudFR5cGUoKTsKLSAgICAgICAgaWYg
KCFjb250ZW50VHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBtYXAuYWRkKCJNaW1lVHlwZSJf
cywgV1RGTW92ZShjb250ZW50VHlwZSkpOworICAgIGF1dG8gY29udGVudFR5cGUgPSBkb2N1bWVu
dC0+Y29udGVudFR5cGUoKTsKKyAgICBpZiAoIWNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAg
ICAgbWFwLmFkZCgiTWltZVR5cGUiX3MsIFdURk1vdmUoY29udGVudFR5cGUpKTsKIAotICAgICAg
ICBjb25zdCBhdXRvJiB0aXRsZSA9IGRvY3VtZW50LT50aXRsZSgpOwotICAgICAgICBpZiAoIXRp
dGxlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG1hcC5hZGQoIlRpdGxlIl9zLCB0aXRsZSk7Cisg
ICAgY29uc3QgYXV0byYgdGl0bGUgPSBkb2N1bWVudC0+dGl0bGUoKTsKKyAgICBpZiAoIXRpdGxl
LmlzRW1wdHkoKSkKKyAgICAgICAgbWFwLmFkZCgiVGl0bGUiX3MsIHRpdGxlKTsKIAotICAgICAg
ICByZXR1cm4gbWFwOwotICAgIH0pOworICAgIHJldHVybiBtYXA7CiB9CiAKIFN0cmluZyBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OmRvY3VtZW50TG9jYWxlKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFN0cmluZz4oW3Ro
aXNdKCkgLT4gU3RyaW5nIHsKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAg
IG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2Nv
cmVPYmplY3QpCi0gICAgICAgICAgICByZXR1cm4geyB9OworICAgIGlmICghbV9jb3JlT2JqZWN0
KQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIGF1dG8qIGRvY3VtZW50ID0gbV9jb3Jl
T2JqZWN0LT5kb2N1bWVudCgpOwotICAgICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICBhdXRvKiBkb2N1bWVudCA9IG1fY29yZU9iamVjdC0+ZG9jdW1lbnQo
KTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIHJl
dHVybiBkb2N1bWVudC0+Y29udGVudExhbmd1YWdlKCkuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgfSk7
CisgICAgcmV0dXJuIGRvY3VtZW50LT5jb250ZW50TGFuZ3VhZ2UoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0SHlwZXJsaW5rQXRzcGkuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0SHlwZXJsaW5rQXRzcGku
Y3BwCmluZGV4IDliNmViNjk2ZTQ0My4uZmM5MjAwMzgzY2NjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RIeXBlcmxpbmtB
dHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3Np
YmlsaXR5T2JqZWN0SHlwZXJsaW5rQXRzcGkuY3BwCkBAIC0zMiw3ICszMiw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6c19oeXBlcmxpbmtGdW5jdGlvbnMgPSB7CiAgICAgLy8gbWV0aG9kX2NhbGwKICAgICBbXShH
REJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIq
LCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0
aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICAgICAgYXV0byBhdHNwaU9iamVj
dCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0
YSkgfTsKICAgICAgICAgYXRzcGlPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogCkBAIC00
NSwxMSArNDQsMTAgQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpzX2h5cGVybGlua0Z1bmN0aW9ucyA9IHsKICAgICAgICAgICAgIGdfdmFyaWFudF9nZXQo
cGFyYW1ldGVycywgIihpKSIsICZpbmRleCk7CiAgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2lu
dm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihzKSIsICFp
bmRleCA/IGF0c3BpT2JqZWN0LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpIDogIiIpKTsK
ICAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG1ldGhvZE5hbWUsICJJc1ZhbGlkIikpCi0g
ICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRp
b24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2JqZWN0LT5tX2F4T2JqZWN0ID8gVFJVRSA6
IEZBTFNFKSk7CisgICAgICAgICAgICBnX2RidXNfbWV0aG9kX2ludm9jYXRpb25fcmV0dXJuX3Zh
bHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihiKSIsIGF0c3BpT2JqZWN0LT5tX2NvcmVP
YmplY3QgPyBUUlVFIDogRkFMU0UpKTsKICAgICB9LAogICAgIC8vIGdldF9wcm9wZXJ0eQogICAg
IFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBn
Y2hhciosIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yLCBncG9pbnRl
ciB1c2VyRGF0YSkgLT4gR1ZhcmlhbnQqIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKICAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKICAgICAgICAgYXRzcGlP
YmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogCkBAIC03MSw0MyArNjksMzcgQEAgR0RCdXNJ
bnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX2h5cGVybGlua0Z1bmN0
aW9ucyA9IHsKIAogVVJMIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dXJsKCkgY29uc3QKIHsK
LSAgICBBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0gaXNNYWluVGhyZWFkKCkgPyBtX2NvcmVPYmpl
Y3QgOiBtX2F4T2JqZWN0OwotICAgIHJldHVybiBheE9iamVjdCA/IGF4T2JqZWN0LT51cmwoKSA6
IFVSTCgpOworICAgIHJldHVybiBtX2NvcmVPYmplY3QgPyBtX2NvcmVPYmplY3QtPnVybCgpIDog
VVJMKCk7CiB9CiAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6b2Zmc2V0SW5Q
YXJlbnQoKSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVl
RnJvbU1haW5UaHJlYWQ8dW5zaWduZWQ+KFt0aGlzXSgpIC0+IHVuc2lnbmVkIHsKLSAgICAgICAg
aWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2lu
Z1N0b3JlKCk7CisgICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAgICAgIHJldHVybiAwOwogCi0g
ICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgYXV0
byogcGFyZW50ID0gbV9jb3JlT2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBp
ZiAoIXBhcmVudCB8fCAhcGFyZW50LT53cmFwcGVyKCkpCisgICAgICAgIHJldHVybiAwOwogCi0g
ICAgICAgIGF1dG8qIHBhcmVudCA9IG1fY29yZU9iamVjdC0+cGFyZW50T2JqZWN0VW5pZ25vcmVk
KCk7Ci0gICAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPndyYXBwZXIoKSkKLSAgICAgICAg
ICAgIHJldHVybiAwOworICAgIGludCBpbmRleCA9IC0xOworICAgIGNvbnN0IGF1dG8mIGNoaWxk
cmVuID0gcGFyZW50LT5jaGlsZHJlbigpOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBj
aGlsZHJlbikgeworICAgICAgICBpZiAoY2hpbGQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGludCBpbmRleCA9IC0xOwotICAgICAg
ICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHBhcmVudC0+Y2hpbGRyZW4oKTsKLSAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQt
PmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYXV0byogd3JhcHBlciA9IGNoaWxkLT53cmFwcGVyKCk7CisgICAgICAgIGlmICghd3Jh
cHBlciB8fCAhd3JhcHBlci0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVyZmFjZTo6SHlwZXJs
aW5rKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBhdXRvKiB3cmFwcGVy
ID0gY2hpbGQtPndyYXBwZXIoKTsKLSAgICAgICAgICAgIGlmICghd3JhcHBlciB8fCAhd3JhcHBl
ci0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVyZmFjZTo6SHlwZXJsaW5rKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgaWYgKHdyYXBwZXIg
PT0gdGhpcykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgICAgICAgICAgaW5kZXgr
KzsKLSAgICAgICAgICAgIGlmICh3cmFwcGVyID09IHRoaXMpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KKyAgICBpZiAoaW5kZXggPT0gLTEpCisgICAgICAgIHJldHVybiAwOwog
Ci0gICAgICAgIGlmIChpbmRleCA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAg
ICAgIHJldHVybiBwYXJlbnQtPndyYXBwZXIoKS0+Y2hhcmFjdGVyT2Zmc2V0KG9iamVjdFJlcGxh
Y2VtZW50Q2hhcmFjdGVyLCBpbmRleCkudmFsdWVfb3IoMCk7Ci0gICAgfSk7CisgICAgcmV0dXJu
IHBhcmVudC0+d3JhcHBlcigpLT5jaGFyYWN0ZXJPZmZzZXQob2JqZWN0UmVwbGFjZW1lbnRDaGFy
YWN0ZXIsIGluZGV4KS52YWx1ZV9vcigwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmls
aXR5T2JqZWN0SHlwZXJ0ZXh0QXRzcGkuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0SHlwZXJ0ZXh0QXRzcGkuY3BwCmluZGV4IDEzZDYz
MGNmODQ5OC4uYTU2ZDk3YjQ0NWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RIeXBlcnRleHRBdHNwaS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0SHlw
ZXJ0ZXh0QXRzcGkuY3BwCkBAIC0zMSw3ICszMSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEdE
QnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19oeXBlcnRleHRG
dW5jdGlvbnMgPSB7CiAgICAgLy8gbWV0aG9kX2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24q
LCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciog
bWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiog
aW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKICAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0
aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKICAgICAgICAg
YXRzcGlPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogCkBAIC01OCw1NiArNTcsNDYgQEAg
R0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX2h5cGVydGV4
dEZ1bmN0aW9ucyA9IHsKIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpoeXBl
cmxpbmtDb3VudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZl
VmFsdWVGcm9tTWFpblRocmVhZDx1bnNpZ25lZD4oW3RoaXNdKCkgLT4gdW5zaWduZWQgewotICAg
ICAgICBpZiAobV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKLQotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAgICAg
IHJldHVybiAwOwotCi0gICAgICAgIHVuc2lnbmVkIGxpbmtDb3VudCA9IDA7Ci0gICAgICAgIGNv
bnN0IGF1dG8mIGNoaWxkcmVuID0gbV9jb3JlT2JqZWN0LT5jaGlsZHJlbigpOwotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGlmIChjaGls
ZC0+YWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBhdXRvKiB3cmFwcGVyID0gY2hpbGQtPndyYXBwZXIoKTsKLSAgICAgICAg
ICAgIGlmICh3cmFwcGVyICYmIHdyYXBwZXItPmludGVyZmFjZXMoKS5jb250YWlucyhJbnRlcmZh
Y2U6Okh5cGVybGluaykpCi0gICAgICAgICAgICAgICAgbGlua0NvdW50Kys7Ci0gICAgICAgIH0K
KyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1bnNpZ25l
ZCBsaW5rQ291bnQgPSAwOworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gbV9jb3JlT2JqZWN0
LT5jaGlsZHJlbigpOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewor
ICAgICAgICBpZiAoY2hpbGQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIHJldHVybiBsaW5rQ291bnQ7Ci0gICAgfSk7CisgICAgICAg
IGF1dG8qIHdyYXBwZXIgPSBjaGlsZC0+d3JhcHBlcigpOworICAgICAgICBpZiAod3JhcHBlciAm
JiB3cmFwcGVyLT5pbnRlcmZhY2VzKCkuY29udGFpbnMoSW50ZXJmYWNlOjpIeXBlcmxpbmspKQor
ICAgICAgICAgICAgbGlua0NvdW50Kys7CisgICAgfQorCisgICAgcmV0dXJuIGxpbmtDb3VudDsK
IH0KIAogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
Omh5cGVybGluayh1bnNpZ25lZCBpbmRleCkgY29uc3QKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aSo+KFt0aGlzLCBpbmRleF0oKSAtPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIHsKLSAgICAg
ICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBkYXRlQmFj
a2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKLSAgICAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX2NvcmVPYmplY3QtPmNo
aWxkcmVuKCk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBjaGlsZHJlbi5zaXplKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IG1fY29yZU9i
amVjdC0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoaW5kZXggPj0gY2hpbGRyZW4uc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgICAgICBpbnQgbGlua0luZGV4ID0gLTE7Ci0gICAg
ICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewotICAgICAgICAgICAgaWYg
KGNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkKCkpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgaW50IGxpbmtJbmRleCA9IC0xOworICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQg
OiBjaGlsZHJlbikgeworICAgICAgICBpZiAoY2hpbGQtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBhdXRvKiB3cmFwcGVyID0g
Y2hpbGQtPndyYXBwZXIoKTsKLSAgICAgICAgICAgIGlmICghd3JhcHBlciB8fCAhd3JhcHBlci0+
aW50ZXJmYWNlcygpLmNvbnRhaW5zKEludGVyZmFjZTo6SHlwZXJsaW5rKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYXV0byogd3JhcHBlciA9IGNoaWxkLT53cmFwcGVyKCk7
CisgICAgICAgIGlmICghd3JhcHBlciB8fCAhd3JhcHBlci0+aW50ZXJmYWNlcygpLmNvbnRhaW5z
KEludGVyZmFjZTo6SHlwZXJsaW5rKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KCsrbGlua0luZGV4KSA9PSBpbmRleCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICAgICAgfQorICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KCsrbGlua0luZGV4KSA9PSBpbmRleCkKKyAgICAgICAgICAgIHJl
dHVybiB3cmFwcGVyOworICAgIH0KIAotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9KTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpoeXBlcmxpbmtJbmRleCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2li
aWxpdHlPYmplY3RJbWFnZUF0c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEltYWdlQXRzcGkuY3BwCmluZGV4IGU3M2E4MGM5ODZl
Yi4uY2VlYjRkZDEyYTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RJbWFnZUF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RJbWFnZUF0c3BpLmNw
cApAQCAtMzEsNyArMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBHREJ1c0ludGVyZmFjZVZU
YWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfaW1hZ2VGdW5jdGlvbnMgPSB7CiAgICAg
Ly8gbWV0aG9kX2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciosIGNv
bnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1Zhcmlh
bnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKICAgICAgICAgYXRzcGlPYmplY3QtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOwogCkBAIC01Miw3ICs1MSw2IEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxl
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c19pbWFnZUZ1bmN0aW9ucyA9IHsKICAgICB9LAog
ICAgIC8vIGdldF9wcm9wZXJ0eQogICAgIFtdKEdEQnVzQ29ubmVjdGlvbiosIGNvbnN0IGdjaGFy
KiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiBwcm9wZXJ0eU5hbWUs
IEdFcnJvcioqIGVycm9yLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gR1ZhcmlhbnQqIHsKLSAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICAgICAgYXV0byBhdHNwaU9i
amVjdCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2Vy
RGF0YSkgfTsKICAgICAgICAgYXRzcGlPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogCkBA
IC03MiwxMiArNzAsMTEgQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjpzX2ltYWdlRnVuY3Rpb25zID0gewogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjppbWFnZURlc2NyaXB0aW9uKCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9heE9iamVjdCkKKyAgICBpZiAoIW1fY29yZU9i
amVjdCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4
dD4gdGV4dE9yZGVyOwotICAgIG1fYXhPYmplY3QtPmFjY2Vzc2liaWxpdHlUZXh0KHRleHRPcmRl
cik7CisgICAgbV9jb3JlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4dCh0ZXh0T3JkZXIpOwogCiAg
ICAgYm9vbCB2aXNpYmxlVGV4dEF2YWlsYWJsZSA9IGZhbHNlOwogICAgIGZvciAoY29uc3QgQWNj
ZXNzaWJpbGl0eVRleHQmIHRleHQgOiB0ZXh0T3JkZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFNlbGVjdGlvbkF0
c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0
eU9iamVjdFNlbGVjdGlvbkF0c3BpLmNwcAppbmRleCA2ZDc5NWRkMjg1ZDUuLmRlNzQxYTJiYTdk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3Np
YmlsaXR5T2JqZWN0U2VsZWN0aW9uQXRzcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFNlbGVjdGlvbkF0c3BpLmNwcApAQCAt
MjksNyArMjksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBHREJ1c0ludGVyZmFjZVZUYWJsZSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfc2VsZWN0aW9uRnVuY3Rpb25zID0gewogICAgIC8v
IG1ldGhvZF9jYWxsCiAgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25z
dCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50
KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVy
IHVzZXJEYXRhKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKIApAQCAtNjIsNyArNjEsNiBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfc2VsZWN0aW9uRnVuY3Rpb25zID0gewogICAgIH0s
CiAgICAgLy8gZ2V0X3Byb3BlcnR5CiAgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2No
YXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFt
ZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHVmFyaWFudCogewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBhdXRvIGF0c3Bp
T2JqZWN0ID0gUmVmIHsgKnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KHVz
ZXJEYXRhKSB9OwogICAgICAgICBhdHNwaU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAK
QEAgLTgwLDE1MSArNzgsMTEyIEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6c19zZWxlY3Rpb25GdW5jdGlvbnMgPSB7CiAKIHVuc2lnbmVkIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0aW9uQ291bnQoKSBjb25zdAogewotICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8dW5zaWduZWQ+KFt0aGlz
XSgpIC0+IHVuc2lnbmVkIHsKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAg
IG1fY29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgaWYgKCFtX2NvcmVPYmpl
Y3QpCisgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQotICAg
ICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgICAgIG1fY29yZU9iamVj
dC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKLSAgICAgICAgcmV0dXJuIHNlbGVj
dGVkSXRlbXMuc2l6ZSgpOwotICAgIH0pOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOworICAgIG1fY29yZU9iamVjdC0+
c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICByZXR1cm4gc2VsZWN0ZWRJdGVt
cy5zaXplKCk7CiB9CiAKIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpzZWxlY3RlZENoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIGF1
dG8qIHdyYXBwZXIgPSBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4oW3RoaXMsIGluZGV4XSgpIC0+IEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaSogewotICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQotICAgICAgICAgICAg
bV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgICAgICBpZiAoIW1fY29y
ZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOwot
ICAgICAgICBtX2NvcmVPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRJdGVtcyk7Ci0g
ICAgICAgIGlmIChpbmRleCA+PSBzZWxlY3RlZEl0ZW1zLnNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtc1tpbmRleF0tPndyYXBwZXIoKTsK
LSAgICB9KTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5W
ZWN0b3Igc2VsZWN0ZWRJdGVtczsKKyAgICBtX2NvcmVPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4o
c2VsZWN0ZWRJdGVtcyk7CisgICAgaWYgKGluZGV4ID49IHNlbGVjdGVkSXRlbXMuc2l6ZSgpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVy
biBzZWxlY3RlZEl0ZW1zW2luZGV4XS0+d3JhcHBlcigpOwogfQogCiBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6c2V0Q2hpbGRTZWxlY3RlZCh1bnNpZ25lZCBpbmRleCwgYm9vbCBzZWxl
Y3RlZCkgY29uc3QKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZy
b21NYWluVGhyZWFkPGJvb2w+KFt0aGlzLCBpbmRleCwgc2VsZWN0ZWRdKCkgLT4gYm9vbCB7Ci0g
ICAgICAgIGlmIChtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX2NvcmVPYmplY3QtPmNo
aWxkcmVuKCk7Ci0gICAgICAgIGlmIChpbmRleCA+PSBjaGlsZHJlbi5zaXplKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBtX2NvcmVPYmpl
Y3QtPmNoaWxkcmVuKCk7CisgICAgaWYgKGluZGV4ID49IGNoaWxkcmVuLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICghY2hpbGRyZW5baW5kZXhdLT5jYW5TZXRT
ZWxlY3RlZEF0dHJpYnV0ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICgh
Y2hpbGRyZW5baW5kZXhdLT5jYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgY2hpbGRyZW5baW5kZXhdLT5zZXRTZWxlY3RlZChzZWxlY3Rl
ZCk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZCA/IGNoaWxkcmVuW2luZGV4XS0+aXNTZWxlY3Rl
ZCgpIDogIWNoaWxkcmVuW2luZGV4XS0+aXNTZWxlY3RlZCgpOwotICAgIH0pOworICAgIGNoaWxk
cmVuW2luZGV4XS0+c2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOworICAgIHJldHVybiBzZWxlY3RlZCA/
IGNoaWxkcmVuW2luZGV4XS0+aXNTZWxlY3RlZCgpIDogIWNoaWxkcmVuW2luZGV4XS0+aXNTZWxl
Y3RlZCgpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6ZGVzZWxlY3RTZWxl
Y3RlZENoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8Ym9vbD4oW3RoaXMsIGluZGV4XSgpIC0+
IGJvb2wgewotICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2Jq
ZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOworICAgIG1fY29yZU9iamVjdC0+c2VsZWN0ZWRD
aGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICBpZiAoaW5kZXggPj0gc2VsZWN0ZWRJdGVtcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRJdGVtczsKLSAgICAgICAg
bV9jb3JlT2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkSXRlbXMpOwotICAgICAgICBp
ZiAoaW5kZXggPj0gc2VsZWN0ZWRJdGVtcy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKCFzZWxlY3RlZEl0ZW1zW2luZGV4XS0+Y2FuU2V0U2VsZWN0ZWRBdHRyaWJ1
dGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGlmICghc2VsZWN0ZWRJdGVt
c1tpbmRleF0tPmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgc2VsZWN0ZWRJdGVtc1tpbmRleF0tPnNldFNlbGVjdGVkKGZhbHNl
KTsKLSAgICAgICAgcmV0dXJuICFzZWxlY3RlZEl0ZW1zW2luZGV4XS0+aXNTZWxlY3RlZCgpOwot
ICAgIH0pOworICAgIHNlbGVjdGVkSXRlbXNbaW5kZXhdLT5zZXRTZWxlY3RlZChmYWxzZSk7Cisg
ICAgcmV0dXJuICFzZWxlY3RlZEl0ZW1zW2luZGV4XS0+aXNTZWxlY3RlZCgpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6aXNDaGlsZFNlbGVjdGVkKHVuc2lnbmVkIGluZGV4
KSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1h
aW5UaHJlYWQ8Ym9vbD4oW3RoaXMsIGluZGV4XSgpIC0+IGJvb2wgewotICAgICAgICBpZiAobV9j
b3JlT2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUo
KTsKLQotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gbV9jb3JlT2JqZWN0LT5jaGlsZHJlbigpOwotICAg
ICAgICBpZiAoaW5kZXggPj0gY2hpbGRyZW4uc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gbV9jb3JlT2JqZWN0LT5jaGlsZHJlbigp
OworICAgIGlmIChpbmRleCA+PSBjaGlsZHJlbi5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICByZXR1cm4gY2hpbGRyZW5baW5kZXhdLT5pc1NlbGVjdGVkKCk7Ci0gICAg
fSk7CisgICAgcmV0dXJuIGNoaWxkcmVuW2luZGV4XS0+aXNTZWxlY3RlZCgpOwogfQogCiBib29s
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0QWxsKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGJvb2w+KFt0aGlz
XSgpIC0+IGJvb2wgewotICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgbV9j
b3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgICAgICBpZiAoIW1fY29yZU9i
amVjdCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIW1fY29yZU9i
amVjdC0+aXNNdWx0aVNlbGVjdGFibGUoKSB8fCAhbV9jb3JlT2JqZWN0LT5jYW5TZXRTZWxlY3Rl
ZENoaWxkcmVuKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY29uc3Qg
YXV0byYgY2hpbGRyZW4gPSBtX2NvcmVPYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgICAgIHVuc2ln
bmVkIHNlbGVjdGFibGVDaGlsZENvdW50ID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICBpZiAoY2hpbGQtPmNhblNldFNlbGVjdGVk
QXR0cmlidXRlKCkpCi0gICAgICAgICAgICAgICAgc2VsZWN0YWJsZUNoaWxkQ291bnQrKzsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghc2VsZWN0YWJsZUNoaWxkQ291bnQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgbV9jb3JlT2JqZWN0LT5zZXRTZWxlY3RlZENoaWxk
cmVuKGNoaWxkcmVuKTsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgICAgIG1fY29yZU9iamVjdC0+c2Vs
ZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdGFibGVD
aGlsZENvdW50ID09IHNlbGVjdGVkSXRlbXMuc2l6ZSgpOwotICAgIH0pOworICAgIGlmICghbV9j
b3JlT2JqZWN0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fY29yZU9iamVj
dC0+aXNNdWx0aVNlbGVjdGFibGUoKSB8fCAhbV9jb3JlT2JqZWN0LT5jYW5TZXRTZWxlY3RlZENo
aWxkcmVuKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGF1dG8mIGNoaWxk
cmVuID0gbV9jb3JlT2JqZWN0LT5jaGlsZHJlbigpOworICAgIHVuc2lnbmVkIHNlbGVjdGFibGVD
aGlsZENvdW50ID0gMDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsK
KyAgICAgICAgaWYgKGNoaWxkLT5jYW5TZXRTZWxlY3RlZEF0dHJpYnV0ZSgpKQorICAgICAgICAg
ICAgc2VsZWN0YWJsZUNoaWxkQ291bnQrKzsKKyAgICB9CisKKyAgICBpZiAoIXNlbGVjdGFibGVD
aGlsZENvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2NvcmVPYmplY3QtPnNl
dFNlbGVjdGVkQ2hpbGRyZW4oY2hpbGRyZW4pOworICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFj
Y2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0ZW1zOworICAgIG1fY29yZU9iamVj
dC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKKyAgICByZXR1cm4gc2VsZWN0YWJs
ZUNoaWxkQ291bnQgPT0gc2VsZWN0ZWRJdGVtcy5zaXplKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpjbGVhclNlbGVjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxib29sPihbdGhpc10oKSAt
PiBib29sIHsKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9i
amVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgaWYgKCFtX2NvcmVPYmplY3QpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29yZU9iamVjdC0+Y2FuU2V0U2VsZWN0ZWRD
aGlsZHJlbigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKCFtX2NvcmVP
YmplY3QtPmNhblNldFNlbGVjdGVkQ2hpbGRyZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBtX2NvcmVPYmplY3QtPnNldFNlbGVjdGVkQ2hpbGRyZW4oeyB9KTsKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNl
bGVjdGVkSXRlbXM7Ci0gICAgICAgIG1fY29yZU9iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxl
Y3RlZEl0ZW1zKTsKLSAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbXMuaXNFbXB0eSgpOwotICAg
IH0pOworICAgIG1fY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRDaGlsZHJlbih7IH0pOworICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZEl0
ZW1zOworICAgIG1fY29yZU9iamVjdC0+c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsK
KyAgICByZXR1cm4gc2VsZWN0ZWRJdGVtcy5pc0VtcHR5KCk7CiB9CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpzZWxlY3Rpb25DaGFuZ2VkKCkKIHsKLSAgICBSRUxFQVNFX0FTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KICAgICAvLyBzZWxlY3Rpb25DaGFuZ2VkIGNhbiBiZSBjYWxs
ZWQgbXVsdGlwbGUgdGltZXMgYnkgV2ViQ29yZSwgc28gZW5zdXJlIHdlIGRvbid0CiAgICAgLy8g
ZW1pdCBpdCBpZiB0aGUgbGFzdCBvbmUgaGFwcGVuZWQgaW4gdGhlIHNhbWUgcnVuIGxvb3AgaXRl
cmF0aW9uLgogICAgIGF1dG8qIHNvdXJjZSA9IGdfbWFpbl9jdXJyZW50X3NvdXJjZSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5
T2JqZWN0VGFibGVBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3Bp
L0FjY2Vzc2liaWxpdHlPYmplY3RUYWJsZUF0c3BpLmNwcAppbmRleCBhYzA0ZTA5YmNhNTYuLjMw
ZDU1Y2UxZTM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNw
aS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVBdHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVBdHNwaS5jcHAKQEAg
LTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0RCdXNJbnRlcmZhY2VWVGFibGUg
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RhYmxlRnVuY3Rpb25zID0gewogICAgIC8vIG1l
dGhvZF9jYWxsCiAgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBn
Y2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5hbWUsIEdWYXJpYW50KiBw
YXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVz
ZXJEYXRhKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAg
ICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKIApAQCAtOTEsNyArOTAsNyBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNfdGFibGVGdW5jdGlvbnMgPSB7CiAKICAgICAgICAgICAg
IGF1dG8gcm93ID0gYXRzcGlPYmplY3QtPnJvd0F0SW5kZXgoaW5kZXgpOwogICAgICAgICAgICAg
YXV0byBjb2x1bW4gPSBhdHNwaU9iamVjdC0+Y29sdW1uQXRJbmRleChpbmRleCk7Ci0gICAgICAg
ICAgICBhdXRvKiBjZWxsID0gYXRzcGlPYmplY3QtPm1fYXhPYmplY3QgPyBhdHNwaU9iamVjdC0+
bV9heE9iamVjdC0+Y2VsbEZvckNvbHVtbkFuZFJvdygqY29sdW1uLCAqcm93KSA6IG51bGxwdHI7
CisgICAgICAgICAgICBhdXRvKiBjZWxsID0gYXRzcGlPYmplY3QtPm1fY29yZU9iamVjdCA/IGF0
c3BpT2JqZWN0LT5tX2NvcmVPYmplY3QtPmNlbGxGb3JDb2x1bW5BbmRSb3coKmNvbHVtbiwgKnJv
dykgOiBudWxscHRyOwogICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoYmlpaWliKSIsIGNlbGwgJiYgY2Vs
bC0+aXNUYWJsZUNlbGwoKSA/IFRSVUUgOiBGQUxTRSwKICAgICAgICAgICAgICAgICByb3cudmFs
dWVfb3IoLTEpLCBjb2x1bW4udmFsdWVfb3IoLTEpLCByb3cgJiYgY29sdW1uID8gYXRzcGlPYmpl
Y3QtPnJvd0V4dGVudCgqcm93LCAqY29sdW1uKSA6IC0xLAogICAgICAgICAgICAgICAgIHJvdyAm
JiBjb2x1bW4gPyBhdHNwaU9iamVjdC0+Y29sdW1uRXh0ZW50KCpyb3csICpjb2x1bW4pIDogLTEs
IEZBTFNFKSk7CkBAIC0xMDgsNyArMTA3LDYgQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpzX3RhYmxlRnVuY3Rpb25zID0gewogICAgIH0sCiAgICAgLy8g
Z2V0X3Byb3BlcnR5CiAgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25z
dCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9y
KiogZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHVmFyaWFudCogewotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0g
UmVmIHsgKnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9
OwogICAgICAgICBhdHNwaU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAKQEAgLTEzOCwy
OSArMTM2LDIwIEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6c190YWJsZUZ1bmN0aW9ucyA9IHsKIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0
c3BpOjpyb3dDb3VudCgpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIG1fYXhPYmplY3QtPnJvd0NvdW50KCk7CisgICAgcmV0dXJuIG1fY29yZU9iamVjdCA/IG1f
Y29yZU9iamVjdC0+cm93Q291bnQoKSA6IDA7CiB9CiAKIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6Y29sdW1uQ291bnQoKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2F4T2JqZWN0KQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBtX2F4T2JqZWN0LT5jb2x1bW5Db3VudCgpOworICAgIHJldHVybiBtX2Nv
cmVPYmplY3QgPyBtX2NvcmVPYmplY3QtPmNvbHVtbkNvdW50KCkgOiAwOwogfQogCiBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y2VsbCh1bnNpZ25l
ZCByb3csIHVuc2lnbmVkIGNvbHVtbikgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwotICAgIGlmICghbV9heE9iamVjdCkKKyAgICBpZiAoIW1fY29yZU9iamVj
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBpZiAoYXV0byogdGFibGVDZWxsID0g
bV9heE9iamVjdC0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdykpCisgICAgaWYgKGF1
dG8qIHRhYmxlQ2VsbCA9IG1fY29yZU9iamVjdC0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4s
IHJvdykpCiAgICAgICAgIHJldHVybiB0YWJsZUNlbGwtPndyYXBwZXIoKTsKIAogICAgIHJldHVy
biBudWxscHRyOwpAQCAtMTY4LDQwICsxNTcsMzQgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
KiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNlbGwodW5zaWduZWQgcm93LCB1bnNpZ25lZAog
CiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGFi
bGVDYXB0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVW
YWx1ZUZyb21NYWluVGhyZWFkPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KFt0aGlzXSgpIC0+
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogewotICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQot
ICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKKyAgICBpZiAo
IW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKCFt
X2NvcmVPYmplY3QpCisgICAgaWYgKGF1dG8qIG5vZGUgPSBtX2NvcmVPYmplY3QtPm5vZGUoKSkg
eworICAgICAgICBpZiAoIWlzPEhUTUxUYWJsZUVsZW1lbnQ+KG5vZGUpKQogICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICAgICAgaWYgKGF1dG8qIG5vZGUgPSBtX2NvcmVPYmplY3Qt
Pm5vZGUoKSkgewotICAgICAgICAgICAgaWYgKCFpczxIVE1MVGFibGVFbGVtZW50Pihub2RlKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgaWYgKGF1dG8g
Y2FwdGlvbiA9IGRvd25jYXN0PEhUTUxUYWJsZUVsZW1lbnQ+KCpub2RlKS5jYXB0aW9uKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBjYXB0aW9uLT5yZW5kZXJlcigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiBlbGVtZW50ID0gQWNjZXNzaWJpbGl0
eU9iamVjdDo6Zmlyc3RBY2Nlc3NpYmxlT2JqZWN0RnJvbU5vZGUocmVuZGVyZXItPmVsZW1lbnQo
KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC0+d3JhcHBlcigpOwot
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8gY2FwdGlvbiA9IGRvd25jYXN0PEhU
TUxUYWJsZUVsZW1lbnQ+KCpub2RlKS5jYXB0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IGNhcHRpb24tPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YXV0byogZWxlbWVudCA9IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmZpcnN0QWNjZXNzaWJsZU9iamVj
dEZyb21Ob2RlKHJlbmRlcmVyLT5lbGVtZW50KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZWxlbWVudC0+d3JhcHBlcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgfQog
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0pOworICAgIHJldHVybiBudWxscHRyOwog
fQogCiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNl
bGxJbmRleCh1bnNpZ25lZCByb3csIHVuc2lnbmVkIGNvbHVtbikgY29uc3QKIHsKLSAgICBSRUxF
QVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9heE9iamVjdCkKKyAgICBp
ZiAoIW1fY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGF1
dG8qIGNlbGwgPSBtX2F4T2JqZWN0LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVtbiwgcm93KTsK
KyAgICBhdXRvKiBjZWxsID0gbV9jb3JlT2JqZWN0LT5jZWxsRm9yQ29sdW1uQW5kUm93KGNvbHVt
biwgcm93KTsKICAgICBpZiAoIWNlbGwpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAK
LSAgICBhdXRvIGNlbGxzID0gbV9heE9iamVjdC0+Y2VsbHMoKTsKKyAgICBhdXRvIGNlbGxzID0g
bV9jb3JlT2JqZWN0LT5jZWxscygpOwogICAgIEFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yOjppdGVyYXRvciBwb3NpdGlvbjsKICAgICBwb3NpdGlvbiA9IHN0ZDo6Zmlu
ZChjZWxscy5iZWdpbigpLCBjZWxscy5lbmQoKSwgY2VsbCk7CiAgICAgaWYgKHBvc2l0aW9uID09
IGNlbGxzLmVuZCgpKQpAQCAtMjExLDExICsxOTQsMTAgQEAgc3RkOjpvcHRpb25hbDx1bnNpZ25l
ZD4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjZWxsSW5kZXgodW5zaWduZWQgcm93LCB1bnNp
Z24KIAogc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpy
b3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKCFp
c01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2F4T2JqZWN0KQorICAgIGlmICghbV9jb3JlT2Jq
ZWN0KQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgYXV0byBjZWxscyA9IG1f
YXhPYmplY3QtPmNlbGxzKCk7CisgICAgYXV0byBjZWxscyA9IG1fY29yZU9iamVjdC0+Y2VsbHMo
KTsKICAgICBpZiAoaW5kZXggPj0gY2VsbHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OwogCkBAIC0yMjQsMTEgKzIwNiwxMCBAQCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd0F0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbgog
CiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNvbHVt
bkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgaWYgKCFtX2NvcmVPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBhdXRvIGNlbGxzID0gbV9h
eE9iamVjdC0+Y2VsbHMoKTsKKyAgICBhdXRvIGNlbGxzID0gbV9jb3JlT2JqZWN0LT5jZWxscygp
OwogICAgIGlmIChpbmRleCA+PSBjZWxscy5zaXplKCkpCiAgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CiAKQEAgLTIzNywxMSArMjE4LDEwIEBAIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29sdW1uQXRJbmRleCh1bnNpZ25lZCBpbmRleCkKIAog
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd0hl
YWRlcih1bnNpZ25lZCByb3cpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgaWYgKCFtX2NvcmVPYmplY3QpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBoZWFkZXJzID0gbV9heE9iamVjdC0+
cm93SGVhZGVycygpOworICAgIGF1dG8gaGVhZGVycyA9IG1fY29yZU9iamVjdC0+cm93SGVhZGVy
cygpOwogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVycykgewogICAgICAgICBh
dXRvIHJhbmdlID0gaGVhZGVyLT5yb3dJbmRleFJhbmdlKCk7CiAgICAgICAgIGlmIChyYW5nZS5m
aXJzdCA8PSByb3cgJiYgcm93IDwgcmFuZ2UuZmlyc3QgKyByYW5nZS5zZWNvbmQpIHsKQEAgLTI1
NSwxMSArMjM1LDEwIEBAIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpyb3dIZWFkZXIodW5zaWduZWQgcm93KSBjb25zCiAKIEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaSogQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjb2x1bW5IZWFkZXIodW5zaWdu
ZWQgY29sdW1uKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
Ci0gICAgaWYgKCFtX2F4T2JqZWN0KQorICAgIGlmICghbV9jb3JlT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIGF1dG8gaGVhZGVycyA9IG1fYXhPYmplY3QtPmNvbHVtbkhl
YWRlcnMoKTsKKyAgICBhdXRvIGhlYWRlcnMgPSBtX2NvcmVPYmplY3QtPmNvbHVtbkhlYWRlcnMo
KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpIHsKICAgICAgICAgYXV0
byByYW5nZSA9IGhlYWRlci0+Y29sdW1uSW5kZXhSYW5nZSgpOwogICAgICAgICBpZiAocmFuZ2Uu
Zmlyc3QgPD0gY29sdW1uICYmIGNvbHVtbiA8IHJhbmdlLmZpcnN0ICsgcmFuZ2Uuc2Vjb25kKSB7
CkBAIC0yNzMsMTMgKzI1MiwxMiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6Y29sdW1uSGVhZGVyKHVuc2lnbmVkIGNvbHVtbgogCiBTdHJpbmcg
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpyb3dEZXNjcmlwdGlvbih1bnNpZ25lZCByb3cpIGNv
bnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1f
YXhPYmplY3QpCisgICAgaWYgKCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKLSAg
ICBhdXRvIGhlYWRlcnMgPSBtX2F4T2JqZWN0LT5yb3dIZWFkZXJzKCk7CisgICAgYXV0byBoZWFk
ZXJzID0gbV9jb3JlT2JqZWN0LT5yb3dIZWFkZXJzKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBo
ZWFkZXIgOiBoZWFkZXJzKSB7CiAgICAgICAgIGF1dG8qIHdyYXBwZXIgPSBoZWFkZXItPndyYXBw
ZXIoKTsKICAgICAgICAgaWYgKCF3cmFwcGVyKQpAQCAtMzA0LDEzICsyODIsMTIgQEAgU3RyaW5n
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6cm93RGVzY3JpcHRpb24odW5zaWduZWQgcm93KSBj
b25zdAogCiBTdHJpbmcgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjb2x1bW5EZXNjcmlwdGlv
bih1bnNpZ25lZCBjb2x1bW4pIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgaWYgKCFtX2NvcmVPYmplY3QpCiAg
ICAgICAgIHJldHVybiB7IH07CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYm9v
bCBpc0ZpcnN0ID0gdHJ1ZTsKLSAgICBhdXRvIGhlYWRlcnMgPSBtX2F4T2JqZWN0LT5jb2x1bW5I
ZWFkZXJzKCk7CisgICAgYXV0byBoZWFkZXJzID0gbV9jb3JlT2JqZWN0LT5jb2x1bW5IZWFkZXJz
KCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJzKSB7CiAgICAgICAgIGF1
dG8qIHdyYXBwZXIgPSBoZWFkZXItPndyYXBwZXIoKTsKICAgICAgICAgaWYgKCF3cmFwcGVyKQpA
QCAtMzM1LDI3ICszMTIsMjQgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y29s
dW1uRGVzY3JpcHRpb24odW5zaWduZWQgY29sdW1uKSBjb25zdAogCiB1bnNpZ25lZCBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6OnJvd0V4dGVudCh1bnNpZ25lZCByb3csIHVuc2lnbmVkIGNvbHVt
bikgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlm
ICghbV9heE9iamVjdCkKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBhdXRvKiBjZWxsID0gbV9heE9iamVjdC0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1
bW4sIHJvdyk7CisgICAgYXV0byogY2VsbCA9IG1fY29yZU9iamVjdC0+Y2VsbEZvckNvbHVtbkFu
ZFJvdyhjb2x1bW4sIHJvdyk7CiAgICAgcmV0dXJuIGNlbGwgPyBjZWxsLT5yb3dJbmRleFJhbmdl
KCkuc2Vjb25kIDogMDsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpj
b2x1bW5FeHRlbnQodW5zaWduZWQgcm93LCB1bnNpZ25lZCBjb2x1bW4pIGNvbnN0CiB7Ci0gICAg
UkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisg
ICAgaWYgKCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgYXV0byogY2Vs
bCA9IG1fYXhPYmplY3QtPmNlbGxGb3JDb2x1bW5BbmRSb3coY29sdW1uLCByb3cpOworICAgIGF1
dG8qIGNlbGwgPSBtX2NvcmVPYmplY3QtPmNlbGxGb3JDb2x1bW5BbmRSb3coY29sdW1uLCByb3cp
OwogICAgIHJldHVybiBjZWxsID8gY2VsbC0+Y29sdW1uSW5kZXhSYW5nZSgpLnNlY29uZCA6IDA7
CiB9CiAKIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4gQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpjZWxscygpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwogICAgIGlmICghbV9jb3JlT2JqZWN0KQogICAgICAgICByZXR1cm4geyB9
OwogCkBAIC0zNjQsNyArMzM4LDYgQEAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNlbGxzKCkgY29uc3QKIAogVmVjdG9y
PFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OnJvd3MoKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBpZiAoIW1fY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMzczLDcg
KzM0Niw2IEBAIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4gQWNjZXNz
aWJpbGl0eU9iamVjdEF0c3BpOjpyb3dzKCkgY29uc3QKIAogVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd0hlYWRlcnMo
KSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAo
IW1fY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJuIHsgfTsKIApAQCAtMzgyLDcgKzM1NCw2IEBA
IFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpPj4gQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpyb3dIZWFkZXJzKCkKIAogVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNvbHVtbkhlYWRlcnMoKSBjb25z
dAogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fY29y
ZU9iamVjdCkKICAgICAgICAgcmV0dXJuIHsgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVDZWxsQXRzcGku
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0VGFibGVDZWxsQXRzcGkuY3BwCmluZGV4IDQ4ZmNhNWI3YzNhMS4uZjUxYjE2NjYxZmMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxp
dHlPYmplY3RUYWJsZUNlbGxBdHNwaS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGFibGVDZWxsQXRzcGkuY3BwCkBAIC0zMSw3
ICszMSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6c190YWJsZUNlbGxGdW5jdGlvbnMgPSB7CiAgICAgLy8gbWV0
aG9kX2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciosIGNvbnN0IGdj
aGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqLCBH
REJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24sIGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgICAgIGF1dG8gYXRz
cGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKj4o
dXNlckRhdGEpIH07CiAgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsK
IApAQCAtNTIsNyArNTEsNiBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnNfdGFibGVDZWxsRnVuY3Rpb25zID0gewogICAgIH0sCiAgICAgLy8gZ2V0X3By
b3BlcnR5CiAgICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hh
ciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJy
b3IsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHVmFyaWFudCogewotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwogICAgICAgICBhdXRvIGF0c3BpT2JqZWN0ID0gUmVmIHsg
KnN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KHVzZXJEYXRhKSB9OwogICAg
ICAgICBhdHNwaU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAKQEAgLTY1LDcgKzYzLDcg
QEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RhYmxl
Q2VsbEZ1bmN0aW9ucyA9IHsKICAgICAgICAgaWYgKCFnX3N0cmNtcDAocHJvcGVydHlOYW1lLCAi
Um93U3BhbiIpKQogICAgICAgICAgICAgcmV0dXJuIGdfdmFyaWFudF9uZXdfaW50MzIoYXRzcGlP
YmplY3QtPnJvd1NwYW4oKSk7CiAgICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5TmFtZSwg
IlRhYmxlIikpIHsKLSAgICAgICAgICAgIGF1dG8qIGF4T2JqZWN0ID0gYXRzcGlPYmplY3QtPm1f
YXhPYmplY3Q7CisgICAgICAgICAgICBhdXRvKiBheE9iamVjdCA9IGF0c3BpT2JqZWN0LT5tX2Nv
cmVPYmplY3Q7CiAgICAgICAgICAgICBpZiAoIWF4T2JqZWN0IHx8ICFheE9iamVjdC0+aXNUYWJs
ZUNlbGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eUF0c3BpOjpzaW5n
bGV0b24oKS5udWxsUmVmZXJlbmNlKCk7CiAKQEAgLTc2LDcgKzc0LDcgQEAgR0RCdXNJbnRlcmZh
Y2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RhYmxlQ2VsbEZ1bmN0aW9ucyA9
IHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICB3cmFwcGVy
LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgICAgICAgICBheE9iamVjdCA9IHdyYXBw
ZXItPm1fYXhPYmplY3Q7CisgICAgICAgICAgICAgICAgYXhPYmplY3QgPSB3cmFwcGVyLT5tX2Nv
cmVPYmplY3Q7CiAgICAgICAgICAgICAgICAgaWYgKGF4T2JqZWN0ICYmIGF4T2JqZWN0LT5pc1Rh
YmxlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTQs
NTcgKzkyLDQ2IEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNw
aTo6c190YWJsZUNlbGxGdW5jdGlvbnMgPSB7CiAKIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpPj4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjZWxsUm93SGVhZGVycygp
IGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAo
IW1fYXhPYmplY3QpCisgICAgaWYgKCFtX2NvcmVPYmplY3QpCiAgICAgICAgIHJldHVybiB7IH07
CiAKICAgICAvLyBPbmx5IHJldHVybiBoZWFkZXJzIGZvciBjZWxscyB0aGF0IGFyZSBub3QgaGVh
ZGVycy4KICAgICBpZiAocm9sZSgpICE9IEF0c3BpOjpSb2xlOjpUYWJsZUNlbGwpCiAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gd3JhcHBlclZlY3RvcihtX2F4T2JqZWN0LT5yb3dI
ZWFkZXJzKCkpOworICAgIHJldHVybiB3cmFwcGVyVmVjdG9yKG1fY29yZU9iamVjdC0+cm93SGVh
ZGVycygpKTsKIH0KIAogVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBB
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNlbGxDb2x1bW5IZWFkZXJzKCkgY29uc3QKIHsKLSAg
ICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9heE9iamVjdCkK
KyAgICBpZiAoIW1fY29yZU9iamVjdCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIC8vIE9u
bHkgcmV0dXJuIGhlYWRlcnMgZm9yIGNlbGxzIHRoYXQgYXJlIG5vdCBoZWFkZXJzLgogICAgIGlm
IChyb2xlKCkgIT0gQXRzcGk6OlJvbGU6OlRhYmxlQ2VsbCkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIHJldHVybiB3cmFwcGVyVmVjdG9yKG1fYXhPYmplY3QtPmNvbHVtbkhlYWRlcnMoKSk7
CisgICAgcmV0dXJuIHdyYXBwZXJWZWN0b3IobV9jb3JlT2JqZWN0LT5jb2x1bW5IZWFkZXJzKCkp
OwogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnJvd1NwYW4oKSBjb25z
dAogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2F4
T2JqZWN0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2F4T2JqZWN0LT5yb3dJ
bmRleFJhbmdlKCkuc2Vjb25kOworICAgIHJldHVybiBtX2NvcmVPYmplY3QgPyBtX2NvcmVPYmpl
Y3QtPnJvd0luZGV4UmFuZ2UoKS5zZWNvbmQgOiAwOwogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OmNvbHVtblNwYW4oKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2F4T2JqZWN0KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX2F4T2JqZWN0LT5jb2x1bW5JbmRleFJhbmdlKCkuc2Vjb25kOwor
ICAgIHJldHVybiBtX2NvcmVPYmplY3QgPyBtX2NvcmVPYmplY3QtPmNvbHVtbkluZGV4UmFuZ2Uo
KS5zZWNvbmQgOiAwOwogfQogCiBzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4sIHN0
ZDo6b3B0aW9uYWw8dW5zaWduZWQ+PiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNlbGxQb3Np
dGlvbigpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBzdGQ6OnBhaXI8c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4sIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+PiBwb3NpdGlvbjsKLSAgICBpZiAoIW1fYXhPYmplY3QpCisgICAgaWYgKCFtX2NvcmVPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKIAotICAgIHBvc2l0aW9uLmZpcnN0ID0gbV9h
eE9iamVjdC0+cm93SW5kZXhSYW5nZSgpLmZpcnN0OwotICAgIHBvc2l0aW9uLnNlY29uZCA9IG1f
YXhPYmplY3QtPmNvbHVtbkluZGV4UmFuZ2UoKS5maXJzdDsKKyAgICBwb3NpdGlvbi5maXJzdCA9
IG1fY29yZU9iamVjdC0+cm93SW5kZXhSYW5nZSgpLmZpcnN0OworICAgIHBvc2l0aW9uLnNlY29u
ZCA9IG1fY29yZU9iamVjdC0+Y29sdW1uSW5kZXhSYW5nZSgpLmZpcnN0OwogCiAgICAgcmV0dXJu
IHBvc2l0aW9uOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4dEF0c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKaW5kZXgg
ZDIyNzA5ZWU0OTJhLi5mYzE4ODlmNmQ5ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFRleHRBdHNwaS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VGV4
dEF0c3BpLmNwcApAQCAtODAsNyArODAsNiBAQCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OlRl
eHRHcmFudWxhcml0eSBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmF0c3BpR3JhbnVsYQogR0RC
dXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RleHRGdW5jdGlv
bnMgPSB7CiAgICAgLy8gbWV0aG9kX2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25z
dCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9k
TmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2Nh
dGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFp
blRocmVhZCgpKTsKICAgICAgICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2Fz
dDxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKICAgICAgICAgYXRzcGlP
YmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogCkBAIC0yMTAsNyArMjA5LDYgQEAgR0RCdXNJ
bnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzX3RleHRGdW5jdGlvbnMg
PSB7CiAgICAgfSwKICAgICAvLyBnZXRfcHJvcGVydHkKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24q
LCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciog
cHJvcGVydHlOYW1lLCBHRXJyb3IqKiBlcnJvciwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdWYXJp
YW50KiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgICAg
IGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVCYWNraW5n
U3RvcmUoKTsKIApAQCAtMjY3LDUxICsyNjUsNDEgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBV
VEY4T2Zmc2V0VG9VVEYxNihjb25zdCBWZWN0b3I8dW5zaWduZWQsIDEyOD4mIG1hcHBpbmcsIHUK
IAogU3RyaW5nIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dCgpIGNvbnN0CiB7Ci0gICAg
QVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IGlzTWFpblRocmVhZCgpID8gbV9jb3JlT2JqZWN0IDog
bV9heE9iamVjdDsKLSAgICBpZiAoIWF4T2JqZWN0KQorICAgIGlmICghbV9jb3JlT2JqZWN0KQog
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgbV9oYXNMaXN0TWFya2VyQXRTdGFydC5zdG9yZShm
YWxzZSk7CisgICAgbV9oYXNMaXN0TWFya2VyQXRTdGFydCA9IGZhbHNlOwogCiAjaWYgRU5BQkxF
KElOUFVUX1RZUEVfQ09MT1IpCi0gICAgaWYgKGF4T2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nl
c3NpYmlsaXR5Um9sZTo6Q29sb3JXZWxsKSB7Ci0gICAgICAgIGF1dG8gY29sb3IgPSBjb252ZXJ0
Q29sb3I8U1JHQkE8ZmxvYXQ+PihheE9iamVjdC0+Y29sb3JWYWx1ZSgpKS5yZXNvbHZlZCgpOwor
ICAgIGlmIChtX2NvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpD
b2xvcldlbGwpIHsKKyAgICAgICAgYXV0byBjb2xvciA9IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9h
dD4+KG1fY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKS5yZXNvbHZlZCgpOwogICAgICAgICBHVW5p
cXVlUHRyPGNoYXI+IGNvbG9yU3RyaW5nKGdfc3RyZHVwX3ByaW50ZigicmdiICU3LjVmICU3LjVm
ICU3LjVmIDEiLCBjb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKSk7CiAgICAgICAg
IHJldHVybiBTdHJpbmc6OmZyb21VVEY4KGNvbG9yU3RyaW5nLmdldCgpKTsKICAgICB9CiAjZW5k
aWYKIAotICAgIGlmIChheE9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICByZXR1cm4g
YXhPYmplY3QtPmRvQVhTdHJpbmdGb3JSYW5nZSh7IDAsIFN0cmluZzo6TWF4TGVuZ3RoIH0pOwor
ICAgIGlmIChtX2NvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSkKKyAgICAgICAgcmV0dXJuIG1f
Y29yZU9iamVjdC0+ZG9BWFN0cmluZ0ZvclJhbmdlKHsgMCwgU3RyaW5nOjpNYXhMZW5ndGggfSk7
CiAKLSAgICBhdXRvIHZhbHVlID0gYXhPYmplY3QtPnN0cmluZ1ZhbHVlKCk7CisgICAgYXV0byB2
YWx1ZSA9IG1fY29yZU9iamVjdC0+c3RyaW5nVmFsdWUoKTsKICAgICBpZiAoIXZhbHVlLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gdmFsdWU7CiAKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6
cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPFN0cmluZz4oW3RoaXNdKCkgLT4gU3RyaW5nIHsK
LSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1fY29yZU9iamVjdC0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVPYmplY3QpCi0gICAgICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIGF1dG8gdGV4dCA9IG1fY29yZU9iamVjdC0+dGV4
dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoQWNjZXNzaWJp
bGl0eVRleHRVbmRlckVsZW1lbnRNb2RlOjpUZXh0VW5kZXJFbGVtZW50TW9kZUluY2x1ZGVBbGxD
aGlsZHJlbikpOwotICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBtX2NvcmVPYmplY3QtPnJl
bmRlcmVyKCkpIHsKLSAgICAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0SXRlbT4oKnJlbmRlcmVy
KSAmJiBkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4oKnJlbmRlcmVyKS5tYXJrZXJSZW5kZXJlcigp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLmRpcmVjdGlvbigpID09
IFRleHREaXJlY3Rpb246OkxUUikgewotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gbWFrZVN0
cmluZyhvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgdGV4dCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faGFzTGlzdE1hcmtlckF0U3RhcnQuc3RvcmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHRleHQgPSBtYWtlU3RyaW5nKHRleHQsIG9iamVj
dFJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAgICAgIH0KKyAgICBhdXRvIHRleHQgPSBt
X2NvcmVPYmplY3QtPnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1l
bnRNb2RlKEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZTo6VGV4dFVuZGVyRWxlbWVu
dE1vZGVJbmNsdWRlQWxsQ2hpbGRyZW4pKTsKKyAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBtX2Nv
cmVPYmplY3QtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPigq
cmVuZGVyZXIpICYmIGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqcmVuZGVyZXIpLm1hcmtlclJl
bmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24o
KSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpIHsKKyAgICAgICAgICAgICAgICB0ZXh0ID0gbWFrZVN0
cmluZyhvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgdGV4dCk7CisgICAgICAgICAgICAgICAg
bV9oYXNMaXN0TWFya2VyQXRTdGFydCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICB0ZXh0ID0gbWFrZVN0cmluZyh0ZXh0LCBvYmplY3RSZXBsYWNlbWVudENoYXJh
Y3Rlcik7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRleHQ7Ci0gICAgfSk7CisgICAgfQor
ICAgIHJldHVybiB0ZXh0OwogfQogCiB1bnNpZ25lZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpnZXRM
ZW5ndGhGb3JUZXh0UmFuZ2UoKSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgcHJvYmFibHkgYmUgaW4gc3luYyB3
aXRoIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6dGV4dCgpLgogICAgIHVuc2lnbmVkIHRleHRM
ZW5ndGggPSB0ZXh0KCkubGVuZ3RoKCk7CiAgICAgaWYgKHRleHRMZW5ndGgpCkBAIC0zMzUsNyAr
MzIzLDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphbGxvd3NUZXh0UmFuZ2VzKCkgY29u
c3QKIAogQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHQoaW50IHN0YXJ0T2Zm
c2V0LCBpbnQgZW5kT2Zmc2V0KSBjb25zdAogewotICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5U
aHJlYWQoKSk7CiAgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7CiAgICAgYXV0byB1dGY4VGV4
dCA9IHV0ZjE2VGV4dC51dGY4KCk7CiAgICAgaWYgKHV0ZjhUZXh0LmlzTnVsbCgpKQpAQCAtMzcw
LDEzICszNTcsMTIgQEAgc3RhdGljIGlubGluZSBpbnQgYWRqdXN0T3V0cHV0T2Zmc2V0KHVuc2ln
bmVkIHV0ZjE2T2Zmc2V0LCBib29sIGhhc0xpc3RNYXJrZXJBdFMKIAogdm9pZCBBY2Nlc3NpYmls
aXR5T2JqZWN0QXRzcGk6OnRleHRJbnNlcnRlZChjb25zdCBTdHJpbmcmIGluc2VydGVkVGV4dCwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFtX2ludGVyZmFjZXMuY29udGFpbnMoSW50ZXJmYWNl
OjpUZXh0KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0KCk7
CiAgICAgYXV0byB1dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7Ci0gICAgYXV0byB1dGYxNk9m
ZnNldCA9IGFkanVzdE91dHB1dE9mZnNldChtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBv
c2l0aW9uKHBvc2l0aW9uKSwgbV9oYXNMaXN0TWFya2VyQXRTdGFydC5sb2FkKCkpOworICAgIGF1
dG8gdXRmMTZPZmZzZXQgPSBhZGp1c3RPdXRwdXRPZmZzZXQobV9jb3JlT2JqZWN0LT5pbmRleEZv
clZpc2libGVQb3NpdGlvbihwb3NpdGlvbiksIG1faGFzTGlzdE1hcmtlckF0U3RhcnQpOwogICAg
IGF1dG8gbWFwcGluZyA9IG9mZnNldE1hcHBpbmcodXRmMTZUZXh0KTsKICAgICBhdXRvIG9mZnNl
dCA9IFVURjE2T2Zmc2V0VG9VVEY4KG1hcHBpbmcsIHV0ZjE2T2Zmc2V0KTsKICAgICBhdXRvIHV0
ZjhJbnNlcnRlZFRleHQgPSBpbnNlcnRlZFRleHQudXRmOCgpOwpAQCAtMzg2LDEzICszNzIsMTIg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRJbnNlcnRlZChjb25zdCBTdHJp
bmcmIGluc2VydGVkVGV4dCwgY29uc3QgVmkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRz
cGk6OnRleHREZWxldGVkKGNvbnN0IFN0cmluZyYgZGVsZXRlZFRleHQsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwogICAgIGlmICghbV9pbnRlcmZhY2VzLmNvbnRhaW5zKEludGVyZmFjZTo6VGV4dCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOwogICAgIGF1dG8gdXRm
OFRleHQgPSB1dGYxNlRleHQudXRmOCgpOwotICAgIGF1dG8gdXRmMTZPZmZzZXQgPSBhZGp1c3RP
dXRwdXRPZmZzZXQobV9jb3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbihwb3NpdGlv
biksIG1faGFzTGlzdE1hcmtlckF0U3RhcnQubG9hZCgpKTsKKyAgICBhdXRvIHV0ZjE2T2Zmc2V0
ID0gYWRqdXN0T3V0cHV0T2Zmc2V0KG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRp
b24ocG9zaXRpb24pLCBtX2hhc0xpc3RNYXJrZXJBdFN0YXJ0KTsKICAgICBhdXRvIG1hcHBpbmcg
PSBvZmZzZXRNYXBwaW5nKHV0ZjE2VGV4dCk7CiAgICAgYXV0byBvZmZzZXQgPSBVVEYxNk9mZnNl
dFRvVVRGOChtYXBwaW5nLCB1dGYxNk9mZnNldCk7CiAgICAgYXV0byB1dGY4RGVsZXRlZFRleHQg
PSBkZWxldGVkVGV4dC51dGY4KCk7CkBAIC00MDIsODMgKzM4Nyw3NyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6dGV4dERlbGV0ZWQoY29uc3QgU3RyaW5nJiBkZWxldGVkVGV4dCwg
Y29uc3QgVmlzaQogCiBJbnRQb2ludCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmJvdW5kYXJ5
T2Zmc2V0KHVuc2lnbmVkIHV0ZjE2T2Zmc2V0LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFp
blRocmVhZDxJbnRQb2ludD4oW3RoaXMsIHV0ZjE2T2Zmc2V0LCBncmFudWxhcml0eV0oKSAtPiBJ
bnRQb2ludCB7Ci0gICAgICAgIGlmIChtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICBtX2NvcmVP
YmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgICAgIGlmICghbV9jb3JlT2JqZWN0
KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24gb2Zmc2V0UG9zaXRpb24g
PSBtX2NvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGFkanVzdElucHV0T2Zmc2V0
KHV0ZjE2T2Zmc2V0LCBtX2hhc0xpc3RNYXJrZXJBdFN0YXJ0LmxvYWQoKSkpOwotICAgICAgICBW
aXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbiwgZW5kUG9zdGlvbjsKLSAgICAgICAgc3dpdGNo
IChncmFudWxhcml0eSkgewotICAgICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6Q2hhcmFjdGVy
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY2Fz
ZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRTdGFydDogewotICAgICAgICAgICAgaWYgKCF1dGYxNk9m
ZnNldCAmJiBtX2hhc0xpc3RNYXJrZXJBdFN0YXJ0LmxvYWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4geyAwLCAxIH07Ci0KLSAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBpc1N0YXJ0T2ZX
b3JkKG9mZnNldFBvc2l0aW9uKSAmJiBkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShvZmZz
ZXRQb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkgPyBvZmZzZXRQb3NpdGlvbiA6IHN0YXJ0T2ZX
b3JkKG9mZnNldFBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgICAgICAgICBl
bmRQb3N0aW9uID0gbmV4dFdvcmRQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgICAg
IGF1dG8gcG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkID0gbmV4dFdvcmRQb3Np
dGlvbihlbmRQb3N0aW9uKTsKLSAgICAgICAgICAgIGlmIChwb3NpdGlvbkFmdGVyU3BhY2luZ0Fu
ZEZvbGxvd2luZ1dvcmQgIT0gZW5kUG9zdGlvbikgewotICAgICAgICAgICAgICAgIGF1dG8gcHJl
dmlvdXNQb3NpdGlvbiA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvc2l0aW9uQWZ0ZXJTcGFjaW5n
QW5kRm9sbG93aW5nV29yZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUG9zaXRpb24g
PT0gc3RhcnRQb3NpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgZW5kUG9zdGlvbiA9IHBvc2l0
aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZDsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIGVuZFBvc3Rpb24gPSBwcmV2aW91c1Bvc2l0aW9uOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBUZXh0
R3JhbnVsYXJpdHk6OldvcmRFbmQ6IHsKLSAgICAgICAgICAgIGlmICghdXRmMTZPZmZzZXQgJiYg
bV9oYXNMaXN0TWFya2VyQXRTdGFydC5sb2FkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHsg
MCwgMSB9OwotCi0gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gcHJldmlvdXNXb3JkUG9zaXRp
b24ob2Zmc2V0UG9zaXRpb24pOwotICAgICAgICAgICAgYXV0byBwb3NpdGlvbkJlZm9yZVNwYWNp
bmdBbmRQcmV2aW91c1dvcmQgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsK
LSAgICAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZVNwYWNpbmdBbmRQcmV2aW91c1dvcmQgIT0g
c3RhcnRQb3NpdGlvbikKLSAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbmV4dFdvcmRQ
b3NpdGlvbihwb3NpdGlvbkJlZm9yZVNwYWNpbmdBbmRQcmV2aW91c1dvcmQpOwotICAgICAgICAg
ICAgZW5kUG9zdGlvbiA9IGVuZE9mV29yZChvZmZzZXRQb3NpdGlvbik7Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICBWaXNpYmxlUG9zaXRpb24gb2Zmc2V0UG9zaXRpb24gPSBtX2NvcmVPYmplY3Qt
PnZpc2libGVQb3NpdGlvbkZvckluZGV4KGFkanVzdElucHV0T2Zmc2V0KHV0ZjE2T2Zmc2V0LCBt
X2hhc0xpc3RNYXJrZXJBdFN0YXJ0KSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRp
b24sIGVuZFBvc3Rpb247CisgICAgc3dpdGNoIChncmFudWxhcml0eSkgeworICAgIGNhc2UgVGV4
dEdyYW51bGFyaXR5OjpDaGFyYWN0ZXI6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgY2FzZSBUZXh0R3JhbnVsYXJpdHk6OldvcmRTdGFydDogeworICAgICAgICBp
ZiAoIXV0ZjE2T2Zmc2V0ICYmIG1faGFzTGlzdE1hcmtlckF0U3RhcnQpCisgICAgICAgICAgICBy
ZXR1cm4geyAwLCAxIH07CisKKyAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGlzU3RhcnRPZldvcmQo
b2Zmc2V0UG9zaXRpb24pICYmIGRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKG9mZnNldFBv
c2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSA/IG9mZnNldFBvc2l0aW9uIDogc3RhcnRPZldvcmQo
b2Zmc2V0UG9zaXRpb24sIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKKyAgICAgICAgZW5kUG9zdGlv
biA9IG5leHRXb3JkUG9zaXRpb24oc3RhcnRQb3NpdGlvbik7CisgICAgICAgIGF1dG8gcG9zaXRp
b25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihlbmRQb3N0
aW9uKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCAh
PSBlbmRQb3N0aW9uKSB7CisgICAgICAgICAgICBhdXRvIHByZXZpb3VzUG9zaXRpb24gPSBwcmV2
aW91c1dvcmRQb3NpdGlvbihwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQpOwor
ICAgICAgICAgICAgaWYgKHByZXZpb3VzUG9zaXRpb24gPT0gc3RhcnRQb3NpdGlvbikKKyAgICAg
ICAgICAgICAgICBlbmRQb3N0aW9uID0gcG9zaXRpb25BZnRlclNwYWNpbmdBbmRGb2xsb3dpbmdX
b3JkOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVuZFBvc3Rpb24gPSBwcmV2
aW91c1Bvc2l0aW9uOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpT
ZW50ZW5jZVN0YXJ0OiB7Ci0gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlNlbnRl
bmNlKG9mZnNldFBvc2l0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVGV4
dEdyYW51bGFyaXR5OjpXb3JkRW5kOiB7CisgICAgICAgIGlmICghdXRmMTZPZmZzZXQgJiYgbV9o
YXNMaXN0TWFya2VyQXRTdGFydCkKKyAgICAgICAgICAgIHJldHVybiB7IDAsIDEgfTsKKworICAg
ICAgICBzdGFydFBvc2l0aW9uID0gcHJldmlvdXNXb3JkUG9zaXRpb24ob2Zmc2V0UG9zaXRpb24p
OworICAgICAgICBhdXRvIHBvc2l0aW9uQmVmb3JlU3BhY2luZ0FuZFByZXZpb3VzV29yZCA9IHBy
ZXZpb3VzV29yZFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOworICAgICAgICBpZiAocG9zaXRpb25C
ZWZvcmVTcGFjaW5nQW5kUHJldmlvdXNXb3JkICE9IHN0YXJ0UG9zaXRpb24pCisgICAgICAgICAg
ICBzdGFydFBvc2l0aW9uID0gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkJlZm9yZVNwYWNpbmdB
bmRQcmV2aW91c1dvcmQpOworICAgICAgICBlbmRQb3N0aW9uID0gZW5kT2ZXb3JkKG9mZnNldFBv
c2l0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5
OjpTZW50ZW5jZVN0YXJ0OiB7CisgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydE9mU2VudGVu
Y2Uob2Zmc2V0UG9zaXRpb24pOworICAgICAgICBlbmRQb3N0aW9uID0gZW5kT2ZTZW50ZW5jZShz
dGFydFBvc2l0aW9uKTsKKyAgICAgICAgaWYgKG9mZnNldFBvc2l0aW9uID09IGVuZFBvc3Rpb24p
IHsKKyAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBuZXh0U2VudGVuY2VQb3NpdGlvbihzdGFy
dFBvc2l0aW9uKTsKICAgICAgICAgICAgIGVuZFBvc3Rpb24gPSBlbmRPZlNlbnRlbmNlKHN0YXJ0
UG9zaXRpb24pOwotICAgICAgICAgICAgaWYgKG9mZnNldFBvc2l0aW9uID09IGVuZFBvc3Rpb24p
IHsKLSAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gbmV4dFNlbnRlbmNlUG9zaXRpb24o
c3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgZW5kUG9zdGlvbiA9IGVuZE9mU2VudGVu
Y2Uoc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6U2VudGVuY2VFbmQ6Ci0gICAg
ICAgICAgICBzdGFydFBvc2l0aW9uID0gcHJldmlvdXNTZW50ZW5jZVBvc2l0aW9uKG9mZnNldFBv
c2l0aW9uKTsKLSAgICAgICAgICAgIGVuZFBvc3Rpb24gPSBlbmRPZlNlbnRlbmNlKG9mZnNldFBv
c2l0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRleHRHcmFudWxhcml0
eTo6TGluZVN0YXJ0OgotICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxvZ2ljYWxTdGFydE9m
TGluZShvZmZzZXRQb3NpdGlvbik7Ci0gICAgICAgICAgICBlbmRQb3N0aW9uID0gbmV4dExpbmVQ
b3NpdGlvbihvZmZzZXRQb3NpdGlvbiwgMCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBUZXh0R3JhbnVsYXJpdHk6OkxpbmVFbmQ6Ci0gICAgICAgICAgICBzdGFydFBvc2l0aW9u
ID0gbG9naWNhbFN0YXJ0T2ZMaW5lKG9mZnNldFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGVuZFBv
c3Rpb24gPSBsb2dpY2FsRW5kT2ZMaW5lKG9mZnNldFBvc2l0aW9uKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6UGFyYWdyYXBoOgotICAgICAgICAg
ICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0T2ZQYXJhZ3JhcGgob2Zmc2V0UG9zaXRpb24pOwotICAg
ICAgICAgICAgZW5kUG9zdGlvbiA9IGVuZE9mUGFyYWdyYXBoKG9mZnNldFBvc2l0aW9uKTsKLSAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIFRleHRHcmFudWxhcml0eTo6U2VudGVuY2VFbmQ6CisgICAgICAgIHN0YXJ0UG9zaXRpb24g
PSBwcmV2aW91c1NlbnRlbmNlUG9zaXRpb24ob2Zmc2V0UG9zaXRpb24pOworICAgICAgICBlbmRQ
b3N0aW9uID0gZW5kT2ZTZW50ZW5jZShvZmZzZXRQb3NpdGlvbik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpMaW5lU3RhcnQ6CisgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBsb2dpY2FsU3RhcnRPZkxpbmUob2Zmc2V0UG9zaXRpb24pOworICAgICAgICBlbmRQb3N0
aW9uID0gbmV4dExpbmVQb3NpdGlvbihvZmZzZXRQb3NpdGlvbiwgMCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVGV4dEdyYW51bGFyaXR5OjpMaW5lRW5kOgorICAgICAgICBzdGFydFBvc2l0
aW9uID0gbG9naWNhbFN0YXJ0T2ZMaW5lKG9mZnNldFBvc2l0aW9uKTsKKyAgICAgICAgZW5kUG9z
dGlvbiA9IGxvZ2ljYWxFbmRPZkxpbmUob2Zmc2V0UG9zaXRpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRleHRHcmFudWxhcml0eTo6UGFyYWdyYXBoOgorICAgICAgICBzdGFydFBvc2l0
aW9uID0gc3RhcnRPZlBhcmFncmFwaChvZmZzZXRQb3NpdGlvbik7CisgICAgICAgIGVuZFBvc3Rp
b24gPSBlbmRPZlBhcmFncmFwaChvZmZzZXRQb3NpdGlvbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KIAotICAgICAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0gbV9jb3JlT2JqZWN0LT5pbmRleEZvclZp
c2libGVQb3NpdGlvbihzdGFydFBvc2l0aW9uKTsKLSAgICAgICAgLy8gRm9yIG5vIHdvcmQgYm91
bmRhcmllcywgaW5jbHVkZSB0aGUgbGlzdCBtYXJrZXIgaWYgc3RhcnQgb2Zmc2V0IGlzIDAuCi0g
ICAgICAgIGlmICghc3RhcnRPZmZzZXQgJiYgbV9oYXNMaXN0TWFya2VyQXRTdGFydC5sb2FkKCkg
JiYgKGdyYW51bGFyaXR5ID09IFRleHRHcmFudWxhcml0eTo6V29yZFN0YXJ0IHx8IGdyYW51bGFy
aXR5ID09IFRleHRHcmFudWxhcml0eTo6V29yZEVuZCkpCi0gICAgICAgICAgICBzdGFydE9mZnNl
dCA9IGFkanVzdE91dHB1dE9mZnNldChzdGFydE9mZnNldCwgbV9oYXNMaXN0TWFya2VyQXRTdGFy
dC5sb2FkKCkpOwotICAgICAgICByZXR1cm4geyBzdGFydE9mZnNldCwgYWRqdXN0T3V0cHV0T2Zm
c2V0KG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oZW5kUG9zdGlvbiksIG1f
aGFzTGlzdE1hcmtlckF0U3RhcnQubG9hZCgpKSB9OwotICAgIH0pOworICAgIGF1dG8gc3RhcnRP
ZmZzZXQgPSBtX2NvcmVPYmplY3QtPmluZGV4Rm9yVmlzaWJsZVBvc2l0aW9uKHN0YXJ0UG9zaXRp
b24pOworICAgIC8vIEZvciBubyB3b3JkIGJvdW5kYXJpZXMsIGluY2x1ZGUgdGhlIGxpc3QgbWFy
a2VyIGlmIHN0YXJ0IG9mZnNldCBpcyAwLgorICAgIGlmICghc3RhcnRPZmZzZXQgJiYgbV9oYXNM
aXN0TWFya2VyQXRTdGFydCAmJiAoZ3JhbnVsYXJpdHkgPT0gVGV4dEdyYW51bGFyaXR5OjpXb3Jk
U3RhcnQgfHwgZ3JhbnVsYXJpdHkgPT0gVGV4dEdyYW51bGFyaXR5OjpXb3JkRW5kKSkKKyAgICAg
ICAgc3RhcnRPZmZzZXQgPSBhZGp1c3RPdXRwdXRPZmZzZXQoc3RhcnRPZmZzZXQsIG1faGFzTGlz
dE1hcmtlckF0U3RhcnQpOworICAgIHJldHVybiB7IHN0YXJ0T2Zmc2V0LCBhZGp1c3RPdXRwdXRP
ZmZzZXQobV9jb3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbihlbmRQb3N0aW9uKSwg
bV9oYXNMaXN0TWFya2VyQXRTdGFydCkgfTsKIH0KIAogQ1N0cmluZyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnRleHRBdE9mZnNldChpbnQgb2Zmc2V0LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KSBjb25zdAogewotICAgIFJF
TEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgYXV0byB1dGYxNlRleHQgPSB0ZXh0
KCk7CiAgICAgYXV0byB1dGY4VGV4dCA9IHV0ZjE2VGV4dC51dGY4KCk7CiAgICAgaWYgKHV0ZjhU
ZXh0LmlzTnVsbCgpKQpAQCAtNTA1LDcgKzQ4NCw2IEBAIENTdHJpbmcgQWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjp0ZXh0QXRPZmZzZXQoaW50IG9mZnNldCwgVGV4dEdyYW51bGFyaXR5IGdyYW51
CiAKIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmNoYXJhY3RlckF0T2Zmc2V0KGludCBv
ZmZzZXQpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBhdXRvIHV0ZjhUZXh0ID0gdGV4dCgpLnV0ZjgoKTsKICAgICBpZiAodXRmOFRleHQuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNTcwLDM1ICs1NDgsMjkgQEAgc3RkOjpvcHRpb25h
bDx1bnNpZ25lZD4gQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpjaGFyYWN0ZXJJbmRleChVQ2hh
ciBjaGFyYWN0ZXIKIAogSW50UmVjdCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmJvdW5kc0Zv
clJhbmdlKHVuc2lnbmVkIHV0ZjE2T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIHVpbnQzMl90IGNv
b3JkaW5hdGVUeXBlKSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZVZhbHVlRnJvbU1haW5UaHJlYWQ8SW50UmVjdD4oW3RoaXMsIHV0ZjE2T2Zmc2V0LCBsZW5ndGgs
IGNvb3JkaW5hdGVUeXBlXSgpIC0+IEludFJlY3QgewotICAgICAgICBpZiAobV9jb3JlT2JqZWN0
KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLQotICAg
ICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgaWYg
KCFtX2NvcmVPYmplY3QpCisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgYXV0byBleHRl
bnRzID0gbV9jb3JlT2JqZWN0LT5kb0FYQm91bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UodXRm
MTZPZmZzZXQsIGxlbmd0aCkpOworICAgIGF1dG8gZXh0ZW50cyA9IG1fY29yZU9iamVjdC0+ZG9B
WEJvdW5kc0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHV0ZjE2T2Zmc2V0LCBsZW5ndGgpKTsKIAot
ICAgICAgICBhdXRvKiBmcmFtZVZpZXcgPSBtX2NvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3
KCk7Ci0gICAgICAgIGlmICghZnJhbWVWaWV3KQotICAgICAgICAgICAgcmV0dXJuIGV4dGVudHM7
CisgICAgYXV0byogZnJhbWVWaWV3ID0gbV9jb3JlT2JqZWN0LT5kb2N1bWVudEZyYW1lVmlldygp
OworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm4gZXh0ZW50czsKIAotICAgICAg
ICBzd2l0Y2ggKGNvb3JkaW5hdGVUeXBlKSB7Ci0gICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5h
dGVUeXBlOjpTY3JlZW5Db29yZGluYXRlczoKLSAgICAgICAgICAgIHJldHVybiBmcmFtZVZpZXct
PmNvbnRlbnRzVG9TY3JlZW4oZXh0ZW50cyk7Ci0gICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5h
dGVUeXBlOjpXaW5kb3dDb29yZGluYXRlczoKLSAgICAgICAgICAgIHJldHVybiBmcmFtZVZpZXct
PmNvbnRlbnRzVG9XaW5kb3coZXh0ZW50cyk7Ci0gICAgICAgIGNhc2UgQXRzcGk6OkNvb3JkaW5h
dGVUeXBlOjpQYXJlbnRDb29yZGluYXRlczoKLSAgICAgICAgICAgIHJldHVybiBleHRlbnRzOwot
ICAgICAgICB9CisgICAgc3dpdGNoIChjb29yZGluYXRlVHlwZSkgeworICAgIGNhc2UgQXRzcGk6
OkNvb3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGluYXRlczoKKyAgICAgICAgcmV0dXJuIGZyYW1l
Vmlldy0+Y29udGVudHNUb1NjcmVlbihleHRlbnRzKTsKKyAgICBjYXNlIEF0c3BpOjpDb29yZGlu
YXRlVHlwZTo6V2luZG93Q29vcmRpbmF0ZXM6CisgICAgICAgIHJldHVybiBmcmFtZVZpZXctPmNv
bnRlbnRzVG9XaW5kb3coZXh0ZW50cyk7CisgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6
OlBhcmVudENvb3JkaW5hdGVzOgorICAgICAgICByZXR1cm4gZXh0ZW50czsKKyAgICB9CiAKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9KTsKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiBJbnRSZWN0IEFjY2Vzc2liaWxpdHlPYmplY3RB
dHNwaTo6dGV4dEV4dGVudHMoaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCB1aW50MzJf
dCBjb29yZGluYXRlVHlwZSkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOwogICAgIGF1dG8gdXRmOFRleHQg
PSB1dGYxNlRleHQudXRmOCgpOwogICAgIGlmICh1dGY4VGV4dC5pc051bGwoKSkKQEAgLTYyMSw0
MCArNTkzLDMwIEBAIEludFJlY3QgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0RXh0ZW50
cyhpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVpCiAKIGludCBBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6Om9mZnNldEF0UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50MzJf
dCBjb29yZGluYXRlVHlwZSkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhy
ZWFkKCkpOwogICAgIGF1dG8gdXRmMTZUZXh0ID0gdGV4dCgpOwogICAgIGF1dG8gdXRmOFRleHQg
PSB1dGYxNlRleHQudXRmOCgpOwogICAgIGlmICh1dGY4VGV4dC5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIC0xOwogCi0gICAgYXV0byB1dGYxNk9mZnNldCA9IEFjY2Vzc2liaWxpdHk6OnJldHJp
ZXZlVmFsdWVGcm9tTWFpblRocmVhZDxpbnQ+KFt0aGlzLCAmcG9pbnQsIGNvb3JkaW5hdGVUeXBl
XSgpIC0+IGludCB7Ci0gICAgICAgIGlmIChtX2NvcmVPYmplY3QpCi0gICAgICAgICAgICBtX2Nv
cmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgICAgIGlmICghbV9jb3JlT2Jq
ZWN0KQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIGF1dG8gY29udmVydGVkUG9p
bnQgPSBwb2ludDsKLSAgICAgICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1fY29yZU9iamVjdC0+
ZG9jdW1lbnRGcmFtZVZpZXcoKSkgewotICAgICAgICAgICAgc3dpdGNoIChjb29yZGluYXRlVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3Jk
aW5hdGVzOgotICAgICAgICAgICAgICAgIGNvbnZlcnRlZFBvaW50ID0gZnJhbWVWaWV3LT5zY3Jl
ZW5Ub0NvbnRlbnRzKHBvaW50KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpXaW5kb3dDb29yZGluYXRlczoKLSAgICAgICAg
ICAgICAgICBjb252ZXJ0ZWRQb2ludCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhwb2lu
dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIEF0c3BpOjpDb29y
ZGluYXRlVHlwZTo6UGFyZW50Q29vcmRpbmF0ZXM6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9CisgICAgYXV0byBjb252ZXJ0ZWRQb2ludCA9IHBvaW50OworICAgIGlmIChh
dXRvKiBmcmFtZVZpZXcgPSBtX2NvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCkpIHsKKyAg
ICAgICAgc3dpdGNoIChjb29yZGluYXRlVHlwZSkgeworICAgICAgICBjYXNlIEF0c3BpOjpDb29y
ZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXM6CisgICAgICAgICAgICBjb252ZXJ0ZWRQb2lu
dCA9IGZyYW1lVmlldy0+c2NyZWVuVG9Db250ZW50cyhwb2ludCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVz
OgorICAgICAgICAgICAgY29udmVydGVkUG9pbnQgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVu
dHMocG9pbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXRzcGk6OkNvb3Jk
aW5hdGVUeXBlOjpQYXJlbnRDb29yZGluYXRlczoKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisgICAgfQogCi0gICAgICAgIGF1dG8gcG9zaXRpb24gPSBtX2NvcmVPYmplY3QtPnZpc2li
bGVQb3NpdGlvbkZvclBvaW50KGNvbnZlcnRlZFBvaW50KTsKLSAgICAgICAgaWYgKHBvc2l0aW9u
LmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgICAgIHJldHVybiBhZGp1
c3RPdXRwdXRPZmZzZXQobV9jb3JlT2JqZWN0LT5pbmRleEZvclZpc2libGVQb3NpdGlvbihwb3Np
dGlvbiksIG1faGFzTGlzdE1hcmtlckF0U3RhcnQubG9hZCgpKTsKLSAgICB9KTsKKyAgICBhdXRv
IHBvc2l0aW9uID0gbV9jb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb252ZXJ0
ZWRQb2ludCk7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gLTE7
CiAKKyAgICBhdXRvIHV0ZjE2T2Zmc2V0ID0gYWRqdXN0T3V0cHV0T2Zmc2V0KG1fY29yZU9iamVj
dC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24ocG9zaXRpb24pLCBtX2hhc0xpc3RNYXJrZXJBdFN0
YXJ0KTsKICAgICBpZiAodXRmMTZPZmZzZXQgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIApA
QCAtNjYzLDcgKzYyNSw2IEBAIGludCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Om9mZnNldEF0
UG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBjb29yCiAKIEludFBvaW50IEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Ym91bmRzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5U
aHJlYWQoKSk7CiAgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKICAgICAgICAgcmV0dXJuIHsg
LTEsIC0xIH07CiAKQEAgLTcwMiwyMCArNjYzLDE0IEBAIEludFBvaW50IEFjY2Vzc2liaWxpdHlP
YmplY3RBdHNwaTo6Ym91bmRzRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
CiAKIEludFBvaW50IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0ZWRSYW5nZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRo
cmVhZDxJbnRQb2ludD4oW3RoaXNdKCkgLT4gSW50UG9pbnQgewotICAgICAgICBpZiAobV9jb3Jl
T2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsK
LQotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybiB7IC0xLCAt
MSB9OworICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4geyAtMSwgLTEgfTsK
IAotICAgICAgICByZXR1cm4gYm91bmRzRm9yU2VsZWN0aW9uKG1fY29yZU9iamVjdC0+c2VsZWN0
aW9uKCkpOwotICAgIH0pOworICAgIHJldHVybiBib3VuZHNGb3JTZWxlY3Rpb24obV9jb3JlT2Jq
ZWN0LT5zZWxlY3Rpb24oKSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpz
ZWxlY3Rpb25Cb3VuZHMoaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpIGNvbnN0CiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBhdXRvIHV0ZjE2VGV4
dCA9IHRleHQoKTsKICAgICBhdXRvIHV0ZjhUZXh0ID0gdXRmMTZUZXh0LnV0ZjgoKTsKICAgICBp
ZiAodXRmOFRleHQuaXNOdWxsKCkpCkBAIC03NDEsMjEgKzY5NiwxNSBAQCBib29sIEFjY2Vzc2li
aWxpdHlPYmplY3RBdHNwaTo6c2VsZWN0aW9uQm91bmRzKGludCYgc3RhcnRPZmZzZXQsIGludCYg
ZW5kT2Zmc2V0KQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2V0U2VsZWN0ZWRS
YW5nZSh1bnNpZ25lZCB1dGYxNk9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIEFjY2Vz
c2liaWxpdHk6OnBlcmZvcm1GdW5jdGlvbk9uTWFpblRocmVhZChbdGhpcywgdXRmMTZPZmZzZXQs
IGxlbmd0aF0gewotICAgICAgICBpZiAobV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgbV9jb3Jl
T2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLQotICAgICAgICBpZiAoIW1fY29yZU9iamVj
dCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGF1dG8gcmFuZ2UgPSBtX2NvcmVPYmplY3QtPnZpc2libGVQb3Np
dGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UodXRmMTZPZmZzZXQsIGxlbmd0aCkpOwot
ICAgICAgICBtX2NvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UocmFu
Z2UpOwotICAgIH0pOworICAgIGF1dG8gcmFuZ2UgPSBtX2NvcmVPYmplY3QtPnZpc2libGVQb3Np
dGlvblJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UodXRmMTZPZmZzZXQsIGxlbmd0aCkpOwor
ICAgIG1fY29yZU9iamVjdC0+c2V0U2VsZWN0ZWRWaXNpYmxlUG9zaXRpb25SYW5nZShyYW5nZSk7
CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZWxlY3RSYW5nZShpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRo
cmVhZCgpKTsKICAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKICAgICBhdXRvIHV0ZjhUZXh0
ID0gdXRmMTZUZXh0LnV0ZjgoKTsKICAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCkBAIC03Nzgs
NyArNzI3LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVjdFJhbmdlKGlu
dCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCkKIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0
QXRzcGk6OnNlbGVjdGlvbkNoYW5nZWQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1faW50
ZXJmYWNlcy5jb250YWlucyhJbnRlcmZhY2U6OlRleHQpKQogICAgICAgICByZXR1cm47CiAKQEAg
LTgwNiwxNjAgKzc1NCwxNTQgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNlbGVj
dGlvbkNoYW5nZWQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW8KIAogQWNjZXNzaWJp
bGl0eU9iamVjdEF0c3BpOjpUZXh0QXR0cmlidXRlcyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OnRleHRBdHRyaWJ1dGVzKHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHV0ZjE2T2Zmc2V0LCBib29s
IGluY2x1ZGVEZWZhdWx0KSBjb25zdAogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRy
aWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8VGV4dEF0dHJpYnV0ZXM+KFt0aGlzLCB1dGYxNk9mZnNl
dCwgaW5jbHVkZURlZmF1bHRdKCkgLT4gVGV4dEF0dHJpYnV0ZXMgewotICAgICAgICBpZiAobV9j
b3JlT2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUo
KTsKLQotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCB8fCAhbV9jb3JlT2JqZWN0LT5yZW5kZXJl
cigpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAoIW1fY29yZU9iamVjdCB8fCAh
bV9jb3JlT2JqZWN0LT5yZW5kZXJlcigpKQorICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAg
IGF1dG8gYWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVzID0gW3RoaXNdKEFYQ29yZU9iamVjdCog
YXhPYmplY3QsIGNvbnN0IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiBkZWZhdWx0QXR0cmlidXRl
cykgLT4gSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gewotICAgICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4gYXR0cmlidXRlczsKLSAgICAgICAgICAgIGF1dG8mIHN0eWxlID0gYXhPYmpl
Y3QtPnJlbmRlcmVyKCktPnN0eWxlKCk7CisgICAgYXV0byBhY2Nlc3NpYmlsaXR5VGV4dEF0dHJp
YnV0ZXMgPSBbdGhpc10oQVhDb3JlT2JqZWN0KiBheE9iamVjdCwgY29uc3QgSGFzaE1hcDxTdHJp
bmcsIFN0cmluZz4mIGRlZmF1bHRBdHRyaWJ1dGVzKSAtPiBIYXNoTWFwPFN0cmluZywgU3RyaW5n
PiB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IGF0dHJpYnV0ZXM7CisgICAgICAg
IGF1dG8mIHN0eWxlID0gYXhPYmplY3QtPnJlbmRlcmVyKCktPnN0eWxlKCk7CiAKLSAgICAgICAg
ICAgIGF1dG8gYWRkQXR0cmlidXRlSWZOZWVkZWQgPSBbJl0oY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRBdHRyaWJ1
dGVzLmlzRW1wdHkoKSB8fCBkZWZhdWx0QXR0cmlidXRlcy5nZXQobmFtZSkgIT0gdmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMuYWRkKG5hbWUsIHZhbHVlKTsKLSAgICAgICAg
ICAgIH07CisgICAgICAgIGF1dG8gYWRkQXR0cmlidXRlSWZOZWVkZWQgPSBbJl0oY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSB7CisgICAgICAgICAgICBpZiAoZGVmYXVs
dEF0dHJpYnV0ZXMuaXNFbXB0eSgpIHx8IGRlZmF1bHRBdHRyaWJ1dGVzLmdldChuYW1lKSAhPSB2
YWx1ZSkKKyAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmFkZChuYW1lLCB2YWx1ZSk7CisgICAg
ICAgIH07CiAKLSAgICAgICAgICAgIGF1dG8gYmdDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRl
bnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7Ci0gICAgICAgICAgICBpZiAoYmdD
b2xvci5pc1ZhbGlkKCkgJiYgYmdDb2xvci5pc1Zpc2libGUoKSkgewotICAgICAgICAgICAgICAg
IGF1dG8gW3IsIGcsIGIsIGFdID0gYmdDb2xvci50b0NvbG9yVHlwZUxvc3N5PFNSR0JBPHVpbnQ4
X3Q+PigpLnJlc29sdmVkKCk7Ci0gICAgICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQo
ImJnLWNvbG9yIl9zLCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgIGF1dG8gYmdDb2xvciA9IHN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihD
U1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgICAgIGlmIChiZ0NvbG9yLmlzVmFsaWQo
KSAmJiBiZ0NvbG9yLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBh
XSA9IGJnQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgp
OworICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImJnLWNvbG9yIl9zLCBtYWtlU3Ry
aW5nKHIsICcsJywgZywgJywnLCBiKSk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgYXV0byBm
Z0NvbG9yID0gc3R5bGUudmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpOwot
ICAgICAgICAgICAgaWYgKGZnQ29sb3IuaXNWYWxpZCgpICYmIGZnQ29sb3IuaXNWaXNpYmxlKCkp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGZnQ29sb3IudG9Db2xvclR5
cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5yZXNvbHZlZCgpOwotICAgICAgICAgICAgICAgIGFk
ZEF0dHJpYnV0ZUlmTmVlZGVkKCJmZy1jb2xvciJfcywgbWFrZVN0cmluZyhyLCAnLCcsIGcsICcs
JywgYikpOwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIGZnQ29sb3IgPSBzdHlsZS52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CisgICAgICAgIGlmIChmZ0NvbG9y
LmlzVmFsaWQoKSAmJiBmZ0NvbG9yLmlzVmlzaWJsZSgpKSB7CisgICAgICAgICAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IGZnQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1aW50OF90Pj4oKS5y
ZXNvbHZlZCgpOworICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImZnLWNvbG9yIl9z
LCBtYWtlU3RyaW5nKHIsICcsJywgZywgJywnLCBiKSk7CisgICAgICAgIH0KIAotICAgICAgICAg
ICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImZhbWlseS1uYW1lIl9zLCBzdHlsZS5mb250Q2FzY2Fk
ZSgpLmZpcnN0RmFtaWx5KCkpOwotICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoInNp
emUiX3MsIG1ha2VTdHJpbmcoc3RkOjpyb3VuZChzdHlsZS5jb21wdXRlZEZvbnRQaXhlbFNpemUo
KSAqIDcyIC8gV2ViQ29yZTo6c2NyZWVuRFBJKCkpLCAicHQiKSk7Ci0gICAgICAgICAgICBhZGRB
dHRyaWJ1dGVJZk5lZWRlZCgid2VpZ2h0Il9zLCBtYWtlU3RyaW5nKHN0YXRpY19jYXN0PGZsb2F0
PihzdHlsZS5mb250Q2FzY2FkZSgpLndlaWdodCgpKSkpOwotICAgICAgICAgICAgYWRkQXR0cmli
dXRlSWZOZWVkZWQoInN0eWxlIl9zLCBzdHlsZS5mb250Q2FzY2FkZSgpLml0YWxpYygpID8gIml0
YWxpYyIgOiAibm9ybWFsIik7Ci0gICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgic3Ry
aWtldGhyb3VnaCJfcywgc3R5bGUudGV4dERlY29yYXRpb24oKSAmIFRleHREZWNvcmF0aW9uTGlu
ZTo6TGluZVRocm91Z2ggPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICAgICAgICAgIGFkZEF0dHJp
YnV0ZUlmTmVlZGVkKCJ1bmRlcmxpbmUiX3MsIHN0eWxlLnRleHREZWNvcmF0aW9uKCkgJiBUZXh0
RGVjb3JhdGlvbkxpbmU6OlVuZGVybGluZSA/ICJzaW5nbGUiIDogIm5vbmUiKTsKLSAgICAgICAg
ICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJpbnZpc2libGUiX3MsIHN0eWxlLnZpc2liaWxpdHko
KSA9PSBWaXNpYmlsaXR5OjpIaWRkZW4gPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICAgICAgICAg
IGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJlZGl0YWJsZSJfcywgbV9jb3JlT2JqZWN0LT5jYW5TZXRW
YWx1ZUF0dHJpYnV0ZSgpID8gInRydWUiIDogImZhbHNlIik7Ci0gICAgICAgICAgICBhZGRBdHRy
aWJ1dGVJZk5lZWRlZCgiZGlyZWN0aW9uIl9zLCBzdHlsZS5kaXJlY3Rpb24oKSA9PSBUZXh0RGly
ZWN0aW9uOjpMVFIgPyAibHRyIiA6ICJydGwiKTsKLQotICAgICAgICAgICAgaWYgKCFzdHlsZS50
ZXh0SW5kZW50KCkuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJ
Zk5lZWRlZCgiaW5kZW50Il9zLCBtYWtlU3RyaW5nKHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRleHRJ
bmRlbnQoKSwgbV9jb3JlT2JqZWN0LT5zaXplKCkud2lkdGgoKSkudG9JbnQoKSkpOwotCi0gICAg
ICAgICAgICBzd2l0Y2ggKHN0eWxlLnRleHRBbGlnbigpKSB7Ci0gICAgICAgICAgICBjYXNlIFRl
eHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgICAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkxlZnQ6Ci0gICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAg
ICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImp1c3RpZmljYXRpb24iX3MsICJsZWZ0
Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRleHRBbGlnbk1v
ZGU6OlJpZ2h0OgotICAgICAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDoK
LSAgICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgianVzdGlmaWNhdGlvbiJfcywg
InJpZ2h0Iik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OkNlbnRlcjoKLSAgICAgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0
Q2VudGVyOgotICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJqdXN0aWZpY2F0
aW9uIl9zLCAiY2VudGVyIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICAgICAgYWRkQXR0cmlidXRl
SWZOZWVkZWQoImp1c3RpZmljYXRpb24iX3MsICJmaWxsIik7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJmYW1pbHkt
bmFtZSJfcywgc3R5bGUuZm9udENhc2NhZGUoKS5maXJzdEZhbWlseSgpKTsKKyAgICAgICAgYWRk
QXR0cmlidXRlSWZOZWVkZWQoInNpemUiX3MsIG1ha2VTdHJpbmcoc3RkOjpyb3VuZChzdHlsZS5j
b21wdXRlZEZvbnRQaXhlbFNpemUoKSAqIDcyIC8gV2ViQ29yZTo6c2NyZWVuRFBJKCkpLCAicHQi
KSk7CisgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJ3ZWlnaHQiX3MsIG1ha2VTdHJpbmco
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0eWxlLmZvbnRDYXNjYWRlKCkud2VpZ2h0KCkpKSk7CisgICAg
ICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJzdHlsZSJfcywgc3R5bGUuZm9udENhc2NhZGUoKS5p
dGFsaWMoKSA/ICJpdGFsaWMiIDogIm5vcm1hbCIpOworICAgICAgICBhZGRBdHRyaWJ1dGVJZk5l
ZWRlZCgic3RyaWtldGhyb3VnaCJfcywgc3R5bGUudGV4dERlY29yYXRpb24oKSAmIFRleHREZWNv
cmF0aW9uTGluZTo6TGluZVRocm91Z2ggPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgYWRk
QXR0cmlidXRlSWZOZWVkZWQoInVuZGVybGluZSJfcywgc3R5bGUudGV4dERlY29yYXRpb24oKSAm
IFRleHREZWNvcmF0aW9uTGluZTo6VW5kZXJsaW5lID8gInNpbmdsZSIgOiAibm9uZSIpOworICAg
ICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgiaW52aXNpYmxlIl9zLCBzdHlsZS52aXNpYmlsaXR5
KCkgPT0gVmlzaWJpbGl0eTo6SGlkZGVuID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAgIGFk
ZEF0dHJpYnV0ZUlmTmVlZGVkKCJlZGl0YWJsZSJfcywgbV9jb3JlT2JqZWN0LT5jYW5TZXRWYWx1
ZUF0dHJpYnV0ZSgpID8gInRydWUiIDogImZhbHNlIik7CisgICAgICAgIGFkZEF0dHJpYnV0ZUlm
TmVlZGVkKCJkaXJlY3Rpb24iX3MsIHN0eWxlLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OkxUUiA/ICJsdHIiIDogInJ0bCIpOworCisgICAgICAgIGlmICghc3R5bGUudGV4dEluZGVudCgp
LmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgiaW5kZW50
Il9zLCBtYWtlU3RyaW5nKHZhbHVlRm9yTGVuZ3RoKHN0eWxlLnRleHRJbmRlbnQoKSwgbV9jb3Jl
T2JqZWN0LT5zaXplKCkud2lkdGgoKSkudG9JbnQoKSkpOworCisgICAgICAgIHN3aXRjaCAoc3R5
bGUudGV4dEFsaWduKCkpIHsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKKyAg
ICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpMZWZ0OgorICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OldlYktpdExlZnQ6CisgICAgICAgICAgICBhZGRBdHRyaWJ1dGVJZk5lZWRlZCgianVzdGlmaWNh
dGlvbiJfcywgImxlZnQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OlJpZ2h0OgorICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0
OgorICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImp1c3RpZmljYXRpb24iX3MsICJy
aWdodCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
Q2VudGVyOgorICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKKyAgICAg
ICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVlZGVkKCJqdXN0aWZpY2F0aW9uIl9zLCAiY2VudGVyIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OgorICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImp1c3RpZmljYXRpb24iX3MsICJm
aWxsIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJp
bmcgaW52YWxpZFN0YXR1cyA9IG1fY29yZU9iamVjdC0+aW52YWxpZFN0YXR1cygpOwotICAgICAg
ICAgICAgaWYgKGludmFsaWRTdGF0dXMgIT0gImZhbHNlIikKLSAgICAgICAgICAgICAgICBhZGRB
dHRyaWJ1dGVJZk5lZWRlZCgiaW52YWxpZCJfcywgaW52YWxpZFN0YXR1cyk7CisgICAgICAgIFN0
cmluZyBpbnZhbGlkU3RhdHVzID0gbV9jb3JlT2JqZWN0LT5pbnZhbGlkU3RhdHVzKCk7CisgICAg
ICAgIGlmIChpbnZhbGlkU3RhdHVzICE9ICJmYWxzZSIpCisgICAgICAgICAgICBhZGRBdHRyaWJ1
dGVJZk5lZWRlZCgiaW52YWxpZCJfcywgaW52YWxpZFN0YXR1cyk7CiAKLSAgICAgICAgICAgIFN0
cmluZyBsYW5ndWFnZSA9IG1fY29yZU9iamVjdC0+bGFuZ3VhZ2UoKTsKLSAgICAgICAgICAgIGlm
ICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGFkZEF0dHJpYnV0ZUlmTmVl
ZGVkKCJsYW5ndWFnZSJfcywgbGFuZ3VhZ2UpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSBt
X2NvcmVPYmplY3QtPmxhbmd1YWdlKCk7CisgICAgICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgp
KQorICAgICAgICAgICAgYWRkQXR0cmlidXRlSWZOZWVkZWQoImxhbmd1YWdlIl9zLCBsYW5ndWFn
ZSk7CiAKLSAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzOwotICAgICAgICB9OworICAgICAg
ICByZXR1cm4gYXR0cmlidXRlczsKKyAgICB9OwogCi0gICAgICAgIGF1dG8gZGVmYXVsdEF0dHJp
YnV0ZXMgPSBhY2Nlc3NpYmlsaXR5VGV4dEF0dHJpYnV0ZXMobV9jb3JlT2JqZWN0LCB7IH0pOwot
ICAgICAgICBpZiAoIXV0ZjE2T2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIHsgZGVmYXVsdEF0
dHJpYnV0ZXMsIC0xLCAtMSB9OworICAgIGF1dG8gZGVmYXVsdEF0dHJpYnV0ZXMgPSBhY2Nlc3Np
YmlsaXR5VGV4dEF0dHJpYnV0ZXMobV9jb3JlT2JqZWN0LCB7IH0pOworICAgIGlmICghdXRmMTZP
ZmZzZXQpCisgICAgICAgIHJldHVybiB7IGRlZmF1bHRBdHRyaWJ1dGVzLCAtMSwgLTEgfTsKIAot
ICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdE1hcmtlcj4oKm1fY29yZU9iamVjdC0+cmVuZGVyZXIo
KSkpCi0gICAgICAgICAgICByZXR1cm4geyBkZWZhdWx0QXR0cmlidXRlcywgMCwgc3RhdGljX2Nh
c3Q8aW50PihtX2NvcmVPYmplY3QtPnN0cmluZ1ZhbHVlKCkubGVuZ3RoKCkpIH07CisgICAgaWYg
KGlzPFJlbmRlckxpc3RNYXJrZXI+KCptX2NvcmVPYmplY3QtPnJlbmRlcmVyKCkpKQorICAgICAg
ICByZXR1cm4geyBkZWZhdWx0QXR0cmlidXRlcywgMCwgc3RhdGljX2Nhc3Q8aW50PihtX2NvcmVP
YmplY3QtPnN0cmluZ1ZhbHVlKCkubGVuZ3RoKCkpIH07CiAKLSAgICAgICAgaWYgKCFtX2NvcmVP
YmplY3QtPm5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiB7IGRlZmF1bHRBdHRyaWJ1dGVzLCAt
MSwgLTEgfTsKKyAgICBpZiAoIW1fY29yZU9iamVjdC0+bm9kZSgpKQorICAgICAgICByZXR1cm4g
eyBkZWZhdWx0QXR0cmlidXRlcywgLTEsIC0xIH07CiAKLSAgICAgICAgaWYgKCEqdXRmMTZPZmZz
ZXQgJiYgbV9oYXNMaXN0TWFya2VyQXRTdGFydC5sb2FkKCkpIHsKLSAgICAgICAgICAgIC8vIEFs
d2F5cyBjb25zaWRlciBsaXN0IG1hcmtlciBhbiBpbmRlcGVuZGVudCBydW4uCi0gICAgICAgICAg
ICBhdXRvIGF0dHJpYnV0ZXMgPSBhY2Nlc3NpYmlsaXR5VGV4dEF0dHJpYnV0ZXMobV9jb3JlT2Jq
ZWN0LT5jaGlsZHJlbigpWzBdLmdldCgpLCBkZWZhdWx0QXR0cmlidXRlcyk7Ci0gICAgICAgICAg
ICBpZiAoIWluY2x1ZGVEZWZhdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiB7IGF0dHJpYnV0
ZXMsIDAsIDEgfTsKKyAgICBpZiAoISp1dGYxNk9mZnNldCAmJiBtX2hhc0xpc3RNYXJrZXJBdFN0
YXJ0KSB7CisgICAgICAgIC8vIEFsd2F5cyBjb25zaWRlciBsaXN0IG1hcmtlciBhbiBpbmRlcGVu
ZGVudCBydW4uCisgICAgICAgIGF1dG8gYXR0cmlidXRlcyA9IGFjY2Vzc2liaWxpdHlUZXh0QXR0
cmlidXRlcyhtX2NvcmVPYmplY3QtPmNoaWxkcmVuKClbMF0uZ2V0KCksIGRlZmF1bHRBdHRyaWJ1
dGVzKTsKKyAgICAgICAgaWYgKCFpbmNsdWRlRGVmYXVsdCkKKyAgICAgICAgICAgIHJldHVybiB7
IGF0dHJpYnV0ZXMsIDAsIDEgfTsKIAotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IGF0dHJpYnV0ZXMpCi0gICAgICAgICAgICAgICAgZGVmYXVsdEF0dHJpYnV0ZXMuc2V0KGl0Lmtl
eSwgaXQudmFsdWUpOwotICAgICAgICAgICAgcmV0dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMsIDAs
IDEgfTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogYXR0cmlidXRl
cykKKyAgICAgICAgICAgIGRlZmF1bHRBdHRyaWJ1dGVzLnNldChpdC5rZXksIGl0LnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMsIDAsIDEgfTsKKyAgICB9CiAKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIG9mZnNldFBvc2l0aW9uID0gbV9jb3JlT2JqZWN0LT52aXNp
YmxlUG9zaXRpb25Gb3JJbmRleChhZGp1c3RJbnB1dE9mZnNldCgqdXRmMTZPZmZzZXQsIG1faGFz
TGlzdE1hcmtlckF0U3RhcnQubG9hZCgpKSk7Ci0gICAgICAgIGF1dG8qIGNoaWxkTm9kZSA9IG9m
ZnNldFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKTsKLSAgICAgICAg
aWYgKCFjaGlsZE5vZGUpCi0gICAgICAgICAgICByZXR1cm4geyBkZWZhdWx0QXR0cmlidXRlcywg
LTEsIC0xIH07CisgICAgVmlzaWJsZVBvc2l0aW9uIG9mZnNldFBvc2l0aW9uID0gbV9jb3JlT2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleChhZGp1c3RJbnB1dE9mZnNldCgqdXRmMTZPZmZz
ZXQsIG1faGFzTGlzdE1hcmtlckF0U3RhcnQpKTsKKyAgICBhdXRvKiBjaGlsZE5vZGUgPSBvZmZz
ZXRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgaWYgKCFj
aGlsZE5vZGUpCisgICAgICAgIHJldHVybiB7IGRlZmF1bHRBdHRyaWJ1dGVzLCAtMSwgLTEgfTsK
IAotICAgICAgICBhdXRvKiBjaGlsZFJlbmRlcmVyID0gY2hpbGROb2RlLT5yZW5kZXJlcigpOwot
ICAgICAgICBpZiAoIWNoaWxkUmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm4geyBkZWZhdWx0
QXR0cmlidXRlcywgLTEsIC0xIH07CisgICAgYXV0byogY2hpbGRSZW5kZXJlciA9IGNoaWxkTm9k
ZS0+cmVuZGVyZXIoKTsKKyAgICBpZiAoIWNoaWxkUmVuZGVyZXIpCisgICAgICAgIHJldHVybiB7
IGRlZmF1bHRBdHRyaWJ1dGVzLCAtMSwgLTEgfTsKIAotICAgICAgICBhdXRvKiBjaGlsZEF4T2Jq
ZWN0ID0gY2hpbGRSZW5kZXJlci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldChjaGls
ZFJlbmRlcmVyKTsKLSAgICAgICAgaWYgKCFjaGlsZEF4T2JqZWN0IHx8IGNoaWxkQXhPYmplY3Qg
PT0gbV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMs
IC0xLCAtMSB9OworICAgIGF1dG8qIGNoaWxkQXhPYmplY3QgPSBjaGlsZFJlbmRlcmVyLT5kb2N1
bWVudCgpLmF4T2JqZWN0Q2FjaGUoKS0+Z2V0KGNoaWxkUmVuZGVyZXIpOworICAgIGlmICghY2hp
bGRBeE9iamVjdCB8fCBjaGlsZEF4T2JqZWN0ID09IG1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0
dXJuIHsgZGVmYXVsdEF0dHJpYnV0ZXMsIC0xLCAtMSB9OwogCi0gICAgICAgIGF1dG8gYXR0cmli
dXRlcyA9IGFjY2Vzc2liaWxpdHlUZXh0QXR0cmlidXRlcyhjaGlsZEF4T2JqZWN0LCBkZWZhdWx0
QXR0cmlidXRlcyk7Ci0gICAgICAgIGF1dG8gZmlyc3RWYWxpZFBvc2l0aW9uID0gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG1fY29yZU9iamVjdC0+bm9kZSgpLT5maXJzdERlc2NlbmRhbnQo
KSk7Ci0gICAgICAgIGF1dG8gbGFzdFZhbGlkUG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0
ZXJOb2RlKG1fY29yZU9iamVjdC0+bm9kZSgpLT5sYXN0RGVzY2VuZGFudCgpKTsKKyAgICBhdXRv
IGF0dHJpYnV0ZXMgPSBhY2Nlc3NpYmlsaXR5VGV4dEF0dHJpYnV0ZXMoY2hpbGRBeE9iamVjdCwg
ZGVmYXVsdEF0dHJpYnV0ZXMpOworICAgIGF1dG8gZmlyc3RWYWxpZFBvc2l0aW9uID0gZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKG1fY29yZU9iamVjdC0+bm9kZSgpLT5maXJzdERlc2NlbmRh
bnQoKSk7CisgICAgYXV0byBsYXN0VmFsaWRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRl
ck5vZGUobV9jb3JlT2JqZWN0LT5ub2RlKCktPmxhc3REZXNjZW5kYW50KCkpOwogCi0gICAgICAg
IGF1dG8qIHN0YXJ0UmVuZGVyZXIgPSBjaGlsZFJlbmRlcmVyOwotICAgICAgICBhdXRvIHN0YXJ0
UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnRSZW5kZXJlci0+bm9k
ZSgpKTsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSBjaGlsZFJlbmRlcmVyLT5wcmV2
aW91c0luUHJlT3JkZXIoKTsgciAmJiBzdGFydFBvc2l0aW9uID4gZmlyc3RWYWxpZFBvc2l0aW9u
OyByID0gci0+cHJldmlvdXNJblByZU9yZGVyKCkpIHsKLSAgICAgICAgICAgIGlmIChyLT5maXJz
dENoaWxkU2xvdygpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGF1dG8qIHN0YXJ0
UmVuZGVyZXIgPSBjaGlsZFJlbmRlcmVyOworICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGZpcnN0
UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShzdGFydFJlbmRlcmVyLT5ub2RlKCkpOworICAgIGZvciAo
UmVuZGVyT2JqZWN0KiByID0gY2hpbGRSZW5kZXJlci0+cHJldmlvdXNJblByZU9yZGVyKCk7IHIg
JiYgc3RhcnRQb3NpdGlvbiA+IGZpcnN0VmFsaWRQb3NpdGlvbjsgciA9IHItPnByZXZpb3VzSW5Q
cmVPcmRlcigpKSB7CisgICAgICAgIGlmIChyLT5maXJzdENoaWxkU2xvdygpKQorICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1dG8gY2hpbGRBdHRyaWJ1dGVzID0gYWNjZXNz
aWJpbGl0eVRleHRBdHRyaWJ1dGVzKHItPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXQo
ciksIGRlZmF1bHRBdHRyaWJ1dGVzKTsKLSAgICAgICAgICAgIGlmIChjaGlsZEF0dHJpYnV0ZXMg
IT0gYXR0cmlidXRlcykKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXV0byBjaGls
ZEF0dHJpYnV0ZXMgPSBhY2Nlc3NpYmlsaXR5VGV4dEF0dHJpYnV0ZXMoci0+ZG9jdW1lbnQoKS5h
eE9iamVjdENhY2hlKCktPmdldChyKSwgZGVmYXVsdEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAo
Y2hpbGRBdHRyaWJ1dGVzICE9IGF0dHJpYnV0ZXMpCisgICAgICAgICAgICBicmVhazsKIAotICAg
ICAgICAgICAgc3RhcnRSZW5kZXJlciA9IHI7Ci0gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0g
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHN0YXJ0UmVuZGVyZXItPm5vZGUoKSk7Ci0gICAg
ICAgIH0KKyAgICAgICAgc3RhcnRSZW5kZXJlciA9IHI7CisgICAgICAgIHN0YXJ0UG9zaXRpb24g
PSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoc3RhcnRSZW5kZXJlci0+bm9kZSgpKTsKKyAg
ICB9CiAKLSAgICAgICAgYXV0byogZW5kUmVuZGVyZXIgPSBjaGlsZFJlbmRlcmVyOwotICAgICAg
ICBhdXRvIGVuZFBvc2l0aW9uID0gbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShlbmRSZW5kZXJl
ci0+bm9kZSgpKTsKLSAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIHIgPSBjaGlsZFJlbmRlcmVy
LT5uZXh0SW5QcmVPcmRlcigpOyByICYmIGVuZFBvc2l0aW9uIDwgbGFzdFZhbGlkUG9zaXRpb247
IHIgPSByLT5uZXh0SW5QcmVPcmRlcigpKSB7Ci0gICAgICAgICAgICBpZiAoci0+Zmlyc3RDaGls
ZFNsb3coKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICBhdXRvKiBlbmRSZW5kZXJl
ciA9IGNoaWxkUmVuZGVyZXI7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbklu
T3JBZnRlck5vZGUoZW5kUmVuZGVyZXItPm5vZGUoKSk7CisgICAgZm9yIChSZW5kZXJPYmplY3Qq
IHIgPSBjaGlsZFJlbmRlcmVyLT5uZXh0SW5QcmVPcmRlcigpOyByICYmIGVuZFBvc2l0aW9uIDwg
bGFzdFZhbGlkUG9zaXRpb247IHIgPSByLT5uZXh0SW5QcmVPcmRlcigpKSB7CisgICAgICAgIGlm
IChyLT5maXJzdENoaWxkU2xvdygpKQorICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
ICAgIGF1dG8gY2hpbGRBdHRyaWJ1dGVzID0gYWNjZXNzaWJpbGl0eVRleHRBdHRyaWJ1dGVzKHIt
PmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpLT5nZXQociksIGRlZmF1bHRBdHRyaWJ1dGVzKTsK
LSAgICAgICAgICAgIGlmIChjaGlsZEF0dHJpYnV0ZXMgIT0gYXR0cmlidXRlcykKLSAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgYXV0byBjaGlsZEF0dHJpYnV0ZXMgPSBhY2Nlc3NpYmls
aXR5VGV4dEF0dHJpYnV0ZXMoci0+ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCktPmdldChyKSwg
ZGVmYXVsdEF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoY2hpbGRBdHRyaWJ1dGVzICE9IGF0dHJp
YnV0ZXMpCisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgZW5kUmVuZGVyZXIgPSBy
OwotICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVu
ZFJlbmRlcmVyLT5ub2RlKCkpOwotICAgICAgICB9CisgICAgICAgIGVuZFJlbmRlcmVyID0gcjsK
KyAgICAgICAgZW5kUG9zaXRpb24gPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKGVuZFJlbmRl
cmVyLT5ub2RlKCkpOworICAgIH0KIAotICAgICAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0gYWRqdXN0
T3V0cHV0T2Zmc2V0KG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24oc3RhcnRQ
b3NpdGlvbiksIG1faGFzTGlzdE1hcmtlckF0U3RhcnQubG9hZCgpKTsKLSAgICAgICAgYXV0byBl
bmRPZmZzZXQgPSBhZGp1c3RPdXRwdXRPZmZzZXQobV9jb3JlT2JqZWN0LT5pbmRleEZvclZpc2li
bGVQb3NpdGlvbihlbmRQb3NpdGlvbiksIG1faGFzTGlzdE1hcmtlckF0U3RhcnQubG9hZCgpKTsK
LSAgICAgICAgaWYgKCFpbmNsdWRlRGVmYXVsdCkKLSAgICAgICAgICAgIHJldHVybiB7IGF0dHJp
YnV0ZXMsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgfTsKKyAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0g
YWRqdXN0T3V0cHV0T2Zmc2V0KG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24o
c3RhcnRQb3NpdGlvbiksIG1faGFzTGlzdE1hcmtlckF0U3RhcnQpOworICAgIGF1dG8gZW5kT2Zm
c2V0ID0gYWRqdXN0T3V0cHV0T2Zmc2V0KG1fY29yZU9iamVjdC0+aW5kZXhGb3JWaXNpYmxlUG9z
aXRpb24oZW5kUG9zaXRpb24pLCBtX2hhc0xpc3RNYXJrZXJBdFN0YXJ0KTsKKyAgICBpZiAoIWlu
Y2x1ZGVEZWZhdWx0KQorICAgICAgICByZXR1cm4geyBhdHRyaWJ1dGVzLCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0IH07CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMp
Ci0gICAgICAgICAgICBkZWZhdWx0QXR0cmlidXRlcy5zZXQoaXQua2V5LCBpdC52YWx1ZSk7Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IGF0dHJpYnV0ZXMpCisgICAgICAgIGRlZmF1bHRBdHRy
aWJ1dGVzLnNldChpdC5rZXksIGl0LnZhbHVlKTsKIAotICAgICAgICByZXR1cm4geyBkZWZhdWx0
QXR0cmlidXRlcywgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCB9OwotICAgIH0pOworICAgIHJldHVy
biB7IGRlZmF1bHRBdHRyaWJ1dGVzLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IH07CiB9CiAKIEFj
Y2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6VGV4dEF0dHJpYnV0ZXMgQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpOjp0ZXh0QXR0cmlidXRlc1dpdGhVVEY4T2Zmc2V0KHN0ZDo6b3B0aW9uYWw8aW50PiBv
ZmZzZXQsIGJvb2wgaW5jbHVkZURlZmF1bHQpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
IWlzTWFpblRocmVhZCgpKTsKICAgICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKICAgICBhdXRv
IHV0ZjhUZXh0ID0gdXRmMTZUZXh0LnV0ZjgoKTsKICAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkp
CkBAIC05ODYsNyArOTI4LDYgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpUZXh0QXR0cmli
dXRlcyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRBdHRyaWJ1dGUKIAogdm9pZCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnRleHRBdHRyaWJ1dGVzQ2hhbmdlZCgpCiB7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9pbnRlcmZhY2VzLmNvbnRh
aW5zKEludGVyZmFjZTo6VGV4dCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTk1LDcgKzkzNiw2
IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjp0ZXh0QXR0cmlidXRlc0NoYW5nZWQo
KQogCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Nyb2xsVG9NYWtlVmlzaWJsZShp
bnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVpbnQzMl90IHNjcm9sbFR5cGUpIGNvbnN0
CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICBhdXRvIHV0ZjE2
VGV4dCA9IHRleHQoKTsKICAgICBhdXRvIHV0ZjhUZXh0ID0gdXRmMTZUZXh0LnV0ZjgoKTsKICAg
ICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCkBAIC0xMDEyLDU4ICs5NTIsNTEgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OnNjcm9sbFRvTWFrZVZpc2libGUoaW50IHN0YXJ0T2Zmc2V0
LCBpbnQgZW5kT2Zmc2UKICAgICBhdXRvIG1hcHBpbmcgPSBvZmZzZXRNYXBwaW5nKHV0ZjE2VGV4
dCk7CiAgICAgYXV0byB1dGYxNlN0YXJ0T2Zmc2V0ID0gVVRGOE9mZnNldFRvVVRGMTYobWFwcGlu
Zywgc3RhcnRPZmZzZXQpOwogICAgIGF1dG8gdXRmMTZFbmRPZmZzZXQgPSBVVEY4T2Zmc2V0VG9V
VEYxNihtYXBwaW5nLCBlbmRPZmZzZXQpOwotICAgIEFjY2Vzc2liaWxpdHk6OnBlcmZvcm1GdW5j
dGlvbk9uTWFpblRocmVhZChbdGhpcywgdXRmMTZTdGFydE9mZnNldCwgdXRmMTZFbmRPZmZzZXQs
IHNjcm9sbFR5cGVdIHsKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIG1f
Y29yZU9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0KLSAgICAgICAgaWYgKCFtX2NvcmVP
YmplY3QgfHwgIW1fY29yZU9iamVjdC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIW1fY29yZU9iamVjdC0+cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICAgICAgSW50UmVjdCByZWN0ID0gbV9jb3JlT2JqZWN0LT5kb0FYQm91bmRzRm9yUmFu
Z2UoUGxhaW5UZXh0UmFuZ2UodXRmMTZTdGFydE9mZnNldCwgdXRmMTZFbmRPZmZzZXQgLSB1dGYx
NlN0YXJ0T2Zmc2V0KSk7CisgICAgSW50UmVjdCByZWN0ID0gbV9jb3JlT2JqZWN0LT5kb0FYQm91
bmRzRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UodXRmMTZTdGFydE9mZnNldCwgdXRmMTZFbmRPZmZz
ZXQgLSB1dGYxNlN0YXJ0T2Zmc2V0KSk7CiAKLSAgICAgICAgaWYgKG1fY29yZU9iamVjdC0+aXNT
Y3JvbGxWaWV3KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiBwYXJlbnQgPSBtX2NvcmVPYmpl
Y3QtPnBhcmVudE9iamVjdCgpKQotICAgICAgICAgICAgICAgIHBhcmVudC0+c2Nyb2xsVG9NYWtl
VmlzaWJsZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWduWDsK
LSAgICAgICAgU2Nyb2xsQWxpZ25tZW50IGFsaWduWTsKLSAgICAgICAgc3dpdGNoIChzY3JvbGxU
eXBlKSB7Ci0gICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OlRvcExlZnQ6Ci0gICAgICAg
ICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduTGVmdEFsd2F5czsKLSAgICAgICAg
ICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXM7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6Qm90dG9tUmlnaHQ6Ci0g
ICAgICAgICAgICBhbGlnblggPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduUmlnaHRBbHdheXM7Ci0g
ICAgICAgICAgICBhbGlnblkgPSBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduQm90dG9tQWx3YXlzOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OlRvcEVk
Z2U6Ci0gICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OkJvdHRvbUVkZ2U6Ci0gICAgICAg
ICAgICAvLyBBbGlnbiB0byBhIHBhcnRpY3VsYXIgZWRnZSBpcyBub3Qgc3VwcG9ydGVkLCBpdCdz
IGFsd2F5cyB0aGUgY2xvc2VzdCBlZGdlLgotICAgICAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxp
Z25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOwotICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5cGU6OkxlZnRFZGdlOgotICAgICAgICBjYXNlIEF0c3Bp
OjpTY3JvbGxUeXBlOjpSaWdodEVkZ2U6Ci0gICAgICAgICAgICAvLyBBbGlnbiB0byBhIHBhcnRp
Y3VsYXIgZWRnZSBpcyBub3Qgc3VwcG9ydGVkLCBpdCdzIGFsd2F5cyB0aGUgY2xvc2VzdCBlZGdl
LgotICAgICAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVl
ZGVkOwotICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNlbnRlcklm
TmVlZGVkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXRzcGk6OlNjcm9sbFR5
cGU6OkFueXdoZXJlOgotICAgICAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGln
bkNlbnRlcklmTmVlZGVkOwotICAgICAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50Ojph
bGlnbkNlbnRlcklmTmVlZGVkOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICBp
ZiAobV9jb3JlT2JqZWN0LT5pc1Njcm9sbFZpZXcoKSkgeworICAgICAgICBpZiAoYXV0byogcGFy
ZW50ID0gbV9jb3JlT2JqZWN0LT5wYXJlbnRPYmplY3QoKSkKKyAgICAgICAgICAgIHBhcmVudC0+
c2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAgIH0KIAotICAgICAgICBtX2NvcmVPYmplY3QtPnJl
bmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgZmFsc2UsIHsgU2VsZWN0aW9uUmV2
ZWFsTW9kZTo6UmV2ZWFsLCBhbGlnblgsIGFsaWduWSwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNj
cm9sbGluZzo6WWVzIH0pOwotICAgIH0pOworICAgIFNjcm9sbEFsaWdubWVudCBhbGlnblg7Cisg
ICAgU2Nyb2xsQWxpZ25tZW50IGFsaWduWTsKKyAgICBzd2l0Y2ggKHNjcm9sbFR5cGUpIHsKKyAg
ICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpUb3BMZWZ0OgorICAgICAgICBhbGlnblggPSBTY3Jv
bGxBbGlnbm1lbnQ6OmFsaWduTGVmdEFsd2F5czsKKyAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxp
Z25tZW50OjphbGlnblRvcEFsd2F5czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHNwaTo6
U2Nyb2xsVHlwZTo6Qm90dG9tUmlnaHQ6CisgICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVu
dDo6YWxpZ25SaWdodEFsd2F5czsKKyAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50Ojph
bGlnbkJvdHRvbUFsd2F5czsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHNwaTo6U2Nyb2xs
VHlwZTo6VG9wRWRnZToKKyAgICBjYXNlIEF0c3BpOjpTY3JvbGxUeXBlOjpCb3R0b21FZGdlOgor
ICAgICAgICAvLyBBbGlnbiB0byBhIHBhcnRpY3VsYXIgZWRnZSBpcyBub3Qgc3VwcG9ydGVkLCBp
dCdzIGFsd2F5cyB0aGUgY2xvc2VzdCBlZGdlLgorICAgICAgICBhbGlnblggPSBTY3JvbGxBbGln
bm1lbnQ6OmFsaWduQ2VudGVySWZOZWVkZWQ7CisgICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdHNw
aTo6U2Nyb2xsVHlwZTo6TGVmdEVkZ2U6CisgICAgY2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6Umln
aHRFZGdlOgorICAgICAgICAvLyBBbGlnbiB0byBhIHBhcnRpY3VsYXIgZWRnZSBpcyBub3Qgc3Vw
cG9ydGVkLCBpdCdzIGFsd2F5cyB0aGUgY2xvc2VzdCBlZGdlLgorICAgICAgICBhbGlnblggPSBT
Y3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7CisgICAgICAgIGFsaWduWSA9IFNj
cm9sbEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBdHNwaTo6U2Nyb2xsVHlwZTo6QW55d2hlcmU6CisgICAgICAgIGFsaWduWCA9IFNjcm9s
bEFsaWdubWVudDo6YWxpZ25DZW50ZXJJZk5lZWRlZDsKKyAgICAgICAgYWxpZ25ZID0gU2Nyb2xs
QWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOworICAgICAgICBicmVhazsKKyAgICB9CiAK
KyAgICBtX2NvcmVPYmplY3QtPnJlbmRlcmVyKCktPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwg
ZmFsc2UsIHsgU2VsZWN0aW9uUmV2ZWFsTW9kZTo6UmV2ZWFsLCBhbGlnblgsIGFsaWduWSwgU2hv
dWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGluZzo6WWVzIH0pOwogICAgIHJldHVybiB0cnVlOwog
fQogCiBib29sIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c2Nyb2xsVG9Qb2ludChpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIHVpbnQzMl90IGNvb3JkaW5hdGVUeXBlLCBpbnQgeCwg
aW50IHkpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAg
ICBhdXRvIHV0ZjE2VGV4dCA9IHRleHQoKTsKICAgICBhdXRvIHV0ZjhUZXh0ID0gdXRmMTZUZXh0
LnV0ZjgoKTsKICAgICBpZiAodXRmOFRleHQuaXNOdWxsKCkpCkBAIC0xMDgwLDI0ICsxMDEzLDE1
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzY3JvbGxUb1BvaW50KGludCBzdGFy
dE9mZnNldCwgaW50IGVuZE9mZnNldCwgdWluCiAgICAgYXV0byBtYXBwaW5nID0gb2Zmc2V0TWFw
cGluZyh1dGYxNlRleHQpOwogICAgIGF1dG8gdXRmMTZTdGFydE9mZnNldCA9IFVURjhPZmZzZXRU
b1VURjE2KG1hcHBpbmcsIHN0YXJ0T2Zmc2V0KTsKICAgICBhdXRvIHV0ZjE2RW5kT2Zmc2V0ID0g
VVRGOE9mZnNldFRvVVRGMTYobWFwcGluZywgZW5kT2Zmc2V0KTsKLSAgICBBY2Nlc3NpYmlsaXR5
OjpwZXJmb3JtRnVuY3Rpb25Pbk1haW5UaHJlYWQoW3RoaXMsIHV0ZjE2U3RhcnRPZmZzZXQsIHV0
ZjE2RW5kT2Zmc2V0LCBjb29yZGluYXRlVHlwZSwgeCwgeV0gewotICAgICAgICBpZiAobV9jb3Jl
T2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNraW5nU3RvcmUoKTsK
LQotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBJbnRQb2ludCBwb2ludCh4LCB5KTsKLSAgICAgICAgaWYgKGNvb3JkaW5hdGVUeXBlID09
IEF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpIHsKLSAgICAgICAgICAg
IGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2NvcmVPYmplY3QtPmRvY3VtZW50RnJhbWVWaWV3KCkp
Ci0gICAgICAgICAgICAgICAgcG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJh
bWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvaW50KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJ
bnRSZWN0IHJlY3QgPSBtX2NvcmVPYmplY3QtPmRvQVhCb3VuZHNGb3JSYW5nZShQbGFpblRleHRS
YW5nZSh1dGYxNlN0YXJ0T2Zmc2V0LCB1dGYxNkVuZE9mZnNldCAtIHV0ZjE2U3RhcnRPZmZzZXQp
KTsKLSAgICAgICAgcG9pbnQubW92ZSgtcmVjdC54KCksIC1yZWN0LnkoKSk7Ci0gICAgICAgIG1f
Y29yZU9iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChwb2ludCk7Ci0gICAgfSk7CisgICAgSW50
UG9pbnQgcG9pbnQoeCwgeSk7CisgICAgaWYgKGNvb3JkaW5hdGVUeXBlID09IEF0c3BpOjpDb29y
ZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpIHsKKyAgICAgICAgaWYgKGF1dG8qIGZyYW1l
VmlldyA9IG1fY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHBv
aW50ID0gZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lVmlldy0+c2NyZWVuVG9Db250
ZW50cyhwb2ludCkpOworICAgIH0KIAorICAgIEludFJlY3QgcmVjdCA9IG1fY29yZU9iamVjdC0+
ZG9BWEJvdW5kc0ZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHV0ZjE2U3RhcnRPZmZzZXQsIHV0ZjE2
RW5kT2Zmc2V0IC0gdXRmMTZTdGFydE9mZnNldCkpOworICAgIHBvaW50Lm1vdmUoLXJlY3QueCgp
LCAtcmVjdC55KCkpOworICAgIG1fY29yZU9iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChwb2lu
dCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFZhbHVlQXRzcGkuY3BwIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5T2JqZWN0VmFsdWVB
dHNwaS5jcHAKaW5kZXggYmM1OThjZGIwNDllLi4zMTRkNTZlYzY5NTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdFZhbHVl
QXRzcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNz
aWJpbGl0eU9iamVjdFZhbHVlQXRzcGkuY3BwCkBAIC0zMyw3ICszMyw2IEBAIEdEQnVzSW50ZXJm
YWNlVlRhYmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c192YWx1ZUZ1bmN0aW9ucyA9IHsK
ICAgICBudWxscHRyLAogICAgIC8vIGdldF9wcm9wZXJ0eQogICAgIFtdKEdEQnVzQ29ubmVjdGlv
biosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFy
KiBwcm9wZXJ0eU5hbWUsIEdFcnJvcioqIGVycm9yLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gR1Zh
cmlhbnQqIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICAg
ICAgYXV0byBhdHNwaU9iamVjdCA9IFJlZiB7ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGkqPih1c2VyRGF0YSkgfTsKICAgICAgICAgYXRzcGlPYmplY3QtPnVwZGF0ZUJhY2tp
bmdTdG9yZSgpOwogCkBAIC01MSw3ICs1MCw2IEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6c192YWx1ZUZ1bmN0aW9ucyA9IHsKICAgICB9LAogICAgIC8v
IHNldF9wcm9wZXJ0eSwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciosIGNv
bnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogcHJvcGVydHlOYW1lLCBHVmFy
aWFudCogcHJvcGVydHlWYWx1ZSwgR0Vycm9yKiogZXJyb3IsIGdwb2ludGVyIHVzZXJEYXRhKSAt
PiBnYm9vbGVhbiB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAg
ICAgICAgIGF1dG8gYXRzcGlPYmplY3QgPSBSZWYgeyAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpKj4odXNlckRhdGEpIH07CiAgICAgICAgIGF0c3BpT2JqZWN0LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKIApAQCAtNjcsNzMgKzY1LDUwIEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxl
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6c192YWx1ZUZ1bmN0aW9ucyA9IHsKIAogZG91Ymxl
IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6Y3VycmVudFZhbHVlKCkgY29uc3QKIHsKLSAgICBS
RUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9heE9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9heE9iamVjdC0+dmFsdWVGb3JSYW5nZSgp
OworICAgIHJldHVybiBtX2NvcmVPYmplY3QgPyBtX2NvcmVPYmplY3QtPnZhbHVlRm9yUmFuZ2Uo
KSA6IDA7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpzZXRDdXJyZW50VmFs
dWUoZG91YmxlIHZhbHVlKQogewotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZh
bHVlRnJvbU1haW5UaHJlYWQ8Ym9vbD4oW3RoaXMsIHZhbHVlXSgpIC0+IGJvb2wgewotICAgICAg
ICBpZiAobV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgbV9jb3JlT2JqZWN0LT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKLQotICAgICAgICBpZiAoIW1fY29yZU9iamVjdCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoIW1fY29yZU9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGlmICghbV9jb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9jb3JlT2JqZWN0LT5jYW5TZXRW
YWx1ZUF0dHJpYnV0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgaWYgKG1f
Y29yZU9iamVjdC0+Y2FuU2V0TnVtZXJpY1ZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9j
b3JlT2JqZWN0LT5zZXRWYWx1ZSh2YWx1ZSk7CisgICAgaWYgKG1fY29yZU9iamVjdC0+Y2FuU2V0
TnVtZXJpY1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtX2NvcmVPYmplY3QtPnNldFZhbHVlKHZh
bHVlKTsKIAotICAgICAgICByZXR1cm4gbV9jb3JlT2JqZWN0LT5zZXRWYWx1ZShTdHJpbmc6Om51
bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNpb24odmFsdWUpKTsKLSAgICB9KTsKKyAgICByZXR1cm4g
bV9jb3JlT2JqZWN0LT5zZXRWYWx1ZShTdHJpbmc6Om51bWJlclRvU3RyaW5nRml4ZWRQcmVjaXNp
b24odmFsdWUpKTsKIH0KIAogZG91YmxlIEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6bWluaW11
bVZhbHVlKCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOwot
ICAgIGlmICghbV9heE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9h
eE9iamVjdC0+bWluVmFsdWVGb3JSYW5nZSgpOworICAgIHJldHVybiBtX2NvcmVPYmplY3QgPyBt
X2NvcmVPYmplY3QtPm1pblZhbHVlRm9yUmFuZ2UoKSA6IDA7CiB9CiAKIGRvdWJsZSBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGk6Om1heGltdW1WYWx1ZSgpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9B
U1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fYXhPYmplY3QpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIG1fYXhPYmplY3QtPm1heFZhbHVlRm9yUmFuZ2UoKTsKKyAg
ICByZXR1cm4gbV9jb3JlT2JqZWN0ID8gbV9jb3JlT2JqZWN0LT5tYXhWYWx1ZUZvclJhbmdlKCkg
OiAwOwogfQogCiBkb3VibGUgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjptaW5pbXVtSW5jcmVt
ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZy
b21NYWluVGhyZWFkPGZsb2F0PihbdGhpc10oKSAtPiBmbG9hdCB7Ci0gICAgICAgIGlmIChtX2Nv
cmVPYmplY3QpCi0gICAgICAgICAgICBtX2NvcmVPYmplY3QtPnVwZGF0ZUJhY2tpbmdTdG9yZSgp
OwotCi0gICAgICAgIGlmICghbV9jb3JlT2JqZWN0KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAgICAgYXV0byBzdGVwQXR0cmlidXRlID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9i
amVjdCo+KG1fY29yZU9iamVjdCktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnN0ZXBBdHRyKTsK
LSAgICAgICAgaWYgKCFzdGVwQXR0cmlidXRlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVy
biBzdGVwQXR0cmlidXRlLnRvRmxvYXQoKTsKLQotICAgICAgICAvLyBJZiAnc3RlcCcgYXR0cmli
dXRlIGlzIG5vdCBkZWZpbmVkLCBXZWJDb3JlIGFzc3VtZXMgYSA1JSBvZiB0aGUgcmFuZ2UgYmV0
d2VlbgotICAgICAgICAvLyBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcy4gSW1wbGljaXQgdmFs
dWUgb2Ygc3RlcCBzaG91bGQgYmUgb25lIG9yIGxhcmdlci4KLSAgICAgICAgZmxvYXQgc3RlcCA9
IChtX2NvcmVPYmplY3QtPm1heFZhbHVlRm9yUmFuZ2UoKSAtIG1fY29yZU9iamVjdC0+bWluVmFs
dWVGb3JSYW5nZSgpKSAqIDAuMDU7Ci0gICAgICAgIHJldHVybiBzdGVwIDwgMSA/IDEgOiBzdGVw
OwotICAgIH0pOworICAgIGlmICghbV9jb3JlT2JqZWN0KQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGF1dG8gc3RlcEF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Qq
PihtX2NvcmVPYmplY3QpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdGVwQXR0cik7CisgICAg
aWYgKCFzdGVwQXR0cmlidXRlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHN0ZXBBdHRyaWJ1
dGUudG9GbG9hdCgpOworCisgICAgLy8gSWYgJ3N0ZXAnIGF0dHJpYnV0ZSBpcyBub3QgZGVmaW5l
ZCwgV2ViQ29yZSBhc3N1bWVzIGEgNSUgb2YgdGhlIHJhbmdlIGJldHdlZW4KKyAgICAvLyBtaW5p
bXVtIGFuZCBtYXhpbXVtIHZhbHVlcy4gSW1wbGljaXQgdmFsdWUgb2Ygc3RlcCBzaG91bGQgYmUg
b25lIG9yIGxhcmdlci4KKyAgICBmbG9hdCBzdGVwID0gKG1fY29yZU9iamVjdC0+bWF4VmFsdWVG
b3JSYW5nZSgpIC0gbV9jb3JlT2JqZWN0LT5taW5WYWx1ZUZvclJhbmdlKCkpICogMC4wNTsKKyAg
ICByZXR1cm4gc3RlcCA8IDEgPyAxIDogc3RlcDsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OnZhbHVlQ2hhbmdlZChkb3VibGUgdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFjY2Vzc2liaWxpdHlBdHNwaTo6c2luZ2xldG9uKCku
dmFsdWVDaGFuZ2VkKCp0aGlzLCB2YWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNwaS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3Bw
CmluZGV4IDFjYWI0YzE4NWU4Yy4uNTY4OGI2MTYyMDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkvQWNjZXNzaWJpbGl0eVJvb3RBdHNw
aS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9TZXRGb3JTY29wZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC00MywxMyArNDIsMTEgQEAgUmVmPEFjY2Vzc2liaWxpdHlSb290QXRzcGk+IEFj
Y2Vzc2liaWxpdHlSb290QXRzcGk6OmNyZWF0ZShQYWdlJiBwYWdlKQogQWNjZXNzaWJpbGl0eVJv
b3RBdHNwaTo6QWNjZXNzaWJpbGl0eVJvb3RBdHNwaShQYWdlJiBwYWdlKQogICAgIDogbV9wYWdl
KHBhZ2UpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogfQogCiBHREJ1
c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpzX2FjY2Vzc2libGVGdW5j
dGlvbnMgPSB7CiAgICAgLy8gbWV0aG9kX2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBj
b25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0
aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFtZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52
b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlz
TWFpblRocmVhZCgpKTsKICAgICAgICAgYXV0byYgcm9vdE9iamVjdCA9ICpzdGF0aWNfY2FzdDxB
Y2Nlc3NpYmlsaXR5Um9vdEF0c3BpKj4odXNlckRhdGEpOwogICAgICAgICBpZiAoIWdfc3RyY21w
MChtZXRob2ROYW1lLCAiR2V0Um9sZSIpKQogICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZv
Y2F0aW9uX3JldHVybl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIodSkiLCBBdHNw
aTo6Um9sZTo6RmlsbGVyKSk7CkBAIC04NCwxMCArODEsNyBAQCBHREJ1c0ludGVyZmFjZVZUYWJs
ZSBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpzX2FjY2Vzc2libGVGdW5jdGlvbnMgPSB7CiAgICAg
ICAgICAgICBpbnQgaW5kZXg7CiAgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0KHBhcmFtZXRlcnMs
ICIoaSkiLCAmaW5kZXgpOwogICAgICAgICAgICAgaWYgKCFpbmRleCkgewotICAgICAgICAgICAg
ICAgIGF1dG8qIGNoaWxkID0gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhy
ZWFkPEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KFsmcm9vdE9iamVjdF0oKSAtPiBBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RPYmpl
Y3QuY2hpbGQoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBpZiAoY2hp
bGQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogY2hpbGQgPSByb290T2JqZWN0LmNoaWxk
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZ19kYnVzX21ldGhvZF9pbnZvY2F0aW9uX3JldHVy
bl92YWx1ZShpbnZvY2F0aW9uLCBnX3ZhcmlhbnRfbmV3KCIoQChzbykpIiwgY2hpbGQtPnJlZmVy
ZW5jZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9
CkBAIC05NSwxMCArODksNyBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3NpYmlsaXR5Um9v
dEF0c3BpOjpzX2FjY2Vzc2libGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICAgICBnX2RidXNfbWV0
aG9kX2ludm9jYXRpb25fcmV0dXJuX3ZhbHVlKGludm9jYXRpb24sIGdfdmFyaWFudF9uZXcoIihA
KHNvKSkiLCBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNpbmdsZXRvbigpLm51bGxSZWZlcmVuY2UoKSkp
OwogICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobWV0aG9kTmFtZSwgIkdldENoaWxkcmVu
IikpIHsKICAgICAgICAgICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyID0gR19WQVJJQU5UX0JV
SUxERVJfSU5JVChHX1ZBUklBTlRfVFlQRSgiYShzbykiKSk7Ci0gICAgICAgICAgICBhdXRvKiBj
aGlsZCA9IEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlVmFsdWVGcm9tTWFpblRocmVhZDxBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqPihbJnJvb3RPYmplY3RdKCkgLT4gQWNjZXNzaWJpbGl0eU9iamVj
dEF0c3BpKiB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RPYmplY3QuY2hpbGQoKTsKLSAg
ICAgICAgICAgIH0pOwotICAgICAgICAgICAgaWYgKGNoaWxkKQorICAgICAgICAgICAgaWYgKGF1
dG8qIGNoaWxkID0gcm9vdE9iamVjdC5jaGlsZCgpKQogICAgICAgICAgICAgICAgIGdfdmFyaWFu
dF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIkAoc28pIiwgY2hpbGQtPnJlZmVyZW5jZSgpKTsKICAg
ICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fdmFsdWUoaW52b2NhdGlv
biwgZ192YXJpYW50X25ldygiKGEoc28pKSIsICZidWlsZGVyKSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiR2V0SW5kZXhJblBhcmVudCIpKSB7CkBAIC0xMTYs
NyArMTA3LDYgQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6
c19hY2Nlc3NpYmxlRnVuY3Rpb25zID0gewogICAgIH0sCiAgICAgLy8gZ2V0X3Byb3BlcnR5CiAg
ICAgW10oR0RCdXNDb25uZWN0aW9uKiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciosIGNvbnN0
IGdjaGFyKiwgY29uc3QgZ2NoYXIqIHByb3BlcnR5TmFtZSwgR0Vycm9yKiogZXJyb3IsIGdwb2lu
dGVyIHVzZXJEYXRhKSAtPiBHVmFyaWFudCogewotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogICAgICAgICBhdXRvJiByb290T2JqZWN0ID0gKnN0YXRpY19jYXN0PEFj
Y2Vzc2liaWxpdHlSb290QXRzcGkqPih1c2VyRGF0YSk7CiAgICAgICAgIGlmICghZ19zdHJjbXAw
KHByb3BlcnR5TmFtZSwgIk5hbWUiKSkKICAgICAgICAgICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3
X3N0cmluZygiIik7CkBAIC0xMjgsMTIgKzExOCw4IEBAIEdEQnVzSW50ZXJmYWNlVlRhYmxlIEFj
Y2Vzc2liaWxpdHlSb290QXRzcGk6OnNfYWNjZXNzaWJsZUZ1bmN0aW9ucyA9IHsKICAgICAgICAg
ICAgIHJldHVybiBnX3ZhcmlhbnRfbmV3X3N0cmluZygiIik7CiAgICAgICAgIGlmICghZ19zdHJj
bXAwKHByb3BlcnR5TmFtZSwgIlBhcmVudCIpKQogICAgICAgICAgICAgcmV0dXJuIHJvb3RPYmpl
Y3QucGFyZW50UmVmZXJlbmNlKCk7Ci0gICAgICAgIGlmICghZ19zdHJjbXAwKHByb3BlcnR5TmFt
ZSwgIkNoaWxkQ291bnQiKSkgewotICAgICAgICAgICAgYXV0byBjaGlsZENvdW50ID0gQWNjZXNz
aWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPGludDMyX3Q+KFsmcm9vdE9iamVj
dF0oKSAtPiBpbnQzMl90IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcm9vdE9iamVjdC5jaGls
ZCgpID8gMSA6IDA7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIHJldHVybiBnX3Zhcmlh
bnRfbmV3X2ludDMyKGNoaWxkQ291bnQpOwotICAgICAgICB9CisgICAgICAgIGlmICghZ19zdHJj
bXAwKHByb3BlcnR5TmFtZSwgIkNoaWxkQ291bnQiKSkKKyAgICAgICAgICAgIHJldHVybiBnX3Zh
cmlhbnRfbmV3X2ludDMyKHJvb3RPYmplY3QuY2hpbGQoKSA/IDEgOiAwKTsKIAogICAgICAgICBn
X3NldF9lcnJvcihlcnJvciwgR19JT19FUlJPUiwgR19JT19FUlJPUl9OT1RfU1VQUE9SVEVELCAi
VW5rbm93biBwcm9wZXJ0eSAnJXMnIiwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CkBAIC0xNDcsNyArMTMzLDYgQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaTo6c19hY2Nlc3NpYmxlRnVuY3Rpb25zID0gewogR0RCdXNJbnRlcmZhY2VW
VGFibGUgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6c19zb2NrZXRGdW5jdGlvbnMgPSB7CiAgICAg
Ly8gbWV0aG9kX2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciogc2Vu
ZGVyLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFyKiwgY29uc3QgZ2NoYXIqIG1ldGhvZE5hbWUs
IEdWYXJpYW50KiBwYXJhbWV0ZXJzLCBHREJ1c01ldGhvZEludm9jYXRpb24qIGludm9jYXRpb24s
IGdwb2ludGVyIHVzZXJEYXRhKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJl
YWQoKSk7CiAgICAgICAgIGF1dG8mIHJvb3RPYmplY3QgPSAqc3RhdGljX2Nhc3Q8QWNjZXNzaWJp
bGl0eVJvb3RBdHNwaSo+KHVzZXJEYXRhKTsKICAgICAgICAgaWYgKCFnX3N0cmNtcDAobWV0aG9k
TmFtZSwgIkVtYmVkZGVkIikpIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHBhdGg7CkBAIC0x
NjYsNyArMTUxLDYgQEAgR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNzaWJpbGl0eVJvb3RBdHNw
aTo6c19zb2NrZXRGdW5jdGlvbnMgPSB7CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6
cmVnaXN0ZXJPYmplY3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgaWYgKG1fcGFnZSkKICAgICAgICAgbV9wYWdlLT5zZXRBY2Nlc3NpYmlsaXR5Um9vdE9i
amVjdCh0aGlzKTsKIApAQCAtMTc5LDcgKzE2Myw2IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJvb3RB
dHNwaTo6cmVnaXN0ZXJPYmplY3QoQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcm
CiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6dW5yZWdpc3Rlck9iamVjdCgpCiB7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFjY2Vzc2liaWxpdHlBdHNw
aTo6c2luZ2xldG9uKCkudW5yZWdpc3RlclJvb3QoKnRoaXMpOwogCiAgICAgaWYgKG1fcGFnZSkK
QEAgLTIwMSwzMyArMTg0LDI4IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU3VidHJlZShBY2Nlc3Np
YmlsaXR5T2JqZWN0QXRzcGkqIGF0c3BpT2JqZWN0KQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSb290
QXRzcGk6OnJlZ2lzdGVyVHJlZSgpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVh
ZCgpKTsKICAgICBpZiAobV9wYXJlbnRVbmlxdWVOYW1lLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAobV9pc1RyZWVSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICBpZiAobV9pc1Ry
ZWVSZWdpc3RlcmVkKQogICAgICAgICByZXR1cm47CiAKLSAgICByZWdpc3RlclN1YnRyZWUoQWNj
ZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaSo+KFt0aGlzXSgpIC0+IEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSogewotICAgICAg
ICByZXR1cm4gY2hpbGQoKTsKLSAgICB9KSk7Ci0gICAgbV9pc1RyZWVSZWdpc3RlcmVkLnN0b3Jl
KHRydWUpOworICAgIHJlZ2lzdGVyU3VidHJlZShjaGlsZCgpKTsKKyAgICBtX2lzVHJlZVJlZ2lz
dGVyZWQgPSB0cnVlOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OmRpZFVucmVn
aXN0ZXJUcmVlKCkKIHsKLSAgICBtX2lzVHJlZVJlZ2lzdGVyZWQuc3RvcmUoZmFsc2UpOworICAg
IG1faXNUcmVlUmVnaXN0ZXJlZCA9IGZhbHNlOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlSb290
QXRzcGk6OnNldFBhdGgoU3RyaW5nJiYgcGF0aCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNN
YWluVGhyZWFkKCkpOwogICAgIG1fcGF0aCA9IFdURk1vdmUocGF0aCk7CiB9CiAKIHZvaWQgQWNj
ZXNzaWJpbGl0eVJvb3RBdHNwaTo6ZW1iZWRkZWQoY29uc3QgY2hhciogcGFyZW50VW5pcXVlTmFt
ZSwgY29uc3QgY2hhciogcGFyZW50UGF0aCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogICAgIG1fcGFyZW50VW5pcXVlTmFtZSA9IHBhcmVudFVuaXF1ZU5hbWU7CiAg
ICAgbV9wYXJlbnRQYXRoID0gcGFyZW50UGF0aDsKICAgICBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNp
bmdsZXRvbigpLnBhcmVudENoYW5nZWQoKnRoaXMpOwpAQCAtMjM3LDcgKzIxNSw2IEBAIHZvaWQg
QWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6ZW1iZWRkZWQoY29uc3QgY2hhciogcGFyZW50VW5pcXVl
TmFtZSwgY29uc3QgY2hhcioKIAogR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OmFw
cGxpY2F0aW9uUmVmZXJlbmNlKCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWlu
VGhyZWFkKCkpOwogICAgIGlmIChtX3BhcmVudFVuaXF1ZU5hbWUuaXNOdWxsKCkpCiAgICAgICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5QXRzcGk6OnNpbmdsZXRvbigpLm51bGxSZWZlcmVuY2UoKTsK
ICAgICByZXR1cm4gZ192YXJpYW50X25ldygiKHNvKSIsIG1fcGFyZW50VW5pcXVlTmFtZS51dGY4
KCkuZGF0YSgpLCAiL29yZy9hMTF5L2F0c3BpL2FjY2Vzc2libGUvcm9vdCIpOwpAQCAtMjQ1LDE5
ICsyMjIsMTYgQEAgR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OmFwcGxpY2F0aW9u
UmVmZXJlbmNlKCkgY29uc3QKIAogR1ZhcmlhbnQqIEFjY2Vzc2liaWxpdHlSb290QXRzcGk6OnJl
ZmVyZW5jZSgpIGNvbnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
ICAgICByZXR1cm4gZ192YXJpYW50X25ldygiKHNvKSIsIEFjY2Vzc2liaWxpdHlBdHNwaTo6c2lu
Z2xldG9uKCkudW5pcXVlTmFtZSgpLCBtX3BhdGgudXRmOCgpLmRhdGEoKSk7CiB9CiAKIEdWYXJp
YW50KiBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpwYXJlbnRSZWZlcmVuY2UoKSBjb25zdAogewot
ICAgIFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7CiAgICAgcmV0dXJuIGdfdmFyaWFu
dF9uZXcoIihzbykiLCBtX3BhcmVudFVuaXF1ZU5hbWUudXRmOCgpLmRhdGEoKSwgbV9wYXJlbnRQ
YXRoLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIEFjY2Vz
c2liaWxpdHlSb290QXRzcGk6OmNoaWxkKCkgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCkBAIC0yNzksNyArMjUzLDcgQEAgQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBBY2Nlc3Np
YmlsaXR5Um9vdEF0c3BpOjpjaGlsZCgpIGNvbnN0CiB2b2lkIEFjY2Vzc2liaWxpdHlSb290QXRz
cGk6OmNoaWxkQWRkZWQoQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpJiBjaGlsZCkKIHsKICAgICAv
LyBEb24ndCBlbWl0IGNoaWxkcmVuIGNoYW5nZWQgd2hlbiBjYWxsZWQgZnJvbSBjaGlsZCgpIGJl
Y2F1c2UgdGhhdCBtZWFucyB0aGUgdHJlZSBpcyBiZWluZyBwb3B1bGF0ZWQuCi0gICAgaWYgKG1f
aW5DaGlsZCB8fCAhbV9pc1RyZWVSZWdpc3RlcmVkLmxvYWQoKSkKKyAgICBpZiAobV9pbkNoaWxk
IHx8ICFtX2lzVHJlZVJlZ2lzdGVyZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICh0aGlz
LT5jaGlsZCgpICE9ICZjaGlsZCkKQEAgLTI5NSwxNSArMjY5LDEyIEBAIHZvaWQgQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaTo6Y2hpbGRSZW1vdmVkKEFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSYgY2hp
bGQpCiAKIHZvaWQgQWNjZXNzaWJpbGl0eVJvb3RBdHNwaTo6c2VyaWFsaXplKEdWYXJpYW50QnVp
bGRlciogYnVpbGRlcikgY29uc3QKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwogICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiKHNvKSIsIEFjY2Vzc2li
aWxpdHlBdHNwaTo6c2luZ2xldG9uKCkudW5pcXVlTmFtZSgpLCBtX3BhdGgudXRmOCgpLmRhdGEo
KSk7CiAgICAgZ192YXJpYW50X2J1aWxkZXJfYWRkKGJ1aWxkZXIsICJAKHNvKSIsIGFwcGxpY2F0
aW9uUmVmZXJlbmNlKCkpOwogICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiQChz
bykiLCBwYXJlbnRSZWZlcmVuY2UoKSk7CiAKICAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVp
bGRlciwgImkiLCAwKTsKLSAgICBnX3ZhcmlhbnRfYnVpbGRlcl9hZGQoYnVpbGRlciwgImkiLCBB
Y2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZVZhbHVlRnJvbU1haW5UaHJlYWQ8aW50MzJfdD4oW3RoaXNd
KCkgLT4gaW50MzJfdCB7Ci0gICAgICAgIHJldHVybiBjaGlsZCgpID8gMSA6IDA7Ci0gICAgfSkp
OworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZChidWlsZGVyLCAiaSIsIGNoaWxkKCkgPyAxIDog
MCk7CiAKICAgICBHVmFyaWFudEJ1aWxkZXIgaW50ZXJmYWNlcyA9IEdfVkFSSUFOVF9CVUlMREVS
X0lOSVQoR19WQVJJQU5UX1RZUEUoImFzIikpOwogICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgm
aW50ZXJmYWNlcywgInMiLCB3ZWJraXRfYWNjZXNzaWJsZV9pbnRlcmZhY2UubmFtZSk7CkBAIC0z
MjUsNyArMjk2LDYgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpOjpzZXJpYWxpemUoR1Zh
cmlhbnRCdWlsZGVyKiBidWlsZGVyKSBjb25zdAogR0RCdXNJbnRlcmZhY2VWVGFibGUgQWNjZXNz
aWJpbGl0eVJvb3RBdHNwaTo6c19jb21wb25lbnRGdW5jdGlvbnMgPSB7CiAgICAgLy8gbWV0aG9k
X2NhbGwKICAgICBbXShHREJ1c0Nvbm5lY3Rpb24qLCBjb25zdCBnY2hhciosIGNvbnN0IGdjaGFy
KiwgY29uc3QgZ2NoYXIqLCBjb25zdCBnY2hhciogbWV0aG9kTmFtZSwgR1ZhcmlhbnQqIHBhcmFt
ZXRlcnMsIEdEQnVzTWV0aG9kSW52b2NhdGlvbiogaW52b2NhdGlvbiwgZ3BvaW50ZXIgdXNlckRh
dGEpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKICAgICAgICAg
YXV0byYgcm9vdE9iamVjdCA9ICpzdGF0aWNfY2FzdDxBY2Nlc3NpYmlsaXR5Um9vdEF0c3BpKj4o
dXNlckRhdGEpOwogICAgICAgICBpZiAoIWdfc3RyY21wMChtZXRob2ROYW1lLCAiQ29udGFpbnMi
KSkKICAgICAgICAgICAgIGdfZGJ1c19tZXRob2RfaW52b2NhdGlvbl9yZXR1cm5fZXJyb3JfbGl0
ZXJhbChpbnZvY2F0aW9uLCBHX0RCVVNfRVJST1IsIEdfREJVU19FUlJPUl9OT1RfU1VQUE9SVEVE
LCAiIik7CkBAIC0zNjUsMjcgKzMzNSwyNCBAQCBHREJ1c0ludGVyZmFjZVZUYWJsZSBBY2Nlc3Np
YmlsaXR5Um9vdEF0c3BpOjpzX2NvbXBvbmVudEZ1bmN0aW9ucyA9IHsKIAogSW50UmVjdCBBY2Nl
c3NpYmlsaXR5Um9vdEF0c3BpOjpmcmFtZVJlY3QodWludDMyX3QgY29vcmRpbmF0ZVR5cGUpIGNv
bnN0CiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eTo6cmV0cmlldmVWYWx1ZUZyb21NYWluVGhyZWFkPEludFJlY3Q+KFt0aGlz
LCBjb29yZGluYXRlVHlwZV0oKSAtPiBJbnRSZWN0IHsKLSAgICAgICAgaWYgKCFtX3BhZ2UpCi0g
ICAgICAgICAgICByZXR1cm4geyB9OwotCi0gICAgICAgIGF1dG8qIGZyYW1lVmlldyA9IG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpOwotICAgICAgICBpZiAoIWZyYW1lVmlldykKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICAgICAgYXV0byBmcmFtZVJlY3QgPSBmcmFtZVZpZXctPmZy
YW1lUmVjdCgpOwotICAgICAgICBzd2l0Y2ggKGNvb3JkaW5hdGVUeXBlKSB7Ci0gICAgICAgIGNh
c2UgQXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGluYXRlczoKLSAgICAgICAgICAg
IHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVSZWN0KTsKLSAgICAgICAg
Y2FzZSBBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OldpbmRvd0Nvb3JkaW5hdGVzOgotICAgICAgICAg
ICAgcmV0dXJuIGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZVJlY3QpOwotICAgICAg
ICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6UGFyZW50Q29vcmRpbmF0ZXM6Ci0gICAgICAg
ICAgICByZXR1cm4gZnJhbWVSZWN0OwotICAgICAgICB9Ci0KLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9KTsKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIGF1dG8qIGZyYW1lVmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmll
dygpOworICAgIGlmICghZnJhbWVWaWV3KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0
byBmcmFtZVJlY3QgPSBmcmFtZVZpZXctPmZyYW1lUmVjdCgpOworICAgIHN3aXRjaCAoY29vcmRp
bmF0ZVR5cGUpIHsKKyAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRp
bmF0ZXM6CisgICAgICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9TY3JlZW4oZnJhbWVS
ZWN0KTsKKyAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6V2luZG93Q29vcmRpbmF0ZXM6
CisgICAgICAgIHJldHVybiBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVSZWN0KTsK
KyAgICBjYXNlIEF0c3BpOjpDb29yZGluYXRlVHlwZTo6UGFyZW50Q29vcmRpbmF0ZXM6CisgICAg
ICAgIHJldHVybiBmcmFtZVJlY3Q7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmggYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlSb290QXRzcGku
aAppbmRleCBjNjQ4YmI5NGQ1MGMuLjg4ZmIxZjgzMzcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3Bp
LmgKQEAgLTIxLDkgKzIxLDggQEAKIAogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0Uo
QVRTUEkpCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9HREJ1c0ludGVyZmFjZVZUYWJsZSBHREJ1c0ludGVy
ZmFjZVZUYWJsZTsKQEAgLTMzLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOwogY2xhc3MgUGFnZTsKIAotY2xhc3MgQWNjZXNzaWJp
bGl0eVJvb3RBdHNwaSBmaW5hbCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxBY2Nlc3Np
YmlsaXR5Um9vdEF0c3BpLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiB7CitjbGFzcyBB
Y2Nlc3NpYmlsaXR5Um9vdEF0c3BpIGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8QWNjZXNzaWJp
bGl0eVJvb3RBdHNwaT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eVJvb3RBdHNwaT4gY3JlYXRlKFBhZ2UmKTsKQEAg
LTQzLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZvaWQgdW5yZWdpc3Rlck9iamVjdCgpOwogICAg
IHZvaWQgcmVnaXN0ZXJUcmVlKCk7CiAgICAgdm9pZCBkaWRVbnJlZ2lzdGVyVHJlZSgpOwotICAg
IGJvb2wgaXNUcmVlUmVnaXN0ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNUcmVlUmVnaXN0ZXJl
ZC5sb2FkKCk7IH0KKyAgICBib29sIGlzVHJlZVJlZ2lzdGVyZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzVHJlZVJlZ2lzdGVyZWQ7IH0KICAgICB2b2lkIHNldFBhdGgoU3RyaW5nJiYpOwogCiAgICAg
Y29uc3QgU3RyaW5nJiBwYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CkBAIC03MCw3ICs2
OSw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fcGF0aDsKICAgICBTdHJpbmcgbV9wYXJlbnRV
bmlxdWVOYW1lOwogICAgIFN0cmluZyBtX3BhcmVudFBhdGg7Ci0gICAgQXRvbWljPGJvb2w+IG1f
aXNUcmVlUmVnaXN0ZXJlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzVHJlZVJlZ2lzdGVyZWQg
eyBmYWxzZSB9OwogICAgIG11dGFibGUgYm9vbCBtX2luQ2hpbGQgeyBmYWxzZSB9OwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvYXRz
cGkvQVhJc29sYXRlZE9iamVjdEF0c3BpLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaXNvbGF0ZWR0cmVlL2F0c3BpL0FYSXNvbGF0ZWRPYmplY3RBdHNwaS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxY2UxMTdmZjZiOS4uMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL2F0c3BpL0FYSXNvbGF0ZWRP
YmplY3RBdHNwaS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDIxIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJBWElzb2xhdGVkT2JqZWN0LmgiCi0KLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9JU09MQVRF
RF9UUkVFKSAmJiBVU0UoQVRTUEkpCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdm9pZCBBWElzb2xhdGVkT2JqZWN0Ojppbml0
aWFsaXplUGxhdGZvcm1Qcm9wZXJ0aWVzKGNvbnN0IEFYQ29yZU9iamVjdCYsIGJvb2wpCi17Ci19
Ci0KLXZvaWQgQVhJc29sYXRlZE9iamVjdDo6YXR0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyKiB3cmFwcGVyKQotewotICAgIHdyYXBwZXItPmF0dGFjaCh0aGlz
KTsKLSAgICBzZXRXcmFwcGVyKHdyYXBwZXIpOwotfQotCi12b2lkIEFYSXNvbGF0ZWRPYmplY3Q6
OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGUpCi17Ci0g
ICAgd3JhcHBlcigpLT5kZXRhY2goKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkgJiYgVVNFKEFUU1BJ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UgYi9Tb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZQppbmRleCBkZTMzYzQ1MThkMmIuLjk3YWU4YmM4Yjk5NCAxMDA2
NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNHVEsuY21ha2UKKysrIGIvU291cmNlL2NtYWtl
L09wdGlvbnNHVEsuY21ha2UKQEAgLTI3MSw5ICsyNzEsNyBAQCBpZiAoTk9UIEVYSVNUUyAiJHtU
T09MU19ESVJ9L2dsaWIvYXBwbHktYnVpbGQtcmV2aXNpb24tdG8tZmlsZXMucHkiKQogICAgIHNl
dChCVUlMRF9SRVZJU0lPTiAidGFyYmFsbCIpCiBlbmRpZiAoKQogCi1pZiAoVVNFX0FUU1BJKQot
ICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEVOQUJMRV9BQ0NFU1NJQklMSVRZX0lTT0xBVEVE
X1RSRUUgVFJVRSkKLWVsc2UgKCkKK2lmIChOT1QgVVNFX0FUU1BJKQogICAgIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9BVEsgVFJVRSkKIGVuZGlmICgpCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlNzNhZDM0MTVkMjUuLmJkMTNjZTdl
ZmEyNCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDk1IEBACisyMDIyLTAxLTE0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVthMTF5XSBTdG9wIHVzaW5nIGlzb2xhdGVk
IHRyZWUgZm9yIHRoZSBBVFNQSSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1MjI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIFdUUiB0byBub3QgdXNlIHRoZSBheCB0
aHJlYWQuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0c3BpLmNwcDoKKyAgICAgICAg
KFdUUjo6ZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXI6OnVwZGF0ZUlzb2xhdGVkVHJlZU1vZGUpOiBEZWxldGVkLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YXhSdW5Mb29wKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmV4ZWN1dGVPbkFYVGhyZWFkQW5k
V2FpdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpl
eGVjdXRlT25BWFRocmVhZCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpleGVjdXRlT25NYWluVGhyZWFkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRB
dHNwaS5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkcmVu
Q291bnQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjplbGVtZW50QXRQ
b2ludCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkQXRJbmRl
eCk6CisgICAgICAgIChXVFI6OmVsZW1lbnRGb3JSZWxhdGlvbkF0SW5kZXgpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkQXRJbmRleCBjb25zdCk6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkQ2hpbGRyZW5D
b3VudCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVu
dEVsZW1lbnQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1
dGVzT2ZDaGlsZHJlbik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0
cmluZ0F0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bnVtYmVyQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjdXJyZW50U3RhdGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnJvd0hlYWRlcnMgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZSk6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9sZSk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbik6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZyk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6ZGVzY3JpcHRpb24pOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpvcmllbnRhdGlvbiBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmhlbHBUZXh0IGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6eCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Onkp
OgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRYKToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y2xpY2tQb2ludFkpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjppbnRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om1pblZhbHVlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWF4VmFsdWUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp2
YWx1ZURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNFbmFibGVkKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNSZXF1
aXJlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRm9j
dXNlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2Vs
ZWN0ZWQgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Nl
bGVjdGVkT3B0aW9uQWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aXNFeHBhbmRlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzQ2hlY2tlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0ZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmhpZXJhcmNoaWNhbExldmVsIGNvbnN0KToKKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCBjb25zdCk6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cyBjb25zdCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJhbmdlRm9yTGluZSk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKToKKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKToK
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93Q291bnQpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCk6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UpOgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5jcmVtZW50KToKKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzZXRTZWxlY3RlZENoaWxkQXRJbmRleCBjb25zdCk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlbW92ZVNlbGVjdGlvbkF0SW5kZXggY29uc3QpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNlbGVjdGVkQ2hpbGRy
ZW4gY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVu
dEVuY29kaW5nKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZG9jdW1l
bnRVUkkpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2VsZWN0
YWJsZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVs
dGlTZWxlY3RhYmxlIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNWaXNpYmxlIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNPZmZTY3JlZW4gY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0NvbGxhcHNlZCBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzU2luZ2xlTGluZSBjb25zdCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aGFzUG9wdXAgY29uc3QpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludCk6CisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzSXNvbGF0ZWRPYmplY3QgY29uc3QpOiBEZWxldGVkLgorCiAy
MDIyLTAxLTE0ICBKIFBhc2NvZSAgPGpfcGFzY29lQGFwcGxlLmNvbT4KIAogICAgICAgICBFeHBv
c2Ugd2F5IHRvIGVuY29kZSBDVEFQIGNvbW1hbmRzIHdpdGggb25seSB0aGUgaGFzaCBvZiBDbGll
bnREYXRhSlNPTgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IGI1MzIxZDI2N2Fh
NC4uZDJmZWU3NWI1ZTFkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCkBAIC03Miw3
ICs3Miw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gZWxl
bWVudEF0UG9pbnQoaW50IHgsIGludCB5KTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gYWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKTsKIAot
I2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpCisjaWYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgdm9pZCBleGVjdXRlT25BWFRocmVhZEFuZFdhaXQoRnVuY3Rpb248dm9pZCgpPiYmKTsKICAg
ICB2b2lkIGV4ZWN1dGVPbkFYVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBl
eGVjdXRlT25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJik7CkBAIC0xMDksMTAgKzEwOSw2
IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKICAg
ICB2b2lkIHVwZGF0ZUlzb2xhdGVkVHJlZU1vZGUoKTsKIAotI2lmIFVTRShBVFNQSSkKLSAgICBS
dW5Mb29wJiBheFJ1bkxvb3AoKTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAg
dm9pZCBzcGluTWFpblJ1bkxvb3AoKSBjb25zdDsKICAgICAvLyBfQVhVSUVsZW1lbnRVc2VTZWNv
bmRhcnlBWFRocmVhZCBhbmQgX0FYVUlFbGVtZW50UmVxdWVzdFNlcnZpY2VkQnlTZWNvbmRhcnlB
WFRocmVhZApAQCAtMTIyLDkgKzExOCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZU1vY2tB
WFRocmVhZCB7IGZhbHNlIH07CiAjZW5kaWYKICAgICBib29sIG1fYWNjZXNzaWJpbGl0eUlzb2xh
dGVkVHJlZU1vZGUgeyBmYWxzZSB9OwotI2lmIFVTRShBVFNQSSkKLSAgICBSdW5Mb29wKiBtX2F4
UnVuTG9vcCB7IG51bGxwdHIgfTsKLSNlbmRpZgogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQXRzcGkuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0c3BpLmNwcAppbmRleCAyYjcyN2M3YWZk
M2IuLjE4YzU3ZDQxMGJhZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0c3BpLmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlD
b250cm9sbGVyQXRzcGkuY3BwCkBAIC01MiwxMiArNTIsNyBAQCBzdGF0aWMgV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU9iamVjdEF0c3BpKiBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoV2ViQ29yZTo6
QWNjZQogICAgIGlmIChheE9iamVjdC5pZCgpID09IGVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJu
ICZheE9iamVjdDsKIAotICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpPj4gY2hpbGRyZW47Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyKCktPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbYXhPYmpl
Y3QgPSBSZWYgeyBheE9iamVjdCB9LCAmY2hpbGRyZW5dIHsKLSAgICAgICAgYXhPYmplY3QtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBjaGlsZHJlbiA9IGF4T2JqZWN0LT5jaGlsZHJl
bigpOwotICAgIH0pOwotICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewor
ICAgIGZvciAoY29uc3QgYXV0byYgY2hpbGQgOiBheE9iamVjdC5jaGlsZHJlbigpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBlbGVtZW50ID0gZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKCpjaGlsZCwg
ZWxlbWVudElEKSkKICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwogICAgIH0KQEAgLTEyOCw1
NiArMTIzLDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cmVtb3ZlTm90aWZpY2F0
aW9uTGlzdGVuZXIoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjp1cGRhdGVJc29sYXRlZFRyZWVNb2RlKCkKLXsKLX0KLQotUnVuTG9vcCYgQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmF4UnVuTG9vcCgpCi17Ci0gICAgaWYgKCFtX2F4UnVuTG9v
cCkgewotICAgICAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICAgICAgYXV0byogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaSo+KFdLQWNjZXNzaWJpbGl0eVJv
b3RPYmplY3QocGFnZSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChlbGVtZW50KTsKLSAgICAg
ICAgbV9heFJ1bkxvb3AgPSAmV2ViQ29yZTo6QWNjZXNzaWJpbGl0eUF0c3BpOjpzaW5nbGV0b24o
KS5ydW5Mb29wKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuICptX2F4UnVuTG9vcDsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KEZ1bmN0
aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKLXsKLSAgICBSRUxFQVNFX0FTU0VSVChpc01haW5UaHJl
YWQoKSk7Ci0gICAgc3RkOjphdG9taWM8Ym9vbD4gZG9uZSA9IGZhbHNlOwotICAgIGF4UnVuTG9v
cCgpLmRpc3BhdGNoKFt0aGlzLCBmdW5jdGlvbiA9IFdURk1vdmUoZnVuY3Rpb24pLCAmZG9uZV0g
ewotICAgICAgICBmdW5jdGlvbigpOwotICAgICAgICBkb25lLnN0b3JlKHRydWUpOwotICAgIH0p
OwotICAgIGF1dG8gbm93ID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0gICAgd2hpbGUgKCFkb25l
LmxvYWQoKSkgewotICAgICAgICBpZiAoTW9ub3RvbmljVGltZTo6bm93KCkgLSBub3cgPj0gMTI1
X21zKQotICAgICAgICAgICAgZ19tYWluX2NvbnRleHRfaXRlcmF0aW9uKG51bGxwdHIsIEZBTFNF
KTsKLSAgICB9Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmV4ZWN1dGVPbkFY
VGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKLXsKLSAgICBheFJ1bkxvb3AoKS5k
aXNwYXRjaChbdGhpcywgZnVuY3Rpb24gPSBXVEZNb3ZlKGZ1bmN0aW9uKV0gewotICAgICAgICBm
dW5jdGlvbigpOwotICAgIH0pOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpl
eGVjdXRlT25NYWluVGhyZWFkKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKLXsKLSAgICBp
ZiAoaXNNYWluVGhyZWFkKCkpIHsKLSAgICAgICAgZnVuY3Rpb24oKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGF4UnVuTG9vcCgpLmRpc3BhdGNoKFt0aGlzLCBmdW5jdGlvbiA9IFdU
Rk1vdmUoZnVuY3Rpb24pXSgpIG11dGFibGUgewotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFdU
Rk1vdmUoZnVuY3Rpb24pKTsKLSAgICB9KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV1RSCiAKICNl
bmRpZiAvLyBIQVZFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVFNQSSkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudEF0c3BpLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
YXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcAppbmRleCBmMjNlZmUyZDg4ZWMu
LjVmOTA1NTUyNjBlMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRzcGkuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudEF0c3BpLmNwcApAQCAtNjksMTEgKzY5LDYgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0VxdWFsKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIG90aGVyRWxlbWVudCkKICAgICBy
ZXR1cm4gb3RoZXJFbGVtZW50ICYmIG1fZWxlbWVudC5nZXQoKSA9PSBvdGhlckVsZW1lbnQtPnBs
YXRmb3JtVUlFbGVtZW50KCk7CiB9CiAKLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJ
c29sYXRlZE9iamVjdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW4oVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiA+JiBjaGlsZHJlbikKIHsKIH0KQEAgLTg0LDE2ICs3OSwxMyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRy
ZW5Db3VudCgpCiB7Ci0gICAgdW5zaWduZWQgY2hpbGRDb3VudDsKLSAgICBzX2NvbnRyb2xsZXIt
PmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJmNoaWxkQ291bnRdIHsKLSAgICAgICAg
bV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgY2hpbGRDb3VudCA9IG1f
ZWxlbWVudC0+Y2hpbGRDb3VudCgpOwotICAgIH0pOwotICAgIHJldHVybiBjaGlsZENvdW50Owor
ICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgcmV0dXJuIG1fZWxlbWVu
dC0+Y2hpbGRDb3VudCgpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6ZWxlbWVudEF0UG9pbnQoaW50IHgsIGludCB5KQogeworICAg
IG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgYXV0byogZWxlbWVudCA9IG1f
ZWxlbWVudC0+aGl0VGVzdCh7IHgsIHkgfSwgV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBl
OjpXaW5kb3dDb29yZGluYXRlcyk7CiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNyZWF0ZShlbGVtZW50ID8gZWxlbWVudCA6IG1fZWxlbWVudC5nZXQoKSk7CiB9CkBAIC0xMDYs
MjAgKzk4LDE0IEBAIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4T2ZDaGls
ZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KQogUmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNoaWxkQXRJbmRleCh1bnNpZ25lZCBp
bmRleCkKIHsKICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgUmVm
UHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4gY2hpbGQ7Ci0gICAgc19jb250
cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZjaGlsZCwgaW5kZXhdIHsK
LSAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgY2hpbGQg
PSBtX2VsZW1lbnQtPmNoaWxkQXQoaW5kZXgpOwotICAgIH0pOwotICAgIGlmICghY2hpbGQpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNyZWF0ZShjaGlsZC5nZXQoKSk7CisgICAgaWYgKGF1dG8qIGNoaWxkID0gbV9lbGVtZW50
LT5jaGlsZEF0KGluZGV4KSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmNyZWF0ZShjaGlsZCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyBSZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gZWxlbWVudEZvclJlbGF0aW9uQXRJbmRleChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkqIGVsZW1lbnQsIFdlYkNvcmU6OkF0c3BpOjpSZWxh
dGlvbiByZWxhdGlvbiwgdW5zaWduZWQgaW5kZXgpCiB7CisgICAgZWxlbWVudC0+dXBkYXRlQmFj
a2luZ1N0b3JlKCk7CiAgICAgYXV0byByZWxhdGlvbk1hcCA9IGVsZW1lbnQtPnJlbGF0aW9uTWFw
KCk7CiAgICAgYXV0byB0YXJnZXRzID0gcmVsYXRpb25NYXAuZ2V0KHJlbGF0aW9uKTsKICAgICBp
ZiAodGFyZ2V0cy5pc0VtcHR5KCkgfHwgaW5kZXggPj0gdGFyZ2V0cy5zaXplKCkpCkBAIC0xNzUs
NiArMTYxLDcgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNlbGVjdGVkQ2hpbGRBdEluZGV4KHVuc2kKICAgICBpZiAoIW1fZWxlbWVudC0+
aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
SW50ZXJmYWNlOjpTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAorICAgIG1f
ZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgaWYgKGF1dG8qIHNlbGVjdGVkQ2hp
bGQgPSBtX2VsZW1lbnQtPnNlbGVjdGVkQ2hpbGQoaW5kZXgpKQogICAgICAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHNlbGVjdGVkQ2hpbGQpOwogICAgIHJldHVybiBu
dWxscHRyOwpAQCAtMTg1LDYgKzE3Miw3IEBAIHVuc2lnbmVkIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnNlbGVjdGVkQ2hpbGRyZW5Db3VudCgpIGNvbnN0CiAgICAgaWYgKCFtX2VsZW1lbnQtPmlu
dGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6Oklu
dGVyZmFjZTo6U2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBtX2VsZW1lbnQt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHJldHVybiBtX2VsZW1lbnQtPnNlbGVjdGlvbkNv
dW50KCk7CiB9CiAKQEAgLTIwMSwxOCArMTg5LDkgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRpdGxlVUlFbGVtZW50KCkKIFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVt
ZW50KCkKIHsKICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgUmVm
UHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4gcGFyZW50OwotICAgIHNfY29u
dHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmcGFyZW50XSB7Ci0gICAg
ICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIGF1dG8gcGFyZW50
V3JhcHBlciA9IG1fZWxlbWVudC0+cGFyZW50KCk7Ci0gICAgICAgIGlmIChwYXJlbnRXcmFwcGVy
KQotICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50V3JhcHBlci52YWx1ZSgpOwotICAgIH0pOwot
ICAgIGlmICghcGFyZW50KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUocGFyZW50LmdldCgpKTsKKyAgICBpZiAoYXV0
byogcGFyZW50ID0gbV9lbGVtZW50LT5wYXJlbnQoKS52YWx1ZV9vcihudWxscHRyKSkKKyAgICAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShwYXJlbnQpOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3coKQpAQCAtMzMwLDE0ICszMDksNyBAQCBz
dGF0aWMgU3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1lbnRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8V2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iagogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKCkKIHsKICAgICBtX2VsZW1lbnQt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBjaGlsZHJlbjsKLSAgICBzX2NvbnRyb2xsZXItPmV4ZWN1
dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJmNoaWxkcmVuXSB7Ci0gICAgICAgIG1fZWxlbWVu
dC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIGNoaWxkcmVuID0gbV9lbGVtZW50LT5j
aGlsZHJlbigpOwotICAgIH0pOwotCi0gICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVh
dGUoYXR0cmlidXRlc09mRWxlbWVudHMoY2hpbGRyZW4pKS5sZWFrUmVmKCk7CisgICAgcmV0dXJu
IE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoYXR0cmlidXRlc09mRWxlbWVudHMobV9lbGVtZW50
LT5jaGlsZHJlbigpKSkubGVha1JlZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcygpCkBAIC0zNjgsNiArMzQwLDcg
QEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmlu
Z0F0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmUKICAgICAgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5n
Ojp0cnlDcmVhdGUodGV4dC5zdWJzdHJpbmcob2Zmc2V0LngoKSwgb2Zmc2V0LnkoKSAtIG9mZnNl
dC54KCkpKS5sZWFrUmVmKCk7CiAgICAgfQogCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5n
U3RvcmUoKTsKICAgICBhdXRvIGF0dHJpYnV0ZXMgPSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKTsK
ICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhQbGFjZWhvbGRlclZhbHVlIikKICAgICAgICAg
cmV0dXJuIE9wYXF1ZUpTU3RyaW5nOjp0cnlDcmVhdGUoYXR0cmlidXRlcy5nZXQoInBsYWNlaG9s
ZGVyLXRleHQiKSkubGVha1JlZigpOwpAQCAtMzg5LDYgKzM2Miw3IEBAIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdBdHRyaWJ1dGVWYWx1ZShK
U1N0cmluZ1JlCiBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRl
VmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQogewogICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1l
ID0gdG9XVEZTdHJpbmcoYXR0cmlidXRlKTsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdT
dG9yZSgpOwogICAgIGF1dG8gYXR0cmlidXRlcyA9IG1fZWxlbWVudC0+YXR0cmlidXRlcygpOwog
ICAgIGlmIChhdHRyaWJ1dGVOYW1lID09ICJBWEFSSUFTZXRTaXplIikKICAgICAgICAgcmV0dXJu
IGF0dHJpYnV0ZXMuZ2V0KCJzZXRzaXplIikudG9Eb3VibGUoKTsKQEAgLTQxMiw2ICszODYsNyBA
QCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNT
dHJpbmdSZWYgYXR0cmlidXRlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y3VycmVudFN0YXRlVmFsdWUoKSBjb25zdAogeworICAgIG1fZWxlbWVu
dC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgYXV0byB2YWx1ZSA9IG1fZWxlbWVudC0+YXR0
cmlidXRlcygpLmdldCgiY3VycmVudCIpOwogICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5
Q3JlYXRlKCF2YWx1ZS5pc051bGwoKSA/IHZhbHVlIDogImZhbHNlIikubGVha1JlZigpOwogfQpA
QCAtNDM2LDE2ICs0MTEsMTQgQEAgc3RhdGljIEpTVmFsdWVSZWYgbWFrZUpTQXJyYXkoY29uc3Qg
VmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4mIGVsZW0KIAogSlNWYWx1ZVJl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKCkgY29uc3QKIHsKLSAgICBpZiAo
bV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpJbnRlcmZhY2U6OlRhYmxlKSkKKyAgICBpZiAobV9lbGVtZW50LT5pbnRlcmZh
Y2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZh
Y2U6OlRhYmxlKSkgeworICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwog
ICAgICAgICByZXR1cm4gbWFrZUpTQXJyYXkoZWxlbWVudHNWZWN0b3IobV9lbGVtZW50LT5yb3dI
ZWFkZXJzKCkpKTsKKyAgICB9CiAKICAgICBpZiAobV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29u
dGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRhYmxl
Q2VsbCkpIHsKLSAgICAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk+PiBoZWFkZXJzOwotICAgICAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhy
ZWFkQW5kV2FpdChbdGhpcywgJmhlYWRlcnNdIHsKLSAgICAgICAgICAgIG1fZWxlbWVudC0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgICAgICBoZWFkZXJzID0gbV9lbGVtZW50LT5jZWxs
Um93SGVhZGVycygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIG1ha2VKU0FycmF5KGVs
ZW1lbnRzVmVjdG9yKGhlYWRlcnMpKTsKKyAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5n
U3RvcmUoKTsKKyAgICAgICAgcmV0dXJuIG1ha2VKU0FycmF5KGVsZW1lbnRzVmVjdG9yKG1fZWxl
bWVudC0+Y2VsbFJvd0hlYWRlcnMoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBtYWtlSlNBcnJh
eSh7IH0pOwpAQCAtNDUzLDE2ICs0MjYsMTQgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpyb3dIZWFkZXJzKCkgY29uc3QKIAogSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpjb2x1bW5IZWFkZXJzKCkgY29uc3QKIHsKLSAgICBpZiAobV9lbGVtZW50LT5pbnRl
cmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRl
cmZhY2U6OlRhYmxlKSkKKyAgICBpZiAobV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRhYmxlKSkgewor
ICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgICAgICByZXR1cm4g
bWFrZUpTQXJyYXkoZWxlbWVudHNWZWN0b3IobV9lbGVtZW50LT5jb2x1bW5IZWFkZXJzKCkpKTsK
KyAgICB9CiAKICAgICBpZiAobV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRhYmxlQ2VsbCkpIHsKLSAg
ICAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+PiBo
ZWFkZXJzOwotICAgICAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChb
dGhpcywgJmhlYWRlcnNdIHsKLSAgICAgICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0
b3JlKCk7Ci0gICAgICAgICAgICBoZWFkZXJzID0gbV9lbGVtZW50LT5jZWxsQ29sdW1uSGVhZGVy
cygpOwotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuIG1ha2VKU0FycmF5KGVsZW1lbnRzVmVj
dG9yKGhlYWRlcnMpKTsKKyAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsK
KyAgICAgICAgcmV0dXJuIG1ha2VKU0FycmF5KGVsZW1lbnRzVmVjdG9yKG1fZWxlbWVudC0+Y2Vs
bENvbHVtbkhlYWRlcnMoKSkpOwogICAgIH0KIAogICAgIHJldHVybiBtYWtlSlNBcnJheSh7IH0p
OwpAQCAtNDc2LDYgKzQ0Nyw3IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZShKCiBib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmJvb2xBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1
dGUpCiB7CiAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSB0b1dURlN0cmluZyhhdHRyaWJ1dGUp
OworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgaWYgKGF0dHJpYnV0
ZU5hbWUgPT0gIkFYRWxlbWVudEJ1c3kiKQogICAgICAgICByZXR1cm4gY2hlY2tFbGVtZW50U3Rh
dGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OkJ1c3kpOwogICAgIGlm
IChhdHRyaWJ1dGVOYW1lID09ICJBWE1vZGFsIikKQEAgLTQ5OCw2ICs0NzAsNyBAQCBib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0
cmlidXRlKQogICAgIGlmIChhdHRyaWJ1dGVOYW1lICE9ICJBWFZhbHVlIikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICBp
ZiAoY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3Rh
dGU6OlJlYWRPbmx5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MTMsMTEgKzQ4Niw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZShKU1N0
cmluZ1JlZiBhdHRyaWJ1dGUpCiAgICAgICAgIHJldHVybiBpc1JlYWRPbmx5ID09ICJ0cnVlIiA/
IGZhbHNlIDogdHJ1ZTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBsaXN0Ym94IG9yIGNvbWJvYm94
IGFuZCB0aGUgdmFsdWUgY2FuIGJlIHNldCwgdGhlIG9wdGlvbnMgc2hvdWxkIGJlIHNlbGVjdGFi
bGUuCi0gICAgdW5zaWduZWQgZWxlbWVudFJvbGU7Ci0gICAgc19jb250cm9sbGVyLT5leGVjdXRl
T25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZlbGVtZW50Um9sZV0gewotICAgICAgICBtX2VsZW1l
bnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBlbGVtZW50Um9sZSA9IG1fZWxlbWVu
dC0+cm9sZSgpOwotICAgIH0pOworICAgIGF1dG8gZWxlbWVudFJvbGUgPSBtX2VsZW1lbnQtPnJv
bGUoKTsKICAgICBzd2l0Y2ggKGVsZW1lbnRSb2xlKSB7CiAgICAgY2FzZSBXZWJDb3JlOjpBdHNw
aTo6Um9sZTo6Q29tYm9Cb3g6CiAgICAgY2FzZSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6TGlzdEJv
eDoKQEAgLTUzNSwxNSArNTA0LDggQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0F0
dHJpYnV0ZVNldHRhYmxlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgaWYgKG1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpWYWx1ZSkKLSAgICAgICAgJiYg
Y2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6
OkZvY3VzYWJsZSkpIHsKLSAgICAgICAgZG91YmxlIG1pbmltdW1WYWx1ZSwgbWF4aW11bVZhbHVl
OwotICAgICAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywg
Jm1pbmltdW1WYWx1ZSwgJm1heGltdW1WYWx1ZV0gewotICAgICAgICAgICAgbV9lbGVtZW50LT51
cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAgICAgIG1pbmltdW1WYWx1ZSA9IG1fZWxlbWVu
dC0+bWluaW11bVZhbHVlKCk7Ci0gICAgICAgICAgICBtYXhpbXVtVmFsdWUgPSBtX2VsZW1lbnQt
Pm1heGltdW1WYWx1ZSgpOwotICAgICAgICB9KTsKLSAgICAgICAgaWYgKG1pbmltdW1WYWx1ZSAh
PSBtYXhpbXVtVmFsdWUpCisgICAgaWYgKG1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5z
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpWYWx1ZSkgJiYg
Y2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6
OkZvY3VzYWJsZSkpIHsKKyAgICAgICAgaWYgKG1fZWxlbWVudC0+bWluaW11bVZhbHVlKCkgIT0g
bV9lbGVtZW50LT5tYXhpbXVtVmFsdWUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApAQCAtNTUzLDYgKzUxNSw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNB
dHRyaWJ1dGVTZXR0YWJsZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiBib29sIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVkKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkK
IHsKICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IHRvV1RGU3RyaW5nKGF0dHJpYnV0ZSk7Cisg
ICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICBhdXRvIGF0dHJpYnV0ZXMg
PSBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSAiQVhB
UklBU2V0U2l6ZSIpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmNvbnRhaW5zKCJzZXRzaXpl
Iik7CkBAIC03OTYsMTIgKzc1OSw4IEBAIHN0YXRpYyBTdHJpbmcgcm9sZVZhbHVlVG9TdHJpbmco
dW5zaWduZWQgcm9sZVZhbHVlKQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZSgpCiB7Ci0gICAgdW5zaWduZWQgcm9sZVZhbHVlOwotICAgIHNf
Y29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmcm9sZVZhbHVlXSB7
Ci0gICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIHJvbGVW
YWx1ZSA9IG1fZWxlbWVudC0+cm9sZSgpOwotICAgIH0pOwotCisgICAgbV9lbGVtZW50LT51cGRh
dGVCYWNraW5nU3RvcmUoKTsKKyAgICBhdXRvIHJvbGVWYWx1ZSA9IG1fZWxlbWVudC0+cm9sZSgp
OwogICAgIGF1dG8gcm9sZVZhbHVlU3RyaW5nID0gcm9sZVZhbHVlID09IFdlYkNvcmU6OkF0c3Bp
OjpSb2xlOjpMYW5kbWFyayA/IHhtbFJvbGVWYWx1ZVN0cmluZyhtX2VsZW1lbnQtPmF0dHJpYnV0
ZXMoKS5nZXQoInhtbC1yb2xlcyIpKSA6IHJvbGVWYWx1ZVRvU3RyaW5nKHJvbGVWYWx1ZSk7CiAg
ICAgaWYgKHJvbGVWYWx1ZVN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBKU1N0cmlu
Z0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApOwpAQCAtODE2LDEyICs3NzUsMTQgQEAg
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUo
KQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm9s
ZURlc2NyaXB0aW9uKCkKIHsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwog
ICAgIGF1dG8gcm9sZURlc2NyaXB0aW9uID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKCkuZ2V0KCJy
b2xlZGVzY3JpcHRpb24iKTsKICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSht
YWtlU3RyaW5nKCJBWFJvbGVEZXNjcmlwdGlvbjogIiwgcm9sZURlc2NyaXB0aW9uKSkubGVha1Jl
ZigpOwogfQogCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y29tcHV0ZWRSb2xlU3RyaW5nKCkKIHsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdT
dG9yZSgpOwogICAgIGF1dG8gY29tcHV0ZWRSb2xlID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKCku
Z2V0KCJjb21wdXRlZC1yb2xlIik7CiAgICAgaWYgKGNvbXB1dGVkUm9sZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApOwpA
QCAtODMxLDMwICs3OTIsMjEgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNvbXB1dGVkUm9sZVN0cmluZygpCiAKIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSgpCiB7Ci0gICAgU3RyaW5nIG5hbWU7
Ci0gICAgc19jb250cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZuYW1l
XSB7Ci0gICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG5h
bWUgPSBTdHJpbmc6OmZyb21VVEY4KG1fZWxlbWVudC0+bmFtZSgpLmRhdGEoKSk7Ci0gICAgfSk7
Ci0KLSAgICBhdXRvIHRpdGxlVmFsdWUgPSBtYWtlU3RyaW5nKCJBWFRpdGxlOiAiLCBuYW1lKTsK
KyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIGF1dG8gdGl0bGVWYWx1
ZSA9IG1ha2VTdHJpbmcoIkFYVGl0bGU6ICIsIFN0cmluZzo6ZnJvbVVURjgobV9lbGVtZW50LT5u
YW1lKCkpKTsKICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh0aXRsZVZhbHVl
KS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpkZXNjcmlwdGlvbigpCiB7Ci0gICAgU3RyaW5nIGRlc2NyaXB0aW9uOwotICAg
IHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmZGVzY3JpcHRp
b25dIHsKLSAgICAgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAgICAg
ZGVzY3JpcHRpb24gPSBTdHJpbmc6OmZyb21VVEY4KG1fZWxlbWVudC0+ZGVzY3JpcHRpb24oKS5k
YXRhKCkpOwotICAgIH0pOwotCi0gICAgYXV0byBkZXNjcmlwdGlvblZhbHVlID0gbWFrZVN0cmlu
ZygiQVhEZXNjcmlwdGlvbjogIiwgZGVzY3JpcHRpb24pOworICAgIG1fZWxlbWVudC0+dXBkYXRl
QmFja2luZ1N0b3JlKCk7CisgICAgYXV0byBkZXNjcmlwdGlvblZhbHVlID0gbWFrZVN0cmluZygi
QVhEZXNjcmlwdGlvbjogIiwgU3RyaW5nOjpmcm9tVVRGOChtX2VsZW1lbnQtPmRlc2NyaXB0aW9u
KCkpKTsKICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShkZXNjcmlwdGlvblZh
bHVlKS5sZWFrUmVmKCk7CiB9CiAKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpvcmllbnRhdGlvbigpIGNvbnN0CiB7CisgICAgbV9lbGVtZW50LT51cGRh
dGVCYWNraW5nU3RvcmUoKTsKICAgICBjb25zdCBjaGFyKiBvcmllbnRhdGlvbiA9IG51bGxwdHI7
CiAgICAgaWYgKGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRz
cGk6OlN0YXRlOjpIb3Jpem9udGFsKSkKICAgICAgICAgb3JpZW50YXRpb24gPSAiQVhIb3Jpem9u
dGFsT3JpZW50YXRpb24iOwpAQCAtODg5LDYgKzg0MSw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsYW5ndWFnZSgpCiAKIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWxwVGV4dCgpIGNvbnN0CiB7Cisg
ICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICBhdXRvIHJlbGF0aW9uTWFw
ID0gbV9lbGVtZW50LT5yZWxhdGlvbk1hcCgpOwogICAgIGF1dG8gdGFyZ2V0cyA9IHJlbGF0aW9u
TWFwLmdldChXZWJDb3JlOjpBdHNwaTo6UmVsYXRpb246OkRlc2NyaWJlZEJ5KTsKICAgICBpZiAo
dGFyZ2V0cy5pc0VtcHR5KCkpCkBAIC05MTEsNTQgKzg2NCw1MCBAQCBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdAogCiBkb3Vi
bGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6eCgpCiB7CisgICAgbV9lbGVtZW50LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKICAgICByZXR1cm4gbV9lbGVtZW50LT5lbGVtZW50UmVjdChXZWJDb3Jl
OjpBdHNwaTo6Q29vcmRpbmF0ZVR5cGU6OlNjcmVlbkNvb3JkaW5hdGVzKS54KCk7CiB9CiAKIGRv
dWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp5KCkKIHsKKyAgICBtX2VsZW1lbnQtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOwogICAgIHJldHVybiBtX2VsZW1lbnQtPmVsZW1lbnRSZWN0KFdlYkNv
cmU6OkF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpLnkoKTsKIH0KIAog
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OndpZHRoKCkKIHsKKyAgICBtX2VsZW1lbnQt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHJldHVybiBtX2VsZW1lbnQtPmVsZW1lbnRSZWN0
KFdlYkNvcmU6OkF0c3BpOjpDb29yZGluYXRlVHlwZTo6U2NyZWVuQ29vcmRpbmF0ZXMpLndpZHRo
KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpoZWlnaHQoKQogeworICAg
IG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgcmV0dXJuIG1fZWxlbWVudC0+
ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpTY3JlZW5Db29yZGlu
YXRlcykuaGVpZ2h0KCk7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlj
a1BvaW50WCgpCiB7CisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICBh
dXRvIHJlY3QgPSBtX2VsZW1lbnQtPmVsZW1lbnRSZWN0KFdlYkNvcmU6OkF0c3BpOjpDb29yZGlu
YXRlVHlwZTo6V2luZG93Q29vcmRpbmF0ZXMpOwogICAgIHJldHVybiByZWN0LmNlbnRlcigpLngo
KTsKIH0KIAogZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNsaWNrUG9pbnRZKCkKIHsK
KyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIGF1dG8gcmVjdCA9IG1f
ZWxlbWVudC0+ZWxlbWVudFJlY3QoV2ViQ29yZTo6QXRzcGk6OkNvb3JkaW5hdGVUeXBlOjpXaW5k
b3dDb29yZGluYXRlcyk7CiAgICAgcmV0dXJuIHJlY3QuY2VudGVyKCkueSgpOwogfQogCiBkb3Vi
bGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUoKSBjb25zdAogewotICAgIGlmICht
X2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2Jq
ZWN0QXRzcGk6OkludGVyZmFjZTo6VmFsdWUpKSB7Ci0gICAgICAgIGRvdWJsZSBjdXJyZW50VmFs
dWU7Ci0gICAgICAgIHNfY29udHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlz
LCAmY3VycmVudFZhbHVlXSB7Ci0gICAgICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdT
dG9yZSgpOwotICAgICAgICAgICAgY3VycmVudFZhbHVlID0gbV9lbGVtZW50LT5jdXJyZW50VmFs
dWUoKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7Ci0gICAgfQor
ICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgaWYgKG1fZWxlbWVudC0+
aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6
SW50ZXJmYWNlOjpWYWx1ZSkpCisgICAgICAgIHJldHVybiBtX2VsZW1lbnQtPmN1cnJlbnRWYWx1
ZSgpOwogCiAgICAgLy8gQ29uc2lkZXIgaGVhZGluZ3MgYXMgYW4gc3BlY2lhbCBjYXNlIHdoZW4g
cmV0dXJuaW5nIHRoZSBpbnQgdmFsdWUuCi0gICAgdW5zaWduZWQgZWxlbWVudFJvbGU7Ci0gICAg
c19jb250cm9sbGVyLT5leGVjdXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZlbGVtZW50Um9s
ZV0gewotICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBl
bGVtZW50Um9sZSA9IG1fZWxlbWVudC0+cm9sZSgpOwotICAgIH0pOwotICAgIGlmIChlbGVtZW50
Um9sZSA9PSBXZWJDb3JlOjpBdHNwaTo6Um9sZTo6SGVhZGluZykKKyAgICBpZiAobV9lbGVtZW50
LT5yb2xlKCkgPT0gV2ViQ29yZTo6QXRzcGk6OlJvbGU6OkhlYWRpbmcpCiAgICAgICAgIHJldHVy
biBtX2VsZW1lbnQtPmF0dHJpYnV0ZXMoKS5nZXQoImxldmVsIikudG9Eb3VibGUoKTsKIAogICAg
IHJldHVybiAwOwpAQCAtOTY5LDEyICs5MTgsOCBAQCBkb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bWluVmFsdWUoKQogICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFp
bnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlZhbHVlKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBkb3VibGUgbWluaW11bVZhbHVlOwotICAgIHNfY29u
dHJvbGxlci0+ZXhlY3V0ZU9uQVhUaHJlYWRBbmRXYWl0KFt0aGlzLCAmbWluaW11bVZhbHVlXSB7
Ci0gICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgICAgIG1pbmlt
dW1WYWx1ZSA9IG1fZWxlbWVudC0+bWluaW11bVZhbHVlKCk7Ci0gICAgfSk7Ci0gICAgcmV0dXJu
IG1pbmltdW1WYWx1ZTsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAg
IHJldHVybiBtX2VsZW1lbnQtPm1pbmltdW1WYWx1ZSgpOwogfQogCiBkb3VibGUgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bWF4VmFsdWUoKQpAQCAtOTgyLDE2ICs5MjcsMTMgQEAgZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1heFZhbHVlKCkKICAgICBpZiAoIW1fZWxlbWVudC0+aW50
ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50
ZXJmYWNlOjpWYWx1ZSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgZG91YmxlIG1heGltdW1W
YWx1ZTsKLSAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywg
Jm1heGltdW1WYWx1ZV0gewotICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgp
OwotICAgICAgICBtYXhpbXVtVmFsdWUgPSBtX2VsZW1lbnQtPm1heGltdW1WYWx1ZSgpOwotICAg
IH0pOwotICAgIHJldHVybiBtYXhpbXVtVmFsdWU7CisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNr
aW5nU3RvcmUoKTsKKyAgICByZXR1cm4gbV9lbGVtZW50LT5tYXhpbXVtVmFsdWUoKTsKIH0KIAog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVz
Y3JpcHRpb24oKQogeworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAg
YXV0byBhdHRyaWJ1dGVzID0gbV9lbGVtZW50LT5hdHRyaWJ1dGVzKCk7CiAgICAgYXV0byB2YWx1
ZSA9IG1ha2VTdHJpbmcoIkFYVmFsdWVEZXNjcmlwdGlvbjogIiwgYXR0cmlidXRlcy5nZXQoInZh
bHVldGV4dCIpKTsKICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZSh2YWx1ZSku
bGVha1JlZigpOwpAQCAtMTAyMSw0NiArOTYzLDU1IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNEZWNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQoKQogCiBib29sIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmlzRW5hYmxlZCgpCiB7CisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3Rv
cmUoKTsKICAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJD
b3JlOjpBdHNwaTo6U3RhdGU6OkVuYWJsZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAogeworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2lu
Z1N0b3JlKCk7CiAgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwg
V2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpSZXF1aXJlZCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QKIHsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJh
Y2tpbmdTdG9yZSgpOwogICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0
KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6Rm9jdXNlZCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZCgpIGNvbnN0CiB7CisgICAgbV9lbGVtZW50LT51cGRh
dGVCYWNraW5nU3RvcmUoKTsKICAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50
LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OlNlbGVjdGVkKTsKIH0KIAogYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKIHsKKyAg
ICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHJldHVybiBjaGVja0VsZW1l
bnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6QWN0aXZlKTsK
IH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkgY29uc3QKIHsK
KyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHJldHVybiBjaGVja0Vs
ZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6RXhwYW5k
ZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0
CiB7CisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICByZXR1cm4gY2hl
Y2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6OkNo
ZWNrZWQpOwogfQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0
ZSgpIGNvbnN0CiB7CisgICAgbV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICBy
ZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6
U3RhdGU6OkluZGV0ZXJtaW5hdGUpOwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdAogeworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2lu
Z1N0b3JlKCk7CiAgICAgYXV0byBsZXZlbCA9IG1fZWxlbWVudC0+YXR0cmlidXRlcygpLmdldCgi
bGV2ZWwiKTsKICAgICBpZiAobGV2ZWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKQEAg
LTEwNzUsMTEgKzEwMjYsMTMgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNwZWFrQXMoKQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFy
aWFJc0dyYWJiZWQoKSBjb25zdAogeworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7CiAgICAgcmV0dXJuIG1fZWxlbWVudC0+YXR0cmlidXRlcygpLmdldCgiZ3JhYmJlZCIpID09
ICJ0cnVlIjsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNvbnN0CiB7CisgICAgbV9lbGVtZW50LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKICAgICBhdXRvIGRyb3BFZmZlY3RzID0gbV9lbGVtZW50LT5hdHRyaWJ1
dGVzKCkuZ2V0KCJkcm9wZWZmZWN0Iik7CiAgICAgaWYgKGRyb3BFZmZlY3RzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCk7
CkBAIC0xMTEwLDYgKzEwNjMsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cmFuZ2VGb3JMaW5lKGludCBsaW5lKQogICAgIGlmICghbV9lbGVtZW50
LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3Bp
OjpJbnRlcmZhY2U6OlRleHQpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycyhudWxscHRyLCAwKTsKIAorICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgb2Zmc2V0OwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDw9IGxpbmU7ICsraSkKICAgICAgICAgb2Zmc2V0ID0gbV9lbGVtZW50LT5ib3VuZGFyeU9mZnNl
dChvZmZzZXQueSgpLCBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OlRleHRHcmFu
dWxhcml0eTo6TGluZVN0YXJ0KTsKQEAgLTExMjgsNiArMTA4Miw3IEBAIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25l
ZCBsb2NhdGlvCiAgICAgaWYgKCFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGV4dCkpCiAgICAgICAg
IHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApOwogCisgICAg
bV9lbGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICBhdXRvIHJlY3QgPSBtX2VsZW1l
bnQtPmJvdW5kc0ZvclJhbmdlKGxvY2F0aW9uLCBsZW5ndGgsIFdlYkNvcmU6OkF0c3BpOjpDb29y
ZGluYXRlVHlwZTo6V2luZG93Q29vcmRpbmF0ZXMpOwogICAgIGF1dG8gYm91bmRzID0gbWFrZVN0
cmluZygneycsIHJlY3QueCgpLCAiLCAiLCByZWN0LnkoKSwgIiwgIiwgcmVjdC53aWR0aCgpLCAi
LCAiLCByZWN0LmhlaWdodCgpLCAnfScpOwogICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5
Q3JlYXRlKGJvdW5kcykubGVha1JlZigpOwpAQCAtMTE1Niw2ICsxMTExLDcgQEAgSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdG
b3JSYW5nZSh1bnNpZ24KICAgICAgICAgfQogICAgIH07CiAKKyAgICBtX2VsZW1lbnQtPnVwZGF0
ZUJhY2tpbmdTdG9yZSgpOwogICAgIGJ1aWxkZXIuYXBwZW5kKCJcblx0RGVmYXVsdCB0ZXh0IGF0
dHJpYnV0ZXM6Iik7CiAgICAgYnVpbGRBdHRyaWJ1dGVzKG1fZWxlbWVudC0+dGV4dEF0dHJpYnV0
ZXMoKSk7CiAKQEAgLTEyNDQsMTIgKzEyMDAsOCBAQCBpbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93Q291bnQoKQogICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRhYmxlKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgY291bnQ7Ci0gICAgc19jb250cm9sbGVyLT5leGVj
dXRlT25BWFRocmVhZEFuZFdhaXQoW3RoaXMsICZjb3VudF0gewotICAgICAgICBtX2VsZW1lbnQt
PnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBjb3VudCA9IG1fZWxlbWVudC0+cm93Q291
bnQoKTsKLSAgICB9KTsKLSAgICByZXR1cm4gY291bnQ7CisgICAgbV9lbGVtZW50LT51cGRhdGVC
YWNraW5nU3RvcmUoKTsKKyAgICByZXR1cm4gbV9lbGVtZW50LT5yb3dDb3VudCgpOwogfQogCiBp
bnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uQ291bnQoKQpAQCAtMTI1NywxMiArMTIw
OSw4IEBAIGludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCgpCiAgICAgaWYg
KCFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGFibGUpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IGludCBjb3VudDsKLSAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChb
dGhpcywgJmNvdW50XSB7Ci0gICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7
Ci0gICAgICAgIGNvdW50ID0gbV9lbGVtZW50LT5jb2x1bW5Db3VudCgpOwotICAgIH0pOwotICAg
IHJldHVybiBjb3VudDsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAg
IHJldHVybiBtX2VsZW1lbnQtPmNvbHVtbkNvdW50KCk7CiB9CiAKIGludCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjppbmRleEluVGFibGUoKQpAQCAtMTI3NSwxNyArMTIyMywxMyBAQCBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZSgp
CiAgICAgaWYgKCFtX2VsZW1lbnQtPmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFjZTo6VGFibGVDZWxsKSkKICAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0ciwgMCk7CiAKLSAgICBzdGQ6
Om9wdGlvbmFsPHVuc2lnbmVkPiBwb3NpdGlvbiwgc3BhbjsKLSAgICBzX2NvbnRyb2xsZXItPmV4
ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywgJnBvc2l0aW9uLCAmc3Bhbl0gewotICAgICAg
ICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwotICAgICAgICBwb3NpdGlvbiA9IG1f
ZWxlbWVudC0+Y2VsbFBvc2l0aW9uKCkuZmlyc3Q7Ci0gICAgICAgIHNwYW4gPSBtX2VsZW1lbnQt
PnJvd1NwYW4oKTsKLSAgICB9KTsKLQorICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3Jl
KCk7CisgICAgYXV0byBwb3NpdGlvbiA9IG1fZWxlbWVudC0+Y2VsbFBvc2l0aW9uKCkuZmlyc3Q7
CisgICAgYXV0byBzcGFuID0gbV9lbGVtZW50LT5yb3dTcGFuKCk7CiAgICAgaWYgKCFwb3NpdGlv
biB8fCAhc3BhbikKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
bnVsbHB0ciwgMCk7CiAKLSAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRyeUNyZWF0ZShtYWtl
U3RyaW5nKCd7JywgKnBvc2l0aW9uLCAiLCAiLCAqc3BhbiwgJ30nKSkubGVha1JlZigpOworICAg
IHJldHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG1ha2VTdHJpbmcoJ3snLCAqcG9zaXRp
b24sICIsICIsIHNwYW4sICd9JykpLmxlYWtSZWYoKTsKIH0KIAogSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVtbkluZGV4UmFuZ2UoKQpAQCAtMTI5
MywxNyArMTIzNywxMyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6Y29sdW1uSW5kZXhSYW5nZSgpCiAgICAgaWYgKCFtX2VsZW1lbnQtPmludGVyZmFj
ZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OkludGVyZmFj
ZTo6VGFibGVDZWxsKSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnMobnVsbHB0ciwgMCk7CiAKLSAgICBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBwb3NpdGlvbiwg
c3BhbjsKLSAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywg
JnBvc2l0aW9uLCAmc3Bhbl0gewotICAgICAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOwotICAgICAgICBwb3NpdGlvbiA9IG1fZWxlbWVudC0+Y2VsbFBvc2l0aW9uKCkuc2Vjb25k
OwotICAgICAgICBzcGFuID0gbV9lbGVtZW50LT5jb2x1bW5TcGFuKCk7Ci0gICAgfSk7Ci0KKyAg
ICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIGF1dG8gcG9zaXRpb24gPSBt
X2VsZW1lbnQtPmNlbGxQb3NpdGlvbigpLnNlY29uZDsKKyAgICBhdXRvIHNwYW4gPSBtX2VsZW1l
bnQtPmNvbHVtblNwYW4oKTsKICAgICBpZiAoIXBvc2l0aW9uIHx8ICFzcGFuKQogICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKTsKIAotICAgIHJl
dHVybiBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG1ha2VTdHJpbmcoJ3snLCAqcG9zaXRpb24s
ICIsICIsICpzcGFuLCAnfScpKS5sZWFrUmVmKCk7CisgICAgcmV0dXJuIE9wYXF1ZUpTU3RyaW5n
Ojp0cnlDcmVhdGUobWFrZVN0cmluZygneycsICpwb3NpdGlvbiwgIiwgIiwgc3BhbiwgJ30nKSku
bGVha1JlZigpOwogfQogCiBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVtbkFuZFJvdyh1bnNpZ25lZCBjb2x1bW4sIHVuc2ln
bmVkIHJvdykKQEAgLTEzMTEsMTUgKzEyNTEsMTAgQEAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNlbGxGb3JDb2x1bW5BbmRSb3codW5zaWcK
ICAgICBpZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpUYWJsZSkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaT4g
Y2VsbDsKLSAgICBzX2NvbnRyb2xsZXItPmV4ZWN1dGVPbkFYVGhyZWFkQW5kV2FpdChbdGhpcywg
JmNlbGwsIGNvbHVtbiwgcm93XSB7Ci0gICAgICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0
b3JlKCk7Ci0gICAgICAgIGNlbGwgPSBtX2VsZW1lbnQtPmNlbGwocm93LCBjb2x1bW4pOwotICAg
IH0pOwotICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGNlbGwuZ2V0KCkpOworICAgIG1fZWxl
bWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgaWYgKGF1dG8qIGNlbGwgPSBtX2VsZW1l
bnQtPmNlbGwocm93LCBjb2x1bW4pKQorICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Y3JlYXRlKGNlbGwpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aG9yaXpvbnRhbFNj
cm9sbGJhcigpIGNvbnN0CkBAIC0xMzM3LDYgKzEyNzIsNyBAQCBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogICAgIGlm
ICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlRleHQpKQogICAgICAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycyhudWxscHRyLCAwKTsKIAorICAgIG1fZWxlbWVudC0+dXBkYXRl
QmFja2luZ1N0b3JlKCk7CiAgICAgYXV0byBvZmZzZXQgPSBtX2VsZW1lbnQtPnNlbGVjdGVkUmFu
Z2UoKTsKICAgICBhdXRvIHJhbmdlID0gbWFrZVN0cmluZygneycsIG9mZnNldC54KCksICIsICIs
IG9mZnNldC55KCkgLSBvZmZzZXQueCgpLCAnfScpOwogICAgIHJldHVybiBPcGFxdWVKU1N0cmlu
Zzo6dHJ5Q3JlYXRlKHJhbmdlKS5sZWFrUmVmKCk7CkBAIC0xMzU4LDYgKzEyOTQsNyBAQCB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCiAgICAgaWYgKCFtX2VsZW1lbnQt
PmludGVyZmFjZXMoKS5jb250YWlucyhXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6
OkludGVyZmFjZTo6VmFsdWUpKQogICAgICAgICByZXR1cm47CiAKKyAgICBtX2VsZW1lbnQtPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIG1fZWxlbWVudC0+c2V0Q3VycmVudFZhbHVlKGludFZh
bHVlKCkgKyBtX2VsZW1lbnQtPm1pbmltdW1JbmNyZW1lbnQoKSk7CiB9CiAKQEAgLTEzNjYsNiAr
MTMwMyw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGVjcmVtZW50KCkKICAgICBp
ZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxp
dHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpWYWx1ZSkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgbV9lbGVtZW50LT5zZXRDdXJy
ZW50VmFsdWUoaW50VmFsdWUoKSAtIG1fZWxlbWVudC0+bWluaW11bUluY3JlbWVudCgpKTsKIH0K
IApAQCAtMTM3NSw2ICsxMzEzLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzaG93
TWVudSgpCiAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJlc3MoKQogeworICAgIG1f
ZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgbV9lbGVtZW50LT5kb0FjdGlvbigp
OwogfQogCkBAIC0xMzg3LDYgKzEzMjYsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNldFNlbGVjdGVkQ2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIGlmICgh
bV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9i
amVjdEF0c3BpOjpJbnRlcmZhY2U6OlNlbGVjdGlvbikpCiAgICAgICAgIHJldHVybjsKIAorICAg
IG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgbV9lbGVtZW50LT5zZXRDaGls
ZFNlbGVjdGVkKGluZGV4LCB0cnVlKTsKIH0KIApAQCAtMTM5NSw2ICsxMzM1LDcgQEAgdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZW1vdmVTZWxlY3Rpb25BdEluZGV4KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAogICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29udGFpbnMoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OlNlbGVjdGlvbikpCiAg
ICAgICAgIHJldHVybjsKIAorICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAg
ICAgbV9lbGVtZW50LT5zZXRDaGlsZFNlbGVjdGVkKGluZGV4LCBmYWxzZSk7CiB9CiAKQEAgLTE0
MDMsNiArMTM0NCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xlYXJTZWxlY3Rl
ZENoaWxkcmVuKCkgY29uc3QKICAgICBpZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRh
aW5zKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpTZWxlY3Rp
b24pKQogICAgICAgICByZXR1cm47CiAKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9y
ZSgpOwogICAgIG1fZWxlbWVudC0+Y2xlYXJTZWxlY3Rpb24oKTsKIH0KIApAQCAtMTQxNiw2ICsx
MzU4LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmRvY3VtZW50RW5jb2RpbmcoKQogICAgIGlmICghbV9lbGVtZW50LT5pbnRlcmZhY2VzKCkuY29u
dGFpbnMoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpOjpJbnRlcmZhY2U6OkRvY3Vt
ZW50KSkKICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobnVsbHB0
ciwgMCk7CiAKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHJldHVy
biBPcGFxdWVKU1N0cmluZzo6dHJ5Q3JlYXRlKG1fZWxlbWVudC0+ZG9jdW1lbnRBdHRyaWJ1dGUo
IkVuY29kaW5nIikpLmxlYWtSZWYoKTsKIH0KIApAQCAtMTQyNCw2ICsxMzY3LDcgQEAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRvY3VtZW50VVJJKCkK
ICAgICBpZiAoIW1fZWxlbWVudC0+aW50ZXJmYWNlcygpLmNvbnRhaW5zKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaTo6SW50ZXJmYWNlOjpEb2N1bWVudCkpCiAgICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG51bGxwdHIsIDApOwogCisgICAgbV9lbGVt
ZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OnRy
eUNyZWF0ZShtX2VsZW1lbnQtPmRvY3VtZW50QXR0cmlidXRlKCJVUkkiKSkubGVha1JlZigpOwog
fQogCkBAIC0xNDcwLDMxICsxNDE0LDM3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIoKQogCiBib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIHsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdT
dG9yZSgpOwogICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdl
YkNvcmU6OkF0c3BpOjpTdGF0ZTo6Rm9jdXNhYmxlKTsKIH0KIAogYm9vbCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAogeworICAgIG1fZWxlbWVudC0+dXBkYXRl
QmFja2luZ1N0b3JlKCk7CiAgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5n
ZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpTZWxlY3RhYmxlKTsKIH0KIAogYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNvbnN0CiB7CisgICAgbV9l
bGVtZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICByZXR1cm4gY2hlY2tFbGVtZW50U3Rh
dGUobV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6Ok11bHRpc2VsZWN0YWJs
ZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlKCkgY29uc3QK
IHsKKyAgICBtX2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHJldHVybiBjaGVj
a0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0ZTo6Vmlz
aWJsZSk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBj
b25zdAogeworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgcmV0dXJu
ICFjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIFdlYkNvcmU6OkF0c3BpOjpTdGF0
ZTo6U2hvd2luZyk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNDb2xsYXBz
ZWQoKSBjb25zdAogeworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAg
cmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6
OlN0YXRlOjpDb2xsYXBzZWQpOwogfQogCkBAIC0xNTA1LDE2ICsxNDU1LDE5IEBAIGJvb2wgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkgY29uc3QKIAogYm9vbCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojppc1NpbmdsZUxpbmUoKSBjb25zdAogeworICAgIG1fZWxlbWVudC0+dXBk
YXRlQmFja2luZ1N0b3JlKCk7CiAgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVu
dC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpTaW5nbGVMaW5lKTsKIH0KIAogYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGluZSgpIGNvbnN0CiB7CisgICAgbV9lbGVt
ZW50LT51cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUo
bV9lbGVtZW50LmdldCgpLCBXZWJDb3JlOjpBdHNwaTo6U3RhdGU6Ok11bHRpTGluZSk7CiB9CiAK
IGJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAoKSBjb25zdAogeworICAgIG1f
ZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0
YXRlKG1fZWxlbWVudC5nZXQoKSwgV2ViQ29yZTo6QXRzcGk6OlN0YXRlOjpIYXNQb3B1cCk7CiB9
CiAKQEAgLTE2NTIsMTEgKzE2MDUsMTMgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpz
ZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclIKIAogdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKIHsKKyAgICBt
X2VsZW1lbnQtPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIG1fZWxlbWVudC0+c2Nyb2xsVG9N
YWtlVmlzaWJsZShXZWJDb3JlOjpBdHNwaTo6U2Nyb2xsVHlwZTo6QW55d2hlcmUpOwogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGlu
dCB5KQogeworICAgIG1fZWxlbWVudC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CiAgICAgbV9lbGVt
ZW50LT5zY3JvbGxUb1BvaW50KHsgeCwgeSB9LCBXZWJDb3JlOjpBdHNwaTo6Q29vcmRpbmF0ZVR5
cGU6OldpbmRvd0Nvb3JkaW5hdGVzKTsKIH0KIAo=
</data>
<flag name="review"
          id="475161"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>