<?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>238198</bug_id>
          
          <creation_ts>2022-03-22 03:29:24 -0700</creation_ts>
          <short_desc>[GTK][WPE] Remove the ATK implementation</short_desc>
          <delta_ts>2022-03-24 04:40:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=ATSPI</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=238320</see_also>
          <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>
          
          
          <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>mcatanzaro</cc>
    
    <cc>mifenton</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>1853598</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-22 03:29:24 -0700</bug_when>
    <thetext>It&apos;s been replaced by new ATSPI implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853599</commentid>
    <comment_count>1</comment_count>
      <attachid>455358</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-22 03:36:03 -0700</bug_when>
    <thetext>Created attachment 455358
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853605</commentid>
    <comment_count>2</comment_count>
      <attachid>455358</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-22 04:17:37 -0700</bug_when>
    <thetext>Comment on attachment 455358
Patch

Nice to see so much code go away 💣️</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1853634</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-22 06:35:26 -0700</bug_when>
    <thetext>Committed r291613 (?): &lt;https://commits.webkit.org/r291613&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854444</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-03-23 15:37:26 -0700</bug_when>
    <thetext>I&apos;m seeing a build failure:

In file included from /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/API/glib/WebKitWebViewAccessible.cpp:21:
/home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/API/glib/WebKitWebViewAccessible.h:24:10: fatal error: atk/atk.h: No such file or directory
   24 | #include &lt;atk/atk.h&gt;
      |          ^~~~~~~~~~~
compilation terminated.

That&apos;s when building with -DUSE_GTK4=ON. WebKitWebViewAccessible still depends on AtkSocket. Maybe with GTK 3 the include dirs are inherited from GTK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854481</commentid>
    <comment_count>5</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-23 16:25:28 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #4)
&gt; I&apos;m seeing a build failure:
&gt; 
&gt; In file included from
&gt; /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/API/glib/
&gt; WebKitWebViewAccessible.cpp:21:
&gt; /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/API/glib/
&gt; WebKitWebViewAccessible.h:24:10: fatal error: atk/atk.h: No such file or
&gt; directory
&gt;    24 | #include &lt;atk/atk.h&gt;
&gt;       |          ^~~~~~~~~~~
&gt; compilation terminated.
&gt; 
&gt; That&apos;s when building with -DUSE_GTK4=ON. WebKitWebViewAccessible still
&gt; depends on AtkSocket. Maybe with GTK 3 the include dirs are inherited from
&gt; GTK?

This made the build complete here, but I didn&apos;t test further than that:

  https://o.perezdecastro.org/9fh9za0w.diff

I&apos;ll look into submitting it as a proper patch later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1854648</commentid>
    <comment_count>6</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-03-24 04:40:09 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #5)
&gt; (In reply to Michael Catanzaro from comment #4)
&gt; &gt; I&apos;m seeing a build failure:
&gt; &gt; 
&gt; &gt; In file included from
&gt; &gt; /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/API/glib/
&gt; &gt; WebKitWebViewAccessible.cpp:21:
&gt; &gt; /home/mcatanzaro/Projects/WebKit/Source/WebKit/UIProcess/API/glib/
&gt; &gt; WebKitWebViewAccessible.h:24:10: fatal error: atk/atk.h: No such file or
&gt; &gt; directory
&gt; &gt;    24 | #include &lt;atk/atk.h&gt;
&gt; &gt;       |          ^~~~~~~~~~~
&gt; &gt; compilation terminated.
&gt; &gt; 
&gt; &gt; That&apos;s when building with -DUSE_GTK4=ON. WebKitWebViewAccessible still
&gt; &gt; depends on AtkSocket. Maybe with GTK 3 the include dirs are inherited from
&gt; &gt; GTK?
&gt; 
&gt; This made the build complete here, but I didn&apos;t test further than that:
&gt; 
&gt;   https://o.perezdecastro.org/9fh9za0w.diff
&gt; 
&gt; I&apos;ll look into submitting it as a proper patch later.

Here we go, bug #238320</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455358</attachid>
            <date>2022-03-22 03:36:03 -0700</date>
            <delta_ts>2022-03-22 04:17:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-no-atk.diff</filename>
            <type>text/plain</type>
            <size>490834</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkZTg5NDJkOGY5YjguLjgz
MGQ2MjZhZmFjYiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDIyLTAzLTIyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIFJlbW92ZSB0aGUgQVRLIGltcGxlbWVudGF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzgx
OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNv
dXJjZS9jbWFrZS9PcHRpb25zR1RLLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9PcHRp
b25zV1BFLmNtYWtlOgorCiAyMDIyLTAzLTIxICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI5MTA1NS4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA3NzNjMGQyNTVhN2YuLmZjYzEzNTQ1NjY3MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDIyLTAzLTIyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXVtXUEVdIFJlbW92ZSB0aGUgQVRLIGltcGxlbWVudGF0aW9uCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzgxOTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
Z3RrL2FyaWEtbW9kYWwtc3RhdGUtZXhwb3NlZC1leHBlY3RlZC50eHQ6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9ndGsvYXJpYS1tb2RhbC1zdGF0ZS1leHBvc2VkLmh0bWw6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvbmFtZS1mcm9tLWxhYmVsLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2d0ay9uYW1lLWZyb20tbGFiZWwuaHRtbDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2d0ay9vYmplY3QtYXR0cmlidXRlcy1leHBlY3RlZC50eHQ6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvb2JqZWN0LWF0dHJpYnV0ZXMuaHRtbDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L2xhbmd1YWdlLWF0dHJpYnV0ZS5odG1sOgorCiAyMDIyLTAzLTIxICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhaWRAYXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gTWFr
ZSBHcmFwaGljc0NvbnRleHRTdGF0ZSBrZWVwIHRyYWNrIG9mIGNoYW5nZXMgdGlsbCB0aGV5IGFy
ZSBhcHBsaWVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2d0ay9hcmlh
LW1vZGFsLXN0YXRlLWV4cG9zZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9ndGsvYXJpYS1tb2RhbC1zdGF0ZS1leHBvc2VkLWV4cGVjdGVkLnR4dAppbmRleCA2OTBh
MDk1ZDE4NWYuLmZlYjU0NThkMzM1OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9ndGsvYXJpYS1tb2RhbC1zdGF0ZS1leHBvc2VkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2d0ay9hcmlhLW1vZGFsLXN0YXRlLWV4cG9zZWQtZXhwZWN0
ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAotVGhpcyB0ZXN0cyB0aGF0IGEgZGlhbG9nIHdpdGggYXJp
YS1tb2RhbD0ndHJ1ZScgZXhwb3NlcyBBVEtfU1RBVEVfTU9EQUwKK1RoaXMgdGVzdHMgdGhhdCBh
IGRpYWxvZyB3aXRoIGFyaWEtbW9kYWw9J3RydWUnIGV4cG9zZXMgbW9kYWwgc3RhdGUKIAogT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L2d0ay9hcmlhLW1vZGFsLXN0YXRlLWV4cG9zZWQuaHRtbCBiL0xheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvZ3RrL2FyaWEtbW9kYWwtc3RhdGUtZXhwb3NlZC5odG1sCmluZGV4IDFmMWMx
NTViYjM0YS4uMTZkZWE3NDQ4NTE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L2d0ay9hcmlhLW1vZGFsLXN0YXRlLWV4cG9zZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L2d0ay9hcmlhLW1vZGFsLXN0YXRlLWV4cG9zZWQuaHRtbApAQCAtMTIsNyAr
MTIsNyBAQAogPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CiA8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KIDxzY3JpcHQ+Ci0gICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBhIGRpYWxvZyB3
aXRoIGFyaWEtbW9kYWw9J3RydWUnIGV4cG9zZXMgQVRLX1NUQVRFX01PREFMIik7CisgICAgZGVz
Y3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBhIGRpYWxvZyB3aXRoIGFyaWEtbW9kYWw9J3RydWUn
IGV4cG9zZXMgbW9kYWwgc3RhdGUiKTsKICAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKSB7CiAgICAgICAgIHZhciBheEVsZW1lbnQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRlc3QiKTsKICAgICAgICAgc2hvdWxkQmVUcnVlKCJh
eEVsZW1lbnQuYm9vbEF0dHJpYnV0ZVZhbHVlKCdBWE1vZGFsJykiKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvZ3RrL25hbWUtZnJvbS1sYWJlbC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2d0ay9uYW1lLWZyb20tbGFiZWwtZXhwZWN0ZWQu
dHh0CmluZGV4IDRmMDlmOWRiYzJkMS4uOWYwOGEyNDQ1YTQwIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L2d0ay9uYW1lLWZyb20tbGFiZWwtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvZ3RrL25hbWUtZnJvbS1sYWJlbC1leHBlY3RlZC50
eHQKQEAgLTEsNSArMSw1IEBACiBGdWxsIE5hbWU6Ci1UaGlzIHRlc3RzIHRoYXQgQXRrT2JqZWN0
cyBkZXJpdmUgdGhlaXIgbmFtZXMgZnJvbSBhc3NvY2lhdGVkIGxhYmVscy4KK1RoaXMgdGVzdHMg
dGhhdCBhY2Nlc3NpYmlsaXR5IG9iamVjdHMgZGVyaXZlIHRoZWlyIG5hbWVzIGZyb20gYXNzb2Np
YXRlZCBsYWJlbHMuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ndGsvbmFtZS1mcm9tLWxhYmVsLmh0bWwgYi9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2d0ay9uYW1lLWZyb20tbGFiZWwuaHRtbAppbmRleCBmMWYy
OWRhYmM1YzcuLmRlZTU3MWNjZDU4ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9ndGsvbmFtZS1mcm9tLWxhYmVsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9ndGsvbmFtZS1mcm9tLWxhYmVsLmh0bWwKQEAgLTIzLDcgKzIzLDcgQEAKICAgfQogCiAg
IGZ1bmN0aW9uIHN0YXJ0VGVzdCgpIHsKLSAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0
IEF0a09iamVjdHMgZGVyaXZlIHRoZWlyIG5hbWVzIGZyb20gYXNzb2NpYXRlZCBsYWJlbHMuIik7
CisgICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBhY2Nlc3NpYmlsaXR5IG9iamVjdHMg
ZGVyaXZlIHRoZWlyIG5hbWVzIGZyb20gYXNzb2NpYXRlZCBsYWJlbHMuIik7CiAKICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ndGsvb2JqZWN0LWF0dHJpYnV0ZXMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ndGsvb2JqZWN0LWF0dHJp
YnV0ZXMtZXhwZWN0ZWQudHh0CmluZGV4IGI0OGYxYWY5NjE4ZC4uN2M3YzdhNjdjYjBkIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2d0ay9vYmplY3QtYXR0cmlidXRlcy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ndGsvb2JqZWN0LWF0
dHJpYnV0ZXMtZXhwZWN0ZWQudHh0CkBAIC0yNCw3ICsyNCw3IEBAIE9kZAlFdmVuCiBmb28KIGJh
cgogYmF6Ci1UaGlzIHRlc3RzIHRoZSBleHBvc3VyZSBvZiBBdGsgb2JqZWN0IGF0dHJpYnV0ZXMu
CitUaGlzIHRlc3RzIHRoZSBleHBvc3VyZSBvZiBvYmplY3QgYXR0cmlidXRlcy4KIAogT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgogCkBAIC0yODIsNyArMjgyLDcgQEAgQVhQb3NpdGlvbjogIHsg
OC4wMDAwMCwgNDYyLjAwMCB9CiBBWFNpemU6IHsgNzg0LjAwMCwgNTMuMDAwMCB9CiBBWFRpdGxl
OgogQVhEZXNjcmlwdGlvbjoKLUFYVmFsdWU6IFRoaXMgdGVzdHMgdGhlIGV4cG9zdXJlIG9mIEF0
ayBvYmplY3QgYXR0cmlidXRlcy48XG4+PFxuPk9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi48XG4+
PFxuPjxcbj4KK0FYVmFsdWU6IFRoaXMgdGVzdHMgdGhlIGV4cG9zdXJlIG9mIG9iamVjdCBhdHRy
aWJ1dGVzLjxcbj48XG4+T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLjxcbj48XG4+PFxuPgogQVhG
b2N1c2FibGU6IDAKIEFYRm9jdXNlZDogMAogQVhTZWxlY3RhYmxlOiAwCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2d0ay9vYmplY3QtYXR0cmlidXRlcy5odG1sIGIvTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9ndGsvb2JqZWN0LWF0dHJpYnV0ZXMuaHRtbAppbmRleCBi
ZDY2OWQwZWFjZmEuLmQyMzRlOTJlNTE3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9ndGsvb2JqZWN0LWF0dHJpYnV0ZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L2d0ay9vYmplY3QtYXR0cmlidXRlcy5odG1sCkBAIC0yNiw3ICsyNiw3IEBACiA8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPHNjcmlw
dD4KLSAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGUgZXhwb3N1cmUgb2YgQXRrIG9iamVj
dCBhdHRyaWJ1dGVzLiIpOworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoZSBleHBvc3Vy
ZSBvZiBvYmplY3QgYXR0cmlidXRlcy4iKTsKICAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKSB7CiAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwogICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYm9keSIpLmZvY3VzKCk7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2xhbmd1YWdlLWF0dHJpYnV0ZS5odG1sIGIvTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9sYW5ndWFnZS1hdHRyaWJ1dGUuaHRtbAppbmRleCA1NmZkMzYxM2E4
YmQuLmRiZDBhZGE5Y2U1YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9s
YW5ndWFnZS1hdHRyaWJ1dGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L2xh
bmd1YWdlLWF0dHJpYnV0ZS5odG1sCkBAIC00LDcgKzQsNyBAQAogICAgICAgICB0ZXN0UnVubmVy
LmR1bXBBc1RleHQoKTsKIAogICAgIC8vIFRoZSBNYWMgcG9ydCBleHBvc2VzIHN0YXRpYyB0ZXh0
IG9iamVjdHMgYXMgYW4gYWNjZXNzaWJsZSBjaGlsZCBvZiBhbiBlbGVtZW50IHdpdGggdGV4dC4K
LSAgICAvLyBUaGUgQXRrIHBvcnQgZm9sZHMgc3RhdGljIHRleHQgb2JqZWN0cyBpbnRvIHRoZSBw
YXJlbnQgZWxlbWVudC4KKyAgICAvLyBUaGUgQVRTUEkgYmFzZWQgcG9ydHMgZm9sZCBzdGF0aWMg
dGV4dCBvYmplY3RzIGludG8gdGhlIHBhcmVudCBlbGVtZW50LgogICAgIGZ1bmN0aW9uIGdldFRl
eHRDaGlsZChhY2Nlc3NpYmlsaXR5T2JqZWN0KSB7CiAgICAgICAgIGlmIChhY2Nlc3NpYmlsaXR5
T2JqZWN0LmNoaWxkcmVuQ291bnQpCiAgICAgICAgICAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9i
amVjdC5jaGlsZEF0SW5kZXgoMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTA2OGM0ZDU1ODc2Li4yM2VmNTk2
Nzk3NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyODUgQEAKKzIwMjItMDMtMjIgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0g
UmVtb3ZlIHRoZSBBVEsgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODE5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1XUEUuY21ha2U6CisgICAgICAgICogU291cmNlc0dUSy50eHQ6CisgICAgICAgICogU291
cmNlc1dQRS50eHQ6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmg6Cisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdDo6Y2hpbGRIYXNQc2V1ZG9WaXNpYmxlTGlzdEl0ZW1N
YXJrZXJzKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjpjYW5TZXRW
YWx1ZUF0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnRl
eHRJdGVyYXRvckJlaGF2aW9yRm9yVGV4dFJhbmdlIGNvbnN0KToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aW5kZXhGb3JWaXNpYmxlUG9zaXRpb24gY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2hvdWxkTm90aWZ5QWN0aXZl
RGVzY2VuZGFudCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
VGFibGVDb2x1bW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlQ29s
dW1uOjpjb21wdXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCBjb25zdCk6CisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyOjpjb21wdXRlQWNj
ZXNzaWJpbGl0eUlzSWdub3JlZCBjb25zdCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsv
QVhPYmplY3RDYWNoZUF0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgIChXZWJDb3JlOjp3cmFwcGVy
UGFyZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmRldGFj
aFdyYXBwZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YXR0
YWNoV3JhcHBlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpw
bGF0Zm9ybVBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmdldExpc3RPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6bm90aWZ5
Q2hpbGRyZW5TZWxlY3Rpb25DaGFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6cG9zdFBsYXRmb3JtTm90aWZpY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRp
b24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZnJhbWVMb2Fk
aW5nRXZlbnRQbGF0Zm9ybU5vdGlmaWNhdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwbGF0Zm9ybUhhbmRsZUZvY3VzZWRVSUVsZW1lbnRDaGFuZ2VkKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9sbGVk
VG9BbmNob3IpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL0FjY2Vzc2li
aWxpdHlPYmplY3RBdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU9iamVjdDo6ZGV0YWNoUGxhdGZvcm1XcmFwcGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlJZ25vcmVBdHRhY2htZW50
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6
OmFjY2Vzc2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0IGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93c1RleHRSYW5nZXMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6Z2V0
TGVuZ3RoRm9yVGV4dFJhbmdlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVHZXROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRE
ZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChyZW1vdmVBdGtSZWxhdGlvbkJ5VHlwZSk6
IERlbGV0ZWQuCisgICAgICAgIChzZXRBdGtSZWxhdGlvblNldEZyb21Db3JlT2JqZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKGlzUm9vdE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlR2V0UGFyZW50KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVH
ZXROQ2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVJlZkNoaWxk
KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRJbmRleEluUGFyZW50KTog
RGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBdHRyaWJ1dGVzKTogRGVsZXRl
ZC4KKyAgICAgICAgKGF0a1JvbGUpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZUdldFJvbGUpOiBEZWxldGVkLgorICAgICAgICAoaXNUZXh0V2l0aENhcmV0KTogRGVsZXRlZC4K
KyAgICAgICAgKHNldEF0a1N0YXRlU2V0RnJvbUNvcmVPYmplY3QpOiBEZWxldGVkLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVJlZlN0YXRlU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVSZWZSZWxhdGlvblNldCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlSW5pdCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0T2JqZWN0
TG9jYWxlKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2NsYXNzX2luaXQp
OiBEZWxldGVkLgorICAgICAgICAocm9sZUlzVGV4dFR5cGUpOiBEZWxldGVkLgorICAgICAgICAo
aW50ZXJmYWNlTWFza0Zyb21PYmplY3QpOiBEZWxldGVkLgorICAgICAgICAodW5pcXVlQWNjZXNz
aWJpbGl0eVR5cGVOYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKGFjY2Vzc2liaWxpdHlUeXBlRnJv
bU9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlTmV3KTogRGVsZXRl
ZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVEZXRhY2gpOiBEZWxldGVkLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUlzRGV0YWNoZWQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZUNhY2hlQW5kUmV0dXJuQXRrUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtBY3Rpb25Eb0FjdGlvbik6IERl
bGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rQWN0aW9uR2V0TkFjdGlv
bnMpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0FjdGlvbkdl
dERlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcmxp
bmtBY3Rpb25HZXRLZXliaW5kaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVIeXBlcmxpbmtBY3Rpb25HZXROYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdF9hY2Nl
c3NpYmxlX2h5cGVybGlua19hdGtfYWN0aW9uX2ludGVyZmFjZV9pbml0KTogRGVsZXRlZC4KKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRVUkkpOiBEZWxldGVkLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChyYW5nZUxlbmd0aEZvck9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlSHlwZXJsaW5rR2V0U3RhcnRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlSHlwZXJsaW5rR2V0RW5kSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUh5cGVybGlua0lzVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZUh5cGVybGlua0dldE5BbmNob3JzKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVIeXBlcmxpbmtJc1NlbGVjdGVkTGluayk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlSHlwZXJsaW5rR2V0UHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZUh5cGVybGlua1NldFByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtp
dF9hY2Nlc3NpYmxlX2h5cGVybGlua19jbGFzc19pbml0KTogRGVsZXRlZC4KKyAgICAgICAgKHdl
YmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRPckNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oOiBSZW1vdmVkLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rp
b24uY3BwOiBSZW1vdmVkLgorICAgICAgICAoY29yZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlQWN0aW9uRG9BY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUFjdGlvbkdldE5BY3Rpb25zKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVBY3Rpb25HZXREZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlQWN0aW9uR2V0S2V5YmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlQWN0aW9uR2V0TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
QWN0aW9uSW50ZXJmYWNlSW5pdCk6IERlbGV0ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAoYXRrVG9Db250ZW50cyk6IERlbGV0ZWQuCisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50UmVmQWNjZXNzaWJsZUF0UG9pbnQpOiBEZWxldGVkLgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdldEV4dGVudHMpOiBEZWxldGVkLgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEdyYWJGb2N1cyk6IERlbGV0ZWQuCisg
ICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50U2Nyb2xsVG8pOiBEZWxldGVkLgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFNjcm9sbFRvUG9pbnQpOiBEZWxldGVkLgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEludGVyZmFjZUluaXQpOiBEZWxldGVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VD
b21wb25lbnQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1lbnQuY3BwOiBSZW1vdmVkLgorICAgICAgICAoY29yZSk6
IERlbGV0ZWQuCisgICAgICAgIChkb2N1bWVudEF0dHJpYnV0ZVZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZVZhbHVlKTogRGVsZXRl
ZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZXMpOiBEZWxl
dGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0TG9jYWxlKTogRGVsZXRl
ZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEludGVyZmFjZUluaXQpOiBEZWxl
dGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VEb2N1bWVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAo
Y29yZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0
UnVuQXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlRWRpdGFi
bGVUZXh0U2V0VGV4dENvbnRlbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVFZGl0YWJsZVRleHRJbnNlcnRUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVFZGl0YWJsZVRleHRDb3B5VGV4dCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlRWRpdGFibGVUZXh0Q3V0VGV4dCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlRWRpdGFibGVUZXh0RGVsZXRlVGV4dCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlRWRpdGFibGVUZXh0UGFzdGVUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVFZGl0YWJsZVRleHRJbnRlcmZhY2VJbml0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0
Lmg6IFJlbW92ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZUh5cGVybGlua0ltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZUh5cGVybGlua0ltcGxHZXRIeXBlcmxpbmspOiBEZWxldGVkLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZUh5cGVybGlua0ltcGxJbnRlcmZhY2VJbml0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5r
SW1wbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VIeXBlcnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAoY29yZSk6IERl
bGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TGluayk6IERlbGV0
ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0R2V0TkxpbmtzKTogRGVsZXRl
ZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rSW5kZXgpOiBEZWxl
dGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUluaXQpOiBE
ZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VIeXBlcnRleHQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAoY29y
ZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZVBvc2l0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJbWFnZUdldEltYWdlRGVz
Y3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1h
Z2VTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVJbWFnZUludGVyZmFj
ZUluaXQpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VJbWFnZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwOiBSZW1vdmVkLgorICAg
ICAgICAoY29yZSk6IERlbGV0ZWQuCisgICAgICAgIChsaXN0T2JqZWN0Rm9yQ29yZVNlbGVjdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChvcHRpb25Gcm9tTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChvcHRpb25Gcm9tU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25BZGRTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVTZWxlY3Rpb25SZWZTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVNlbGVjdGlvbkdldFNlbGVjdGlvbkNvdW50KTogRGVsZXRlZC4KKyAgICAgICAg
KHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25Jc0NoaWxkU2VsZWN0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVjdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uU2VsZWN0QWxsU2VsZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25JbnRlcmZhY2VJbml0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlU2VsZWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KGNvcmUpOiBEZWxldGVkLgorICAgICAgICAoY2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChjZWxs
SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoY2VsbEF0SW5kZXgpOiBEZWxldGVkLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVRhYmxlUmVmQXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZVRhYmxlR2V0SW5kZXhBdCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGFibGVHZXRDb2x1bW5BdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFj
Y2Vzc2libGVUYWJsZUdldFJvd0F0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnMpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRhYmxlR2V0TlJvd3MpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRh
YmxlR2V0Q29sdW1uRXh0ZW50QXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVRhYmxlR2V0Um93RXh0ZW50QXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJs
ZVRhYmxlR2V0Q29sdW1uSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUdldFJvd0hlYWRlcik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRDYXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUdldENvbHVtbkRlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUdldFJvd0Rlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUYWJsZUludGVyZmFjZUluaXQpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAoY29udmVydFRvR1B0ckFycmF5KTogRGVsZXRlZC4KKyAg
ICAgICAgKGNvcmUpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRhYmxlQ2Vs
bEdldENvbHVtbkhlYWRlckNlbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2li
bGVUYWJsZUNlbGxHZXRSb3dIZWFkZXJDZWxscyk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVGFibGVDZWxsR2V0Q29sdW1uU3Bhbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0Um93U3Bhbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0UG9zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtp
dEFjY2Vzc2libGVUYWJsZUNlbGxJbnRlcmZhY2VJbml0KTogRGVsZXRlZC4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmg6IFJl
bW92ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAoY29yZSk6IERlbGV0ZWQuCisgICAgICAg
IChiYXNlbGluZVBvc2l0aW9uRm9yUmVuZGVyT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKGdl
dEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAo
Y29tcGFyZUF0dHJpYnV0ZSk6IERlbGV0ZWQuCisgICAgICAgIChhdHRyaWJ1dGVTZXREaWZmZXJl
bmNlKTogRGVsZXRlZC4KKyAgICAgICAgKGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgpOiBEZWxl
dGVkLgorICAgICAgICAoZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChnZXRSdW5BdHRyaWJ1dGVzRnJvbUFjY2Vzc2liaWxpdHlPYmplY3QpOiBEZWxl
dGVkLgorICAgICAgICAodGV4dEV4dGVudHMpOiBEZWxldGVkLgorICAgICAgICAob2Zmc2V0QWRq
dXN0bWVudEZvckxpc3RJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYkNvcmVPZmZzZXRUb0F0
a09mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChhdGtPZmZzZXRUb1dlYkNvcmVPZmZzZXQpOiBE
ZWxldGVkLgorICAgICAgICAoZ2V0Tm9kZUZvckFjY2Vzc2liaWxpdHlPYmplY3QpOiBEZWxldGVk
LgorICAgICAgICAoZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCk6IERlbGV0ZWQuCisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQpOiBEZWxldGVkLgorICAgICAgICAoZW1w
dHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRleHRHZXRDaGFyKTogRGVsZXRlZC4KKyAgICAgICAgKG5leHRXb3JkU3RhcnRQb3NpdGlv
bik6IERlbGV0ZWQuCisgICAgICAgIChwcmV2aW91c1dvcmRFbmRQb3NpdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICh3b3JkQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KTogRGVsZXRlZC4KKyAgICAg
ICAgKG51bWJlck9mUmVwbGFjZWRFbGVtZW50c0JlZm9yZU9mZnNldCk6IERlbGV0ZWQuCisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFdvcmRGb3JCb3VuZGFyeSk6IERlbGV0ZWQuCisgICAg
ICAgIChpc1NlbnRlbmNlQm91bmRhcnkpOiBEZWxldGVkLgorICAgICAgICAoaXNXaGl0ZVNwYWNl
QmV0d2VlblNlbnRlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChzZW50ZW5jZUF0UG9zaXRpb25G
b3JBdGtCb3VuZGFyeSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dFNl
bnRlbmNlRm9yQm91bmRhcnkpOiBEZWxldGVkLgorICAgICAgICAobGluZUF0UG9zaXRpb25Gb3JB
dGtCb3VuZGFyeSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dExpbmVG
b3JCb3VuZGFyeSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRl
eHRGb3JPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRHZXRU
ZXh0QWZ0ZXJPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRUZXh0QXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVRleHRH
ZXRUZXh0QmVmb3JlT2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0Q2hhcmFjdGVyQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRleHRHZXRDYXJldE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3Np
YmxlVGV4dEdldFJ1bkF0dHJpYnV0ZXMpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNz
aWJsZVRleHRHZXREZWZhdWx0QXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckV4dGVudHMpOiBEZWxldGVkLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRSYW5nZUV4dGVudHMpOiBEZWxldGVkLgorICAgICAgICAod2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXRDaGFyYWN0ZXJDb3VudCk6IERlbGV0ZWQuCisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE9mZnNldEF0UG9pbnQpOiBEZWxldGVkLgorICAgICAgICAo
d2Via2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICh3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEFkZFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRB
Y2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGV4dFJlbW92ZVNlbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nl
c3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0U3RyaW5nQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNj
ZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5jcHA6
IFJlbW92ZWQuCisgICAgICAgIChjb3JlKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vz
c2libGVTZXROZXdWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0
SW5jcmVtZW50VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZUdldFZh
bHVlQW5kVGV4dCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0SW5jcmVt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdEFjY2Vzc2libGVTZXRWYWx1ZSk6IERlbGV0
ZWQuCisgICAgICAgICh3ZWJraXRBY2Nlc3NpYmxlR2V0UmFuZ2UpOiBEZWxldGVkLgorICAgICAg
ICAod2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0Q3VycmVudFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1heGltdW1WYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgICh3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRNaW5pbXVtVmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAod2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1lbnQpOiBEZWxldGVk
LgorICAgICAgICAod2Via2l0QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdCk6IERlbGV0ZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZh
bHVlLmg6IFJlbW92ZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwOiBSZW1vdmVkLgorICAgICAgICAoYWRkVG9BdGtBdHRyaWJ1dGVTZXQpOiBE
ZWxldGVkLgorICAgICAgICAoY29udGVudHNSZWxhdGl2ZVRvQXRrQ29vcmRpbmF0ZVR5cGUpOiBE
ZWxldGVkLgorICAgICAgICAodGl0bGVUYWdTaG91bGRCZVVzZWRJbkRlc2NyaXB0aW9uRmllbGQp
OiBEZWxldGVkLgorICAgICAgICAoYWNjZXNzaWJpbGl0eVRpdGxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKGFjY2Vzc2liaWxpdHlEZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChzZWxlY3Rp
b25CZWxvbmdzVG9PYmplY3QpOiBEZWxldGVkLgorICAgICAgICAob2JqZWN0Rm9jdXNlZEFuZENh
cmV0T2Zmc2V0VW5pZ25vcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5oOiBSZW1vdmVkLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvYXRzcGkvQWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaTo6YXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvYXRrL0ZyYW1lU2Vs
ZWN0aW9uQXRrLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKFdlYkNvcmU6OmVtaXRUZXh0U2VsZWN0
aW9uQ2hhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1heWJlRW1pdFRleHRGb2N1
c0NoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6bm90
aWZ5QWNjZXNzaWJpbGl0eUZvclNlbGVjdGlvbkNoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgICog
cGFnZS9TZXR0aW5ncy55YW1sOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
RGlzcGxheS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5j
cHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5o
OgorCiAyMDIyLTAzLTIyICBGcsOpZMOpcmljIFdhbmcgIDxmd2FuZ0BpZ2FsaWEuY29tPgogCiAg
ICAgICAgIEFkanVzdCBhbmNob3IvZm9jdXMgbm9kZXMgYWZ0ZXIgcmVtb3ZhbCB3aGVuIExpdmVS
YW5nZVNlbGVjdGlvbiBpcyBlbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmluZGV4IDlm
MGU1OTg5MTU3Zi4uZmZlOTM0M2Y4MjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAt
MTUsOSArMTUsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1VOSUZJRURfU09VUkNFX0xJU1RfRklM
RVMKICkKIAogbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMK
LSAgICAiJHtXRUJDT1JFX0RJUn0vYWNjZXNzaWJpbGl0eS9hdGsiCiAgICAgIiR7V0VCQ09SRV9E
SVJ9L2FjY2Vzc2liaWxpdHkvYXRzcGkiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L2VkaXRpbmcvYXRr
IgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlL2d0ayIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxh
dGZvcm0vYWR3YWl0YSIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYXVkaW8vZ2xpYiIK
QEAgLTg4LDcgKzg2LDYgQEAgc2V0KFdlYkNvcmVfVVNFUl9BR0VOVF9TQ1JJUFRTCiBzZXQoV2Vi
Q29yZV9VU0VSX0FHRU5UX1NDUklQVFNfREVQRU5ERU5DSUVTICR7V0VCQ09SRV9ESVJ9L3JlbmRl
cmluZy9SZW5kZXJUaGVtZUFkd2FpdGEuY3BwKQogCiBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJB
UklFUwotICAgICR7QVRLX0xJQlJBUklFU30KICAgICAke0VOQ0hBTlRfTElCUkFSSUVTfQogICAg
ICR7R0xJQl9HSU9fTElCUkFSSUVTfQogICAgICR7R0xJQl9HTU9EVUxFX0xJQlJBUklFU30KQEAg
LTExMyw3ICsxMTAsNiBAQCBpZiAoVVNFX1dQRV9SRU5ERVJFUikKIGVuZGlmICgpCiAKIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAke0FUS19JTkNM
VURFX0RJUlN9CiAgICAgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30KICAgICAke0dJT19VTklYX0lO
Q0xVREVfRElSU30KICAgICAke0dMSUJfSU5DTFVERV9ESVJTfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdQRS5j
bWFrZQppbmRleCA4YTZlMjNkNTVmZjIuLjlkMDIxYTFhODg3ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1X
UEUuY21ha2UKQEAgLTE3LDcgKzE3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9VTklGSUVEX1NP
VVJDRV9MSVNUX0ZJTEVTCiApCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURF
X0RJUkVDVE9SSUVTCi0gICAgIiR7V0VCQ09SRV9ESVJ9L2FjY2Vzc2liaWxpdHkvYXRrIgogICAg
ICIke1dFQkNPUkVfRElSfS9hY2Nlc3NpYmlsaXR5L2F0c3BpIgogICAgICIke1dFQkNPUkVfRElS
fS9wbGF0Zm9ybS9hZHdhaXRhIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9hdWRpby9n
bGliIgpAQCAtNjYsNyArNjUsNiBAQCBzZXQoV2ViQ29yZV9VU0VSX0FHRU5UX1NDUklQVFNfREVQ
RU5ERU5DSUVTICR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL3dwZS9SZW5kZXJUaAogCiBsaXN0KEFQ
UEVORCBXZWJDb3JlX0xJQlJBUklFUwogICAgIFdQRTo6bGlid3BlCi0gICAgJHtBVEtfTElCUkFS
SUVTfQogICAgICR7R0xJQl9HSU9fTElCUkFSSUVTfQogICAgICR7R0xJQl9HTU9EVUxFX0xJQlJB
UklFU30KICAgICAke0dMSUJfR09CSkVDVF9MSUJSQVJJRVN9CkBAIC03Niw3ICs3NCw2IEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCiApCiAKIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lT
VEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAke0FUS19JTkNMVURFX0RJUlN9CiAgICAgJHtH
SU9fVU5JWF9JTkNMVURFX0RJUlN9CiAgICAgJHtHTElCX0lOQ0xVREVfRElSU30KICAgICAke0xJ
QlRBU04xX0lOQ0xVREVfRElSU30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNH
VEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggYjVlNThjY2Q3NjE5
Li5jNjM4NmE2NWQ0NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC0yMSwyNCArMjEsNiBAQAog
Ly8gQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgogLy8gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1h
Y2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAotYWNjZXNzaWJpbGl0eS9hdGsv
QWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGUuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNw
cAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAg
QG5vLXVuaWZ5Ci1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29t
cG9uZW50LmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURv
Y3VtZW50LmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVk
aXRhYmxlVGV4dC5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VIeXBlcmxpbmtJbXBsLmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZUh5cGVydGV4dC5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VJbWFnZS5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VTZWxlY3Rpb24uY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGFibGUuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGFibGVDZWxsLmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VmFsdWUuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKLQog
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKIGFjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eU9iamVjdEFjdGlvbkF0c3BpLmNwcApAQCAtNTUsOCArMzcsNiBAQCBhY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RWYWx1ZUF0c3BpLmNwcAogYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9h
dHNwaS9BWE9iamVjdENhY2hlQXRzcGkuY3BwCiAKLWVkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9u
QXRrLmNwcAotCiBlZGl0aW5nL2F0c3BpL0ZyYW1lU2VsZWN0aW9uQXRzcGkuY3BwCiAKIGVkaXRp
bmcvZ3RrL0VkaXRvckd0ay5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNX
UEUudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc1dQRS50eHQKaW5kZXggZjhjOGM3MDQ5MmZi
Li4xNmQzNTM0NGEzMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNXUEUudHh0CkBAIC0yMSwyNCArMjEsNiBAQAog
Ly8gQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgogLy8gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi1h
Y2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAotYWNjZXNzaWJpbGl0eS9hdGsv
QWNjZXNzaWJpbGl0eU9iamVjdEF0ay5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGUuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmNw
cAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5jcHAg
QG5vLXVuaWZ5Ci1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQ29t
cG9uZW50LmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURv
Y3VtZW50LmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVk
aXRhYmxlVGV4dC5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VIeXBlcmxpbmtJbXBsLmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZUh5cGVydGV4dC5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VJbWFnZS5jcHAKLWFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VTZWxlY3Rpb24uY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGFibGUuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGFibGVDZWxsLmNwcAotYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVRleHQuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNl
VmFsdWUuY3BwCi1hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKLQog
YWNjZXNzaWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5QXRzcGkuY3BwCiBhY2Nlc3NpYmlsaXR5
L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKIGFjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eU9iamVjdEFjdGlvbkF0c3BpLmNwcApAQCAtNTUsNyArMzcsNiBAQCBhY2Nl
c3NpYmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RWYWx1ZUF0c3BpLmNwcAogYWNjZXNz
aWJpbGl0eS9hdHNwaS9BY2Nlc3NpYmlsaXR5Um9vdEF0c3BpLmNwcAogYWNjZXNzaWJpbGl0eS9h
dHNwaS9BWE9iamVjdENhY2hlQXRzcGkuY3BwCiAKLWVkaXRpbmcvYXRrL0ZyYW1lU2VsZWN0aW9u
QXRrLmNwcAogZWRpdGluZy9hdHNwaS9GcmFtZVNlbGVjdGlvbkF0c3BpLmNwcAogZWRpdGluZy9s
aWJ3cGUvRWRpdG9yTGliV1BFLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oCmluZGV4IDI2ZTRjZWViMTA0Ni4uYWJlNzg0MjYxYjhiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaApAQCAtMzcsMTAgKzM3
LDYgQEAKICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hh
c2hTZXQuaD4KIAotI2lmIFVTRShBVEspCi0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgot
I2VuZGlmCi0KIG5hbWVzcGFjZSBXVEYgewogY2xhc3MgVGV4dFN0cmVhbTsKIH0KQEAgLTUzMCwx
MCArNTI2LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGVyZm9ybWluZ0RlZmVycmVkQ2FjaGVV
cGRhdGUgeyBmYWxzZSB9OwogICAgIGRvdWJsZSBtX2xvYWRpbmdQcm9ncmVzcyB7IDAgfTsKIAot
I2lmIFVTRShBVEspCi0gICAgTGlzdEhhc2hTZXQ8UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+
PiBtX2RlZmVycmVkQXR0YWNoZWRXcmFwcGVyT2JqZWN0TGlzdDsKLSAgICBMaXN0SGFzaFNldDxH
UmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyPj4gbV9kZWZlcnJlZERldGFjaGVkV3Jh
cHBlckxpc3Q7Ci0jZW5kaWYKICNpZiBVU0UoQVRTUEkpCiAgICAgTGlzdEhhc2hTZXQ8UmVmUHRy
PEFYQ29yZU9iamVjdD4+IG1fZGVmZXJyZWRQYXJlbnRDaGFuZ2VkTGlzdDsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0LmNwcApp
bmRleCBhZDhmY2Q4MDM1MjUuLmJhNzVjNWU4OGJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdC5jcHAKQEAgLTExNyw3ICsxMTcsNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlMaXN0OjpjaGlsZEhhc1BzZXVkb1Zpc2libGVMaXN0SXRlbU1h
cmtlcnMoUmVuZGVyT2JqZWN0KiBsaXN0SQogICAgIAogICAgIC8vIFBsYXRmb3JtcyB3aGljaCBl
eHBvc2UgcmVuZGVyZWQgdGV4dCBjb250ZW50IHRocm91Z2ggdGhlIHBhcmVudCBlbGVtZW50IHdp
bGwgdHJlYXQKICAgICAvLyB0aG9zZSByZW5kZXJlcnMgYXMgImlnbm9yZWQiIG9iamVjdHMuCi0j
aWYgVVNFKEFUSykgfHwgVVNFKEFUU1BJKQorI2lmIFVTRShBVFNQSSkKICAgICBTdHJpbmcgdGV4
dCA9IGF4T2JqLT50ZXh0VW5kZXJFbGVtZW50KCk7CiAgICAgcmV0dXJuICF0ZXh0LmlzRW1wdHko
KSAmJiAhdGV4dC5pc0FsbFNwZWNpYWxDaGFyYWN0ZXJzPGlzSFRNTFNwYWNlPigpOwogI2Vsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5v
ZGVPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAKaW5kZXggNWNmODM0NTFmM2UyLi4xNDI5MTM3MmNmYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVP
YmplY3QuY3BwCkBAIC0yNDA1LDggKzI0MDUsOCBAQCBib29sIEFjY2Vzc2liaWxpdHlOb2RlT2Jq
ZWN0OjpjYW5TZXRWYWx1ZUF0dHJpYnV0ZSgpIGNvbnN0CiAgICAgaWYgKGlzUHJvZ3Jlc3NJbmRp
Y2F0b3IoKSB8fCBpc1NsaWRlcigpIHx8IGlzU2Nyb2xsYmFyKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0jaWYgVVNFKEFUSykgfHwgVVNFKEFUU1BJKQotICAgIC8vIEluIEFUSywgaW5wdXQg
dHlwZXMgd2hpY2ggc3VwcG9ydCBhcmlhLXJlYWRvbmx5IGFyZSB0cmVhdGVkIGFzIGhhdmluZyBh
CisjaWYgVVNFKEFUU1BJKQorICAgIC8vIEluIEFUU1BJLCBpbnB1dCB0eXBlcyB3aGljaCBzdXBw
b3J0IGFyaWEtcmVhZG9ubHkgYXJlIHRyZWF0ZWQgYXMgaGF2aW5nIGEKICAgICAvLyBzZXR0YWJs
ZSB2YWx1ZSBpZiB0aGUgdXNlciBjYW4gbW9kaWZ5IHRoZSB3aWRnZXQncyB2YWx1ZSBvciBpdHMg
c3RhdGUuCiAgICAgaWYgKHN1cHBvcnRzUmVhZE9ubHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmNwcAppbmRleCA1YWQyMmMxNzBmNTQuLjg5NWUzZGIyZGVkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0z
NjE4LDggKzM2MTgsOCBAQCBUZXh0SXRlcmF0b3JCZWhhdmlvcnMgQWNjZXNzaWJpbGl0eU9iamVj
dDo6dGV4dEl0ZXJhdG9yQmVoYXZpb3JGb3JUZXh0UmFuZ2UoKSBjbwogewogICAgIFRleHRJdGVy
YXRvckJlaGF2aW9ycyBiZWhhdmlvcnMgeyBUZXh0SXRlcmF0b3JCZWhhdmlvcjo6SWdub3Jlc1N0
eWxlVmlzaWJpbGl0eSB9OwogCi0jaWYgVVNFKEFUSykgfHwgVVNFKEFUU1BJKQotICAgIC8vIFdl
IG5lZWQgdG8gZW1pdCByZXBsYWNlZCBlbGVtZW50cyBmb3IgR1RLLCBhbmQgcHJlc2VudAorI2lm
IFVTRShBVFNQSSkKKyAgICAvLyBXZSBuZWVkIHRvIGVtaXQgcmVwbGFjZWQgZWxlbWVudHMgZm9y
IEFUU1BJLCBhbmQgcHJlc2VudAogICAgIC8vIHRoZW0gd2l0aCB0aGUgJ29iamVjdCByZXBsYWNl
bWVudCBjaGFyYWN0ZXInICgweEZGRkMpLgogICAgIGJlaGF2aW9ycy5hZGQoVGV4dEl0ZXJhdG9y
QmVoYXZpb3I6OkVtaXRzT2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJzKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaApp
bmRleCA0YjI3MzEzNTYyNTkuLjY0YjU4MGI4N2U3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTQyLDEwICs0Miw2IEBA
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKLSNpZiBVU0UoQVRLKQotI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAKIE9CSkNfQ0xBU1MgTlNBcnJheTsKQEAgLTg4Niw3ICs4ODIsNyBAQCBpbmxpbmUgdm9pZCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0Ojp1cGRhdGVCYWNraW5nU3RvcmUoKSB7IH0KIGlubGluZSB2b2lk
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nlc3NpYmlsaXR5
RGV0YWNobWVudFR5cGUpIHsgfQogI2VuZGlmCiAKLSNpZiAhKEVOQUJMRShBQ0NFU1NJQklMSVRZ
KSAmJiAoVVNFKEFUSykgfHwgVVNFKEFUU1BJKSkpCisjaWYgIShFTkFCTEUoQUNDRVNTSUJJTElU
WSkgJiYgVVNFKEFUU1BJKSkKIGlubGluZSBib29sIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFsbG93
c1RleHRSYW5nZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiBpbmxpbmUgdW5zaWduZWQgQWNj
ZXNzaWJpbGl0eU9iamVjdDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3QgeyByZXR1cm4g
dGV4dCgpLmxlbmd0aCgpOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0SW50ZXJmYWNlLmgKaW5kZXggMGQw
ZTYwNzMyZDdmLi5mZTNhZmNiYTdjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdEludGVyZmFjZS5oCkBAIC00OCwx
MCArNDgsNiBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5oIgogI2VuZGlm
CiAKLSNpZiBVU0UoQVRLKQotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLSNlbmRpZgot
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiBPQkpDX0NMQVNTIFdlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyOwogdHlwZWRlZiBXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcjsKQEAgLTYwLDkgKzU2LDYgQEAgdHlwZWRlZiBjb25zdCBzdHJ1Y3Qg
X19BWFRleHRNYXJrZXIqIEFYVGV4dE1hcmtlclJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9f
QVhUZXh0TWFya2VyUmFuZ2UqIEFYVGV4dE1hcmtlclJhbmdlUmVmOwogI2VsaWYgVVNFKEFUU1BJ
KQogdHlwZWRlZiBXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGkgQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXI7Ci0jZWxpZiBVU0UoQVRLKQotdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEFj
Y2Vzc2libGUgV2ViS2l0QWNjZXNzaWJsZTsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3Np
YmxlIEFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyOwogI2Vsc2UKIGNsYXNzIEFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyOwogI2VuZGlmCkBAIC0xNTQyLDggKzE1MzUsNiBAQCBwcml2YXRlOgog
ICAgIENPTVB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcj4gbV93cmFwcGVyOwogI2VsaWYg
VVNFKEFUU1BJKQogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk+IG1fd3JhcHBl
cjsKLSNlbGlmIFVTRShBVEspCi0gICAgR1JlZlB0cjxXZWJLaXRBY2Nlc3NpYmxlPiBtX3dyYXBw
ZXI7CiAjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoUGxhdGZvcm1XcmFwcGVyKEFjY2Vz
c2liaWxpdHlEZXRhY2htZW50VHlwZSkgPSAwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4
IDExMjZlYmQ0MTgwOC4uZmEwMmQzMWZlMThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTIx
NjAsOCArMjE2MCw2IEBAIGludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjppbmRleEZvclZp
c2libGVQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvCiAgICAgVGV4dEl0ZXJhdG9y
QmVoYXZpb3JzIGJlaGF2aW9yczsKICNpZiBVU0UoQVRTUEkpCiAgICAgYmVoYXZpb3JzLmFkZChU
ZXh0SXRlcmF0b3JCZWhhdmlvcjo6RW1pdHNPYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcnMpOwot
I2VsaWYgVVNFKEFUSykKLSAgICBiZWhhdmlvcnMuYWRkKFRleHRJdGVyYXRvckJlaGF2aW9yOjpF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAjZW5kaWYKIAogICAg
IHJldHVybiBXZWJDb3JlOjppbmRleEZvclZpc2libGVQb3NpdGlvbigqbm9kZSwgcG9zaXRpb24s
IGJlaGF2aW9ycyk7CkBAIC0yNjcxLDExICsyNjY5LDYgQEAgQVhDb3JlT2JqZWN0KiBBY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0OjphY2Nlc3NpYmlsaXR5SGl0VGVzdChjb25zdCBJbnRQb2ludCYg
cG8KIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzaG91bGROb3RpZnlBY3RpdmVE
ZXNjZW5kYW50KCkgY29uc3QKIHsKLSNpZiBVU0UoQVRLKQotICAgIC8vIEFjY29yZGluZyB0byB0
aGUgQ29yZSBBQU0gc3BlYywgQVRLIGV4cGVjdHMgb2JqZWN0OnN0YXRlLWNoYW5nZWQ6Zm9jdXNl
ZCBub3RpZmljYXRpb25zCi0gICAgLy8gd2hlbmV2ZXIgdGhlIGFjdGl2ZSBkZXNjZW5kYW50IGNo
YW5nZXMuCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKICAgICAvLyBXZSB3YW50IHRvIG5vdGlm
eSB0aGF0IHRoZSBjb21ibyBib3ggaGFzIGNoYW5nZWQgaXRzIGFjdGl2ZSBkZXNjZW5kYW50LAog
ICAgIC8vIGJ1dCB3ZSBkbyBub3Qgd2FudCB0byBjaGFuZ2UgdGhlIGZvY3VzLCBiZWNhdXNlIGZv
Y3VzIHNob3VsZCByZW1haW4gd2l0aCB0aGUgY29tYm8gYm94LgogICAgIGlmIChpc0NvbWJvQm94
KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUNvbHVtbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlUYWJsZUNvbHVtbi5jcHAKaW5kZXggNGM5MzcxMjMzYTgzLi45OGM3NzM4NWZhNTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxl
Q29sdW1uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlUYWJsZUNvbHVtbi5jcHAKQEAgLTE3Miw3ICsxNzIsNyBAQCBib29sIEFjY2Vzc2liaWxpdHlU
YWJsZUNvbHVtbjo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIGlm
ICghbV9wYXJlbnQpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpIHx8IFVTRShBVEspIHx8IFVTRShBVFNQSSkKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSB8fCBVU0UoQVRTUEkpCiAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVh
ZGVyQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcAppbmRleCAwNzQyMjhlMjAxZTAuLmMxZWE4ZmM5
NzAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5VGFibGVIZWFkZXJDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVRhYmxlSGVhZGVyQ29udGFpbmVyLmNwcApAQCAtNTQsNyArNTQs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lcjo6Y29tcHV0ZUFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdAogICAgIGlmICghbV9wYXJlbnQpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFVTRShBVEspIHx8
IFVTRShBVFNQSSkKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBVU0UoQVRTUEkpCiAgICAg
cmV0dXJuIHRydWU7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMmIxYzM0MDIxMWQxLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0
MTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgotCi0jaWYgRU5BQkxFKEFD
Q0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0
LmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNp
bmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgQXRrT2JqZWN0KiB3cmFw
cGVyUGFyZW50KFdlYktpdEFjY2Vzc2libGUqIHdyYXBwZXIpCi17Ci0gICAgLy8gTG9vayBmb3Ig
dGhlIHJpZ2h0IG9iamVjdCB0byBlbWl0IHRoZSBzaWduYWwgZnJvbSwgYnV0IHVzaW5nIHRoZSBp
bXBsZW1lbnRhdGlvbgotICAgIC8vIG9mIGF0a19vYmplY3RfZ2V0X3BhcmVudCBmcm9tIEF0a09i
amVjdCBjbGFzcyAod2hpY2ggdXNlcyBhIGNhY2hlZCBwb2ludGVyIGlmIHNldCkKLSAgICAvLyBz
aW5jZSB0aGUgYWNjZXNzaWJpbGl0eSBoaWVyYXJjaHkgaW4gV2ViQ29yZSB3aWxsIG5vIGxvbmdl
ciBiZSBuYXZpZ2FibGUuCi0gICAgZ3BvaW50ZXIgd2Via2l0QWNjZXNzaWJsZUNsYXNzID0gZ190
eXBlX2NsYXNzX3BlZWtfcGFyZW50KFdFQktJVF9BQ0NFU1NJQkxFX0dFVF9DTEFTUyh3cmFwcGVy
KSk7Ci0gICAgZ3BvaW50ZXIgYXRrT2JqZWN0Q2xhc3MgPSBnX3R5cGVfY2xhc3NfcGVla19wYXJl
bnQod2Via2l0QWNjZXNzaWJsZUNsYXNzKTsKLSAgICBBdGtPYmplY3QqIGF0a1BhcmVudCA9IEFU
S19PQkpFQ1RfQ0xBU1MoYXRrT2JqZWN0Q2xhc3MpLT5nZXRfcGFyZW50KEFUS19PQkpFQ1Qod3Jh
cHBlcikpOwotICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gZW1pdCBhbnkgc2lnbmFsIGZyb20gYW4g
b2JqZWN0IG91dHNpZGUgV2ViS2l0J3Mgd29ybGQuCi0gICAgcmV0dXJuIFdFQktJVF9JU19BQ0NF
U1NJQkxFKGF0a1BhcmVudCkgPyBhdGtQYXJlbnQgOiBudWxscHRyOwotfQotCi12b2lkIEFYT2Jq
ZWN0Q2FjaGU6OmRldGFjaFdyYXBwZXIoQVhDb3JlT2JqZWN0KiBvYmosIEFjY2Vzc2liaWxpdHlE
ZXRhY2htZW50VHlwZSBkZXRhY2htZW50VHlwZSkKLXsKLSAgICBhdXRvKiB3cmFwcGVyID0gb2Jq
LT53cmFwcGVyKCk7Ci0gICAgQVNTRVJUKHdyYXBwZXIpOwotCi0gICAgLy8gSWYgYW4gb2JqZWN0
IGlzIGJlaW5nIGRldGFjaGVkIE5PVCBiZWNhdXNlIG9mIHRoZSBBWE9iamVjdENhY2hlIGJlaW5n
IGRlc3Ryb3llZCwKLSAgICAvLyB0aGVuIGl0J3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBhY2Nl
c3NpYmlsaXR5IHRyZWUgYW5kIHdlIHNob3VsZCBlbWl0IGEgc2lnbmFsLgotICAgIGlmIChkZXRh
Y2htZW50VHlwZSAhPSBBY2Nlc3NpYmlsaXR5RGV0YWNobWVudFR5cGU6OkNhY2hlRGVzdHJveWVk
ICYmIG9iai0+ZG9jdW1lbnQoKSAmJiB3cmFwcGVyUGFyZW50KHdyYXBwZXIpKQotICAgICAgICBt
X2RlZmVycmVkRGV0YWNoZWRXcmFwcGVyTGlzdC5hZGQod3JhcHBlcik7Ci0KLSAgICB3ZWJraXRB
Y2Nlc3NpYmxlRGV0YWNoKFdFQktJVF9BQ0NFU1NJQkxFKHdyYXBwZXIpKTsKLX0KLQotdm9pZCBB
WE9iamVjdENhY2hlOjphdHRhY2hXcmFwcGVyKEFYQ29yZU9iamVjdCogb2JqKQotewotICAgIC8v
IEZJWE1FOiBhdCB0aGUgbW9tZW50LCBvbmx5IGFsbG93IHRvIGF0dGFjaCBBY2Nlc3NpYmlsaXR5
T2JqZWN0cy4KLSAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlPYmplY3Q+KG9iaikpCi0gICAgICAg
IHJldHVybjsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5T2JqZWN0ID0g
ZG93bmNhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdD4ob2JqKTsKLQotICAgIEdSZWZQdHI8V2ViS2l0
QWNjZXNzaWJsZT4gd3JhcHBlciA9IGFkb3B0R1JlZih3ZWJraXRBY2Nlc3NpYmxlTmV3KGFjY2Vz
c2liaWxpdHlPYmplY3QpKTsKLSAgICBhY2Nlc3NpYmlsaXR5T2JqZWN0LT5zZXRXcmFwcGVyKHdy
YXBwZXIuZ2V0KCkpOwotCi0gICAgLy8gSWYgYW4gb2JqZWN0IGlzIGJlaW5nIGF0dGFjaGVkIGFu
ZCB3ZSBhcmUgbm90IGluIHRoZSBtaWRkbGUgb2YgYSBsYXlvdXQgdXBkYXRlLCB0aGVuCi0gICAg
Ly8gd2Ugc2hvdWxkIHJlcG9ydCBBVHMgYnkgZW1pdHRpbmcgdGhlIGNoaWxkcmVuLWNoYW5nZWQ6
OmFkZCBzaWduYWwgZnJvbSB0aGUgcGFyZW50LgotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFj
Y2Vzc2liaWxpdHlPYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCB8fCBkb2N1
bWVudC0+Y2hpbGROZWVkc1N0eWxlUmVjYWxjKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IERvbid0IGVtaXQgdGhlIHNpZ25hbCB3aGVuIHRoZSBhY3R1YWwgb2JqZWN0IGJlaW5nIGFkZGVk
IGlzIG5vdCBnb2luZyB0byBiZSBleHBvc2VkLgotICAgIGlmIChhY2Nlc3NpYmlsaXR5T2JqZWN0
LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIERvbid0IGVtaXQgdGhlIHNpZ25hbCBpZiB0aGUgb2JqZWN0IGJlaW5nIGFkZGVkIGlz
IG5vdCAtLSBvciBub3QgeWV0IC0tIHJlbmRlcmVkLAotICAgIC8vIHdoaWNoIGNhbiBvY2N1ciBp
biBuZXN0ZWQgaWZyYW1lcy4gSW4gdGhlc2UgaW5zdGFuY2VzIHdlIGRvbid0IHdhbnQgdG8gaWdu
b3JlIHRoZQotICAgIC8vIGNoaWxkLiBCdXQgaWYgYW4gYXNzaXN0aXZlIHRlY2hub2xvZ3kgaXMg
bGlzdGVuaW5nLCBBVC1TUEkyIHdpbGwgYXR0ZW1wdCB0byBjcmVhdGUKLSAgICAvLyBhbmQgY2Fj
aGUgdGhlIHN0YXRlIHNldCBmb3IgdGhlIGNoaWxkIHVwb24gZW1pc3Npb24gb2YgdGhlIHNpZ25h
bC4gSWYgdGhlIG9iamVjdAotICAgIC8vIGhhcyBub3QgeWV0IGJlZW4gcmVuZGVyZWQsIHRoaXMg
d2lsbCByZXN1bHQgaW4gYSBjcmFzaC4KLSAgICBpZiAoIWFjY2Vzc2liaWxpdHlPYmplY3QtPnJl
bmRlcmVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGVmZXJyZWRBdHRhY2hlZFdyYXBw
ZXJPYmplY3RMaXN0LmFkZChhY2Nlc3NpYmlsaXR5T2JqZWN0KTsKLX0KLQotdm9pZCBBWE9iamVj
dENhY2hlOjpwbGF0Zm9ybVBlcmZvcm1EZWZlcnJlZENhY2hlVXBkYXRlKCkKLXsKLSAgICBmb3Ig
KGF1dG8mIGNvcmVPYmplY3QgOiBtX2RlZmVycmVkQXR0YWNoZWRXcmFwcGVyT2JqZWN0TGlzdCkg
ewotICAgICAgICBhdXRvKiB3cmFwcGVyID0gY29yZU9iamVjdC0+d3JhcHBlcigpOwotICAgICAg
ICBpZiAoIXdyYXBwZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBEb24n
dCBlbWl0IHRoZSBzaWduYWwgZm9yIG9iamVjdHMgd2hvc2UgcGFyZW50cyB3b24ndCBiZSBleHBv
c2VkIGRpcmVjdGx5LgotICAgICAgICBhdXRvKiBjb3JlUGFyZW50ID0gY29yZU9iamVjdC0+cGFy
ZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgICAgIGlmICghY29yZVBhcmVudCB8fCBjb3JlUGFy
ZW50LT5hY2Nlc3NpYmlsaXR5SXNJZ25vcmVkQnlEZWZhdWx0KCkpCi0gICAgICAgICAgICBjb250
aW51ZTsKLQotICAgICAgICAvLyBMb29rIGZvciB0aGUgcmlnaHQgb2JqZWN0IHRvIGVtaXQgdGhl
IHNpZ25hbCBmcm9tLgotICAgICAgICBhdXRvKiBhdGtQYXJlbnQgPSBjb3JlUGFyZW50LT53cmFw
cGVyKCk7Ci0gICAgICAgIGlmICghYXRrUGFyZW50KQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgc2l6ZV90IGluZGV4ID0gY29yZVBhcmVudC0+Y2hpbGRyZW4oZmFsc2UpLmZpbmQo
Y29yZU9iamVjdCk7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShhdGtQYXJlbnQsICJj
aGlsZHJlbi1jaGFuZ2VkOjphZGQiLCBpbmRleCAhPSBub3RGb3VuZCA/IGluZGV4IDogLTEsIHdy
YXBwZXIpOwotICAgIH0KLSAgICBtX2RlZmVycmVkQXR0YWNoZWRXcmFwcGVyT2JqZWN0TGlzdC5j
bGVhcigpOwotCi0gICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9kZWZlcnJlZERldGFjaGVkV3Jh
cHBlckxpc3QpIHsKLSAgICAgICAgaWYgKGF1dG8qIGF0a1BhcmVudCA9IHdyYXBwZXJQYXJlbnQo
d3JhcHBlci5nZXQoKSkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBhY2Nlc3NpYmlsaXR5IGhpZXJh
cmNoeSBpcyBhbHJlYWR5IGludmFsaWQsIHNvIHRoZSBwYXJlbnQtY2hpbGRyZW4gcmVsYXRpb25z
aGlwcwotICAgICAgICAgICAgLy8gaW4gdGhlIEFjY2Vzc2liaWxpdHlPYmplY3QgdHJlZSBhcmUg
bm90IHRoZXJlIGFueW1vcmUsIHNvIHdlIGNhbid0IGtub3cgdGhlIG9mZnNldC4KLSAgICAgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShhdGtQYXJlbnQsICJjaGlsZHJlbi1jaGFuZ2VkOjpy
ZW1vdmUiLCAtMSwgd3JhcHBlci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9kZWZl
cnJlZERldGFjaGVkV3JhcHBlckxpc3QuY2xlYXIoKTsKLX0KLQotc3RhdGljIEFYQ29yZU9iamVj
dCogZ2V0TGlzdE9iamVjdChBWENvcmVPYmplY3QqIG9iamVjdCkKLXsKLSAgICAvLyBPbmx5IGxp
c3QgYm94ZXMgYW5kIG1lbnUgbGlzdHMgc3VwcG9ydGVkIHNvIGZhci4KLSAgICBpZiAoIW9iamVj
dC0+aXNMaXN0Qm94KCkgJiYgIW9iamVjdC0+aXNNZW51TGlzdCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIEZvciBsaXN0IGJveGVzIHRoZSBsaXN0IG9iamVjdCBpcyBqdXN0IGl0c2Vs
Zi4KLSAgICBpZiAob2JqZWN0LT5pc0xpc3RCb3goKSkKLSAgICAgICAgcmV0dXJuIG9iamVjdDsK
LQotICAgIC8vIEZvciBtZW51IGxpc3RzIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBmaXJzdCBhY2Nl
c3NpYmxlIGNoaWxkLAotICAgIC8vIHdpdGggcm9sZSBNZW51TGlzdFBvcHVwUm9sZSwgc2luY2Ug
dGhhdCdzIHRoZSBvbmUgaG9sZGluZyB0aGUgbGlzdAotICAgIC8vIG9mIGl0ZW1zIHdpdGggcm9s
ZSBNZW51TGlzdE9wdGlvblJvbGUuCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IG9iamVjdC0+Y2hpbGRyZW4oKTsK
LSAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBBWENv
cmVPYmplY3QqIGxpc3RPYmplY3QgPSBjaGlsZHJlbi5hdCgwKS5nZXQoKTsKLSAgICBpZiAoIWxp
c3RPYmplY3QtPmlzTWVudUxpc3RQb3B1cCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiBsaXN0T2JqZWN0OwotfQotCi1zdGF0aWMgdm9pZCBub3RpZnlDaGlsZHJlblNlbGVjdGlv
bkNoYW5nZShBWENvcmVPYmplY3QqIG9iamVjdCkKLXsKLSAgICAvLyBUaGlzIHN0YXRpYyB2YXJp
YWJsZXMgYXJlIG5lZWRlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBvbGQKLSAgICAvLyBmb2N1c2Vk
IG9iamVjdCBhbmQgaXRzIGFzc29jaWF0ZWQgbGlzdCBvYmplY3QsIGFzIHBlciBwcmV2aW91cwot
ICAgIC8vIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24sIGluIG9yZGVyIHRvIHByb3Blcmx5IGRlY2lk
ZSB3aGV0aGVyIHRvCi0gICAgLy8gZW1pdCBzb21lIHNpZ25hbHMgb3Igbm90LgotICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4gb2xkTGlzdE9iamVjdDsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEFYQ29yZU9iamVjdD4+IG9sZEZvY3VzZWRP
YmplY3Q7Ci0KLSAgICAvLyBPbmx5IGxpc3QgYm94ZXMgYW5kIG1lbnUgbGlzdHMgc3VwcG9ydGVk
IHNvIGZhci4KLSAgICBpZiAoIW9iamVjdCB8fCAhKG9iamVjdC0+aXNMaXN0Qm94KCkgfHwgb2Jq
ZWN0LT5pc01lbnVMaXN0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPbmx5IHN1cHBv
cnQgSFRNTCBzZWxlY3QgZWxlbWVudHMgc28gZmFyIChBUklBIHNlbGVjdG9ycyBub3Qgc3VwcG9y
dGVkKS4KLSAgICBOb2RlKiBub2RlID0gb2JqZWN0LT5ub2RlKCk7Ci0gICAgaWYgKCFpczxIVE1M
U2VsZWN0RWxlbWVudD4obm9kZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVtaXQgc2ln
bmFsIGZyb20gdGhlIGxpc3Rib3gncyBwb2ludCBvZiB2aWV3IGZpcnN0LgotICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZShvYmplY3QtPndyYXBwZXIoKSwgInNlbGVjdGlvbi1jaGFuZ2VkIik7Ci0K
LSAgICAvLyBGaW5kIHRoZSBpdGVtIHdoZXJlIHRoZSBzZWxlY3Rpb24gY2hhbmdlIHdhcyB0cmln
Z2VyZWQgZnJvbS4KLSAgICBIVE1MU2VsZWN0RWxlbWVudCYgc2VsZWN0ID0gZG93bmNhc3Q8SFRN
TFNlbGVjdEVsZW1lbnQ+KCpub2RlKTsKLSAgICBpbnQgY2hhbmdlZEl0ZW1JbmRleCA9IHNlbGVj
dC5hY3RpdmVTZWxlY3Rpb25TdGFydExpc3RJbmRleCgpOwotCi0gICAgQVhDb3JlT2JqZWN0KiBs
aXN0T2JqZWN0ID0gZ2V0TGlzdE9iamVjdChvYmplY3QpOwotICAgIGlmICghbGlzdE9iamVjdCkg
ewotICAgICAgICBvbGRMaXN0T2JqZWN0LmdldCgpID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlD
aGlsZHJlblZlY3RvciYgaXRlbXMgPSBsaXN0T2JqZWN0LT5jaGlsZHJlbigpOwotICAgIGlmIChj
aGFuZ2VkSXRlbUluZGV4IDwgMCB8fCBjaGFuZ2VkSXRlbUluZGV4ID49IHN0YXRpY19jYXN0PGlu
dD4oaXRlbXMuc2l6ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFYQ29yZU9iamVjdCogaXRl
bSA9IGl0ZW1zLmF0KGNoYW5nZWRJdGVtSW5kZXgpLmdldCgpOwotCi0gICAgLy8gRW5zdXJlIHRo
ZSBjdXJyZW50IGxpc3Qgb2JqZWN0IGlzIHRoZSBzYW1lIHRoYW4gdGhlIG9sZCBvbmUgc28KLSAg
ICAvLyBmdXJ0aGVyIGNvbXBhcmlzb25zIG1ha2Ugc2Vuc2UuIE90aGVyd2lzZSwganVzdCByZXNl
dAotICAgIC8vIG9sZEZvY3VzZWRPYmplY3Qgc28gaXQgd29uJ3QgYmUgdGFrZW4gaW50byBhY2Nv
dW50LgotICAgIGlmIChvbGRMaXN0T2JqZWN0LmdldCgpICE9IGxpc3RPYmplY3QpCi0gICAgICAg
IG9sZEZvY3VzZWRPYmplY3QuZ2V0KCkgPSBudWxscHRyOwotCi0gICAgV2ViS2l0QWNjZXNzaWJs
ZSogYXhJdGVtID0gaXRlbSA/IGl0ZW0tPndyYXBwZXIoKSA6IG51bGxwdHI7Ci0gICAgV2ViS2l0
QWNjZXNzaWJsZSogYXhPbGRGb2N1c2VkT2JqZWN0ID0gb2xkRm9jdXNlZE9iamVjdC5nZXQoKSA/
IG9sZEZvY3VzZWRPYmplY3QuZ2V0KCktPndyYXBwZXIoKSA6IG51bGxwdHI7Ci0KLSAgICAvLyBP
bGQgZm9jdXNlZCBvYmplY3QganVzdCBsb3N0IGZvY3VzLCBzbyBlbWl0IHRoZSBldmVudHMuCi0g
ICAgaWYgKGF4T2xkRm9jdXNlZE9iamVjdCAmJiBheEl0ZW0gIT0gYXhPbGRGb2N1c2VkT2JqZWN0
KSB7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9sZEZvY3VzZWRPYmplY3QsICJm
b2N1cy1ldmVudCIsIGZhbHNlKTsKLSAgICAgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hh
bmdlKEFUS19PQkpFQ1QoYXhPbGRGb2N1c2VkT2JqZWN0KSwgQVRLX1NUQVRFX0ZPQ1VTRUQsIGZh
bHNlKTsKLSAgICB9Ci0KLSAgICAvLyBFbWl0IG5lZWRlZCBldmVudHMgZm9yIHRoZSBjdXJyZW50
bHkgKHVuKXNlbGVjdGVkIGl0ZW0uCi0gICAgaWYgKGF4SXRlbSkgewotICAgICAgICBib29sIGlz
U2VsZWN0ZWQgPSBpdGVtLT5pc1NlbGVjdGVkKCk7Ci0gICAgICAgIGF0a19vYmplY3Rfbm90aWZ5
X3N0YXRlX2NoYW5nZShBVEtfT0JKRUNUKGF4SXRlbSksIEFUS19TVEFURV9TRUxFQ1RFRCwgaXNT
ZWxlY3RlZCk7Ci0gICAgICAgIC8vIFdoZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGluIGEgY29s
bGFwc2VkIHdpZGdldCBzdWNoIGFzIGEgY29tYm8gYm94Ci0gICAgICAgIC8vIHdob3NlIGNoaWxk
IG1lbnUgaXMgbm90IHNob3dpbmcsIHRoYXQgY29sbGFwc2VkIHdpZGdldCByZXRhaW5zIGZvY3Vz
LgotICAgICAgICBpZiAoIW9iamVjdC0+aXNDb2xsYXBzZWQoKSkgewotICAgICAgICAgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKGF4SXRlbSwgImZvY3VzLWV2ZW50IiwgaXNTZWxlY3RlZCk7Ci0g
ICAgICAgICAgICBhdGtfb2JqZWN0X25vdGlmeV9zdGF0ZV9jaGFuZ2UoQVRLX09CSkVDVChheEl0
ZW0pLCBBVEtfU1RBVEVfRk9DVVNFRCwgaXNTZWxlY3RlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBVcGRhdGUgcG9pbnRlcnMgdG8gdGhlIHByZXZpb3VzbHkgaW52b2x2ZWQgb2JqZWN0
cy4KLSAgICBvbGRMaXN0T2JqZWN0LmdldCgpID0gbGlzdE9iamVjdDsKLSAgICBvbGRGb2N1c2Vk
T2JqZWN0LmdldCgpID0gaXRlbTsKLX0KLQotdm9pZCBBWE9iamVjdENhY2hlOjpwb3N0UGxhdGZv
cm1Ob3RpZmljYXRpb24oQVhDb3JlT2JqZWN0KiBjb3JlT2JqZWN0LCBBWE5vdGlmaWNhdGlvbiBu
b3RpZmljYXRpb24pCi17Ci0gICAgYXV0byogYXhPYmplY3QgPSBBVEtfT0JKRUNUKGNvcmVPYmpl
Y3QtPndyYXBwZXIoKSk7Ci0gICAgaWYgKCFheE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc3dpdGNoIChub3RpZmljYXRpb24pIHsKLSAgICBjYXNlIEFYQ2hlY2tlZFN0YXRlQ2hhbmdl
ZDoKLSAgICAgICAgaWYgKCFjb3JlT2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpICYmICFjb3Jl
T2JqZWN0LT5pc1N3aXRjaCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhdGtfb2Jq
ZWN0X25vdGlmeV9zdGF0ZV9jaGFuZ2UoYXhPYmplY3QsIEFUS19TVEFURV9DSEVDS0VELCBjb3Jl
T2JqZWN0LT5pc0NoZWNrZWQoKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBWFNlbGVj
dGVkQ2hpbGRyZW5DaGFuZ2VkOgotICAgIGNhc2UgQVhNZW51TGlzdFZhbHVlQ2hhbmdlZDoKLSAg
ICAgICAgLy8gQWNjZXNzaWJsZSBmb2N1cyBjbGFpbXMgc2hvdWxkIG5vdCBiZSBtYWRlIGlmIHRo
ZSBhc3NvY2lhdGVkIHdpZGdldCBpcyBub3QgZm9jdXNlZC4KLSAgICAgICAgaWYgKG5vdGlmaWNh
dGlvbiA9PSBBWE1lbnVMaXN0VmFsdWVDaGFuZ2VkICYmIGNvcmVPYmplY3QtPmlzTWVudUxpc3Qo
KSAmJiBjb3JlT2JqZWN0LT5pc0ZvY3VzZWQoKSkgewotICAgICAgICAgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKGF4T2JqZWN0LCAiZm9jdXMtZXZlbnQiLCB0cnVlKTsKLSAgICAgICAgICAgIGF0
a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShheE9iamVjdCwgQVRLX1NUQVRFX0ZPQ1VTRUQs
IHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIG5vdGlmeUNoaWxkcmVuU2VsZWN0aW9uQ2hhbmdl
KGNvcmVPYmplY3QpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQVhWYWx1ZUNoYW5nZWQ6
Ci0gICAgICAgIGlmIChBVEtfSVNfVkFMVUUoYXhPYmplY3QpKSB7Ci0gICAgICAgICAgICBBdGtQ
cm9wZXJ0eVZhbHVlcyBwcm9wZXJ0eVZhbHVlczsKLSAgICAgICAgICAgIHByb3BlcnR5VmFsdWVz
LnByb3BlcnR5X25hbWUgPSAiYWNjZXNzaWJsZS12YWx1ZSI7Ci0KLSAgICAgICAgICAgIG1lbXNl
dCgmcHJvcGVydHlWYWx1ZXMubmV3X3ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOwotCi0gICAg
ICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgICAgICBhdGtfdmFsdWVfZ2V0X3ZhbHVlX2Fu
ZF90ZXh0KEFUS19WQUxVRShheE9iamVjdCksICZ2YWx1ZSwgbnVsbHB0cik7Ci0gICAgICAgICAg
ICBnX3ZhbHVlX3NldF9kb3VibGUoZ192YWx1ZV9pbml0KCZwcm9wZXJ0eVZhbHVlcy5uZXdfdmFs
dWUsIEdfVFlQRV9ET1VCTEUpLCB2YWx1ZSk7Ci0KLSAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShheE9iamVjdCwgInByb3BlcnR5LWNoYW5nZTo6YWNjZXNzaWJsZS12YWx1ZSIsICZw
cm9wZXJ0eVZhbHVlcywgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIEFYSW52YWxpZFN0YXR1c0NoYW5nZWQ6Ci0gICAgICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0
YXRlX2NoYW5nZShheE9iamVjdCwgQVRLX1NUQVRFX0lOVkFMSURfRU5UUlksIGNvcmVPYmplY3Qt
PmludmFsaWRTdGF0dXMoKSAhPSAiZmFsc2UiKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEFYRWxlbWVudEJ1c3lDaGFuZ2VkOgotICAgICAgICBhdGtfb2JqZWN0X25vdGlmeV9zdGF0ZV9j
aGFuZ2UoYXhPYmplY3QsIEFUS19TVEFURV9CVVNZLCBjb3JlT2JqZWN0LT5pc0J1c3koKSk7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBWEN1cnJlbnRTdGF0ZUNoYW5nZWQ6Ci0gICAgICAg
IGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShheE9iamVjdCwgQVRLX1NUQVRFX0FDVElW
RSwgY29yZU9iamVjdC0+Y3VycmVudFN0YXRlKCkgIT0gQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0
ZTo6RmFsc2UpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQVhSb3dFeHBhbmRlZDoKLSAg
ICAgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKGF4T2JqZWN0LCBBVEtfU1RBVEVf
RVhQQU5ERUQsIHRydWUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQVhSb3dDb2xsYXBz
ZWQ6Ci0gICAgICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShheE9iamVjdCwgQVRL
X1NUQVRFX0VYUEFOREVELCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBWEV4
cGFuZGVkQ2hhbmdlZDoKLSAgICAgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKGF4
T2JqZWN0LCBBVEtfU1RBVEVfRVhQQU5ERUQsIGNvcmVPYmplY3QtPmlzRXhwYW5kZWQoKSk7Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBWERpc2FibGVkU3RhdGVDaGFuZ2VkOiB7Ci0gICAg
ICAgIGJvb2wgZW5hYmxlZFN0YXRlID0gY29yZU9iamVjdC0+aXNFbmFibGVkKCk7Ci0gICAgICAg
IGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShheE9iamVjdCwgQVRLX1NUQVRFX0VOQUJM
RUQsIGVuYWJsZWRTdGF0ZSk7Ci0gICAgICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5n
ZShheE9iamVjdCwgQVRLX1NUQVRFX1NFTlNJVElWRSwgZW5hYmxlZFN0YXRlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBBWFByZXNzZWRTdGF0ZUNoYW5nZWQ6Ci0gICAgICAg
IGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShheE9iamVjdCwgQVRLX1NUQVRFX1BSRVNT
RUQsIGNvcmVPYmplY3QtPmlzUHJlc3NlZCgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNl
IEFYUmVhZE9ubHlTdGF0dXNDaGFuZ2VkOgotICAgICAgICBhdGtfb2JqZWN0X25vdGlmeV9zdGF0
ZV9jaGFuZ2UoYXhPYmplY3QsIEFUS19TVEFURV9SRUFEX09OTFksICFjb3JlT2JqZWN0LT5jYW5T
ZXRWYWx1ZUF0dHJpYnV0ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFYUmVxdWly
ZWRTdGF0dXNDaGFuZ2VkOgotICAgICAgICBhdGtfb2JqZWN0X25vdGlmeV9zdGF0ZV9jaGFuZ2Uo
YXhPYmplY3QsIEFUS19TVEFURV9SRVFVSVJFRCwgY29yZU9iamVjdC0+aXNSZXF1aXJlZCgpKTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFYQWN0aXZlRGVzY2VuZGFudENoYW5nZWQ6Ci0g
ICAgICAgIGlmIChBWENvcmVPYmplY3QqIGRlc2NlbmRhbnQgPSBjb3JlT2JqZWN0LT5hY3RpdmVE
ZXNjZW5kYW50KCkpCi0gICAgICAgICAgICBwbGF0Zm9ybUhhbmRsZUZvY3VzZWRVSUVsZW1lbnRD
aGFuZ2VkKG51bGxwdHIsIGRlc2NlbmRhbnQtPm5vZGUoKSk7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFYT2JqZWN0Q2Fj
aGU6Om5vZGVUZXh0Q2hhbmdlUGxhdGZvcm1Ob3RpZmljYXRpb24oQWNjZXNzaWJpbGl0eU9iamVj
dCogb2JqZWN0LCBBWFRleHRDaGFuZ2UgdGV4dENoYW5nZSwgdW5zaWduZWQgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmIHRleHQpCi17Ci0gICAgaWYgKCFvYmplY3QgfHwgdGV4dC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFYQ29yZU9iamVjdCogcGFyZW50T2JqZWN0ID0gb2JqZWN0
LT5pc05vbk5hdGl2ZVRleHRDb250cm9sKCkgPyBvYmplY3QgOiBvYmplY3QtPnBhcmVudE9iamVj
dFVuaWdub3JlZCgpOwotICAgIGlmICghcGFyZW50T2JqZWN0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBhdXRvKiB3cmFwcGVyID0gcGFyZW50T2JqZWN0LT53cmFwcGVyKCk7Ci0gICAgaWYgKCF3
cmFwcGVyIHx8ICFBVEtfSVNfVEVYVCh3cmFwcGVyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Tm9kZSogbm9kZSA9IG9iamVjdC0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRW5zdXJlIGRvY3VtZW50J3MgbGF5b3V0IGlzIHVwLXRvLWRhdGUgYmVm
b3JlIHVzaW5nIFRleHRJdGVyYXRvci4KLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBub2RlLT5k
b2N1bWVudCgpOwotICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dCgpOwotCi0gICAgLy8gU2VsZWN0
IHRoZSByaWdodCBzaWduYWwgdG8gYmUgZW1pdHRlZAotICAgIENTdHJpbmcgZGV0YWlsOwotICAg
IHN3aXRjaCAodGV4dENoYW5nZSkgewotICAgIGNhc2UgQVhUZXh0SW5zZXJ0ZWQ6Ci0gICAgICAg
IGRldGFpbCA9ICJ0ZXh0LWluc2VydCI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQVhUZXh0
RGVsZXRlZDoKLSAgICAgICAgZGV0YWlsID0gInRleHQtcmVtb3ZlIjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBBWFRleHRBdHRyaWJ1dGVzQ2hhbmdlZDoKLSAgICAgICAgZGV0YWlsID0gInRl
eHQtYXR0cmlidXRlcy1jaGFuZ2VkIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgU3Ry
aW5nIHRleHRUb0VtaXQgPSB0ZXh0OwotICAgIHVuc2lnbmVkIG9mZnNldFRvRW1pdCA9IG9mZnNl
dDsKLQotICAgIC8vIElmIHRoZSBvYmplY3Qgd2UncmUgZW1pdHRpbmcgdGhlIHNpZ25hbCBmcm9t
IHJlcHJlc2VudHMgYQotICAgIC8vIHBhc3N3b3JkIGZpZWxkLCB3ZSB3aWxsIGVtaXQgdGhlIG1h
c2tlZCB0ZXh0LgotICAgIGlmIChwYXJlbnRPYmplY3QtPmlzUGFzc3dvcmRGaWVsZCgpKSB7Ci0g
ICAgICAgIFN0cmluZyBtYXNrZWRUZXh0ID0gcGFyZW50T2JqZWN0LT5wYXNzd29yZEZpZWxkVmFs
dWUoKTsKLSAgICAgICAgdGV4dFRvRW1pdCA9IG1hc2tlZFRleHQuc3Vic3RyaW5nKG9mZnNldCwg
dGV4dC5sZW5ndGgoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ29uc2lkZXIgcHJldmlv
dXMgdGV4dCBvYmplY3RzIHRoYXQgbWlnaHQgYmUgcHJlc2VudCBmb3IKLSAgICAgICAgLy8gdGhl
IGN1cnJlbnQgYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8gZW5zdXJlIHdlIGVtaXQgdGhlCi0gICAg
ICAgIC8vIHJpZ2h0IG9mZnNldCAoZS5nLiBtdWx0aWxpbmUgdGV4dCBhcmVhcykuCi0gICAgICAg
IG9mZnNldFRvRW1pdCA9IG9mZnNldCArIGNoYXJhY3RlckNvdW50KFNpbXBsZVJhbmdlIHsgeyAq
bm9kZS0+cGFyZW50Tm9kZSgpLCAwIH0sIHsgKm5vZGUsIDAgfSB9KTsKLSAgICB9Ci0KLSAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod3JhcHBlciwgZGV0YWlsLmRhdGEoKSwgb2Zmc2V0VG9FbWl0
LCB0ZXh0VG9FbWl0Lmxlbmd0aCgpLCB0ZXh0VG9FbWl0LnV0ZjgoKS5kYXRhKCkpOwotfQotCi12
b2lkIEFYT2JqZWN0Q2FjaGU6OmZyYW1lTG9hZGluZ0V2ZW50UGxhdGZvcm1Ob3RpZmljYXRpb24o
QWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0LCBBWExvYWRpbmdFdmVudCBsb2FkaW5nRXZlbnQp
Ci17Ci0gICAgaWYgKCFvYmplY3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8qIGF4T2Jq
ZWN0ID0gQVRLX09CSkVDVChvYmplY3QtPndyYXBwZXIoKSk7Ci0gICAgaWYgKCFheE9iamVjdCB8
fCAhQVRLX0lTX0RPQ1VNRU5UKGF4T2JqZWN0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dp
dGNoIChsb2FkaW5nRXZlbnQpIHsKLSAgICBjYXNlIEFYT2JqZWN0Q2FjaGU6OkFYTG9hZGluZ1N0
YXJ0ZWQ6Ci0gICAgICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShheE9iamVjdCwg
QVRLX1NUQVRFX0JVU1ksIHRydWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFYT2JqZWN0
Q2FjaGU6OkFYTG9hZGluZ1JlbG9hZGVkOgotICAgICAgICBhdGtfb2JqZWN0X25vdGlmeV9zdGF0
ZV9jaGFuZ2UoYXhPYmplY3QsIEFUS19TVEFURV9CVVNZLCB0cnVlKTsKLSAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGF4T2JqZWN0LCAicmVsb2FkIik7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQVhPYmplY3RDYWNoZTo6QVhMb2FkaW5nRmFpbGVkOgotICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUoYXhPYmplY3QsICJsb2FkLXN0b3BwZWQiKTsKLSAgICAgICAgYXRrX29iamVj
dF9ub3RpZnlfc3RhdGVfY2hhbmdlKGF4T2JqZWN0LCBBVEtfU1RBVEVfQlVTWSwgZmFsc2UpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEFYT2JqZWN0Q2FjaGU6OkFYTG9hZGluZ0ZpbmlzaGVk
OgotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJsb2FkLWNvbXBsZXRl
Iik7Ci0gICAgICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShheE9iamVjdCwgQVRL
X1NUQVRFX0JVU1ksIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFY
T2JqZWN0Q2FjaGU6OnBsYXRmb3JtSGFuZGxlRm9jdXNlZFVJRWxlbWVudENoYW5nZWQoTm9kZSog
b2xkRm9jdXNlZE5vZGUsIE5vZGUqIG5ld0ZvY3VzZWROb2RlKQotewotICAgIFJlZlB0cjxBY2Nl
c3NpYmlsaXR5T2JqZWN0PiBvbGRPYmplY3QgPSBnZXRPckNyZWF0ZShvbGRGb2N1c2VkTm9kZSk7
Ci0gICAgaWYgKG9sZE9iamVjdCkgewotICAgICAgICBhdXRvKiBheE9iamVjdCA9IG9sZE9iamVj
dC0+d3JhcHBlcigpOwotICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJm
b2N1cy1ldmVudCIsIGZhbHNlKTsKLSAgICAgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hh
bmdlKEFUS19PQkpFQ1QoYXhPYmplY3QpLCBBVEtfU1RBVEVfRk9DVVNFRCwgZmFsc2UpOwotICAg
IH0KLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gbmV3T2JqZWN0ID0gZ2V0T3JDcmVh
dGUobmV3Rm9jdXNlZE5vZGUpOwotICAgIGlmIChuZXdPYmplY3QpIHsKLSAgICAgICAgYXV0byog
YXhPYmplY3QgPSBuZXdPYmplY3QtPndyYXBwZXIoKTsKLSAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKGF4T2JqZWN0LCAiZm9jdXMtZXZlbnQiLCB0cnVlKTsKLSAgICAgICAgYXRrX29iamVj
dF9ub3RpZnlfc3RhdGVfY2hhbmdlKEFUS19PQkpFQ1QoYXhPYmplY3QpLCBBVEtfU1RBVEVfRk9D
VVNFRCwgdHJ1ZSk7Ci0gICAgfQotfQotCi12b2lkIEFYT2JqZWN0Q2FjaGU6OmhhbmRsZVNjcm9s
bGVkVG9BbmNob3IoY29uc3QgTm9kZSopCi17Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9B
Y2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL0FjY2Vzc2liaWxpdHlPYmplY3RBdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0MzRiZjUwY2M2ODYuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0QXRrLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDIwOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEx0ZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgotCi0jaWYgRU5BQkxF
KEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgi
Ci0jaW5jbHVkZSAiSFRNTFNwYW5FbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIK
LSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgot
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNp
bmNsdWRlICJUZXh0Q29udHJvbElubmVyRWxlbWVudHMuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nl
c3NpYmxlLmgiCi0jaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi12b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmRldGFjaFBsYXRmb3JtV3JhcHBlcihBY2Nl
c3NpYmlsaXR5RGV0YWNobWVudFR5cGUgZGV0YWNobWVudFR5cGUpCi17Ci0gICAgaWYgKGRldGFj
aG1lbnRUeXBlICE9IEFjY2Vzc2liaWxpdHlEZXRhY2htZW50VHlwZTo6Q2FjaGVEZXN0cm95ZWQp
IHsKLSAgICAgICAgaWYgKGF1dG8qIGNhY2hlID0gYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAg
ICAgICBjYWNoZS0+ZGV0YWNoV3JhcHBlcih0aGlzLCBkZXRhY2htZW50VHlwZSk7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvKiB3cmFwcGVyID0gdGhp
cy0+d3JhcHBlcigpOwotICAgIEFTU0VSVCh3cmFwcGVyKTsKLSAgICB3ZWJraXRBY2Nlc3NpYmxl
RGV0YWNoKFdFQktJVF9BQ0NFU1NJQkxFKHdyYXBwZXIpKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5T2JqZWN0OjphY2Nlc3NpYmlsaXR5SWdub3JlQXR0YWNobWVudCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi1BY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OmFjY2Vzc2liaWxpdHlQbGF0Zm9ybUluY2x1ZGVzT2JqZWN0KCkgY29uc3QK
LXsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBwYXJlbnQgPSBwYXJlbnRPYmplY3QoKTsKLSAg
ICBpZiAoIXBhcmVudCkKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNp
b246OkRlZmF1bHRCZWhhdmlvcjsKLQotICAgIC8vIElmIHRoZSBhdXRob3IgaGFzIHByb3ZpZGVk
IGEgcm9sZSwgcGxhdGZvcm0tc3BlY2lmaWMgaW5jbHVzaW9uIGxpa2VseSBkb2Vzbid0IGFwcGx5
LgotICAgIGlmIChhcmlhUm9sZUF0dHJpYnV0ZSgpICE9IEFjY2Vzc2liaWxpdHlSb2xlOjpVbmtu
b3duKQotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVs
dEJlaGF2aW9yOwotCi0gICAgQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSA9IHJvbGVWYWx1ZSgpOwot
ICAgIC8vIFdlIGV4cG9zZSB0aGUgc2xpZGVyIGFzIGEgd2hvbGUgYnV0IG5vdCBpdHMgdmFsdWUg
aW5kaWNhdG9yLgotICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTbGlkZXJUaHVt
YikKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246Oklnbm9yZU9i
amVjdDsKLQotICAgIC8vIFdoZW4gYSBsaXN0IGl0ZW0gaXMgbWFkZSB1cCBlbnRpcmVseSBvZiBj
aGlsZHJlbiAoZS5nLiBwYXJhZ3JhcGhzKQotICAgIC8vIHRoZSBsaXN0IGl0ZW0gZ2V0cyBpZ25v
cmVkLiBXZSBuZWVkIGl0LgotICAgIGlmIChpc0dyb3VwKCkgJiYgcGFyZW50LT5pc0xpc3QoKSkK
LSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246OkluY2x1ZGVPYmpl
Y3Q7Ci0KLSAgICAvLyBFbnRyaWVzIGFuZCBwYXNzd29yZCBmaWVsZHMgaGF2ZSBleHRyYW5lb3Vz
IGNoaWxkcmVuIHdoaWNoIHdlIHdhbnQgdG8gaWdub3JlLgotICAgIGlmIChwYXJlbnQtPmlzUGFz
c3dvcmRGaWVsZCgpIHx8IHBhcmVudC0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SWdub3JlT2JqZWN0OwotCi0gICAgLy8gSW5j
bHVkZSBhbGwgdGFibGVzLCBldmVuIGxheW91dCB0YWJsZXMuIFRoZSBBVCBjYW4gZGVjaWRlIHdo
YXQgdG8gZG8gd2l0aCBlYWNoLgotICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpD
ZWxsIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OlRhYmxlIHx8IHJvbGUgPT0gQWNjZXNz
aWJpbGl0eVJvbGU6OkNvbHVtbkhlYWRlciB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpS
b3dIZWFkZXIpCi0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpJ
bmNsdWRlT2JqZWN0OwotCi0gICAgLy8gVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB0ZXh0IHNo
b3VsZCBpbXBsZW1lbnQgQXRrVGV4dCBpdHNlbGYuCi0gICAgLy8gSG93ZXZlciwgV2ViQ29yZSBh
bHNvIG1hcHMgQVJJQSdzICJ0ZXh0IiByb2xlIHRvIHRoZSBTdGF0aWNUZXh0Um9sZS4KLSAgICBp
ZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3RhdGljVGV4dCkKLSAgICAgICAgcmV0dXJu
IGFyaWFSb2xlQXR0cmlidXRlKCkgIT0gQWNjZXNzaWJpbGl0eVJvbGU6OlVua25vd24gPyBBY2Nl
c3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3IgOiBBY2Nlc3NpYmlsaXR5
T2JqZWN0SW5jbHVzaW9uOjpJZ25vcmVPYmplY3Q7Ci0KLSAgICAvLyBJbmNsdWRlIGFsbCBsaXN0
IGl0ZW1zLCByZWdhcmRsZXNzIHRoZXkgaGF2ZSBvciBub3QgaW5saW5lIGNoaWxkcmVuCi0gICAg
aWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RJdGVtKQotICAgICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SW5jbHVkZU9iamVjdDsKLQotICAgIC8vIEJ1
bGxldHMvbnVtYmVycyBmb3IgbGlzdCBpdGVtcyBzaG91bGRuJ3QgYmUgZXhwb3NlZCBhcyBBdGtP
YmplY3RzLgotICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0TWFya2VyKQot
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SWdub3JlT2JqZWN0
OwotCi0gICAgLy8gTmV2ZXIgZXhwb3NlIGFuIHVua25vd24gb2JqZWN0LCBzaW5jZSBBVCdzIHdv
bid0IGtub3cgd2hhdCB0bwotICAgIC8vIGRvIHdpdGggdGhlbS4gVGhpcyBpcyB3aGF0IGlzIGRv
bmUgb24gdGhlIE1hYyBhcyB3ZWxsLgotICAgIGlmIChyb2xlID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpVbmtub3duKQotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6
SWdub3JlT2JqZWN0OwotCi0gICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OklubGlu
ZSkKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246OkluY2x1ZGVP
YmplY3Q7Ci0KLSAgICAvLyBMaW5lcyBwYXN0IHRoaXMgcG9pbnQgb25seSBtYWtlIHNlbnNlIGZv
ciBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0cy4KLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9i
amVjdCA9IHJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJPYmplY3QpCi0gICAgICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7Ci0KLSAgICAv
LyBXZSBhbHdheXMgd2FudCB0byBpbmNsdWRlIHBhcmFncmFwaHMgdGhhdCBoYXZlIHJlbmRlcmVk
IGNvbnRlbnQuCi0gICAgLy8gV2ViQ29yZSBBY2Nlc3NpYmlsaXR5IGRvZXMgc28gdW5sZXNzIHRo
ZXJlIGlzIGEgUmVuZGVyQmxvY2sgY2hpbGQuCi0gICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0
eVJvbGU6OlBhcmFncmFwaCkgewotICAgICAgICBhdXRvIGNoaWxkID0gY2hpbGRyZW5PZlR5cGU8
UmVuZGVyQmxvY2s+KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJPYmplY3QpKS5maXJz
dCgpOwotICAgICAgICByZXR1cm4gY2hpbGQgPyBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9u
OjpJbmNsdWRlT2JqZWN0IDogQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJl
aGF2aW9yOwotICAgIH0KLQotICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIGluY2x1ZGUgdGFibGUg
Y2VsbHMgKGxheW91dCBhbmQgQ1NTKSB0aGF0IGhhdmUgcmVuZGVyZWQgdGV4dCBjb250ZW50Lgot
ICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KHJlbmRlck9iamVjdCkpIHsKLSAgICAgICAgZm9y
IChjb25zdCBhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlck9iamVjdD4oZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlck9iamVjdCkpKSB7Ci0gICAgICAgICAgICBpZiAoaXM8
UmVuZGVySW5saW5lPihjaGlsZCkgfHwgaXM8UmVuZGVyVGV4dD4oY2hpbGQpIHx8IGlzPEhUTUxT
cGFuRWxlbWVudD4oY2hpbGQubm9kZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SW5jbHVkZU9iamVjdDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6RGVmYXVsdEJlaGF2aW9yOwot
ICAgIH0KLQotICAgIGlmIChyZW5kZXJPYmplY3QtPmlzQW5vbnltb3VzQmxvY2soKSkgewotICAg
ICAgICAvLyBUaGUgdGV4dCBkaXNwbGF5ZWQgYnkgYW4gQVJJQSBtZW51IGl0ZW0gaXMgZXhwb3Nl
ZCB0aHJvdWdoIHRoZSBhY2Nlc3NpYmxlIG5hbWUuCi0gICAgICAgIGlmIChwYXJlbnQtPmlzTWVu
dUl0ZW0oKSkKLSAgICAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9u
OjpJZ25vcmVPYmplY3Q7Ci0KLSAgICAgICAgLy8gVGhlIHRleHQgZGlzcGxheWVkIGluIGhlYWRp
bmdzIGlzIHR5cGljYWxseSBleHBvc2VkIGluIHRoZSBoZWFkaW5nIGl0c2VsZi4KLSAgICAgICAg
aWYgKHBhcmVudC0+aXNIZWFkaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eU9iamVjdEluY2x1c2lvbjo6SWdub3JlT2JqZWN0OwotCi0gICAgICAgIC8vIFRoZSB0ZXh0IGRp
c3BsYXllZCBpbiBsaXN0IGl0ZW1zIGlzIHR5cGljYWxseSBleHBvc2VkIGluIHRoZSBsaXN0IGl0
ZW0gaXRzZWxmLgotICAgICAgICBpZiAocGFyZW50LT5pc0xpc3RJdGVtKCkpCi0gICAgICAgICAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1c2lvbjo6SWdub3JlT2JqZWN0OwotCi0g
ICAgICAgIC8vIFRoZSB0ZXh0IGRpc3BsYXllZCBpbiBsaW5rcyBpcyB0eXBpY2FsbHkgZXhwb3Nl
ZCBpbiB0aGUgbGluayBpdHNlbGYuCi0gICAgICAgIGlmIChwYXJlbnQtPmlzTGluaygpKQotICAg
ICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246Oklnbm9yZU9iamVj
dDsKLQotICAgICAgICAvLyBGSVhNRTogVGhpcyBuZXh0IG9uZSBuZWVkcyBzb21lIGZ1cnRoZXIg
Y29uc2lkZXJhdGlvbi4gQnV0IHBhcmFncmFwaHMgYXJlIG5vdAotICAgICAgICAvLyB0eXBpY2Fs
bHkgaHVnZSAobGlrZSBkaXZzKS4gQW5kIGlnbm9yaW5nIGFub255bW91cyBibG9jayBjaGlsZHJl
biBvZiBwYXJhZ3JhcGhzCi0gICAgICAgIC8vIHdpbGwgcHJlc2VydmUgZXhpc3RpbmcgYmVoYXZp
b3IuCi0gICAgICAgIGlmIChwYXJlbnQtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xl
OjpQYXJhZ3JhcGgpCi0gICAgICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eU9iamVjdEluY2x1
c2lvbjo6SWdub3JlT2JqZWN0OwotCi0gICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0
SW5jbHVzaW9uOjpEZWZhdWx0QmVoYXZpb3I7Ci0gICAgfQotCi0gICAgTm9kZSogbm9kZSA9IHJl
bmRlck9iamVjdC0+bm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHlPYmplY3RJbmNsdXNpb246OkRlZmF1bHRCZWhhdmlvcjsKLQotICAgIC8vIFdlIGRv
bid0IHdhbnQgPHNwYW4+IGVsZW1lbnRzIHRvIHNob3cgdXAgaW4gdGhlIGFjY2Vzc2liaWxpdHkg
aGllcmFyY2h5IHVubGVzcwotICAgIC8vIHdlIGhhdmUgZ29vZCByZWFzb25zIGZvciB0aGF0IChl
LmcuIGZvY3VzYWJsZSBvciB2aXNpYmxlIGJlY2F1c2Ugb2YgY29udGFpbmluZwotICAgIC8vIGEg
bWVhbmluZ2Z1bCBhY2Nlc3NpYmxlIG5hbWUsIG1heWJlIHNldCB0aHJvdWdoIEFSSUEpLCBzbyB3
ZSBjYW4gdXNlCi0gICAgLy8gYXRrX2NvbXBvbmVudF9ncmFiX2ZvY3VzKCkgdG8gc2V0IHRoZSBm
b2N1cyB0byBpdC4KLSAgICBpZiAoaXM8SFRNTFNwYW5FbGVtZW50Pihub2RlKSAmJiAhY2FuU2V0
Rm9jdXNBdHRyaWJ1dGUoKSAmJiAhaGFzQXR0cmlidXRlc1JlcXVpcmVkRm9ySW5jbHVzaW9uKCkg
JiYgIXN1cHBvcnRzQVJJQUF0dHJpYnV0ZXMoKSkKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlPYmplY3RJbmNsdXNpb246Oklnbm9yZU9iamVjdDsKLQotICAgIC8vIElmIHdlIGluY2x1ZGUg
VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50IGNoaWxkcmVuLCBjaGFuZ2VzIHRvIHRob3NlIGNo
aWxkcmVuCi0gICAgLy8gd2lsbCByZXN1bHQgaW4gZm9jdXMgYW5kIHRleHQgbm90aWZpY2F0aW9u
cyB0aGF0IHN1Z2dlc3QgdGhlIHVzZXIgaXMgbm8gbG9uZ2VyCi0gICAgLy8gaW4gdGhlIGNvbnRy
b2wuIFRoaXMgY2FuIGJlIGVzcGVjaWFsbHkgcHJvYmxlbWF0aWMgZm9yIHNjcmVlbiByZWFkZXIg
dXNlcnMgd2l0aAotICAgIC8vIGtleSBlY2hvIGVuYWJsZWQgd2hlbiB0eXBpbmcgaW4gYSBwYXNz
d29yZCBpbnB1dC4KLSAgICBpZiAoaXM8VGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50Pihub2Rl
KSkKLSAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlPYmplY3RJbmNsdXNpb246Oklnbm9yZU9i
amVjdDsKLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5T2JqZWN0SW5jbHVzaW9uOjpEZWZhdWx0
QmVoYXZpb3I7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6YWxsb3dzVGV4dFJhbmdl
cygpIGNvbnN0Ci17Ci0gICAgLy8gQ2hlY2sgdHlwZSBmb3IgdGhlIEFjY2Vzc2liaWxpdHlPYmpl
Y3QuCi0gICAgaWYgKGlzVGV4dENvbnRyb2woKSB8fCBpc1dlYkFyZWEoKSB8fCBpc0dyb3VwKCkg
fHwgaXNMaW5rKCkgfHwgaXNIZWFkaW5nKCkgfHwgaXNMaXN0SXRlbSgpIHx8IGlzVGFibGVDZWxs
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gQ2hlY2sgcm9sZXMgYXMgdGhlIGxh
c3QgZmFsbGJhY2sgbWVjaGFuaXNtLgotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSByb2xl
VmFsdWUoKTsKLSAgICByZXR1cm4gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UGFyYWdyYXBo
IHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkxhYmVsIHx8IHJvbGUgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6OkRpdiB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpGb3JtIHx8IHJvbGUg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OlByZTsKLX0KLQotdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9i
amVjdDo6Z2V0TGVuZ3RoRm9yVGV4dFJhbmdlKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCB0ZXh0
TGVuZ3RoID0gdGV4dCgpLmxlbmd0aCgpOwotCi0gICAgaWYgKHRleHRMZW5ndGgpCi0gICAgICAg
IHJldHVybiB0ZXh0TGVuZ3RoOwotCi0gICAgLy8gR3RrIEFUcyBuZWVkIHRoaXMgZm9yIGFsbCB0
ZXh0IG9iamVjdHM7IG5vdCBqdXN0IHRleHQgY29udHJvbHMuCi0gICAgTm9kZSogbm9kZSA9IHRo
aXMtPm5vZGUoKTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJl
bmRlcmVyKCkgOiBudWxscHRyOwotICAgIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpCi0g
ICAgICAgIHRleHRMZW5ndGggPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpLnRleHQo
KS5sZW5ndGgoKTsKLQotICAgIC8vIEdldCB0aGUgdGV4dCBsZW5ndGggZnJvbSB0aGUgZWxlbWVu
dHMgdW5kZXIgdGhlCi0gICAgLy8gYWNjZXNzaWJpbGl0eSBvYmplY3QgaWYgdGhlIHZhbHVlIGlz
IHN0aWxsIHplcm8uCi0gICAgaWYgKCF0ZXh0TGVuZ3RoICYmIGFsbG93c1RleHRSYW5nZXMoKSkK
LSAgICAgICAgdGV4dExlbmd0aCA9IHRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRV
bmRlckVsZW1lbnRNb2RlKEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50TW9kZTo6VGV4dFVu
ZGVyRWxlbWVudE1vZGVJbmNsdWRlQWxsQ2hpbGRyZW4pKS5sZW5ndGgoKTsKLQotICAgIHJldHVy
biB0ZXh0TGVuZ3RoOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBF
TkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZhOGU0NzkzMDA1Ny4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTM4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBM
dGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwotICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDE5IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBh
MTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBt
b3ppbGxhLm9yZyBjb2RlLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcwotICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgotICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgotICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZS5oIgotCi0jaWYgRU5BQkxFKEFDQ0VT
U0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eUxpc3QuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJv
eE9wdGlvbi5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgotI2luY2x1ZGUgIkFj
Y2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGVSb3cu
aCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVkaXRpbmcuaCIKLSNpbmNsdWRl
ICJFbGVtZW50SW5saW5lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJBbmNlc3Rvckl0
ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKLSNpbmNsdWRlICJSZW5kZXJPYmpl
Y3QuaCIKLSNpbmNsdWRlICJTVkdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNp
bmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKLSNpbmNs
dWRlICJXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZUFjdGlvbi5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VDb21wb25lbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlRWRpdGFibGVUZXh0Lmgi
Ci0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuaCIKLSNp
bmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgiCi0jaW5jbHVkZSAi
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNz
aWJsZUludGVyZmFjZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUYWJsZS5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNl
bGwuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oIgotI2luY2x1
ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5oIgotI2luY2x1ZGUgIldlYktpdEFj
Y2Vzc2libGVVdGlsLmgiCi0jaW5jbHVkZSA8Z2xpYi9ncHJpbnRmLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dsaWIvV1RGR1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVQcml2YXRlIHsK
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Q7Ci0KLSAgICAvLyBDYWNoZWQgZGF0YSBm
b3IgQXRrT2JqZWN0LgotICAgIENTdHJpbmcgYWNjZXNzaWJsZU5hbWU7Ci0gICAgQ1N0cmluZyBh
Y2Nlc3NpYmxlRGVzY3JpcHRpb247Ci0KLSAgICAvLyBDYWNoZWQgZGF0YSBmb3IgQXRrQWN0aW9u
LgotICAgIENTdHJpbmcgYWN0aW9uTmFtZTsKLSAgICBDU3RyaW5nIGFjdGlvbktleUJpbmRpbmc7
Ci0KLSAgICAvLyBDYWNoZWQgZGF0YSBmb3IgQXRrRG9jdW1lbnQuCi0gICAgQ1N0cmluZyBkb2N1
bWVudExvY2FsZTsKLSAgICBDU3RyaW5nIGRvY3VtZW50VHlwZTsKLSAgICBDU3RyaW5nIGRvY3Vt
ZW50RW5jb2Rpbmc7Ci0gICAgQ1N0cmluZyBkb2N1bWVudFVSSTsKLQotICAgIC8vIENhY2hlZCBk
YXRhIGZvciBBdGtJbWFnZS4KLSAgICBDU3RyaW5nIGltYWdlRGVzY3JpcHRpb247Ci19OwotCi1X
RUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0QWNjZXNzaWJsZSwgd2Via2l0X2FjY2Vzc2libGUsIEFU
S19UWVBFX09CSkVDVCkKLQotc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlR2V0
TmFtZShBdGtPYmplY3QqIG9iamVjdCkKLXsKLSAgICBhdXRvKiBhY2Nlc3NpYmxlID0gV0VCS0lU
X0FDQ0VTU0lCTEUob2JqZWN0KTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0lu
dmFsaWQoYWNjZXNzaWJsZSwgbnVsbHB0cik7Ci0KLSAgICBpZiAoIWFjY2Vzc2libGUtPnByaXYt
Pm9iamVjdCkKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgVmVjdG9yPEFjY2Vzc2liaWxpdHlU
ZXh0PiB0ZXh0T3JkZXI7Ci0gICAgYWNjZXNzaWJsZS0+cHJpdi0+b2JqZWN0LT5hY2Nlc3NpYmls
aXR5VGV4dCh0ZXh0T3JkZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiB0ZXh0IDogdGV4dE9y
ZGVyKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIGNoZWNrIGlzIGhlcmUgYmVjYXVzZSBBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdDo6dGl0bGVFbGVtZW50VGV4dCgpCi0gICAgICAgIC8vIGFwcGVu
ZHMgYW4gZW1wdHkgU3RyaW5nIGZvciB0aGUgTGFiZWxCeUVsZW1lbnRUZXh0IHNvdXJjZSB3aGVu
IHRoZXJlIGlzIGEKLSAgICAgICAgLy8gdGl0bGVVSUVsZW1lbnQoKS4gUmVtb3ZpbmcgdGhpcyBj
aGVjayBtYWtlcyBzb21lIGZpZWxkc2V0cyBsb3NlIHRoZWlyIG5hbWUuCi0gICAgICAgIGlmICh0
ZXh0LnRleHQuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
V2ViQ29yZSBBY2Nlc3NpYmlsaXR5IHNob3VsZCBwcm92aWRlIHVzIHdpdGggdGhlIHRleHQgYWx0
ZXJuYXRpdmUgY29tcHV0YXRpb24KLSAgICAgICAgLy8gaW4gdGhlIG9yZGVyIGRlZmluZWQgYnkg
dGhhdCBzcGVjLiBTbyB0YWtlIHRoZSBmaXJzdCB0aGluZyB0aGF0IG91ciBwbGF0Zm9ybQotICAg
ICAgICAvLyBkb2VzIG5vdCBleHBvc2UgdmlhIHRoZSBBdGtPYmplY3QgZGVzY3JpcHRpb24uCi0g
ICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgIT0gQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6Okhl
bHAgJiYgdGV4dC50ZXh0U291cmNlICE9IEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpTdW1tYXJ5
KQotICAgICAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVDYWNoZUFuZFJldHVybkF0a1By
b3BlcnR5KGFjY2Vzc2libGUsIEF0a0NhY2hlZEFjY2Vzc2libGVOYW1lLCB0ZXh0LnRleHQudXRm
OCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUNhY2hlQW5kUmV0dXJu
QXRrUHJvcGVydHkoYWNjZXNzaWJsZSwgQXRrQ2FjaGVkQWNjZXNzaWJsZU5hbWUsICIiKTsKLX0K
LQotc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlR2V0RGVzY3JpcHRpb24oQXRr
T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZSA9IFdFQktJVF9BQ0NFU1NJ
QkxFKG9iamVjdCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKGFj
Y2Vzc2libGUsIG51bGxwdHIpOwotCi0gICAgaWYgKCFhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3Qp
Ci0gICAgICAgIHJldHVybiAiIjsKLQotICAgIFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4gdGV4
dE9yZGVyOwotICAgIGFjY2Vzc2libGUtPnByaXYtPm9iamVjdC0+YWNjZXNzaWJpbGl0eVRleHQo
dGV4dE9yZGVyKTsKLQotICAgIGJvb2wgbmFtZVRleHRBdmFpbGFibGUgPSBmYWxzZTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHRleHQgOiB0ZXh0T3JkZXIpIHsKLSAgICAgICAgLy8gV2ViQ29yZSBB
Y2Nlc3NpYmlsaXR5IHNob3VsZCBwcm92aWRlIHVzIHdpdGggdGhlIHRleHQgYWx0ZXJuYXRpdmUg
Y29tcHV0YXRpb24KLSAgICAgICAgLy8gaW4gdGhlIG9yZGVyIGRlZmluZWQgYnkgdGhhdCBzcGVj
LiBTbyB0YWtlIHRoZSBmaXJzdCB0aGluZyB0aGF0IG91ciBwbGF0Zm9ybQotICAgICAgICAvLyBk
b2VzIG5vdCBleHBvc2UgdmlhIHRoZSBBdGtPYmplY3QgbmFtZS4KLSAgICAgICAgaWYgKHRleHQu
dGV4dFNvdXJjZSA9PSBBY2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6SGVscCB8fCB0ZXh0LnRleHRT
b3VyY2UgPT0gQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6OlN1bW1hcnkpCi0gICAgICAgICAgICBy
ZXR1cm4gd2Via2l0QWNjZXNzaWJsZUNhY2hlQW5kUmV0dXJuQXRrUHJvcGVydHkoYWNjZXNzaWJs
ZSwgQXRrQ2FjaGVkQWNjZXNzaWJsZURlc2NyaXB0aW9uLCB0ZXh0LnRleHQudXRmOCgpKTsKLQot
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBvdGhlciB0ZXh0IGFsdGVybmF0aXZlLCB0aGUgdGl0
bGUgdGFnIGNvbnRlbnRzIHdpbGwgaGF2ZSBiZWVuCi0gICAgICAgIC8vIHVzZWQgZm9yIHRoZSBB
dGtPYmplY3QgbmFtZS4gV2UgZG9uJ3Qgd2FudCB0byBkdXBsaWNhdGUgaXQgaGVyZS4KLSAgICAg
ICAgaWYgKHRleHQudGV4dFNvdXJjZSA9PSBBY2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6VGl0bGVU
YWcgJiYgbmFtZVRleHRBdmFpbGFibGUpCi0gICAgICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNz
aWJsZUNhY2hlQW5kUmV0dXJuQXRrUHJvcGVydHkoYWNjZXNzaWJsZSwgQXRrQ2FjaGVkQWNjZXNz
aWJsZURlc2NyaXB0aW9uLCB0ZXh0LnRleHQudXRmOCgpKTsKLQotICAgICAgICBuYW1lVGV4dEF2
YWlsYWJsZSA9IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVDYWNo
ZUFuZFJldHVybkF0a1Byb3BlcnR5KGFjY2Vzc2libGUsIEF0a0NhY2hlZEFjY2Vzc2libGVEZXNj
cmlwdGlvbiwgIiIpOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVBdGtSZWxhdGlvbkJ5VHlwZShB
dGtSZWxhdGlvblNldCogcmVsYXRpb25TZXQsIEF0a1JlbGF0aW9uVHlwZSByZWxhdGlvblR5cGUp
Ci17Ci0gICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfbl9yZWxhdGlvbnMocmVs
YXRpb25TZXQpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICBBdGtSZWxhdGlvbiogcmVsYXRpb24gPSBhdGtfcmVsYXRpb25fc2V0X2dldF9yZWxhdGlvbihy
ZWxhdGlvblNldCwgaSk7Ci0gICAgICAgIGlmIChhdGtfcmVsYXRpb25fZ2V0X3JlbGF0aW9uX3R5
cGUocmVsYXRpb24pID09IHJlbGF0aW9uVHlwZSkgewotICAgICAgICAgICAgYXRrX3JlbGF0aW9u
X3NldF9yZW1vdmUocmVsYXRpb25TZXQsIHJlbGF0aW9uKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBzZXRBdGtSZWxhdGlvblNldEZyb21D
b3JlT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIEF0a1JlbGF0aW9uU2V0
KiByZWxhdGlvblNldCkKLXsKLSAgICAvLyBFbGVtZW50cyB3aXRoIGFyaWEtbGFiZWxsZWRieSBz
aG91bGQgaGF2ZSB0aGUgbGFiZWxsZWQtYnkgcmVsYXRpb24gYXMgcGVyIHRoZSBBUklBIEFBTSBz
cGVjLgotICAgIC8vIENvbnRyb2xzIHdpdGggYSBsYWJlbCBlbGVtZW50IGFuZCBmaWVsZHNldHMg
d2l0aCBhIGxlZ2VuZCBlbGVtZW50IHNob3VsZCBhbHNvIHVzZSB0aGlzIHJlbGF0aW9uCi0gICAg
Ly8gYXMgcGVyIHRoZSBIVE1MIEFBTSBzcGVjLiBUaGUgcmVjaXByb2NhbCBsYWJlbC1mb3IgcmVs
YXRpb24gc2hvdWxkIGFsc28gYmUgdXNlZC4KLSAgICByZW1vdmVBdGtSZWxhdGlvbkJ5VHlwZShy
ZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKTsKLSAgICByZW1vdmVBdGtSZWxh
dGlvbkJ5VHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0xBQkVMX0ZPUik7Ci0gICAgaWYg
KGNvcmVPYmplY3QtPmlzQ29udHJvbCgpKSB7Ci0gICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBsYWJlbCA9IGNvcmVPYmplY3QtPmNvcnJlc3BvbmRpbmdMYWJlbEZvckNvbnRyb2xFbGVt
ZW50KCkpCi0gICAgICAgICAgICBhdGtfcmVsYXRpb25fc2V0X2FkZF9yZWxhdGlvbl9ieV90eXBl
KHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fTEFCRUxMRURfQlksIEFUS19PQkpFQ1QobGFiZWwt
PndyYXBwZXIoKSkpOwotICAgIH0gZWxzZSBpZiAoY29yZU9iamVjdC0+aXNGaWVsZHNldCgpKSB7
Ci0gICAgICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBsYWJlbCA9IGNvcmVPYmplY3QtPnRp
dGxlVUlFbGVtZW50KCkpCi0gICAgICAgICAgICBhdGtfcmVsYXRpb25fc2V0X2FkZF9yZWxhdGlv
bl9ieV90eXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fTEFCRUxMRURfQlksIEFUS19PQkpF
Q1QobGFiZWwtPndyYXBwZXIoKSkpOwotICAgIH0gZWxzZSBpZiAoY29yZU9iamVjdC0+cm9sZVZh
bHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkxlZ2VuZCkgewotICAgICAgICBpZiAoUmVuZGVy
QmxvY2sqIHJlbmRlckZpZWxkc2V0ID0gYW5jZXN0b3JzT2ZUeXBlPFJlbmRlckJsb2NrPigqY29y
ZU9iamVjdC0+cmVuZGVyZXIoKSkuZmlyc3QoKSkgewotICAgICAgICAgICAgaWYgKHJlbmRlckZp
ZWxkc2V0LT5pc0ZpZWxkc2V0KCkpIHsKLSAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBmaWVsZHNldCA9IGNvcmVPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUo
cmVuZGVyRmllbGRzZXQpOwotICAgICAgICAgICAgICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkX3Jl
bGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElPTl9MQUJFTF9GT1IsIEFUS19P
QkpFQ1QoZmllbGRzZXQtPndyYXBwZXIoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb250cm9sID0gY29yZU9iamVjdC0+
Y29ycmVzcG9uZGluZ0NvbnRyb2xGb3JMYWJlbEVsZW1lbnQoKSkKLSAgICAgICAgYXRrX3JlbGF0
aW9uX3NldF9hZGRfcmVsYXRpb25fYnlfdHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0xB
QkVMX0ZPUiwgQVRLX09CSkVDVChjb250cm9sLT53cmFwcGVyKCkpKTsKLSAgICBlbHNlIHsKLSAg
ICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFy
aWFMYWJlbGxlZEJ5RWxlbWVudHM7Ci0gICAgICAgIGNvcmVPYmplY3QtPmFyaWFMYWJlbGxlZEJ5
RWxlbWVudHMoYXJpYUxhYmVsbGVkQnlFbGVtZW50cyk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0
byYgYWNjZXNzaWJpbGl0eU9iamVjdCA6IGFyaWFMYWJlbGxlZEJ5RWxlbWVudHMpCi0gICAgICAg
ICAgICBhdGtfcmVsYXRpb25fc2V0X2FkZF9yZWxhdGlvbl9ieV90eXBlKHJlbGF0aW9uU2V0LCBB
VEtfUkVMQVRJT05fTEFCRUxMRURfQlksIEFUS19PQkpFQ1QoYWNjZXNzaWJpbGl0eU9iamVjdC0+
d3JhcHBlcigpKSk7Ci0gICAgfQotCi0gICAgLy8gRWxlbWVudHMgcmVmZXJlbmNlZCBieSBhcmlh
LWxhYmVsbGVkYnkgc2hvdWxkIGhhdmUgdGhlIGxhYmVsLWZvciByZWxhdGlvbiBhcyBwZXIgdGhl
IEFSSUEgQUFNIHNwZWMuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNo
aWxkcmVuVmVjdG9yIGxhYmVsczsKLSAgICBjb3JlT2JqZWN0LT5hcmlhTGFiZWxsZWRCeVJlZmVy
ZW5jaW5nRWxlbWVudHMobGFiZWxzKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFjY2Vzc2liaWxp
dHlPYmplY3QgOiBsYWJlbHMpCi0gICAgICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9u
X2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElPTl9MQUJFTF9GT1IsIEFUS19PQkpFQ1Qo
YWNjZXNzaWJpbGl0eU9iamVjdC0+d3JhcHBlcigpKSk7Ci0KLSAgICAvLyBFbGVtZW50cyB3aXRo
IGFyaWEtZmxvd3RvIHNob3VsZCBoYXZlIHRoZSBmbG93cy10byByZWxhdGlvbiBhcyBwZXIgdGhl
IEFSSUEgQUFNIHNwZWMuCi0gICAgcmVtb3ZlQXRrUmVsYXRpb25CeVR5cGUocmVsYXRpb25TZXQs
IEFUS19SRUxBVElPTl9GTE9XU19UTyk7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNz
aWJpbGl0eUNoaWxkcmVuVmVjdG9yIGFyaWFGbG93VG9FbGVtZW50czsKLSAgICBjb3JlT2JqZWN0
LT5hcmlhRmxvd1RvRWxlbWVudHMoYXJpYUZsb3dUb0VsZW1lbnRzKTsKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGFjY2Vzc2liaWxpdHlPYmplY3QgOiBhcmlhRmxvd1RvRWxlbWVudHMpCi0gICAgICAg
IGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19S
RUxBVElPTl9GTE9XU19UTywgQVRLX09CSkVDVChhY2Nlc3NpYmlsaXR5T2JqZWN0LT53cmFwcGVy
KCkpKTsKLQotICAgIC8vIEVsZW1lbnRzIHJlZmVyZW5jZWQgYnkgYXJpYS1mbG93dG8gc2hvdWxk
IGhhdmUgdGhlIGZsb3dzLWZyb20gcmVsYXRpb24gYXMgcGVyIHRoZSBBUklBIEFBTSBzcGVjLgot
ICAgIHJlbW92ZUF0a1JlbGF0aW9uQnlUeXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fRkxP
V1NfRlJPTSk7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVu
VmVjdG9yIGZsb3dGcm9tOwotICAgIGNvcmVPYmplY3QtPmFyaWFGbG93VG9SZWZlcmVuY2luZ0Vs
ZW1lbnRzKGZsb3dGcm9tKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFjY2Vzc2liaWxpdHlPYmpl
Y3QgOiBmbG93RnJvbSkKLSAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9hZGRfcmVsYXRpb25fYnlf
dHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0ZMT1dTX0ZST00sIEFUS19PQkpFQ1QoYWNj
ZXNzaWJpbGl0eU9iamVjdC0+d3JhcHBlcigpKSk7Ci0KLSAgICAvLyBFbGVtZW50cyB3aXRoIGFy
aWEtZGVzY3JpYmVkYnkgc2hvdWxkIGhhdmUgdGhlIGRlc2NyaWJlZC1ieSByZWxhdGlvbiBhcyBw
ZXIgdGhlIEFSSUEgQUFNIHNwZWMuCi0gICAgcmVtb3ZlQXRrUmVsYXRpb25CeVR5cGUocmVsYXRp
b25TZXQsIEFUS19SRUxBVElPTl9ERVNDUklCRURfQlkpOwotICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhRGVzY3JpYmVkQnlFbGVtZW50czsK
LSAgICBjb3JlT2JqZWN0LT5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyhhcmlhRGVzY3JpYmVkQnlF
bGVtZW50cyk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBhY2Nlc3NpYmlsaXR5T2JqZWN0IDogYXJp
YURlc2NyaWJlZEJ5RWxlbWVudHMpCi0gICAgICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0
aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElPTl9ERVNDUklCRURfQlksIEFUS19P
QkpFQ1QoYWNjZXNzaWJpbGl0eU9iamVjdC0+d3JhcHBlcigpKSk7Ci0KLSAgICAvLyBFbGVtZW50
cyByZWZlcmVuY2VkIGJ5IGFyaWEtZGVzY3JpYmVkYnkgc2hvdWxkIGhhdmUgdGhlIGRlc2NyaXB0
aW9uLWZvciByZWxhdGlvbiBhcyBwZXIgdGhlIEFSSUEgQUFNIHNwZWMuCi0gICAgcmVtb3ZlQXRr
UmVsYXRpb25CeVR5cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElPTl9ERVNDUklQVElPTl9GT1Ip
OwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBk
ZXNjcmliZXJzOwotICAgIGNvcmVPYmplY3QtPmFyaWFEZXNjcmliZWRCeVJlZmVyZW5jaW5nRWxl
bWVudHMoZGVzY3JpYmVycyk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBhY2Nlc3NpYmlsaXR5T2Jq
ZWN0IDogZGVzY3JpYmVycykKLSAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9hZGRfcmVsYXRpb25f
YnlfdHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0RFU0NSSVBUSU9OX0ZPUiwgQVRLX09C
SkVDVChhY2Nlc3NpYmlsaXR5T2JqZWN0LT53cmFwcGVyKCkpKTsKLQotICAgIC8vIEVsZW1lbnRz
IHdpdGggYXJpYS1jb250cm9scyBzaG91bGQgaGF2ZSB0aGUgY29udHJvbGxlci1mb3IgcmVsYXRp
b24gYXMgcGVyIHRoZSBBUklBIEFBTSBzcGVjLgotICAgIHJlbW92ZUF0a1JlbGF0aW9uQnlUeXBl
KHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fQ09OVFJPTExFUl9GT1IpOwotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBhcmlhQ29udHJvbHM7Ci0g
ICAgY29yZU9iamVjdC0+YXJpYUNvbnRyb2xzRWxlbWVudHMoYXJpYUNvbnRyb2xzKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGFjY2Vzc2liaWxpdHlPYmplY3QgOiBhcmlhQ29udHJvbHMpCi0gICAg
ICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFU
S19SRUxBVElPTl9DT05UUk9MTEVSX0ZPUiwgQVRLX09CSkVDVChhY2Nlc3NpYmlsaXR5T2JqZWN0
LT53cmFwcGVyKCkpKTsKLQotICAgIC8vIEVsZW1lbnRzIHJlZmVyZW5jZWQgYnkgYXJpYS1jb250
cm9scyBzaG91bGQgaGF2ZSB0aGUgY29udHJvbGxlZC1ieSByZWxhdGlvbiBhcyBwZXIgdGhlIEFS
SUEgQUFNIHNwZWMuCi0gICAgcmVtb3ZlQXRrUmVsYXRpb25CeVR5cGUocmVsYXRpb25TZXQsIEFU
S19SRUxBVElPTl9DT05UUk9MTEVEX0JZKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgY29udHJvbGxlcnM7Ci0gICAgY29yZU9iamVjdC0+YXJp
YUNvbnRyb2xzUmVmZXJlbmNpbmdFbGVtZW50cyhjb250cm9sbGVycyk7Ci0gICAgZm9yIChjb25z
dCBhdXRvJiBhY2Nlc3NpYmlsaXR5T2JqZWN0IDogY29udHJvbGxlcnMpCi0gICAgICAgIGF0a19y
ZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElP
Tl9DT05UUk9MTEVEX0JZLCBBVEtfT0JKRUNUKGFjY2Vzc2liaWxpdHlPYmplY3QtPndyYXBwZXIo
KSkpOwotCi0gICAgLy8gRWxlbWVudHMgd2l0aCBhcmlhLW93bnMgc2hvdWxkIGhhdmUgdGhlIG5v
ZGUtcGFyZW50LW9mIHJlbGF0aW9uIGFzIHBlciB0aGUgQVJJQSBBQU0gc3BlYy4KLSAgICByZW1v
dmVBdGtSZWxhdGlvbkJ5VHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX05PREVfUEFSRU5U
X09GKTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3IgYXJpYU93bnM7Ci0gICAgY29yZU9iamVjdC0+YXJpYU93bnNFbGVtZW50cyhhcmlhT3ducyk7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBhY2Nlc3NpYmlsaXR5T2JqZWN0IDogYXJpYU93bnMpCi0g
ICAgICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25TZXQs
IEFUS19SRUxBVElPTl9OT0RFX1BBUkVOVF9PRiwgQVRLX09CSkVDVChhY2Nlc3NpYmlsaXR5T2Jq
ZWN0LT53cmFwcGVyKCkpKTsKLQotICAgIC8vIEVsZW1lbnRzIHJlZmVyZW5jZWQgYnkgYXJpYS1v
d25zIHNob3VsZCBoYXZlIHRoZSBub2RlLWNoaWxkLW9mIHJlbGF0aW9uIGFzIHBlciB0aGUgQVJJ
QSBBQU0gc3BlYy4KLSAgICByZW1vdmVBdGtSZWxhdGlvbkJ5VHlwZShyZWxhdGlvblNldCwgQVRL
X1JFTEFUSU9OX05PREVfQ0hJTERfT0YpOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vz
c2liaWxpdHlDaGlsZHJlblZlY3RvciBvd25lcnM7Ci0gICAgY29yZU9iamVjdC0+YXJpYU93bnNS
ZWZlcmVuY2luZ0VsZW1lbnRzKG93bmVycyk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBhY2Nlc3Np
YmlsaXR5T2JqZWN0IDogb3duZXJzKQotICAgICAgICBhdGtfcmVsYXRpb25fc2V0X2FkZF9yZWxh
dGlvbl9ieV90eXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fTk9ERV9DSElMRF9PRiwgQVRL
X09CSkVDVChhY2Nlc3NpYmlsaXR5T2JqZWN0LT53cmFwcGVyKCkpKTsKLQotI2lmIEFUS19DSEVD
S19WRVJTSU9OKDIsIDI1LCAyKQotICAgIC8vIEVsZW1lbnRzIHdpdGggYXJpYS1kZXRhaWxzIHNo
b3VsZCBoYXZlIHRoZSBkZXRhaWxzIHJlbGF0aW9uIGFzIHBlciB0aGUgQVJJQSBBQU0gc3BlYy4K
LSAgICByZW1vdmVBdGtSZWxhdGlvbkJ5VHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0RF
VEFJTFMpOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZl
Y3RvciBhcmlhRGV0YWlsczsKLSAgICBjb3JlT2JqZWN0LT5hcmlhRGV0YWlsc0VsZW1lbnRzKGFy
aWFEZXRhaWxzKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFjY2Vzc2liaWxpdHlPYmplY3QgOiBh
cmlhRGV0YWlscykKLSAgICAgICAgYXRrX3JlbGF0aW9uX3NldF9hZGRfcmVsYXRpb25fYnlfdHlw
ZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0RFVEFJTFMsIEFUS19PQkpFQ1QoYWNjZXNzaWJp
bGl0eU9iamVjdC0+d3JhcHBlcigpKSk7Ci0KLSAgICAvLyBFbGVtZW50cyByZWZlcmVuY2VkIGJ5
IGFyaWEtZGV0YWlscyBzaG91bGQgaGF2ZSB0aGUgZGV0YWlscy1mb3IgcmVsYXRpb24gYXMgcGVy
IHRoZSBBUklBIEFBTSBzcGVjLgotICAgIHJlbW92ZUF0a1JlbGF0aW9uQnlUeXBlKHJlbGF0aW9u
U2V0LCBBVEtfUkVMQVRJT05fREVUQUlMU19GT1IpOwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBkZXRhaWxzOwotICAgIGNvcmVPYmplY3QtPmFy
aWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50cyhkZXRhaWxzKTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGFjY2Vzc2liaWxpdHlPYmplY3QgOiBkZXRhaWxzKQotICAgICAgICBhdGtfcmVsYXRpb25f
c2V0X2FkZF9yZWxhdGlvbl9ieV90eXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fREVUQUlM
U19GT1IsIEFUS19PQkpFQ1QoYWNjZXNzaWJpbGl0eU9iamVjdC0+d3JhcHBlcigpKSk7Ci0KLSAg
ICAvLyBFbGVtZW50cyB3aXRoIGFyaWEtZXJyb3JtZXNzYWdlIHNob3VsZCBoYXZlIHRoZSBlcnJv
ci1tZXNzYWdlIHJlbGF0aW9uIGFzIHBlciB0aGUgQVJJQSBBQU0gc3BlYy4KLSAgICByZW1vdmVB
dGtSZWxhdGlvbkJ5VHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFUSU9OX0VSUk9SX01FU1NBR0Up
OwotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBh
cmlhRXJyb3JNZXNzYWdlOwotICAgIGNvcmVPYmplY3QtPmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50
cyhhcmlhRXJyb3JNZXNzYWdlKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFjY2Vzc2liaWxpdHlP
YmplY3QgOiBhcmlhRXJyb3JNZXNzYWdlKQotICAgICAgICBhdGtfcmVsYXRpb25fc2V0X2FkZF9y
ZWxhdGlvbl9ieV90eXBlKHJlbGF0aW9uU2V0LCBBVEtfUkVMQVRJT05fRVJST1JfTUVTU0FHRSwg
QVRLX09CSkVDVChhY2Nlc3NpYmlsaXR5T2JqZWN0LT53cmFwcGVyKCkpKTsKLQotICAgIC8vIEVs
ZW1lbnRzIHJlZmVyZW5jZWQgYnkgYXJpYS1lcnJvcm1lc3NhZ2Ugc2hvdWxkIGhhdmUgdGhlIGVy
cm9yLWZvciByZWxhdGlvbiBhcyBwZXIgdGhlIEFSSUEgQUFNIHNwZWMuCi0gICAgcmVtb3ZlQXRr
UmVsYXRpb25CeVR5cGUocmVsYXRpb25TZXQsIEFUS19SRUxBVElPTl9FUlJPUl9GT1IpOwotICAg
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBlcnJvcnM7
Ci0gICAgY29yZU9iamVjdC0+YXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVudHMoZXJy
b3JzKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFjY2Vzc2liaWxpdHlPYmplY3QgOiBlcnJvcnMp
Ci0gICAgICAgIGF0a19yZWxhdGlvbl9zZXRfYWRkX3JlbGF0aW9uX2J5X3R5cGUocmVsYXRpb25T
ZXQsIEFUS19SRUxBVElPTl9FUlJPUl9GT1IsIEFUS19PQkpFQ1QoYWNjZXNzaWJpbGl0eU9iamVj
dC0+d3JhcHBlcigpKSk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGJvb2wgaXNSb290T2JqZWN0KEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAgLy8gVGhlIHJvb3QgYWNjZXNz
aWJsZSBvYmplY3QgaW4gV2ViQ29yZSBpcyBhbHdheXMgYW4gb2JqZWN0IHdpdGgKLSAgICAvLyB0
aGUgU2Nyb2xsZWRBcmVhIHJvbGUgd2l0aCBvbmUgY2hpbGQgd2l0aCB0aGUgV2ViQXJlYSByb2xl
LgotICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNTY3JvbGxWaWV3KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGZpcnN0Q2hp
bGQgPSBjb3JlT2JqZWN0LT5maXJzdENoaWxkKCk7Ci0gICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYg
Zmlyc3RDaGlsZC0+aXNXZWJBcmVhKCk7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFj
Y2Vzc2libGVHZXRQYXJlbnQoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgYXV0byogYWNjZXNz
aWJsZSA9IFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRB
Y2Nlc3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGUsIG51bGxwdHIpOwotCi0gICAgLy8gQ2hlY2sg
Zmlyc3QgaWYgdGhlIHBhcmVudCBoYXMgYmVlbiBhbHJlYWR5IHNldC4KLSAgICBBdGtPYmplY3Qq
IGFjY2Vzc2libGVQYXJlbnQgPSBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3Bh
cmVudF9jbGFzcyktPmdldF9wYXJlbnQob2JqZWN0KTsKLSAgICBpZiAoYWNjZXNzaWJsZVBhcmVu
dCkKLSAgICAgICAgcmV0dXJuIGFjY2Vzc2libGVQYXJlbnQ7Ci0KLSAgICAvLyBQYXJlbnQgbm90
IHNldCB5ZXQsIHNvIHRyeSB0byBmaW5kIGl0IGluIHRoZSBoaWVyYXJjaHkuCi0gICAgYXV0byog
Y29yZU9iamVjdCA9IGFjY2Vzc2libGUtPnByaXYtPm9iamVjdDsKLSAgICBpZiAoIWNvcmVPYmpl
Y3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8qIGNvcmVQYXJlbnQgPSBjb3Jl
T2JqZWN0LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKLSAgICBpZiAoIWNvcmVQYXJlbnQgJiYg
aXNSb290T2JqZWN0KGNvcmVPYmplY3QpKSB7Ci0gICAgICAgIC8vIFRoZSB0b3AgbGV2ZWwgb2Jq
ZWN0IGNsYWltcyB0byBub3QgaGF2ZSBhIHBhcmVudC4gVGhpcyBtYWtlcyBpdAotICAgICAgICAv
LyBpbXBvc3NpYmxlIGZvciBhc3Npc3RpdmUgdGVjaG5vbG9naWVzIHRvIGFzY2VuZCB0aGUgYWNj
ZXNzaWJsZQotICAgICAgICAvLyBoaWVyYXJjaHkgYWxsIHRoZSB3YXkgdG8gdGhlIGFwcGxpY2F0
aW9uLiAoQnVnIDMwNDg5KQotICAgICAgICBpZiAoIWNvcmVPYmplY3QtPmRvY3VtZW50KCkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29yZVBhcmVu
dCA/IEFUS19PQkpFQ1QoY29yZVBhcmVudC0+d3JhcHBlcigpKSA6IG51bGxwdHI7Ci19Ci0KLXN0
YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVHZXROQ2hpbGRyZW4oQXRrT2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgYXV0byogYWNjZXNzaWJsZSA9IFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCk7Ci0g
ICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGUsIDApOwot
Ci0gICAgaWYgKCFhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QtPmNoaWxkcmVuKCkuc2l6ZSgpOwot
fQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlUmVmQ2hpbGQoQXRrT2JqZWN0
KiBvYmplY3QsIGdpbnQgaW5kZXgpCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZSA9IFdFQktJVF9B
Q0NFU1NJQkxFKG9iamVjdCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZh
bGlkKGFjY2Vzc2libGUsIG51bGxwdHIpOwotCi0gICAgaWYgKCFhY2Nlc3NpYmxlLT5wcml2LT5v
YmplY3QgfHwgaW5kZXggPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGNvbnN0
IGF1dG8mIGNoaWxkcmVuID0gYWNjZXNzaWJsZS0+cHJpdi0+b2JqZWN0LT5jaGlsZHJlbigpOwot
ICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4KSA+PSBjaGlsZHJlbi5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYgY29yZUNoaWxkID0gY2hpbGRyZW5b
aW5kZXhdOwotICAgIGlmICghY29yZUNoaWxkKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8qIGNoaWxkID0gY29yZUNoaWxkLT53cmFwcGVyKCk7Ci0gICAgaWYgKCFjaGlsZCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdGtfb2JqZWN0X3NldF9wYXJlbnQoQVRL
X09CSkVDVChjaGlsZCksIG9iamVjdCk7Ci0gICAgcmV0dXJuIEFUS19PQkpFQ1QoZ19vYmplY3Rf
cmVmKGNoaWxkKSk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVHZXRJbmRleElu
UGFyZW50KEF0a09iamVjdCogb2JqZWN0KQotewotICAgIGF1dG8qIGFjY2Vzc2libGUgPSBXRUJL
SVRfQUNDRVNTSUJMRShvYmplY3QpOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlz
SW52YWxpZChhY2Nlc3NpYmxlLCAtMSk7Ci0KLSAgICBhdXRvKiBjb3JlT2JqZWN0ID0gYWNjZXNz
aWJsZS0+cHJpdi0+b2JqZWN0OwotICAgIGlmICghY29yZU9iamVjdCkKLSAgICAgICAgcmV0dXJu
IC0xOwotICAgIGF1dG8qIHBhcmVudCA9IGNvcmVPYmplY3QtPnBhcmVudE9iamVjdFVuaWdub3Jl
ZCgpOwotICAgIGlmICghcGFyZW50ICYmIGlzUm9vdE9iamVjdChjb3JlT2JqZWN0KSkgewotICAg
ICAgICBpZiAoIWNvcmVPYmplY3QtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gLTE7
Ci0KLSAgICAgICAgYXV0byogYXRrUGFyZW50ID0gcGFyZW50ID8gQVRLX09CSkVDVChwYXJlbnQt
PndyYXBwZXIoKSkgOiBudWxscHRyOwotICAgICAgICBpZiAoIWF0a1BhcmVudCkKLSAgICAgICAg
ICAgIHJldHVybiAtMTsKLQotICAgICAgICB1bnNpZ25lZCBjb3VudCA9IGF0a19vYmplY3RfZ2V0
X25fYWNjZXNzaWJsZV9jaGlsZHJlbihhdGtQYXJlbnQpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgR1JlZlB0cjxBdGtPYmplY3Q+
IGNoaWxkID0gYWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoYXRrUGFy
ZW50LCBpKSk7Ci0gICAgICAgICAgICBpZiAoY2hpbGQuZ2V0KCkgPT0gb2JqZWN0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFwYXJlbnQp
Ci0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHNpemVfdCBpbmRleCA9IHBhcmVudC0+Y2hpbGRy
ZW4oKS5maW5kKGNvcmVPYmplY3QpOwotICAgIHJldHVybiAoaW5kZXggPT0gbm90Rm91bmQpID8g
LTEgOiBpbmRleDsKLX0KLQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogd2Via2l0QWNjZXNzaWJs
ZUdldEF0dHJpYnV0ZXMoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgYXV0byogYWNjZXNzaWJs
ZSA9IFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nl
c3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGUsIG51bGxwdHIpOwotCi0gICAgQXRrQXR0cmlidXRl
U2V0KiBhdHRyaWJ1dGVTZXQgPSBudWxscHRyOwotI2lmIFBMQVRGT1JNKEdUSykKLSAgICBhdHRy
aWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJ0b29sa2l0Iiwg
IldlYktpdEd0ayIpOwotI2VsaWYgUExBVEZPUk0oV1BFKQotICAgIGF0dHJpYnV0ZVNldCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInRvb2xraXQiLCAiV1BFV2ViS2l0Iik7
Ci0jZW5kaWYKLQotICAgIGF1dG8qIGNvcmVPYmplY3QgPSBhY2Nlc3NpYmxlLT5wcml2LT5vYmpl
Y3Q7Ci0gICAgaWYgKCFjb3JlT2JqZWN0KQotICAgICAgICByZXR1cm4gYXR0cmlidXRlU2V0Owot
Ci0gICAgLy8gSGFjayBuZWVkZWQgZm9yIFdlYktpdDIgdGVzdHMgYmVjYXVzZSBvYnRhaW5pbmcg
YW4gZWxlbWVudCBieSBpdHMgSUQKLSAgICAvLyBjYW5ub3QgYmUgZG9uZSBmcm9tIHRoZSBVSVBy
b2Nlc3MuIEFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMgaGF2ZSBubyBuZWVkCi0gICAgLy8gZm9yIHRo
aXMgaW5mb3JtYXRpb24uCi0gICAgRWxlbWVudCogZWxlbWVudCA9IGNvcmVPYmplY3QtPmVsZW1l
bnQoKSA/IGNvcmVPYmplY3QtPmVsZW1lbnQoKSA6IGNvcmVPYmplY3QtPmFjdGlvbkVsZW1lbnQo
KTsKLSAgICBpZiAoZWxlbWVudCkgewotICAgICAgICBTdHJpbmcgdGFnTmFtZSA9IGVsZW1lbnQt
PnRhZ05hbWUoKTsKLSAgICAgICAgaWYgKCF0YWdOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
IGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInRhZyIs
IHRhZ05hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgU3RyaW5nIGlkID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKS5zdHJpbmcoKTsKLSAgICAg
ICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0
a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJodG1sLWlkIiwgaWQudXRmOCgpLmRhdGEoKSk7
Ci0gICAgfQotCi0gICAgaW50IGxldmVsID0gY29yZU9iamVjdC0+aXNIZWFkaW5nKCkgPyBjb3Jl
T2JqZWN0LT5oZWFkaW5nTGV2ZWwoKSA6IGNvcmVPYmplY3QtPmhpZXJhcmNoaWNhbExldmVsKCk7
Ci0gICAgaWYgKGxldmVsKSB7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IFN0cmluZzo6bnVtYmVy
KGxldmVsKTsKLSAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0
cmlidXRlU2V0LCAibGV2ZWwiLCB2YWx1ZS51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0eVJvbGU6Ok1hdGhFbGVt
ZW50KSB7Ci0gICAgICAgIGlmIChjb3JlT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdE9iamVjdChB
Y2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlwZTo6UHJlU3VwZXJzY3JpcHQpIHx8
IGNvcmVPYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVs
dGlzY3JpcHRPYmplY3RUeXBlOjpQcmVTdWJzY3JpcHQpKQotICAgICAgICAgICAgYXR0cmlidXRl
U2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAibXVsdGlzY3JpcHQtdHlw
ZSIsICJwcmUiKTsKLSAgICAgICAgZWxzZSBpZiAoY29yZU9iamVjdC0+aXNNYXRoTXVsdGlzY3Jp
cHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGU6OlBvc3RTdXBl
cnNjcmlwdCkgfHwgY29yZU9iamVjdC0+aXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJp
bGl0eU1hdGhNdWx0aXNjcmlwdE9iamVjdFR5cGU6OlBvc3RTdWJzY3JpcHQpKQotICAgICAgICAg
ICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAibXVs
dGlzY3JpcHQtdHlwZSIsICJwb3N0Iik7Ci0gICAgfQotCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmNvcmVPYmplY3QpICYmIGRvd25jYXN0PEFjY2Vzc2liaWxpdHlUYWJsZT4oKmNv
cmVPYmplY3QpLmlzRXhwb3NhYmxlKCkpIHsKLSAgICAgICAgYXV0byYgdGFibGUgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGU+KCpjb3JlT2JqZWN0KTsKLSAgICAgICAgaW50IHJvd0NvdW50
ID0gdGFibGUuYXhSb3dDb3VudCgpOwotICAgICAgICBpZiAocm93Q291bnQpCi0gICAgICAgICAg
ICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJyb3dj
b3VudCIsIFN0cmluZzo6bnVtYmVyKHJvd0NvdW50KS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAg
ICBpbnQgY29sdW1uQ291bnQgPSB0YWJsZS5heENvbHVtbkNvdW50KCk7Ci0gICAgICAgIGlmIChj
b2x1bW5Db3VudCkKLSAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRl
U2V0KGF0dHJpYnV0ZVNldCwgImNvbGNvdW50IiwgU3RyaW5nOjpudW1iZXIoY29sdW1uQ291bnQp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIH0gZWxzZSBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlUm93
PigqY29yZU9iamVjdCkpIHsKLSAgICAgICAgYXV0byYgcm93ID0gZG93bmNhc3Q8QWNjZXNzaWJp
bGl0eVRhYmxlUm93PigqY29yZU9iamVjdCk7Ci0gICAgICAgIGludCByb3dJbmRleCA9IHJvdy5h
eFJvd0luZGV4KCk7Ci0gICAgICAgIGlmIChyb3dJbmRleCAhPSAtMSkKLSAgICAgICAgICAgIGF0
dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInJvd2luZGV4
IiwgU3RyaW5nOjpudW1iZXIocm93SW5kZXgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0gZWxzZSBp
ZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2VsbD4oKmNvcmVPYmplY3QpKSB7Ci0gICAgICAgIGF1
dG8mIGNlbGwgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqY29yZU9iamVjdCk7
Ci0gICAgICAgIGludCByb3dJbmRleCA9IGNlbGwuYXhSb3dJbmRleCgpOwotICAgICAgICBpZiAo
cm93SW5kZXggIT0gLTEpCi0gICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJp
YnV0ZVNldChhdHRyaWJ1dGVTZXQsICJyb3dpbmRleCIsIFN0cmluZzo6bnVtYmVyKHJvd0luZGV4
KS51dGY4KCkuZGF0YSgpKTsKLQotICAgICAgICBpbnQgY29sdW1uSW5kZXggPSBjZWxsLmF4Q29s
dW1uSW5kZXgoKTsKLSAgICAgICAgaWYgKGNvbHVtbkluZGV4ICE9IC0xKQotICAgICAgICAgICAg
YXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiY29saW5k
ZXgiLCBTdHJpbmc6Om51bWJlcihjb2x1bW5JbmRleCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAg
ICAgaW50IHJvd1NwYW4gPSBjZWxsLmF4Um93U3BhbigpOwotICAgICAgICBpZiAocm93U3BhbiAh
PSAtMSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0
dHJpYnV0ZVNldCwgInJvd3NwYW4iLCBTdHJpbmc6Om51bWJlcihyb3dTcGFuKS51dGY4KCkuZGF0
YSgpKTsKLQotICAgICAgICBpbnQgY29sdW1uU3BhbiA9IGNlbGwuYXhDb2x1bW5TcGFuKCk7Ci0g
ICAgICAgIGlmIChjb2x1bW5TcGFuICE9IC0xKQotICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0g
YWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiY29sc3BhbiIsIFN0cmluZzo6bnVt
YmVyKGNvbHVtblNwYW4pLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLQotICAgIFN0cmluZyBwbGFj
ZWhvbGRlciA9IGNvcmVPYmplY3QtPnBsYWNlaG9sZGVyVmFsdWUoKTsKLSAgICBpZiAoIXBsYWNl
aG9sZGVyLmlzRW1wdHkoKSkKLSAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1
dGVTZXQoYXR0cmlidXRlU2V0LCAicGxhY2Vob2xkZXItdGV4dCIsIHBsYWNlaG9sZGVyLnV0Zjgo
KS5kYXRhKCkpOwotCi0gICAgaWYgKGNvcmVPYmplY3QtPnN1cHBvcnRzQXV0b0NvbXBsZXRlKCkp
Ci0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNl
dCwgImF1dG9jb21wbGV0ZSIsIGNvcmVPYmplY3QtPmF1dG9Db21wbGV0ZVZhbHVlKCkudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+c3VwcG9ydHNIYXNQb3B1cCgpKQotICAg
ICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJo
YXNwb3B1cCIsIGNvcmVPYmplY3QtPnBvcHVwVmFsdWUoKS51dGY4KCkuZGF0YSgpKTsKLQotICAg
IGlmIChjb3JlT2JqZWN0LT5zdXBwb3J0c0N1cnJlbnQoKSkKLSAgICAgICAgYXR0cmlidXRlU2V0
ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiY3VycmVudCIsIGNvcmVPYmpl
Y3QtPmN1cnJlbnRWYWx1ZSgpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgLy8gVGhlIENvcmUgQUFN
IHN0YXRlcyB0aGF0IGFuIGV4cGxpY2l0bHktc2V0IHZhbHVlIHNob3VsZCBiZSBleHBvc2VkLCBp
bmNsdWRpbmcgIm5vbmUiLgotICAgIGlmIChjb3JlT2JqZWN0LT5oYXNBdHRyaWJ1dGUoSFRNTE5h
bWVzOjphcmlhX3NvcnRBdHRyKSkgewotICAgICAgICBzd2l0Y2ggKGNvcmVPYmplY3QtPnNvcnRE
aXJlY3Rpb24oKSkgewotICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlTb3J0RGlyZWN0aW9uOjpJ
bnZhbGlkOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNv
cnREaXJlY3Rpb246OkFzY2VuZGluZzoKLSAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRv
QXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInNvcnQiLCAiYXNjZW5kaW5nIik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5U29ydERpcmVjdGlvbjo6
RGVzY2VuZGluZzoKLSAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRl
U2V0KGF0dHJpYnV0ZVNldCwgInNvcnQiLCAiZGVzY2VuZGluZyIpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246Ok90aGVyOgotICAg
ICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0
LCAic29ydCIsICJvdGhlciIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVNvcnREaXJlY3Rpb246Ok5vbmU6Ci0gICAgICAgICAgICBhdHRyaWJ1dGVTZXQg
PSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJzb3J0IiwgIm5vbmUiKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChjb3JlT2JqZWN0LT5zdXBwb3J0c1Bvc0luU2V0KCkp
Ci0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNl
dCwgInBvc2luc2V0IiwgU3RyaW5nOjpudW1iZXIoY29yZU9iamVjdC0+cG9zSW5TZXQoKSkudXRm
OCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+c3VwcG9ydHNTZXRTaXplKCkpCi0g
ICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwg
InNldHNpemUiLCBTdHJpbmc6Om51bWJlcihjb3JlT2JqZWN0LT5zZXRTaXplKCkpLnV0ZjgoKS5k
YXRhKCkpOwotCi0gICAgU3RyaW5nIGlzUmVhZE9ubHkgPSBjb3JlT2JqZWN0LT5yZWFkT25seVZh
bHVlKCk7Ci0gICAgaWYgKCFpc1JlYWRPbmx5LmlzRW1wdHkoKSkKLSAgICAgICAgYXR0cmlidXRl
U2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAicmVhZG9ubHkiLCBpc1Jl
YWRPbmx5LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgU3RyaW5nIHZhbHVlRGVzY3JpcHRpb24gPSBj
b3JlT2JqZWN0LT52YWx1ZURlc2NyaXB0aW9uKCk7Ci0gICAgaWYgKCF2YWx1ZURlc2NyaXB0aW9u
LmlzRW1wdHkoKSkKLSAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
YXR0cmlidXRlU2V0LCAidmFsdWV0ZXh0IiwgdmFsdWVEZXNjcmlwdGlvbi51dGY4KCkuZGF0YSgp
KTsKLQotICAgIC8vIEFjY29yZGluZyB0byB0aGUgVzNDIENvcmUgQWNjZXNzaWJpbGl0eSBBUEkg
TWFwcGluZ3MgMS4xLCBzZWN0aW9uIDUuNC4xIEdlbmVyYWwgUnVsZXM6Ci0gICAgLy8gIlVzZXIg
YWdlbnRzIG11c3QgZXhwb3NlIHRoZSBXQUktQVJJQSByb2xlIHN0cmluZyBpZiB0aGUgQVBJIHN1
cHBvcnRzIGEgbWVjaGFuaXNtIHRvIGRvIHNvLiIKLSAgICAvLyBJbiB0aGUgY2FzZSBvZiBBVEss
IHRoZSBtZWNoYW5pc20gdG8gZG8gc28gaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSBwYWlyICh4bWwt
cm9sZXM6InN0cmluZyIpLgotICAgIC8vIFdlIGNhbm5vdCB1c2UgdGhlIGNvbXB1dGVkUm9sZVN0
cmluZyBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2UgaXQgaXMgbm90IGxpbWl0ZWQgdG8gZWxlbWVu
dHMKLSAgICAvLyB3aXRoIEFSSUEgcm9sZXMsIGFuZCBpdCBtaWdodCBub3QgY29udGFpbiB0aGUg
YWN0dWFsIEFSSUEgcm9sZSB2YWx1ZSAoZS5nLiBEUHViIEFSSUEpLgotICAgIFN0cmluZyByb2xl
U3RyaW5nID0gY29yZU9iamVjdC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6cm9sZUF0dHIpOwot
ICAgIGlmICghcm9sZVN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFk
ZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInhtbC1yb2xlcyIsIHJvbGVTdHJpbmcu
dXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBTdHJpbmcgY29tcHV0ZWRSb2xlU3RyaW5nID0gY29yZU9i
amVjdC0+Y29tcHV0ZWRSb2xlU3RyaW5nKCk7Ci0gICAgaWYgKCFjb21wdXRlZFJvbGVTdHJpbmcu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0
KGF0dHJpYnV0ZVNldCwgImNvbXB1dGVkLXJvbGUiLCBjb21wdXRlZFJvbGVTdHJpbmcudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICAgICAgLy8gVGhlIEhUTUwgQUFNIG1hcHMgc2V2ZXJhbCBlbGVtZW50
cyB0byBBUklBIGxhbmRtYXJrIHJvbGVzLiBJbiBvcmRlciBmb3IgdGhlIHR5cGUgb2YgbGFuZG1h
cmsKLSAgICAgICAgLy8gdG8gYmUgb2J0YWluYWJsZSBpbiB0aGUgc2FtZSBmYXNoaW9uIGFzIGFu
IEFSSUEgbGFuZG1hcmssIGZhbGwgYmFjayBvbiB0aGUgY29tcHV0ZWRSb2xlU3RyaW5nLgotICAg
ICAgICAvLyBXZSBhbHNvIHdhbnQgdG8gZG8gdGhpcyBmb3IgdGhlIHN0eWxlLWZvcm1hdC1ncm91
cCBlbGVtZW50IHR5cGVzIHNvIHRoYXQgdGhlIHR5cGUgb2YgZm9ybWF0Ci0gICAgICAgIC8vIGdy
b3VwIGl0IGlzIGRvZXNuJ3QgZ2V0IGxvc3QgdG8gYSBnZW5lcmljIHBsYXRmb3JtIHJvbGUuCi0g
ICAgICAgIGlmIChjb3JlT2JqZWN0LT5hcmlhUm9sZUF0dHJpYnV0ZSgpID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpVbmtub3duCi0gICAgICAgICAgICAmJiAoY29yZU9iamVjdC0+aXNMYW5kbWFyaygp
IHx8IGNvcmVPYmplY3QtPmlzU3R5bGVGb3JtYXRHcm91cCgpKSkKLSAgICAgICAgICAgIGF0dHJp
YnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgInhtbC1yb2xlcyIs
IGNvbXB1dGVkUm9sZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
cm9sZURlc2NyaXB0aW9uID0gY29yZU9iamVjdC0+cm9sZURlc2NyaXB0aW9uKCk7Ci0gICAgaWYg
KCFyb2xlRGVzY3JpcHRpb24uaXNFbXB0eSgpKQotICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRU
b0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1dGVTZXQsICJyb2xlZGVzY3JpcHRpb24iLCByb2xlRGVz
Y3JpcHRpb24udXRmOCgpLmRhdGEoKSk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGV4cG9zZSB0aGUg
bGl2ZSByZWdpb24gYXR0cmlidXRlcyBldmVuIGlmIHRoZSBsaXZlIHJlZ2lvbiBpcyBjdXJyZW50
bHkgZGlzYWJsZWQvb2ZmLgotICAgIGlmIChhdXRvIGxpdmVDb250YWluZXIgPSBjb3JlT2JqZWN0
LT5saXZlUmVnaW9uQW5jZXN0b3IoZmFsc2UpKSB7Ci0gICAgICAgIFN0cmluZyBsaXZlU3RhdHVz
ID0gbGl2ZUNvbnRhaW5lci0+bGl2ZVJlZ2lvblN0YXR1cygpOwotICAgICAgICBTdHJpbmcgcmVs
ZXZhbnQgPSBsaXZlQ29udGFpbmVyLT5saXZlUmVnaW9uUmVsZXZhbnQoKTsKLSAgICAgICAgYm9v
bCBpc0F0b20gPSBsaXZlQ29udGFpbmVyLT5saXZlUmVnaW9uQXRvbWljKCk7Ci0gICAgICAgIFN0
cmluZyBsaXZlUm9sZSA9IHJvbGVTdHJpbmcuaXNFbXB0eSgpID8gY29tcHV0ZWRSb2xlU3RyaW5n
IDogcm9sZVN0cmluZzsKLQotICAgICAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIENvcmUgQUFNLCB3
ZSBuZWVkIHRvIGV4cG9zZSB0aGUgYWJvdmUgcHJvcGVydGllcyB3aXRoICJjb250YWluZXItIiBw
cmVmaXhlZAotICAgICAgICAvLyBvYmplY3QgYXR0cmlidXRlcyByZWdhcmRsZXNzIG9mIHdoZXRo
ZXIgdGhlIGNvbnRhaW5lciBpcyB0aGlzIG9iamVjdCwgb3IgYW4gYW5jZXN0b3Igb2YgaXQuCi0g
ICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwg
ImNvbnRhaW5lci1saXZlIiwgbGl2ZVN0YXR1cy51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgYXR0
cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiY29udGFpbmVy
LXJlbGV2YW50IiwgcmVsZXZhbnQudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGlmIChpc0F0b20p
Ci0gICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChhdHRyaWJ1
dGVTZXQsICJjb250YWluZXItYXRvbWljIiwgInRydWUiKTsKLSAgICAgICAgaWYgKCFsaXZlUm9s
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0
ZVNldChhdHRyaWJ1dGVTZXQsICJjb250YWluZXItbGl2ZS1yb2xlIiwgbGl2ZVJvbGUudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBDb3JlIEFBTSwgaWYgdGhp
cyBvYmplY3QgaXMgdGhlIGxpdmUgcmVnaW9uIChyYXRoZXIgdGhhbiBpdHMgZGVzY2VuZGFudCks
Ci0gICAgICAgIC8vIHdlIG11c3QgZXhwb3NlIHRoZSBhYm92ZSBwcm9wZXJ0aWVzIG9uIHRoZSBv
YmplY3Qgd2l0aG91dCBhICJjb250YWluZXItIiBwcmVmaXguCi0gICAgICAgIGlmIChsaXZlQ29u
dGFpbmVyID09IGNvcmVPYmplY3QpIHsKLSAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRv
QXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgImxpdmUiLCBsaXZlU3RhdHVzLnV0ZjgoKS5k
YXRhKCkpOwotICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQo
YXR0cmlidXRlU2V0LCAicmVsZXZhbnQiLCByZWxldmFudC51dGY4KCkuZGF0YSgpKTsKLSAgICAg
ICAgICAgIGlmIChpc0F0b20pCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9B
dGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiYXRvbWljIiwgInRydWUiKTsKLSAgICAgICAg
fSBlbHNlIGlmICghaXNBdG9tICYmIGNvcmVPYmplY3QtPmxpdmVSZWdpb25BdG9taWMoKSkKLSAg
ICAgICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNl
dCwgImF0b21pYyIsICJ0cnVlIik7Ci0gICAgfQotCi0gICAgLy8gVGhlIENvcmUgQUFNIHN0YXRl
cyB0aGUgYXV0aG9yLXByb3ZpZGVkIHZhbHVlIHNob3VsZCBiZSBleHBvc2VkIGFzLWlzLgotICAg
IFN0cmluZyBkcm9wRWZmZWN0ID0gY29yZU9iamVjdC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
YXJpYV9kcm9wZWZmZWN0QXR0cik7Ci0gICAgaWYgKCFkcm9wRWZmZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgYXR0cmlidXRlU2V0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAi
ZHJvcGVmZmVjdCIsIGRyb3BFZmZlY3QudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpZiAoY29yZU9i
amVjdC0+aXNHcmFiYmVkKCkpCi0gICAgICAgIGF0dHJpYnV0ZVNldCA9IGFkZFRvQXRrQXR0cmli
dXRlU2V0KGF0dHJpYnV0ZVNldCwgImdyYWJiZWQiLCAidHJ1ZSIpOwotICAgIGVsc2UgaWYgKGNv
cmVPYmplY3QtPnN1cHBvcnRzRHJhZ2dpbmcoKSkKLSAgICAgICAgYXR0cmlidXRlU2V0ID0gYWRk
VG9BdGtBdHRyaWJ1dGVTZXQoYXR0cmlidXRlU2V0LCAiZ3JhYmJlZCIsICJmYWxzZSIpOwotCi0g
ICAgLy8gVGhlIENvcmUgQUFNIHN0YXRlcyB0aGUgYXV0aG9yLXByb3ZpZGVkIHZhbHVlIHNob3Vs
ZCBiZSBleHBvc2VkIGFzLWlzLgotICAgIGNvbnN0IEF0b21TdHJpbmcmIGtleVNob3J0Y3V0cyA9
IGNvcmVPYmplY3QtPmtleVNob3J0Y3V0c1ZhbHVlKCk7Ci0gICAgaWYgKCFrZXlTaG9ydGN1dHMu
aXNFbXB0eSgpKQotICAgICAgICBhdHRyaWJ1dGVTZXQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChh
dHRyaWJ1dGVTZXQsICJrZXlzaG9ydGN1dHMiLCBrZXlTaG9ydGN1dHMuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlU2V0OwotfQotCi1zdGF0aWMgQXRrUm9s
ZSBhdGtSb2xlKEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAgc3dpdGNo
IChjb3JlT2JqZWN0LT5yb2xlVmFsdWUoKSkgewotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OkFwcGxpY2F0aW9uQWxlcnQ6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9OT1RJRklDQVRJT047
Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25BbGVydERpYWxvZzoKLSAg
ICAgICAgcmV0dXJuIEFUS19ST0xFX0FMRVJUOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6
OkFwcGxpY2F0aW9uRGlhbG9nOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfRElBTE9HOwotICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uU3RhdHVzOgotICAgICAgICByZXR1
cm4gQVRLX1JPTEVfU1RBVFVTQkFSOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlVua25v
d246Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9VTktOT1dOOwotICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OkF1ZGlvOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfQVVESU87Ci0gICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VmlkZW86Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9WSURF
TzsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpCdXR0b246Ci0gICAgICAgIHJldHVybiBB
VEtfUk9MRV9QVVNIX0JVVFRPTjsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTd2l0Y2g6
Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VG9nZ2xlQnV0dG9uOgotICAgICAgICByZXR1
cm4gQVRLX1JPTEVfVE9HR0xFX0JVVFRPTjsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpS
YWRpb0J1dHRvbjoKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1JBRElPX0JVVFRPTjsKLSAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDaGVja0JveDoKLSAgICAgICAgcmV0dXJuIEFUS19ST0xF
X0NIRUNLX0JPWDsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTbGlkZXI6Ci0gICAgICAg
IHJldHVybiBBVEtfUk9MRV9TTElERVI7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFi
R3JvdXA6Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFiTGlzdDoKLSAgICAgICAgcmV0
dXJuIEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6
VGV4dEZpZWxkOgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRleHRBcmVhOgotICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNlYXJjaEZpZWxkOgotICAgICAgICByZXR1cm4gQVRLX1JP
TEVfRU5UUlk7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3RhdGljVGV4dDoKLSAgICAg
ICAgcmV0dXJuIEFUS19ST0xFX1NUQVRJQzsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpP
dXRsaW5lOgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRyZWU6Ci0gICAgICAgIHJldHVy
biBBVEtfUk9MRV9UUkVFOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRyZWVJdGVtOgot
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfVFJFRV9JVEVNOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0
eVJvbGU6Ok1lbnVCYXI6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9NRU5VX0JBUjsKLSAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51TGlzdFBvcHVwOgotICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6Ok1lbnU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9NRU5VOwotICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVMaXN0T3B0aW9uOgotICAgIGNhc2UgQWNjZXNzaWJpbGl0
eVJvbGU6Ok1lbnVJdGVtOgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Ok1lbnVCdXR0b246
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9NRU5VX0lURU07Ci0gICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6TWVudUl0ZW1DaGVja2JveDoKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NIRUNL
X01FTlVfSVRFTTsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpNZW51SXRlbVJhZGlvOgot
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfUkFESU9fTUVOVV9JVEVNOwotICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OkNvbHVtbjoKLSAgICAgICAgLy8gcmV0dXJuIEFUS19ST0xFX1RBQkxFX0NP
TFVNTl9IRUFERVI7IC8vIElzIHRoaXMgcmlnaHQ/Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9V
TktOT1dOOyAvLyBNYXRjaGVzIE1vemlsbGEKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpS
b3c6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9UQUJMRV9ST1c7Ci0gICAgY2FzZSBBY2Nlc3Np
YmlsaXR5Um9sZTo6VG9vbGJhcjoKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1RPT0xfQkFSOwot
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Ok1ldGVyOgotICAgICAgICByZXR1cm4gQVRLX1JP
TEVfTEVWRUxfQkFSOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkJ1c3lJbmRpY2F0b3I6
Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJvZ3Jlc3NJbmRpY2F0b3I6Ci0gICAgICAg
IHJldHVybiBBVEtfUk9MRV9QUk9HUkVTU19CQVI7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9s
ZTo6V2luZG93OgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfV0lORE9XOwotICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OlBvcFVwQnV0dG9uOgotICAgICAgICByZXR1cm4gY29yZU9iamVjdC0+
aGFzUG9wdXAoKSA/IEFUS19ST0xFX1BVU0hfQlVUVE9OIDogQVRLX1JPTEVfQ09NQk9fQk9YOwot
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkNvbWJvQm94OgotICAgICAgICByZXR1cm4gQVRL
X1JPTEVfQ09NQk9fQk9YOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNwbGl0R3JvdXA6
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9TUExJVF9QQU5FOwotICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OlNwbGl0dGVyOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0VQQVJBVE9SOwot
I2lmIFBMQVRGT1JNKEdUSykKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpDb2xvcldlbGw6
Ci0gICAgICAgIC8vIEFUS19ST0xFX0NPTE9SX0NIT09TRVIgaXMgZGVmaW5lZCBhcyBhIGRpYWxv
ZyAoaS5lLiBpdCdzIHdoYXQgYXBwZWFycyB3aGVuIHlvdSBwdXNoIHRoZSBidXR0b24pLgotICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfUFVTSF9CVVRUT047Ci0jZW5kaWYKLSAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpMaXN0OgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfTElTVDsKLSAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTY3JvbGxCYXI6Ci0gICAgICAgIHJldHVybiBBVEtfUk9M
RV9TQ1JPTExfQkFSOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNjcm9sbEFyZWE6Ci0g
ICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFiUGFuZWw6Ci0gICAgICAgIHJldHVybiBBVEtf
Uk9MRV9TQ1JPTExfUEFORTsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpHcmlkOgotICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRhYmxlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVf
VEFCTEU7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VHJlZUdyaWQ6Ci0gICAgICAgIHJl
dHVybiBBVEtfUk9MRV9UUkVFX1RBQkxFOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkFw
cGxpY2F0aW9uOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfQVBQTElDQVRJT047Ci0gICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25Hcm91cDoKLSAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpGZWVkOgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkZpZ3VyZToKLSAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpHcmFwaGljc09iamVjdDoKLSAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpHcm91cDoKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSYWRpb0dy
b3VwOgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNWR1Jvb3Q6Ci0gICAgICAgIHJldHVy
biBBVEtfUk9MRV9QQU5FTDsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpSb3dIZWFkZXI6
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9ST1dfSEVBREVSOwotICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OkNvbHVtbkhlYWRlcjoKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NPTFVNTl9I
RUFERVI7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2FwdGlvbjoKLSAgICAgICAgcmV0
dXJuIEFUS19ST0xFX0NBUFRJT047Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbDoK
LSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpHcmlkQ2VsbDoKLSAgICAgICAgcmV0dXJuIGNv
cmVPYmplY3QtPmluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgPyBBVEtfUk9MRV9TRUNUSU9O
IDogQVRLX1JPTEVfVEFCTEVfQ0VMTDsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaW5r
OgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OldlYkNvcmVMaW5rOgotICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eVJvbGU6OkltYWdlTWFwTGluazoKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0xJ
Tks7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6SW1hZ2VNYXA6Ci0gICAgICAgIHJldHVy
biBBVEtfUk9MRV9JTUFHRV9NQVA7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JhcGhp
Y3NTeW1ib2w6Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6SW1hZ2U6Ci0gICAgICAgIHJl
dHVybiBBVEtfUk9MRV9JTUFHRTsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0TWFy
a2VyOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEVYVDsKLSAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpEb2N1bWVudEFydGljbGU6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9BUlRJQ0xF
OwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkRvY3VtZW50OgotICAgIGNhc2UgQWNjZXNz
aWJpbGl0eVJvbGU6OkdyYXBoaWNzRG9jdW1lbnQ6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9E
T0NVTUVOVF9GUkFNRTsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpEb2N1bWVudE5vdGU6
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9DT01NRU5UOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0
eVJvbGU6OkhlYWRpbmc6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9IRUFESU5HOwotICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxpc3RCb3g6Ci0gICAgICAgIC8vIGh0dHBzOi8vcmF3Z2l0
LmNvbS93M2MvYXJpYS9tYXN0ZXIvY29yZS1hYW0vY29yZS1hYW0uaHRtbCNyb2xlLW1hcC1saXN0
Ym94Ci0gICAgICAgIHJldHVybiBjb3JlT2JqZWN0LT5pc0Rlc2NlbmRhbnRPZlJvbGUoQWNjZXNz
aWJpbGl0eVJvbGU6OkNvbWJvQm94KSA/IEFUS19ST0xFX01FTlUgOiBBVEtfUk9MRV9MSVNUX0JP
WDsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMaXN0SXRlbToKLSAgICAgICAgcmV0dXJu
IGNvcmVPYmplY3QtPmluaGVyaXRzUHJlc2VudGF0aW9uYWxSb2xlKCkgPyBBVEtfUk9MRV9TRUNU
SU9OIDogQVRLX1JPTEVfTElTVF9JVEVNOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxp
c3RCb3hPcHRpb246Ci0gICAgICAgIHJldHVybiBjb3JlT2JqZWN0LT5pc0Rlc2NlbmRhbnRPZlJv
bGUoQWNjZXNzaWJpbGl0eVJvbGU6OkNvbWJvQm94KSA/IEFUS19ST0xFX01FTlVfSVRFTSA6IEFU
S19ST0xFX0xJU1RfSVRFTTsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpQYXJhZ3JhcGg6
Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9QQVJBR1JBUEg7Ci0gICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6TGFiZWw6Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGVnZW5kOgotICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfTEFCRUw7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6
QmxvY2txdW90ZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0JMT0NLX1FVT1RFOwotI2lmIEFU
S19DSEVDS19WRVJTSU9OKDIsIDI1LCAyKQotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkZv
b3Rub3RlOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfRk9PVE5PVEU7Ci0jZW5kaWYKLSAgICBj
YXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpBcHBsaWNhdGlvblRleHRHcm91cDoKLSAgICBjYXNlIEFj
Y2Vzc2liaWxpdHlSb2xlOjpEaXY6Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6UHJlOgot
ICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlNWR1RleHQ6Ci0gICAgY2FzZSBBY2Nlc3NpYmls
aXR5Um9sZTo6VGV4dEdyb3VwOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfU0VDVElPTjsKLSAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpGb290ZXI6Ci0gICAgICAgIHJldHVybiBBVEtfUk9M
RV9GT09URVI7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6Rm9ybToKLSAgICAgICAgaWYg
KGNvcmVPYmplY3QtPmFyaWFSb2xlQXR0cmlidXRlKCkgIT0gQWNjZXNzaWJpbGl0eVJvbGU6OlVu
a25vd24pCi0gICAgICAgICAgICByZXR1cm4gQVRLX1JPTEVfTEFORE1BUks7Ci0gICAgICAgIHJl
dHVybiBBVEtfUk9MRV9GT1JNOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkNhbnZhczoK
LSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NBTlZBUzsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlS
b2xlOjpIb3Jpem9udGFsUnVsZToKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NFUEFSQVRPUjsK
LSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTcGluQnV0dG9uOgotICAgICAgICByZXR1cm4g
QVRLX1JPTEVfU1BJTl9CVVRUT047Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFiOgot
ICAgICAgICByZXR1cm4gQVRLX1JPTEVfUEFHRV9UQUI7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5
Um9sZTo6VXNlckludGVyZmFjZVRvb2x0aXA6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9UT09M
X1RJUDsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpXZWJBcmVhOgotICAgICAgICByZXR1
cm4gQVRLX1JPTEVfRE9DVU1FTlRfV0VCOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Oldl
YkFwcGxpY2F0aW9uOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfRU1CRURERUQ7Ci0gICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25Mb2c6Ci0gICAgICAgIHJldHVybiBBVEtf
Uk9MRV9MT0c7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6QXBwbGljYXRpb25NYXJxdWVl
OgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUFSUVVFRTsKLSAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpBcHBsaWNhdGlvblRpbWVyOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfVElNRVI7
Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVmaW5pdGlvbjoKLSAgICAgICAgcmV0dXJu
IEFUS19ST0xFX0RFRklOSVRJT047Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RG9jdW1l
bnRNYXRoOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfTUFUSDsKLSAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpNYXRoRWxlbWVudDoKLSAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzTWF0aFJv
dygpKQotICAgICAgICAgICAgcmV0dXJuIEFUS19ST0xFX1BBTkVMOwotICAgICAgICBpZiAoY29y
ZU9iamVjdC0+aXNNYXRoVGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBBVEtfUk9MRV9UQUJM
RTsKLSAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzTWF0aFRhYmxlUm93KCkpCi0gICAgICAgICAg
ICByZXR1cm4gQVRLX1JPTEVfVEFCTEVfUk9XOwotICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNN
YXRoVGFibGVDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gQVRLX1JPTEVfVEFCTEVfQ0VMTDsK
LSAgICAgICAgaWYgKGNvcmVPYmplY3QtPmlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgfHwg
Y29yZU9iamVjdC0+aXNNYXRoTXVsdGlzY3JpcHQoKSkKLSAgICAgICAgICAgIHJldHVybiBBVEtf
Uk9MRV9TRUNUSU9OOwotICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNNYXRoRnJhY3Rpb24oKSkK
LSAgICAgICAgICAgIHJldHVybiBBVEtfUk9MRV9NQVRIX0ZSQUNUSU9OOwotICAgICAgICBpZiAo
Y29yZU9iamVjdC0+aXNNYXRoU3F1YXJlUm9vdCgpIHx8IGNvcmVPYmplY3QtPmlzTWF0aFJvb3Qo
KSkKLSAgICAgICAgICAgIHJldHVybiBBVEtfUk9MRV9NQVRIX1JPT1Q7Ci0gICAgICAgIGlmIChj
b3JlT2JqZWN0LT5pc01hdGhTY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmpl
Y3RUeXBlOjpTdWJzY3JpcHQpCi0gICAgICAgICAgICB8fCBjb3JlT2JqZWN0LT5pc01hdGhNdWx0
aXNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlwZTo6UHJl
U3Vic2NyaXB0KSB8fCBjb3JlT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdE9iamVjdChBY2Nlc3Np
YmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlwZTo6UG9zdFN1YnNjcmlwdCkpCi0gICAgICAg
ICAgICByZXR1cm4gQVRLX1JPTEVfU1VCU0NSSVBUOwotICAgICAgICBpZiAoY29yZU9iamVjdC0+
aXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoU2NyaXB0T2JqZWN0VHlwZTo6U3Vw
ZXJzY3JpcHQpCi0gICAgICAgICAgICB8fCBjb3JlT2JqZWN0LT5pc01hdGhNdWx0aXNjcmlwdE9i
amVjdChBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlwZTo6UHJlU3VwZXJzY3Jp
cHQpIHx8IGNvcmVPYmplY3QtPmlzTWF0aE11bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlN
YXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlOjpQb3N0U3VwZXJzY3JpcHQpKQotICAgICAgICAgICAg
cmV0dXJuIEFUS19ST0xFX1NVUEVSU0NSSVBUOwotICAgICAgICBpZiAoY29yZU9iamVjdC0+aXNN
YXRoVG9rZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBBVEtfUk9MRV9TVEFUSUM7Ci0gICAgICAg
IHJldHVybiBBVEtfUk9MRV9VTktOT1dOOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okxh
bmRtYXJrQmFubmVyOgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrQ29tcGxl
bWVudGFyeToKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpMYW5kbWFya0NvbnRlbnRJbmZv
OgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrRG9jUmVnaW9uOgotICAgIGNh
c2UgQWNjZXNzaWJpbGl0eVJvbGU6OkxhbmRtYXJrTWFpbjoKLSAgICBjYXNlIEFjY2Vzc2liaWxp
dHlSb2xlOjpMYW5kbWFya05hdmlnYXRpb246Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6
TGFuZG1hcmtSZWdpb246Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGFuZG1hcmtTZWFy
Y2g6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9MQU5ETUFSSzsKLSAgICBjYXNlIEFjY2Vzc2li
aWxpdHlSb2xlOjpEZXNjcmlwdGlvbkxpc3Q6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9ERVND
UklQVElPTl9MSVNUOwotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlRlcm06Ci0gICAgY2Fz
ZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVzY3JpcHRpb25MaXN0VGVybToKLSAgICAgICAgcmV0dXJu
IEFUS19ST0xFX0RFU0NSSVBUSU9OX1RFUk07Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6
RGVzY3JpcHRpb25MaXN0RGV0YWlsOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfREVTQ1JJUFRJ
T05fVkFMVUU7Ci0gICAgY2FzZSBBY2Nlc3NpYmlsaXR5Um9sZTo6RGVsZXRpb246Ci0jaWYgQVRL
X0NIRUNLX1ZFUlNJT04oMiwgMzMsIDMpCi0gICAgICAgIHJldHVybiBBVEtfUk9MRV9DT05URU5U
X0RFTEVUSU9OOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NUQVRJQzsKLSNlbmRp
ZgotICAgIGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6Okluc2VydGlvbjoKLSNpZiBBVEtfQ0hFQ0tf
VkVSU0lPTigyLCAzMywgMykKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX0NPTlRFTlRfSU5TRVJU
SU9OOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NUQVRJQzsKLSNlbmRpZgotICAg
IGNhc2UgQWNjZXNzaWJpbGl0eVJvbGU6OlN1YnNjcmlwdDoKLSAgICAgICAgcmV0dXJuIEFUS19S
T0xFX1NVQlNDUklQVDsKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTdXBlcnNjcmlwdDoK
LSAgICAgICAgcmV0dXJuIEFUS19ST0xFX1NVUEVSU0NSSVBUOwotICAgIGNhc2UgQWNjZXNzaWJp
bGl0eVJvbGU6OklubGluZToKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUZXh0UGF0
aDoKLSAgICBjYXNlIEFjY2Vzc2liaWxpdHlSb2xlOjpTVkdUU3BhbjoKLSAgICBjYXNlIEFjY2Vz
c2liaWxpdHlSb2xlOjpUaW1lOgotICAgICAgICByZXR1cm4gQVRLX1JPTEVfU1RBVElDOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBBVEtfUk9MRV9VTktOT1dOOwotICAgIH0KLX0KLQot
c3RhdGljIEF0a1JvbGUgd2Via2l0QWNjZXNzaWJsZUdldFJvbGUoQXRrT2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgLy8gQVRLX1JPTEVfVU5LTk9XTiBzaG91bGQgb25seSBiZSBhcHBsaWVkIGluIGNh
c2VzIHdoZXJlIHRoZXJlIGlzIGEgdmFsaWQKLSAgICAvLyBXZWJDb3JlIGFjY2Vzc2libGUgb2Jq
ZWN0IGZvciB3aGljaCB0aGUgcGxhdGZvcm0gcm9sZSBtYXBwaW5nIGlzIHVua25vd24uCi0gICAg
YXV0byogYWNjZXNzaWJsZSA9IFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCk7Ci0gICAgcmV0dXJu
VmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGUsIEFUS19ST0xFX0lOVkFM
SUQpOwotCi0gICAgaWYgKCFhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QpCi0gICAgICAgIHJldHVy
biBBVEtfUk9MRV9JTlZBTElEOwotICAgIAotICAgIC8vIE5vdGU6IFdoeSBkb2Vzbid0IFdlYkNv
cmUgaGF2ZSBhIHBhc3N3b3JkIGZpZWxkIGZvciB0aGlzCi0gICAgaWYgKGFjY2Vzc2libGUtPnBy
aXYtPm9iamVjdC0+aXNQYXNzd29yZEZpZWxkKCkpCi0gICAgICAgIHJldHVybiBBVEtfUk9MRV9Q
QVNTV09SRF9URVhUOwotCi0gICAgcmV0dXJuIGF0a1JvbGUoYWNjZXNzaWJsZS0+cHJpdi0+b2Jq
ZWN0KTsKLX0KLQotc3RhdGljIGJvb2wgaXNUZXh0V2l0aENhcmV0KEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QpCi17Ci0gICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5p
c0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAo
IWRvY3VtZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpLmNhcmV0QnJvd3NpbmdFbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIENoZWNrIHRleHQgb2JqZWN0cyBhbmQgcGFy
YWdyYXBocyBvbmx5LgotICAgIGF1dG8qIGF4T2JqZWN0ID0gY29yZU9iamVjdC0+d3JhcHBlcigp
OwotICAgIEF0a1JvbGUgcm9sZSA9IGF4T2JqZWN0ID8gYXRrX29iamVjdF9nZXRfcm9sZShBVEtf
T0JKRUNUKGF4T2JqZWN0KSkgOiBBVEtfUk9MRV9JTlZBTElEOwotICAgIGlmIChyb2xlICE9IEFU
S19ST0xFX1RFWFQgJiYgcm9sZSAhPSBBVEtfUk9MRV9QQVJBR1JBUEgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIC8vIEZpbmFsbHksIGNoZWNrIHdoZXRoZXIgdGhlIGNhcmV0IGlzIHNl
dCBpbiB0aGUgY3VycmVudCBvYmplY3QuCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24g
PSBjb3JlT2JqZWN0LT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIXNlbGVjdGlvbi5pc0NhcmV0KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBzZWxlY3Rpb25CZWxvbmdzVG9P
YmplY3QoY29yZU9iamVjdCwgc2VsZWN0aW9uKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0QXRrU3Rh
dGVTZXRGcm9tQ29yZU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0LCBBdGtT
dGF0ZVNldCogc3RhdGVTZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0g
Y29yZU9iamVjdC0+cGFyZW50T2JqZWN0KCk7Ci0gICAgYm9vbCBpc0xpc3RCb3hPcHRpb24gPSBw
YXJlbnQgJiYgcGFyZW50LT5pc0xpc3RCb3goKTsKLQotICAgIC8vIFBsZWFzZSBrZWVwIHRoZSBz
dGF0ZSBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlcgotICAgIGlmICgoaXNMaXN0Qm94T3B0aW9u
ICYmIGNvcmVPYmplY3QtPmlzU2VsZWN0ZWRPcHRpb25BY3RpdmUoKSkKLSAgICAgICAgfHwgY29y
ZU9iamVjdC0+Y3VycmVudFN0YXRlKCkgIT0gQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFs
c2UpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVf
QUNUSVZFKTsKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc0J1c3koKSkKLSAgICAgICAgYXRrX3N0
YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9CVVNZKTsKLQotICAgIGlmIChj
b3JlT2JqZWN0LT5zdXBwb3J0c0NoZWNrZWQoKSAmJiBjb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0
dHJpYnV0ZSgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRL
X1NUQVRFX0NIRUNLQUJMRSk7Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+aXNDaGVja2VkKCkpCi0g
ICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfQ0hFQ0tF
RCk7Ci0KLSAgICBpZiAoKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSB8fCBjb3JlT2JqZWN0
LT5pc05vbk5hdGl2ZVRleHRDb250cm9sKCkpICYmIGNvcmVPYmplY3QtPmNhblNldFZhbHVlQXR0
cmlidXRlKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtf
U1RBVEVfRURJVEFCTEUpOwotCi0gICAgLy8gRklYTUU6IFB1dCBib3RoIEVOQUJMRUQgYW5kIFNF
TlNJVElWRSB0b2dldGhlciBoZXJlIGZvciBub3cKLSAgICBpZiAoY29yZU9iamVjdC0+aXNFbmFi
bGVkKCkpIHsKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19T
VEFURV9FTkFCTEVEKTsKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQs
IEFUS19TVEFURV9TRU5TSVRJVkUpOwotICAgIH0KLQotICAgIGlmIChjb3JlT2JqZWN0LT5jYW5T
ZXRFeHBhbmRlZEF0dHJpYnV0ZSgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShz
dGF0ZVNldCwgQVRLX1NUQVRFX0VYUEFOREFCTEUpOwotCi0gICAgaWYgKGNvcmVPYmplY3QtPmlz
RXhwYW5kZWQoKSkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFU
S19TVEFURV9FWFBBTkRFRCk7Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRy
aWJ1dGUoKSkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19T
VEFURV9GT0NVU0FCTEUpOwotCi0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBDb3JlIEFBTSwgaWYg
dGhlIGVsZW1lbnQgd2hpY2ggaXMgZm9jdXNlZCBoYXMgYSB2YWxpZCBhcmlhLWFjdGl2ZWRlc2Nl
bmRhbnQsCi0gICAgLy8gd2Ugc2hvdWxkIG5vdCBleHBvc2UgdGhlIGZvY3VzZWQgc3RhdGUgb24g
dGhlIGVsZW1lbnQgd2hpY2ggaXMgYWN0dWFsbHkgZm9jdXNlZCwgYnV0IGluc3RlYWQKLSAgICAv
LyBvbiBpdHMgYWN0aXZlIGRlc2NlbmRhbnQuCi0gICAgaWYgKChjb3JlT2JqZWN0LT5pc0ZvY3Vz
ZWQoKSAmJiAhY29yZU9iamVjdC0+YWN0aXZlRGVzY2VuZGFudCgpKSB8fCBpc1RleHRXaXRoQ2Fy
ZXQoY29yZU9iamVjdCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0
LCBBVEtfU1RBVEVfRk9DVVNFRCk7Ci0gICAgZWxzZSBpZiAoY29yZU9iamVjdC0+aXNBY3RpdmVE
ZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyKCkpIHsKLSAgICAgICAgYXRrX3N0YXRlX3NldF9h
ZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NVU0FCTEUpOwotICAgICAgICBhdGtfc3Rh
dGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX0ZPQ1VTRUQpOwotICAgIH0KLQot
ICAgIGlmIChjb3JlT2JqZWN0LT5vcmllbnRhdGlvbigpID09IEFjY2Vzc2liaWxpdHlPcmllbnRh
dGlvbjo6SG9yaXpvbnRhbCkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9IT1JJWk9OVEFMKTsKLSAgICBlbHNlIGlmIChjb3JlT2JqZWN0LT5vcmll
bnRhdGlvbigpID09IEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbjo6VmVydGljYWwpCi0gICAgICAg
IGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfVkVSVElDQUwpOwot
Ci0gICAgaWYgKGNvcmVPYmplY3QtPmhhc1BvcHVwKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRf
YWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfSEFTX1BPUFVQKTsKLQotICAgIGlmIChjb3Jl
T2JqZWN0LT5pc0luZGV0ZXJtaW5hdGUoKSkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3Rh
dGUoc3RhdGVTZXQsIEFUS19TVEFURV9JTkRFVEVSTUlOQVRFKTsKLSAgICBlbHNlIGlmIChjb3Jl
T2JqZWN0LT5pc0NoZWNrYm94T3JSYWRpbygpIHx8IGNvcmVPYmplY3QtPmlzTWVudUl0ZW0oKSB8
fCBjb3JlT2JqZWN0LT5pc1RvZ2dsZUJ1dHRvbigpKSB7Ci0gICAgICAgIGlmIChjb3JlT2JqZWN0
LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6TWl4
ZWQpCi0gICAgICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX0lOREVURVJNSU5BVEUpOwotICAgIH0KLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc01vZGFs
Tm9kZSgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NU
QVRFX01PREFMKTsKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pbnZhbGlkU3RhdHVzKCkgIT0gImZh
bHNlIikKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFU
RV9JTlZBTElEX0VOVFJZKTsKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc011bHRpU2VsZWN0YWJs
ZSgpKQotICAgICAgICBhdGtfc3RhdGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRF
X01VTFRJU0VMRUNUQUJMRSk7Ci0KLSAgICAvLyBUT0RPOiBBVEtfU1RBVEVfT1BBUVVFCi0KLSAg
ICBpZiAoY29yZU9iamVjdC0+aXNQcmVzc2VkKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRk
X3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfUFJFU1NFRCk7Ci0KLSAgICBpZiAoIWNvcmVPYmpl
Y3QtPmNhblNldFZhbHVlQXR0cmlidXRlKCkgJiYgKGNvcmVPYmplY3QtPnN1cHBvcnRzUmVhZE9u
bHkoKSkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RB
VEVfUkVBRF9PTkxZKTsKLQotICAgIGlmIChjb3JlT2JqZWN0LT5pc1JlcXVpcmVkKCkpCi0gICAg
ICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfUkVRVUlSRUQp
OwotCi0gICAgLy8gVE9ETzogQVRLX1NUQVRFX1NFTEVDVEFCTEVfVEVYVAotCi0gICAgaWYgKGNv
cmVPYmplY3QtPmNhblNldFNlbGVjdGVkQXR0cmlidXRlKCkpIHsKLSAgICAgICAgYXRrX3N0YXRl
X3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9TRUxFQ1RBQkxFKTsKLSAgICAgICAg
Ly8gSXRlbXMgaW4gZm9jdXNhYmxlIGxpc3RzIGhhdmUgYm90aCBTVEFURV9TRUxFQ1R7QUJMRSxF
RH0KLSAgICAgICAgLy8gYW5kIFNUQVRFX0ZPQ1VTe0FCTEUsRUR9LiBXZSdsbCBmYWtlIHRoZSBs
YXR0ZXIgYmFzZWQgb24KLSAgICAgICAgLy8gdGhlIGZvcm1lci4KLSAgICAgICAgaWYgKGlzTGlz
dEJveE9wdGlvbikKLSAgICAgICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0
LCBBVEtfU1RBVEVfRk9DVVNBQkxFKTsKLSAgICB9Ci0KLSAgICBpZiAoY29yZU9iamVjdC0+aXNT
ZWxlY3RlZCgpKSB7Ci0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0YXRlKHN0YXRlU2V0LCBB
VEtfU1RBVEVfU0VMRUNURUQpOwotICAgICAgICAvLyBJdGVtcyBpbiBmb2N1c2FibGUgbGlzdHMg
aGF2ZSBib3RoIFNUQVRFX1NFTEVDVHtBQkxFLEVEfQotICAgICAgICAvLyBhbmQgU1RBVEVfRk9D
VVN7QUJMRSxFRH0uIFdlJ2xsIGZha2UgdGhlIGxhdHRlciBiYXNlZCBvbiB0aGUKLSAgICAgICAg
Ly8gZm9ybWVyLgotICAgICAgICBpZiAoaXNMaXN0Qm94T3B0aW9uKQotICAgICAgICAgICAgYXRr
X3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NVU0VEKTsKLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogR3JvdXAgYm90aCBTSE9XSU5HIGFuZCBWSVNJQkxFIGhlcmUgZm9y
IG5vdwotICAgIC8vIE5vdCBzdXJlIGhvdyB0byBoYW5kbGUgdGhpcyBpbiBXZWJLaXQsIHNlZSBi
dWcKLSAgICAvLyBodHRwOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01MDk2
NTAgZm9yIG90aGVyCi0gICAgLy8gaXNzdWVzIHdpdGggU0hPV0lORyB2cyBWSVNJQkxFLgotICAg
IGlmICghY29yZU9iamVjdC0+aXNPZmZTY3JlZW4oKSkgewotICAgICAgICBhdGtfc3RhdGVfc2V0
X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1NIT1dJTkcpOwotICAgICAgICBhdGtfc3Rh
dGVfc2V0X2FkZF9zdGF0ZShzdGF0ZVNldCwgQVRLX1NUQVRFX1ZJU0lCTEUpOwotICAgIH0KLQot
ICAgIC8vIE11dHVhbGx5IGV4Y2x1c2l2ZSwgc28gd2UgZ3JvdXAgdGhlc2UgdHdvCi0gICAgaWYg
KGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUZXh0QXJlYSB8
fCBjb3JlT2JqZWN0LT5hcmlhSXNNdWx0aWxpbmUoKSkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9h
ZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9NVUxUSV9MSU5FKTsKLSAgICBlbHNlIGlmIChj
b3JlT2JqZWN0LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEZpZWxkIHx8
IGNvcmVPYmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpTZWFyY2hGaWVs
ZCkKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9T
SU5HTEVfTElORSk7Ci0KLSAgICAvLyBUT0RPOiBBVEtfU1RBVEVfU0VOU0lUSVZFCi0KLSAgICBp
ZiAoY29yZU9iamVjdC0+c3VwcG9ydHNBdXRvQ29tcGxldGUoKSAmJiBjb3JlT2JqZWN0LT5hdXRv
Q29tcGxldGVWYWx1ZSgpICE9ICJub25lIikKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3Rh
dGUoc3RhdGVTZXQsIEFUS19TVEFURV9TVVBQT1JUU19BVVRPQ09NUExFVElPTik7Ci0KLSAgICBp
ZiAoY29yZU9iamVjdC0+aXNWaXNpdGVkKCkpCi0gICAgICAgIGF0a19zdGF0ZV9zZXRfYWRkX3N0
YXRlKHN0YXRlU2V0LCBBVEtfU1RBVEVfVklTSVRFRCk7Ci19Ci0KLXN0YXRpYyBBdGtTdGF0ZVNl
dCogd2Via2l0QWNjZXNzaWJsZVJlZlN0YXRlU2V0KEF0a09iamVjdCogb2JqZWN0KQotewotICAg
IGF1dG8qIGFjY2Vzc2libGUgPSBXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpOwotICAgIEF0a1N0
YXRlU2V0KiBzdGF0ZVNldCA9IEFUS19PQkpFQ1RfQ0xBU1Mod2Via2l0X2FjY2Vzc2libGVfcGFy
ZW50X2NsYXNzKS0+cmVmX3N0YXRlX3NldChvYmplY3QpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRo
ZSBsYXlvdXQgaXMgdXBkYXRlZCB0byByZWFsbHkga25vdyB3aGV0aGVyIHRoZSBvYmplY3QKLSAg
ICAvLyBpcyBkZWZ1bmN0IG9yIG5vdCwgc28gd2UgY2FuIHJldHVybiB0aGUgcHJvcGVyIHN0YXRl
LgotICAgIGlmIChhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QpCi0gICAgICAgIGFjY2Vzc2libGUt
PnByaXYtPm9iamVjdC0+dXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgaWYgKCFhY2Nlc3NpYmxl
LT5wcml2LT5vYmplY3QpIHsKLSAgICAgICAgYXRrX3N0YXRlX3NldF9hZGRfc3RhdGUoc3RhdGVT
ZXQsIEFUS19TVEFURV9ERUZVTkNUKTsKLSAgICAgICAgcmV0dXJuIHN0YXRlU2V0OwotICAgIH0K
LQotICAgIC8vIFRleHQgb2JqZWN0cyBtdXN0IGJlIGZvY3VzYWJsZS4KLSAgICBBdGtSb2xlIHJv
bGUgPSBhdGtfb2JqZWN0X2dldF9yb2xlKG9iamVjdCk7Ci0gICAgaWYgKHJvbGUgPT0gQVRLX1JP
TEVfVEVYVCB8fCByb2xlID09IEFUS19ST0xFX1BBUkFHUkFQSCkKLSAgICAgICAgYXRrX3N0YXRl
X3NldF9hZGRfc3RhdGUoc3RhdGVTZXQsIEFUS19TVEFURV9GT0NVU0FCTEUpOwotCi0gICAgc2V0
QXRrU3RhdGVTZXRGcm9tQ29yZU9iamVjdChhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QsIHN0YXRl
U2V0KTsKLSAgICByZXR1cm4gc3RhdGVTZXQ7Ci19Ci0KLXN0YXRpYyBBdGtSZWxhdGlvblNldCog
d2Via2l0QWNjZXNzaWJsZVJlZlJlbGF0aW9uU2V0KEF0a09iamVjdCogb2JqZWN0KQotewotICAg
IGF1dG8qIGFjY2Vzc2libGUgPSBXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpOwotICAgIHJldHVy
blZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChhY2Nlc3NpYmxlLCBudWxscHRyKTsKLQot
ICAgIEF0a1JlbGF0aW9uU2V0KiByZWxhdGlvblNldCA9IEFUS19PQkpFQ1RfQ0xBU1Mod2Via2l0
X2FjY2Vzc2libGVfcGFyZW50X2NsYXNzKS0+cmVmX3JlbGF0aW9uX3NldChvYmplY3QpOwotICAg
IGlmIChhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QpCi0gICAgICAgIHNldEF0a1JlbGF0aW9uU2V0
RnJvbUNvcmVPYmplY3QoYWNjZXNzaWJsZS0+cHJpdi0+b2JqZWN0LCByZWxhdGlvblNldCk7Ci0g
ICAgcmV0dXJuIHJlbGF0aW9uU2V0OwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxl
SW5pdChBdGtPYmplY3QqIG9iamVjdCwgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBpZiAoQVRLX09C
SkVDVF9DTEFTUyh3ZWJraXRfYWNjZXNzaWJsZV9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKQot
ICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF9hY2Nlc3NpYmxlX3BhcmVudF9jbGFzcykt
PmluaXRpYWxpemUob2JqZWN0LCBkYXRhKTsKLQotICAgIFdlYktpdEFjY2Vzc2libGUqIGFjY2Vz
c2libGUgPSBXRUJLSVRfQUNDRVNTSUJMRShvYmplY3QpOwotICAgIGFjY2Vzc2libGUtPnByaXYt
Pm9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KGRhdGEpOwot
fQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVHZXRPYmplY3RMb2NhbGUo
QXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZSA9IFdFQktJVF9BQ0NF
U1NJQkxFKG9iamVjdCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlk
KGFjY2Vzc2libGUsIG51bGxwdHIpOwotCi0gICAgaWYgKCFhY2Nlc3NpYmxlLT5wcml2LT5vYmpl
Y3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIGlmIChBVEtfSVNfRE9DVU1F
TlQob2JqZWN0KSkgewotICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgZmFsbCBiYWNrIG9uIGxh
bmcgeG1sOmxhbmcgd2hlbiB0aGUgZm9sbG93aW5nIGNvbWVzIHVwIGVtcHR5PwotICAgICAgICBT
dHJpbmcgbGFuZ3VhZ2UgPSBhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QtPmxhbmd1YWdlKCk7Ci0g
ICAgICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHdlYmtp
dEFjY2Vzc2libGVDYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5KGFjY2Vzc2libGUsIEF0a0NhY2hl
ZERvY3VtZW50TG9jYWxlLCBsYW5ndWFnZS51dGY4KCkpOwotCi0gICAgfSBlbHNlIGlmIChBVEtf
SVNfVEVYVChvYmplY3QpKSB7Ci0gICAgICAgIGNvbnN0IGdjaGFyKiBsb2NhbGUgPSBudWxscHRy
OwotCi0gICAgICAgIEF0a0F0dHJpYnV0ZVNldCogdGV4dEF0dHJpYnV0ZXMgPSBhdGtfdGV4dF9n
ZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEFUS19URVhUKG9iamVjdCkpOwotICAgICAgICBmb3IgKGF1
dG8qIGF0dHJpYnV0ZXMgPSB0ZXh0QXR0cmlidXRlczsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9
IGF0dHJpYnV0ZXMtPm5leHQpIHsKLSAgICAgICAgICAgIGF1dG8qIGF0a0F0dHJpYnV0ZSA9IHN0
YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICAgICAg
aWYgKCFzdHJjbXAoYXRrQXR0cmlidXRlLT5uYW1lLCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25h
bWUoQVRLX1RFWFRfQVRUUl9MQU5HVUFHRSkpKSB7Ci0gICAgICAgICAgICAgICAgbG9jYWxlID0g
d2Via2l0QWNjZXNzaWJsZUNhY2hlQW5kUmV0dXJuQXRrUHJvcGVydHkoYWNjZXNzaWJsZSwgQXRr
Q2FjaGVkRG9jdW1lbnRMb2NhbGUsIGF0a0F0dHJpYnV0ZS0+dmFsdWUpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGF0a19hdHRyaWJ1
dGVfc2V0X2ZyZWUodGV4dEF0dHJpYnV0ZXMpOwotCi0gICAgICAgIHJldHVybiBsb2NhbGU7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nl
c3NpYmxlX2NsYXNzX2luaXQoV2ViS2l0QWNjZXNzaWJsZUNsYXNzKiBrbGFzcykKLXsKLSAgICBh
dXRvKiBhdGtPYmplY3RDbGFzcyA9IEFUS19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwotICAgIGF0a09i
amVjdENsYXNzLT5pbml0aWFsaXplID0gd2Via2l0QWNjZXNzaWJsZUluaXQ7Ci0gICAgYXRrT2Jq
ZWN0Q2xhc3MtPmdldF9uYW1lID0gd2Via2l0QWNjZXNzaWJsZUdldE5hbWU7Ci0gICAgYXRrT2Jq
ZWN0Q2xhc3MtPmdldF9kZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVHZXREZXNjcmlwdGlv
bjsKLSAgICBhdGtPYmplY3RDbGFzcy0+Z2V0X3BhcmVudCA9IHdlYmtpdEFjY2Vzc2libGVHZXRQ
YXJlbnQ7Ci0gICAgYXRrT2JqZWN0Q2xhc3MtPmdldF9uX2NoaWxkcmVuID0gd2Via2l0QWNjZXNz
aWJsZUdldE5DaGlsZHJlbjsKLSAgICBhdGtPYmplY3RDbGFzcy0+cmVmX2NoaWxkID0gd2Via2l0
QWNjZXNzaWJsZVJlZkNoaWxkOwotICAgIGF0a09iamVjdENsYXNzLT5nZXRfcm9sZSA9IHdlYmtp
dEFjY2Vzc2libGVHZXRSb2xlOwotICAgIGF0a09iamVjdENsYXNzLT5yZWZfc3RhdGVfc2V0ID0g
d2Via2l0QWNjZXNzaWJsZVJlZlN0YXRlU2V0OwotICAgIGF0a09iamVjdENsYXNzLT5nZXRfaW5k
ZXhfaW5fcGFyZW50ID0gd2Via2l0QWNjZXNzaWJsZUdldEluZGV4SW5QYXJlbnQ7Ci0gICAgYXRr
T2JqZWN0Q2xhc3MtPmdldF9hdHRyaWJ1dGVzID0gd2Via2l0QWNjZXNzaWJsZUdldEF0dHJpYnV0
ZXM7Ci0gICAgYXRrT2JqZWN0Q2xhc3MtPnJlZl9yZWxhdGlvbl9zZXQgPSB3ZWJraXRBY2Nlc3Np
YmxlUmVmUmVsYXRpb25TZXQ7Ci0gICAgYXRrT2JqZWN0Q2xhc3MtPmdldF9vYmplY3RfbG9jYWxl
ID0gd2Via2l0QWNjZXNzaWJsZUdldE9iamVjdExvY2FsZTsKLX0KLQotc3RhdGljIGNvbnN0IEdJ
bnRlcmZhY2VJbmZvIGF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW10gPSB7Ci0gICAge3JlaW50
ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPihyZWludGVycHJldF9jYXN0PEdDYWxsYmFj
az4od2Via2l0QWNjZXNzaWJsZUFjdGlvbkludGVyZmFjZUluaXQpKSwgbnVsbHB0ciwgbnVsbHB0
cn0sCi0gICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPihyZWludGVycHJl
dF9jYXN0PEdDYWxsYmFjaz4od2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUluaXQp
KSwgbnVsbHB0ciwgbnVsbHB0cn0sCi0gICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUlu
aXRGdW5jPihyZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4od2Via2l0QWNjZXNzaWJsZUVkaXRh
YmxlVGV4dEludGVyZmFjZUluaXQpKSwgbnVsbHB0ciwgbnVsbHB0cn0sCi0gICAge3JlaW50ZXJw
cmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPihyZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4o
d2Via2l0QWNjZXNzaWJsZVRleHRJbnRlcmZhY2VJbml0KSksIG51bGxwdHIsIG51bGxwdHJ9LAot
ICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVuYz4ocmVpbnRlcnByZXRfY2Fz
dDxHQ2FsbGJhY2s+KHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRJbnRlcmZhY2VJbml0KSksIG51
bGxwdHIsIG51bGxwdHJ9LAotICAgIHtyZWludGVycHJldF9jYXN0PEdJbnRlcmZhY2VJbml0RnVu
Yz4ocmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KHdlYmtpdEFjY2Vzc2libGVJbWFnZUludGVy
ZmFjZUluaXQpKSwgbnVsbHB0ciwgbnVsbHB0cn0sCi0gICAge3JlaW50ZXJwcmV0X2Nhc3Q8R0lu
dGVyZmFjZUluaXRGdW5jPihyZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4od2Via2l0QWNjZXNz
aWJsZVRhYmxlSW50ZXJmYWNlSW5pdCkpLCBudWxscHRyLCBudWxscHRyfSwKLSAgICB7cmVpbnRl
cnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNr
Pih3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsSW50ZXJmYWNlSW5pdCkpLCBudWxscHRyLCBudWxs
cHRyfSwKLSAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHJlaW50ZXJw
cmV0X2Nhc3Q8R0NhbGxiYWNrPih3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0SW50ZXJmYWNlSW5p
dCkpLCBudWxscHRyLCBudWxscHRyfSwKLSAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNl
SW5pdEZ1bmM+KHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPih3ZWJraXRBY2Nlc3NpYmxlSHlw
ZXJsaW5rSW1wbEludGVyZmFjZUluaXQpKSwgbnVsbHB0ciwgbnVsbHB0cn0sCi0gICAge3JlaW50
ZXJwcmV0X2Nhc3Q8R0ludGVyZmFjZUluaXRGdW5jPihyZWludGVycHJldF9jYXN0PEdDYWxsYmFj
az4od2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJmYWNlSW5pdCkpLCBudWxscHRyLCBudWxs
cHRyfSwKLSAgICB7cmVpbnRlcnByZXRfY2FzdDxHSW50ZXJmYWNlSW5pdEZ1bmM+KHJlaW50ZXJw
cmV0X2Nhc3Q8R0NhbGxiYWNrPih3ZWJraXRBY2Nlc3NpYmxlVmFsdWVJbnRlcmZhY2VJbml0KSks
IG51bGxwdHIsIG51bGxwdHJ9Ci19OwotCi1lbnVtIFdBSVR5cGUgewotICAgIFdBSUFjdGlvbiwK
LSAgICBXQUlTZWxlY3Rpb24sCi0gICAgV0FJRWRpdGFibGVUZXh0LAotICAgIFdBSVRleHQsCi0g
ICAgV0FJQ29tcG9uZW50LAotICAgIFdBSUltYWdlLAotICAgIFdBSVRhYmxlLAotICAgIFdBSVRh
YmxlQ2VsbCwKLSAgICBXQUlIeXBlcnRleHQsCi0gICAgV0FJSHlwZXJsaW5rLAotICAgIFdBSURv
Y3VtZW50LAotICAgIFdBSVZhbHVlLAotfTsKLQotc3RhdGljIEdUeXBlIGF0a0ludGVyZmFjZVR5
cGVGcm9tV0FJVHlwZShXQUlUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
Y2FzZSBXQUlBY3Rpb246Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9BQ1RJT047Ci0gICAgY2Fz
ZSBXQUlTZWxlY3Rpb246Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9TRUxFQ1RJT047Ci0gICAg
Y2FzZSBXQUlFZGl0YWJsZVRleHQ6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9FRElUQUJMRV9U
RVhUOwotICAgIGNhc2UgV0FJVGV4dDoKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX1RFWFQ7Ci0g
ICAgY2FzZSBXQUlDb21wb25lbnQ6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9DT01QT05FTlQ7
Ci0gICAgY2FzZSBXQUlJbWFnZToKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX0lNQUdFOwotICAg
IGNhc2UgV0FJVGFibGU6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9UQUJMRTsKLSAgICBjYXNl
IFdBSVRhYmxlQ2VsbDoKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX1RBQkxFX0NFTEw7Ci0gICAg
Y2FzZSBXQUlIeXBlcnRleHQ6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9IWVBFUlRFWFQ7Ci0g
ICAgY2FzZSBXQUlIeXBlcmxpbms6Ci0gICAgICAgIHJldHVybiBBVEtfVFlQRV9IWVBFUkxJTktf
SU1QTDsKLSAgICBjYXNlIFdBSURvY3VtZW50OgotICAgICAgICByZXR1cm4gQVRLX1RZUEVfRE9D
VU1FTlQ7Ci0gICAgY2FzZSBXQUlWYWx1ZToKLSAgICAgICAgcmV0dXJuIEFUS19UWVBFX1ZBTFVF
OwotICAgIH0KLQotICAgIHJldHVybiBHX1RZUEVfSU5WQUxJRDsKLX0KLQotc3RhdGljIGJvb2wg
cm9sZUlzVGV4dFR5cGUoQWNjZXNzaWJpbGl0eVJvbGUgcm9sZSkKLXsKLSAgICByZXR1cm4gcm9s
ZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6UGFyYWdyYXBoCi0gICAgICAgIHx8IHJvbGUgPT0gQWNj
ZXNzaWJpbGl0eVJvbGU6OkhlYWRpbmcKLSAgICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5
Um9sZTo6RGl2Ci0gICAgICAgIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkNlbGwKLSAg
ICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGluawotICAgICAgICB8fCByb2xl
ID09IEFjY2Vzc2liaWxpdHlSb2xlOjpXZWJDb3JlTGluawotICAgICAgICB8fCByb2xlID09IEFj
Y2Vzc2liaWxpdHlSb2xlOjpMaXN0SXRlbQotICAgICAgICB8fCByb2xlID09IEFjY2Vzc2liaWxp
dHlSb2xlOjpQcmUKLSAgICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6R3JpZENl
bGwKLSAgICAgICAgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGV4dEdyb3VwCi0gICAg
ICAgIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uVGV4dEdyb3VwCi0g
ICAgICAgIHx8IHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkFwcGxpY2F0aW9uR3JvdXA7Ci19
Ci0KLXN0YXRpYyBndWludDE2IGludGVyZmFjZU1hc2tGcm9tT2JqZWN0KEFYQ29yZU9iamVjdCog
Y29yZU9iamVjdCkKLXsKLSAgICBndWludDE2IGludGVyZmFjZU1hc2sgPSAwOwotCi0gICAgLy8g
Q29tcG9uZW50IGludGVyZmFjZSBpcyBhbHdheXMgc3VwcG9ydGVkCi0gICAgaW50ZXJmYWNlTWFz
ayB8PSAxIDw8IFdBSUNvbXBvbmVudDsKLQotICAgIEFjY2Vzc2liaWxpdHlSb2xlIHJvbGUgPSBj
b3JlT2JqZWN0LT5yb2xlVmFsdWUoKTsKLQotICAgIC8vIEFjdGlvbgotICAgIC8vIEFzIHRoZSBp
bXBsZW1lbnRhdGlvbiBvZiB0aGUgQXRrQWN0aW9uIGludGVyZmFjZSBpcyBhIHZlcnkKLSAgICAv
LyBiYXNpYyBvbmUgKGp1c3QgcmVsYXlzIGluIGV4ZWN1dGluZyB0aGUgZGVmYXVsdCBhY3Rpb24g
Zm9yIGVhY2gKLSAgICAvLyBvYmplY3QsIGFuZCBvbmx5IHN1cHBvcnRzIGhhdmluZyBvbmUgYWN0
aW9uIHBlciBvYmplY3QpLCBpdCBpcwotICAgIC8vIGJldHRlciBqdXN0IHRvIGltcGxlbWVudCB0
aGlzIGludGVyZmFjZSBmb3IgZXZlcnkgaW5zdGFuY2Ugb2YKLSAgICAvLyB0aGUgV2ViS2l0QWNj
ZXNzaWJsZSBjbGFzcyBhbmQgbGV0IFdlYkNvcmUgZGVjaWRlIHdoYXQgdG8gZG8uCi0gICAgaW50
ZXJmYWNlTWFzayB8PSAxIDw8IFdBSUFjdGlvbjsKLQotICAgIC8vIFNlbGVjdGlvbgotICAgIGlm
IChjb3JlT2JqZWN0LT5jYW5IYXZlU2VsZWN0ZWRDaGlsZHJlbigpIHx8IGNvcmVPYmplY3QtPmlz
TWVudUxpc3QoKSkKLSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSVNlbGVjdGlvbjsK
LQotICAgIC8vIEdldCByZW5kZXJlciBpZiBhdmFpbGFibGUuCi0gICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IG51bGxwdHI7Ci0gICAgaWYgKGNvcmVPYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdCgpKQotICAgICAgICByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7
Ci0KLSAgICAvLyBIeXBlcmxpbmsgKGxpbmtzIGFuZCBlbWJlZGRlZCBvYmplY3RzKS4KLSAgICBp
ZiAoY29yZU9iamVjdC0+aXNMaW5rKCkgfHwgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc1JlcGxh
Y2VkT3JJbmxpbmVCbG9jaygpKSkKLSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSUh5
cGVybGluazsKLQotICAgIC8vIFRleHQsIEVkaXRhYmxlIFRleHQgJiBIeXBlcnRleHQKLSAgICBp
ZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3RhdGljVGV4dCB8fCBjb3JlT2JqZWN0LT5p
c01lbnVMaXN0T3B0aW9uKCkpCi0gICAgICAgIGludGVyZmFjZU1hc2sgfD0gMSA8PCBXQUlUZXh0
OwotICAgIGVsc2UgaWYgKGNvcmVPYmplY3QtPmlzVGV4dENvbnRyb2woKSB8fCBjb3JlT2JqZWN0
LT5pc05vbk5hdGl2ZVRleHRDb250cm9sKCkpIHsKLSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAx
IDw8IFdBSVRleHQ7Ci0gICAgICAgIGlmIChjb3JlT2JqZWN0LT5jYW5TZXRWYWx1ZUF0dHJpYnV0
ZSgpKQotICAgICAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSUVkaXRhYmxlVGV4dDsK
LSAgICB9IGVsc2UgaWYgKCFjb3JlT2JqZWN0LT5pc1dlYkFyZWEoKSkgewotICAgICAgICBpZiAo
cm9sZSAhPSBBY2Nlc3NpYmlsaXR5Um9sZTo6VGFibGUpIHsKLSAgICAgICAgICAgIGludGVyZmFj
ZU1hc2sgfD0gMSA8PCBXQUlIeXBlcnRleHQ7Ci0gICAgICAgICAgICBpZiAoKHJlbmRlcmVyICYm
IHJlbmRlcmVyLT5jaGlsZHJlbklubGluZSgpKSB8fCByb2xlSXNUZXh0VHlwZShyb2xlKSB8fCBj
b3JlT2JqZWN0LT5pc01hdGhUb2tlbigpKQotICAgICAgICAgICAgICAgIGludGVyZmFjZU1hc2sg
fD0gMSA8PCBXQUlUZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWRkIHRoZSBURVhUIGlu
dGVyZmFjZSBmb3IgbGlzdCBpdGVtcyB3aG9zZQotICAgICAgICAvLyBmaXJzdCBhY2Nlc3NpYmxl
IGNoaWxkIGhhcyBhIHRleHQgcmVuZGVyZXIKLSAgICAgICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJp
bGl0eVJvbGU6Okxpc3RJdGVtKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9
IGNvcmVPYmplY3QtPmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBpZiAoIWNoaWxkcmVuLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IGludGVyZmFjZU1hc2tGcm9t
T2JqZWN0KGNoaWxkcmVuWzBdLmdldCgpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIElt
YWdlCi0gICAgaWYgKGNvcmVPYmplY3QtPmlzSW1hZ2UoKSkKLSAgICAgICAgaW50ZXJmYWNlTWFz
ayB8PSAxIDw8IFdBSUltYWdlOwotCi0gICAgLy8gVGFibGUKLSAgICBpZiAoY29yZU9iamVjdC0+
aXNUYWJsZSgpKQotICAgICAgICBpbnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJVGFibGU7Ci0KLSAg
ICBpZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Q2VsbCB8fCByb2xlID09IEFjY2Vzc2li
aWxpdHlSb2xlOjpHcmlkQ2VsbCB8fCByb2xlID09IEFjY2Vzc2liaWxpdHlSb2xlOjpDb2x1bW5I
ZWFkZXIgfHwgcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6Um93SGVhZGVyKQotICAgICAgICBp
bnRlcmZhY2VNYXNrIHw9IDEgPDwgV0FJVGFibGVDZWxsOwotCi0gICAgLy8gRG9jdW1lbnQKLSAg
ICBpZiAocm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQXJlYSkKLSAgICAgICAgaW50ZXJm
YWNlTWFzayB8PSAxIDw8IFdBSURvY3VtZW50OwotCi0gICAgLy8gVmFsdWUKLSAgICBpZiAoY29y
ZU9iamVjdC0+c3VwcG9ydHNSYW5nZVZhbHVlKCkpCi0gICAgICAgIGludGVyZmFjZU1hc2sgfD0g
MSA8PCBXQUlWYWx1ZTsKLQotI2lmIEVOQUJMRShJTlBVVF9UWVBFX0NPTE9SKQotICAgIC8vIENv
bG9yIHR5cGUuCi0gICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJvbGU6OkNvbG9yV2VsbCkK
LSAgICAgICAgaW50ZXJmYWNlTWFzayB8PSAxIDw8IFdBSVRleHQ7Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBpbnRlcmZhY2VNYXNrOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciogdW5pcXVlQWNjZXNz
aWJpbGl0eVR5cGVOYW1lKGd1aW50MTYgaW50ZXJmYWNlTWFzaykKLXsKLSNkZWZpbmUgV0FJX1RZ
UEVfTkFNRV9MRU4gKDMwKSAvLyBFbm91Z2ggZm9yIHByZWZpeCArIDUgaGV4IGNoYXJhY3RlcnMg
KG1heCkuCi0gICAgc3RhdGljIGNoYXIgbmFtZVtXQUlfVFlQRV9OQU1FX0xFTiArIDFdOwotCi0g
ICAgZ19zcHJpbnRmKG5hbWUsICJXQUlUeXBlJXgiLCBpbnRlcmZhY2VNYXNrKTsKLSAgICBuYW1l
W1dBSV9UWVBFX05BTUVfTEVOXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gbmFtZTsKLX0KLQotc3Rh
dGljIEdUeXBlIGFjY2Vzc2liaWxpdHlUeXBlRnJvbU9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0KQotewotICAgIHN0YXRpYyBjb25zdCBHVHlwZUluZm8gdHlwZUluZm8gPSB7
Ci0gICAgICAgIHNpemVvZihXZWJLaXRBY2Nlc3NpYmxlQ2xhc3MpLAotICAgICAgICBudWxscHRy
LCAvLyBHQmFzZUluaXRGdW5jCi0gICAgICAgIG51bGxwdHIsIC8vIEdCYXNlRmluYWxpemVGdW5j
Ci0gICAgICAgIG51bGxwdHIsIC8vIEdDbGFzc0luaXRGdW5jCi0gICAgICAgIG51bGxwdHIsIC8v
IEdDbGFzc0ZpbmFsaXplRnVuYwotICAgICAgICBudWxscHRyLCAvLyBjbGFzcyBkYXRhCi0gICAg
ICAgIHNpemVvZihXZWJLaXRBY2Nlc3NpYmxlKSwgLy8gaW5zdGFuY2Ugc2l6ZQotICAgICAgICAw
LCAvLyBuYiBwcmVhbGxvY3MKLSAgICAgICAgbnVsbHB0ciwgLy8gR0luc3RhbmNlSW5pdEZ1bmMK
LSAgICAgICAgbnVsbHB0ciAvLyB2YWx1ZSB0YWJsZQotICAgIH07Ci0KLSAgICBndWludDE2IGlu
dGVyZmFjZU1hc2sgPSBpbnRlcmZhY2VNYXNrRnJvbU9iamVjdChjb3JlT2JqZWN0KTsKLSAgICBj
b25zdCBjaGFyKiBhdGtUeXBlTmFtZSA9IHVuaXF1ZUFjY2Vzc2liaWxpdHlUeXBlTmFtZShpbnRl
cmZhY2VNYXNrKTsKLSAgICBpZiAoR1R5cGUgdHlwZSA9IGdfdHlwZV9mcm9tX25hbWUoYXRrVHlw
ZU5hbWUpKQotICAgICAgICByZXR1cm4gdHlwZTsKLQotICAgIEdUeXBlIHR5cGUgPSBnX3R5cGVf
cmVnaXN0ZXJfc3RhdGljKFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUsIGF0a1R5cGVOYW1lLCAmdHlw
ZUluZm8sIHN0YXRpY19jYXN0PEdUeXBlRmxhZ3M+KDApKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR19OX0VMRU1FTlRTKGF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zKTsgKytpKSB7
Ci0gICAgICAgIGlmIChpbnRlcmZhY2VNYXNrICYgKDEgPDwgaSkpIHsKLSAgICAgICAgICAgIGdf
dHlwZV9hZGRfaW50ZXJmYWNlX3N0YXRpYyh0eXBlLAotICAgICAgICAgICAgICAgIGF0a0ludGVy
ZmFjZVR5cGVGcm9tV0FJVHlwZShzdGF0aWNfY2FzdDxXQUlUeXBlPihpKSksCi0gICAgICAgICAg
ICAgICAgJmF0a0ludGVyZmFjZXNJbml0RnVuY3Rpb25zW2ldKTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0eXBlOwotfQotCi1XZWJLaXRBY2Nlc3NpYmxlKiB3ZWJraXRBY2Nlc3Np
YmxlTmV3KEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QpCi17Ci0gICAgYXV0byogb2Jq
ZWN0ID0gQVRLX09CSkVDVChnX29iamVjdF9uZXcoYWNjZXNzaWJpbGl0eVR5cGVGcm9tT2JqZWN0
KGNvcmVPYmplY3QpLCBudWxscHRyKSk7Ci0gICAgYXRrX29iamVjdF9pbml0aWFsaXplKG9iamVj
dCwgY29yZU9iamVjdCk7Ci0gICAgcmV0dXJuIFdFQktJVF9BQ0NFU1NJQkxFKG9iamVjdCk7Ci19
Ci0KLUFjY2Vzc2liaWxpdHlPYmplY3QmIHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5
T2JqZWN0KFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUpCi17Ci0gICAgQVNTRVJUKFdFQktJ
VF9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKTsKLSAgICBBU1NFUlQoYWNjZXNzaWJsZS0+cHJp
di0+b2JqZWN0KTsKLSAgICByZXR1cm4gKmFjY2Vzc2libGUtPnByaXYtPm9iamVjdDsKLX0KLQot
dm9pZCB3ZWJraXRBY2Nlc3NpYmxlRGV0YWNoKFdlYktpdEFjY2Vzc2libGUqIGFjY2Vzc2libGUp
Ci17Ci0gICAgQVNTRVJUKFdFQktJVF9JU19BQ0NFU1NJQkxFKGFjY2Vzc2libGUpKTsKLQotICAg
IGlmIChhY2Nlc3NpYmxlLT5wcml2LT5vYmplY3QgJiYgYWNjZXNzaWJsZS0+cHJpdi0+b2JqZWN0
LT5yb2xlVmFsdWUoKSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6V2ViQXJlYSkKLSAgICAgICAgYXRr
X29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKEFUS19PQkpFQ1QoYWNjZXNzaWJsZSksIEFUS19T
VEFURV9ERUZVTkNULCBUUlVFKTsKLQotICAgIGFjY2Vzc2libGUtPnByaXYtPm9iamVjdCA9IG51
bGxwdHI7Ci19Ci0KLWJvb2wgd2Via2l0QWNjZXNzaWJsZUlzRGV0YWNoZWQoV2ViS2l0QWNjZXNz
aWJsZSogYWNjZXNzaWJsZSkKLXsKLSAgICBBU1NFUlQoV0VCS0lUX0lTX0FDQ0VTU0lCTEUoYWNj
ZXNzaWJsZSkpOwotICAgIHJldHVybiAhYWNjZXNzaWJsZS0+cHJpdi0+b2JqZWN0OwotfQotCi1j
b25zdCBjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQ2FjaGVBbmRSZXR1cm5BdGtQcm9wZXJ0eShXZWJL
aXRBY2Nlc3NpYmxlKiBhY2Nlc3NpYmxlLCBBdGtDYWNoZWRQcm9wZXJ0eSBwcm9wZXJ0eSwgQ1N0
cmluZyYmIHZhbHVlKQotewotICAgIEFTU0VSVChXRUJLSVRfSVNfQUNDRVNTSUJMRShhY2Nlc3Np
YmxlKSk7Ci0KLSAgICBXZWJLaXRBY2Nlc3NpYmxlUHJpdmF0ZSogcHJpdiA9IGFjY2Vzc2libGUt
PnByaXY7Ci0gICAgQ1N0cmluZyogcHJvcGVydHlQdHIgPSBudWxscHRyOwotCi0gICAgc3dpdGNo
IChwcm9wZXJ0eSkgewotICAgIGNhc2UgQXRrQ2FjaGVkQWNjZXNzaWJsZU5hbWU6Ci0gICAgICAg
IHByb3BlcnR5UHRyID0gJnByaXYtPmFjY2Vzc2libGVOYW1lOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEF0a0NhY2hlZEFjY2Vzc2libGVEZXNjcmlwdGlvbjoKLSAgICAgICAgcHJvcGVydHlQ
dHIgPSAmcHJpdi0+YWNjZXNzaWJsZURlc2NyaXB0aW9uOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEF0a0NhY2hlZEFjdGlvbk5hbWU6Ci0gICAgICAgIHByb3BlcnR5UHRyID0gJnByaXYtPmFj
dGlvbk5hbWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXRrQ2FjaGVkQWN0aW9uS2V5Qmlu
ZGluZzoKLSAgICAgICAgcHJvcGVydHlQdHIgPSAmcHJpdi0+YWN0aW9uS2V5QmluZGluZzsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdGtDYWNoZWREb2N1bWVudExvY2FsZToKLSAgICAgICAg
cHJvcGVydHlQdHIgPSAmcHJpdi0+ZG9jdW1lbnRMb2NhbGU7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQXRrQ2FjaGVkRG9jdW1lbnRUeXBlOgotICAgICAgICBwcm9wZXJ0eVB0ciA9ICZwcml2
LT5kb2N1bWVudFR5cGU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXRrQ2FjaGVkRG9jdW1l
bnRFbmNvZGluZzoKLSAgICAgICAgcHJvcGVydHlQdHIgPSAmcHJpdi0+ZG9jdW1lbnRFbmNvZGlu
ZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBdGtDYWNoZWREb2N1bWVudFVSSToKLSAgICAg
ICAgcHJvcGVydHlQdHIgPSAmcHJpdi0+ZG9jdW1lbnRVUkk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQXRrQ2FjaGVkSW1hZ2VEZXNjcmlwdGlvbjoKLSAgICAgICAgcHJvcGVydHlQdHIgPSAm
cHJpdi0+aW1hZ2VEZXNjcmlwdGlvbjsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgLy8gRG9uJ3QgaW52YWxp
ZGF0ZSBvbGQgbWVtb3J5IGlmIG5vdCBzdHJpY2x5IG5lZWRlZCwgc2luY2Ugb3RoZXIKLSAgICAv
LyBjYWxsZXJzIG1pZ2h0IGJlIHN0aWxsIGhvbGRpbmcgb24gdG8gaXQuCi0gICAgaWYgKCpwcm9w
ZXJ0eVB0ciAhPSB2YWx1ZSkKLSAgICAgICAgKnByb3BlcnR5UHRyID0gV1RGTW92ZSh2YWx1ZSk7
Ci0KLSAgICByZXR1cm4gKCpwcm9wZXJ0eVB0cikuZGF0YSgpOwotfQotCi0jZW5kaWYgLy8gRU5B
QkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGVmOTIzNmE3M2U0OC4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGUuaAorKysgL2Rldi9udWxsCkBAIC0x
LDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAs
IDIwMTEsIDIwMTIsIDIwMTkgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1z
dW5nIEVsZWN0cm9uaWNzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkp
ICYmIFVTRShBVEspCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIEFjY2Vzc2liaWxpdHlP
YmplY3Q7Ci19Ci0KLUdfQkVHSU5fREVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9BQ0NFU1NJ
QkxFICAgICAgICAgICAgKHdlYmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKCkpCi0jZGVmaW5lIFdF
QktJVF9BQ0NFU1NJQkxFKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NB
U1QoKG9iaiksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUsIFdlYktpdEFjY2Vzc2libGUpKQotI2Rl
ZmluZSBXRUJLSVRfQUNDRVNTSUJMRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUsIFdlYktpdEFjY2Vzc2libGVD
bGFzcykpCi0jZGVmaW5lIFdFQktJVF9JU19BQ0NFU1NJQkxFKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUpKQotI2Rl
ZmluZSBXRUJLSVRfSVNfQUNDRVNTSUJMRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUpKQotI2RlZmluZSBXRUJLSVRf
QUNDRVNTSUJMRV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9i
aiksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEUsIFdlYktpdEFjY2Vzc2libGVDbGFzcykpCi0KLXR5
cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlICAgICAgICBXZWJLaXRBY2Nlc3NpYmxlOwot
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGVDbGFzcyAgIFdlYktpdEFjY2Vzc2libGVD
bGFzczsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlUHJpdmF0ZSBXZWJLaXRBY2Nl
c3NpYmxlUHJpdmF0ZTsKLQotCi1zdHJ1Y3QgX1dlYktpdEFjY2Vzc2libGUgewotICAgIEF0a09i
amVjdCBwYXJlbnQ7Ci0KLSAgICBXZWJLaXRBY2Nlc3NpYmxlUHJpdmF0ZSAqcHJpdjsKLX07Ci0K
LXN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZUNsYXNzIHsKLSAgICBBdGtPYmplY3RDbGFzcyBwYXJl
bnRDbGFzczsKLX07Ci0KLUdUeXBlIHdlYmtpdF9hY2Nlc3NpYmxlX2dldF90eXBlKHZvaWQpOwot
Ci1HX0VORF9ERUNMUwotCi0vLyBUaGUgZGVmaW5pdGlvbnMgYmVsb3cgYXJlIG9ubHkgdXNlZCBp
biBDKysgY29kZSwgYW5kIHNvbWUgdXNlIEMrKyB0eXBlcywKLS8vIHRoZXJlZm9yZSB0aGV5IHNo
b3VsZCBiZSBvdXRzaWRlIG9mIHRoZSBHX0JFR0lOX0RFQ0xTL0dfRU5EX0RFQ0xTIGJsb2NrCi0v
LyB0byBtYWtlIHRoZW0gdXNlIHRoZSBDKysgQUJJLgotCi1lbnVtIEF0a0NhY2hlZFByb3BlcnR5
IHsKLSAgICBBdGtDYWNoZWRBY2Nlc3NpYmxlTmFtZSwKLSAgICBBdGtDYWNoZWRBY2Nlc3NpYmxl
RGVzY3JpcHRpb24sCi0gICAgQXRrQ2FjaGVkQWN0aW9uTmFtZSwKLSAgICBBdGtDYWNoZWRBY3Rp
b25LZXlCaW5kaW5nLAotICAgIEF0a0NhY2hlZERvY3VtZW50TG9jYWxlLAotICAgIEF0a0NhY2hl
ZERvY3VtZW50VHlwZSwKLSAgICBBdGtDYWNoZWREb2N1bWVudEVuY29kaW5nLAotICAgIEF0a0Nh
Y2hlZERvY3VtZW50VVJJLAotICAgIEF0a0NhY2hlZEltYWdlRGVzY3JpcHRpb24KLX07Ci0KLVdl
YktpdEFjY2Vzc2libGUqIHdlYmtpdEFjY2Vzc2libGVOZXcoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU9iamVjdCopOwotCi1XZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0JiB3ZWJraXRBY2Nlc3Np
YmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXZWJLaXRBY2Nlc3NpYmxlKik7Ci0KLXZvaWQgd2Vi
a2l0QWNjZXNzaWJsZURldGFjaChXZWJLaXRBY2Nlc3NpYmxlKik7Ci0KLWJvb2wgd2Via2l0QWNj
ZXNzaWJsZUlzRGV0YWNoZWQoV2ViS2l0QWNjZXNzaWJsZSopOwotCi1jb25zdCBjaGFyKiB3ZWJr
aXRBY2Nlc3NpYmxlQ2FjaGVBbmRSZXR1cm5BdGtQcm9wZXJ0eShXZWJLaXRBY2Nlc3NpYmxlKiwg
QXRrQ2FjaGVkUHJvcGVydHksIENTdHJpbmcmJik7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNT
SUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkZGU2MjRkZjBiNC4uMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1z
dW5nIEVsZWN0cm9uaWNzCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmgiCi0KLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFU
SykKLQotI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
T2JqZWN0LmgiCi0jaW5jbHVkZSAiRWRpdGluZy5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCi0jaW5jbHVkZSAiUG9zaXRpb24uaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUg
IlJlbmRlckxpc3RNYXJrZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlLmgiCi0jaW5jbHVk
ZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKLSNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2h5cGVybGlua19hdGtfYWN0aW9u
X2ludGVyZmFjZV9pbml0KEF0a0FjdGlvbklmYWNlKik7Ci0KLXN0cnVjdCBfV2ViS2l0QWNjZXNz
aWJsZUh5cGVybGlua1ByaXZhdGUgewotICAgIFdlYktpdEFjY2Vzc2libGUqIGh5cGVybGlua0lt
cGw7Ci0KLSAgICAvLyBXZSBjYWNoZSB0aGVzZSB2YWx1ZXMgc28gd2UgY2FuIHJldHVybiB0aGVt
IGFzIGNvbnN0IHZhbHVlcy4KLSAgICBDU3RyaW5nIGFjdGlvbk5hbWU7Ci0gICAgQ1N0cmluZyBh
Y3Rpb25LZXlCaW5kaW5nOwotfTsKLQotV0VCS0lUX0RFRklORV9UWVBFX1dJVEhfQ09ERSgKLSAg
ICBXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rLCB3ZWJraXRfYWNjZXNzaWJsZV9oeXBlcmxpbmss
IEFUS19UWVBFX0hZUEVSTElOSywKLSAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoQVRLX1RZUEVf
QUNUSU9OLCB3ZWJraXRfYWNjZXNzaWJsZV9oeXBlcmxpbmtfYXRrX2FjdGlvbl9pbnRlcmZhY2Vf
aW5pdCkpCi0KLWVudW0gewotICAgIFBST1BfMCwKLQotICAgIFBST1BfSFlQRVJMSU5LX0lNUEwK
LX07Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rQWN0aW9uRG9B
Y3Rpb24oQXRrQWN0aW9uKiBhY3Rpb24sIGdpbnQpCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZUh5
cGVybGluayA9IFdFQktJVF9BQ0NFU1NJQkxFX0hZUEVSTElOSyhhY3Rpb24pOwotICAgIHJldHVy
blZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2
LT5oeXBlcmxpbmtJbXBsLCBGQUxTRSk7Ci0KLSAgICBpZiAoIUFUS19JU19BQ1RJT04oYWNjZXNz
aWJsZUh5cGVybGluay0+cHJpdi0+aHlwZXJsaW5rSW1wbCkpCi0gICAgICAgIHJldHVybiBGQUxT
RTsKLQotICAgIGF1dG8mIGNvcmVPYmplY3QgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJp
bGl0eU9iamVjdChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsKTsKLSAg
ICByZXR1cm4gY29yZU9iamVjdC5wZXJmb3JtRGVmYXVsdEFjdGlvbigpOwotfQotCi1zdGF0aWMg
Z2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rQWN0aW9uR2V0TkFjdGlvbnMoQXRrQWN0aW9u
KiBhY3Rpb24pCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZUh5cGVybGluayA9IFdFQktJVF9BQ0NF
U1NJQkxFX0hZUEVSTElOSyhhY3Rpb24pOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJs
ZUlzSW52YWxpZChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsLCAwKTsK
LQotICAgIHJldHVybiBBVEtfSVNfQUNUSU9OKGFjY2Vzc2libGVIeXBlcmxpbmstPnByaXYtPmh5
cGVybGlua0ltcGwpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNj
ZXNzaWJsZUh5cGVybGlua0FjdGlvbkdldERlc2NyaXB0aW9uKEF0a0FjdGlvbiogYWN0aW9uLCBn
aW50KQotewotICAgIGF1dG8qIGFjY2Vzc2libGVIeXBlcmxpbmsgPSBXRUJLSVRfQUNDRVNTSUJM
RV9IWVBFUkxJTksoYWN0aW9uKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0lu
dmFsaWQoYWNjZXNzaWJsZUh5cGVybGluay0+cHJpdi0+aHlwZXJsaW5rSW1wbCwgbnVsbHB0cik7
Ci0KLSAgICAvLyBUT0RPOiBOZWVkIGEgd2F5IHRvIHByb3ZpZGUvbG9jYWxpemUgYWN0aW9uIGRl
c2NyaXB0aW9ucy4KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAiIjsKLX0KLQot
c3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rQWN0aW9uR2V0S2V5
YmluZGluZyhBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCkKLXsKLSAgICBhdXRvKiBhY2Nlc3NpYmxl
SHlwZXJsaW5rID0gV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5LKGFjdGlvbik7Ci0gICAgcmV0
dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGVIeXBlcmxpbmstPnBy
aXYtPmh5cGVybGlua0ltcGwsIG51bGxwdHIpOwotCi0gICAgaWYgKCFBVEtfSVNfQUNUSU9OKGFj
Y2Vzc2libGVIeXBlcmxpbmstPnByaXYtPmh5cGVybGlua0ltcGwpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGF1dG8mIGNvcmVPYmplY3QgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNj
ZXNzaWJpbGl0eU9iamVjdChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBs
KTsKLSAgICBhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5hY3Rpb25LZXlCaW5kaW5nID0gY29y
ZU9iamVjdC5hY2Nlc3NLZXkoKS51dGY4KCk7Ci0gICAgcmV0dXJuIGFjY2Vzc2libGVIeXBlcmxp
bmstPnByaXYtPmFjdGlvbktleUJpbmRpbmcuZGF0YSgpOwotfQotCi1zdGF0aWMgY29uc3QgZ2No
YXIqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtBY3Rpb25HZXROYW1lKEF0a0FjdGlvbiogYWN0
aW9uLCBnaW50KQotewotICAgIGF1dG8qIGFjY2Vzc2libGVIeXBlcmxpbmsgPSBXRUJLSVRfQUND
RVNTSUJMRV9IWVBFUkxJTksoYWN0aW9uKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2li
bGVJc0ludmFsaWQoYWNjZXNzaWJsZUh5cGVybGluay0+cHJpdi0+aHlwZXJsaW5rSW1wbCwgbnVs
bHB0cik7Ci0KLSAgICBpZiAoIUFUS19JU19BQ1RJT04oYWNjZXNzaWJsZUh5cGVybGluay0+cHJp
di0+aHlwZXJsaW5rSW1wbCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byYg
Y29yZU9iamVjdCA9IHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KGFjY2Vz
c2libGVIeXBlcmxpbmstPnByaXYtPmh5cGVybGlua0ltcGwpOwotICAgIGFjY2Vzc2libGVIeXBl
cmxpbmstPnByaXYtPmFjdGlvbk5hbWUgPSBjb3JlT2JqZWN0LmxvY2FsaXplZEFjdGlvblZlcmIo
KS51dGY4KCk7Ci0gICAgcmV0dXJuIGFjY2Vzc2libGVIeXBlcmxpbmstPnByaXYtPmFjdGlvbk5h
bWUuZGF0YSgpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfYWNjZXNzaWJsZV9oeXBlcmxpbmtf
YXRrX2FjdGlvbl9pbnRlcmZhY2VfaW5pdChBdGtBY3Rpb25JZmFjZSogaWZhY2UpCi17Ci0gICAg
aWZhY2UtPmRvX2FjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtBY3Rpb25Eb0FjdGlv
bjsKLSAgICBpZmFjZS0+Z2V0X25fYWN0aW9ucyA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtB
Y3Rpb25HZXROQWN0aW9uczsKLSAgICBpZmFjZS0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Via2l0QWNj
ZXNzaWJsZUh5cGVybGlua0FjdGlvbkdldERlc2NyaXB0aW9uOwotICAgIGlmYWNlLT5nZXRfa2V5
YmluZGluZyA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtBY3Rpb25HZXRLZXliaW5kaW5nOwot
ICAgIGlmYWNlLT5nZXRfbmFtZSA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtBY3Rpb25HZXRO
YW1lOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRVUkko
QXRrSHlwZXJsaW5rKiBsaW5rLCBnaW50IGluZGV4KQotewotICAgIC8vIEZJWE1FOiBEbyBOT1Qg
c3VwcG9ydCBtb3JlIHRoYW4gb25lIGluc3RhbmNlIG9mIGFuIEF0a09iamVjdAotICAgIC8vIGlt
cGxlbWVudGluZyBBdGtIeXBlcmxpbmtJbXBsIGluIGV2ZXJ5IGluc3RhbmNlIG9mIEF0a0h5cGVy
TGluawotICAgIGlmIChpbmRleCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
KiBhY2Nlc3NpYmxlSHlwZXJsaW5rID0gV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5LKGxpbmsp
OwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChhY2Nlc3NpYmxlSHlw
ZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsLCBudWxscHRyKTsKLQotICAgIGF1dG8mIGNvcmVP
YmplY3QgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChhY2Nlc3NpYmxl
SHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsKTsKLSAgICByZXR1cm4gIWNvcmVPYmplY3Qu
dXJsKCkuaXNOdWxsKCkgPyBnX3N0cmR1cChjb3JlT2JqZWN0LnVybCgpLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpIDogbnVsbHB0cjsKLX0KLQotc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNz
aWJsZUh5cGVybGlua0dldE9iamVjdChBdGtIeXBlcmxpbmsqIGxpbmssIGdpbnQgaW5kZXgpCi17
Ci0gICAgLy8gRklYTUU6IERvIE5PVCBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2Ugb2Yg
YW4gQXRrT2JqZWN0Ci0gICAgLy8gaW1wbGVtZW50aW5nIEF0a0h5cGVybGlua0ltcGwgaW4gZXZl
cnkgaW5zdGFuY2Ugb2YgQXRrSHlwZXJMaW5rCi0gICAgaWYgKGluZGV4KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8qIGFjY2Vzc2libGVIeXBlcmxpbmsgPSBXRUJLSVRfQUND
RVNTSUJMRV9IWVBFUkxJTksobGluayk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxl
SXNJbnZhbGlkKGFjY2Vzc2libGVIeXBlcmxpbmstPnByaXYtPmh5cGVybGlua0ltcGwsIDApOwot
Ci0gICAgcmV0dXJuIEFUS19PQkpFQ1QoYWNjZXNzaWJsZUh5cGVybGluay0+cHJpdi0+aHlwZXJs
aW5rSW1wbCk7Ci19Ci0KLXN0YXRpYyBnaW50IHJhbmdlTGVuZ3RoRm9yT2JqZWN0KEFjY2Vzc2li
aWxpdHlPYmplY3QmIG9iaiwgY29uc3Qgc3RkOjpvcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdl
KQotewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gVGhpcyBp
cyBnb2luZyB0byBiZSB0aGUgYWN0dWFsIGxlbmd0aCBpbiBtb3N0IG9mIHRoZSBjYXNlcwotICAg
IGludCBiYXNlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCBUZXh0SXRlcmF0b3JCZWhh
dmlvcjo6RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwotCi0gICAg
Ly8gQ2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBoeXBlcmxpbmsgYmVsb25ncyB0byBhIGxpc3Qg
aXRlbS4KLSAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgbGVuZ3RoIG9mIHRo
ZSBpdGVtJ3MgbWFya2VyCi0gICAgQVhDb3JlT2JqZWN0KiBwYXJlbnQgPSBvYmoucGFyZW50T2Jq
ZWN0VW5pZ25vcmVkKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KCkgfHwgIXBhcmVudC0+aXNMaXN0SXRlbSgpKQotICAgICAgICByZXR1
cm4gYmFzZUxlbmd0aDsKLQotICAgIC8vIEV2ZW4gaWYgd2UgZG9uJ3QgZXhwb3NlIGxpc3QgbWFy
a2VycyB0byBBc3Npc3RpdmUKLSAgICAvLyBUZWNobm9sb2dpZXMsIHdlIG5lZWQgdG8gaGF2ZSBh
IHdheSB0byBtZWFzdXJlIHRoZWlyIGxlbmd0aAotICAgIC8vIGZvciB0aG9zZSBjYXNlcyB3aGVu
IGl0J3MgbmVlZGVkIHRvIHRha2UgaXQgaW50byBhY2NvdW50Ci0gICAgLy8gc2VwYXJhdGVseSAo
YXMgaW4gZ2V0QWNjZXNzaWJpbGl0eU9iamVjdEZvck9mZnNldCkKLSAgICBBWENvcmVPYmplY3Qq
IG1hcmtlck9iaiA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOwotICAgIGlmICghbWFya2VyT2JqKQot
ICAgICAgICByZXR1cm4gYmFzZUxlbmd0aDsKLQotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBtYXJrZXJPYmotPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJMaXN0TWFya2VyPihy
ZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBiYXNlTGVuZ3RoOwotCi0gICAgcmV0dXJuIGJhc2VM
ZW5ndGggKyBkb3duY2FzdDxSZW5kZXJMaXN0TWFya2VyPigqcmVuZGVyZXIpLnRleHRXaXRoU3Vm
Zml4KCkubGVuZ3RoKCk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxp
bmtHZXRTdGFydEluZGV4KEF0a0h5cGVybGluayogbGluaykKLXsKLSAgICBhdXRvKiBhY2Nlc3Np
YmxlSHlwZXJsaW5rID0gV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5LKGxpbmspOwotICAgIHJl
dHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5w
cml2LT5oeXBlcmxpbmtJbXBsLCAwKTsKLQotICAgIGF1dG8mIGNvcmVPYmplY3QgPSB3ZWJraXRB
Y2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2
LT5oeXBlcmxpbmtJbXBsKTsKLSAgICBBWENvcmVPYmplY3QqIHBhcmVudFVuaWdub3JlZCA9IGNv
cmVPYmplY3QucGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgaWYgKCFwYXJlbnRVbmlnbm9y
ZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTm9kZSogbm9kZSA9IGNvcmVPYmplY3Qubm9k
ZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBwYXJl
bnROb2RlID0gcGFyZW50VW5pZ25vcmVkLT5ub2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKQot
ICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiByYW5nZUxlbmd0aEZvck9iamVjdChjb3Jl
T2JqZWN0LCBtYWtlU2ltcGxlUmFuZ2UoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHBhcmVu
dE5vZGUpLCBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSkpKTsKLX0KLQotc3RhdGlj
IGdpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldEVuZEluZGV4KEF0a0h5cGVybGluayog
bGluaykKLXsKLSAgICBhdXRvKiBhY2Nlc3NpYmxlSHlwZXJsaW5rID0gV0VCS0lUX0FDQ0VTU0lC
TEVfSFlQRVJMSU5LKGxpbmspOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52
YWxpZChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsLCAwKTsKLQotICAg
IGF1dG8mIGNvcmVPYmplY3QgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVj
dChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsKTsKLSAgICBBWENvcmVP
YmplY3QqIHBhcmVudFVuaWdub3JlZCA9IGNvcmVPYmplY3QucGFyZW50T2JqZWN0VW5pZ25vcmVk
KCk7Ci0gICAgaWYgKCFwYXJlbnRVbmlnbm9yZWQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Tm9kZSogbm9kZSA9IGNvcmVPYmplY3Qubm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBOb2RlKiBwYXJlbnROb2RlID0gcGFyZW50VW5pZ25vcmVkLT5ub2Rl
KCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVy
biByYW5nZUxlbmd0aEZvck9iamVjdChjb3JlT2JqZWN0LCBtYWtlU2ltcGxlUmFuZ2UoZmlyc3RQ
b3NpdGlvbkluT3JCZWZvcmVOb2RlKHBhcmVudE5vZGUpLCBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJO
b2RlKG5vZGUpKSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJs
aW5rSXNWYWxpZChBdGtIeXBlcmxpbmsqIGxpbmspCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZUh5
cGVybGluayA9IFdFQktJVF9BQ0NFU1NJQkxFX0hZUEVSTElOSyhsaW5rKTsKLSAgICByZXR1cm5W
YWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoYWNjZXNzaWJsZUh5cGVybGluay0+cHJpdi0+
aHlwZXJsaW5rSW1wbCwgRkFMU0UpOwotCi0gICAgLy8gTGluayBpcyB2YWxpZCBmb3IgdGhlIHdo
b2xlIG9iamVjdCdzIGxpZmV0aW1lCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnaW50
IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXROQW5jaG9ycyhBdGtIeXBlcmxpbmsqIGxpbmsp
Ci17Ci0gICAgLy8gRklYTUUgRG8gTk9UIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBv
ZiBhbiBBdGtPYmplY3QKLSAgICAvLyBpbXBsZW1lbnRpbmcgQXRrSHlwZXJsaW5rSW1wbCBpbiBl
dmVyeSBpbnN0YW5jZSBvZiBBdGtIeXBlckxpbmsKLSAgICBhdXRvKiBhY2Nlc3NpYmxlSHlwZXJs
aW5rID0gV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5LKGxpbmspOwotICAgIHJldHVyblZhbElm
V2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBl
cmxpbmtJbXBsLCAwKTsKLQotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0QWNjZXNzaWJsZUh5cGVybGlua0lzU2VsZWN0ZWRMaW5rKEF0a0h5cGVybGluayogbGluaykK
LXsKLSAgICBhdXRvKiBhY2Nlc3NpYmxlSHlwZXJsaW5rID0gV0VCS0lUX0FDQ0VTU0lCTEVfSFlQ
RVJMSU5LKGxpbmspOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChh
Y2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsLCBGQUxTRSk7Ci0KLSAgICAv
LyBOb3QgaW1wbGVtZW50ZWQ6IHRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBpbiBBVEsgbm93
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyB2
b2lkIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BJZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCi17Ci0gICAg
YXV0byogYWNjZXNzaWJsZUh5cGVybGluayA9IFdFQktJVF9BQ0NFU1NJQkxFX0hZUEVSTElOSyhv
YmplY3QpOwotCi0gICAgc3dpdGNoIChwcm9wSWQpIHsKLSAgICBjYXNlIFBST1BfSFlQRVJMSU5L
X0lNUEw6Ci0gICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgYWNjZXNzaWJsZUh5cGVy
bGluay0+cHJpdi0+aHlwZXJsaW5rSW1wbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJ
ZCwgcHNwZWMpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZUh5cGVy
bGlua1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFs
dWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBhdXRvKiBhY2Nlc3NpYmxlSHlw
ZXJsaW5rID0gV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5LKG9iamVjdCk7Ci0KLSAgICBzd2l0
Y2ggKHByb3BJZCkgewotICAgIGNhc2UgUFJPUF9IWVBFUkxJTktfSU1QTDoKLSAgICAgICAgYWNj
ZXNzaWJsZUh5cGVybGluay0+cHJpdi0+aHlwZXJsaW5rSW1wbCA9IFdFQktJVF9BQ0NFU1NJQkxF
KGdfdmFsdWVfZ2V0X29iamVjdCh2YWx1ZSkpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
SWQsIHBzcGVjKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdF9hY2Nlc3NpYmxlX2h5
cGVybGlua19jbGFzc19pbml0KFdlYktpdEFjY2Vzc2libGVIeXBlcmxpbmtDbGFzcyoga2xhc3Mp
Ci17Ci0gICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFz
cyk7Ci0gICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRBY2Nlc3NpYmxlSHlw
ZXJsaW5rU2V0UHJvcGVydHk7Ci0gICAgZ29iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJr
aXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0UHJvcGVydHk7Ci0KLSAgICBBdGtIeXBlcmxpbmtDbGFz
cyogYXRrSHlwZXJsaW5rQ2xhc3MgPSBBVEtfSFlQRVJMSU5LX0NMQVNTKGtsYXNzKTsKLSAgICBh
dGtIeXBlcmxpbmtDbGFzcy0+Z2V0X3VyaSA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRV
Ukk7Ci0gICAgYXRrSHlwZXJsaW5rQ2xhc3MtPmdldF9vYmplY3QgPSB3ZWJraXRBY2Nlc3NpYmxl
SHlwZXJsaW5rR2V0T2JqZWN0OwotICAgIGF0a0h5cGVybGlua0NsYXNzLT5nZXRfc3RhcnRfaW5k
ZXggPSB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0U3RhcnRJbmRleDsKLSAgICBhdGtIeXBl
cmxpbmtDbGFzcy0+Z2V0X2VuZF9pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRF
bmRJbmRleDsKLSAgICBhdGtIeXBlcmxpbmtDbGFzcy0+aXNfdmFsaWQgPSB3ZWJraXRBY2Nlc3Np
YmxlSHlwZXJsaW5rSXNWYWxpZDsKLSAgICBhdGtIeXBlcmxpbmtDbGFzcy0+Z2V0X25fYW5jaG9y
cyA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXROQW5jaG9yczsKLSAgICBhdGtIeXBlcmxp
bmtDbGFzcy0+aXNfc2VsZWN0ZWRfbGluayA9IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJc1Nl
bGVjdGVkTGluazsKLQotICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLCBQUk9QX0hZUEVSTElOS19JTVBMLAotICAgICAgICBnX3BhcmFtX3NwZWNfb2JqZWN0
KCJoeXBlcmxpbmstaW1wbCIsCi0gICAgICAgICAgICAiSHlwZXJsaW5rIGltcGxlbWVudGF0aW9u
IiwKLSAgICAgICAgICAgICJUaGUgYXNzb2NpYXRlZCBXZWJLaXRBY2Nlc3NpYmxlIGluc3RhbmNl
LiIsCi0gICAgICAgICAgICBXRUJLSVRfVFlQRV9BQ0NFU1NJQkxFLAotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NP
TlNUUlVDVF9PTkxZKSkpOwotfQotCi1XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rKiB3ZWJraXRB
Y2Nlc3NpYmxlSHlwZXJsaW5rR2V0T3JDcmVhdGUoQXRrSHlwZXJsaW5rSW1wbCogaHlwZXJsaW5r
SW1wbCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfSVNfSFlQRVJMSU5LX0lNUEwo
aHlwZXJsaW5rSW1wbCksIG51bGxwdHIpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19BQ0NFU1NJQkxFKGh5cGVybGlua0ltcGwpLCBudWxscHRyKTsKLQotICAgIGlmIChhdXRv
KiBjdXJyZW50SHlwZXJMaW5rID0gZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoaHlwZXJsaW5r
SW1wbCksICJ3ZWJraXQtYWNjZXNzaWJsZS1oeXBlcmxpbmstb2JqZWN0IikpCi0gICAgICAgIHJl
dHVybiBXRUJLSVRfQUNDRVNTSUJMRV9IWVBFUkxJTksoZ19vYmplY3RfcmVmKGN1cnJlbnRIeXBl
ckxpbmspKTsKLQotICAgIGF1dG8qIGh5cGVybGluayA9IFdFQktJVF9BQ0NFU1NJQkxFX0hZUEVS
TElOSyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQUNDRVNTSUJMRV9IWVBFUkxJTkssICJoeXBl
cmxpbmstaW1wbCIsIGh5cGVybGlua0ltcGwsIG51bGxwdHIpKTsKLSAgICBnX29iamVjdF9zZXRf
ZGF0YV9mdWxsKEdfT0JKRUNUKGh5cGVybGlua0ltcGwpLCAid2Via2l0LWFjY2Vzc2libGUtaHlw
ZXJsaW5rLW9iamVjdCIsIGh5cGVybGluaywgZ19vYmplY3RfdW5yZWYpOwotICAgIHJldHVybiBo
eXBlcmxpbms7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFU
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVIeXBlcmxpbmsuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVIeXBlcmxpbmsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MTlmYTljMWRjN2Y3Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEg
Uy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRL
KQotCi0jaW5jbHVkZSA8YXRrL2F0ay5oPgotCi1HX0JFR0lOX0RFQ0xTCi0KLSNkZWZpbmUgV0VC
S0lUX1RZUEVfQUNDRVNTSUJMRV9IWVBFUkxJTksgICAgICAgICAgICAgKHdlYmtpdF9hY2Nlc3Np
YmxlX2h5cGVybGlua19nZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfQUNDRVNTSUJMRV9IWVBF
UkxJTksob2JqKSAgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFdFQktJVF9UWVBFX0FDQ0VTU0lCTEVfSFlQRVJMSU5LLCBXZWJLaXRBY2Nlc3NpYmxlSHlwZXJs
aW5rKSkKLSNkZWZpbmUgV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5LX0NMQVNTKGtsYXNzKSAg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFdFQktJVF9UWVBFX0FDQ0VTU0lC
TEVfSFlQRVJMSU5LLCBXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rQ2xhc3MpKQotI2RlZmluZSBX
RUJLSVRfSVNfQUNDRVNTSUJMRV9IWVBFUkxJTksob2JqKSAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEVfSFlQRVJMSU5LKSkK
LSNkZWZpbmUgV0VCS0lUX0lTX0FDQ0VTU0lCTEVfSFlQRVJMSU5LX0NMQVNTKGtsYXNzKSAgKEdf
VFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX0FDQ0VTU0lCTEVfSFlQ
RVJMSU5LKSkKLSNkZWZpbmUgV0VCS0lUX0FDQ0VTU0lCTEVfSFlQRVJMSU5LX0dFVF9DTEFTUyhv
YmopICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksIFdFQktJVF9UWVBFX0FDQ0VT
U0lCTEVfSFlQRVJMSU5LLCBXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rQ2xhc3MpKQotCi10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluayAgICAgICAgV2ViS2l0QWNjZXNz
aWJsZUh5cGVybGluazsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5r
Q2xhc3MgICBXZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rQ2xhc3M7Ci10eXBlZGVmIHN0cnVjdCBf
V2ViS2l0QWNjZXNzaWJsZUh5cGVybGlua1ByaXZhdGUgV2ViS2l0QWNjZXNzaWJsZUh5cGVybGlu
a1ByaXZhdGU7Ci0KLXN0cnVjdCBfV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluayB7Ci0gICAgQXRr
SHlwZXJsaW5rIHBhcmVudDsKLQotICAgIFdlYktpdEFjY2Vzc2libGVIeXBlcmxpbmtQcml2YXRl
ICpwcml2OwotfTsKLQotc3RydWN0IF9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJsaW5rQ2xhc3Mgewot
ICAgIEF0a0h5cGVybGlua0NsYXNzIHBhcmVudENsYXNzOwotfTsKLQotR1R5cGUgd2Via2l0X2Fj
Y2Vzc2libGVfaHlwZXJsaW5rX2dldF90eXBlKHZvaWQpOwotCi1XZWJLaXRBY2Nlc3NpYmxlSHlw
ZXJsaW5rKiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0T3JDcmVhdGUoQXRrSHlwZXJsaW5r
SW1wbCopOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkp
ICYmIFVTRShBVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlQWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MzZlNTg1MDExYTYuLjAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlQWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFs
b256bwotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAqIFBvcnRpb25zIGZyb20gTW96aWxsYSBh
MTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29kZSBpcyBt
b3ppbGxhLm9yZyBjb2RlLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3Jp
Z2luYWwgQ29kZSBpcwotICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgotICogUG9ydGlvbnMgY3Jl
YXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgotICog
dGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
LSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUFjdGlvbi5oIgotCi0j
aWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlICJBY2Nlc3Np
YmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJX
ZWJLaXRBY2Nlc3NpYmxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlKEF0a0FjdGlvbiogYWN0aW9uKQotewotICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUo
YWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gJndlYmtpdEFjY2Vzc2li
bGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NFU1NJQkxFKGFjdGlvbikpOwotfQot
Ci1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUFjdGlvbkRvQWN0aW9uKEF0a0FjdGlv
biogYWN0aW9uLCBnaW50IGluZGV4KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19J
U19BQ1RJT04oYWN0aW9uKSwgRkFMU0UpOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKCFpbmRl
eCwgRkFMU0UpOwotCi0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdF
QktJVF9BQ0NFU1NJQkxFKGFjdGlvbiksIEZBTFNFKTsKLQotICAgIHJldHVybiBjb3JlKGFjdGlv
biktPnBlcmZvcm1EZWZhdWx0QWN0aW9uKCk7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vz
c2libGVBY3Rpb25HZXROQWN0aW9ucyhBdGtBY3Rpb24qIGFjdGlvbikKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChBVEtfSVNfQUNUSU9OKGFjdGlvbiksIDApOwotICAgIHJldHVyblZhbElm
V2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShhY3Rpb24pLCAwKTsK
LQotICAgIHJldHVybiAxOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2li
bGVBY3Rpb25HZXREZXNjcmlwdGlvbihBdGtBY3Rpb24qIGFjdGlvbiwgZ2ludCkKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChBVEtfSVNfQUNUSU9OKGFjdGlvbiksIDApOwotICAgIHJldHVy
blZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShhY3Rpb24p
LCAwKTsKLQotICAgIC8vIFRPRE86IE5lZWQgYSB3YXkgdG8gcHJvdmlkZS9sb2NhbGl6ZSBhY3Rp
b24gZGVzY3JpcHRpb25zLgotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICIiOwot
fQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXRLZXliaW5k
aW5nKEF0a0FjdGlvbiogYWN0aW9uLCBnaW50KQotewotICAgIGF1dG8qIGFjY2Vzc2libGUgPSBX
RUJLSVRfQUNDRVNTSUJMRShhY3Rpb24pOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJs
ZUlzSW52YWxpZChhY2Nlc3NpYmxlLCBudWxscHRyKTsKLQotICAgIC8vIEZJWE1FOiBDb25zdHJ1
Y3QgYSBwcm9wZXIga2V5YmluZGluZyBzdHJpbmcuCi0gICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2li
bGVDYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5KGFjY2Vzc2libGUsIEF0a0NhY2hlZEFjdGlvbktl
eUJpbmRpbmcsIGNvcmUoYWN0aW9uKS0+YWNjZXNzS2V5KCkudXRmOCgpKTsKLX0KLQotc3RhdGlj
IGNvbnN0IGdjaGFyKiB3ZWJraXRBY2Nlc3NpYmxlQWN0aW9uR2V0TmFtZShBdGtBY3Rpb24qIGFj
dGlvbiwgZ2ludCkKLXsKLSAgICBhdXRvKiBhY2Nlc3NpYmxlID0gV0VCS0lUX0FDQ0VTU0lCTEUo
YWN0aW9uKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoYWNjZXNz
aWJsZSwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJsZUNhY2hlQW5kUmV0
dXJuQXRrUHJvcGVydHkoYWNjZXNzaWJsZSwgQXRrQ2FjaGVkQWN0aW9uTmFtZSwgY29yZShhY3Rp
b24pLT5sb2NhbGl6ZWRBY3Rpb25WZXJiKCkudXRmOCgpKTsKLX0KLQotdm9pZCB3ZWJraXRBY2Nl
c3NpYmxlQWN0aW9uSW50ZXJmYWNlSW5pdChBdGtBY3Rpb25JZmFjZSogaWZhY2UpCi17Ci0gICAg
aWZhY2UtPmRvX2FjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25Eb0FjdGlvbjsKLSAgICBp
ZmFjZS0+Z2V0X25fYWN0aW9ucyA9IHdlYmtpdEFjY2Vzc2libGVBY3Rpb25HZXROQWN0aW9uczsK
LSAgICBpZmFjZS0+Z2V0X2Rlc2NyaXB0aW9uID0gd2Via2l0QWNjZXNzaWJsZUFjdGlvbkdldERl
c2NyaXB0aW9uOwotICAgIGlmYWNlLT5nZXRfa2V5YmluZGluZyA9IHdlYmtpdEFjY2Vzc2libGVB
Y3Rpb25HZXRLZXliaW5kaW5nOwotICAgIGlmYWNlLT5nZXRfbmFtZSA9IHdlYmtpdEFjY2Vzc2li
bGVBY3Rpb25HZXROYW1lOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VBY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VB
Y3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJkNzU5NmQ5MzdiLi4wMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUFjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEphbiBBbG9uem8KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21h
IG9uY2UKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVk
ZSA8YXRrL2F0ay5oPgotCi12b2lkIHdlYmtpdEFjY2Vzc2libGVBY3Rpb25JbnRlcmZhY2VJbml0
KEF0a0FjdGlvbklmYWNlKik7Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYg
VVNFKEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VDb21wb25lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4NDU3YWFkZjA1OS4uMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VDb21wb25lbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBK
YW4gQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0g
KiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6Ci0gKgot
ICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5p
dGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3Rl
bXMsIEluYy4KLSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFy
ZSBDb3B5cmlnaHQgKEMpIDIwMDIKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2li
bGVJbnRlcmZhY2VDb21wb25lbnQuaCIKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBV
U0UoQVRLKQotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUgIkZy
YW1lVmlldy5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGUuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3Np
YmxlVXRpbC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGljIEludFBvaW50
IGF0a1RvQ29udGVudHMoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCYgY29yZU9iamVjdCwgQXRr
Q29vcmRUeXBlIGNvb3JkVHlwZSwgZ2ludCB4LCBnaW50IHkpCi17Ci0gICAgYXV0byogZnJhbWVW
aWV3ID0gY29yZU9iamVjdC5kb2N1bWVudEZyYW1lVmlldygpOwotICAgIGlmICghZnJhbWVWaWV3
KQotICAgICAgICByZXR1cm4geyB4LCB5IH07Ci0KLSAgICBzd2l0Y2ggKGNvb3JkVHlwZSkgewot
ICAgIGNhc2UgQVRLX1hZX1NDUkVFTjoKLSAgICAgICAgcmV0dXJuIGZyYW1lVmlldy0+c2NyZWVu
VG9Db250ZW50cyh7IHgsIHkgfSk7Ci0gICAgY2FzZSBBVEtfWFlfV0lORE9XOgotICAgICAgICBy
ZXR1cm4gZnJhbWVWaWV3LT53aW5kb3dUb0NvbnRlbnRzKHsgeCwgeSB9KTsKLSNpZiBBVEtfQ0hF
Q0tfVkVSU0lPTigyLCAzMCwgMCkKLSAgICBjYXNlIEFUS19YWV9QQVJFTlQ6Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICByZXR1cm4g
eyB4LCB5IH07Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdlYmtpdEFjY2Vzc2libGVDb21wb25l
bnRSZWZBY2Nlc3NpYmxlQXRQb2ludChBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCB4LCBn
aW50IHksIEF0a0Nvb3JkVHlwZSBjb29yZFR5cGUpCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZSA9
IFdFQktJVF9BQ0NFU1NJQkxFKGNvbXBvbmVudCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nl
c3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGUsIG51bGxwdHIpOwotCi0gICAgYXV0byYgY29yZU9i
amVjdCA9IHdlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KGFjY2Vzc2libGUp
OwotICAgIGF1dG8qIHRhcmdldCA9IGRvd25jYXN0PEFjY2Vzc2liaWxpdHlPYmplY3Q+KGNvcmVP
YmplY3QuYWNjZXNzaWJpbGl0eUhpdFRlc3QoYXRrVG9Db250ZW50cyhjb3JlT2JqZWN0LCBjb29y
ZFR5cGUsIHgsIHkpKSk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKGF1dG8qIHdyYXBwZXIgPSB0YXJnZXQtPndyYXBwZXIoKSkKLSAgICAgICAg
cmV0dXJuIEFUS19PQkpFQ1QoZ19vYmplY3RfcmVmKHdyYXBwZXIpKTsKLQotICAgIHJldHVybiBu
dWxscHRyOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlQ29tcG9uZW50R2V0RXh0
ZW50cyhBdGtDb21wb25lbnQqIGNvbXBvbmVudCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lk
dGgsIGdpbnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSkKLXsKLSAgICBhdXRvKiBh
Y2Nlc3NpYmxlID0gV0VCS0lUX0FDQ0VTU0lCTEUoY29tcG9uZW50KTsKLSAgICByZXR1cm5JZldl
YktpdEFjY2Vzc2libGVJc0ludmFsaWQoYWNjZXNzaWJsZSk7Ci0KLSAgICBhdXRvJiBjb3JlT2Jq
ZWN0ID0gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoYWNjZXNzaWJsZSk7
Ci0gICAgY29udGVudHNSZWxhdGl2ZVRvQXRrQ29vcmRpbmF0ZVR5cGUoJmNvcmVPYmplY3QsIGNv
b3JkVHlwZSwgc25hcHBlZEludFJlY3QoY29yZU9iamVjdC5lbGVtZW50UmVjdCgpKSwgeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlQ29t
cG9uZW50R3JhYkZvY3VzKEF0a0NvbXBvbmVudCogY29tcG9uZW50KQotewotICAgIGF1dG8qIGFj
Y2Vzc2libGUgPSBXRUJLSVRfQUNDRVNTSUJMRShjb21wb25lbnQpOwotICAgIHJldHVyblZhbElm
V2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChhY2Nlc3NpYmxlLCBGQUxTRSk7Ci0KLSAgICBhdXRv
JiBjb3JlT2JqZWN0ID0gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoYWNj
ZXNzaWJsZSk7Ci0gICAgY29yZU9iamVjdC5zZXRGb2N1c2VkKHRydWUpOwotICAgIHJldHVybiBj
b3JlT2JqZWN0LmlzRm9jdXNlZCgpOwotfQotCi0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgMzAs
IDApCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudFNjcm9sbFRvKEF0
a0NvbXBvbmVudCogY29tcG9uZW50LCBBdGtTY3JvbGxUeXBlIHNjcm9sbFR5cGUpCi17Ci0gICAg
YXV0byogYWNjZXNzaWJsZSA9IFdFQktJVF9BQ0NFU1NJQkxFKGNvbXBvbmVudCk7Ci0gICAgcmV0
dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGUsIEZBTFNFKTsKLQot
ICAgIFNjcm9sbEFsaWdubWVudCBhbGlnblg7Ci0gICAgU2Nyb2xsQWxpZ25tZW50IGFsaWduWTsK
LQotICAgIHN3aXRjaCAoc2Nyb2xsVHlwZSkgewotICAgIGNhc2UgQVRLX1NDUk9MTF9UT1BfTEVG
VDoKLSAgICAgICAgYWxpZ25YID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkxlZnRBbHdheXM7Ci0g
ICAgICAgIGFsaWduWSA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub3BBbHdheXM7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQVRLX1NDUk9MTF9CT1RUT01fUklHSFQ6Ci0gICAgICAgIGFsaWdu
WCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25SaWdodEFsd2F5czsKLSAgICAgICAgYWxpZ25ZID0g
U2Nyb2xsQWxpZ25tZW50OjphbGlnbkJvdHRvbUFsd2F5czsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBBVEtfU0NST0xMX1RPUF9FREdFOgotICAgIGNhc2UgQVRLX1NDUk9MTF9CT1RUT01fRURH
RToKLSAgICAgICAgLy8gQWxpZ24gdG8gYSBwYXJ0aWN1bGFyIGVkZ2UgaXMgbm90IHN1cHBvcnRl
ZCwgaXQncyBhbHdheXMgdGhlIGNsb3Nlc3QgZWRnZS4KLSAgICAgICAgYWxpZ25YID0gU2Nyb2xs
QWxpZ25tZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOwotICAgICAgICBhbGlnblkgPSBTY3JvbGxB
bGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
QVRLX1NDUk9MTF9MRUZUX0VER0U6Ci0gICAgY2FzZSBBVEtfU0NST0xMX1JJR0hUX0VER0U6Ci0g
ICAgICAgIC8vIEFsaWduIHRvIGEgcGFydGljdWxhciBlZGdlIGlzIG5vdCBzdXBwb3J0ZWQsIGl0
J3MgYWx3YXlzIHRoZSBjbG9zZXN0IGVkZ2UuCi0gICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZDsKLSAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25t
ZW50OjphbGlnbkNlbnRlcklmTmVlZGVkOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFUS19T
Q1JPTExfQU5ZV0hFUkU6Ci0gICAgICAgIGFsaWduWCA9IFNjcm9sbEFsaWdubWVudDo6YWxpZ25D
ZW50ZXJJZk5lZWRlZDsKLSAgICAgICAgYWxpZ25ZID0gU2Nyb2xsQWxpZ25tZW50OjphbGlnbkNl
bnRlcklmTmVlZGVkOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBhdXRvJiBjb3JlT2Jq
ZWN0ID0gd2Via2l0QWNjZXNzaWJsZUdldEFjY2Vzc2liaWxpdHlPYmplY3QoYWNjZXNzaWJsZSk7
Ci0gICAgY29yZU9iamVjdC5zY3JvbGxUb01ha2VWaXNpYmxlKHsgU2VsZWN0aW9uUmV2ZWFsTW9k
ZTo6UmV2ZWFsLCBhbGlnblgsIGFsaWduWSwgU2hvdWxkQWxsb3dDcm9zc09yaWdpblNjcm9sbGlu
Zzo6WWVzIH0pOwotCi0gICAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRBY2Nlc3NpYmxlQ29tcG9uZW50U2Nyb2xsVG9Qb2ludChBdGtDb21wb25lbnQqIGNvbXBvbmVu
dCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgZ2ludCB4LCBnaW50IHkpCi17Ci0gICAgYXV0byog
YWNjZXNzaWJsZSA9IFdFQktJVF9BQ0NFU1NJQkxFKGNvbXBvbmVudCk7Ci0gICAgcmV0dXJuVmFs
SWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKGFjY2Vzc2libGUsIEZBTFNFKTsKLQotICAgIGF1
dG8mIGNvcmVPYmplY3QgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChh
Y2Nlc3NpYmxlKTsKLQotICAgIEludFBvaW50IHBvaW50KHgsIHkpOwotICAgIGlmIChjb29yZFR5
cGUgPT0gQVRLX1hZX1NDUkVFTikgewotICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gY29y
ZU9iamVjdC5kb2N1bWVudEZyYW1lVmlldygpKQotICAgICAgICAgICAgcG9pbnQgPSBmcmFtZVZp
ZXctPmNvbnRlbnRzVG9XaW5kb3coZnJhbWVWaWV3LT5zY3JlZW5Ub0NvbnRlbnRzKHBvaW50KSk7
Ci0gICAgfQotCi0gICAgY29yZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KHBvaW50KTsKLQot
ICAgIHJldHVybiBUUlVFOwotfQotI2VuZGlmCi0KLXZvaWQgd2Via2l0QWNjZXNzaWJsZUNvbXBv
bmVudEludGVyZmFjZUluaXQoQXRrQ29tcG9uZW50SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNl
LT5yZWZfYWNjZXNzaWJsZV9hdF9wb2ludCA9IHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRSZWZB
Y2Nlc3NpYmxlQXRQb2ludDsKLSAgICBpZmFjZS0+Z2V0X2V4dGVudHMgPSB3ZWJraXRBY2Nlc3Np
YmxlQ29tcG9uZW50R2V0RXh0ZW50czsKLSAgICBpZmFjZS0+Z3JhYl9mb2N1cyA9IHdlYmtpdEFj
Y2Vzc2libGVDb21wb25lbnRHcmFiRm9jdXM7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgMzAs
IDApCi0gICAgaWZhY2UtPnNjcm9sbF90byA9IHdlYmtpdEFjY2Vzc2libGVDb21wb25lbnRTY3Jv
bGxUbzsKLSAgICBpZmFjZS0+c2Nyb2xsX3RvX3BvaW50ID0gd2Via2l0QWNjZXNzaWJsZUNvbXBv
bmVudFNjcm9sbFRvUG9pbnQ7Ci0jZW5kaWYKLX0KLQotI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJ
QklMSVRZKSAmJiBVU0UoQVRLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVudC5oIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUNvbXBvbmVu
dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGFmMzQ3YzQ0YzIuLjAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlQ29tcG9uZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSmFuIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEyIElnYWxpYSBTLkwuCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNp
bmNsdWRlIDxhdGsvYXRrLmg+Ci0KLXZvaWQgd2Via2l0QWNjZXNzaWJsZUNvbXBvbmVudEludGVy
ZmFjZUluaXQoQXRrQ29tcG9uZW50SWZhY2UqKTsKLQotI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJ
QklMSVRZKSAmJiBVU0UoQVRLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VEb2N1bWVu
dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTAwZTcxYjMxNi4uMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VEb2N1bWVudC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChD
KSAyMDA5IEphbiBBbG9uem8KLSAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgotICog
Q29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBQb3J0aW9ucyBm
cm9tIE1vemlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6Ci0gKgotICogVGhlIE9yaWdp
bmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9w
ZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAq
IFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQg
KEMpIDIwMDIKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VE
b2N1bWVudC5oIgotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJs
ZS5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRShkb2N1bWVudCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuICZ3ZWJraXRBY2Nlc3NpYmxlR2V0QWNj
ZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShkb2N1bWVudCkpOwotfQotCi1zdGF0
aWMgY29uc3QgZ2NoYXIqIGRvY3VtZW50QXR0cmlidXRlVmFsdWUoQXRrRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBnY2hhciogYXR0cmlidXRlKQotewotICAgIERvY3VtZW50KiBjb3JlRG9jdW1l
bnQgPSBjb3JlKGRvY3VtZW50KS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWNvcmVEb2N1bWVudCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTdHJpbmcgdmFsdWU7Ci0gICAgQXRrQ2FjaGVkUHJv
cGVydHkgYXRrQ2FjaGVkUHJvcGVydHk7Ci0KLSAgICBpZiAoIWdfYXNjaWlfc3RyY2FzZWNtcChh
dHRyaWJ1dGUsICJEb2NUeXBlIikgJiYgY29yZURvY3VtZW50LT5kb2N0eXBlKCkpIHsKLSAgICAg
ICAgdmFsdWUgPSBjb3JlRG9jdW1lbnQtPmRvY3R5cGUoKS0+bmFtZSgpOwotICAgICAgICBhdGtD
YWNoZWRQcm9wZXJ0eSA9IEF0a0NhY2hlZERvY3VtZW50VHlwZTsKLSAgICB9IGVsc2UgaWYgKCFn
X2FzY2lpX3N0cmNhc2VjbXAoYXR0cmlidXRlLCAiRW5jb2RpbmciKSkgewotICAgICAgICB2YWx1
ZSA9IGNvcmVEb2N1bWVudC0+Y2hhcnNldCgpOwotICAgICAgICBhdGtDYWNoZWRQcm9wZXJ0eSA9
IEF0a0NhY2hlZERvY3VtZW50RW5jb2Rpbmc7Ci0gICAgfSBlbHNlIGlmICghZ19hc2NpaV9zdHJj
YXNlY21wKGF0dHJpYnV0ZSwgIlVSSSIpKSB7Ci0gICAgICAgIHZhbHVlID0gY29yZURvY3VtZW50
LT5kb2N1bWVudFVSSSgpOwotICAgICAgICBhdGtDYWNoZWRQcm9wZXJ0eSA9IEF0a0NhY2hlZERv
Y3VtZW50VVJJOwotICAgIH0KLQotICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gd2Via2l0QWNjZXNzaWJsZUNhY2hlQW5kUmV0dXJuQXRrUHJvcGVydHkoV0VCS0lUX0FD
Q0VTU0lCTEUoZG9jdW1lbnQpLCBhdGtDYWNoZWRQcm9wZXJ0eSwgdmFsdWUudXRmOCgpKTsKLQot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3QgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVE
b2N1bWVudEdldEF0dHJpYnV0ZVZhbHVlKEF0a0RvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgZ2No
YXIqIGF0dHJpYnV0ZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfSVNfRE9DVU1F
TlQoZG9jdW1lbnQpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFs
aWQoV0VCS0lUX0FDQ0VTU0lCTEUoZG9jdW1lbnQpLCAwKTsKLQotICAgIHJldHVybiBkb2N1bWVu
dEF0dHJpYnV0ZVZhbHVlKGRvY3VtZW50LCBhdHRyaWJ1dGUpOwotfQotCi1zdGF0aWMgQXRrQXR0
cmlidXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxlRG9jdW1lbnRHZXRBdHRyaWJ1dGVzKEF0a0RvY3Vt
ZW50KiBkb2N1bWVudCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfSVNfRE9DVU1F
TlQoZG9jdW1lbnQpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFs
aWQoV0VCS0lUX0FDQ0VTU0lCTEUoZG9jdW1lbnQpLCAwKTsKLQotICAgIEF0a0F0dHJpYnV0ZVNl
dCogYXR0cmlidXRlU2V0ID0gbnVsbHB0cjsKLSAgICBjb25zdCBnY2hhciogYXR0cmlidXRlc1td
ID0geyAiRG9jVHlwZSIsICJFbmNvZGluZyIsICJVUkkiIH07Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR19OX0VMRU1FTlRTKGF0dHJpYnV0ZXMpOyBpKyspIHsKLSAgICAgICAgY29u
c3QgZ2NoYXIqIHZhbHVlID0gZG9jdW1lbnRBdHRyaWJ1dGVWYWx1ZShkb2N1bWVudCwgYXR0cmli
dXRlc1tpXSk7Ci0gICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZVNldCA9
IGFkZFRvQXRrQXR0cmlidXRlU2V0KGF0dHJpYnV0ZVNldCwgYXR0cmlidXRlc1tpXSwgdmFsdWUp
OwotICAgIH0KLQotICAgIHJldHVybiBhdHRyaWJ1dGVTZXQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBn
Y2hhciogd2Via2l0QWNjZXNzaWJsZURvY3VtZW50R2V0TG9jYWxlKEF0a0RvY3VtZW50KiBkb2N1
bWVudCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfSVNfRE9DVU1FTlQoZG9jdW1l
bnQpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lU
X0FDQ0VTU0lCTEUoZG9jdW1lbnQpLCAwKTsKLQotICAgIC8vIFRoZSBsb2dpYyB0byByZXNvbHZl
IGxvY2FsZSBoYXMgYmVlbiBtb3ZlZCB0bwotICAgIC8vIEF0a09iamVjdDo6Z2V0X29iamVjdF9s
b2NhbGUoKSB2aXJ0dWFsIG1ldGhvZC4gSG93ZXZlciwgdG8gYXZvaWQgYnJlYWtpbmcKLSAgICAv
LyBjbGllbnRzIGV4cGVjdGluZyB0aGUgZGVwcmVjYXRlZCBBdGtEb2N1bWVudElmYWNlOjpnZXRf
ZG9jdW1lbnRfbG9jYWxlKCkKLSAgICAvLyB0byBiZSBvdmVycmlkZW4sIG1ldGhvZCBpcyBrZXB0
IGFuZCBjaGFpbmVkIHVwIHRvCi0gICAgLy8gQXRrT2JqZWN0OjpnZXRfb2JqZWN0X2xvY2FsZSgp
LiA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTY0Nz4KLSAgICBy
ZXR1cm4gYXRrX29iamVjdF9nZXRfb2JqZWN0X2xvY2FsZShBVEtfT0JKRUNUKGRvY3VtZW50KSk7
Ci19Ci0KLXZvaWQgd2Via2l0QWNjZXNzaWJsZURvY3VtZW50SW50ZXJmYWNlSW5pdChBdGtEb2N1
bWVudElmYWNlKiBpZmFjZSkKLXsKLSAgICBpZmFjZS0+Z2V0X2RvY3VtZW50X2F0dHJpYnV0ZV92
YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdldEF0dHJpYnV0ZVZhbHVlOwotICAgIGlm
YWNlLT5nZXRfZG9jdW1lbnRfYXR0cmlidXRlcyA9IHdlYmtpdEFjY2Vzc2libGVEb2N1bWVudEdl
dEF0dHJpYnV0ZXM7Ci0gICAgaWZhY2UtPmdldF9kb2N1bWVudF9sb2NhbGUgPSB3ZWJraXRBY2Nl
c3NpYmxlRG9jdW1lbnRHZXRMb2NhbGU7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3Vt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlRG9jdW1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmJlYWFl
ZDM5NjY3Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZURvY3VtZW50LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShB
VEspCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0KLXZvaWQgd2Via2l0QWNjZXNzaWJsZURvY3Vt
ZW50SW50ZXJmYWNlSW5pdChBdGtEb2N1bWVudElmYWNlKik7Ci0KLSNlbmRpZiAvLyBFTkFCTEUo
QUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZUVkaXRhYmxlVGV4dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5NGVi
MDAxODI2YS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
YXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTExeSwg
Y29weXJpZ2h0IGFzIGZvbGxvd3M6Ci0gKgotICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxs
YS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFs
IENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAqIFBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKLSAqIHRoZSBJ
bml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRleHQuaCIKLQot
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWRpdG9y
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIldlYktpdEFjY2Vzc2libGUuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlVXRp
bC5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RhdGljIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmUoQXRrRWRpdGFibGVUZXh0KiB0ZXh0KQotewotICAgIGlmICghV0VCS0lUX0lT
X0FDQ0VTU0lCTEUodGV4dCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuICZ3ZWJr
aXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0
KSk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0
UnVuQXR0cmlidXRlcyhBdGtFZGl0YWJsZVRleHQqIHRleHQsIEF0a0F0dHJpYnV0ZVNldCosIGdp
bnQsIGdpbnQpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX0lTX0VESVRBQkxFX1RF
WFQodGV4dCksIEZBTFNFKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFs
aWQoV0VCS0lUX0FDQ0VTU0lCTEUodGV4dCksIEZBTFNFKTsKLQotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxl
RWRpdGFibGVUZXh0U2V0VGV4dENvbnRlbnRzKEF0a0VkaXRhYmxlVGV4dCogdGV4dCwgY29uc3Qg
Z2NoYXIqIHN0cmluZykKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEFUS19JU19FRElUQUJMRV9U
RVhUKHRleHQpKTsKLSAgICByZXR1cm5JZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lU
X0FDQ0VTU0lCTEUodGV4dCkpOwotCi0gICAgLy8gRklYTUU6IHN0cmluZyBudWxsY2hlY2s/Ci0g
ICAgY29yZSh0ZXh0KS0+c2V0VmFsdWUoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsKLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEluc2VydFRleHQoQXRrRWRp
dGFibGVUZXh0KiB0ZXh0LCBjb25zdCBnY2hhciogc3RyaW5nLCBnaW50IGxlbmd0aCwgZ2ludCog
cG9zaXRpb24pCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChBVEtfSVNfRURJVEFCTEVfVEVYVCh0
ZXh0KSk7Ci0gICAgcmV0dXJuSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NF
U1NJQkxFKHRleHQpKTsKLQotICAgIGlmICghc3RyaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICAvLyBG
SVhNRTogTm90IGltcGxlbWVudGVkIGluIFdlYkNvcmUKLSAgICAvLyBjb3JlT2JqZWN0LT5zZXRT
ZWxlY3RlZFRleHRSYW5nZShQbGFpblRleHRSYW5nZSgqcG9zaXRpb24sIDApKTsKLSAgICAvLyBj
b3JlT2JqZWN0LT5zZXRTZWxlY3RlZFRleHQoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKTsKLQot
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3QtPmRvY3VtZW50KCk7Ci0gICAgaWYg
KCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVmlzaWJsZVBvc2l0aW9uUmFuZ2UoY29yZU9iamVjdC0+
dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZSgqcG9zaXRpb24sIDAp
KSk7Ci0gICAgY29yZU9iamVjdC0+c2V0Rm9jdXNlZCh0cnVlKTsKLSAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHNldCBwb3NpdGlvbiB0byB0aGUgYWN0dWFsIGluc2VydGVkIHRleHQgbGVuZ3RoLCB3
aGljaCBtYXkgYmUgbGVzcyB0aGFuIHRoYXQgcmVxdWVzdGVkLgotICAgIGlmIChkb2N1bWVudC0+
ZnJhbWUoKS0+ZWRpdG9yKCkuaW5zZXJ0VGV4dFdpdGhvdXRTZW5kaW5nVGV4dEV2ZW50KFN0cmlu
Zzo6ZnJvbVVURjgoc3RyaW5nKS5zdWJzdHJpbmcoMCwgbGVuZ3RoKSwgZmFsc2UsIDApKQotICAg
ICAgICAqcG9zaXRpb24gKz0gbGVuZ3RoOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3Np
YmxlRWRpdGFibGVUZXh0Q29weVRleHQoQXRrRWRpdGFibGVUZXh0KiB0ZXh0LCBnaW50LCBnaW50
KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVRLX0lTX0VESVRBQkxFX1RFWFQodGV4dCkpOwot
ICAgIHJldHVybklmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0
ZXh0KSk7Ci0KLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRB
Y2Nlc3NpYmxlRWRpdGFibGVUZXh0Q3V0VGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGdpbnQs
IGdpbnQpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChBVEtfSVNfRURJVEFCTEVfVEVYVCh0ZXh0
KSk7Ci0gICAgcmV0dXJuSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJ
QkxFKHRleHQpKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdl
YmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHREZWxldGVUZXh0KEF0a0VkaXRhYmxlVGV4dCogdGV4
dCwgZ2ludCBzdGFydFBvcywgZ2ludCBlbmRQb3MpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChB
VEtfSVNfRURJVEFCTEVfVEVYVCh0ZXh0KSk7Ci0gICAgcmV0dXJuSWZXZWJLaXRBY2Nlc3NpYmxl
SXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHRleHQpKTsKLQotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVt
ZW50ZWQgaW4gV2ViQ29yZQotICAgIC8vIGNvcmVPYmplY3QtPnNldFNlbGVjdGVkVGV4dFJhbmdl
KFBsYWluVGV4dFJhbmdlKHN0YXJ0UG9zLCBlbmRQb3MgLSBzdGFydFBvcykpOwotICAgIC8vIGNv
cmVPYmplY3QtPnNldFNlbGVjdGVkVGV4dChTdHJpbmcoKSk7Ci0KLSAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQgfHwgIWRv
Y3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb3JlT2JqZWN0LT5zZXRT
ZWxlY3RlZFZpc2libGVQb3NpdGlvblJhbmdlKGNvcmVPYmplY3QtPnZpc2libGVQb3NpdGlvblJh
bmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyAtIHN0YXJ0UG9zKSkp
OwotICAgIGNvcmVPYmplY3QtPnNldEZvY3VzZWQodHJ1ZSk7Ci0gICAgZG9jdW1lbnQtPmZyYW1l
KCktPmVkaXRvcigpLnBlcmZvcm1EZWxldGUoKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0QWNj
ZXNzaWJsZUVkaXRhYmxlVGV4dFBhc3RlVGV4dChBdGtFZGl0YWJsZVRleHQqIHRleHQsIGdpbnQp
Ci17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChBVEtfSVNfRURJVEFCTEVfVEVYVCh0ZXh0KSk7Ci0g
ICAgcmV0dXJuSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHRl
eHQpKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgd2Via2l0QWNjZXNzaWJs
ZUVkaXRhYmxlVGV4dEludGVyZmFjZUluaXQoQXRrRWRpdGFibGVUZXh0SWZhY2UqIGlmYWNlKQot
ewotICAgIGlmYWNlLT5zZXRfcnVuX2F0dHJpYnV0ZXMgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFi
bGVUZXh0U2V0UnVuQXR0cmlidXRlczsKLSAgICBpZmFjZS0+c2V0X3RleHRfY29udGVudHMgPSB3
ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0U2V0VGV4dENvbnRlbnRzOwotICAgIGlmYWNlLT5p
bnNlcnRfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVFZGl0YWJsZVRleHRJbnNlcnRUZXh0OwotICAg
IGlmYWNlLT5jb3B5X3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxlRWRpdGFibGVUZXh0Q29weVRleHQ7
Ci0gICAgaWZhY2UtPmN1dF90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4dEN1dFRl
eHQ7Ci0gICAgaWZhY2UtPmRlbGV0ZV90ZXh0ID0gd2Via2l0QWNjZXNzaWJsZUVkaXRhYmxlVGV4
dERlbGV0ZVRleHQ7Ci0gICAgaWZhY2UtPnBhc3RlX3RleHQgPSB3ZWJraXRBY2Nlc3NpYmxlRWRp
dGFibGVUZXh0UGFzdGVUZXh0OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VFZGl0YWJsZVRl
eHQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJ
bnRlcmZhY2VFZGl0YWJsZVRleHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY1
ZjdkMjY5YmVkLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUVkaXRhYmxlVGV4dC5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklM
SVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSA8YXRrL2F0ay5oPgotCi12b2lkIHdlYmtpdEFj
Y2Vzc2libGVFZGl0YWJsZVRleHRJbnRlcmZhY2VJbml0KEF0a0VkaXRhYmxlVGV4dElmYWNlKik7
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VIeXBlcmxpbmtJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNmE4ZWRkNDk2NzM3Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVy
bGlua0ltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0g
KgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0g
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVybGlua0ltcGwuaCIKLQot
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiV2ViS2l0
QWNjZXNzaWJsZUh5cGVybGluay5oIgotCi1zdGF0aWMgQXRrSHlwZXJsaW5rKiB3ZWJraXRBY2Nl
c3NpYmxlSHlwZXJsaW5rSW1wbEdldEh5cGVybGluayhBdGtIeXBlcmxpbmtJbXBsKiBoeXBlcmxp
bmspCi17Ci0gICAgcmV0dXJuIEFUS19IWVBFUkxJTksod2Via2l0QWNjZXNzaWJsZUh5cGVybGlu
a0dldE9yQ3JlYXRlKGh5cGVybGluaykpOwotfQotCi12b2lkIHdlYmtpdEFjY2Vzc2libGVIeXBl
cmxpbmtJbXBsSW50ZXJmYWNlSW5pdChBdGtIeXBlcmxpbmtJbXBsSWZhY2UqIGlmYWNlKQotewot
ICAgIGlmYWNlLT5nZXRfaHlwZXJsaW5rID0gd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0ltcGxH
ZXRIeXBlcmxpbms7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNF
KEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VIeXBlcmxpbmtJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJsaW5rSW1wbC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDkyYmY3Yzk3MDkuLjAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlSHlwZXJsaW5rSW1wbC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSA8
YXRrL2F0ay5oPgotCi12b2lkIHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtJbXBsSW50ZXJmYWNl
SW5pdChBdGtIeXBlcmxpbmtJbXBsSWZhY2UqKTsKLQotI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJ
QklMSVRZKSAmJiBVU0UoQVRLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0
ZXh0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzYmFiOTZmMGQ0Li4wMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUludGVyZmFjZUh5cGVydGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUh5
cGVydGV4dC5oIgotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNp
bmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJs
ZS5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCi0KLXVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtIeXBlcnRl
eHQqIGh5cGVydGV4dCkKLXsKLSAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKGh5cGVydGV4
dCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuICZ3ZWJraXRBY2Nlc3NpYmxlR2V0
QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRShoeXBlcnRleHQpKTsKLX0KLQot
c3RhdGljIEF0a0h5cGVybGluayogd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmsoQXRr
SHlwZXJ0ZXh0KiBoeXBlcnRleHQsIGdpbnQgaW5kZXgpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoQVRLX0hZUEVSVEVYVChoeXBlcnRleHQpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktp
dEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUoaHlwZXJ0ZXh0KSwgMCk7Ci0K
LSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0
b3ImIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQpLT5jaGlsZHJlbigpOwotICAgIGlmIChpbmRl
eCA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA+PSBjaGlsZHJlbi5zaXplKCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgZ2ludCBjdXJyZW50TGluayA9IC0xOwotICAgIGZv
ciAoY29uc3QgYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewotICAgICAgICBBWENvcmVPYmplY3Qq
IGNvcmVDaGlsZCA9IGNoaWxkLmdldCgpOwotICAgICAgICBpZiAoIWNvcmVDaGlsZC0+YWNjZXNz
aWJpbGl0eUlzSWdub3JlZCgpKSB7Ci0gICAgICAgICAgICBhdXRvKiBheE9iamVjdCA9IGNvcmVD
aGlsZC0+d3JhcHBlcigpOwotICAgICAgICAgICAgaWYgKCFheE9iamVjdCB8fCAhQVRLX0lTX0hZ
UEVSTElOS19JTVBMKGF4T2JqZWN0KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAg
ICAgICAgICAgY3VycmVudExpbmsrKzsKLSAgICAgICAgICAgIGlmIChpbmRleCAhPSBjdXJyZW50
TGluaykKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgcmV0dXJuIGF0
a19oeXBlcmxpbmtfaW1wbF9nZXRfaHlwZXJsaW5rKEFUS19IWVBFUkxJTktfSU1QTChheE9iamVj
dCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBnaW50
IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3MoQXRrSHlwZXJ0ZXh0KiBoeXBlcnRl
eHQpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX0hZUEVSVEVYVChoeXBlcnRleHQp
LCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FD
Q0VTU0lCTEUoaHlwZXJ0ZXh0KSwgMCk7Ci0KLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuID0gY29yZShoeXBlcnRleHQp
LT5jaGlsZHJlbigpOwotICAgIGdpbnQgbGlua3NGb3VuZCA9IDA7Ci0gICAgZm9yIChjb25zdCBh
dXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgIEFYQ29yZU9iamVjdCogY29yZUNoaWxk
ID0gY2hpbGQuZ2V0KCk7Ci0gICAgICAgIGlmICghY29yZUNoaWxkLT5hY2Nlc3NpYmlsaXR5SXNJ
Z25vcmVkKCkpIHsKLSAgICAgICAgICAgIGF1dG8qIGF4T2JqZWN0ID0gY29yZUNoaWxkLT53cmFw
cGVyKCk7Ci0gICAgICAgICAgICBpZiAoYXhPYmplY3QgJiYgQVRLX0lTX0hZUEVSTElOS19JTVBM
KGF4T2JqZWN0KSkKLSAgICAgICAgICAgICAgICBsaW5rc0ZvdW5kKys7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4gbGlua3NGb3VuZDsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0QWNj
ZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRleChBdGtIeXBlcnRleHQqIGh5cGVydGV4dCwgZ2lu
dCBjaGFySW5kZXgpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX0hZUEVSVEVYVCho
eXBlcnRleHQpLCAtMSk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlk
KFdFQktJVF9BQ0NFU1NJQkxFKGh5cGVydGV4dCksIC0xKTsKLQotICAgIHNpemVfdCBsaW5rc0Nv
dW50ID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldE5MaW5rcyhoeXBlcnRleHQpOwotICAg
IGlmICghbGlua3NDb3VudCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaW5rc0NvdW50OyBpKyspIHsKLSAgICAgICAgQXRrSHlwZXJsaW5rKiBoeXBl
cmxpbmsgPSBBVEtfSFlQRVJMSU5LKHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rKGh5
cGVydGV4dCwgaSkpOwotICAgICAgICBnaW50IHN0YXJ0SW5kZXggPSBhdGtfaHlwZXJsaW5rX2dl
dF9zdGFydF9pbmRleChoeXBlcmxpbmspOwotICAgICAgICBnaW50IGVuZEluZGV4ID0gYXRrX2h5
cGVybGlua19nZXRfZW5kX2luZGV4KGh5cGVybGluayk7Ci0KLSAgICAgICAgLy8gQ2hlY2sgaWYg
dGhlIGNoYXIgaW5kZXggaW4gdGhlIGxpbmsncyBvZmZzZXQgcmFuZ2UKLSAgICAgICAgaWYgKHN0
YXJ0SW5kZXggPD0gY2hhckluZGV4ICYmIGNoYXJJbmRleCA8IGVuZEluZGV4KQotICAgICAgICAg
ICAgcmV0dXJuIGk7Ci0gICAgfQotCi0gICAgLy8gTm90IGZvdW5kIGlmIHJlYWNoZWQKLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLXZvaWQgd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEludGVyZmFjZUlu
aXQoQXRrSHlwZXJ0ZXh0SWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5nZXRfbGluayA9IHdl
YmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXRMaW5rOwotICAgIGlmYWNlLT5nZXRfbl9saW5rcyA9
IHdlYmtpdEFjY2Vzc2libGVIeXBlcnRleHRHZXROTGlua3M7Ci0gICAgaWZhY2UtPmdldF9saW5r
X2luZGV4ID0gd2Via2l0QWNjZXNzaWJsZUh5cGVydGV4dEdldExpbmtJbmRleDsKLX0KLQotI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSHlwZXJ0ZXh0LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGMzZjYxMzg1ZjQ5Yi4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VIeXBl
cnRleHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFC
TEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKLQotI2luY2x1ZGUgPGF0ay9hdGsuaD4KLQot
dm9pZCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJ0ZXh0SW50ZXJmYWNlSW5pdChBdGtIeXBlcnRleHRJ
ZmFjZSopOwotCi0jZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlSW50ZXJmYWNlSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjg2MDYwMjcxNTVmLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVh
bnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzCi0gKgotICogUG9ydGlvbnMgZnJvbSBNb3ppbGxhIGExMXksIGNvcHlyaWdo
dCBhcyBmb2xsb3dzOgotICoKLSAqIFRoZSBPcmlnaW5hbCBDb2RlIGlzIG1vemlsbGEub3JnIGNv
ZGUuCi0gKgotICogVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlz
Ci0gKiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCi0gKiBQb3J0aW9ucyBjcmVhdGVkIGJ5IHRoZSBJ
bml0aWFsIERldmVsb3BlciBhcmUgQ29weXJpZ2h0IChDKSAyMDAyCi0gKiB0aGUgSW5pdGlhbCBE
ZXZlbG9wZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaCIKLQotI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU9iamVjdC5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlLmgiCi0j
aW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlKEF0a0ltYWdlKiBpbWFnZSkK
LXsKLSAgICBpZiAoIVdFQktJVF9JU19BQ0NFU1NJQkxFKGltYWdlKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gJndlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0
KFdFQktJVF9BQ0NFU1NJQkxFKGltYWdlKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEFjY2Vz
c2libGVJbWFnZUdldEltYWdlUG9zaXRpb24oQXRrSW1hZ2UqIGltYWdlLCBnaW50KiB4LCBnaW50
KiB5LCBBdGtDb29yZFR5cGUgY29vcmRUeXBlKQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVRL
X0lNQUdFKGltYWdlKSk7Ci0gICAgcmV0dXJuSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdF
QktJVF9BQ0NFU1NJQkxFKGltYWdlKSk7Ci0KLSAgICBJbnRSZWN0IHJlY3QgPSBzbmFwcGVkSW50
UmVjdChjb3JlKGltYWdlKS0+ZWxlbWVudFJlY3QoKSk7Ci0gICAgY29udGVudHNSZWxhdGl2ZVRv
QXRrQ29vcmRpbmF0ZVR5cGUoY29yZShpbWFnZSksIGNvb3JkVHlwZSwgcmVjdCwgeCwgeSk7Ci19
Ci0KLXN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VEZXNj
cmlwdGlvbihBdGtJbWFnZSogaW1hZ2UpCi17Ci0gICAgYXV0byogYWNjZXNzaWJsZSA9IFdFQktJ
VF9BQ0NFU1NJQkxFKGltYWdlKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0lu
dmFsaWQoYWNjZXNzaWJsZSwgbnVsbHB0cik7Ci0KLSAgICByZXR1cm4gd2Via2l0QWNjZXNzaWJs
ZUNhY2hlQW5kUmV0dXJuQXRrUHJvcGVydHkoYWNjZXNzaWJsZSwgQXRrQ2FjaGVkSW1hZ2VEZXNj
cmlwdGlvbiwgYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uKGNvcmUoaW1hZ2UpKS51dGY4KCkpOwot
fQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZVNpemUoQXRrSW1h
Z2UqIGltYWdlLCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0KQotewotICAgIGdfcmV0dXJuX2lm
X2ZhaWwoQVRLX0lNQUdFKGltYWdlKSk7Ci0gICAgcmV0dXJuSWZXZWJLaXRBY2Nlc3NpYmxlSXNJ
bnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKGltYWdlKSk7Ci0KLSAgICBJbnRTaXplIHNpemUgPSBz
bmFwcGVkSW50UmVjdChjb3JlKGltYWdlKS0+ZWxlbWVudFJlY3QoKSkuc2l6ZSgpOwotCi0gICAg
aWYgKHdpZHRoKQotICAgICAgICAqd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgaWYgKGhlaWdo
dCkKLSAgICAgICAgKmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci19Ci0KLXZvaWQgd2Via2l0QWNj
ZXNzaWJsZUltYWdlSW50ZXJmYWNlSW5pdChBdGtJbWFnZUlmYWNlKiBpZmFjZSkKLXsKLSAgICBp
ZmFjZS0+Z2V0X2ltYWdlX3Bvc2l0aW9uID0gd2Via2l0QWNjZXNzaWJsZUltYWdlR2V0SW1hZ2VQ
b3NpdGlvbjsKLSAgICBpZmFjZS0+Z2V0X2ltYWdlX2Rlc2NyaXB0aW9uID0gd2Via2l0QWNjZXNz
aWJsZUltYWdlR2V0SW1hZ2VEZXNjcmlwdGlvbjsKLSAgICBpZmFjZS0+Z2V0X2ltYWdlX3NpemUg
PSB3ZWJraXRBY2Nlc3NpYmxlSW1hZ2VHZXRJbWFnZVNpemU7Ci19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlSW1hZ2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MGQ1ZDhjZWIxY2Q3Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZUltYWdlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
Ci0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkp
ICYmIFVTRShBVEspCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0KLXZvaWQgd2Via2l0QWNjZXNz
aWJsZUltYWdlSW50ZXJmYWNlSW5pdChBdGtJbWFnZUlmYWNlKik7Ci0KLSNlbmRpZiAvLyBFTkFC
TEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVy
ZmFjZVNlbGVjdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YTE5OThj
YmNkZi4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMjU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIw
MTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBQb3J0aW9ucyBmcm9tIE1vemlsbGEgYTExeSwg
Y29weXJpZ2h0IGFzIGZvbGxvd3M6Ci0gKgotICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxs
YS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFs
IENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAqIFBvcnRpb25zIGNyZWF0ZWQg
YnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDIKLSAqIHRoZSBJ
bml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAot
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaCIKLQotI2lm
IEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiQWNjZXNzaWJp
bGl0eUxpc3RCb3guaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVk
ZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNs
dWRlICJXZWJLaXRBY2Nlc3NpYmxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwu
aCIKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uKQotewotICAgIGlmICghV0VCS0lUX0lT
X0FDQ0VTU0lCTEUoc2VsZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gJndlYmtpdEFjY2Vzc2libGVHZXRBY2Nlc3NpYmlsaXR5T2JqZWN0KFdFQktJVF9BQ0NF
U1NJQkxFKHNlbGVjdGlvbikpOwotfQotCi1zdGF0aWMgQVhDb3JlT2JqZWN0KiBsaXN0T2JqZWN0
Rm9yQ29yZVNlbGVjdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uKQotewot
ICAgIC8vIE9ubHkgbGlzdCBib3hlcyBhbmQgbWVudSBsaXN0cyBzdXBwb3J0ZWQgc28gZmFyLgot
ICAgIGlmICghY29yZVNlbGVjdGlvbi0+aXNMaXN0Qm94KCkgJiYgIWNvcmVTZWxlY3Rpb24tPmlz
TWVudUxpc3QoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBGb3IgbGlzdCBi
b3hlcyB0aGUgbGlzdCBvYmplY3QgaXMganVzdCBpdHNlbGYuCi0gICAgaWYgKGNvcmVTZWxlY3Rp
b24tPmlzTGlzdEJveCgpKQotICAgICAgICByZXR1cm4gY29yZVNlbGVjdGlvbjsKLQotICAgIC8v
IEZvciBtZW51IGxpc3RzIHdlIG5lZWQgdG8gcmV0dXJuIHRoZSBmaXJzdCBhY2Nlc3NpYmxlIGNo
aWxkLAotICAgIC8vIHdpdGggcm9sZSBNZW51TGlzdFBvcHVwUm9sZSwgc2luY2UgdGhhdCdzIHRo
ZSBvbmUgaG9sZGluZyB0aGUgbGlzdAotICAgIC8vIG9mIGl0ZW1zIHdpdGggcm9sZSBNZW51TGlz
dE9wdGlvblJvbGUuCi0gICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxkcmVuKCk7Ci0g
ICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
QVhDb3JlT2JqZWN0KiBsaXN0T2JqZWN0ID0gY2hpbGRyZW4uYXQoMCkuZ2V0KCk7Ci0gICAgaWYg
KCFsaXN0T2JqZWN0LT5pc01lbnVMaXN0UG9wdXAoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gbGlzdE9iamVjdDsKLX0KLQotc3RhdGljIEFYQ29yZU9iamVjdCogb3B0
aW9uRnJvbUxpc3QoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgpCi17Ci0gICAg
QWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAg
ICBpZiAoIWNvcmVTZWxlY3Rpb24gfHwgaW5kZXggPCAwKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIE5lZWQgdG8gc2VsZWN0IHRoZSBwcm9wZXIgbGlzdCBvYmplY3QgZGVwZW5k
aW5nIG9uIHRoZSB0eXBlLgotICAgIEFYQ29yZU9iamVjdCogbGlzdE9iamVjdCA9IGxpc3RPYmpl
Y3RGb3JDb3JlU2VsZWN0aW9uKGNvcmVTZWxlY3Rpb24pOwotICAgIGlmICghbGlzdE9iamVjdCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIG9wdGlvbnMgPSBsaXN0T2JqZWN0LT5jaGls
ZHJlbigpOwotICAgIGlmIChpbmRleCA8IHN0YXRpY19jYXN0PGdpbnQ+KG9wdGlvbnMuc2l6ZSgp
KSkKLSAgICAgICAgcmV0dXJuIG9wdGlvbnMuYXQoaW5kZXgpLmdldCgpOwotCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBBWENvcmVPYmplY3QqIG9wdGlvbkZyb21TZWxlY3Rpb24o
QXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgpCi17Ci0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZVNlbGVjdGlvbiA9IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVT
ZWxlY3Rpb24gfHwgIWNvcmVTZWxlY3Rpb24tPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgp
IHx8IGluZGV4IDwgMCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBUaGlzIG1l
dGhvZCBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eSBleHBlY3RlZCBieSBhdGtfc2VsZWN0aW9u
X3JlZl9zZWxlY3Rpb24oKS4KLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIEFUSyBkb2N1bWVudGF0
aW9uIGZvciB0aGlzIG1ldGhvZCwgdGhlIGluZGV4IGlzICJhIGdpbnQgc3BlY2lmeWluZwotICAg
IC8vIHRoZSBpbmRleCBpbiB0aGUgc2VsZWN0aW9uIHNldC4gKGUuZy4gdGhlIGl0aCBzZWxlY3Rp
b24gYXMgb3Bwb3NlZCB0byB0aGUgaXRoIGNoaWxkKS4iCi0gICAgLy8gVGhlcmUgaXMgZGlmZmVy
ZW50IEFQSSwgbmFtZWx5IGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoKSwgd2hlbiB0
aGUgaXRoIGNoaWxkCi0gICAgLy8gZnJvbSB0aGUgc2V0IG9mIGFsbCBjaGlsZHJlbiBpcyBzb3Vn
aHQuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9y
IG9wdGlvbnM7Ci0gICAgY29yZVNlbGVjdGlvbi0+c2VsZWN0ZWRDaGlsZHJlbihvcHRpb25zKTsK
LSAgICBpZiAoaW5kZXggPCBzdGF0aWNfY2FzdDxnaW50PihvcHRpb25zLnNpemUoKSkpCi0gICAg
ICAgIHJldHVybiBvcHRpb25zLmF0KGluZGV4KS5nZXQoKTsKLQotICAgIHJldHVybiBudWxscHRy
OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkFkZFNlbGVj
dGlvbihBdGtTZWxlY3Rpb24qIHNlbGVjdGlvbiwgZ2ludCBpbmRleCkKLXsKLSAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChBVEtfU0VMRUNUSU9OKHNlbGVjdGlvbiksIEZBTFNFKTsKLSAgICByZXR1
cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUoc2VsZWN0
aW9uKSwgRkFMU0UpOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZVNlbGVjdGlvbiA9
IGNvcmUoc2VsZWN0aW9uKTsKLSAgICBpZiAoIWNvcmVTZWxlY3Rpb24pCi0gICAgICAgIHJldHVy
biBGQUxTRTsKLQotICAgIEFYQ29yZU9iamVjdCogb3B0aW9uID0gb3B0aW9uRnJvbUxpc3Qoc2Vs
ZWN0aW9uLCBpbmRleCk7Ci0gICAgaWYgKG9wdGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+aXNMaXN0
Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKSkgewotICAgICAgICBvcHRpb24t
PnNldFNlbGVjdGVkKHRydWUpOwotICAgICAgICByZXR1cm4gb3B0aW9uLT5pc1NlbGVjdGVkKCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9u
KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19TRUxFQ1RJT04oc2VsZWN0aW9uKSwg
RkFMU0UpOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRf
QUNDRVNTSUJMRShzZWxlY3Rpb24pLCBGQUxTRSk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmICghY29yZVNlbGVjdGlv
bikKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgaWYgKGlzPEFjY2Vz
c2liaWxpdHlMaXN0Qm94PigqY29yZVNlbGVjdGlvbikpIHsKLSAgICAgICAgLy8gU2V0IHRoZSBs
aXN0IG9mIHNlbGVjdGVkIGl0ZW1zIHRvIGFuIGVtcHR5IGxpc3Q7IHRoZW4gdmVyaWZ5IHRoYXQg
aXQgd29ya2VkLgotICAgICAgICBhdXRvJiBsaXN0Qm94ID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0
eUxpc3RCb3g+KCpjb3JlU2VsZWN0aW9uKTsKLSAgICAgICAgbGlzdEJveC5zZXRTZWxlY3RlZENo
aWxkcmVuKHNlbGVjdGVkSXRlbXMpOwotICAgICAgICBsaXN0Qm94LnNlbGVjdGVkQ2hpbGRyZW4o
c2VsZWN0ZWRJdGVtcyk7Ci0gICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1zLmlzRW1wdHkoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRB
Y2Nlc3NpYmxlU2VsZWN0aW9uUmVmU2VsZWN0aW9uKEF0a1NlbGVjdGlvbiogc2VsZWN0aW9uLCBn
aW50IGluZGV4KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19TRUxFQ1RJT04oc2Vs
ZWN0aW9uKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZh
bGlkKFdFQktJVF9BQ0NFU1NJQkxFKHNlbGVjdGlvbiksIG51bGxwdHIpOwotCi0gICAgQVhDb3Jl
T2JqZWN0KiBvcHRpb24gPSBvcHRpb25Gcm9tU2VsZWN0aW9uKHNlbGVjdGlvbiwgaW5kZXgpOwot
ICAgIGlmIChvcHRpb24pIHsKLSAgICAgICAgYXV0byogY2hpbGQgPSBvcHRpb24tPndyYXBwZXIo
KTsKLSAgICAgICAgZ19vYmplY3RfcmVmKGNoaWxkKTsKLSAgICAgICAgcmV0dXJuIEFUS19PQkpF
Q1QoY2hpbGQpOwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgZ2lu
dCB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uR2V0U2VsZWN0aW9uQ291bnQoQXRrU2VsZWN0aW9u
KiBzZWxlY3Rpb24pCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1NFTEVDVElPTihz
ZWxlY3Rpb24pLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUoc2VsZWN0aW9uKSwgMCk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmICghY29yZVNlbGVj
dGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkg
ewotICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gY29yZVNlbGVjdGlvbi0+cmVuZGVy
ZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybiAwOwotCi0g
ICAgICAgIGludCBzZWxlY3RlZEluZGV4ID0gZG93bmNhc3Q8SFRNTFNlbGVjdEVsZW1lbnQ+KHJl
bmRlcmVyLT5ub2RlKCkpLT5zZWxlY3RlZEluZGV4KCk7Ci0gICAgICAgIHJldHVybiBzZWxlY3Rl
ZEluZGV4ID49IDAgJiYgc2VsZWN0ZWRJbmRleCA8IHN0YXRpY19jYXN0PGludD4oZG93bmNhc3Q8
SFRNTFNlbGVjdEVsZW1lbnQ+KHJlbmRlcmVyLT5ub2RlKCkpLT5saXN0SXRlbXMoKS5zaXplKCkp
OwotICAgIH0KLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJl
blZlY3RvciBzZWxlY3RlZEl0ZW1zOwotICAgIGNvcmVTZWxlY3Rpb24tPnNlbGVjdGVkQ2hpbGRy
ZW4oc2VsZWN0ZWRJdGVtcyk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGdpbnQ+KHNlbGVjdGVk
SXRlbXMuc2l6ZSgpKTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxl
Y3Rpb25Jc0NoaWxkU2VsZWN0ZWQoQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgp
Ci17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1NFTEVDVElPTihzZWxlY3Rpb24pLCBG
QUxTRSk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9B
Q0NFU1NJQkxFKHNlbGVjdGlvbiksIEZBTFNFKTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVTZWxlY3Rpb24gPSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2VsZWN0aW9u
KQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICBBWENvcmVPYmplY3QqIG9wdGlvbiA9IG9w
dGlvbkZyb21MaXN0KHNlbGVjdGlvbiwgaW5kZXgpOwotICAgIGlmIChvcHRpb24gJiYgKGNvcmVT
ZWxlY3Rpb24tPmlzTGlzdEJveCgpIHx8IGNvcmVTZWxlY3Rpb24tPmlzTWVudUxpc3QoKSkpCi0g
ICAgICAgIHJldHVybiBvcHRpb24tPmlzU2VsZWN0ZWQoKTsKLQotICAgIHJldHVybiBGQUxTRTsK
LX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2libGVTZWxlY3Rpb25SZW1vdmVTZWxl
Y3Rpb24oQXRrU2VsZWN0aW9uKiBzZWxlY3Rpb24sIGdpbnQgaW5kZXgpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoQVRLX1NFTEVDVElPTihzZWxlY3Rpb24pLCBGQUxTRSk7Ci0gICAgcmV0
dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHNlbGVj
dGlvbiksIEZBTFNFKTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVTZWxlY3Rpb24g
PSBjb3JlKHNlbGVjdGlvbik7Ci0gICAgaWYgKCFjb3JlU2VsZWN0aW9uKQotICAgICAgICByZXR1
cm4gRkFMU0U7Ci0KLSAgICBBWENvcmVPYmplY3QqIG9wdGlvbiA9IG9wdGlvbkZyb21TZWxlY3Rp
b24oc2VsZWN0aW9uLCBpbmRleCk7Ci0gICAgaWYgKG9wdGlvbiAmJiAoY29yZVNlbGVjdGlvbi0+
aXNMaXN0Qm94KCkgfHwgY29yZVNlbGVjdGlvbi0+aXNNZW51TGlzdCgpKSkgewotICAgICAgICBv
cHRpb24tPnNldFNlbGVjdGVkKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuICFvcHRpb24tPmlzU2Vs
ZWN0ZWQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRkFMU0U7Ci19Ci0KLXN0YXRpYyBnYm9vbGVh
biB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uU2VsZWN0QWxsU2VsZWN0aW9uKEF0a1NlbGVjdGlv
biogc2VsZWN0aW9uKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19TRUxFQ1RJT04o
c2VsZWN0aW9uKSwgRkFMU0UpOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52
YWxpZChXRUJLSVRfQUNDRVNTSUJMRShzZWxlY3Rpb24pLCBGQUxTRSk7Ci0KLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBjb3JlU2VsZWN0aW9uID0gY29yZShzZWxlY3Rpb24pOwotICAgIGlmICgh
Y29yZVNlbGVjdGlvbiB8fCAhY29yZVNlbGVjdGlvbi0+aXNNdWx0aVNlbGVjdGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlMaXN0Qm94Pigq
Y29yZVNlbGVjdGlvbikpIHsKLSAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBjaGlsZHJlbiA9IGNvcmVTZWxlY3Rpb24tPmNoaWxk
cmVuKCk7Ci0gICAgICAgIEFjY2Vzc2liaWxpdHlMaXN0Qm94JiBsaXN0Qm94ID0gZG93bmNhc3Q8
QWNjZXNzaWJpbGl0eUxpc3RCb3g+KCpjb3JlU2VsZWN0aW9uKTsKLSAgICAgICAgbGlzdEJveC5z
ZXRTZWxlY3RlZENoaWxkcmVuKGNoaWxkcmVuKTsKLSAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVj
dDo6QWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkSXRlbXM7Ci0gICAgICAgIGxp
c3RCb3guc2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZEl0ZW1zKTsKLSAgICAgICAgcmV0dXJuIHNl
bGVjdGVkSXRlbXMuc2l6ZSgpID09IGNoaWxkcmVuLnNpemUoKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gRkFMU0U7Ci19Ci0KLXZvaWQgd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkludGVyZmFjZUlu
aXQoQXRrU2VsZWN0aW9uSWZhY2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5hZGRfc2VsZWN0aW9u
ID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkFkZFNlbGVjdGlvbjsKLSAgICBpZmFjZS0+Y2xl
YXJfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvbkNsZWFyU2VsZWN0aW9uOwot
ICAgIGlmYWNlLT5yZWZfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlZlNl
bGVjdGlvbjsKLSAgICBpZmFjZS0+Z2V0X3NlbGVjdGlvbl9jb3VudCA9IHdlYmtpdEFjY2Vzc2li
bGVTZWxlY3Rpb25HZXRTZWxlY3Rpb25Db3VudDsKLSAgICBpZmFjZS0+aXNfY2hpbGRfc2VsZWN0
ZWQgPSB3ZWJraXRBY2Nlc3NpYmxlU2VsZWN0aW9uSXNDaGlsZFNlbGVjdGVkOwotICAgIGlmYWNl
LT5yZW1vdmVfc2VsZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVNlbGVjdGlvblJlbW92ZVNlbGVj
dGlvbjsKLSAgICBpZmFjZS0+c2VsZWN0X2FsbF9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxl
U2VsZWN0aW9uU2VsZWN0QWxsU2VsZWN0aW9uOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VT
ZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVJbnRlcmZhY2VTZWxlY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzUzMzRiM2EyMzJhLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVNlbGVjdGlvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRk
LgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8KLSAqIENvcHlyaWdodCAoQykgMjAx
MCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSA8YXRrL2F0ay5oPgotCi12b2lkIHdl
YmtpdEFjY2Vzc2libGVTZWxlY3Rpb25JbnRlcmZhY2VJbml0KEF0a1NlbGVjdGlvbklmYWNlKik7
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRl
cmZhY2VUYWJsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRB
Y2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBlNWVlYzVjNWIxZTAuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMjkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBQb3J0aW9ucyBmcm9tIE1v
emlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6Ci0gKgotICogVGhlIE9yaWdpbmFsIENv
ZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2Yg
dGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAqIFBvcnRp
b25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmlnaHQgKEMpIDIw
MDIKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZS5o
IgotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlICJB
Y2Nlc3NpYmlsaXR5TGlzdEJveC5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlPYmplY3QuaCIK
LSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5VGFibGUuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsLmgiCi0jaW5jbHVkZSAiSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MVGFibGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIldlYktpdEFjY2Vzc2libGUuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlSW50
ZXJmYWNlVGV4dC5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgiCi0KLXVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShB
dGtUYWJsZSogdGFibGUpCi17Ci0gICAgaWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRSh0YWJsZSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuICZ3ZWJraXRBY2Nlc3NpYmxl
R2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRSh0YWJsZSkpOwotfQotCi1z
dGF0aWMgQVhDb3JlT2JqZWN0KiBjZWxsKEF0a1RhYmxlKiB0YWJsZSwgZ3VpbnQgcm93LCBndWlu
dCBjb2x1bW4pCi17Ci0gICAgYXV0byogYWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICByZXR1
cm4gYWNjVGFibGUgPyBhY2NUYWJsZS0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdykg
OiBudWxscHRyOwotfQotCi1zdGF0aWMgZ2ludCBjZWxsSW5kZXgoQVhDb3JlT2JqZWN0KiBheENl
bGwsIEFjY2Vzc2liaWxpdHlUYWJsZSogYXhUYWJsZSkKLXsKLSAgICAvLyBDYWxjdWxhdGUgdGhl
IGNlbGwncyBpbmRleCBhcyBpZiB3ZSBoYWQgYSB0cmFkaXRpb25hbCBHdGsrIHRhYmxlIGluCi0g
ICAgLy8gd2hpY2ggY2VsbHMgYXJlIGFsbCBkaXJlY3QgY2hpbGRyZW4gb2YgdGhlIHRhYmxlLCBh
cnJhbmdlZCByb3ctZmlyc3QuCi0gICAgYXV0byBhbGxDZWxscyA9IGF4VGFibGUtPmNlbGxzKCk7
Ci0gICAgQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3I6Oml0ZXJhdG9y
IHBvc2l0aW9uOwotICAgIHBvc2l0aW9uID0gc3RkOjpmaW5kKGFsbENlbGxzLmJlZ2luKCksIGFs
bENlbGxzLmVuZCgpLCBheENlbGwpOwotICAgIGlmIChwb3NpdGlvbiA9PSBhbGxDZWxscy5lbmQo
KSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBwb3NpdGlvbiAtIGFsbENlbGxzLmJl
Z2luKCk7Ci19Ci0KLXN0YXRpYyBBY2Nlc3NpYmlsaXR5VGFibGVDZWxsKiBjZWxsQXRJbmRleChB
dGtUYWJsZSogdGFibGUsIGdpbnQgaW5kZXgpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
YWNjVGFibGUgPSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eVRhYmxlPigq
YWNjVGFibGUpKSB7Ci0gICAgICAgIGF1dG8gYWxsQ2VsbHMgPSBkb3duY2FzdDxBY2Nlc3NpYmls
aXR5VGFibGU+KCphY2NUYWJsZSkuY2VsbHMoKTsKLSAgICAgICAgaWYgKDAgPD0gaW5kZXggJiYg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSA8IGFsbENlbGxzLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPihhbGxDZWxsc1tpbmRl
eF0uZ2V0KCkpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIEF0a09i
amVjdCogd2Via2l0QWNjZXNzaWJsZVRhYmxlUmVmQXQoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJv
dywgZ2ludCBjb2x1bW4pCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1RBQkxFKHRh
YmxlKSwgMCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJ
VF9BQ0NFU1NJQkxFKHRhYmxlKSwgMCk7Ci0KLSAgICBhdXRvKiBheENlbGwgPSBjZWxsKHRhYmxl
LCByb3csIGNvbHVtbik7Ci0gICAgaWYgKCFheENlbGwpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgYXV0byogY2VsbCA9IGF4Q2VsbC0+d3JhcHBlcigpOwotICAgIGlmICghY2VsbCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCB0cmFuc2ZlcnMgZnVsbCBvd25lcnNo
aXAgb3ZlciB0aGUgcmV0dXJuZWQKLSAgICAvLyBBdGtPYmplY3QsIHNvIGFuIGV4dHJhIHJlZmVy
ZW5jZSBpcyBuZWVkZWQgaGVyZS4KLSAgICByZXR1cm4gQVRLX09CSkVDVChnX29iamVjdF9yZWYo
Y2VsbCkpOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJbmRleEF0
KEF0a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEFUS19UQUJMRSh0YWJsZSksIC0xKTsKLSAgICByZXR1cm5WYWxJZldlYktp
dEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAtMSk7Ci0KLSAg
ICBhdXRvKiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNvbHVtbik7Ci0gICAgQWNjZXNzaWJp
bGl0eVRhYmxlKiBheFRhYmxlID0gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPihjb3JlKHRh
YmxlKSk7Ci0gICAgcmV0dXJuIGNlbGxJbmRleChheENlbGwsIGF4VGFibGUpOwotfQotCi1zdGF0
aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5BdEluZGV4KEF0a1RhYmxlKiB0
YWJsZSwgZ2ludCBpbmRleCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUo
dGFibGUpLCAtMSk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdF
QktJVF9BQ0NFU1NJQkxFKHRhYmxlKSwgLTEpOwotCi0gICAgQWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bCogYXhDZWxsID0gY2VsbEF0SW5kZXgodGFibGUsIGluZGV4KTsKLSAgICBpZiAoYXhDZWxsKSB7
Ci0gICAgICAgIGF1dG8gY29sdW1uUmFuZ2UgPSBheENlbGwtPmNvbHVtbkluZGV4UmFuZ2UoKTsK
LSAgICAgICAgcmV0dXJuIGNvbHVtblJhbmdlLmZpcnN0OwotICAgIH0KLSAgICByZXR1cm4gLTE7
Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0F0SW5kZXgoQXRr
VGFibGUqIHRhYmxlLCBnaW50IGluZGV4KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFU
S19UQUJMRSh0YWJsZSksIC0xKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0lu
dmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAtMSk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5
VGFibGVDZWxsKiBheENlbGwgPSBjZWxsQXRJbmRleCh0YWJsZSwgaW5kZXgpOwotICAgIGlmIChh
eENlbGwpIHsKLSAgICAgICAgYXV0byByb3dSYW5nZSA9IGF4Q2VsbC0+cm93SW5kZXhSYW5nZSgp
OwotICAgICAgICByZXR1cm4gcm93UmFuZ2UuZmlyc3Q7Ci0gICAgfQotICAgIHJldHVybiAtMTsK
LX0KLQotc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0TkNvbHVtbnMoQXRrVGFi
bGUqIHRhYmxlKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19UQUJMRSh0YWJsZSks
IDApOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUND
RVNTSUJMRSh0YWJsZSksIDApOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjVGFibGUg
PSBjb3JlKHRhYmxlKTsKLSAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxl
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoaW50IGNvbHVtbkNvdW50ID0gZG93bmNh
c3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLmF4Q29sdW1uQ291bnQoKSkKLSAgICAg
ICAgcmV0dXJuIGNvbHVtbkNvdW50OwotCi0gICAgcmV0dXJuIGRvd25jYXN0PEFjY2Vzc2liaWxp
dHlUYWJsZT4oKmFjY1RhYmxlKS5jb2x1bW5Db3VudCgpOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVHZXROUm93cyhBdGtUYWJsZSogdGFibGUpCi17Ci0gICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoQVRLX1RBQkxFKHRhYmxlKSwgMCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJL
aXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHRhYmxlKSwgMCk7Ci0KLSAg
ICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2NUYWJsZSA9IGNvcmUodGFibGUpOwotICAgIGlmICgh
aXM8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIGlmIChpbnQgcm93Q291bnQgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NU
YWJsZSkuYXhSb3dDb3VudCgpKQotICAgICAgICByZXR1cm4gcm93Q291bnQ7Ci0KLSAgICByZXR1
cm4gZG93bmNhc3Q8QWNjZXNzaWJpbGl0eVRhYmxlPigqYWNjVGFibGUpLnJvd0NvdW50KCk7Ci19
Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkV4dGVudEF0KEF0
a1RhYmxlKiB0YWJsZSwgZ2ludCByb3csIGdpbnQgY29sdW1uKQotewotICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKEFUS19UQUJMRSh0YWJsZSksIDApOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNj
ZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0YWJsZSksIDApOwotCi0gICAgYXV0
byogYXhDZWxsID0gY2VsbCh0YWJsZSwgcm93LCBjb2x1bW4pOwotICAgIGlmIChheENlbGwpIHsK
LSAgICAgICAgYXV0byBjb2x1bW5SYW5nZSA9IGF4Q2VsbC0+Y29sdW1uSW5kZXhSYW5nZSgpOwot
ICAgICAgICByZXR1cm4gY29sdW1uUmFuZ2Uuc2Vjb25kOwotICAgIH0KLSAgICByZXR1cm4gMDsK
LX0KLQotc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93RXh0ZW50QXQoQXRr
VGFibGUqIHRhYmxlLCBnaW50IHJvdywgZ2ludCBjb2x1bW4pCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoQVRLX1RBQkxFKHRhYmxlKSwgMCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nl
c3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHRhYmxlKSwgMCk7Ci0KLSAgICBhdXRv
KiBheENlbGwgPSBjZWxsKHRhYmxlLCByb3csIGNvbHVtbik7Ci0gICAgaWYgKGF4Q2VsbCkgewot
ICAgICAgICBhdXRvIHJvd1JhbmdlID0gYXhDZWxsLT5yb3dJbmRleFJhbmdlKCk7Ci0gICAgICAg
IHJldHVybiByb3dSYW5nZS5zZWNvbmQ7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0
aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5IZWFkZXIoQXRrVGFi
bGUqIHRhYmxlLCBnaW50IGNvbHVtbikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtf
VEFCTEUodGFibGUpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFs
aWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlUYWJs
ZT4oKmFjY1RhYmxlKSkgewotICAgICAgICBhdXRvIGNvbHVtbkhlYWRlcnMgPSBkb3duY2FzdDxB
Y2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkuY29sdW1uSGVhZGVycygpOwotCi0gICAgICAg
IGZvciAoY29uc3QgYXV0byYgY29sdW1uSGVhZGVyIDogY29sdW1uSGVhZGVycykgewotICAgICAg
ICAgICAgYXV0byBjb2x1bW5SYW5nZSA9IGNvbHVtbkhlYWRlci0+Y29sdW1uSW5kZXhSYW5nZSgp
OwotICAgICAgICAgICAgaWYgKGNvbHVtblJhbmdlLmZpcnN0IDw9IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjb2x1bW4pICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2x1bW4pIDwgY29sdW1uUmFu
Z2UuZmlyc3QgKyBjb2x1bW5SYW5nZS5zZWNvbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEFU
S19PQkpFQ1QoY29sdW1uSGVhZGVyLT53cmFwcGVyKCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxl
VGFibGVHZXRSb3dIZWFkZXIoQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdykKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICByZXR1cm5WYWxJZldl
YktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsKLQot
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7Ci0gICAgaWYg
KGlzPEFjY2Vzc2liaWxpdHlUYWJsZT4oKmFjY1RhYmxlKSkgewotICAgICAgICBhdXRvIHJvd0hl
YWRlcnMgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGU+KCphY2NUYWJsZSkucm93SGVhZGVy
cygpOwotCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcm93SGVhZGVyIDogcm93SGVhZGVycykg
ewotICAgICAgICAgICAgYXV0byByb3dSYW5nZSA9IHJvd0hlYWRlci0+cm93SW5kZXhSYW5nZSgp
OwotICAgICAgICAgICAgaWYgKHJvd1JhbmdlLmZpcnN0IDw9IHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihyb3cpICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyb3cpIDwgcm93UmFuZ2UuZmlyc3QgKyBy
b3dSYW5nZS5zZWNvbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEFUS19PQkpFQ1Qocm93SGVh
ZGVyLT53cmFwcGVyKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1zdGF0aWMgQXRrT2JqZWN0KiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDYXB0aW9uKEF0
a1RhYmxlKiB0YWJsZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFi
bGUpLCBudWxscHRyKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCBudWxscHRyKTsKLQotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGFjY1RhYmxlID0gY29yZSh0YWJsZSk7Ci0gICAgaWYgKGFjY1RhYmxlLT5pc0FjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3QoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gYWNjVGFibGUt
Pm5vZGUoKTsKLSAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KG5vZGUpKSB7Ci0gICAg
ICAgICAgICBhdXRvIGNhcHRpb24gPSBkb3duY2FzdDxIVE1MVGFibGVFbGVtZW50Pigqbm9kZSku
Y2FwdGlvbigpOwotICAgICAgICAgICAgaWYgKGNhcHRpb24pCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEFUS19PQkpFQ1QoQWNjZXNzaWJpbGl0eU9iamVjdDo6Zmlyc3RBY2Nlc3NpYmxlT2JqZWN0
RnJvbU5vZGUoY2FwdGlvbi0+cmVuZGVyZXIoKS0+ZWxlbWVudCgpKS0+d3JhcHBlcigpKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIGNvbnN0IGdj
aGFyKiB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRDb2x1bW5EZXNjcmlwdGlvbihBdGtUYWJsZSog
dGFibGUsIGdpbnQgY29sdW1uKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19UQUJM
RSh0YWJsZSksIDApOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChX
RUJLSVRfQUNDRVNTSUJMRSh0YWJsZSksIDApOwotCi0gICAgQXRrT2JqZWN0KiBjb2x1bW5IZWFk
ZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIodGFibGUsIGNvbHVtbik7Ci0gICAgaWYg
KGNvbHVtbkhlYWRlciAmJiBBVEtfSVNfVEVYVChjb2x1bW5IZWFkZXIpKQotICAgICAgICByZXR1
cm4gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQoY29sdW1uSGVhZGVyKSwgMCwgLTEpOwotCi0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRh
YmxlR2V0Um93RGVzY3JpcHRpb24oQXRrVGFibGUqIHRhYmxlLCBnaW50IHJvdykKLXsKLSAgICBn
X3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEUodGFibGUpLCAwKTsKLSAgICByZXR1cm5WYWxJ
ZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGFibGUpLCAwKTsK
LQotICAgIEF0a09iamVjdCogcm93SGVhZGVyID0gYXRrX3RhYmxlX2dldF9yb3dfaGVhZGVyKHRh
YmxlLCByb3cpOwotICAgIGlmIChyb3dIZWFkZXIgJiYgQVRLX0lTX1RFWFQocm93SGVhZGVyKSkK
LSAgICAgICAgcmV0dXJuIGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhUKHJvd0hlYWRlciksIDAs
IC0xKTsKLQotICAgIHJldHVybiAwOwotfQotCi12b2lkIHdlYmtpdEFjY2Vzc2libGVUYWJsZUlu
dGVyZmFjZUluaXQoQXRrVGFibGVJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPnJlZl9hdCA9
IHdlYmtpdEFjY2Vzc2libGVUYWJsZVJlZkF0OwotICAgIGlmYWNlLT5nZXRfaW5kZXhfYXQgPSB3
ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRJbmRleEF0OwotICAgIGlmYWNlLT5nZXRfY29sdW1uX2F0
X2luZGV4ID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q29sdW1uQXRJbmRleDsKLSAgICBpZmFj
ZS0+Z2V0X3Jvd19hdF9pbmRleCA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0F0SW5kZXg7
Ci0gICAgaWZhY2UtPmdldF9uX2NvbHVtbnMgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXROQ29s
dW1uczsKLSAgICBpZmFjZS0+Z2V0X25fcm93cyA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldE5S
b3dzOwotICAgIGlmYWNlLT5nZXRfY29sdW1uX2V4dGVudF9hdCA9IHdlYmtpdEFjY2Vzc2libGVU
YWJsZUdldENvbHVtbkV4dGVudEF0OwotICAgIGlmYWNlLT5nZXRfcm93X2V4dGVudF9hdCA9IHdl
YmtpdEFjY2Vzc2libGVUYWJsZUdldFJvd0V4dGVudEF0OwotICAgIGlmYWNlLT5nZXRfY29sdW1u
X2hlYWRlciA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUdldENvbHVtbkhlYWRlcjsKLSAgICBpZmFj
ZS0+Z2V0X3Jvd19oZWFkZXIgPSB3ZWJraXRBY2Nlc3NpYmxlVGFibGVHZXRSb3dIZWFkZXI7Ci0g
ICAgaWZhY2UtPmdldF9jYXB0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Q2FwdGlvbjsK
LSAgICBpZmFjZS0+Z2V0X2NvbHVtbl9kZXNjcmlwdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVUYWJs
ZUdldENvbHVtbkRlc2NyaXB0aW9uOwotICAgIGlmYWNlLT5nZXRfcm93X2Rlc2NyaXB0aW9uID0g
d2Via2l0QWNjZXNzaWJsZVRhYmxlR2V0Um93RGVzY3JpcHRpb247Ci19Ci0KLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRhYmxlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjQyYjVjZmQ2YjM3Li4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5
LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0KLXZv
aWQgd2Via2l0QWNjZXNzaWJsZVRhYmxlSW50ZXJmYWNlSW5pdChBdGtUYWJsZUlmYWNlKik7Ci0K
LSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZh
Y2VUYWJsZUNlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDg2ZTdhNzU4NjViNS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
U2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0g
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUYWJsZUNlbGwuaCIKLQot
I2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZS5oIgotI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlUYWJsZUNlbGwuaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxl
LmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLXN0YXRpYyBHUHRyQXJyYXkqIGNvbnZlcnRUb0dQdHJBcnJheShjb25zdCBB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVu
KQotewotICAgIEdQdHJBcnJheSogYXJyYXkgPSBnX3B0cl9hcnJheV9uZXcoKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKLSAgICAgICAgaWYgKGF1dG8qIGF0a09i
amVjdCA9IGNoaWxkLT53cmFwcGVyKCkpCi0gICAgICAgICAgICBnX3B0cl9hcnJheV9hZGQoYXJy
YXksIGF0a09iamVjdCk7Ci0gICAgfQotICAgIHJldHVybiBhcnJheTsKLX0KLQotc3RhdGljIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIGNvcmUoQXRrVGFibGVDZWxsKiBjZWxsKQotewotICAgIGlmICgh
V0VCS0lUX0lTX0FDQ0VTU0lCTEUoY2VsbCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgcmV0dXJuICZ3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRf
QUNDRVNTSUJMRShjZWxsKSk7Ci19Ci0KLUdQdHJBcnJheSogd2Via2l0QWNjZXNzaWJsZVRhYmxl
Q2VsbEdldENvbHVtbkhlYWRlckNlbGxzKEF0a1RhYmxlQ2VsbCogY2VsbCkKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEVfQ0VMTChjZWxsKSwgbnVsbHB0cik7Ci0gICAgcmV0
dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwp
LCBudWxscHRyKTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4T2JqZWN0ID0gY29yZShj
ZWxsKTsKLSAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlUYWJsZUNlbGw+KGF4T2JqZWN0KSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGNvbHVtbkhlYWRlcnMgPSBkb3duY2Fz
dDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3QpLmNvbHVtbkhlYWRlcnMoKTsKLQot
ICAgIHJldHVybiBjb252ZXJ0VG9HUHRyQXJyYXkoY29sdW1uSGVhZGVycyk7Ci19Ci0KLUdQdHJB
cnJheSogd2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldFJvd0hlYWRlckNlbGxzKEF0a1RhYmxl
Q2VsbCogY2VsbCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEFCTEVfQ0VMTChj
ZWxsKSwgbnVsbHB0cik7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlk
KFdFQktJVF9BQ0NFU1NJQkxFKGNlbGwpLCBudWxscHRyKTsKLQotICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIGF4T2JqZWN0ID0gY29yZShjZWxsKTsKLSAgICBpZiAoIWlzPEFjY2Vzc2liaWxpdHlU
YWJsZUNlbGw+KGF4T2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
IHJvd0hlYWRlcnMgPSBkb3duY2FzdDxBY2Nlc3NpYmlsaXR5VGFibGVDZWxsPigqYXhPYmplY3Qp
LnJvd0hlYWRlcnMoKTsKLQotICAgIHJldHVybiBjb252ZXJ0VG9HUHRyQXJyYXkocm93SGVhZGVy
cyk7Ci19Ci0KLWdpbnQgd2Via2l0QWNjZXNzaWJsZVRhYmxlQ2VsbEdldENvbHVtblNwYW4oQXRr
VGFibGVDZWxsKiBjZWxsKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19UQUJMRV9D
RUxMKGNlbGwpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUoY2VsbCksIDApOwotCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCog
YXhPYmplY3QgPSBjb3JlKGNlbGwpOwotICAgIGlmICghaXM8QWNjZXNzaWJpbGl0eVRhYmxlQ2Vs
bD4oYXhPYmplY3QpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBheE9iamVjdC0+
Y29sdW1uSW5kZXhSYW5nZSgpLnNlY29uZDsKLX0KLQotZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGFi
bGVDZWxsR2V0Um93U3BhbihBdGtUYWJsZUNlbGwqIGNlbGwpCi17Ci0gICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoQVRLX1RBQkxFX0NFTEwoY2VsbCksIDApOwotICAgIHJldHVyblZhbElmV2ViS2l0
QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShjZWxsKSwgMCk7Ci0KLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9IGNvcmUoY2VsbCk7Ci0gICAgaWYgKCFpczxB
Y2Nlc3NpYmlsaXR5VGFibGVDZWxsPihheE9iamVjdCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIGF4T2JqZWN0LT5yb3dJbmRleFJhbmdlKCkuc2Vjb25kOwotfQotCi1nYm9vbGVh
biB3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0UG9zaXRpb24oQXRrVGFibGVDZWxsKiBjZWxs
LCBnaW50KiByb3csIGdpbnQqIGNvbHVtbikKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChB
VEtfVEFCTEVfQ0VMTChjZWxsKSwgZmFsc2UpOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNz
aWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRShjZWxsKSwgZmFsc2UpOwotCi0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjb3JlKGNlbGwpOwotICAgIGlmICghaXM8QWNj
ZXNzaWJpbGl0eVRhYmxlQ2VsbD4oYXhPYmplY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAocm93KSB7Ci0gICAgICAgIC8vIGFyaWEtcm93aW5kZXggaXMgMS1iYXNlZC4KLSAg
ICAgICAgaW50IHJvd0luZGV4ID0gYXhPYmplY3QtPmF4Um93SW5kZXgoKSAtIDE7Ci0gICAgICAg
IGlmIChyb3dJbmRleCA8PSAtMSkKLSAgICAgICAgICAgIHJvd0luZGV4ID0gYXhPYmplY3QtPnJv
d0luZGV4UmFuZ2UoKS5maXJzdDsKLSAgICAgICAgKnJvdyA9IHJvd0luZGV4OwotICAgIH0KLSAg
ICBpZiAoY29sdW1uKSB7Ci0gICAgICAgIC8vIGFyaWEtY29saW5kZXggaXMgMS1iYXNlZC4KLSAg
ICAgICAgaW50IGNvbHVtbkluZGV4ID0gYXhPYmplY3QtPmF4Q29sdW1uSW5kZXgoKSAtIDE7Ci0g
ICAgICAgIGlmIChjb2x1bW5JbmRleCA8PSAtMSkKLSAgICAgICAgICAgIGNvbHVtbkluZGV4ID0g
YXhPYmplY3QtPmNvbHVtbkluZGV4UmFuZ2UoKS5maXJzdDsKLSAgICAgICAgKmNvbHVtbiA9IGNv
bHVtbkluZGV4OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1BdGtPYmplY3QqIHdl
YmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRUYWJsZShBdGtUYWJsZUNlbGwqIGNlbGwpCi17Ci0g
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1RBQkxFX0NFTEwoY2VsbCksIG51bGxwdHIpOwot
ICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJM
RShjZWxsKSwgbnVsbHB0cik7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheE9iamVjdCA9
IGNvcmUoY2VsbCk7Ci0gICAgaWYgKCFheE9iamVjdCB8fCAhYXhPYmplY3QtPmlzVGFibGVDZWxs
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byogdGFibGUgPSBhdGtfb2Jq
ZWN0X2dldF9wYXJlbnQoQVRLX09CSkVDVChheE9iamVjdC0+d3JhcHBlcigpKSk7Ci0gICAgaWYg
KCF0YWJsZSB8fCAhQVRLX0lTX1RBQkxFKHRhYmxlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gQVRLX09CSkVDVChnX29iamVjdF9yZWYodGFibGUpKTsKLX0KLQotdm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlVGFibGVDZWxsSW50ZXJmYWNlSW5pdChBdGtUYWJsZUNlbGxJZmFj
ZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdldF9jb2x1bW5faGVhZGVyX2NlbGxzID0gd2Via2l0
QWNjZXNzaWJsZVRhYmxlQ2VsbEdldENvbHVtbkhlYWRlckNlbGxzOwotICAgIGlmYWNlLT5nZXRf
cm93X2hlYWRlcl9jZWxscyA9IHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRSb3dIZWFkZXJD
ZWxsczsKLSAgICBpZmFjZS0+Z2V0X2NvbHVtbl9zcGFuID0gd2Via2l0QWNjZXNzaWJsZVRhYmxl
Q2VsbEdldENvbHVtblNwYW47Ci0gICAgaWZhY2UtPmdldF9yb3dfc3BhbiA9IHdlYmtpdEFjY2Vz
c2libGVUYWJsZUNlbGxHZXRSb3dTcGFuOwotICAgIGlmYWNlLT5nZXRfcG9zaXRpb24gPSB3ZWJr
aXRBY2Nlc3NpYmxlVGFibGVDZWxsR2V0UG9zaXRpb247Ci0gICAgaWZhY2UtPmdldF90YWJsZSA9
IHdlYmtpdEFjY2Vzc2libGVUYWJsZUNlbGxHZXRUYWJsZTsKLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRhYmxlQ2VsbC5oIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFj
ZVRhYmxlQ2VsbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMmQ3MDM0ZTQ1ZmIu
LjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJL
aXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGFibGVDZWxsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgSmFuIEFsb256bwotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEx
LCAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0KLXZvaWQgd2Via2l0QWNj
ZXNzaWJsZVRhYmxlQ2VsbEludGVyZmFjZUluaXQoQXRrVGFibGVDZWxsSWZhY2UqKTsKLQotI2Vu
ZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDk2MzA4
YjAxNjAuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KLSAqIENv
cHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAs
IDIwMTEsIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFBvcnRpb25zIGZyb20gTW96
aWxsYSBhMTF5LCBjb3B5cmlnaHQgYXMgZm9sbG93czoKLSAqCi0gKiBUaGUgT3JpZ2luYWwgQ29k
ZSBpcyBtb3ppbGxhLm9yZyBjb2RlLgotICoKLSAqIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0
aGUgT3JpZ2luYWwgQ29kZSBpcwotICogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgotICogUG9ydGlv
bnMgY3JlYXRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAw
MgotICogdGhlIEluaXRpYWwgRGV2ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuaCIK
LQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiQWNj
ZXNzaWJpbGl0eU9iamVjdC5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWRp
dGluZy5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgotI2luY2x1ZGUgIkhvc3RXaW5kb3cuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyTGlzdEl0ZW0uaCIKLSNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCi0jaW5j
bHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUg
IlZpc2libGVVbml0cy5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRBY2Nlc3NpYmxlVXRpbC5oIgotI2luY2x1ZGUgPHBhbC90ZXh0L1RleHRFbmNvZGlu
Zy5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi0vLyBUZXh0IGF0dHJp
YnV0ZSB0byBleHBvc2UgdGhlIEFSSUEgJ2FyaWEtaW52YWxpZCcgYXR0cmlidXRlLiBJbml0aWFs
bHkgaW5pdGlhbGl6ZWQKLS8vIHRvIEFUS19URVhUX0FUVFJfSU5WQUxJRCAod2hpY2ggbWVhbnMg
J2ludmFsaWQnIHRleHQgYXR0cmlidXRlJyksIHdpbGwgbGF0ZXIgb24KLS8vIGhvbGQgYSByZWZl
cmVuY2UgdG8gdGhlIGN1c3RvbSByZWdpc3RlcmVkIEF0a1RleHRBdHRyaWJ1dGUgdGhhdCB3ZSB3
aWxsIHVzZS4KLXN0YXRpYyBBdGtUZXh0QXR0cmlidXRlIGF0a1RleHRBdHRyaWJ1dGVJbnZhbGlk
ID0gQVRLX1RFWFRfQVRUUl9JTlZBTElEOwotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZShBdGtUZXh0KiB0ZXh0KQotewotICAgIGlmICghV0VCS0lUX0lTX0FDQ0VTU0lCTEUodGV4
dCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuICZ3ZWJraXRBY2Nlc3NpYmxlR2V0
QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSk7Ci19Ci0KLXN0YXRp
YyBpbnQgYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIHJlbmRl
ck9iamVjdCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBiYXNlbGlu
ZVBvc2l0aW9uIG9yaWdpbmF0ZXMgZnJvbSBSZW5kZXJPYmplY3QuY3BwIGFuZCB3YXMKLSAgICAv
LyByZW1vdmVkIGluIHI3MDA3Mi4gVGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGluY29ycmVjdCB0
aG91Z2gsIGJlY2F1c2UgdGhpcyBpcyBub3QgdGhlCi0gICAgLy8gYmFzZWxpbmUgb2YgdGhlIHVu
ZGVybHlpbmcgUmVuZGVyT2JqZWN0LCBidXQgb2YgdGhlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuCi0gICAgY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzID0gcmVuZGVyT2JqZWN0LT5m
aXJzdExpbmVTdHlsZSgpLm1ldHJpY3NPZlByaW1hcnlGb250KCk7Ci0gICAgcmV0dXJuIGZvbnRN
ZXRyaWNzLmFzY2VudCgpICsgKHJlbmRlck9iamVjdC0+Zmlyc3RMaW5lU3R5bGUoKS5jb21wdXRl
ZExpbmVIZWlnaHQoKSAtIGZvbnRNZXRyaWNzLmhlaWdodCgpKSAvIDI7Ci19Ci0KLXN0YXRpYyBB
dGtBdHRyaWJ1dGVTZXQqIGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29u
c3QgQWNjZXNzaWJpbGl0eU9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghb2JqZWN0LT5pc0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyID0gb2JqZWN0LT5yZW5kZXJlcigpOwotICAgIGF1dG8qIHN0eWxl
ID0gJnJlbmRlcmVyLT5zdHlsZSgpOwotCi0gICAgQXRrQXR0cmlidXRlU2V0KiByZXN1bHQgPSBu
dWxscHRyOwotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGJ1ZmZlcihnX3N0cmR1cF9wcmludGYoIiVp
Iiwgc3R5bGUtPmNvbXB1dGVkRm9udFBpeGVsU2l6ZSgpKSk7Ci0gICAgcmVzdWx0ID0gYWRkVG9B
dGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RF
WFRfQVRUUl9TSVpFKSwgYnVmZmVyLmdldCgpKTsKLQotICAgIENvbG9yIGJnQ29sb3IgPSBzdHls
ZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsKLSAg
ICBpZiAoYmdDb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgYXV0byBbciwgZywgYiwgYV0gPSBi
Z0NvbG9yLnRvQ29sb3JUeXBlTG9zc3k8U1JHQkE8dWludDhfdD4+KCkucmVzb2x2ZWQoKTsKLSAg
ICAgICAgYnVmZmVyLnJlc2V0KGdfc3RyZHVwX3ByaW50ZigiJWksJWksJWkiLCByLCBnLCBiKSk7
Ci0gICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRf
YXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfQkdfQ09MT1IpLCBidWZmZXIuZ2V0KCkp
OwotICAgIH0KLQotICAgIENvbG9yIGZnQ29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENv
bG9yKENTU1Byb3BlcnR5Q29sb3IpOwotICAgIGlmIChmZ0NvbG9yLmlzVmFsaWQoKSkgewotICAg
ICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGZnQ29sb3IudG9Db2xvclR5cGVMb3NzeTxTUkdCQTx1
aW50OF90Pj4oKS5yZXNvbHZlZCgpOwotICAgICAgICBidWZmZXIucmVzZXQoZ19zdHJkdXBfcHJp
bnRmKCIlaSwlaSwlaSIsIHIsIGcsIGIpKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRy
aWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRU
Ul9GR19DT0xPUiksIGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgaW50IGJhc2VsaW5lUG9z
aXRpb247Ci0gICAgYm9vbCBpbmNsdWRlUmlzZSA9IHRydWU7Ci0gICAgc3dpdGNoIChzdHlsZS0+
dmVydGljYWxBbGlnbigpKSB7Ci0gICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpTdWI6Ci0gICAgICAg
IGJhc2VsaW5lUG9zaXRpb24gPSAtMSAqIGJhc2VsaW5lUG9zaXRpb25Gb3JSZW5kZXJPYmplY3Qo
cmVuZGVyZXIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlN1cGVy
OgotICAgICAgICBiYXNlbGluZVBvc2l0aW9uID0gYmFzZWxpbmVQb3NpdGlvbkZvclJlbmRlck9i
amVjdChyZW5kZXJlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
QmFzZWxpbmU6Ci0gICAgICAgIGJhc2VsaW5lUG9zaXRpb24gPSAwOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBpbmNsdWRlUmlzZSA9IGZhbHNlOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpZiAoaW5jbHVkZVJpc2UpIHsKLSAgICAgICAgYnVmZmVyLnJlc2V0
KGdfc3RyZHVwX3ByaW50ZigiJWkiLCBiYXNlbGluZVBvc2l0aW9uKSk7Ci0gICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfUklTRSksIGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgaWYg
KCFzdHlsZS0+dGV4dEluZGVudCgpLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgaW50IGluZGVu
dGF0aW9uID0gdmFsdWVGb3JMZW5ndGgoc3R5bGUtPnRleHRJbmRlbnQoKSwgb2JqZWN0LT5zaXpl
KCkud2lkdGgoKSk7Ci0gICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9wcmludGYoIiVpIiwg
aW5kZW50YXRpb24pKTsKLSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVz
dWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9JTkRFTlQpLCBi
dWZmZXIuZ2V0KCkpOwotICAgIH0KLQotICAgIFN0cmluZyBmb250RmFtaWx5TmFtZSA9IHN0eWxl
LT5mb250Q2FzY2FkZSgpLmZpcnN0RmFtaWx5KCk7Ci0gICAgaWYgKGZvbnRGYW1pbHlOYW1lLmxl
ZnQoOCkgPT0gIi13ZWJraXQtIikKLSAgICAgICAgZm9udEZhbWlseU5hbWUgPSBmb250RmFtaWx5
TmFtZS5zdWJzdHJpbmcoOCk7Ci0KLSAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChy
ZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRSX0ZBTUlMWV9O
QU1FKSwgZm9udEZhbWlseU5hbWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBpbnQgZm9udFdlaWdo
dCA9IHN0YXRpY19jYXN0PGZsb2F0PihzdHlsZS0+Zm9udENhc2NhZGUoKS53ZWlnaHQoKSk7Ci0g
ICAgaWYgKGZvbnRXZWlnaHQgPiAwKSB7Ci0gICAgICAgIGJ1ZmZlci5yZXNldChnX3N0cmR1cF9w
cmludGYoIiVpIiwgZm9udFdlaWdodCkpOwotICAgICAgICByZXN1bHQgPSBhZGRUb0F0a0F0dHJp
YnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShBVEtfVEVYVF9BVFRS
X1dFSUdIVCksIGJ1ZmZlci5nZXQoKSk7Ci0gICAgfQotCi0gICAgc3dpdGNoIChzdHlsZS0+dGV4
dEFsaWduKCkpIHsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgotICAgIGNhc2UgVGV4
dEFsaWduTW9kZTo6RW5kOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkxlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgotICAgICAgICByZXN1
bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRf
bmFtZShBVEtfVEVYVF9BVFRSX0pVU1RJRklDQVRJT04pLCAibGVmdCIpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9k
ZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJl
c3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSlVTVElGSUNB
VElPTiksICJyaWdodCIpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OkNlbnRlcjoKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9KVVNUSUZJQ0FUSU9OKSwgImNlbnRlciIpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgIHJlc3Vs
dCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0cmlidXRlX2dldF9u
YW1lKEFUS19URVhUX0FUVFJfSlVTVElGSUNBVElPTiksICJmaWxsIik7Ci0gICAgfQotCi0gICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9VTkRFUkxJTkUpLCAoc3R5bGUtPnRleHREZWNvcmF0aW9u
TGluZSgpICYgVGV4dERlY29yYXRpb25MaW5lOjpVbmRlcmxpbmUpID8gInNpbmdsZSIgOiAibm9u
ZSIpOwotCi0gICAgcmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4
dF9hdHRyaWJ1dGVfZ2V0X25hbWUoQVRLX1RFWFRfQVRUUl9TVFlMRSksIHN0eWxlLT5mb250Q2Fz
Y2FkZSgpLml0YWxpYygpID8gIml0YWxpYyIgOiAibm9ybWFsIik7Ci0KLSAgICByZXN1bHQgPSBh
ZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9nZXRfbmFtZShB
VEtfVEVYVF9BVFRSX1NUUklLRVRIUk9VR0gpLCAoc3R5bGUtPnRleHREZWNvcmF0aW9uTGluZSgp
ICYgVGV4dERlY29yYXRpb25MaW5lOjpMaW5lVGhyb3VnaCkgPyAidHJ1ZSIgOiAiZmFsc2UiKTsK
LQotICAgIHJlc3VsdCA9IGFkZFRvQXRrQXR0cmlidXRlU2V0KHJlc3VsdCwgYXRrX3RleHRfYXR0
cmlidXRlX2dldF9uYW1lKEFUS19URVhUX0FUVFJfSU5WSVNJQkxFKSwgKHN0eWxlLT52aXNpYmls
aXR5KCkgPT0gVmlzaWJpbGl0eTo6SGlkZGVuKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCi0gICAg
cmVzdWx0ID0gYWRkVG9BdGtBdHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVf
Z2V0X25hbWUoQVRLX1RFWFRfQVRUUl9FRElUQUJMRSksIG9iamVjdC0+Y2FuU2V0VmFsdWVBdHRy
aWJ1dGUoKSA/ICJ0cnVlIiA6ICJmYWxzZSIpOwotCi0gICAgU3RyaW5nIGxhbmd1YWdlID0gb2Jq
ZWN0LT5sYW5ndWFnZSgpOwotICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAgICAgICBy
ZXN1bHQgPSBhZGRUb0F0a0F0dHJpYnV0ZVNldChyZXN1bHQsIGF0a190ZXh0X2F0dHJpYnV0ZV9n
ZXRfbmFtZShBVEtfVEVYVF9BVFRSX0xBTkdVQUdFKSwgbGFuZ3VhZ2UudXRmOCgpLmRhdGEoKSk7
Ci0KLSAgICBTdHJpbmcgaW52YWxpZFN0YXR1cyA9IG9iamVjdC0+aW52YWxpZFN0YXR1cygpOwot
ICAgIGlmIChpbnZhbGlkU3RhdHVzICE9ICJmYWxzZSIpIHsKLSAgICAgICAgLy8gUmVnaXN0ZXIg
dGhlIGN1c3RvbSBhdHRyaWJ1dGUgZm9yICdhcmlhLWludmFsaWQnIGlmIG5vdCBkb25lIHlldC4K
LSAgICAgICAgaWYgKGF0a1RleHRBdHRyaWJ1dGVJbnZhbGlkID09IEFUS19URVhUX0FUVFJfSU5W
QUxJRCkKLSAgICAgICAgICAgIGF0a1RleHRBdHRyaWJ1dGVJbnZhbGlkID0gYXRrX3RleHRfYXR0
cmlidXRlX3JlZ2lzdGVyKCJpbnZhbGlkIik7Ci0KLSAgICAgICAgcmVzdWx0ID0gYWRkVG9BdGtB
dHRyaWJ1dGVTZXQocmVzdWx0LCBhdGtfdGV4dF9hdHRyaWJ1dGVfZ2V0X25hbWUoYXRrVGV4dEF0
dHJpYnV0ZUludmFsaWQpLCBpbnZhbGlkU3RhdHVzLnV0ZjgoKS5kYXRhKCkpOwotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBnaW50IGNvbXBhcmVBdHRyaWJ1dGUoY29u
c3QgQXRrQXR0cmlidXRlKiBhLCBjb25zdCBBdGtBdHRyaWJ1dGUqIGIpCi17Ci0gICAgcmV0dXJu
IGdfc3RyY21wMChhLT5uYW1lLCBiLT5uYW1lKSB8fCBnX3N0cmNtcDAoYS0+dmFsdWUsIGItPnZh
bHVlKTsKLX0KLQotLy8gUmV0dXJucyBhbiBBdGtBdHRyaWJ1dGVTZXQgd2l0aCB0aGUgZWxlbWVu
dHMgb2YgYXR0cmlidXRlU2V0MSB3aGljaAotLy8gYXJlIGVpdGhlciBub3QgcHJlc2VudCBvciBk
aWZmZXJlbnQgaW4gYXR0cmlidXRlU2V0Mi4gTmVpdGhlcgotLy8gYXR0cmlidXRlU2V0MSBub3Ig
YXR0cmlidXRlU2V0MiBzaG91bGQgYmUgdXNlZCBhZnRlciBjYWxsaW5nIHRoaXMuCi1zdGF0aWMg
QXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXREaWZmZXJlbmNlKEF0a0F0dHJpYnV0ZVNldCog
YXR0cmlidXRlU2V0MSwgQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQyKQotewotICAgIGlm
ICghYXR0cmlidXRlU2V0MikKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVNldDE7Ci0KLSAgICBB
dGtBdHRyaWJ1dGVTZXQqIGN1cnJlbnRTZXQgPSBhdHRyaWJ1dGVTZXQxOwotICAgIEF0a0F0dHJp
YnV0ZVNldCogZm91bmQ7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiB0b0RlbGV0ZSA9IG51bGxwdHI7
Ci0KLSAgICB3aGlsZSAoY3VycmVudFNldCkgewotICAgICAgICBmb3VuZCA9IGdfc2xpc3RfZmlu
ZF9jdXN0b20oYXR0cmlidXRlU2V0MiwgY3VycmVudFNldC0+ZGF0YSwgKEdDb21wYXJlRnVuYylj
b21wYXJlQXR0cmlidXRlKTsKLSAgICAgICAgaWYgKGZvdW5kKSB7Ci0gICAgICAgICAgICBBdGtB
dHRyaWJ1dGVTZXQqIG5leHRTZXQgPSBjdXJyZW50U2V0LT5uZXh0OwotICAgICAgICAgICAgdG9E
ZWxldGUgPSBnX3NsaXN0X3ByZXBlbmQodG9EZWxldGUsIGN1cnJlbnRTZXQtPmRhdGEpOwotICAg
ICAgICAgICAgYXR0cmlidXRlU2V0MSA9IGdfc2xpc3RfZGVsZXRlX2xpbmsoYXR0cmlidXRlU2V0
MSwgY3VycmVudFNldCk7Ci0gICAgICAgICAgICBjdXJyZW50U2V0ID0gbmV4dFNldDsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBjdXJyZW50U2V0ID0gY3VycmVudFNldC0+bmV4dDsKLSAg
ICB9Ci0KLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKGF0dHJpYnV0ZVNldDIpOwotICAgIGF0
a19hdHRyaWJ1dGVfc2V0X2ZyZWUodG9EZWxldGUpOwotICAgIHJldHVybiBhdHRyaWJ1dGVTZXQx
OwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dChBdGtUZXh0
KiwgZ2ludCBzdGFydE9mZnNldCwgZ2ludCBlbmRPZmZzZXQpOwotCi1zdGF0aWMgZ3VpbnQgYWNj
ZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3Qp
Ci17Ci0gICAgLy8gTm9uIHJlbmRlciBvYmplY3RzIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50
Ci0gICAgaWYgKCFvYmplY3QtPmlzQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdCgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIC8vIEZvciB0aG9zZSBvYmplY3RzIGltcGxlbWVudGluZyB0aGUg
QXRrVGV4dCBpbnRlcmZhY2Ugd2UgdXNlIHRoZQotICAgIC8vIHdlbGwga25vd24gQVBJIHRvIGFs
d2F5cyBnZXQgdGhlIHRleHQgaW4gYSBjb25zaXN0ZW50IHdheQotICAgIGF1dG8qIGF0a09iaiA9
IEFUS19PQkpFQ1Qob2JqZWN0LT53cmFwcGVyKCkpOwotICAgIGlmIChBVEtfSVNfVEVYVChhdGtP
YmopKSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRleHQod2Via2l0QWNjZXNzaWJsZVRl
eHRHZXRUZXh0KEFUS19URVhUKGF0a09iaiksIDAsIC0xKSk7Ci0gICAgICAgIHJldHVybiBnX3V0
Zjhfc3RybGVuKHRleHQuZ2V0KCksIC0xKTsKLSAgICB9Ci0KLSAgICAvLyBFdmVuIGlmIHdlIGRv
bid0IGV4cG9zZSBsaXN0IG1hcmtlcnMgdG8gQXNzaXN0aXZlCi0gICAgLy8gVGVjaG5vbG9naWVz
LCB3ZSBuZWVkIHRvIGhhdmUgYSB3YXkgdG8gbWVhc3VyZSB0aGVpciBsZW5ndGgKLSAgICAvLyBm
b3IgdGhvc2UgY2FzZXMgd2hlbiBpdCdzIG5lZWRlZCB0byB0YWtlIGl0IGludG8gYWNjb3VudAot
ICAgIC8vIHNlcGFyYXRlbHkgKGFzIGluIGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQp
Ci0gICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBvYmplY3QtPnJlbmRlcmVyKCk7IGlzPFJlbmRlckxp
c3RNYXJrZXI+KHJlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckxpc3RN
YXJrZXI+KCpyZW5kZXJlcikudGV4dFdpdGhTdWZmaXgoKS5sZW5ndGgoKTsKLQotICAgIHJldHVy
biAwOwotfQotCi1zdGF0aWMgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZ2V0QWNjZXNzaWJp
bGl0eU9iamVjdEZvck9mZnNldChjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplY3QsIGd1
aW50IG9mZnNldCwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICBj
b25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByZXN1bHQ7Ci0gICAgZ3VpbnQgbGVuZ3RoID0gYWNj
ZXNzaWJpbGl0eU9iamVjdExlbmd0aChvYmplY3QpOwotICAgIGlmIChsZW5ndGggPiBvZmZzZXQp
IHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gMDsKLSAgICAgICAgKmVuZE9mZnNldCA9IGxlbmd0
aDsKLSAgICAgICAgcmVzdWx0ID0gb2JqZWN0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgICpzdGFy
dE9mZnNldCA9IC0xOwotICAgICAgICAqZW5kT2Zmc2V0ID0gLTE7Ci0gICAgICAgIHJlc3VsdCA9
IDA7Ci0gICAgfQotCi0gICAgaWYgKCFvYmplY3QtPmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5m
aXJzdENoaWxkKCk7Ci0gICAgZ3VpbnQgY3VycmVudE9mZnNldCA9IDA7Ci0gICAgZ3VpbnQgY2hp
bGRQb3NpdGlvbiA9IDA7Ci0gICAgd2hpbGUgKGNoaWxkICYmIGN1cnJlbnRPZmZzZXQgPD0gb2Zm
c2V0KSB7Ci0gICAgICAgIGd1aW50IGNoaWxkTGVuZ3RoID0gYWNjZXNzaWJpbGl0eU9iamVjdExl
bmd0aChjaGlsZCk7Ci0gICAgICAgIGN1cnJlbnRPZmZzZXQgPSBjaGlsZExlbmd0aCArIGNoaWxk
UG9zaXRpb247Ci0gICAgICAgIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7Ci0gICAgICAg
ICAgICBnaW50IGNoaWxkU3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICBnaW50IGNoaWxkRW5kT2Zm
c2V0OwotICAgICAgICAgICAgY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCogZ3JhbmRDaGlsZCA9
IGdldEFjY2Vzc2liaWxpdHlPYmplY3RGb3JPZmZzZXQoY2hpbGQsIG9mZnNldC1jaGlsZFBvc2l0
aW9uLCAgJmNoaWxkU3RhcnRPZmZzZXQsICZjaGlsZEVuZE9mZnNldCk7Ci0gICAgICAgICAgICBp
ZiAoY2hpbGRTdGFydE9mZnNldCA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgKnN0YXJ0T2Zmc2V0
ID0gY2hpbGRTdGFydE9mZnNldCArIGNoaWxkUG9zaXRpb247Ci0gICAgICAgICAgICAgICAgKmVu
ZE9mZnNldCA9IGNoaWxkRW5kT2Zmc2V0ICsgY2hpbGRQb3NpdGlvbjsKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBncmFuZENoaWxkOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgY2hpbGRQb3NpdGlvbiArPSBjaGlsZExlbmd0aDsKLSAgICAgICAgICAgIGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotc3RhdGljIEF0a0F0dHJpYnV0ZVNldCogZ2V0UnVuQXR0cmlidXRlc0Zy
b21BY2Nlc3NpYmlsaXR5T2JqZWN0KGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGVsZW1lbnQs
IGdpbnQgb2Zmc2V0LCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAg
IGNvbnN0IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNoaWxkID0gZ2V0QWNjZXNzaWJpbGl0eU9iamVj
dEZvck9mZnNldChlbGVtZW50LCBvZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotICAg
IGlmICghY2hpbGQpIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gLTE7Ci0gICAgICAgICplbmRP
ZmZzZXQgPSAtMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgQXRrQXR0cmlidXRl
U2V0KiBkZWZhdWx0QXR0cmlidXRlcyA9IGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlP
YmplY3QoZWxlbWVudCk7Ci0gICAgQXRrQXR0cmlidXRlU2V0KiBjaGlsZEF0dHJpYnV0ZXMgPSBn
ZXRBdHRyaWJ1dGVTZXRGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNoaWxkKTsKLQotICAgIHJldHVy
biBhdHRyaWJ1dGVTZXREaWZmZXJlbmNlKGNoaWxkQXR0cmlidXRlcywgZGVmYXVsdEF0dHJpYnV0
ZXMpOwotfQotCi1zdGF0aWMgSW50UmVjdCB0ZXh0RXh0ZW50cyhBdGtUZXh0KiB0ZXh0LCBnaW50
IHN0YXJ0T2Zmc2V0LCBnaW50IGxlbmd0aCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKLXsKLSAgICBH
VW5pcXVlUHRyPGNoYXI+IHRleHRDb250ZW50KHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dCh0
ZXh0LCBzdGFydE9mZnNldCwgLTEpKTsKLSAgICBnaW50IHRleHRMZW5ndGggPSBnX3V0Zjhfc3Ry
bGVuKHRleHRDb250ZW50LmdldCgpLCAtMSk7Ci0KLSAgICAvLyBUaGUgZmlyc3QgY2FzZSAoZW5k
T2Zmc2V0IG9mIC0xKSBzaG91bGQgd29yaywgYnV0IHNlZW1zIGJyb2tlbiBmb3IgYWxsIEd0aysg
YXBwcy4KLSAgICBnaW50IHJhbmdlTGVuZ3RoID0gbGVuZ3RoOwotICAgIGlmIChyYW5nZUxlbmd0
aCA8IDAgfHwgcmFuZ2VMZW5ndGggPiB0ZXh0TGVuZ3RoKQotICAgICAgICByYW5nZUxlbmd0aCA9
IHRleHRMZW5ndGg7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUo
dGV4dCk7Ci0KLSAgICBJbnRSZWN0IGV4dGVudHMgPSBjb3JlT2JqZWN0LT5kb0FYQm91bmRzRm9y
UmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRPZmZzZXQsIHJhbmdlTGVuZ3RoKSk7Ci0gICAgc3dp
dGNoIChjb29yZHMpIHsKLSAgICBjYXNlIEFUS19YWV9TQ1JFRU46Ci0gICAgICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBjb3JlT2JqZWN0LT5kb2N1bWVudCgpKQotICAgICAgICAgICAgZXh0
ZW50cyA9IGRvY3VtZW50LT52aWV3KCktPmNvbnRlbnRzVG9TY3JlZW4oZXh0ZW50cyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQVRLX1hZX1dJTkRPVzoKLSAgICAgICAgLy8gTm8tb3AKLSAg
ICAgICAgYnJlYWs7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJT04oMiwgMzAsIDApCi0gICAgY2FzZSBB
VEtfWFlfUEFSRU5UOgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vu
ZGlmCi0gICAgfQotCi0gICAgcmV0dXJuIGV4dGVudHM7Ci19Ci0KLXN0YXRpYyBpbnQgb2Zmc2V0
QWRqdXN0bWVudEZvckxpc3RJdGVtKGNvbnN0IEFYQ29yZU9iamVjdCogb2JqZWN0KQotewotICAg
IC8vIFdlIG5lZWQgdG8gYWRqdXN0IHRoZSBvZmZzZXRzIGZvciB0aGUgbGlzdCBpdGVtIG1hcmtl
ciBpbgotICAgIC8vIExlZnQtVG8tUmlnaHQgdGV4dCwgc2luY2Ugd2UgZXhwb3NlIGl0IHRvZ2V0
aGVyIHdpdGggdGhlIHRleHQuCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG9iamVjdC0+
cmVuZGVyZXIoKTsKLSAgICBpZiAoaXM8UmVuZGVyTGlzdEl0ZW0+KHJlbmRlcmVyKSAmJiByZW5k
ZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIpCi0gICAgICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4oKnJlbmRlcmVyKS5tYXJrZXJUZXh0V2l0
aFN1ZmZpeCgpLmxlbmd0aCgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgd2Vi
Q29yZU9mZnNldFRvQXRrT2Zmc2V0KGNvbnN0IEFYQ29yZU9iamVjdCogb2JqZWN0LCBpbnQgb2Zm
c2V0KQotewotICAgIGlmICghb2JqZWN0LT5pc0xpc3RJdGVtKCkpCi0gICAgICAgIHJldHVybiBv
ZmZzZXQ7Ci0KLSAgICByZXR1cm4gb2Zmc2V0ICsgb2Zmc2V0QWRqdXN0bWVudEZvckxpc3RJdGVt
KG9iamVjdCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KEF0a1Rl
eHQqIHRleHQsIGludCBvZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9i
amVjdCA9IGNvcmUodGV4dCk7Ci0gICAgaWYgKCFjb3JlT2JqZWN0IHx8ICFjb3JlT2JqZWN0LT5p
c0xpc3RJdGVtKCkpCi0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0KLSAgICByZXR1cm4gb2Zmc2V0
IC0gb2Zmc2V0QWRqdXN0bWVudEZvckxpc3RJdGVtKGNvcmVPYmplY3QpOwotfQotCi1zdGF0aWMg
Tm9kZSogZ2V0Tm9kZUZvckFjY2Vzc2liaWxpdHlPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCog
Y29yZU9iamVjdCkKLXsKLSAgICBpZiAoIWNvcmVPYmplY3QtPmlzTmF0aXZlVGV4dENvbnRyb2wo
KSkKLSAgICAgICAgcmV0dXJuIGNvcmVPYmplY3QtPm5vZGUoKTsKLQotICAgIC8vIEZvciB0ZXh0
IGNvbnRyb2xzLCB3ZSBnZXQgdGhlIGZpcnN0IHZpc2libGUgcG9zaXRpb24gb24gaXQgKHdoaWNo
IHdpbGwKLSAgICAvLyBiZWxvbmcgdG8gaXRzIGlubmVyIGVsZW1lbnQsIHVucmVhY2hhYmxlIGZy
b20gdGhlIERPTSkgYW5kIHJldHVybiBpdHMKLSAgICAvLyBwYXJlbnQgbm9kZSwgc28gd2UgaGF2
ZSBhICJib3VuZGluZyBub2RlIiBmb3IgdGhlIGFjY2Vzc2liaWxpdHkgb2JqZWN0LgotICAgIFZp
c2libGVQb3NpdGlvbiBwb3NpdGlvbkluVGV4dENvbnRyb2xJbm5lckVsZW1lbnQgPSBjb3JlT2Jq
ZWN0LT52aXNpYmxlUG9zaXRpb25Gb3JJbmRleCgwLCB0cnVlKTsKLSAgICBOb2RlKiBpbm5lck1v
c3ROb2RlID0gcG9zaXRpb25JblRleHRDb250cm9sSW5uZXJFbGVtZW50LmRlZXBFcXVpdmFsZW50
KCkuYW5jaG9yTm9kZSgpOwotICAgIGlmICghaW5uZXJNb3N0Tm9kZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICByZXR1cm4gaW5uZXJNb3N0Tm9kZS0+cGFyZW50Tm9kZSgpOwotfQotCi1zdGF0
aWMgdm9pZCBnZXRTZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3Qq
IGNvcmVPYmplY3QsIFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgZ2ludCYgc3RhcnRPZmZz
ZXQsIGdpbnQmIGVuZE9mZnNldCkKLXsKLSAgICAvLyBEZWZhdWx0IHZhbHVlcywgdW5sZXNzIHRo
ZSBjb250cmFyeSBpcyBwcm92ZWQuCi0gICAgc3RhcnRPZmZzZXQgPSAwOwotICAgIGVuZE9mZnNl
dCA9IDA7Ci0KLSAgICBOb2RlKiBub2RlID0gZ2V0Tm9kZUZvckFjY2Vzc2liaWxpdHlPYmplY3Qo
Y29yZU9iamVjdCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
c2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBuZWVkIHRv
IGxpbWl0IG91ciBzZWFyY2ggdG8gcG9zaXRpb25zIHRoYXQgZmFsbCBpbnNpZGUgdGhlIGRvbWFp
biBvZiB0aGUgY3VycmVudCBvYmplY3QuCi0gICAgUG9zaXRpb24gZmlyc3RWYWxpZFBvc2l0aW9u
ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUtPmZpcnN0RGVzY2VuZGFudCgpKTsK
LSAgICBQb3NpdGlvbiBsYXN0VmFsaWRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbkluT3JBZnRlck5v
ZGUobm9kZS0+bGFzdERlc2NlbmRhbnQoKSk7Ci0KLSAgICAvLyBGaW5kIHRoZSBwcm9wZXIgcmFu
Z2UgZm9yIHRoZSBzZWxlY3Rpb24gdGhhdCBmYWxscyBpbnNpZGUgdGhlIG9iamVjdC4KLSAgICBh
dXRvIG5vZGVSYW5nZVN0YXJ0ID0gc3RkOjptYXgoc2VsZWN0aW9uLnN0YXJ0KCksIGZpcnN0VmFs
aWRQb3NpdGlvbik7Ci0gICAgYXV0byBub2RlUmFuZ2VFbmQgPSBzdGQ6Om1pbihzZWxlY3Rpb24u
ZW5kKCksIGxhc3RWYWxpZFBvc2l0aW9uKTsKLQotICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBv
ZiB0aGUgc2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBvYmplY3QuCi0gICAgUG9zaXRpb24gcGFy
ZW50Rmlyc3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLSAg
ICBhdXRvIHJhbmdlSW5QYXJlbnQgPSAqbWFrZVNpbXBsZVJhbmdlKHBhcmVudEZpcnN0UG9zaXRp
b24sIG5vZGVSYW5nZVN0YXJ0KTsKLQotICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IG9mZnNl
dHMgYW5kIGNhbGN1bGF0ZSBpbml0aWFsIHJhbmdlIGxlbmd0aC4KLSAgICAvLyBUaGVzZSB2YWx1
ZXMgbWlnaHQgYmUgYWRqdXN0ZWQgbGF0ZXIgdG8gY292ZXIgc3BlY2lhbCBjYXNlcy4KLSAgICBz
dGFydE9mZnNldCA9IHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldChjb3JlT2JqZWN0LCBjaGFyYWN0
ZXJDb3VudChyYW5nZUluUGFyZW50LCBUZXh0SXRlcmF0b3JCZWhhdmlvcjo6RW1pdHNDaGFyYWN0
ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpKTsKLSAgICBhdXRvIG5vZGVSYW5nZSA9ICpt
YWtlU2ltcGxlUmFuZ2Uobm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgaW50IHJh
bmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJhbmdlLCBUZXh0SXRlcmF0b3JCZWhhdmlv
cjo6RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwotCi0gICAgLy8g
U3BlY2lhbCBjYXNlcyB0aGF0IGFyZSBvbmx5IHJlbGV2YW50IHdoZW4gd29ya2luZyB3aXRoICpf
RU5EIGJvdW5kYXJpZXMuCi0gICAgaWYgKHNlbGVjdGlvbi5hZmZpbml0eSgpID09IEFmZmluaXR5
OjpVcHN0cmVhbSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KG5vZGVS
YW5nZVN0YXJ0LCBBZmZpbml0eTo6VXBzdHJlYW0pOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
dmlzaWJsZUVuZChub2RlUmFuZ2VFbmQsIEFmZmluaXR5OjpVcHN0cmVhbSk7Ci0KLSAgICAgICAg
Ly8gV2UgbmVlZCB0byBhZGp1c3Qgb2Zmc2V0cyB3aGVuIGZpbmRpbmcgd3JhcHBlZCBsaW5lcyBz
byB0aGUgcG9zaXRpb24gYXQgdGhlIGVuZAotICAgICAgICAvLyBvZiB0aGUgbGluZSBpcyBwcm9w
ZXJseSB0YWtpbmcgaW50byBhY2NvdW50IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldHMuCi0g
ICAgICAgIGlmIChpc0VuZE9mTGluZSh2aXNpYmxlU3RhcnQpICYmICFsaW5lQnJlYWtFeGlzdHNB
dFZpc2libGVQb3NpdGlvbih2aXNpYmxlU3RhcnQpKSB7Ci0gICAgICAgICAgICBpZiAoaXNTdGFy
dE9mTGluZSh2aXNpYmxlU3RhcnQubmV4dCgpKSkKLSAgICAgICAgICAgICAgICByYW5nZUxlbmd0
aCsrOwotCi0gICAgICAgICAgICBpZiAoIWlzRW5kT2ZCbG9jayh2aXNpYmxlU3RhcnQpKQotICAg
ICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gc3RkOjptYXgoc3RhcnRPZmZzZXQgLSAxLCAwKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0VuZE9mTGluZSh2aXNpYmxlRW5kKSAmJiAhbGlu
ZUJyZWFrRXhpc3RzQXRWaXNpYmxlUG9zaXRpb24odmlzaWJsZUVuZCkgJiYgIWlzRW5kT2ZCbG9j
ayh2aXNpYmxlRW5kKSkKLSAgICAgICAgICAgIHJhbmdlTGVuZ3RoLS07Ci0gICAgfQotCi0gICAg
ZW5kT2Zmc2V0ID0gc3RkOjptaW4oc3RhcnRPZmZzZXQgKyByYW5nZUxlbmd0aCwgc3RhdGljX2Nh
c3Q8aW50PihhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpKSk7Ci19Ci0KLXN0
YXRpYyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KEF0a1RleHQqIHRleHQsIGdp
bnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKEFUS19URVhUKHRleHQpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJ
c0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGV4dCksIDApOwotCi0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0KLSNpZiBFTkFCTEUoSU5QVVRfVFlQ
RV9DT0xPUikKLSAgICBpZiAoY29yZU9iamVjdC0+cm9sZVZhbHVlKCkgPT0gQWNjZXNzaWJpbGl0
eVJvbGU6OkNvbG9yV2VsbCkgewotICAgICAgICBhdXRvIGNvbG9yID0gY29udmVydENvbG9yPFNS
R0JBPGZsb2F0Pj4oY29yZU9iamVjdC0+Y29sb3JWYWx1ZSgpKS5yZXNvbHZlZCgpOwotICAgICAg
ICByZXR1cm4gZ19zdHJkdXBfcHJpbnRmKCJyZ2IgJTcuNWYgJTcuNWYgJTcuNWYgMSIsIGNvbG9y
LnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpOwotICAgIH0KLSNlbmRpZgotCi0gICAgU3Ry
aW5nIHJldDsKLSAgICBpZiAoY29yZU9iamVjdC0+aXNUZXh0Q29udHJvbCgpKQotICAgICAgICBy
ZXQgPSBjb3JlT2JqZWN0LT5kb0FYU3RyaW5nRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2UoMCwgZW5k
T2Zmc2V0KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldCA9IGNvcmVPYmplY3QtPnN0cmluZ1Zh
bHVlKCk7Ci0gICAgICAgIGlmICghcmV0KQotICAgICAgICAgICAgcmV0ID0gY29yZU9iamVjdC0+
dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUoQWNjZXNz
aWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlOjpUZXh0VW5kZXJFbGVtZW50TW9kZUluY2x1ZGVB
bGxDaGlsZHJlbikpOwotICAgIH0KLQotICAgIC8vIFByZWZpeCBhIGl0ZW0gbnVtYmVyL2J1bGxl
dCBpZiBuZWVkZWQKLSAgICBpbnQgYWN0dWFsRW5kT2Zmc2V0ID0gZW5kT2Zmc2V0ID09IC0xID8g
cmV0Lmxlbmd0aCgpIDogZW5kT2Zmc2V0OwotICAgIGlmIChjb3JlT2JqZWN0LT5yb2xlVmFsdWUo
KSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6TGlzdEl0ZW0pIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiBvYmpSZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmIChpczxS
ZW5kZXJMaXN0SXRlbT4ob2JqUmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWFya2Vy
VGV4dCA9IGRvd25jYXN0PFJlbmRlckxpc3RJdGVtPigqb2JqUmVuZGVyZXIpLm1hcmtlclRleHRX
aXRoU3VmZml4KCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIHJldCA9IG9ialJlbmRlcmVyLT5z
dHlsZSgpLmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IG1hcmtlclRleHQgKyBy
ZXQgOiByZXQgKyBtYXJrZXJUZXh0OwotICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA9PSAtMSkK
LSAgICAgICAgICAgICAgICBhY3R1YWxFbmRPZmZzZXQgPSByZXQubGVuZ3RoKCkgKyBtYXJrZXJU
ZXh0Lmxlbmd0aCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0ID0gcmV0LnN1YnN0cmlu
ZyhzdGFydE9mZnNldCwgYWN0dWFsRW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQpOwotICAgIHJldHVy
biBnX3N0cmR1cChyZXQudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWVudW0gR2V0VGV4dFJlbGF0aXZl
UG9zaXRpb24gewotICAgIEdldFRleHRQb3NpdGlvbkF0LAotICAgIEdldFRleHRQb3NpdGlvbkJl
Zm9yZSwKLSAgICBHZXRUZXh0UG9zaXRpb25BZnRlcgotfTsKLQotLy8gQ29udmVuaWVuY2UgZnVu
Y3Rpb24gdG8gYmUgdXNlZCBpbiBlYXJseSByZXR1cm5zLgotc3RhdGljIGNoYXIqIGVtcHR5VGV4
dFNlbGVjdGlvbkF0T2Zmc2V0KGludCBvZmZzZXQsIGludCogc3RhcnRPZmZzZXQsIGludCogZW5k
T2Zmc2V0KQotewotICAgICpzdGFydE9mZnNldCA9IG9mZnNldDsKLSAgICAqZW5kT2Zmc2V0ID0g
b2Zmc2V0OwotICAgIHJldHVybiBnX3N0cmR1cCgiIik7Ci19Ci0KLXN0YXRpYyBjaGFyKiB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldENoYXIoQXRrVGV4dCogdGV4dCwgaW50IG9mZnNldCwgR2V0VGV4
dFJlbGF0aXZlUG9zaXRpb24gdGV4dFBvc2l0aW9uLCBpbnQqIHN0YXJ0T2Zmc2V0LCBpbnQqIGVu
ZE9mZnNldCkKLXsKLSAgICBpbnQgYWN0dWFsT2Zmc2V0ID0gb2Zmc2V0OwotICAgIGlmICh0ZXh0
UG9zaXRpb24gPT0gR2V0VGV4dFBvc2l0aW9uQmVmb3JlKQotICAgICAgICBhY3R1YWxPZmZzZXQt
LTsKLSAgICBlbHNlIGlmICh0ZXh0UG9zaXRpb24gPT0gR2V0VGV4dFBvc2l0aW9uQWZ0ZXIpCi0g
ICAgICAgIGFjdHVhbE9mZnNldCsrOwotCi0gICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZXh0RGF0YSh3
ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgMCwgLTEpKTsKLSAgICBpbnQgdGV4dExl
bmd0aCA9IGdfdXRmOF9zdHJsZW4odGV4dERhdGEuZ2V0KCksIC0xKTsKLQotICAgICpzdGFydE9m
ZnNldCA9IHN0ZDo6bWF4KDAsIGFjdHVhbE9mZnNldCk7Ci0gICAgKnN0YXJ0T2Zmc2V0ID0gc3Rk
OjptaW4oKnN0YXJ0T2Zmc2V0LCB0ZXh0TGVuZ3RoKTsKLQotICAgICplbmRPZmZzZXQgPSBzdGQ6
Om1heCgwLCBhY3R1YWxPZmZzZXQgKyAxKTsKLSAgICAqZW5kT2Zmc2V0ID0gc3RkOjptaW4oKmVu
ZE9mZnNldCwgdGV4dExlbmd0aCk7Ci0KLSAgICBpZiAoKnN0YXJ0T2Zmc2V0ID09ICplbmRPZmZz
ZXQpCi0gICAgICAgIHJldHVybiBnX3N0cmR1cCgiIik7Ci0KLSAgICByZXR1cm4gZ191dGY4X3N1
YnN0cmluZyh0ZXh0RGF0YS5nZXQoKSwgKnN0YXJ0T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKLX0KLQot
c3RhdGljIFZpc2libGVQb3NpdGlvbiBuZXh0V29yZFN0YXJ0UG9zaXRpb24oY29uc3QgVmlzaWJs
ZVBvc2l0aW9uICZwb3NpdGlvbikKLXsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25BZnRl
ckN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbik7Ci0KLSAgICAvLyBJbiBv
cmRlciB0byBza2lwIHNwYWNlcyB3aGVuIG1vdmluZyByaWdodCwgd2UgYWR2YW5jZSBvbmUgd29y
ZCBmdXJ0aGVyCi0gICAgLy8gYW5kIHRoZW4gbW92ZSBvbmUgd29yZCBiYWNrLiBUaGlzIHdpbGwg
cHV0IHVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCi0gICAgLy8gd29yZCBmb2xsb3dpbmcuCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZCA9
IG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb25BZnRlckN1cnJlbnRXb3JkKTsKLQotICAgIGlmIChw
b3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQgIT0gcG9zaXRpb25BZnRlckN1cnJl
bnRXb3JkKQotICAgICAgICBwb3NpdGlvbkFmdGVyQ3VycmVudFdvcmQgPSBwcmV2aW91c1dvcmRQ
b3NpdGlvbihwb3NpdGlvbkFmdGVyU3BhY2luZ0FuZEZvbGxvd2luZ1dvcmQpOwotCi0gICAgYm9v
bCBtb3ZpbmdCYWNrd2FyZHNNb3ZlZFBvc2l0aW9uVG9TdGFydE9mQ3VycmVudFdvcmQgPSBwb3Np
dGlvbkFmdGVyQ3VycmVudFdvcmQgPT0gcHJldmlvdXNXb3JkUG9zaXRpb24obmV4dFdvcmRQb3Np
dGlvbihwb3NpdGlvbikpOwotICAgIGlmIChtb3ZpbmdCYWNrd2FyZHNNb3ZlZFBvc2l0aW9uVG9T
dGFydE9mQ3VycmVudFdvcmQpCi0gICAgICAgIHBvc2l0aW9uQWZ0ZXJDdXJyZW50V29yZCA9IHBv
c2l0aW9uQWZ0ZXJTcGFjaW5nQW5kRm9sbG93aW5nV29yZDsKLQotICAgIHJldHVybiBwb3NpdGlv
bkFmdGVyQ3VycmVudFdvcmQ7Ci19Ci0KLXN0YXRpYyBWaXNpYmxlUG9zaXRpb24gcHJldmlvdXNX
b3JkRW5kUG9zaXRpb24oY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3NpdGlvbikKLXsKLSAgICAv
LyBXZSBtb3ZlIGZvcndhcmQgYW5kIHRoZW4gYmFja3dhcmQgdG8gcG9zaXRpb24gb3Vyc2VsdmVz
IGF0IHRoZSBiZWdpbm5pbmcKLSAgICAvLyBvZiB0aGUgY3VycmVudCB3b3JkIGZvciB0aGlzIGJv
dW5kYXJ5LCBtYWtpbmcgdGhlIG1vc3Qgb2YgdGhlIHNlbWFudGljcwotICAgIC8vIG9mIHByZXZp
b3VzV29yZFBvc2l0aW9uKCkgYW5kIG5leHRXb3JkUG9zaXRpb24oKS4KLSAgICBWaXNpYmxlUG9z
aXRpb24gcG9zaXRpb25BdFN0YXJ0T2ZDdXJyZW50V29yZCA9IHByZXZpb3VzV29yZFBvc2l0aW9u
KG5leHRXb3JkUG9zaXRpb24ocG9zaXRpb24pKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRp
b25BdFByZXZpb3VzV29yZCA9IHByZXZpb3VzV29yZFBvc2l0aW9uKHBvc2l0aW9uKTsKLQotICAg
IC8vIE5lZWQgdG8gY29uc2lkZXIgc3BlY2lhbCBjYXNlcyAocHVuY3R1YXRpb24pIHdoZW4gd2Ug
YXJlIGluIHRoZSBsYXN0IHdvcmQgb2YgYSBzZW50ZW5jZS4KLSAgICBpZiAoaXNTdGFydE9mV29y
ZChwb3NpdGlvbikgJiYgcG9zaXRpb25BdFByZXZpb3VzV29yZCAhPSBwb3NpdGlvbiAmJiBwb3Np
dGlvbkF0UHJldmlvdXNXb3JkID09IHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQpCi0gICAg
ICAgIHJldHVybiBuZXh0V29yZFBvc2l0aW9uKHBvc2l0aW9uQXRTdGFydE9mQ3VycmVudFdvcmQp
OwotCi0gICAgLy8gSW4gb3JkZXIgdG8gc2tpcCBzcGFjZXMgd2hlbiBtb3ZpbmcgbGVmdCwgd2Ug
YWR2YW5jZSBvbmUgd29yZCBiYWNrd2FyZHMKLSAgICAvLyBhbmQgdGhlbiBtb3ZlIG9uZSB3b3Jk
IGZvcndhcmQuIFRoaXMgd2lsbCBwdXQgdXMgYXQgdGhlIGJlZ2lubmluZyBvZgotICAgIC8vIHRo
ZSB3b3JkIGZvbGxvd2luZy4KLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25CZWZvcmVTcGFj
aW5nQW5kUHJlY2VlZGluZ1dvcmQgPSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3NpdGlvbkF0U3Rh
cnRPZkN1cnJlbnRXb3JkKTsKLQotICAgIGlmIChwb3NpdGlvbkJlZm9yZVNwYWNpbmdBbmRQcmVj
ZWVkaW5nV29yZCAhPSBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkKQotICAgICAgICBwb3Np
dGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkJlZm9y
ZVNwYWNpbmdBbmRQcmVjZWVkaW5nV29yZCk7Ci0KLSAgICBib29sIG1vdmluZ0ZvcndhcmRNb3Zl
ZFBvc2l0aW9uVG9FbmRPZkN1cnJlbnRXb3JkID0gbmV4dFdvcmRQb3NpdGlvbihwb3NpdGlvbkF0
U3RhcnRPZkN1cnJlbnRXb3JkKSA9PSBwcmV2aW91c1dvcmRQb3NpdGlvbihuZXh0V29yZFBvc2l0
aW9uKHBvc2l0aW9uKSk7Ci0gICAgaWYgKG1vdmluZ0ZvcndhcmRNb3ZlZFBvc2l0aW9uVG9FbmRP
ZkN1cnJlbnRXb3JkKQotICAgICAgICBwb3NpdGlvbkF0U3RhcnRPZkN1cnJlbnRXb3JkID0gcG9z
aXRpb25CZWZvcmVTcGFjaW5nQW5kUHJlY2VlZGluZ1dvcmQ7Ci0KLSAgICByZXR1cm4gcG9zaXRp
b25BdFN0YXJ0T2ZDdXJyZW50V29yZDsKLX0KLQotc3RhdGljIFZpc2libGVTZWxlY3Rpb24gd29y
ZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb25zdCBBY2Nlc3NpYmlsaXR5T2JqZWN0KiAvKmNv
cmVPYmplY3QqLywgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgQXRrVGV4dEJvdW5k
YXJ5IGJvdW5kYXJ5VHlwZSkKLXsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnRQb3NpdGlvbjsK
LSAgICBWaXNpYmxlUG9zaXRpb24gZW5kUG9zaXRpb247Ci0KLSAgICBzd2l0Y2ggKGJvdW5kYXJ5
VHlwZSkgewotICAgIGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVDoKLSAgICAgICAg
Ly8gaXNTdGFydE9mV29yZCgpIHJldHVybnMgdHJ1ZSBib3RoIHdoZW4gYXQgdGhlIGJlZ2lubmlu
ZyBvZiBhICJyZWFsIiB3b3JkCi0gICAgICAgIC8vIGFzIHdoZW4gYXQgdGhlIGJlZ2lubmluZyBv
ZiBhIHdoaXRlc3BhY2UgcmFuZ2UgYmV0d2VlbiB0d28gInJlYWwiIHdvcmRzLAotICAgICAgICAv
LyBzaW5jZSB0aGF0IHdoaXRlc3BhY2UgaXMgY29uc2lkZXJlZCBhICJ3b3JkIiBhcyB3ZWxsLiBB
bmQgaW4gY2FzZSB3ZSBhcmUKLSAgICAgICAgLy8gYWxyZWFkeSBhdCB0aGUgYmVnaW5uaW5nIG9m
IGEgInJlYWwiIHdvcmQgd2UgZG8gbm90IG5lZWQgdG8gbG9vayBiYWNrd2FyZHMuCi0gICAgICAg
IGlmIChpc1N0YXJ0T2ZXb3JkKHBvc2l0aW9uKSAmJiBkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVz
cGFjZShwb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpCi0gICAgICAgICAgICBzdGFydFBvc2l0
aW9uID0gcG9zaXRpb247Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24g
PSBwcmV2aW91c1dvcmRQb3NpdGlvbihwb3NpdGlvbik7Ci0gICAgICAgIGVuZFBvc2l0aW9uID0g
bmV4dFdvcmRTdGFydFBvc2l0aW9uKHN0YXJ0UG9zaXRpb24pOwotCi0gICAgICAgIC8vIFdlIG5l
ZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgbG9vayBmb3IgdGhlIHdvcmQgaW4gdGhlIGN1cnJlbnQg
bGluZSB3aGVuCi0gICAgICAgIC8vIHdlIGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGxp
bmUsIGFuZCBub3QgbG9vayBpbnRvIHRoZSBwcmV2aW91cyBvbmUKLSAgICAgICAgLy8gYXQgYWxs
LCB3aGljaCBtaWdodCBoYXBwZW4gd2hlbiBsaW5lcyBiZWxvbmcgdG8gZGlmZmVyZW50IG5vZGVz
LgotICAgICAgICBpZiAoaXNTdGFydE9mTGluZShwb3NpdGlvbikgJiYgaXNTdGFydE9mTGluZShl
bmRQb3NpdGlvbikpIHsKLSAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBlbmRQb3NpdGlvbjsK
LSAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gbmV4dFdvcmRTdGFydFBvc2l0aW9uKHN0YXJ0UG9z
aXRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBVEtfVEVYVF9C
T1VOREFSWV9XT1JEX0VORDoKLSAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHByZXZpb3VzV29yZEVu
ZFBvc2l0aW9uKHBvc2l0aW9uKTsKLSAgICAgICAgZW5kUG9zaXRpb24gPSBuZXh0V29yZFBvc2l0
aW9uKHN0YXJ0UG9zaXRpb24pOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIFZpc2libGVTZWxlY3Rpb24g
c2VsZWN0ZWRXb3JkKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLQotICAgIC8vIFdlIG1h
cmsgdGhlIHNlbGVjdGlvbiBhcyAndXBzdHJlYW0nIHNvIHdlIGNhbiB1c2UgdGhhdCBpbmZvcm1h
dGlvbiBsYXRlciwKLSAgICAvLyB3aGVuIGZpbmRpbmcgdGhlIGFjdHVhbCBvZmZzZXRzIGluIGdl
dFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoKS4KLSAgICBpZiAoYm91bmRhcnlUeXBlID09IEFU
S19URVhUX0JPVU5EQVJZX1dPUkRfRU5EKQotICAgICAgICBzZWxlY3RlZFdvcmQuc2V0QWZmaW5p
dHkoQWZmaW5pdHk6OlVwc3RyZWFtKTsKLQotICAgIHJldHVybiBzZWxlY3RlZFdvcmQ7Ci19Ci0K
LXN0YXRpYyBpbnQgbnVtYmVyT2ZSZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KEF0a1RleHQq
IHRleHQsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IHRleHRGb3JP
YmplY3Qod2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0KHRleHQsIDAsIG9mZnNldCkpOwotICAg
IFN0cmluZyB0ZXh0QmVmb3JlT2Zmc2V0ID0gU3RyaW5nOjpmcm9tVVRGOCh0ZXh0Rm9yT2JqZWN0
LmdldCgpKTsKLQotICAgIGludCBjb3VudCA9IDA7Ci0gICAgc2l6ZV90IGluZGV4ID0gdGV4dEJl
Zm9yZU9mZnNldC5maW5kKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAwKTsKLSAgICB3aGls
ZSAoaW5kZXggPCBvZmZzZXQgJiYgaW5kZXggIT0gbm90Rm91bmQpIHsKLSAgICAgICAgaW5kZXgg
PSB0ZXh0QmVmb3JlT2Zmc2V0LmZpbmQob2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIGluZGV4
ICsgMSk7Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotICAgIHJldHVybiBjb3VudDsKLX0KLQot
c3RhdGljIGNoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0V29yZEZvckJvdW5kYXJ5KEF0a1RleHQq
IHRleHQsIGludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIEdldFRleHRS
ZWxhdGl2ZVBvc2l0aW9uIHRleHRQb3NpdGlvbiwgaW50KiBzdGFydE9mZnNldCwgaW50KiBlbmRP
ZmZzZXQpCi17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4
dCk7Ci0gICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKLSAg
ICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZz
ZXQoMCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0KLSAgICBOb2RlKiBub2RlID0gZ2V0Tm9k
ZUZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCk7Ci0gICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZzZXQsIGVu
ZE9mZnNldCk7Ci0KLSAgICBpbnQgYWN0dWFsT2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zm
c2V0KHRleHQsIG9mZnNldCk7Ci0KLSAgICAvLyBCZXNpZGVzIG9mIHRoZSB1c3VhbCBjb252ZXJz
aW9uIGZyb20gQVRLIG9mZnNldHMgdG8gV2ViQ29yZSBvZmZzZXRzLAotICAgIC8vIHdlIG5lZWQg
dG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBlbWJlZGRlZCBvYmplY3RzIHRoYXQgbWlnaHQgaGF2
ZSBiZWVuCi0gICAgLy8gaW5zZXJ0ZWQgaW4gdGhlIHRleHQgZXhwb3NlZCB0aHJvdWdoIEF0a1Rl
eHQgd2hlbiBjYWxjdWxhdGluZyB0aGUgb2Zmc2V0LgotICAgIGFjdHVhbE9mZnNldCAtPSBudW1i
ZXJPZlJlcGxhY2VkRWxlbWVudHNCZWZvcmVPZmZzZXQodGV4dCwgYWN0dWFsT2Zmc2V0KTsKLQot
ICAgIFZpc2libGVQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gY29yZU9iamVjdC0+dmlzaWJsZVBv
c2l0aW9uRm9ySW5kZXgoYWN0dWFsT2Zmc2V0KTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJl
bnRXb3JkID0gd29yZEF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBjYXJldFBv
c2l0aW9uLCBib3VuZGFyeVR5cGUpOwotCi0gICAgLy8gVGFrZSBpbnRvIGFjY291bnQgb3RoZXIg
cmVsYXRpdmUgcG9zaXRpb25zLCBpZiBuZWVkZWQsIGJ5Ci0gICAgLy8gY2FsY3VsYXRpbmcgdGhl
IG5ldyBwb3NpdGlvbiB0aGF0IHdlIHdvdWxkIG5lZWQgdG8gY29uc2lkZXIuCi0gICAgVmlzaWJs
ZVBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gY2FyZXRQb3NpdGlvbjsKLSAgICBzd2l0Y2ggKHRleHRQ
b3NpdGlvbikgewotICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQXQ6Ci0gICAgICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBHZXRUZXh0UG9zaXRpb25CZWZvcmU6Ci0gICAgICAgIC8vIEVhcmx5IHJldHVy
biBpZiBhc2tpbmcgZm9yIHRoZSBwcmV2aW91cyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGJl
Z2lubmluZy4KLSAgICAgICAgaWYgKGlzRmlyc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3VycmVu
dFdvcmQudmlzaWJsZVN0YXJ0KCksIG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5VGV4
dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotCi0gICAgICAg
IGlmIChpc1N0YXJ0T2ZMaW5lKGN1cnJlbnRXb3JkLmVuZCgpKSkKLSAgICAgICAgICAgIG5ld1Bv
c2l0aW9uID0gY3VycmVudFdvcmQudmlzaWJsZVN0YXJ0KCkucHJldmlvdXMoKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbmV3UG9zaXRpb24gPSBzdGFydE9mV29yZChjdXJyZW50V29yZC5z
dGFydCgpLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBHZXRUZXh0UG9zaXRpb25BZnRlcjoKLSAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIGFza2lu
ZyBmb3IgdGhlIGZvbGxvd2luZyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGVuZC4KLSAgICAg
ICAgaWYgKGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjdXJyZW50V29yZC52aXNpYmxlRW5k
KCksIG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0
KGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgoY29yZU9iamVjdCksIHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQpOwotCi0gICAgICAgIGlmIChpc0VuZE9mTGluZShjdXJyZW50V29yZC5lbmQoKSkpCi0g
ICAgICAgICAgICBuZXdQb3NpdGlvbiA9IGN1cnJlbnRXb3JkLnZpc2libGVFbmQoKS5uZXh0KCk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gZW5kT2ZXb3JkKGN1cnJl
bnRXb3JkLmVuZCgpLCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwotICAgICAgICBicmVhazsKLQot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAg
IC8vIERldGVybWluZSB0aGUgcmVsZXZhbnQgd29yZCB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3Rl
ZCBpbgotICAgIC8vIGFuZCBjYWxjdWxhdGUgdGhlIEFUSyBvZmZzZXRzIGZvciBpdCwgdGhlbiBy
ZXR1cm4gZXZlcnl0aGluZy4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkV29yZCA9IG5l
d1Bvc2l0aW9uICE9IGNhcmV0UG9zaXRpb24gPyB3b3JkQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5
KGNvcmVPYmplY3QsIG5ld1Bvc2l0aW9uLCBib3VuZGFyeVR5cGUpIDogY3VycmVudFdvcmQ7Ci0g
ICAgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChjb3JlT2JqZWN0LCBzZWxlY3RlZFdvcmQs
ICpzdGFydE9mZnNldCwgKmVuZE9mZnNldCk7Ci0gICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVU
ZXh0R2V0VGV4dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwotfQotCi1zdGF0aWMg
Ym9vbCBpc1NlbnRlbmNlQm91bmRhcnkoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZwb3MpCi17Ci0g
ICAgaWYgKHBvcy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgc2VudGVuY2UgYm91bmRhcnkgaWYgdGhlcmUncyBub3RoaW5nIGJlZm9y
ZS4KLSAgICBpZiAocG9zLnByZXZpb3VzKCkuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gV2UgZ28gYmFja3dhcmRzIGFuZCBmb3J3YXJkIHRvIG1ha2Ugc3VyZSBhYm91
dCB0aGlzLgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mUHJldmlvdXNTZW50ZW5jZSA9IHN0
YXJ0T2ZTZW50ZW5jZShwb3MpOwotICAgIHJldHVybiBzdGFydE9mUHJldmlvdXNTZW50ZW5jZS5p
c05vdE51bGwoKSAmJiBwb3MgPT0gZW5kT2ZTZW50ZW5jZShzdGFydE9mUHJldmlvdXNTZW50ZW5j
ZSk7Ci19Ci0KLXN0YXRpYyBib29sIGlzV2hpdGVTcGFjZUJldHdlZW5TZW50ZW5jZXMoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbikKLXsKLSAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVwcmVjYXRlZElzRWRpdGluZ1do
aXRlc3BhY2UocG9zaXRpb24uY2hhcmFjdGVyQWZ0ZXIoKSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gc3RhcnQgPSBzdGFydE9mV29yZChwb3NpdGlvbiwgUmlnaHRXb3JkSWZP
bkJvdW5kYXJ5KTsKLSAgICBhdXRvIGVuZCA9IGVuZE9mV29yZChzdGFydCwgUmlnaHRXb3JkSWZP
bkJvdW5kYXJ5KTsKLSAgICBpZiAoIWlzU2VudGVuY2VCb3VuZGFyeShzdGFydCkgJiYgIWlzU2Vu
dGVuY2VCb3VuZGFyeShlbmQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHJh
bmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwotICAgIHJldHVybiByYW5nZSAmJiBj
b250YWluczxDb21wb3NlZFRyZWU+KCpyYW5nZSwgbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
KTsKLX0KLQotc3RhdGljIFZpc2libGVTZWxlY3Rpb24gc2VudGVuY2VBdFBvc2l0aW9uRm9yQXRr
Qm91bmRhcnkoY29uc3QgQWNjZXNzaWJpbGl0eU9iamVjdCosIGNvbnN0IFZpc2libGVQb3NpdGlv
biYgcG9zaXRpb24sIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUpCi17Ci0gICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb247Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9u
OwotCi0gICAgYm9vbCBpc0F0U3RhcnRPZlNlbnRlbmNlRm9yRW5kQm91bmRhcnkgPSBpc1doaXRl
U3BhY2VCZXR3ZWVuU2VudGVuY2VzKHBvc2l0aW9uKSB8fCBpc1NlbnRlbmNlQm91bmRhcnkocG9z
aXRpb24pOwotICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVO
Q0VfU1RBUlQgfHwgIWlzQXRTdGFydE9mU2VudGVuY2VGb3JFbmRCb3VuZGFyeSkgewotICAgICAg
ICBzdGFydFBvc2l0aW9uID0gaXNTZW50ZW5jZUJvdW5kYXJ5KHBvc2l0aW9uKSA/IHBvc2l0aW9u
IDogc3RhcnRPZlNlbnRlbmNlKHBvc2l0aW9uKTsKLSAgICAgICAgLy8gc3RhcnRPZlNlbnRlbmNl
IG1pZ2h0IHN0b3AgYXQgYSBsaW5lYnJlYWsgaW4gdGhlIEhUTUwgc291cmNlIGNvZGUsCi0gICAg
ICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIHN0b3AgdGhlcmUgeWV0LCBzbyBrZWVwIGdvaW5n
LgotICAgICAgICB3aGlsZSAoIWlzU2VudGVuY2VCb3VuZGFyeShzdGFydFBvc2l0aW9uKSAmJiBp
c0hUTUxMaW5lQnJlYWsoc3RhcnRQb3NpdGlvbi5jaGFyYWN0ZXJCZWZvcmUoKSkpCi0gICAgICAg
ICAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRPZlNlbnRlbmNlKHN0YXJ0UG9zaXRpb24pOwotCi0g
ICAgICAgIGVuZFBvc2l0aW9uID0gZW5kT2ZTZW50ZW5jZShzdGFydFBvc2l0aW9uKTsKLSAgICB9
Ci0KLSAgICBpZiAoYm91bmRhcnlUeXBlID09IEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VO
RCkgewotICAgICAgICBpZiAoaXNBdFN0YXJ0T2ZTZW50ZW5jZUZvckVuZEJvdW5kYXJ5KSB7Ci0g
ICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gcG9zaXRpb247Ci0gICAgICAgICAgICBlbmRQb3Np
dGlvbiA9IGVuZE9mU2VudGVuY2UoZW5kT2ZXb3JkKHBvc2l0aW9uLCBSaWdodFdvcmRJZk9uQm91
bmRhcnkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHN0YXJ0T2ZTZW50ZW5jZSByZXR1cm5z
IGEgcG9zaXRpb24gYWZ0ZXIgYW55IHdoaXRlIHNwYWNlIHByZXZpb3VzIHRvCi0gICAgICAgIC8v
IHRoZSBzZW50ZW5jZSwgc28gd2UgbWlnaHQgbmVlZCB0byBhZGp1c3QgdGhhdCBvZmZzZXQgZm9y
IHRoaXMgYm91bmRhcnkuCi0gICAgICAgIGlmIChkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFj
ZShzdGFydFBvc2l0aW9uLmNoYXJhY3RlckJlZm9yZSgpKSkKLSAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBzdGFydE9mV29yZChzdGFydFBvc2l0aW9uLCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7
Ci0KLSAgICAgICAgLy8gZW5kT2ZTZW50ZW5jZSByZXR1cm5zIGEgcG9zaXRpb24gYWZ0ZXIgYW55
IHdoaXRlIHNwYWNlIGFmdGVyIHRoZQotICAgICAgICAvLyBzZW50ZW5jZSwgc28gd2UgbWlnaHQg
bmVlZCB0byBhZGp1c3QgdGhhdCBvZmZzZXQgZm9yIHRoaXMgYm91bmRhcnkuCi0gICAgICAgIGlm
IChkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFjZShlbmRQb3NpdGlvbi5jaGFyYWN0ZXJCZWZv
cmUoKSkpCi0gICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKGVuZFBvc2l0aW9u
LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7Ci0KLSAgICAgICAgLy8gRmluYWxseSwgZG8gc29tZSBh
ZGRpdGlvbmFsIGFkanVzdG1lbnRzIHRoYXQgbWlnaHQgYmUgbmVlZGVkIGlmCi0gICAgICAgIC8v
IHBvc2l0aW9ucyBhcmUgYXQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQgb2YgYSBsaW5lLgotICAgICAg
ICBpZiAoaXNTdGFydE9mTGluZShzdGFydFBvc2l0aW9uKSAmJiAhaXNTdGFydE9mQmxvY2soc3Rh
cnRQb3NpdGlvbikpCi0gICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbi5w
cmV2aW91cygpOwotICAgICAgICBpZiAoaXNTdGFydE9mTGluZShlbmRQb3NpdGlvbikgJiYgIWlz
U3RhcnRPZkJsb2NrKGVuZFBvc2l0aW9uKSkKLSAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gZW5k
UG9zaXRpb24ucHJldmlvdXMoKTsKLSAgICB9Ci0KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGVkU2VudGVuY2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotCi0gICAgLy8gV2UgbWFy
ayB0aGUgc2VsZWN0aW9uIGFzICd1cHN0cmVhbScgc28gd2UgY2FuIHVzZSB0aGF0IGluZm9ybWF0
aW9uIGxhdGVyLAotICAgIC8vIHdoZW4gZmluZGluZyB0aGUgYWN0dWFsIG9mZnNldHMgaW4gZ2V0
U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCgpLgotICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRL
X1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfRU5EKQotICAgICAgICBzZWxlY3RlZFNlbnRlbmNlLnNl
dEFmZmluaXR5KEFmZmluaXR5OjpVcHN0cmVhbSk7Ci0KLSAgICByZXR1cm4gc2VsZWN0ZWRTZW50
ZW5jZTsKLX0KLQotc3RhdGljIGNoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0U2VudGVuY2VGb3JC
b3VuZGFyeShBdGtUZXh0KiB0ZXh0LCBpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRh
cnlUeXBlLCBHZXRUZXh0UmVsYXRpdmVQb3NpdGlvbiB0ZXh0UG9zaXRpb24sIGludCogc3RhcnRP
ZmZzZXQsIGludCogZW5kT2Zmc2V0KQotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVP
YmplY3QgPSBjb3JlKHRleHQpOwotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGNvcmVPYmplY3Qt
PmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGVtcHR5VGV4
dFNlbGVjdGlvbkF0T2Zmc2V0KDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotCi0gICAgTm9k
ZSogbm9kZSA9IGdldE5vZGVGb3JBY2Nlc3NpYmlsaXR5T2JqZWN0KGNvcmVPYmplY3QpOwotICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIGVtcHR5VGV4dFNlbGVjdGlvbkF0T2Zmc2V0KDAs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotCi0gICAgaW50IGFjdHVhbE9mZnNldCA9IGF0a09m
ZnNldFRvV2ViQ29yZU9mZnNldCh0ZXh0LCBvZmZzZXQpOwotCi0gICAgLy8gQmVzaWRlcyBvZiB0
aGUgdXN1YWwgY29udmVyc2lvbiBmcm9tIEFUSyBvZmZzZXRzIHRvIFdlYkNvcmUgb2Zmc2V0cywK
LSAgICAvLyB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBwb3RlbnRpYWwgZW1iZWRkZWQgb2JqZWN0
cyB0aGF0IG1pZ2h0IGhhdmUgYmVlbgotICAgIC8vIGluc2VydGVkIGluIHRoZSB0ZXh0IGV4cG9z
ZWQgdGhyb3VnaCBBdGtUZXh0IHdoZW4gY2FsY3VsYXRpbmcgdGhlIG9mZnNldC4KLSAgICBhY3R1
YWxPZmZzZXQgLT0gbnVtYmVyT2ZSZXBsYWNlZEVsZW1lbnRzQmVmb3JlT2Zmc2V0KHRleHQsIGFj
dHVhbE9mZnNldCk7Ci0KLSAgICBWaXNpYmxlUG9zaXRpb24gY2FyZXRQb3NpdGlvbiA9IGNvcmVP
YmplY3QtPnZpc2libGVQb3NpdGlvbkZvckluZGV4KGFjdHVhbE9mZnNldCk7Ci0gICAgVmlzaWJs
ZVNlbGVjdGlvbiBjdXJyZW50U2VudGVuY2UgPSBzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3Vu
ZGFyeShjb3JlT2JqZWN0LCBjYXJldFBvc2l0aW9uLCBib3VuZGFyeVR5cGUpOwotCi0gICAgLy8g
VGFrZSBpbnRvIGFjY291bnQgb3RoZXIgcmVsYXRpdmUgcG9zaXRpb25zLCBpZiBuZWVkZWQsIGJ5
Ci0gICAgLy8gY2FsY3VsYXRpbmcgdGhlIG5ldyBwb3NpdGlvbiB0aGF0IHdlIHdvdWxkIG5lZWQg
dG8gY29uc2lkZXIuCi0gICAgVmlzaWJsZVBvc2l0aW9uIG5ld1Bvc2l0aW9uID0gY2FyZXRQb3Np
dGlvbjsKLSAgICBzd2l0Y2ggKHRleHRQb3NpdGlvbikgewotICAgIGNhc2UgR2V0VGV4dFBvc2l0
aW9uQXQ6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBHZXRUZXh0UG9zaXRpb25CZWZvcmU6
Ci0gICAgICAgIC8vIEVhcmx5IHJldHVybiBpZiBhc2tpbmcgZm9yIHRoZSBwcmV2aW91cyBzZW50
ZW5jZSB3aGlsZSBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcuCi0gICAgICAgIGlmIChpc0ZpcnN0
VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGN1cnJlbnRTZW50ZW5jZS52aXNpYmxlU3RhcnQoKSwgbm9k
ZSkpCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3Rh
cnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0gICAgICAgIG5ld1Bvc2l0aW9uID0gY3VycmVudFNlbnRl
bmNlLnZpc2libGVTdGFydCgpLnByZXZpb3VzKCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBHZXRUZXh0UG9zaXRpb25BZnRlcjoKLSAgICAgICAgLy8gRWFybHkgcmV0dXJuIGlmIGFza2lu
ZyBmb3IgdGhlIGZvbGxvd2luZyB3b3JkIHdoaWxlIGFscmVhZHkgYXQgdGhlIGVuZC4KLSAgICAg
ICAgaWYgKGlzTGFzdFZpc2libGVQb3NpdGlvbkluTm9kZShjdXJyZW50U2VudGVuY2UudmlzaWJs
ZUVuZCgpLCBub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9m
ZnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpLCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKLSAgICAgICAgbmV3UG9zaXRpb24gPSBjdXJyZW50U2VudGVuY2UudmlzaWJs
ZUVuZCgpLm5leHQoKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIHJlbGV2
YW50IHNlbnRlbmNlIHdlIGFyZSBhY3R1YWxseSBpbnRlcmVzdGVkIGluCi0gICAgLy8gYW5kIGNh
bGN1bGF0ZSB0aGUgQVRLIG9mZnNldHMgZm9yIGl0LCB0aGVuIHJldHVybiBldmVyeXRoaW5nLgot
ICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0ZWRTZW50ZW5jZSA9IG5ld1Bvc2l0aW9uICE9IGNh
cmV0UG9zaXRpb24gPyBzZW50ZW5jZUF0UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0
LCBuZXdQb3NpdGlvbiwgYm91bmRhcnlUeXBlKSA6IGN1cnJlbnRTZW50ZW5jZTsKLSAgICBnZXRT
ZWxlY3Rpb25PZmZzZXRzRm9yT2JqZWN0KGNvcmVPYmplY3QsIHNlbGVjdGVkU2VudGVuY2UsICpz
dGFydE9mZnNldCwgKmVuZE9mZnNldCk7Ci0gICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgVmlz
aWJsZVNlbGVjdGlvbiBsaW5lQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvbnN0IEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24s
IEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGNvcmVP
YmplY3QpOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9uOwotICAgIFZpc2libGVQ
b3NpdGlvbiBlbmRQb3NpdGlvbjsKLQotICAgIHN3aXRjaCAoYm91bmRhcnlUeXBlKSB7Ci0gICAg
Y2FzZSBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX1NUQVJUOgotICAgICAgICBzdGFydFBvc2l0aW9u
ID0gaXNTdGFydE9mTGluZShwb3NpdGlvbikgPyBwb3NpdGlvbiA6IGxvZ2ljYWxTdGFydE9mTGlu
ZShwb3NpdGlvbik7Ci0gICAgICAgIGVuZFBvc2l0aW9uID0gbG9naWNhbEVuZE9mTGluZShwb3Np
dGlvbik7Ci0KLSAgICAgICAgLy8gSW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhhdCB3ZSBhcmUg
bm90IGF0IHRoZSBlbmQgb2YgYSBibG9jaywgd2UgbmVlZAotICAgICAgICAvLyB0byBjaGVjayB0
aGF0IGVuZFBvc2l0aW9uIGhhcyBub3QgVVBTVFJFQU0gYWZmaW5pdHksIHNpbmNlIHRoYXQgd291
bGQKLSAgICAgICAgLy8gY2F1c2UgdHJvdWJsZSBpbnNpZGUgb2YgdGV4dCBjb250cm9scyAod2Ug
d291bGQgYmUgYWR2YW5jaW5nIHRvbyBtdWNoKS4KLSAgICAgICAgaWYgKCFpc0VuZE9mQmxvY2so
ZW5kUG9zaXRpb24pICYmIGVuZFBvc2l0aW9uLmFmZmluaXR5KCkgIT0gQWZmaW5pdHk6OlVwc3Ry
ZWFtKQotICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBlbmRQb3NpdGlvbi5uZXh0KCk7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBBVEtfVEVYVF9CT1VOREFSWV9MSU5FX0VORDoKLSAgICAg
ICAgc3RhcnRQb3NpdGlvbiA9IGlzRW5kT2ZMaW5lKHBvc2l0aW9uKSA/IHBvc2l0aW9uIDogbG9n
aWNhbFN0YXJ0T2ZMaW5lKHBvc2l0aW9uKTsKLSAgICAgICAgaWYgKCFpc1N0YXJ0T2ZCbG9jayhz
dGFydFBvc2l0aW9uKSkKLSAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBzdGFydFBvc2l0aW9u
LnByZXZpb3VzKCk7Ci0gICAgICAgIGVuZFBvc2l0aW9uID0gbG9naWNhbEVuZE9mTGluZShwb3Np
dGlvbik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3RlZExpbmUo
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotCi0gICAgLy8gV2UgbWFyayB0aGUgc2VsZWN0
aW9uIGFzICd1cHN0cmVhbScgc28gd2UgY2FuIHVzZSB0aGF0IGluZm9ybWF0aW9uIGxhdGVyLAot
ICAgIC8vIHdoZW4gZmluZGluZyB0aGUgYWN0dWFsIG9mZnNldHMgaW4gZ2V0U2VsZWN0aW9uT2Zm
c2V0c0Zvck9iamVjdCgpLgotICAgIGlmIChib3VuZGFyeVR5cGUgPT0gQVRLX1RFWFRfQk9VTkRB
UllfTElORV9FTkQpCi0gICAgICAgIHNlbGVjdGVkTGluZS5zZXRBZmZpbml0eShBZmZpbml0eTo6
VXBzdHJlYW0pOwotCi0gICAgcmV0dXJuIHNlbGVjdGVkTGluZTsKLX0KLQotc3RhdGljIGNoYXIq
IHdlYmtpdEFjY2Vzc2libGVUZXh0TGluZUZvckJvdW5kYXJ5KEF0a1RleHQqIHRleHQsIGludCBv
ZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIEdldFRleHRSZWxhdGl2ZVBvc2l0
aW9uIHRleHRQb3NpdGlvbiwgaW50KiBzdGFydE9mZnNldCwgaW50KiBlbmRPZmZzZXQpCi17Ci0g
ICAgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0gICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gY29yZU9iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3Vt
ZW50KQotICAgICAgICByZXR1cm4gZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCk7Ci0KLSAgICBOb2RlKiBub2RlID0gZ2V0Tm9kZUZvckFjY2Vzc2li
aWxpdHlPYmplY3QoY29yZU9iamVjdCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
ZW1wdHlUZXh0U2VsZWN0aW9uQXRPZmZzZXQoMCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0K
LSAgICBpbnQgYWN0dWFsT2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zmc2V0KHRleHQsIG9m
ZnNldCk7Ci0KLSAgICAvLyBCZXNpZGVzIHRoZSB1c3VhbCBjb252ZXJzaW9uIGZyb20gQVRLIG9m
ZnNldHMgdG8gV2ViQ29yZSBvZmZzZXRzLAotICAgIC8vIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhl
IHBvdGVudGlhbCBlbWJlZGRlZCBvYmplY3RzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuCi0gICAgLy8g
aW5zZXJ0ZWQgaW4gdGhlIHRleHQgZXhwb3NlZCB0aHJvdWdoIEF0a1RleHQgd2hlbiBjYWxjdWxh
dGluZyB0aGUgb2Zmc2V0LgotICAgIGFjdHVhbE9mZnNldCAtPSBudW1iZXJPZlJlcGxhY2VkRWxl
bWVudHNCZWZvcmVPZmZzZXQodGV4dCwgYWN0dWFsT2Zmc2V0KTsKLQotICAgIFZpc2libGVQb3Np
dGlvbiBjYXJldFBvc2l0aW9uID0gY29yZU9iamVjdC0+dmlzaWJsZVBvc2l0aW9uRm9ySW5kZXgo
YWN0dWFsT2Zmc2V0KTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRMaW5lID0gbGluZUF0
UG9zaXRpb25Gb3JBdGtCb3VuZGFyeShjb3JlT2JqZWN0LCBjYXJldFBvc2l0aW9uLCBib3VuZGFy
eVR5cGUpOwotCi0gICAgLy8gVGFrZSBpbnRvIGFjY291bnQgb3RoZXIgcmVsYXRpdmUgcG9zaXRp
b25zLCBpZiBuZWVkZWQsIGJ5Ci0gICAgLy8gY2FsY3VsYXRpbmcgdGhlIG5ldyBwb3NpdGlvbiB0
aGF0IHdlIHdvdWxkIG5lZWQgdG8gY29uc2lkZXIuCi0gICAgVmlzaWJsZVBvc2l0aW9uIG5ld1Bv
c2l0aW9uID0gY2FyZXRQb3NpdGlvbjsKLSAgICBzd2l0Y2ggKHRleHRQb3NpdGlvbikgewotICAg
IGNhc2UgR2V0VGV4dFBvc2l0aW9uQXQ6Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gZG8gYWRkaXRp
b25hbCB3b3JrIGlmIHdlIGFyZSB1c2luZyB0aGUgImF0IiBwb3NpdGlvbiwgd2UganVzdAotICAg
ICAgICAvLyBleHBsaWNpdGx5IGxpc3QgdGhpcyBjYXNlIG9wdGlvbiB0byBjYXRjaCBpbnZhbGlk
IHZhbHVlcyBpbiB0aGUgZGVmYXVsdCBjYXNlLgotICAgICAgICBicmVhazsKLQotICAgIGNhc2Ug
R2V0VGV4dFBvc2l0aW9uQmVmb3JlOgotICAgICAgICAvLyBFYXJseSByZXR1cm4gaWYgYXNraW5n
IGZvciB0aGUgcHJldmlvdXMgbGluZSB3aGlsZSBhbHJlYWR5IGF0IHRoZSBiZWdpbm5pbmcuCi0g
ICAgICAgIGlmIChpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGN1cnJlbnRMaW5lLnZpc2li
bGVTdGFydCgpLCBub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25B
dE9mZnNldCgwLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLSAgICAgICAgbmV3UG9zaXRpb24g
PSBjdXJyZW50TGluZS52aXNpYmxlU3RhcnQoKS5wcmV2aW91cygpOwotICAgICAgICBicmVhazsK
LQotICAgIGNhc2UgR2V0VGV4dFBvc2l0aW9uQWZ0ZXI6Ci0gICAgICAgIC8vIEVhcmx5IHJldHVy
biBpZiBhc2tpbmcgZm9yIHRoZSBmb2xsb3dpbmcgd29yZCB3aGlsZSBhbHJlYWR5IGF0IHRoZSBl
bmQuCi0gICAgICAgIGlmIChpc0xhc3RWaXNpYmxlUG9zaXRpb25Jbk5vZGUoY3VycmVudExpbmUu
dmlzaWJsZUVuZCgpLCBub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rp
b25BdE9mZnNldChhY2Nlc3NpYmlsaXR5T2JqZWN0TGVuZ3RoKGNvcmVPYmplY3QpLCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKLSAgICAgICAgbmV3UG9zaXRpb24gPSBjdXJyZW50TGluZS52aXNp
YmxlRW5kKCkubmV4dCgpOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIC8vIERldGVybWluZSB0aGUgcmVs
ZXZhbnQgbGluZSB3ZSBhcmUgYWN0dWFsbHkgaW50ZXJlc3RlZCBpbgotICAgIC8vIGFuZCBjYWxj
dWxhdGUgdGhlIEFUSyBvZmZzZXRzIGZvciBpdCwgdGhlbiByZXR1cm4gZXZlcnl0aGluZy4KLSAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkTGluZSA9IG5ld1Bvc2l0aW9uICE9IGNhcmV0UG9z
aXRpb24gPyBsaW5lQXRQb3NpdGlvbkZvckF0a0JvdW5kYXJ5KGNvcmVPYmplY3QsIG5ld1Bvc2l0
aW9uLCBib3VuZGFyeVR5cGUpIDogY3VycmVudExpbmU7Ci0gICAgZ2V0U2VsZWN0aW9uT2Zmc2V0
c0Zvck9iamVjdChjb3JlT2JqZWN0LCBzZWxlY3RlZExpbmUsICpzdGFydE9mZnNldCwgKmVuZE9m
ZnNldCk7Ci0KLSAgICAvLyBXZSBtaWdodCBuZWVkIHRvIGFkanVzdCB0aGUgc3RhcnQgb3IgZW5k
IG9mZnNldCB0byBpbmNsdWRlIHRoZSBsaXN0IGl0ZW0gbWFya2VyLAotICAgIC8vIGlmIHByZXNl
bnQsIHdoZW4gcHJpbnRpbmcgdGhlIGZpcnN0IG9yIHRoZSBsYXN0IGZ1bGwgbGluZSBmb3IgYSBs
aXN0IGl0ZW0uCi0gICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGNvcmVPYmplY3QtPnJlbmRl
cmVyKCk7Ci0gICAgaWYgKHJlbmRlcmVyLT5pc0xpc3RJdGVtKCkpIHsKLSAgICAgICAgLy8gRm9y
IExlZnQtdG8tUmlnaHQsIHRoZSBsaXN0IGl0ZW0gbWFya2VyIGlzIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlIGV4cG9zZWQgdGV4dC4KLSAgICAgICAgaWYgKHJlbmRlcmVyLT5zdHlsZSgpLmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiAmJiBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5O
b2RlKHNlbGVjdGVkTGluZS52aXNpYmxlU3RhcnQoKSwgbm9kZSkpCi0gICAgICAgICAgICAqc3Rh
cnRPZmZzZXQgPSAwOwotCi0gICAgICAgIC8vIEZvciBSaWdodC10by1MZWZ0LCB0aGUgbGlzdCBp
dGVtIG1hcmtlciBpcyBhdCB0aGUgZW5kIG9mIHRoZSBleHBvc2VkIHRleHQuCi0gICAgICAgIGlm
IChyZW5kZXJlci0+c3R5bGUoKS5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYg
aXNMYXN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKHNlbGVjdGVkTGluZS52aXNpYmxlRW5kKCksIG5v
ZGUpKQotICAgICAgICAgICAgKmVuZE9mZnNldCA9IGFjY2Vzc2liaWxpdHlPYmplY3RMZW5ndGgo
Y29yZU9iamVjdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0
VGV4dCh0ZXh0LCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwotfQotCi1zdGF0aWMgZ2NoYXIq
IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldChBdGtUZXh0KiB0ZXh0LCBnaW50
IG9mZnNldCwgQXRrVGV4dEJvdW5kYXJ5IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFJlbGF0aXZlUG9z
aXRpb24gdGV4dFBvc2l0aW9uLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQot
ewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAg
IGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBlbXB0eVRleHRTZWxlY3Rpb25BdE9mZnNldCgwLCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKLQotICAgIHN3aXRjaCAoYm91bmRhcnlUeXBlKSB7Ci0gICAg
Y2FzZSBBVEtfVEVYVF9CT1VOREFSWV9DSEFSOgotICAgICAgICByZXR1cm4gd2Via2l0QWNjZXNz
aWJsZVRleHRHZXRDaGFyKHRleHQsIG9mZnNldCwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0KTsKLQotICAgIGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9TVEFSVDoKLSAg
ICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX1dPUkRfRU5EOgotICAgICAgICByZXR1cm4gd2Via2l0
QWNjZXNzaWJsZVRleHRXb3JkRm9yQm91bmRhcnkodGV4dCwgb2Zmc2V0LCBib3VuZGFyeVR5cGUs
IHRleHRQb3NpdGlvbiwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci0KLSAgICBjYXNlIEFUS19U
RVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQ6Ci0gICAgY2FzZSBBVEtfVEVYVF9CT1VOREFSWV9MSU5F
X0VORDoKLSAgICAgICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0TGluZUZvckJvdW5kYXJ5
KHRleHQsIG9mZnNldCwgYm91bmRhcnlUeXBlLCB0ZXh0UG9zaXRpb24sIHN0YXJ0T2Zmc2V0LCBl
bmRPZmZzZXQpOwotCi0gICAgY2FzZSBBVEtfVEVYVF9CT1VOREFSWV9TRU5URU5DRV9TVEFSVDoK
LSAgICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX0VORDoKLSAgICAgICAgcmV0dXJu
IHdlYmtpdEFjY2Vzc2libGVUZXh0U2VudGVuY2VGb3JCb3VuZGFyeSh0ZXh0LCBvZmZzZXQsIGJv
dW5kYXJ5VHlwZSwgdGV4dFBvc2l0aW9uLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLQotICAgIC8v
IFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQuCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QWZ0ZXJPZmZzZXQoQXRrVGV4dCog
dGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIGdpbnQqIHN0
YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
QVRLX1RFWFQodGV4dCksIDApOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52
YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSwgMCk7Ci0KLSAgICByZXR1cm4gd2Via2l0QWNj
ZXNzaWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KHRleHQsIG9mZnNldCwgYm91bmRhcnlUeXBlLCBH
ZXRUZXh0UG9zaXRpb25BZnRlciwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci19Ci0KLXN0YXRp
YyBnY2hhciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QXRPZmZzZXQoQXRrVGV4dCogdGV4
dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUsIGdpbnQqIHN0YXJ0
T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRL
X1RFWFQodGV4dCksIDApOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxp
ZChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSwgMCk7Ci0KLSAgICByZXR1cm4gd2Via2l0QWNjZXNz
aWJsZVRleHRHZXRUZXh0Rm9yT2Zmc2V0KHRleHQsIG9mZnNldCwgYm91bmRhcnlUeXBlLCBHZXRU
ZXh0UG9zaXRpb25BdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnY2hh
ciogd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zmc2V0KEF0a1RleHQqIHRleHQs
IGdpbnQgb2Zmc2V0LCBBdGtUZXh0Qm91bmRhcnkgYm91bmRhcnlUeXBlLCBnaW50KiBzdGFydE9m
ZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19U
RVhUKHRleHQpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUodGV4dCksIDApOwotCi0gICAgcmV0dXJuIHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0VGV4dEZvck9mZnNldCh0ZXh0LCBvZmZzZXQsIGJvdW5kYXJ5VHlwZSwgR2V0VGV4
dFBvc2l0aW9uQmVmb3JlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKLX0KLQotc3RhdGljIGd1
bmljaGFyIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyQXRPZmZzZXQoQXRrVGV4dCog
dGV4dCwgZ2ludCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEVYVCh0ZXh0KSwg
MCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NF
U1NJQkxFKHRleHQpLCAwKTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2FyZXRPZmZzZXQoQXRr
VGV4dCogdGV4dCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEVYVCh0ZXh0KSwg
MCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NF
U1NJQkxFKHRleHQpLCAwKTsKLQotICAgIC8vIGNvcmVPYmplY3QgaXMgdGhlIHVuaWdub3JlZCBv
YmplY3Qgd2hvc2Ugb2Zmc2V0IHRoZSBjYWxsZXIgaXMgcmVxdWVzdGluZy4KLSAgICAvLyBmb2N1
c2VkT2JqZWN0IGlzIHRoZSBvYmplY3Qgd2l0aCB0aGUgY2FyZXQuIEl0IGlzIGxpa2VseSBpZ25v
cmVkIC0tIHVubGVzcyBpdCdzIGEgbGluay4KLSAgICBBWENvcmVPYmplY3QqIGNvcmVPYmplY3Qg
PSBjb3JlKHRleHQpOwotICAgIGlmICghY29yZU9iamVjdC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgd2UgcGFzcyBhIHZhbGlkIG9iamVjdCBhcyByZWZlcmVuY2UuCi0gICAgaWYgKGNvcmVPYmpl
Y3QtPmFjY2Vzc2liaWxpdHlJc0lnbm9yZWQoKSkKLSAgICAgICAgY29yZU9iamVjdCA9IGNvcmVP
YmplY3QtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlmICghY29yZU9iamVjdCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgb2Zmc2V0OwotICAgIGlmICghb2JqZWN0Rm9jdXNl
ZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKGNvcmVPYmplY3QsIG9mZnNldCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIHdlYkNvcmVPZmZzZXRUb0F0a09mZnNldChjb3JlT2JqZWN0
LCBvZmZzZXQpOwotfQotCi1zdGF0aWMgQXRrQXR0cmlidXRlU2V0KiB3ZWJraXRBY2Nlc3NpYmxl
VGV4dEdldFJ1bkF0dHJpYnV0ZXMoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIGdpbnQqIHN0
YXJ0T2Zmc2V0LCBnaW50KiBlbmRPZmZzZXQpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
QVRLX1RFWFQodGV4dCksIDApOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52
YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSwgMCk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIHJlc3Vs
dDsKLQotICAgIGlmICghY29yZU9iamVjdCkgewotICAgICAgICAqc3RhcnRPZmZzZXQgPSAwOwot
ICAgICAgICAqZW5kT2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NoYXJhY3Rlcl9jb3VudCh0ZXh0KTsK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKG9mZnNldCA9PSAtMSkKLSAgICAg
ICAgb2Zmc2V0ID0gYXRrX3RleHRfZ2V0X2NhcmV0X29mZnNldCh0ZXh0KTsKLQotICAgIHJlc3Vs
dCA9IGdldFJ1bkF0dHJpYnV0ZXNGcm9tQWNjZXNzaWJpbGl0eU9iamVjdChjb3JlT2JqZWN0LCBv
ZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwotCi0gICAgaWYgKCpzdGFydE9mZnNldCA8
IDApIHsKLSAgICAgICAgKnN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OwotICAgICAgICAqZW5kT2Zmc2V0
ID0gb2Zmc2V0OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBBdGtB
dHRyaWJ1dGVTZXQqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0RGVmYXVsdEF0dHJpYnV0ZXMoQXRr
VGV4dCogdGV4dCkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVEVYVCh0ZXh0KSwg
MCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NF
U1NJQkxFKHRleHQpLCAwKTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3Qg
PSBjb3JlKHRleHQpOwotICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVjdC0+aXNBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZVNldEZvckFjY2Vzc2liaWxpdHlPYmplY3QoY29yZU9iamVjdCk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0Q2hhcmFjdGVyRXh0ZW50cyhBdGtU
ZXh0KiB0ZXh0LCBnaW50IG9mZnNldCwgZ2ludCogeCwgZ2ludCogeSwgZ2ludCogd2lkdGgsIGdp
bnQqIGhlaWdodCwgQXRrQ29vcmRUeXBlIGNvb3JkcykKLXsKLSAgICBnX3JldHVybl9pZl9mYWls
KEFUS19URVhUKHRleHQpKTsKLSAgICByZXR1cm5JZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQo
V0VCS0lUX0FDQ0VTU0lCTEUodGV4dCkpOwotCi0gICAgSW50UmVjdCBleHRlbnRzID0gdGV4dEV4
dGVudHModGV4dCwgb2Zmc2V0LCAxLCBjb29yZHMpOwotICAgICp4ID0gZXh0ZW50cy54KCk7Ci0g
ICAgKnkgPSBleHRlbnRzLnkoKTsKLSAgICAqd2lkdGggPSBleHRlbnRzLndpZHRoKCk7Ci0gICAg
KmhlaWdodCA9IGV4dGVudHMuaGVpZ2h0KCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEFjY2Vz
c2libGVUZXh0R2V0UmFuZ2VFeHRlbnRzKEF0a1RleHQqIHRleHQsIGdpbnQgc3RhcnRPZmZzZXQs
IGdpbnQgZW5kT2Zmc2V0LCBBdGtDb29yZFR5cGUgY29vcmRzLCBBdGtUZXh0UmVjdGFuZ2xlKiBy
ZWN0KQotewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVRLX1RFWFQodGV4dCkpOwotICAgIHJldHVy
bklmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSk7Ci0K
LSAgICBJbnRSZWN0IGV4dGVudHMgPSB0ZXh0RXh0ZW50cyh0ZXh0LCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0IC0gc3RhcnRPZmZzZXQsIGNvb3Jkcyk7Ci0gICAgcmVjdC0+eCA9IGV4dGVudHMueCgp
OwotICAgIHJlY3QtPnkgPSBleHRlbnRzLnkoKTsKLSAgICByZWN0LT53aWR0aCA9IGV4dGVudHMu
d2lkdGgoKTsKLSAgICByZWN0LT5oZWlnaHQgPSBleHRlbnRzLmhlaWdodCgpOwotfQotCi1zdGF0
aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckNvdW50KEF0a1RleHQqIHRl
eHQpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1RFWFQodGV4dCksIDApOwotICAg
IHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0
ZXh0KSwgMCk7Ci0KLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eU9iamVjdExlbmd0aChjb3JlKHRl
eHQpKTsKLX0KLQotc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZVRleHRHZXRPZmZzZXRBdFBv
aW50KEF0a1RleHQqIHRleHQsIGdpbnQgeCwgZ2ludCB5LCBBdGtDb29yZFR5cGUpCi17Ci0gICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1RFWFQodGV4dCksIDApOwotICAgIHJldHVyblZhbElm
V2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh0ZXh0KSwgMCk7Ci0K
LSAgICAvLyBGSVhNRTogVXNlIHRoZSBBdGtDb29yZFR5cGUKLSAgICAvLyBUT0RPOiBJcyBpdCBj
b3JyZWN0IHRvIGlnbm9yZSByYW5nZS5sZW5ndGg/Ci0gICAgSW50UG9pbnQgcG9zKHgsIHkpOwot
ICAgIFBsYWluVGV4dFJhbmdlIHJhbmdlID0gY29yZSh0ZXh0KS0+ZG9BWFJhbmdlRm9yUG9zaXRp
b24ocG9zKTsKLSAgICByZXR1cm4gcmFuZ2Uuc3RhcnQ7Ci19Ci0KLXN0YXRpYyBnaW50IHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0TlNlbGVjdGlvbnMoQXRrVGV4dCogdGV4dCkKLXsKLSAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChBVEtfVEVYVCh0ZXh0KSwgMCk7Ci0gICAgcmV0dXJuVmFsSWZXZWJL
aXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHRleHQpLCAwKTsKLQotICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHRleHQpOwotICAgIFZpc2li
bGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gY29yZU9iamVjdC0+c2VsZWN0aW9uKCk7Ci0KLSAgICAv
LyBPbmx5IHJhbmdlIHNlbGVjdGlvbnMgYXJlIG5lZWRlZCBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhp
cyBtZXRob2QKLSAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSBzZWxlY3Rpb25zIGZvciBub3cs
IHNvIHRoZXJlJ3Mgb25seQotICAgIC8vIHR3byBwb3NzaWJpbGl0aWVzCi0gICAgLy8gQWxzbywg
d2UgZG9uJ3Qgd2FudCB0byBkbyBhbnl0aGluZyBpZiB0aGUgc2VsZWN0aW9uIGRvZXMgbm90Ci0g
ICAgLy8gYmVsb25nIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb2JqZWN0LiBXZSBoYXZlIHRv
IGNoZWNrIHNpbmNlCi0gICAgLy8gdGhlcmUncyBubyB3YXkgdG8gZ2V0IHRoZSBzZWxlY3Rpb24g
Zm9yIGEgZ2l2ZW4gb2JqZWN0LCBvbmx5Ci0gICAgLy8gdGhlIGdsb2JhbCBvbmUgKHRoZSBBUEkg
aXMgYSBiaXQgY29uZnVzaW5nKQotICAgIHJldHVybiBzZWxlY3Rpb25CZWxvbmdzVG9PYmplY3Qo
Y29yZU9iamVjdCwgc2VsZWN0aW9uKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtp
dEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQgc2VsZWN0aW9u
TnVtLCBnaW50KiBzdGFydE9mZnNldCwgZ2ludCogZW5kT2Zmc2V0KQotewotICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKEFUS19URVhUKHRleHQpLCAwKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFj
Y2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGV4dCksIDApOwotCi0gICAgLy8g
V2ViQ29yZSBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIHNlbGVjdGlvbiwgc28gYW55dGhpbmcg
YnV0IDAgZG9lcyBub3QgbWFrZSBzZW5zZSBmb3Igbm93LgotICAgIGlmIChzZWxlY3Rpb25OdW0p
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gR2V0IHRoZSBvZmZzZXRzIG9mIHRoZSBzZWxl
Y3Rpb24gZm9yIHRoZSBzZWxlY3RlZCBvYmplY3QKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBj
b3JlT2JqZWN0ID0gY29yZSh0ZXh0KTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9
IGNvcmVPYmplY3QtPnNlbGVjdGlvbigpOwotICAgIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmpl
Y3QoY29yZU9iamVjdCwgc2VsZWN0aW9uLCAqc3RhcnRPZmZzZXQsICplbmRPZmZzZXQpOwotCi0g
ICAgLy8gUmV0dXJuIDAgaW5zdGVhZCBvZiAiIiwgYXMgdGhhdCdzIHRoZSBleHBlY3RlZCByZXN1
bHQgZm9yCi0gICAgLy8gdGhpcyBBdGtUZXh0IG1ldGhvZCB3aGVuIHRoZXJlJ3Mgbm8gc2VsZWN0
aW9uCi0gICAgaWYgKCpzdGFydE9mZnNldCA9PSAqZW5kT2Zmc2V0KQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFRleHQodGV4dCwgKnN0YXJ0
T2Zmc2V0LCAqZW5kT2Zmc2V0KTsKLX0KLQotc3RhdGljIGdib29sZWFuIHdlYmtpdEFjY2Vzc2li
bGVUZXh0QWRkU2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQsIGdpbnQpCi17Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1RFWFQodGV4dCksIEZBTFNFKTsKLSAgICByZXR1cm5WYWxJ
ZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodGV4dCksIEZBTFNF
KTsKLQotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZBTFNFOwotfQotCi1zdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24oQXRrVGV4dCogdGV4
dCwgZ2ludCBzZWxlY3Rpb25OdW0sIGdpbnQgc3RhcnRPZmZzZXQsIGdpbnQgZW5kT2Zmc2V0KQot
ewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19URVhUKHRleHQpLCBGQUxTRSk7Ci0gICAg
cmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHRl
eHQpLCBGQUxTRSk7Ci0KLSAgICAvLyBXZWJDb3JlIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUg
c2VsZWN0aW9uLCBzbyBhbnl0aGluZyBidXQgMCBkb2VzIG5vdCBtYWtlIHNlbnNlIGZvciBub3cu
Ci0gICAgaWYgKHNlbGVjdGlvbk51bSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotCi0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodGV4dCk7Ci0gICAgaWYgKCFjb3Jl
T2JqZWN0LT5pc0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotCi0gICAgLy8gQ29uc2lkZXIgLTEgYW5kIG91dC1vZi1ib3VuZCB2YWx1ZXMgYW5kIGNv
cnJlY3QgdGhlbSB0byBsZW5ndGgKLSAgICBnaW50IHRleHRDb3VudCA9IHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0Q2hhcmFjdGVyQ291bnQodGV4dCk7Ci0gICAgaWYgKHN0YXJ0T2Zmc2V0IDwgMCB8
fCBzdGFydE9mZnNldCA+IHRleHRDb3VudCkKLSAgICAgICAgc3RhcnRPZmZzZXQgPSB0ZXh0Q291
bnQ7Ci0gICAgaWYgKGVuZE9mZnNldCA8IDAgfHwgZW5kT2Zmc2V0ID4gdGV4dENvdW50KQotICAg
ICAgICBlbmRPZmZzZXQgPSB0ZXh0Q291bnQ7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0
aGUgb2Zmc2V0cyBmb3IgdGhlIGxpc3QgaXRlbSBtYXJrZXIuCi0gICAgaW50IG9mZnNldEFkanVz
dG1lbnQgPSBvZmZzZXRBZGp1c3RtZW50Rm9yTGlzdEl0ZW0oY29yZU9iamVjdCk7Ci0gICAgaWYg
KG9mZnNldEFkanVzdG1lbnQpIHsKLSAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0IDwgb2Zmc2V0QWRq
dXN0bWVudCB8fCBlbmRPZmZzZXQgPCBvZmZzZXRBZGp1c3RtZW50KQotICAgICAgICAgICAgcmV0
dXJuIEZBTFNFOwotCi0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gYXRrT2Zmc2V0VG9XZWJDb3JlT2Zm
c2V0KHRleHQsIHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgZW5kT2Zmc2V0ID0gYXRrT2Zmc2V0VG9X
ZWJDb3JlT2Zmc2V0KHRleHQsIGVuZE9mZnNldCk7Ci0gICAgfQotCi0gICAgUGxhaW5UZXh0UmFu
Z2UgdGV4dFJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7Ci0gICAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgcmFuZ2UgPSBjb3JlT2JqZWN0LT52aXNpYmxlUG9zaXRpb25S
YW5nZUZvclJhbmdlKHRleHRSYW5nZSk7Ci0gICAgaWYgKHJhbmdlLmlzTnVsbCgpKQotICAgICAg
ICByZXR1cm4gRkFMU0U7Ci0KLSAgICBjb3JlT2JqZWN0LT5zZXRTZWxlY3RlZFZpc2libGVQb3Np
dGlvblJhbmdlKHJhbmdlKTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLQotc3RhdGljIGdib29sZWFu
IHdlYmtpdEFjY2Vzc2libGVUZXh0UmVtb3ZlU2VsZWN0aW9uKEF0a1RleHQqIHRleHQsIGdpbnQg
c2VsZWN0aW9uTnVtKQotewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKEFUS19URVhUKHRleHQp
LCBGQUxTRSk7Ci0gICAgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJ
VF9BQ0NFU1NJQkxFKHRleHQpLCBGQUxTRSk7Ci0KLSAgICAvLyBXZWJDb3JlIGRvZXMgbm90IHN1
cHBvcnQgbXVsdGlwbGUgc2VsZWN0aW9uLCBzbyBhbnl0aGluZyBidXQgMCBkb2VzIG5vdCBtYWtl
IHNlbnNlIGZvciBub3cuCi0gICAgaWYgKHNlbGVjdGlvbk51bSkKLSAgICAgICAgcmV0dXJuIEZB
TFNFOwotCi0gICAgLy8gRG8gbm90aGluZyBpZiBjdXJyZW50IHNlbGVjdGlvbiBkb2Vzbid0IGJl
bG9uZyB0byB0aGUgb2JqZWN0Ci0gICAgaWYgKCF3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldE5TZWxl
Y3Rpb25zKHRleHQpKQotICAgICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgICAvLyBTZXQgYSBuZXcg
MC1zaXplZCBzZWxlY3Rpb24gdG8gdGhlIGNhcmV0IHBvc2l0aW9uLCBpbiBvcmRlcgotICAgIC8v
IHRvIHNpbXVsYXRlIHNlbGVjdGlvbiByZW1vdmFsIChHQUlMIHN0eWxlKQotICAgIGdpbnQgY2Fy
ZXRPZmZzZXQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0KHRleHQpOwotICAg
IHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlVGV4dFNldFNlbGVjdGlvbih0ZXh0LCBzZWxlY3Rpb25O
dW0sIGNhcmV0T2Zmc2V0LCBjYXJldE9mZnNldCk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dFNldENhcmV0T2Zmc2V0KEF0a1RleHQqIHRleHQsIGdpbnQgb2Zmc2V0
KQotewotICAgIC8vIEludGVybmFsbHksIHNldHRpbmcgdGhlIGNhcmV0IG9mZnNldCBpcyBlcXVp
dmFsZW50IHRvIHNldCBhIHplcm8tbGVuZ3RoCi0gICAgLy8gc2VsZWN0aW9uLCBzbyBkZWxlZ2F0
ZSBpbiB0aGF0IGltcGxlbWVudGF0aW9uIGFuZCB2b2lkIGR1cGxpY2F0ZWQgY29kZS4KLSAgICBy
ZXR1cm4gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRTZWxlY3Rpb24odGV4dCwgMCwgb2Zmc2V0LCBv
ZmZzZXQpOwotfQotCi1zdGF0aWMgZ2NoYXIqIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U3RyaW5n
QXRPZmZzZXQoQXRrVGV4dCogdGV4dCwgZ2ludCBvZmZzZXQsIEF0a1RleHRHcmFudWxhcml0eSBn
cmFudWxhcml0eSwgZ2ludCogc3RhcnRPZmZzZXQsIGdpbnQqIGVuZE9mZnNldCkKLXsKLSAgICAv
LyBUaGlzIG5ldyBBUEkgaGFzIGJlZW4gZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIEF0a1RleHQg
aW50ZXJmYWNlIGFuZCBpdCBoYXMgYmVlbgotICAgIC8vIGRlc2lnbmVkIHRvIGtlZXAgZXhhY3Rs
eSB0aGUgc2FtZSBiZWhhdmlvdXIgdGhlIGF0a190ZXh0X2dldF90ZXh0X2F0X3RleHQoKSBmb3IK
LSAgICAvLyBBVEtfVEVYVF9CT1VOREFSWV8qX1NUQVJUIGJvdW5kYXJpZXMsIHNvIGZvciBub3cg
d2UganVzdCBuZWVkIHRvIHRyYW5zbGF0ZSB0aGUKLSAgICAvLyBncmFudWxhcml0eSB0byB0aGUg
cmlnaHQgb2xkIGJvdW5kYXJ5IGFuZCByZXVzZSB0aGUgY29kZSBmb3IgdGhlIG9sZCBBUEkuCi0g
ICAgLy8gSG93ZXZlciwgdGhpcyBzaG91bGQgYmUgc2ltcGxpZmllZCBsYXRlciBvbiAoYW5kIGEg
bG90IG9mIGNvZGUgcmVtb3ZlZCkgb25jZQotICAgIC8vIFdlYktpdEdUSyBkZXBlbmRzIG9uIEFU
SyA+PSAyLjkuNCAqYW5kKiBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IGEgdmVyc2lvbiBvZgotICAg
IC8vIEFULVNQSTIgbmV3IGVub3VnaCBub3QgdG8gaW5jbHVkZSB0aGUgb2xkIEFQSXMgaXMgYmVp
bmcgdXNlZC4gQnV0IHVudGlsIHRoZW4sCi0gICAgLy8gd2Ugd2lsbCBoYXZlIHRvIGxpdmUgd2l0
aCBib3RoIHRoZSBvbGQgYW5kIG5ldyBBUElzIGltcGxlbWVudGVkIGhlcmUuCi0gICAgLy8gRklY
TUU6IFdlYktpdCBub3dhZGF5cyBkZXBlbmRzIG9uIG11Y2ggbmV3ZXIgQVRLIGFuZCB3ZSBjYW4g
c2FmZWx5IGFzc3VtZSBBVC1TUEkyCi0gICAgLy8gaXNuJ3QgYW5jaWVudC4gQnV0IHdob2V2ZXIg
d3JvdGUgdGhpcyBjb2RlIGRpZG4ndCB1c2UgQVRLX0NIRUNLX1ZFUlNJT04oKSBndWFyZHMsCi0g
ICAgLy8gc28gaXQncyB1bmNsZWFyIHdoYXQgaXMgc3VwcG9zZWQgdG8gYmUgY2hhbmdlZCBoZXJl
LgotICAgIEF0a1RleHRCb3VuZGFyeSBib3VuZGFyeVR5cGUgPSBBVEtfVEVYVF9CT1VOREFSWV9D
SEFSOwotICAgIHN3aXRjaCAoZ3JhbnVsYXJpdHkpIHsKLSAgICBjYXNlIEFUS19URVhUX0dSQU5V
TEFSSVRZX0NIQVI6Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBBVEtfVEVYVF9HUkFOVUxB
UklUWV9XT1JEOgotICAgICAgICBib3VuZGFyeVR5cGUgPSBBVEtfVEVYVF9CT1VOREFSWV9XT1JE
X1NUQVJUOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQVRLX1RFWFRfR1JBTlVMQVJJVFlf
U0VOVEVOQ0U6Ci0gICAgICAgIGJvdW5kYXJ5VHlwZSA9IEFUS19URVhUX0JPVU5EQVJZX1NFTlRF
TkNFX1NUQVJUOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQVRLX1RFWFRfR1JBTlVMQVJJ
VFlfTElORToKLSAgICAgICAgYm91bmRhcnlUeXBlID0gQVRLX1RFWFRfQk9VTkRBUllfTElORV9T
VEFSVDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFUS19URVhUX0dSQU5VTEFSSVRZX1BB
UkFHUkFQSDoKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgaGFzIG5vdCBiZWVuIGEgbmVlZCB3aXRo
IHRoZSBvbGQgQXRrVGV4dCBBUEksIHdoaWNoIG1lYW5zIEFUcyB3b24ndAotICAgICAgICAvLyBu
ZWVkIGl0IHlldCBmb3Igc29tZSB0aW1lLCBzbyB3ZSBjYW4gc2tpcCBpdCBmb3Igbm93LgotICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4gZ19zdHJkdXAoIiIpOwotCi0g
ICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEZvck9mZnNldCh0ZXh0LCBvZmZzZXQs
IGJvdW5kYXJ5VHlwZSwgR2V0VGV4dFBvc2l0aW9uQXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQp
OwotfQotCi12b2lkIHdlYmtpdEFjY2Vzc2libGVUZXh0SW50ZXJmYWNlSW5pdChBdGtUZXh0SWZh
Y2UqIGlmYWNlKQotewotICAgIGlmYWNlLT5nZXRfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0
R2V0VGV4dDsKLSAgICBpZmFjZS0+Z2V0X3RleHRfYWZ0ZXJfb2Zmc2V0ID0gd2Via2l0QWNjZXNz
aWJsZVRleHRHZXRUZXh0QWZ0ZXJPZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF90ZXh0X2F0X29mZnNl
dCA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dEF0T2Zmc2V0OwotICAgIGlmYWNlLT5nZXRf
dGV4dF9iZWZvcmVfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRUZXh0QmVmb3JlT2Zm
c2V0OwotICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2F0X29mZnNldCA9IHdlYmtpdEFjY2Vzc2li
bGVUZXh0R2V0Q2hhcmFjdGVyQXRPZmZzZXQ7Ci0gICAgaWZhY2UtPmdldF9jYXJldF9vZmZzZXQg
PSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENhcmV0T2Zmc2V0OwotICAgIGlmYWNlLT5nZXRfcnVu
X2F0dHJpYnV0ZXMgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldFJ1bkF0dHJpYnV0ZXM7Ci0gICAg
aWZhY2UtPmdldF9kZWZhdWx0X2F0dHJpYnV0ZXMgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldERl
ZmF1bHRBdHRyaWJ1dGVzOwotICAgIGlmYWNlLT5nZXRfY2hhcmFjdGVyX2V4dGVudHMgPSB3ZWJr
aXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3RlckV4dGVudHM7Ci0gICAgaWZhY2UtPmdldF9yYW5n
ZV9leHRlbnRzID0gd2Via2l0QWNjZXNzaWJsZVRleHRHZXRSYW5nZUV4dGVudHM7Ci0gICAgaWZh
Y2UtPmdldF9jaGFyYWN0ZXJfY291bnQgPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dEdldENoYXJhY3Rl
ckNvdW50OwotICAgIGlmYWNlLT5nZXRfb2Zmc2V0X2F0X3BvaW50ID0gd2Via2l0QWNjZXNzaWJs
ZVRleHRHZXRPZmZzZXRBdFBvaW50OwotICAgIGlmYWNlLT5nZXRfbl9zZWxlY3Rpb25zID0gd2Vi
a2l0QWNjZXNzaWJsZVRleHRHZXROU2VsZWN0aW9uczsKLSAgICBpZmFjZS0+Z2V0X3NlbGVjdGlv
biA9IHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0U2VsZWN0aW9uOwotICAgIGlmYWNlLT5hZGRfc2Vs
ZWN0aW9uID0gd2Via2l0QWNjZXNzaWJsZVRleHRBZGRTZWxlY3Rpb247Ci0gICAgaWZhY2UtPnJl
bW92ZV9zZWxlY3Rpb24gPSB3ZWJraXRBY2Nlc3NpYmxlVGV4dFJlbW92ZVNlbGVjdGlvbjsKLSAg
ICBpZmFjZS0+c2V0X3NlbGVjdGlvbiA9IHdlYmtpdEFjY2Vzc2libGVUZXh0U2V0U2VsZWN0aW9u
OwotICAgIGlmYWNlLT5zZXRfY2FyZXRfb2Zmc2V0ID0gd2Via2l0QWNjZXNzaWJsZVRleHRTZXRD
YXJldE9mZnNldDsKLSAgICBpZmFjZS0+Z2V0X3N0cmluZ19hdF9vZmZzZXQgPSB3ZWJraXRBY2Nl
c3NpYmxlVGV4dEdldFN0cmluZ0F0T2Zmc2V0OwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VU
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzJhYWUzYzI5
YjkuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9X
ZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0
IChDKSAyMDA5IEphbiBBbG9uem8KLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwg
MjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZ
KSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSA8YXRrL2F0ay5oPgotCi12b2lkIHdlYmtpdEFjY2Vz
c2libGVUZXh0SW50ZXJmYWNlSW5pdChBdGtUZXh0SWZhY2UqKTsKLQotI2VuZGlmIC8vIEVOQUJM
RShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VW
YWx1ZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MjU5ZDk5ZjFlNy4uMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVJbnRlcmZhY2VWYWx1ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmgiCi0K
LSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKLQotI2luY2x1ZGUgIkFjY2Vz
c2liaWxpdHlPYmplY3QuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJXZWJL
aXRBY2Nlc3NpYmxlLmgiCi0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1z
dGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZShBdGtWYWx1ZSogdmFsdWUpCi17Ci0gICAg
aWYgKCFXRUJLSVRfSVNfQUNDRVNTSUJMRSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuICZ3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdChXRUJLSVRf
QUNDRVNTSUJMRSh2YWx1ZSkpOwotfQotCi1zdGF0aWMgYm9vbCB3ZWJraXRBY2Nlc3NpYmxlU2V0
TmV3VmFsdWUoQXRrVmFsdWUqIGNvcmVWYWx1ZSwgY29uc3QgZ2RvdWJsZSBuZXdWYWx1ZSkKLXsK
LSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZShjb3JlVmFsdWUpOwot
ICAgIGlmICghY29yZU9iamVjdC0+Y2FuU2V0VmFsdWVBdHRyaWJ1dGUoKSkKLSAgICAgICAgcmV0
dXJuIEZBTFNFOwotCi0gICAgLy8gQ2hlY2sgdmFsdWUgYWdhaW5zdCByYW5nZSBsaW1pdHMKLSAg
ICBkb3VibGUgdmFsdWU7Ci0gICAgdmFsdWUgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxkb3VibGU+
KGNvcmVPYmplY3QtPm1pblZhbHVlRm9yUmFuZ2UoKSksIG5ld1ZhbHVlKTsKLSAgICB2YWx1ZSA9
IHN0ZDo6bWluKHN0YXRpY19jYXN0PGRvdWJsZT4oY29yZU9iamVjdC0+bWF4VmFsdWVGb3JSYW5n
ZSgpKSwgbmV3VmFsdWUpOwotCi0gICAgY29yZU9iamVjdC0+c2V0VmFsdWUoU3RyaW5nOjpudW1i
ZXJUb1N0cmluZ0ZpeGVkUHJlY2lzaW9uKHZhbHVlKSk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0K
LXN0YXRpYyBmbG9hdCB3ZWJraXRBY2Nlc3NpYmxlR2V0SW5jcmVtZW50VmFsdWUoQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCkKLXsKLSAgICBpZiAoIWNvcmVPYmplY3QtPmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6OnN0ZXBBdHRyKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjb3Jl
T2JqZWN0LT5zdGVwVmFsdWVGb3JSYW5nZSgpOwotCi0gICAgLy8gSWYgJ3N0ZXAnIGF0dHJpYnV0
ZSBpcyBub3QgZGVmaW5lZCwgV2ViQ29yZSBhc3N1bWVzIGEgNSUgb2YgdGhlCi0gICAgLy8gcmFu
Z2UgYmV0d2VlbiBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcy4gSW1wbGljaXQgdmFsdWUgb2Yg
c3RlcCBzaG91bGQgYmUgb25lIG9yIGxhcmdlci4KLSAgICBmbG9hdCBzdGVwID0gKGNvcmVPYmpl
Y3QtPm1heFZhbHVlRm9yUmFuZ2UoKSAtIGNvcmVPYmplY3QtPm1pblZhbHVlRm9yUmFuZ2UoKSkg
KiAwLjA1OwotICAgIHJldHVybiBzdGVwIDwgMSA/IDEgOiBzdGVwOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJraXRBY2Nlc3NpYmxlR2V0VmFsdWVBbmRUZXh0KEF0a1ZhbHVlKiB2YWx1ZSwgZ2RvdWJs
ZSogY3VycmVudFZhbHVlLCBnY2hhcioqIGFsdGVybmF0aXZlVGV4dCkKLXsKLSAgICBnX3JldHVy
bl9pZl9mYWlsKEFUS19WQUxVRSh2YWx1ZSkpOwotICAgIHJldHVybklmV2ViS2l0QWNjZXNzaWJs
ZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh2YWx1ZSkpOwotCi0gICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogY29yZU9iamVjdCA9IGNvcmUodmFsdWUpOwotICAgIGlmICghY29yZU9iamVjdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGN1cnJlbnRWYWx1ZSkKLSAgICAgICAgKmN1cnJl
bnRWYWx1ZSA9IGNvcmVPYmplY3QtPnZhbHVlRm9yUmFuZ2UoKTsKLSAgICBpZiAoYWx0ZXJuYXRp
dmVUZXh0KQotICAgICAgICAqYWx0ZXJuYXRpdmVUZXh0ID0gZ19zdHJkdXBfcHJpbnRmKCIlcyIs
IGNvcmVPYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotc3Rh
dGljIGRvdWJsZSB3ZWJraXRBY2Nlc3NpYmxlR2V0SW5jcmVtZW50KEF0a1ZhbHVlKiB2YWx1ZSkK
LXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVkFMVUUodmFsdWUpLCAwKTsKLSAgICBy
ZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodmFs
dWUpLCAwKTsKLQotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHZh
bHVlKTsKLSAgICBpZiAoIWNvcmVPYmplY3QpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0
dXJuIHdlYmtpdEFjY2Vzc2libGVHZXRJbmNyZW1lbnRWYWx1ZShjb3JlT2JqZWN0KTsKLX0KLQot
c3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZVNldFZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgY29u
c3QgZ2RvdWJsZSBuZXdWYWx1ZSkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEFUS19WQUxVRSh2
YWx1ZSkpOwotICAgIHJldHVybklmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUND
RVNTSUJMRSh2YWx1ZSkpOwotCi0gICAgd2Via2l0QWNjZXNzaWJsZVNldE5ld1ZhbHVlKHZhbHVl
LCBuZXdWYWx1ZSk7Ci19Ci0KLXN0YXRpYyBBdGtSYW5nZSogd2Via2l0QWNjZXNzaWJsZUdldFJh
bmdlKEF0a1ZhbHVlKiB2YWx1ZSkKLXsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChBVEtfVkFM
VUUodmFsdWUpLCBudWxscHRyKTsKLSAgICByZXR1cm5WYWxJZldlYktpdEFjY2Vzc2libGVJc0lu
dmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodmFsdWUpLCBudWxscHRyKTsKLQotICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIGNvcmVPYmplY3QgPSBjb3JlKHZhbHVlKTsKLSAgICBpZiAoIWNvcmVPYmpl
Y3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgZ2RvdWJsZSBtaW5WYWx1ZSA9IGNv
cmVPYmplY3QtPm1pblZhbHVlRm9yUmFuZ2UoKTsKLSAgICBnZG91YmxlIG1heFZhbHVlID0gY29y
ZU9iamVjdC0+bWF4VmFsdWVGb3JSYW5nZSgpOwotICAgIGdjaGFyKiB2YWx1ZURlc2NyaXB0aW9u
ID0gZ19zdHJkdXBfcHJpbnRmKCIlcyIsIGNvcmVPYmplY3QtPnZhbHVlRGVzY3JpcHRpb24oKS51
dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gYXRrX3JhbmdlX25ldyhtaW5WYWx1ZSwgbWF4VmFs
dWUsIHZhbHVlRGVzY3JpcHRpb24pOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRBY2Nlc3NpYmxl
VmFsdWVHZXRDdXJyZW50VmFsdWUoQXRrVmFsdWUqIHZhbHVlLCBHVmFsdWUqIGdWYWx1ZSkKLXsK
LSAgICBnX3JldHVybl9pZl9mYWlsKEFUS19WQUxVRSh2YWx1ZSkpOwotICAgIHJldHVybklmV2Vi
S2l0QWNjZXNzaWJsZUlzSW52YWxpZChXRUJLSVRfQUNDRVNTSUJMRSh2YWx1ZSkpOwotCi0gICAg
bWVtc2V0KGdWYWx1ZSwgIDAsIHNpemVvZihHVmFsdWUpKTsKLSAgICBnX3ZhbHVlX2luaXQoZ1Zh
bHVlLCBHX1RZUEVfRkxPQVQpOwotICAgIGdfdmFsdWVfc2V0X2Zsb2F0KGdWYWx1ZSwgY29yZSh2
YWx1ZSktPnZhbHVlRm9yUmFuZ2UoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYmtpdEFjY2Vzc2li
bGVWYWx1ZUdldE1heGltdW1WYWx1ZShBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQot
ewotICAgIGdfcmV0dXJuX2lmX2ZhaWwoQVRLX1ZBTFVFKHZhbHVlKSk7Ci0gICAgcmV0dXJuSWZX
ZWJLaXRBY2Nlc3NpYmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHZhbHVlKSk7Ci0KLSAg
ICBtZW1zZXQoZ1ZhbHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOwotICAgIGdfdmFsdWVfaW5pdChn
VmFsdWUsIEdfVFlQRV9GTE9BVCk7Ci0gICAgZ192YWx1ZV9zZXRfZmxvYXQoZ1ZhbHVlLCBjb3Jl
KHZhbHVlKS0+bWF4VmFsdWVGb3JSYW5nZSgpKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0QWNj
ZXNzaWJsZVZhbHVlR2V0TWluaW11bVZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgR1ZhbHVlKiBnVmFs
dWUpCi17Ci0gICAgZ19yZXR1cm5faWZfZmFpbChBVEtfVkFMVUUodmFsdWUpKTsKLSAgICByZXR1
cm5JZldlYktpdEFjY2Vzc2libGVJc0ludmFsaWQoV0VCS0lUX0FDQ0VTU0lCTEUodmFsdWUpKTsK
LQotICAgIG1lbXNldChnVmFsdWUsICAwLCBzaXplb2YoR1ZhbHVlKSk7Ci0gICAgZ192YWx1ZV9p
bml0KGdWYWx1ZSwgR19UWVBFX0ZMT0FUKTsKLSAgICBnX3ZhbHVlX3NldF9mbG9hdChnVmFsdWUs
IGNvcmUodmFsdWUpLT5taW5WYWx1ZUZvclJhbmdlKCkpOwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZVZhbHVlU2V0Q3VycmVudFZhbHVlKEF0a1ZhbHVlKiB2YWx1ZSwgY29u
c3QgR1ZhbHVlKiBnVmFsdWUpCi17Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoQVRLX1ZBTFVF
KHZhbHVlKSwgRkFMU0UpOwotICAgIHJldHVyblZhbElmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxp
ZChXRUJLSVRfQUNDRVNTSUJMRSh2YWx1ZSksIEZBTFNFKTsKLQotICAgIGRvdWJsZSBuZXdWYWx1
ZTsKLSAgICBpZiAoR19WQUxVRV9IT0xEU19ET1VCTEUoZ1ZhbHVlKSkKLSAgICAgICAgbmV3VmFs
dWUgPSBnX3ZhbHVlX2dldF9kb3VibGUoZ1ZhbHVlKTsKLSAgICBlbHNlIGlmIChHX1ZBTFVFX0hP
TERTX0ZMT0FUKGdWYWx1ZSkpCi0gICAgICAgIG5ld1ZhbHVlID0gZ192YWx1ZV9nZXRfZmxvYXQo
Z1ZhbHVlKTsKLSAgICBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX0lOVDY0KGdWYWx1ZSkpCi0gICAg
ICAgIG5ld1ZhbHVlID0gZ192YWx1ZV9nZXRfaW50NjQoZ1ZhbHVlKTsKLSAgICBlbHNlIGlmIChH
X1ZBTFVFX0hPTERTX0lOVChnVmFsdWUpKQotICAgICAgICBuZXdWYWx1ZSA9IGdfdmFsdWVfZ2V0
X2ludChnVmFsdWUpOwotICAgIGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfTE9ORyhnVmFsdWUpKQot
ICAgICAgICBuZXdWYWx1ZSA9IGdfdmFsdWVfZ2V0X2xvbmcoZ1ZhbHVlKTsKLSAgICBlbHNlIGlm
IChHX1ZBTFVFX0hPTERTX1VMT05HKGdWYWx1ZSkpCi0gICAgICAgIG5ld1ZhbHVlID0gZ192YWx1
ZV9nZXRfdWxvbmcoZ1ZhbHVlKTsKLSAgICBlbHNlIGlmIChHX1ZBTFVFX0hPTERTX1VJTlQ2NChn
VmFsdWUpKQotICAgICAgICBuZXdWYWx1ZSA9IGdfdmFsdWVfZ2V0X3VpbnQ2NChnVmFsdWUpOwot
ICAgIGVsc2UgaWYgKEdfVkFMVUVfSE9MRFNfVUlOVChnVmFsdWUpKQotICAgICAgICBuZXdWYWx1
ZSA9IGdfdmFsdWVfZ2V0X3VpbnQoZ1ZhbHVlKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBG
QUxTRTsKLQotICAgIHJldHVybiB3ZWJraXRBY2Nlc3NpYmxlU2V0TmV3VmFsdWUodmFsdWUsIG5l
d1ZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWluaW11
bUluY3JlbWVudChBdGtWYWx1ZSogdmFsdWUsIEdWYWx1ZSogZ1ZhbHVlKQotewotICAgIGdfcmV0
dXJuX2lmX2ZhaWwoQVRLX1ZBTFVFKHZhbHVlKSk7Ci0gICAgcmV0dXJuSWZXZWJLaXRBY2Nlc3Np
YmxlSXNJbnZhbGlkKFdFQktJVF9BQ0NFU1NJQkxFKHZhbHVlKSk7Ci0KLSAgICBtZW1zZXQoZ1Zh
bHVlLCAgMCwgc2l6ZW9mKEdWYWx1ZSkpOwotICAgIGdfdmFsdWVfaW5pdChnVmFsdWUsIEdfVFlQ
RV9GTE9BVCk7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0ID0gY29yZSh2
YWx1ZSk7Ci0gICAgZ192YWx1ZV9zZXRfZmxvYXQoZ1ZhbHVlLCB3ZWJraXRBY2Nlc3NpYmxlR2V0
SW5jcmVtZW50VmFsdWUoY29yZU9iamVjdCkpOwotfQotCi12b2lkIHdlYmtpdEFjY2Vzc2libGVW
YWx1ZUludGVyZmFjZUluaXQoQXRrVmFsdWVJZmFjZSogaWZhY2UpCi17Ci0gICAgaWZhY2UtPmdl
dF92YWx1ZV9hbmRfdGV4dCA9IHdlYmtpdEFjY2Vzc2libGVHZXRWYWx1ZUFuZFRleHQ7Ci0gICAg
aWZhY2UtPmdldF9pbmNyZW1lbnQgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0SW5jcmVtZW50OwotICAg
IGlmYWNlLT5zZXRfdmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlU2V0VmFsdWU7Ci0gICAgaWZhY2Ut
PmdldF9yYW5nZSA9IHdlYmtpdEFjY2Vzc2libGVHZXRSYW5nZTsKLSAgICBpZmFjZS0+Z2V0X2N1
cnJlbnRfdmFsdWUgPSB3ZWJraXRBY2Nlc3NpYmxlVmFsdWVHZXRDdXJyZW50VmFsdWU7Ci0gICAg
aWZhY2UtPmdldF9tYXhpbXVtX3ZhbHVlID0gd2Via2l0QWNjZXNzaWJsZVZhbHVlR2V0TWF4aW11
bVZhbHVlOwotICAgIGlmYWNlLT5nZXRfbWluaW11bV92YWx1ZSA9IHdlYmtpdEFjY2Vzc2libGVW
YWx1ZUdldE1pbmltdW1WYWx1ZTsKLSAgICBpZmFjZS0+c2V0X2N1cnJlbnRfdmFsdWUgPSB3ZWJr
aXRBY2Nlc3NpYmxlVmFsdWVTZXRDdXJyZW50VmFsdWU7Ci0gICAgaWZhY2UtPmdldF9taW5pbXVt
X2luY3JlbWVudCA9IHdlYmtpdEFjY2Vzc2libGVWYWx1ZUdldE1pbmltdW1JbmNyZW1lbnQ7Ci19
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsv
V2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVmFsdWUuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZDExZDVlODFlMTliLi4wMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVZhbHVl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIElnYWxpYSBTLkwuCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKEFDQ0VTU0lC
SUxJVFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0KLXZvaWQgd2Via2l0
QWNjZXNzaWJsZVZhbHVlSW50ZXJmYWNlSW5pdChBdGtWYWx1ZUlmYWNlKik7Ci0KLSNlbmRpZiAv
LyBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNmODc2ZDI0MzA0Li4wMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gQWxvbnpvCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTIgSWdhbGlhIFMuTC4KLSAqCi0gKiBQb3J0aW9u
cyBmcm9tIE1vemlsbGEgYTExeSwgY29weXJpZ2h0IGFzIGZvbGxvd3M6Ci0gKgotICogVGhlIE9y
aWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KLSAqCi0gKiBUaGUgSW5pdGlhbCBEZXZl
bG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKLSAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4K
LSAqIFBvcnRpb25zIGNyZWF0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFyZSBDb3B5cmln
aHQgKEMpIDIwMDIKLSAqIHRoZSBJbml0aWFsIERldmVsb3Blci4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIldlYktpdEFjY2Vzc2libGVVdGlsLmgi
Ci0KLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKLQotI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCi0jaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk5vZGUuaCIK
LSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUg
IlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKLQotI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1BdGtBdHRyaWJ1dGVTZXQqIGFkZFRvQXRr
QXR0cmlidXRlU2V0KEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlU2V0LCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiB2YWx1ZSkKLXsKLSAgICBBdGtBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGdfbWFsbG9jKHNpemVvZihBdGtBdHRyaWJ1dGUp
KSk7Ci0gICAgYXR0cmlidXRlLT5uYW1lID0gZ19zdHJkdXAobmFtZSk7Ci0gICAgYXR0cmlidXRl
LT52YWx1ZSA9IGdfc3RyZHVwKHZhbHVlKTsKLSAgICBhdHRyaWJ1dGVTZXQgPSBnX3NsaXN0X3By
ZXBlbmQoYXR0cmlidXRlU2V0LCBhdHRyaWJ1dGUpOwotICAgIHJldHVybiBhdHRyaWJ1dGVTZXQ7
Ci19Ci0KLXZvaWQgY29udGVudHNSZWxhdGl2ZVRvQXRrQ29vcmRpbmF0ZVR5cGUoQWNjZXNzaWJp
bGl0eU9iamVjdCogY29yZU9iamVjdCwgQXRrQ29vcmRUeXBlIGNvb3JkVHlwZSwgSW50UmVjdCBy
ZWN0LCBnaW50KiB4LCBnaW50KiB5LCBnaW50KiB3aWR0aCwgZ2ludCogaGVpZ2h0KQotewotICAg
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gY29yZU9iamVjdC0+ZG9jdW1lbnRGcmFtZVZpZXcoKTsK
LQotICAgIGlmIChmcmFtZVZpZXcpIHsKLSAgICAgICAgc3dpdGNoIChjb29yZFR5cGUpIHsKLSAg
ICAgICAgY2FzZSBBVEtfWFlfV0lORE9XOgotICAgICAgICAgICAgcmVjdCA9IGZyYW1lVmlldy0+
Y29udGVudHNUb1dpbmRvdyhyZWN0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFUS19YWV9TQ1JFRU46Ci0gICAgICAgICAgICByZWN0ID0gZnJhbWVWaWV3LT5jb250ZW50c1Rv
U2NyZWVuKHJlY3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJT04o
MiwgMzAsIDApCi0gICAgICAgIGNhc2UgQVRLX1hZX1BBUkVOVDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmICh4KQotICAgICAgICAqeCA9IHJlY3QueCgpOwotICAgIGlmICh5KQotICAgICAgICAqeSA9
IHJlY3QueSgpOwotICAgIGlmICh3aWR0aCkKLSAgICAgICAgKndpZHRoID0gcmVjdC53aWR0aCgp
OwotICAgIGlmIChoZWlnaHQpCi0gICAgICAgICpoZWlnaHQgPSByZWN0LmhlaWdodCgpOwotfQot
Ci0vLyBGSVhNRTogRGlmZmVyZW50IGtpbmRzIG9mIGVsZW1lbnRzIGFyZSBwdXR0aW5nIHRoZSB0
aXRsZSB0YWcgdG8gdXNlCi0vLyBpbiBkaWZmZXJlbnQgQVggZmllbGRzLiBUaGlzIG1pZ2h0IG5v
dCBiZSAxMDAlIGNvcnJlY3QgYnV0IHdlIHdpbGwKLS8vIGtlZXAgaXQgbm93IGluIG9yZGVyIHRv
IGFjaGlldmUgY29uc2lzdGVuY3kgd2l0aCBwcmV2aW91cyBiZWhhdmlvci4KLXN0YXRpYyBib29s
IHRpdGxlVGFnU2hvdWxkQmVVc2VkSW5EZXNjcmlwdGlvbkZpZWxkKEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGNvcmVPYmplY3QpCi17Ci0gICAgcmV0dXJuIChjb3JlT2JqZWN0LT5pc0xpbmsoKSAmJiAh
Y29yZU9iamVjdC0+aXNJbWFnZU1hcExpbmsoKSkgfHwgY29yZU9iamVjdC0+aXNJbWFnZSgpOwot
fQotCi0vLyBUaGlzIHNob3VsZCBiZSB0aGUgInZpc2libGUiIHRleHQgdGhhdCdzIGFjdHVhbGx5
IG9uIHRoZSBzY3JlZW4gaWYgcG9zc2libGUuCi0vLyBJZiB0aGVyZSdzIGFsdGVybmF0aXZlIHRl
eHQsIHRoYXQgY2FuIG92ZXJyaWRlIHRoZSB0aXRsZS4KLVN0cmluZyBhY2Nlc3NpYmlsaXR5VGl0
bGUoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCkKLXsKLSAgICBWZWN0b3I8QWNjZXNz
aWJpbGl0eVRleHQ+IHRleHRPcmRlcjsKLSAgICBjb3JlT2JqZWN0LT5hY2Nlc3NpYmlsaXR5VGV4
dCh0ZXh0T3JkZXIpOwotCi0gICAgZm9yIChjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dCYgdGV4dCA6
IHRleHRPcmRlcikgewotICAgICAgICAvLyBPbmNlIHdlIGVuY291bnRlciB2aXNpYmxlIHRleHQs
IG9yIHRoZSB0ZXh0IGZyb20gb3VyIGNoaWxkcmVuIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yZW1v
c3QuCi0gICAgICAgIGlmICh0ZXh0LnRleHRTb3VyY2UgPT0gQWNjZXNzaWJpbGl0eVRleHRTb3Vy
Y2U6OlZpc2libGUgfHwgdGV4dC50ZXh0U291cmNlID09IEFjY2Vzc2liaWxpdHlUZXh0U291cmNl
OjpDaGlsZHJlbikKLSAgICAgICAgICAgIHJldHVybiB0ZXh0LnRleHQ7Ci0KLSAgICAgICAgLy8g
SWYgdGhlcmUncyBhbiBlbGVtZW50IHRoYXQgbGFiZWxzIHRoaXMgb2JqZWN0IGFuZCBpdCdzIG5v
dCBleHBvc2VkLCB0aGVuIHdlIHNob3VsZCB1c2UKLSAgICAgICAgLy8gdGhhdCB0ZXh0IGFzIG91
ciB0aXRsZS4KLSAgICAgICAgaWYgKHRleHQudGV4dFNvdXJjZSA9PSBBY2Nlc3NpYmlsaXR5VGV4
dFNvdXJjZTo6TGFiZWxCeUVsZW1lbnQgJiYgIWNvcmVPYmplY3QtPnRpdGxlVUlFbGVtZW50KCkp
Ci0gICAgICAgICAgICByZXR1cm4gdGV4dC50ZXh0OwotCi0gICAgICAgIC8vIEVsZW1lbnRzIG9m
IHJvbGUgQWNjZXNzaWJpbGl0eVJvbGU6OlRvb2xiYXIgd2lsbCByZXR1cm4gaXRzIHRpdGxlIGFz
IEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpBbHRlcm5hdGl2ZS4KLSAgICAgICAgaWYgKGNvcmVP
YmplY3QtPnJvbGVWYWx1ZSgpID09IEFjY2Vzc2liaWxpdHlSb2xlOjpUb29sYmFyICYmIHRleHQu
dGV4dFNvdXJjZSA9PSBBY2Nlc3NpYmlsaXR5VGV4dFNvdXJjZTo6QWx0ZXJuYXRpdmUpCi0gICAg
ICAgICAgICByZXR1cm4gdGV4dC50ZXh0OwotCi0gICAgICAgIC8vIEZJWE1FOiBUaGUgdGl0bGUg
dGFnIGlzIHVzZWQgaW4gY2VydGFpbiBjYXNlcyBmb3IgdGhlIHRpdGxlLiBUaGlzIHVzYWdlIHNo
b3VsZAotICAgICAgICAvLyBwcm9iYWJseSBiZSBpbiB0aGUgZGVzY3JpcHRpb24gZmllbGQgc2lu
Y2UgaXQncyBub3QgInZpc2libGUiLgotICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFj
Y2Vzc2liaWxpdHlUZXh0U291cmNlOjpUaXRsZVRhZyAmJiAhdGl0bGVUYWdTaG91bGRCZVVzZWRJ
bkRlc2NyaXB0aW9uRmllbGQoY29yZU9iamVjdCkpCi0gICAgICAgICAgICByZXR1cm4gdGV4dC50
ZXh0OwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotU3RyaW5nIGFjY2Vzc2li
aWxpdHlEZXNjcmlwdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBjb3JlT2JqZWN0KQotewotICAg
IFZlY3RvcjxBY2Nlc3NpYmlsaXR5VGV4dD4gdGV4dE9yZGVyOwotICAgIGNvcmVPYmplY3QtPmFj
Y2Vzc2liaWxpdHlUZXh0KHRleHRPcmRlcik7Ci0KLSAgICBib29sIHZpc2libGVUZXh0QXZhaWxh
YmxlID0gZmFsc2U7Ci0gICAgZm9yIChjb25zdCBBY2Nlc3NpYmlsaXR5VGV4dCYgdGV4dCA6IHRl
eHRPcmRlcikgewotICAgICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFjY2Vzc2liaWxpdHlU
ZXh0U291cmNlOjpBbHRlcm5hdGl2ZSkKLSAgICAgICAgICAgIHJldHVybiB0ZXh0LnRleHQ7Ci0K
LSAgICAgICAgc3dpdGNoICh0ZXh0LnRleHRTb3VyY2UpIHsKLSAgICAgICAgY2FzZSBBY2Nlc3Np
YmlsaXR5VGV4dFNvdXJjZTo6VmlzaWJsZToKLSAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5VGV4
dFNvdXJjZTo6Q2hpbGRyZW46Ci0gICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eVRleHRTb3VyY2U6
OkxhYmVsQnlFbGVtZW50OgotICAgICAgICAgICAgdmlzaWJsZVRleHRBdmFpbGFibGUgPSB0cnVl
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAodGV4dC50ZXh0U291cmNlID09IEFjY2Vzc2liaWxpdHlUZXh0U291cmNlOjpUaXRs
ZVRhZyAmJiAhdmlzaWJsZVRleHRBdmFpbGFibGUpCi0gICAgICAgICAgICByZXR1cm4gdGV4dC50
ZXh0OwotICAgIH0KLQotICAgIHJldHVybiBTdHJpbmcoKTsKLX0KLQotYm9vbCBzZWxlY3Rpb25C
ZWxvbmdzVG9PYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIGlmICghY29yZU9iamVjdCB8fCAhY29yZU9iamVj
dC0+aXNBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gcmFuZ2UgPSBzZWxlY3Rpb24uZmlyc3RSYW5nZSgpOwotICAgIHJldHVybiBy
YW5nZSAmJiBpbnRlcnNlY3RzPENvbXBvc2VkVHJlZT4oKnJhbmdlLCAqY29yZU9iamVjdC0+bm9k
ZSgpKTsKLX0KLQotQVhDb3JlT2JqZWN0KiBvYmplY3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmln
bm9yZWQoQVhDb3JlT2JqZWN0KiByZWZlcmVuY2VPYmplY3QsIGludCYgb2Zmc2V0KQotewotICAg
IC8vIEluZGljYXRpb24gdGhhdCBzb21ldGhpbmcgYm9ndXMgaGFzIHRyYW5zcGlyZWQuCi0gICAg
b2Zmc2V0ID0gLTE7Ci0KLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSByZWZlcmVuY2VPYmplY3Qt
PmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBOb2RlKiBmb2N1c2VkTm9kZSA9IHJlZmVyZW5jZU9iamVjdC0+c2VsZWN0aW9uKCku
ZW5kKCkuY29udGFpbmVyTm9kZSgpOwotICAgIGlmICghZm9jdXNlZE5vZGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgUmVuZGVyT2JqZWN0KiBmb2N1c2VkUmVuZGVyZXIgPSBmb2N1
c2VkTm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIWZvY3VzZWRSZW5kZXJlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBmb2N1c2VkT2JqZWN0
ID0gZG9jdW1lbnQtPmF4T2JqZWN0Q2FjaGUoKS0+Z2V0T3JDcmVhdGUoZm9jdXNlZFJlbmRlcmVy
KTsKLSAgICBpZiAoIWZvY3VzZWRPYmplY3QpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgLy8gTG9vayBmb3IgdGhlIGFjdHVhbCAobm90IGlnbm9yaW5nIGFjY2Vzc2liaWxpdHkpIHNl
bGVjdGVkIG9iamVjdC4KLSAgICBBWENvcmVPYmplY3QqIGZpcnN0VW5pZ25vcmVkUGFyZW50ID0g
Zm9jdXNlZE9iamVjdDsKLSAgICBpZiAoZmlyc3RVbmlnbm9yZWRQYXJlbnQtPmFjY2Vzc2liaWxp
dHlJc0lnbm9yZWQoKSkKLSAgICAgICAgZmlyc3RVbmlnbm9yZWRQYXJlbnQgPSBmaXJzdFVuaWdu
b3JlZFBhcmVudC0+cGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgaWYgKCFmaXJzdFVuaWdu
b3JlZFBhcmVudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBEb24ndCBpZ25v
cmUgbGlua3MgaWYgdGhlIG9mZnNldCBpcyBiZWluZyByZXF1ZXN0ZWQgZm9yIGEgbGluawotICAg
IC8vIG9yIGlmIHRoZSBsaW5rIGlzIGEgYmxvY2suCi0gICAgaWYgKCFyZWZlcmVuY2VPYmplY3Qt
PmlzTGluaygpICYmIGZpcnN0VW5pZ25vcmVkUGFyZW50LT5pc0xpbmsoKQotICAgICAgICAmJiAh
KGZpcnN0VW5pZ25vcmVkUGFyZW50LT5yZW5kZXJlcigpICYmICFmaXJzdFVuaWdub3JlZFBhcmVu
dC0+cmVuZGVyZXIoKS0+aXNJbmxpbmUoKSkpCi0gICAgICAgIGZpcnN0VW5pZ25vcmVkUGFyZW50
ID0gZmlyc3RVbmlnbm9yZWRQYXJlbnQtPnBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlm
ICghZmlyc3RVbmlnbm9yZWRQYXJlbnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
Ly8gVGhlIHJlZmVyZW5jZSBvYmplY3QgbXVzdCBlaXRoZXIgY29pbmNpZGUgd2l0aCB0aGUgZm9j
dXNlZAotICAgIC8vIG9iamVjdCBiZWluZyBjb25zaWRlcmVkLCBvciBiZSBhIGRlc2NlbmRhbnQg
b2YgaXQuCi0gICAgaWYgKHJlZmVyZW5jZU9iamVjdC0+aXNEZXNjZW5kYW50T2ZPYmplY3QoZmly
c3RVbmlnbm9yZWRQYXJlbnQpKQotICAgICAgICByZWZlcmVuY2VPYmplY3QgPSBmaXJzdFVuaWdu
b3JlZFBhcmVudDsKLQotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IG51bGxwdHI7Ci0gICAgaWYgKGZp
cnN0VW5pZ25vcmVkUGFyZW50ICE9IHJlZmVyZW5jZU9iamVjdCB8fCBmaXJzdFVuaWdub3JlZFBh
cmVudC0+aXNUZXh0Q29udHJvbCgpKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gdXNlIHRoZSBm
aXJzdCBjaGlsZCdzIG5vZGUgb2YgdGhlIHJlZmVyZW5jZQotICAgICAgICAvLyBvYmplY3QgYXMg
dGhlIHN0YXJ0IHBvaW50IHRvIGNhbGN1bGF0ZSB0aGUgY2FyZXQgb2Zmc2V0Ci0gICAgICAgIC8v
IGJlY2F1c2Ugd2Ugd2FudCBpdCB0byBiZSByZWxhdGl2ZSB0byB0aGUgb2JqZWN0IG9mCi0gICAg
ICAgIC8vIHJlZmVyZW5jZSwgbm90IGp1c3QgdG8gdGhlIGZvY3VzZWQgb2JqZWN0ICh3aGljaCBj
b3VsZCBoYXZlCi0gICAgICAgIC8vIHByZXZpb3VzIHNpYmxpbmdzIHdoaWNoIHNob3VsZCBiZSB0
YWtlbiBpbnRvIGFjY291bnQgdG9vKS4KLSAgICAgICAgQVhDb3JlT2JqZWN0KiBheEZpcnN0Q2hp
bGQgPSByZWZlcmVuY2VPYmplY3QtPmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKGF4Rmlyc3RD
aGlsZCkKLSAgICAgICAgICAgIHN0YXJ0Tm9kZSA9IGF4Rmlyc3RDaGlsZC0+bm9kZSgpOwotICAg
IH0KLSAgICAvLyBHZXR0aW5nIHRoZSBQb3NpdGlvbiBvZiBhIFBzZXVkb0VsZW1lbnQgbm93IHRy
aWdnZXJzIGFuIGFzc2VydGlvbi4KLSAgICAvLyBUaGlzIGNhbiBvY2N1ciB3aGVuIGNsaWNraW5n
IG9uIGVtcHR5IHNwYWNlIGluIGEgcmVuZGVyIGJsb2NrLgotICAgIGlmICghc3RhcnROb2RlIHx8
IHN0YXJ0Tm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgIHN0YXJ0Tm9kZSA9IGZpcnN0
VW5pZ25vcmVkUGFyZW50LT5ub2RlKCk7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGUgbm9kZSBmb3Ig
dGhlIGZpcnN0IHBhcmVudCBvYmplY3Qgbm90IGlnbm9yaW5nCi0gICAgLy8gYWNjZXNzaWJpbGl0
eSBpcyBudWxsIGFnYWluIGJlZm9yZSB1c2luZyBpdC4gVGhpcyBtaWdodCBoYXBwZW4KLSAgICAv
LyB3aXRoIGNlcnRhaW4ga2luZCBvZiBhY2Nlc3NpYmlsaXR5IG9iamVjdHMsIHN1Y2ggYXMgdGhl
IHJvb3QKLSAgICAvLyBvbmUgKHRoZSBzY3JvbGxlciBjb250YWluaW5nIHRoZSB3ZWJBcmVhIG9i
amVjdCkuCi0gICAgaWYgKCFzdGFydE5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0UG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24ocG9zaXRp
b25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSkpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlv
biA9IGZpcnN0VW5pZ25vcmVkUGFyZW50LT5zZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7Ci0KLSAg
ICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBlbmRQb3NpdGlvbikKLSAgICAgICAgb2Zmc2V0ID0gMDsK
LSAgICBlbHNlIGlmICghaXNTdGFydE9mTGluZShlbmRQb3NpdGlvbikpIHsKLSAgICAgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbi5wcmV2
aW91cygpKTsKLSAgICAgICAgb2Zmc2V0ID0gKHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdl
LCBUZXh0SXRlcmF0b3JCZWhhdmlvcjo6RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQ
b3NpdGlvbnMpIDogMCkgKyAxOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcmFuZ2UgPSBt
YWtlU2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwotICAgICAgICBvZmZz
ZXQgPSByYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgVGV4dEl0ZXJhdG9yQmVoYXZpb3I6
OkVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSA6IDA7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZpcnN0VW5pZ25vcmVkUGFyZW50OwotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGls
LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNTQ5MzAyZmU5OWYuLjAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBOdWFudGkgTHRkLgotICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBBbG9uem8K
LSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMiBJZ2FsaWEgUy5MLgotICoKLSAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSA8
YXRrL2F0ay5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBBWENvcmVPYmplY3Q7Ci1jbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0
OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIFZpc2libGVTZWxlY3Rpb247Ci19Ci0KLS8vIEFuIGV4
aXN0aW5nIGFjY2Vzc2liaWxpdHkgb2JqZWN0IGlzIGNvbnNpZGVyZWQgdG8gYmUgaW52YWxpZCB3
aGV0aGVyIGl0J3MgYWxyZWFkeQotLy8gZGV0YWNoZWQgb3IgaWYgaXQncyBub3QgYnV0IGp1c3Qg
dXBkYXRpbmcgdGhlIGxheW91dCB3aWxsIGRldGFjaCBpdCBhbnl3YXkuCi0jZGVmaW5lIHJldHVy
bklmV2ViS2l0QWNjZXNzaWJsZUlzSW52YWxpZCh3ZWJraXRBY2Nlc3NpYmxlKSBHX1NUTVRfU1RB
UlQgeyBcCi0gICAgaWYgKCF3ZWJraXRBY2Nlc3NpYmxlIHx8IHdlYmtpdEFjY2Vzc2libGVJc0Rl
dGFjaGVkKHdlYmtpdEFjY2Vzc2libGUpKSBcCi0gICAgICAgIHJldHVybjsgXAotICAgIGF1dG8m
IGNvcmVPYmplY3QgPSB3ZWJraXRBY2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdCh3ZWJr
aXRBY2Nlc3NpYmxlKTsgXAotICAgIGlmICghY29yZU9iamVjdC5kb2N1bWVudCgpKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm47ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGNvcmVPYmplY3QudXBkYXRlQmFja2luZ1N0b3JlKCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIGlmICh3ZWJraXRBY2Nlc3NpYmxlSXNEZXRhY2hlZCh3ZWJraXRB
Y2Nlc3NpYmxlKSkgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm47ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIDsg
fSBHX1NUTVRfRU5ECi0KLSNkZWZpbmUgcmV0dXJuVmFsSWZXZWJLaXRBY2Nlc3NpYmxlSXNJbnZh
bGlkKHdlYmtpdEFjY2Vzc2libGUsIHZhbCkgR19TVE1UX1NUQVJUIHsgXAotICAgIGlmICghd2Vi
a2l0QWNjZXNzaWJsZSB8fCB3ZWJraXRBY2Nlc3NpYmxlSXNEZXRhY2hlZCh3ZWJraXRBY2Nlc3Np
YmxlKSkgXAotICAgICAgICByZXR1cm4gKHZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGF1dG8mIGNvcmVPYmplY3QgPSB3ZWJraXRB
Y2Nlc3NpYmxlR2V0QWNjZXNzaWJpbGl0eU9iamVjdCh3ZWJraXRBY2Nlc3NpYmxlKTsgXAotICAg
IGlmICghY29yZU9iamVjdC5kb2N1bWVudCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gKHZhbCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGNvcmVPYmplY3QudXBkYXRlQmFj
a2luZ1N0b3JlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlm
ICh3ZWJraXRBY2Nlc3NpYmxlSXNEZXRhY2hlZCh3ZWJraXRBY2Nlc3NpYmxlKSkgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICByZXR1cm4gKHZhbCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIDsgfSBHX1NUTVRfRU5ECi0KLUF0a0F0
dHJpYnV0ZVNldCogYWRkVG9BdGtBdHRyaWJ1dGVTZXQoQXRrQXR0cmlidXRlU2V0KiwgY29uc3Qg
Y2hhciogbmFtZSwgY29uc3QgY2hhciogdmFsdWUpOwotCi12b2lkIGNvbnRlbnRzUmVsYXRpdmVU
b0F0a0Nvb3JkaW5hdGVUeXBlKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqLCBBdGtDb29y
ZFR5cGUsIFdlYkNvcmU6OkludFJlY3QsIGdpbnQqIHgsIGdpbnQqIHksIGdpbnQqIHdpZHRoID0g
bnVsbHB0ciwgZ2ludCogaGVpZ2h0ID0gbnVsbHB0cik7Ci0KLVN0cmluZyBhY2Nlc3NpYmlsaXR5
VGl0bGUoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCopOwotCi1TdHJpbmcgYWNjZXNzaWJp
bGl0eURlc2NyaXB0aW9uKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3QqKTsKLQotYm9vbCBz
ZWxlY3Rpb25CZWxvbmdzVG9PYmplY3QoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdCosIFdl
YkNvcmU6OlZpc2libGVTZWxlY3Rpb24mKTsKLQotV2ViQ29yZTo6QVhDb3JlT2JqZWN0KiBvYmpl
Y3RGb2N1c2VkQW5kQ2FyZXRPZmZzZXRVbmlnbm9yZWQoV2ViQ29yZTo6QVhDb3JlT2JqZWN0Kiwg
aW50JiBvZmZzZXQpOwotCi0jZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShB
VEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0c3BpL0FjY2Vz
c2liaWxpdHlPYmplY3RBdHNwaS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKaW5kZXggZjgxYTg4NTk4OGQ4Li5hNmI1
MTE5YmU4MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRzcGkv
QWNjZXNzaWJpbGl0eU9iamVjdEF0c3BpLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0c3BpL0FjY2Vzc2liaWxpdHlPYmplY3RBdHNwaS5jcHAKQEAgLTk2Niw3ICs5NjYs
NyBAQCBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk6OmF0
dHJpYnV0ZXMoKSBjb25zdAogCiAgICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBXM0MgQ29yZSBBY2Nl
c3NpYmlsaXR5IEFQSSBNYXBwaW5ncyAxLjEsIHNlY3Rpb24gNS40LjEgR2VuZXJhbCBSdWxlczoK
ICAgICAvLyAiVXNlciBhZ2VudHMgbXVzdCBleHBvc2UgdGhlIFdBSS1BUklBIHJvbGUgc3RyaW5n
IGlmIHRoZSBBUEkgc3VwcG9ydHMgYSBtZWNoYW5pc20gdG8gZG8gc28uIgotICAgIC8vIEluIHRo
ZSBjYXNlIG9mIEFUSywgdGhlIG1lY2hhbmlzbSB0byBkbyBzbyBpcyBhbiBvYmplY3QgYXR0cmli
dXRlIHBhaXIgKHhtbC1yb2xlczoic3RyaW5nIikuCisgICAgLy8gSW4gdGhlIGNhc2Ugb2YgQVRT
UEksIHRoZSBtZWNoYW5pc20gdG8gZG8gc28gaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSBwYWlyICh4
bWwtcm9sZXM6InN0cmluZyIpLgogICAgIC8vIFdlIGNhbm5vdCB1c2UgdGhlIGNvbXB1dGVkUm9s
ZVN0cmluZyBmb3IgdGhpcyBwdXJwb3NlIGJlY2F1c2UgaXQgaXMgbm90IGxpbWl0ZWQgdG8gZWxl
bWVudHMKICAgICAvLyB3aXRoIEFSSUEgcm9sZXMsIGFuZCBpdCBtaWdodCBub3QgY29udGFpbiB0
aGUgYWN0dWFsIEFSSUEgcm9sZSB2YWx1ZSAoZS5nLiBEUHViIEFSSUEpLgogICAgIFN0cmluZyBy
b2xlU3RyaW5nID0gc3RhdGljX2Nhc3Q8QWNjZXNzaWJpbGl0eU9iamVjdCo+KG1fY29yZU9iamVj
dCktPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnJvbGVBdHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaAppbmRleCAxNDdlYWQxMDNmZTkuLmE5YWE2MjllMzA5OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaApAQCAtMzc4LDcgKzM3OCw3IEBA
IGlubGluZSB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjbGVhclR5cGluZ1N0eWxlKCkKICAgICBtX3R5
cGluZ1N0eWxlID0gbnVsbHB0cjsKIH0KIAotI2lmICEoRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYm
IChQTEFURk9STShDT0NPQSkgfHwgVVNFKEFUSykgfHwgVVNFKEFUU1BJKSkpCisjaWYgIShFTkFC
TEUoQUNDRVNTSUJJTElUWSkgJiYgKFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRTUEkpKSkKIAog
aW5saW5lIHZvaWQgRnJhbWVTZWxlY3Rpb246Om5vdGlmeUFjY2Vzc2liaWxpdHlGb3JTZWxlY3Rp
b25DaGFuZ2UoY29uc3QgQVhUZXh0U3RhdGVDaGFuZ2VJbnRlbnQmKQogewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9hdGsvRnJhbWVTZWxlY3Rpb25BdGsuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBjOWFkNjEwZWJiZjUuLjAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2F0ay9GcmFtZVNlbGVjdGlvbkF0ay5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgot
ICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKLQotI2lmIEVO
QUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiQVhPYmplY3RDYWNo
ZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50SW5saW5lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKLSNpbmNsdWRlICJXZWJLaXRBY2Nlc3NpYmxlLmgi
Ci0jaW5jbHVkZSAiV2ViS2l0QWNjZXNzaWJsZVV0aWwuaCIKLSNpbmNsdWRlIDxnbGliLmg+Ci0j
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyB2b2lkIGVtaXRUZXh0U2VsZWN0aW9uQ2hh
bmdlKEFYQ29yZU9iamVjdCogb2JqZWN0LCBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiwgaW50
IG9mZnNldCkKLXsKLSAgICBhdXRvKiBheE9iamVjdCA9IG9iamVjdC0+d3JhcHBlcigpOwotICAg
IGlmICghYXhPYmplY3QgfHwgIUFUS19JU19URVhUKGF4T2JqZWN0KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIG9mZnNldCBmb3IgdGhlIGxpc3QgaXRl
bSBtYXJrZXIgaW4gTGVmdC1Uby1SaWdodCB0ZXh0IGJlY2F1c2UKLSAgICAvLyB0aGUgbGlzdCBp
dGVtIG1hcmtlciBpcyBleHBvc2VkIHRocm91Z2ggdGhlIHRleHQgb2YgdGhlIGFjY2Vzc2libGUg
bGlzdCBpdGVtIHJhdGhlcgotICAgIC8vIHRoYW4gdGhyb3VnaCBhIHNlcGFyYXRlIGFjY2Vzc2li
bGUgb2JqZWN0LgotICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBvYmplY3QtPnJlbmRlcmVy
KCk7Ci0gICAgaWYgKGlzPFJlbmRlckxpc3RJdGVtPihyZW5kZXJlcikgJiYgcmVuZGVyZXItPnN0
eWxlKCkuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSKQotICAgICAgICBvZmZzZXQg
Kz0gZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KCpyZW5kZXJlcikubWFya2VyVGV4dFdpdGhTdWZm
aXgoKS5sZW5ndGgoKTsKLQotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShheE9iamVjdCwgInRl
eHQtY2FyZXQtbW92ZWQiLCBvZmZzZXQpOwotICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKQot
ICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJ0ZXh0LXNlbGVjdGlvbi1j
aGFuZ2VkIik7Ci19Ci0KLXN0YXRpYyB2b2lkIG1heWJlRW1pdFRleHRGb2N1c0NoYW5nZShSZWZQ
dHI8QVhDb3JlT2JqZWN0PiYmIG9iamVjdCkKLXsKLSAgICAvLyBUaGlzIHN0YXRpYyB2YXJpYWJs
ZSBpcyBuZWVkZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgb2xkIG9iamVjdAotICAgIC8vIGFzIHBl
ciBwcmV2aW91cyBjYWxscyB0byB0aGlzIGZ1bmN0aW9uLCBpbiBvcmRlciB0byBwcm9wZXJseQot
ICAgIC8vIGRlY2lkZSB3aGV0aGVyIHRvIGVtaXQgc29tZSBzaWduYWxzIG9yIG5vdC4KLSAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmUHRyPEFYQ29yZU9iamVjdD4+IG9sZE9iamVjdDsKLQot
ICAgIC8vIEVuc3VyZSB0aGUgb2xkT2JqZWN0IGJlbG9uZ3MgdG8gdGhlIHNhbWUgZG9jdW1lbnQg
dGhhdCB0aGUKLSAgICAvLyBjdXJyZW50IG9iamVjdCBzbyBmdXJ0aGVyIGNvbXBhcmlzb25zIG1h
a2Ugc2Vuc2UuIE90aGVyd2lzZSwKLSAgICAvLyBqdXN0IHJlc2V0IG9sZE9iamVjdCB0byAwIHNv
IGl0IHdvbid0IGJlIHRha2VuIGludG8gYWNjb3VudCBpbgotICAgIC8vIHRoZSBpbW1lZGlhdGVs
eSBmb2xsb3dpbmcgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICAgIGlmIChvYmplY3QgJiYgb2xk
T2JqZWN0LmdldCgpICYmIG9sZE9iamVjdC5nZXQoKS0+ZG9jdW1lbnQoKSAhPSBvYmplY3QtPmRv
Y3VtZW50KCkpCi0gICAgICAgIG9sZE9iamVjdC5nZXQoKSA9IG51bGxwdHI7Ci0KLSAgICBhdXRv
KiBheE9iamVjdCA9IG9iamVjdCA/IG9iamVjdC0+d3JhcHBlcigpIDogbnVsbHB0cjsKLSAgICBh
dXRvKiBvbGRBeE9iamVjdCA9IG9sZE9iamVjdC5nZXQoKSA/IG9sZE9iamVjdC5nZXQoKS0+d3Jh
cHBlcigpIDogbnVsbHB0cjsKLQotICAgIGlmIChheE9iamVjdCAhPSBvbGRBeE9iamVjdCkgewot
ICAgICAgICBpZiAob2xkQXhPYmplY3QgJiYgQVRLX0lTX1RFWFQob2xkQXhPYmplY3QpKSB7Ci0g
ICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUob2xkQXhPYmplY3QsICJmb2N1cy1ldmVu
dCIsIEZBTFNFKTsKLSAgICAgICAgICAgIGF0a19vYmplY3Rfbm90aWZ5X3N0YXRlX2NoYW5nZShB
VEtfT0JKRUNUKG9sZEF4T2JqZWN0KSwgQVRLX1NUQVRFX0ZPQ1VTRUQsIEZBTFNFKTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoYXhPYmplY3QgJiYgQVRLX0lTX1RFWFQoYXhPYmplY3QpKSB7Ci0g
ICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoYXhPYmplY3QsICJmb2N1cy1ldmVudCIs
IFRSVUUpOwotICAgICAgICAgICAgYXRrX29iamVjdF9ub3RpZnlfc3RhdGVfY2hhbmdlKEFUS19P
QkpFQ1QoYXhPYmplY3QpLCBBVEtfU1RBVEVfRk9DVVNFRCwgVFJVRSk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvLyBVcGRhdGUgcG9pbnRlciB0byBsYXN0IGZvY3VzZWQgb2JqZWN0LgotICAg
IG9sZE9iamVjdC5nZXQoKSA9IFdURk1vdmUob2JqZWN0KTsKLX0KLQotCi12b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpub3RpZnlBY2Nlc3NpYmlsaXR5Rm9yU2VsZWN0aW9uQ2hhbmdlKGNvbnN0IEFYVGV4
dFN0YXRlQ2hhbmdlSW50ZW50JikKLXsKLSAgICBpZiAoIUFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9zZWxlY3Rpb24u
c3RhcnQoKS5pc05vdE51bGwoKSB8fCAhbV9zZWxlY3Rpb24uZW5kKCkuaXNOb3ROdWxsKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIE5vZGUqIGZvY3VzZWROb2RlID0gbV9zZWxlY3Rpb24uZW5k
KCkuY29udGFpbmVyTm9kZSgpOwotICAgIGlmICghZm9jdXNlZE5vZGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC0+ZXhpc3RpbmdBWE9i
amVjdENhY2hlKCk7Ci0gICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQWNj
ZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdCA9IGNhY2hlLT5nZXRPckNyZWF0
ZShmb2N1c2VkTm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKCFhY2Nlc3NpYmlsaXR5T2JqZWN0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgb2Zmc2V0OwotICAgIFJlZlB0cjxBWENvcmVP
YmplY3Q+IG9iamVjdCA9IG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChhY2Nl
c3NpYmlsaXR5T2JqZWN0LCBvZmZzZXQpOwotICAgIGlmICghb2JqZWN0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBlbWl0VGV4dFNlbGVjdGlvbkNoYW5nZShvYmplY3QuZ2V0KCksIG1fc2VsZWN0
aW9uLCBvZmZzZXQpOwotICAgIG1heWJlRW1pdFRleHRGb2N1c0NoYW5nZShXVEZNb3ZlKG9iamVj
dCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoQUND
RVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MueWFtbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbAppbmRleCBj
YjkyN2VjYjFjMDAuLjE0ZTgyZmQ5MmY4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5ncy55YW1sCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbApA
QCAtMjYzLDcgKzI2Myw2IEBAIElzQWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQ6CiAg
IHR5cGU6IGJvb2wKICAgZGVmYXVsdFZhbHVlOgogICAgIFdlYkNvcmU6Ci0gICAgICBVU0UoQVRT
UEkpOiB0cnVlCiAgICAgICBkZWZhdWx0OiBmYWxzZQogCiBJc1BlckFjdGl2aXR5U3RhdGVDUFVV
c2FnZU1lYXN1cmVtZW50RW5hYmxlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCmluZGV4IDJlMmViOTA1ZGE3OC4uYWFiZTNm
MjIyNjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybURpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtRGlzcGxheS5jcHAKQEAgLTgwLDcgKzgwLDcgQEAKICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNlbmRpZgogCi0jaWYgVVNFKEFUU1BJKSB8fCBVU0UoQVRLKQorI2lmIFVT
RShBVFNQSSkKICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAjZW5kaWYKIApAQCAt
Mjk0LDcgKzI5NCw3IEBAIGNtc0hQUk9GSUxFIFBsYXRmb3JtRGlzcGxheTo6Y29sb3JQcm9maWxl
KCkgY29uc3QKIH0KICNlbmRpZgogCi0jaWYgVVNFKEFUU1BJKSB8fCBVU0UoQVRLKQorI2lmIFVT
RShBVFNQSSkKIGNvbnN0IFN0cmluZyYgUGxhdGZvcm1EaXNwbGF5OjphY2Nlc3NpYmlsaXR5QnVz
QWRkcmVzcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fYWNjZXNzaWJpbGl0eUJ1c0FkZHJlc3MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3Bs
YXkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5o
CmluZGV4IGJlN2RiNmU4ODdiNS4uYmVjNTlhMDAyZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaApAQCAtOTAsNyArOTAsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBjbXNIUFJPRklMRSBjb2xvclByb2ZpbGUoKSBjb25zdDsK
ICNlbmRpZgogCi0jaWYgVVNFKEFUU1BJKSB8fCBVU0UoQVRLKQorI2lmIFVTRShBVFNQSSkKICAg
ICB2b2lkIHNldEFjY2Vzc2liaWxpdHlCdXNBZGRyZXNzKFN0cmluZyYmIGFkZHJlc3MpIHsgbV9h
Y2Nlc3NpYmlsaXR5QnVzQWRkcmVzcyA9IFdURk1vdmUoYWRkcmVzcyk7IH0KICAgICBjb25zdCBT
dHJpbmcmIGFjY2Vzc2liaWxpdHlCdXNBZGRyZXNzKCkgY29uc3Q7CiAjZW5kaWYKQEAgLTExNyw3
ICsxMTcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgbXV0YWJsZSBMQ01TUHJvZmlsZVB0ciBtX2ljY1By
b2ZpbGU7CiAjZW5kaWYKIAotI2lmIFVTRShBVFNQSSkgfHwgVVNFKEFUSykKKyNpZiBVU0UoQVRT
UEkpCiAgICAgdmlydHVhbCBTdHJpbmcgcGxhcnRmb3JtQWNjZXNzaWJpbGl0eUJ1c0FkZHJlc3Mo
KSBjb25zdCB7IHJldHVybiB7IH07IH0KIAogICAgIG11dGFibGUgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IG1fYWNjZXNzaWJpbGl0eUJ1c0FkZHJlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEuY3BwCmluZGV4
IGRjNDZlZGUxNGNkZi4uMjIxNTRjODc2M2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcApAQCAt
MjE3LDcgKzIxNyw3IEBAIGNtc0hQUk9GSUxFIFBsYXRmb3JtRGlzcGxheVgxMTo6Y29sb3JQcm9m
aWxlKCkgY29uc3QKIH0KICNlbmRpZgogCi0jaWYgVVNFKEFUU1BJKSB8fCBVU0UoQVRLKQorI2lm
IFVTRShBVFNQSSkKIFN0cmluZyBQbGF0Zm9ybURpc3BsYXlYMTE6OnBsYXJ0Zm9ybUFjY2Vzc2li
aWxpdHlCdXNBZGRyZXNzKCkgY29uc3QKIHsKICAgICBBdG9tIGF0c3BpQnVzQXRvbSA9IFhJbnRl
cm5BdG9tKG1fZGlzcGxheSwgIkFUX1NQSV9CVVMiLCBGYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmgK
aW5kZXggMjk0M2E1NTQ5ZWNiLi41YTdmZmUwNWQ1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmgKQEAg
LTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToKICAgICBjbXNIUFJPRklMRSBjb2xvclByb2ZpbGUoKSBj
b25zdCBvdmVycmlkZTsKICNlbmRpZgogCi0jaWYgVVNFKEFUU1BJKSB8fCBVU0UoQVRLKQorI2lm
IFVTRShBVFNQSSkKICAgICBTdHJpbmcgcGxhcnRmb3JtQWNjZXNzaWJpbGl0eUJ1c0FkZHJlc3Mo
KSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDJlMjI4ZTQxNWI1OS4uYWU0
YjEyYTBlYmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDIyLTAzLTIyICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVd
IFJlbW92ZSB0aGUgQVRLIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzgxOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFNv
dXJjZXNXUEUudHh0OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2F0ay9XZWJLaXRXZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdC5jcHA6IFJlbW92ZWQuCisgICAgICAgIChjb3JlUm9vdE9iamVjdFdyYXBwZXJEZXRh
Y2hlZENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKHJvb3RXZWJBcmVhV3JhcHBlcik6IERl
bGV0ZWQuCisgICAgICAgIChhY2Nlc3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIpOiBEZWxldGVk
LgorICAgICAgICAod2Via2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RJbml0aWFsaXplKTog
RGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0R2V0SW5k
ZXhJblBhcmVudCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRXZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdEdldE5DaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRXZWJQYWdlQWNj
ZXNzaWJpbGl0eU9iamVjdFJlZkNoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYmtpdFdlYlBh
Z2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmU3RhdGVTZXQpOiBEZWxldGVkLgorICAgICAgICAod2Vi
a2l0X3dlYl9wYWdlX2FjY2Vzc2liaWxpdHlfb2JqZWN0X2NsYXNzX2luaXQpOiBEZWxldGVkLgor
ICAgICAgICAod2Via2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3ROZXcpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9hdGsvV2ViS2l0V2ViUGFnZUFjY2Vzc2liaWxp
dHlPYmplY3QuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9X
ZWJQYWdlR0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBsYXRmb3JtSW5pdGlh
bGl6ZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy93cGUvV2ViUHJvY2Vzc01haW5XUEUuY3BwOgor
ICAgICAgICAoV2ViS2l0Ojppbml0aWFsaXplQWNjZXNzaWJpbGl0eSk6IERlbGV0ZWQuCisKIDIw
MjItMDMtMjIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YnNpdGUgcG9saWNpZXMgYXJlIG5vdCByZXNwZWN0ZWQgd2hlbiBkb2luZyBDT09QIGJhc2VkIHBy
b2Nlc3Mgc3dhcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZSBi
L1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKaW5kZXggMjk0N2YzMWIwZDgyLi4zMzNi
ZmUwNzU1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDY1LDEyICs0NjUsMTAgQEAg
bGlzdChBUFBFTkQgV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElS
fS9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ayIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L3NvdXAiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vz
cy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJv
Y2Vzcy9XZWJQYWdlL2F0ayIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrIgogKQogCiBsaXN0KEFQUEVORCBXZWJLaXRfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMK
LSAgICAke0FUS19JTkNMVURFX0RJUlN9CiAgICAgJHtFTkNIQU5UX0lOQ0xVREVfRElSU30KICAg
ICAke0dJT19VTklYX0lOQ0xVREVfRElSU30KICAgICAke0dMSUJfSU5DTFVERV9ESVJTfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQv
UGxhdGZvcm1XUEUuY21ha2UKaW5kZXggOTU4NzMxM2MyODZiLi5jNWFkZTNmNTNjNDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMzIyLDcgKzMyMiw2IEBAIGxpc3QoQVBQRU5EIFdlYktp
dF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvd3BlL0RPTSIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3NvdXAiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MiCi0gICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9XZWJQ
YWdlL2F0ayIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1dlYlBhZ2UvbGlid3BlIgog
ICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvV2ViUGFnZS93cGUiCiAgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9nbGliIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
R1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKaW5kZXggY2JjNGI1ZTBhMmMw
Li42NmY5ZWQwYjliZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dApAQCAtNDMxLDggKzQzMSw2IEBAIFdl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0
b3IuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJl
YUNvb3JkaW5hdGVkR3JhcGhpY3MuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRH
cmFwaGljcy9MYXllclRyZWVIb3N0LmNwcAogCi1XZWJQcm9jZXNzL1dlYlBhZ2UvYXRrL1dlYktp
dFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAotCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ2xp
Yi9XZWJQYWdlR0xpYi5jcHAKIAogV2ViUHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdl
R1N0cmVhbWVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dCBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKaW5kZXggY2M3ODc1ZTUxYTI2Li41YTlhZGJm
ZDExODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc1dQRS50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzV1BFLnR4dApAQCAtMjYzLDggKzI2Myw2IEBAIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9EcmF3aW5nQXJlYUNvb3JkaW5h
dGVkR3JhcGhpY3MuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9M
YXllclRyZWVIb3N0LmNwcAogCi1XZWJQcm9jZXNzL1dlYlBhZ2UvYXRrL1dlYktpdFdlYlBhZ2VB
Y2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAotCiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdl
R0xpYi5jcHAKIAogV2ViUHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVy
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDZh
ZWYyMGRlZjMwYy4uY2Q5ZjYxNjYzOTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC0xMDgsMTQgKzEwOCw5IEBACiAjaW5jbHVkZSA8d3RmL1dhbGxU
aW1lLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBFTkFCTEUoQUND
RVNTSUJJTElUWSkKLSNpZiBVU0UoQVRLKQotdHlwZWRlZiBzdHJ1Y3QgX0F0a09iamVjdCBBdGtP
YmplY3Q7Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2VsaWYgVVNFKEFUU1BJKQor
I2lmIFVTRShBVFNQSSkKICNpbmNsdWRlIDxXZWJDb3JlL0FjY2Vzc2liaWxpdHlSb290QXRzcGku
aD4KICNlbmRpZgotI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiQXJndW1l
bnRDb2RlcnNHdGsuaCIKQEAgLTIwNzEsMTMgKzIwNjYsOSBAQCBwcml2YXRlOgogICAgIFJldGFp
blB0cjxOU0RpY3Rpb25hcnk+IG1fZGF0YURldGVjdGlvbkNvbnRleHQ7CiAjZW5kaWYKIAotI2lm
IEVOQUJMRShBQ0NFU1NJQklMSVRZKQotI2lmIFVTRShBVEspCi0gICAgR1JlZlB0cjxBdGtPYmpl
Y3Q+IG1fYWNjZXNzaWJpbGl0eU9iamVjdDsKLSNlbGlmIFVTRShBVFNQSSkKKyNpZiBVU0UoQVRT
UEkpCiAgICAgUmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSb290QXRzcGk+IG1fYWNjZXNz
aWJpbGl0eVJvb3RPYmplY3Q7CiAjZW5kaWYKLSNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQog
ICAgIHVpbnQ2NF90IG1fbmF0aXZlV2luZG93SGFuZGxlIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvYXRrL1dlYktpdFdlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2F0ay9XZWJL
aXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGVkZDIxOGI2OWRlOS4uMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2F0ay9XZWJLaXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxOSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiV2ViS2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QuaCIKLQotI2lmIEVOQUJMRShB
Q0NFU1NJQklMSVRZKQotCi0jaW5jbHVkZSAiV2ViUGFnZS5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
QVhPYmplY3RDYWNoZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvQWNjZXNzaWJpbGl0eVNjcm9sbFZp
ZXcuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9G
cmFtZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUGFnZS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsVmlldy5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotc3RydWN0IF9XZWJLaXRX
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFByaXZhdGUgewotICAgIFdlYlBhZ2UqIHBhZ2U7Ci19
OwotCi1XRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3Qs
IHdlYmtpdF93ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdCwgQVRLX1RZUEVfUExVRykKLQot
c3RhdGljIHZvaWQgY29yZVJvb3RPYmplY3RXcmFwcGVyRGV0YWNoZWRDYWxsYmFjayhBdGtPYmpl
Y3QqIHdyYXBwZXIsIGNvbnN0IGNoYXIqLCBnYm9vbGVhbiB2YWx1ZSwgQXRrT2JqZWN0KiBhdGtP
YmplY3QpCi17Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGF0a09iamVjdCwgImNoaWxkcmVuLWNoYW5nZWQ6OnJlbW92ZSIsIDAs
IHdyYXBwZXIpOwotfQotCi1zdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIqIHJvb3RX
ZWJBcmVhV3JhcHBlcihBWENvcmVPYmplY3QmIHJvb3RPYmplY3QpCi17Ci0gICAgaWYgKCFyb290
T2JqZWN0LmlzU2Nyb2xsVmlldygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlm
IChhdXRvKiB3ZWJBcmVhT2JqZWN0ID0gcm9vdE9iamVjdC53ZWJBcmVhT2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiB3ZWJBcmVhT2JqZWN0LT53cmFwcGVyKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotc3RhdGljIEF0a09iamVjdCogYWNjZXNzaWJpbGl0eVJvb3RPYmplY3RXcmFwcGVy
KEF0a09iamVjdCogYXRrT2JqZWN0KQotewotICAgIGlmICghQVhPYmplY3RDYWNoZTo6YWNjZXNz
aWJpbGl0eUVuYWJsZWQoKSkKLSAgICAgICAgQVhPYmplY3RDYWNoZTo6ZW5hYmxlQWNjZXNzaWJp
bGl0eSgpOwotCi0gICAgYXV0byogYWNjZXNzaWJsZSA9IFdFQktJVF9XRUJfUEFHRV9BQ0NFU1NJ
QklMSVRZX09CSkVDVChhdGtPYmplY3QpOwotICAgIGlmICghYWNjZXNzaWJsZS0+cHJpdi0+cGFn
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBQYWdlKiBjb3JlUGFnZSA9IGFjY2Vz
c2libGUtPnByaXYtPnBhZ2UtPmNvcmVQYWdlKCk7Ci0gICAgaWYgKCFjb3JlUGFnZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBGcmFtZSYgY29yZUZyYW1lID0gY29yZVBhZ2UtPm1h
aW5GcmFtZSgpOwotICAgIGlmICghY29yZUZyYW1lLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBjb3JlRnJhbWUuZG9jdW1l
bnQoKS0+YXhPYmplY3RDYWNoZSgpOwotICAgIGlmICghY2FjaGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgQVhDb3JlT2JqZWN0KiBjb3JlUm9vdE9iamVjdCA9IGNhY2hlLT5yb290
T2JqZWN0KCk7Ci0gICAgaWYgKCFjb3JlUm9vdE9iamVjdCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBhdXRvKiB3cmFwcGVyID0gQVRLX09CSkVDVChjb3JlUm9vdE9iamVjdC0+d3Jh
cHBlcigpKTsKLSAgICBpZiAoIXdyYXBwZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgaWYgKGF0a19vYmplY3RfcGVla19wYXJlbnQod3JhcHBlcikgIT0gQVRLX09CSkVDVChhY2Nl
c3NpYmxlKSkgewotICAgICAgICBhdGtfb2JqZWN0X3NldF9wYXJlbnQod3JhcHBlciwgQVRLX09C
SkVDVChhY2Nlc3NpYmxlKSk7Ci0gICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShhY2Nlc3Np
YmxlLCAiY2hpbGRyZW4tY2hhbmdlZDo6YWRkIiwgMCwgd3JhcHBlcik7Ci0KLSAgICAgICAgaWYg
KGF1dG8qIHdlYkFyZWFXcmFwcGVyID0gcm9vdFdlYkFyZWFXcmFwcGVyKCpjb3JlUm9vdE9iamVj
dCkpIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KHdlYkFyZWFXcmFwcGVy
LCAic3RhdGUtY2hhbmdlOjpkZWZ1bmN0IiwKLSAgICAgICAgICAgICAgICBHX0NBTExCQUNLKGNv
cmVSb290T2JqZWN0V3JhcHBlckRldGFjaGVkQ2FsbGJhY2spLCBhY2Nlc3NpYmxlLCBzdGF0aWNf
Y2FzdDxHQ29ubmVjdEZsYWdzPigwKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
d3JhcHBlcjsKLX0KLQotc3RhdGljIHZvaWQgd2Via2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmpl
Y3RJbml0aWFsaXplKEF0a09iamVjdCogYXRrT2JqZWN0LCBncG9pbnRlciBkYXRhKQotewotICAg
IGlmIChBVEtfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVj
dF9wYXJlbnRfY2xhc3MpLT5pbml0aWFsaXplKQotICAgICAgICBBVEtfT0JKRUNUX0NMQVNTKHdl
YmtpdF93ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9wYXJlbnRfY2xhc3MpLT5pbml0aWFs
aXplKGF0a09iamVjdCwgZGF0YSk7Ci0KLSAgICBXRUJLSVRfV0VCX1BBR0VfQUNDRVNTSUJJTElU
WV9PQkpFQ1QoYXRrT2JqZWN0KS0+cHJpdi0+cGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViUGFn
ZSo+KGRhdGEpOwotICAgIGF0a19vYmplY3Rfc2V0X3JvbGUoYXRrT2JqZWN0LCBBVEtfUk9MRV9G
SUxMRVIpOwotfQotCi1zdGF0aWMgZ2ludCB3ZWJraXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVj
dEdldEluZGV4SW5QYXJlbnQoQXRrT2JqZWN0KikKLXsKLSAgICAvLyBBbiBBdGtQbHVnIGlzIHRo
ZSBvbmx5IGNoaWxkIGFuIEF0a1NvY2tldCBjYW4gaGF2ZS4KLSAgICByZXR1cm4gMDsKLX0KLQot
c3RhdGljIGdpbnQgd2Via2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHZXROQ2hpbGRyZW4o
QXRrT2JqZWN0KiBhdGtPYmplY3QpCi17Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlSb290T2Jq
ZWN0V3JhcHBlcihhdGtPYmplY3QpID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIHdl
YmtpdFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmQ2hpbGQoQXRrT2JqZWN0KiBhdGtPYmpl
Y3QsIGdpbnQgaW5kZXgpCi17Ci0gICAgLy8gSXQncyBzdXBwb3NlZCB0byBoYXZlIGVpdGhlciBv
bmUgY2hpbGQgb3IgemVyby4KLSAgICBpZiAoaW5kZXggJiYgaW5kZXggIT0gMSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoYXV0byogcm9vdE9iamVjdFdyYXBwZXIgPSBhY2Nl
c3NpYmlsaXR5Um9vdE9iamVjdFdyYXBwZXIoYXRrT2JqZWN0KSkKLSAgICAgICAgcmV0dXJuIEFU
S19PQkpFQ1QoZ19vYmplY3RfcmVmKHJvb3RPYmplY3RXcmFwcGVyKSk7Ci0KLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotc3RhdGljIEF0a1N0YXRlU2V0KiB3ZWJraXRXZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdFJlZlN0YXRlU2V0KEF0a09iamVjdCogYXRrT2JqZWN0KQotewotICAgIGlmIChh
dXRvKiByb290T2JqZWN0V3JhcHBlciA9IGFjY2Vzc2liaWxpdHlSb290T2JqZWN0V3JhcHBlcihh
dGtPYmplY3QpKQotICAgICAgICByZXR1cm4gYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KHJvb3RP
YmplY3RXcmFwcGVyKTsKLQotICAgIHJldHVybiBhdGtfc3RhdGVfc2V0X25ldygpOwotfQotCi1z
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3BhZ2VfYWNjZXNzaWJpbGl0eV9vYmplY3RfY2xhc3NfaW5p
dChXZWJLaXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdENsYXNzKiBrbGFzcykKLXsKLSAgICBB
dGtPYmplY3RDbGFzcyogYXRrT2JqZWN0Q2xhc3MgPSBBVEtfT0JKRUNUX0NMQVNTKGtsYXNzKTsK
LSAgICAvLyBObyBuZWVkIHRvIGltcGxlbWVudCBnZXRfcGFyZW50KCkgaGVyZSBzaW5jZSB0aGlz
IGlzIGEgc3ViY2xhc3MKLSAgICAvLyBvZiBBdGtQbHVnIGFuZCBhbGwgdGhlIGxvZ2ljIHJlbGF0
ZWQgdG8gdGhhdCBmdW5jdGlvbiB3aWxsIGJlCi0gICAgLy8gaW1wbGVtZW50ZWQgYnkgdGhlIEFU
SyBicmlkZ2UuCi0gICAgYXRrT2JqZWN0Q2xhc3MtPmluaXRpYWxpemUgPSB3ZWJraXRXZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdEluaXRpYWxpemU7Ci0gICAgYXRrT2JqZWN0Q2xhc3MtPmdldF9p
bmRleF9pbl9wYXJlbnQgPSB3ZWJraXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdEdldEluZGV4
SW5QYXJlbnQ7Ci0gICAgYXRrT2JqZWN0Q2xhc3MtPmdldF9uX2NoaWxkcmVuID0gd2Via2l0V2Vi
UGFnZUFjY2Vzc2liaWxpdHlPYmplY3RHZXROQ2hpbGRyZW47Ci0gICAgYXRrT2JqZWN0Q2xhc3Mt
PnJlZl9jaGlsZCA9IHdlYmtpdFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UmVmQ2hpbGQ7Ci0g
ICAgYXRrT2JqZWN0Q2xhc3MtPnJlZl9zdGF0ZV9zZXQgPSB3ZWJraXRXZWJQYWdlQWNjZXNzaWJp
bGl0eU9iamVjdFJlZlN0YXRlU2V0OwotfQotCi1BdGtPYmplY3QqIHdlYmtpdFdlYlBhZ2VBY2Nl
c3NpYmlsaXR5T2JqZWN0TmV3KFdlYlBhZ2UqIHBhZ2UpCi17Ci0gICAgQXRrT2JqZWN0KiBvYmpl
Y3QgPSBBVEtfT0JKRUNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfUEFHRV9BQ0NFU1NJ
QklMSVRZX09CSkVDVCwgbnVsbHB0cikpOwotICAgIGF0a19vYmplY3RfaW5pdGlhbGl6ZShvYmpl
Y3QsIHBhZ2UpOwotICAgIHJldHVybiBvYmplY3Q7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoQUND
RVNTSUJJTElUWSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L2F0ay9XZWJLaXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvYXRrL1dlYktpdFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0LmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkNTYxMzRmZWQ1My4uMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2F0ay9XZWJLaXRXZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxOSBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKQotCi0jaW5jbHVkZSA8YXRrL2F0
ay5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYlBhZ2U7Ci19Ci0KLUdfQkVHSU5f
REVDTFMKLQotI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVD
VCAgICAgICAgICAgICAgKHdlYmtpdF93ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5X29iamVjdF9nZXRf
dHlwZSgpKQotI2RlZmluZSBXRUJLSVRfV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1Qob2Jq
ZWN0KSAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmplY3QpLCBXRUJL
SVRfVFlQRV9XRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVDVCwgV2ViS2l0V2ViUGFnZUFjY2Vz
c2liaWxpdHlPYmplY3QpKQotI2RlZmluZSBXRUJLSVRfV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9P
QkpFQ1RfQ0xBU1Moa2xhc3MpICAgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyks
IFdFQktJVF9UWVBFX1dFQl9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNULCBXZWJLaXRXZWJQYWdl
QWNjZXNzaWJpbGl0eU9iamVjdENsYXNzKSkKLSNkZWZpbmUgV0VCS0lUX0lTX1dFQl9QQUdFX0FD
Q0VTU0lCSUxJVFlfT0JKRUNUKG9iamVjdCkgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
VFlQRSgob2JqZWN0KSwgV0VCS0lUX1RZUEVfV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1Qp
KQotI2RlZmluZSBXRUJLSVRfSVNfV0VCX1BBR0VfQUNDRVNTSUJJTElUWV9PQkpFQ1RfQ0xBU1Mo
a2xhc3MpICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksIFdFQktJVF9UWVBFX1dF
Ql9QQUdFX0FDQ0VTU0lCSUxJVFlfT0JKRUNUKSkKLSNkZWZpbmUgV0VCS0lUX1dFQl9QQUdFX0FD
Q0VTU0lCSUxJVFlfT0JKRUNUX0dFVF9DTEFTUyhvYmplY3QpIChHX1RZUEVfSU5TVEFOQ0VfR0VU
X0NMQVNTKChvYmplY3QpLCBXRUJLSVRfVFlQRV9XRUJfUEFHRV9BQ0NFU1NJQklMSVRZX09CSkVD
VCwgV2ViS2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RDbGFzcykpCi0KLXR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdCBXZWJLaXRXZWJQYWdlQWNjZXNz
aWJpbGl0eU9iamVjdDsKLXR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJQYWdlQWNjZXNzaWJpbGl0
eU9iamVjdENsYXNzIFdlYktpdFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3M7Ci10eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3RQcml2YXRlIFdlYktp
dFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0UHJpdmF0ZTsKLQotc3RydWN0IF9XZWJLaXRXZWJQ
YWdlQWNjZXNzaWJpbGl0eU9iamVjdCB7Ci0gICAgQXRrUGx1ZyBwYXJlbnQ7Ci0KLSAgICBXZWJL
aXRXZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdFByaXZhdGUqIHByaXY7Ci19OwotCi1zdHJ1Y3Qg
X1dlYktpdFdlYlBhZ2VBY2Nlc3NpYmlsaXR5T2JqZWN0Q2xhc3MgewotICAgIEF0a1BsdWdDbGFz
cyBwYXJlbnRDbGFzczsKLX07Ci0KLUdUeXBlIHdlYmtpdF93ZWJfcGFnZV9hY2Nlc3NpYmlsaXR5
X29iamVjdF9nZXRfdHlwZSgpOwotCi1BdGtPYmplY3QqIHdlYmtpdFdlYlBhZ2VBY2Nlc3NpYmls
aXR5T2JqZWN0TmV3KFdlYktpdDo6V2ViUGFnZSopOwotCi1HX0VORF9ERUNMUwotCi0jZW5kaWYg
Ly8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCmluZGV4IGVhNGUyN2VhMDZlZi4uOWJh
YTcyODg0YTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9n
bGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIldlYktp
dEV4dGVuc2lvbk1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJLaXRVc2VyTWVzc2FnZS5oIgogI2lu
Y2x1ZGUgIldlYktpdFdlYkV4dGVuc2lvbi5oIgotI2luY2x1ZGUgIldlYktpdFdlYlBhZ2VBY2Nl
c3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViUGFnZVByaXZhdGUuaCIKICNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgPFdlYkNvcmUvRWRpdG9y
Lmg+CkBAIC01MSwzNSArNTAsMTEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHZvaWQg
V2ViUGFnZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRl
cnMmKQogewotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZKQorI2lmIFVTRShBVFNQSSkKICAgICAv
LyBDcmVhdGUgdGhlIGFjY2Vzc2libGUgb2JqZWN0ICh0aGUgcGx1ZykgdGhhdCB3aWxsIHNlcnZl
IGFzIHRoZQogICAgIC8vIGVudHJ5IHBvaW50IHRvIHRoZSBXZWIgcHJvY2VzcywgYW5kIHNlbmQg
YSBtZXNzYWdlIHRvIHRoZSBVSQogICAgIC8vIHByb2Nlc3MgdG8gY29ubmVjdCB0aGUgdHdvIHdv
cmxkcyB0aHJvdWdoIHRoZSBhY2Nlc3NpYmlsaXR5CiAgICAgLy8gb2JqZWN0IHRoZXJlIHNwZWNp
ZmljYWxseSBwbGFjZWQgZm9yIHRoYXQgcHVycG9zZSAodGhlIHNvY2tldCkuCi0jaWYgVVNFKEFU
SykKLSAgICBhdXRvIGlzVmFsaWRQbHVnSUQgPSBbXShjb25zdCBjaGFyKiBwbHVnSUQpIC0+IGJv
b2wgewotICAgICAgICBpZiAoIXBsdWdJRCB8fCBwbHVnSURbMF0gIT0gJzonKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIHAgPSBnX3N0cnJzdHIocGx1Z0lELCAi
OiIpOwotICAgICAgICBpZiAoIXApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKCFnX3ZhcmlhbnRfaXNfb2JqZWN0X3BhdGgocCArIDEpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbmFtZShnX3N0cm5kdXAocGx1
Z0lELCBwIC0gcGx1Z0lEKSk7Ci0gICAgICAgIGlmICghZ19kYnVzX2lzX3VuaXF1ZV9uYW1lKG5h
bWUuZ2V0KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH07Ci0KLSAgICBtX2FjY2Vzc2liaWxpdHlPYmplY3QgPSBhZG9wdEdSZWYod2Vi
a2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3ROZXcodGhpcykpOwotICAgIEdVbmlxdWVQdHI8
Z2NoYXI+IHBsdWdJRChhdGtfcGx1Z19nZXRfaWQoQVRLX1BMVUcobV9hY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmdldCgpKSkpOwotICAgIGlmIChpc1ZhbGlkUGx1Z0lEKHBsdWdJRC5nZXQoKSkpCi0gICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmluZEFjY2Vzc2liaWxpdHlUcmVlKFN0
cmluZyhwbHVnSUQuZ2V0KCkpKSk7Ci0jZWxpZiBVU0UoQVRTUEkpCiAjaWYgUExBVEZPUk0oR1RL
KSAmJiBVU0UoR1RLNCkKICAgICAvLyBGSVhNRTogd2UgbmVlZCBhIHdheSB0byBjb25uZWN0IERP
TSBhbmQgYXBwIGExMXkgdHJlZSBpbiBHVEs0LgogI2Vsc2UKQEAgLTkyLDcgKzY3LDYgQEAgdm9p
ZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyYpCiAgICAgfQogI2VuZGlmCiAjZW5kaWYKLSNlbmRpZgogfQogCiB2b2lkIFdlYlBhZ2U6
OnBsYXRmb3JtRGV0YWNoKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93
cGUvV2ViUHJvY2Vzc01haW5XUEUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL3dwZS9X
ZWJQcm9jZXNzTWFpbldQRS5jcHAKaW5kZXggOTM1NjkzZDI5MjEyLi5mZjVlZWViMGYwYWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93cGUvV2ViUHJvY2Vzc01haW5XUEUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy93cGUvV2ViUHJvY2Vzc01haW5XUEUu
Y3BwCkBAIC0zMSwxMSArMzEsNiBAQAogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRl
IDxnbGliLmg+CiAKLSNpZiBVU0UoQVRLKQotI2luY2x1ZGUgPGF0ay1icmlkZ2UuaD4KLSNpbmNs
dWRlIDxhdGsvYXRrLmg+Ci0jZW5kaWYKLQogI2lmIFVTRShHQ1JZUFQpCiAjaW5jbHVkZSA8cGFs
L2NyeXB0by9nY3J5cHQvSW5pdGlhbGl6YXRpb24uaD4KICNlbmRpZgpAQCAtNDcsMzkgKzQyLDYg
QEAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLSNpZiBV
U0UoQVRLKQotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHkoKQotewotICAgIGF1
dG8qIGF0a1V0aWxDbGFzcyA9IEFUS19VVElMX0NMQVNTKGdfdHlwZV9jbGFzc19yZWYoQVRLX1RZ
UEVfVVRJTCkpOwotCi0gICAgYXRrVXRpbENsYXNzLT5hZGRfa2V5X2V2ZW50X2xpc3RlbmVyID0g
W10oQXRrS2V5U25vb3BGdW5jLCBncG9pbnRlcikgLT4gZ3VpbnQgewotICAgICAgICByZXR1cm4g
MDsKLSAgICB9OwotCi0gICAgYXRrVXRpbENsYXNzLT5yZW1vdmVfa2V5X2V2ZW50X2xpc3RlbmVy
ID0gW10oZ3VpbnQpIHsKLSAgICB9OwotCi0gICAgYXRrVXRpbENsYXNzLT5nZXRfcm9vdCA9IFtd
KCkgLT4gQXRrT2JqZWN0KiB7Ci0gICAgICAgIC8vIEFUSyBicmlkZ2UgbmVlZHMgYSByb290IG9i
amVjdC4gV2UgdXNlIGFuIEF0a1BsdWcgYmVjYXVzZSB0aGF0IHdheSB0aGUKLSAgICAgICAgLy8g
d2ViIHByb2Nlc3MgaXMgbm90IHJlZ2lzdGVyZWQgYXMgYW4gYXBwbGljYXRpb24uCi0gICAgICAg
IHN0YXRpYyBBdGtPYmplY3QqIHJvb3QgPSBudWxscHRyOwotICAgICAgICBpZiAoIXJvb3QpCi0g
ICAgICAgICAgICByb290ID0gYXRrX3BsdWdfbmV3KCk7Ci0gICAgICAgIHJldHVybiByb290Owot
ICAgIH07Ci0KLSAgICBhdGtVdGlsQ2xhc3MtPmdldF90b29sa2l0X25hbWUgPSBbXSgpIC0+IGNv
bnN0IGdjaGFyKiB7Ci0gICAgICAgIHJldHVybiAiV1BFV2ViS2l0IjsKLSAgICB9OwotCi0gICAg
YXRrVXRpbENsYXNzLT5nZXRfdG9vbGtpdF92ZXJzaW9uID0gW10oKSAtPiBjb25zdCBnY2hhciog
ewotICAgICAgICByZXR1cm4gIiI7Ci0gICAgfTsKLQotICAgIGF0a19icmlkZ2VfYWRhcHRvcl9p
bml0KG51bGxwdHIsIG51bGxwdHIpOwotfQotI2VuZGlmCi0KIGNsYXNzIFdlYlByb2Nlc3NNYWlu
V1BFIGZpbmFsIDogcHVibGljIEF1eGlsaWFyeVByb2Nlc3NNYWluQmFzZTxXZWJQcm9jZXNzPiB7
CiBwdWJsaWM6CiAgICAgYm9vbCBwbGF0Zm9ybUluaXRpYWxpemUoKSBvdmVycmlkZQpAQCAtOTcs
MTAgKzU5LDYgQEAgcHVibGljOgogICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHJv
YmFibHkgY2FsbGVkIGluIG90aGVyIHByb2Nlc3NlcyBhcyB3ZWxsLgogICAgICAgICBnX3NldF9w
cmduYW1lKCJXUEVXZWJQcm9jZXNzIik7CiAKLSNpZiBVU0UoQVRLKQotICAgICAgICBpbml0aWFs
aXplQWNjZXNzaWJpbGl0eSgpOwotI2VuZGlmCi0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZSBiL1NvdXJjZS9j
bWFrZS9PcHRpb25zR1RLLmNtYWtlCmluZGV4IDRlYTNkNDQ3ZGZhYS4uYTY2MzBlYzY3ZTNiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvT3B0aW9uc0dUSy5jbWFrZQorKysgYi9Tb3VyY2UvY21h
a2UvT3B0aW9uc0dUSy5jbWFrZQpAQCAtMjEsNyArMjEsNiBAQCBmaW5kX3BhY2thZ2UoUE5HIFJF
UVVJUkVEKQogZmluZF9wYWNrYWdlKFNRTGl0ZTMgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoVGhy
ZWFkcyBSRVFVSVJFRCkKIGZpbmRfcGFja2FnZShaTElCIFJFUVVJUkVEKQotZmluZF9wYWNrYWdl
KEFUSyAyLjE2LjAgUkVRVUlSRUQpCiBmaW5kX3BhY2thZ2UoV2ViUCBSRVFVSVJFRCBDT01QT05F
TlRTIGRlbXV4KQogZmluZF9wYWNrYWdlKEFUU1BJIDIuNS4zKQogZmluZF9wYWNrYWdlKEVHTCkK
QEAgLTc2LDcgKzc1LDYgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX1dQRV9SRU5ERVJFUiAi
V2hldGhlciB0byBlbmFibGUgV1BFIHJlbmRlcmluZyIgUFVCTElDIE8KIAogIyBQcml2YXRlIG9w
dGlvbnMgc3BlY2lmaWMgdG8gdGhlIEdUSyBwb3J0LiBDaGFuZ2luZyB0aGVzZSBvcHRpb25zIGlz
CiAjIGNvbXBsZXRlbHkgdW5zdXBwb3J0ZWQuIFRoZXkgYXJlIGludGVuZGVkIGZvciB1c2Ugb25s
eSBieSBXZWJLaXQgZGV2ZWxvcGVycy4KLVdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9BVFNQSSAi
V2hldGhlciB0byB1c2UgdGhlIEFUU1BJIGExMXkgaW1wbGVtZW50YXRpb24gaW5zdGVhZCBvZiBB
VEsuIiBQUklWQVRFIE9OKQogCiBXRUJLSVRfT1BUSU9OX0RFUEVORChFTkFCTEVfM0RfVFJBTlNG
T1JNUyBVU0VfT1BFTkdMX09SX0VTKQogV0VCS0lUX09QVElPTl9ERVBFTkQoRU5BQkxFX0FTWU5D
X1NDUk9MTElORyBVU0VfT1BFTkdMX09SX0VTKQpAQCAtMjczLDE3ICsyNzEsNyBAQCBpZiAoTk9U
IEVYSVNUUyAiJHtUT09MU19ESVJ9L2dsaWIvYXBwbHktYnVpbGQtcmV2aXNpb24tdG8tZmlsZXMu
cHkiKQogICAgIHNldChCVUlMRF9SRVZJU0lPTiAidGFyYmFsbCIpCiBlbmRpZiAoKQogCi1pZiAo
RU5BQkxFX0FDQ0VTU0lCSUxJVFkpCi0gICAgaWYgKFVTRV9BVFNQSSkKLSAgICAgICAgU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0FUSyBGQUxTRSkKLSAgICBlbHNlICgpCi0gICAgICAgIFNF
VF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9BVEsgVFJVRSkKLSAgICBlbmRpZiAoKQotZWxzZSAo
KQotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9BVEsgRkFMU0UpCi0gICAgU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0FUU1BJIEZBTFNFKQotZW5kaWYgKCkKLQorU0VUX0FORF9F
WFBPU0VfVE9fQlVJTEQoVVNFX0FUU1BJICR7RU5BQkxFX0FDQ0VTU0lCSUxJVFl9KQogU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoSEFWRV9HVEtfVU5JWF9QUklOVElORyAke0dUS19VTklYX1BSSU5U
X0ZPVU5EfSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKEhBVkVfT1NfREFSS19NT0RFX1NVUFBP
UlQgMSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvT3B0aW9uc1dQRS5jbWFrZQppbmRleCAwY2U4NzkxODlkZDkuLmQxZmQyZjAxZThh
NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL09wdGlvbnNXUEUuY21ha2UKKysrIGIvU291cmNl
L2NtYWtlL09wdGlvbnNXUEUuY21ha2UKQEAgLTkxLDcgKzkxLDYgQEAgV0VCS0lUX09QVElPTl9E
RUZJTkUoVVNFX1dPRkYyICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBXT0ZGMiBXZWIg
Rm9udHMuIgogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9IT0xFUFVOQ0ggIldo
ZXRoZXIgdG8gZW5hYmxlIEdTdHJlYW1lciBob2xlcHVuY2giIFBSSVZBVEUgT0ZGKQogV0VCS0lU
X09QVElPTl9ERUZJTkUoVVNFX0VYVEVSTkFMX0hPTEVQVU5DSCAiV2hldGhlciB0byBlbmFibGUg
ZXh0ZXJuYWwgaG9sZXB1bmNoIiBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVQRU5EKFVT
RV9BTkdMRV9XRUJHTCBFTkFCTEVfV0VCR0wpCi1XRUJLSVRfT1BUSU9OX0RFRklORShVU0VfQVRT
UEkgIldoZXRoZXIgdG8gdXNlIHRoZSBBVFNQSSBhMTF5IGltcGxlbWVudGF0aW9uIGluc3RlYWQg
b2YgQVRLLiIgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVQRU5EKEVOQUJMRV9XRUJHTDIg
VVNFX0FOR0xFX1dFQkdMKQogCiBpZiAoQ01BS0VfU1lTVEVNX05BTUUgTUFUQ0hFUyAiTGludXgi
KQpAQCAtMjc5LDYgKzI3OCw3IEBAIGlmIChOT1QgRVhJU1RTICIke1RPT0xTX0RJUn0vZ2xpYi9h
cHBseS1idWlsZC1yZXZpc2lvbi10by1maWxlcy5weSIpCiBlbmRpZiAoKQogCiBTRVRfQU5EX0VY
UE9TRV9UT19CVUlMRChIQVZFX0FDQ0VTU0lCSUxJVFkgJHtFTkFCTEVfQUNDRVNTSUJJTElUWX0p
CitTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQVRTUEkgJHtFTkFCTEVfQUNDRVNTSUJJTElU
WX0pCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0FJUk8gVFJVRSkKIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9FR0wgVFJVRSkKIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9H
Q1JZUFQgVFJVRSkKQEAgLTI5NCwxNyArMjk0LDYgQEAgaWYgKFdURl9DUFVfQVJNIE9SIFdURl9D
UFVfTUlQUykKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfQ0FQU1RPTkUgJHtFTkFC
TEVfREVWRUxPUEVSX01PREV9KQogZW5kaWYgKCkKIAotaWYgKEVOQUJMRV9BQ0NFU1NJQklMSVRZ
KQotICAgIGlmIChVU0VfQVRTUEkpCi0gICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVT
RV9BVEsgRkFMU0UpCi0gICAgZWxzZSAoKQotICAgICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlM
RChVU0VfQVRLIFRSVUUpCi0gICAgZW5kaWYgKCkKLWVsc2UgKCkKLSAgICBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChVU0VfQVRLIEZBTFNFKQotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVT
RV9BVFNQSSBGQUxTRSkKLWVuZGlmICgpCi0KIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9U
RVhUVVJFX01BUFBFUiBUUlVFKQogU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX1RFWFRVUkVf
TUFQUEVSX0dMIFRSVUUpCiBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfVEVYVFVSRV9NQVBQ
RVJfRE1BQlVGIFRSVUUpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggMjEyYzg5Njc0MzQzLi43NWFiMTAzNWU2N2YgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNDYgQEAKKzIwMjIt
MDMtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHVEtdW1dQRV0gUmVtb3ZlIHRoZSBBVEsgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODE5OAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAgICogU2NyaXB0cy92YWxncmluZC9zdXBwcmVzc2lv
bnMudHh0OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0LWZpbHRlci1sb2c6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3Bw
OgorICAgICAgICAodGVzdEFjY2Vzc2libGVDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAodGVz
dEFjY2Vzc2libGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKHRlc3RBY2Nlc3NpYmxlU3RhdGUpOgor
ICAgICAgICAodGVzdEFjY2Vzc2libGVTdGF0ZUNoYW5nZWQpOgorICAgICAgICAodGVzdEFjY2Vz
c2libGVMaXN0TWFya2Vycyk6CisgICAgICAgICh0ZXN0VGV4dFN1cnJvZ2F0ZVBhaXIpOgorICAg
ICAgICAodGVzdFRleHRJdGVyYXRvcik6CisgICAgICAgICh0ZXN0VGV4dEV4dGVudHMpOgorICAg
ICAgICAodGVzdFRleHRTZWxlY3Rpb25zKToKKyAgICAgICAgKHRlc3RUZXh0QXR0cmlidXRlcyk6
CisgICAgICAgICh0ZXN0VGV4dFN0YXRlQ2hhbmdlZCk6CisgICAgICAgICh0ZXN0VGV4dFJlcGxh
Y2VkT2JqZWN0cyk6CisgICAgICAgICh0ZXN0VGV4dExpc3RNYXJrZXJzKToKKyAgICAgICAgKHRl
c3RIeXBlcmxpbmtCYXNpYyk6CisgICAgICAgICh0ZXN0SHlwZXJ0ZXh0QmFzaWMpOgorICAgICAg
ICAodGVzdEFjdGlvbkJhc2ljKToKKyAgICAgICAgKHRlc3REb2N1bWVudEJhc2ljKToKKyAgICAg
ICAgKHRlc3RJbWFnZUJhc2ljKToKKyAgICAgICAgKHRlc3RTZWxlY3Rpb25NZW51TGlzdCk6Cisg
ICAgICAgICh0ZXN0VGFibGVCYXNpYyk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9nbGliL1Bs
YXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0
ay5jcHA6IFJlbW92ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpy
ZXNldFRvQ29uc2lzdGVudFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6Y2hpbGRFbGVt
ZW50QnlJZCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmluamVjdEFjY2Vzc2liaWxpdHlQcmVmZXJlbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXI6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlbW92ZU5vdGlmaWNhdGlvbkxpc3RlbmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICgp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
cjo6QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6fkFjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXI6OnNldE5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOiBEZWxl
dGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6cmVt
b3ZlQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIpOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6Y29ubmVjdEFjY2Vzc2liaWxp
dHlDYWxsYmFja3MpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlcjo6ZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmg6IFJlbW92ZWQuCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6c2V0UGxhdGZvcm1FbGVt
ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXI6OnBsYXRmb3JtRWxlbWVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpub3RpZmljYXRpb25GdW5jdGlvbkNhbGxi
YWNrIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp+QWNjZXNzaWJpbGl0eVVJRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWwpOiBEZWxldGVkLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hpbGRy
ZW5Db3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmVsZW1lbnRBdFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6aW5kZXhPZkNoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6YWNj
ZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bGlua2VkVUlFbGVtZW50QXRJbmRleCk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhT3du
c1JlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRmxvd1RvRWxlbWVudEF0SW5kZXgpOiBEZWxldGVkLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhRmxvd1RvUmVmZXJlbmNp
bmdFbGVtZW50QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFyaWFDb250cm9sc0VsZW1lbnRBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUNvbnRyb2xzUmVmZXJlbmNpbmdFbGVt
ZW50QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmFyaWFMYWJlbGxlZEJ5RWxlbWVudEF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVu
dEF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphcmlhRGVzY3JpYmVkQnlFbGVtZW50QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEZXNjcmliZWRCeVJlZmVyZW5jaW5nRWxlbWVu
dEF0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphcmlhRGV0YWlsc0VsZW1lbnRBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURldGFpbHNSZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUVy
cm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVudEF0SW5k
ZXgpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNj
bG9zZWRSb3dBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cm93QXRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNlbGVjdGVkQ2hpbGRBdEluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRDaGlsZHJlbkNvdW50IGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Vs
ZWN0ZWRSb3dBdEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6dGl0bGVVSUVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpwYXJlbnRFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZGlzY2xvc2VkQnlSb3cpOiBEZWxldGVkLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZMaW5rZWRVSUVsZW1l
bnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0
cmlidXRlc09mRG9jdW1lbnRMaW5rcyk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWxsQXR0cmlidXRlcyk6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9uT2ZB
dHRyaWJ1dGVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnN0cmluZ0F0dHJpYnV0ZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjdXJyZW50U3RhdGVWYWx1ZSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxl
bWVudEFycmF5QXR0cmlidXRlVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycyBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudEF0
dHJpYnV0ZVZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTZXR0YWJsZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU3VwcG9ydGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1l
dGVyaXplZEF0dHJpYnV0ZU5hbWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm9sZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnN1YnJvbGUpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb2xlRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb21wdXRlZFJvbGVTdHJpbmcpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0aXRsZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6b3JpZW50YXRpb24gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxh
bmd1YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aGVscFRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6eSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Ondp
ZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVp
Z2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2xp
Y2tQb2ludFgpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpjbGlja1BvaW50WSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmludFZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6bWluVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjptYXhWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnZhbHVlRGVzY3JpcHRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRpb25Qb2ludExpbmVOdW1iZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0
aW9uU3VwcG9ydGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aXNJbmNyZW1lbnRBY3Rpb25TdXBwb3J0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0RlY3JlbWVudEFjdGlvblN1cHBvcnRlZCk6IERl
bGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWly
ZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc0ZvY3VzZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50Ojppc1NlbGVjdGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3RlZE9wdGlvbkFjdGl2ZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRXhwYW5kZWQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0No
ZWNrZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojppc0luZGV0ZXJtaW5hdGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpoaWVyYXJjaGljYWxMZXZlbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNwZWFrQXMpOiBEZWxldGVkLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphcmlhSXNHcmFiYmVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURy
b3BFZmZlY3RzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bGluZUZvckluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cmFuZ2VGb3JMaW5lKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cmFuZ2VGb3JQb3NpdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmJvdW5kc0ZvclJhbmdlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nRm9yUmFuZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVk
U3RyaW5nRm9yUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nUmFuZ2VJc01pc3NwZWxsZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRDb3VudEZvclNlYXJj
aFByZWRpY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnVpRWxlbWVudEZvclNlYXJjaFByZWRpY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdFRleHRXaXRoQ3JpdGVyaWEpOiBEZWxldGVk
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDb2x1
bW5IZWFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mUm93SGVhZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZXNPZkNvbHVtbnMpOiBEZWxldGVkLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZSb3dzKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlz
aWJsZUNlbGxzKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6YXR0cmlidXRlc09mSGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cm93Q291bnQpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5Db3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluZGV4SW5UYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0luZGV4UmFuZ2UpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1bW5JbmRleFJhbmdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2VsbEZvckNvbHVt
bkFuZFJvdyk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Omhvcml6b250YWxTY3JvbGxiYXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp2ZXJ0aWNhbFNjcm9sbGJhciBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0
ZWRUZXh0UmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjppbmNyZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpkZWNyZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzaG93TWVudSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnByZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRDaGlsZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkQ2hpbGRBdEluZGV4IGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3Zl
U2VsZWN0aW9uQXRJbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmNsZWFyU2VsZWN0ZWRDaGlsZHJlbiBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlWYWx1ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRv
Y3VtZW50RW5jb2RpbmcpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpkb2N1bWVudFVSSSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnVybCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZpY2F0aW9uTGlzdGVuZXIpOiBE
ZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0ZvY3VzYWJs
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmlzU2VsZWN0YWJsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzTXVsdGlTZWxlY3RhYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNWaXNpYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4gY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0NvbGxh
cHNlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmlzSWdub3JlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzTXVsdGlMaW5lIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGFzUG9wdXAgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMpOiBE
ZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0
aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRk
U2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cmVtb3ZlU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VGb3JF
bGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
dGV4dE1hcmtlclJhbmdlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cHJldmlvdXNUZXh0TWFya2VyKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFRleHRNYXJrZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2UpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyZWN0
c0ZvclRleHRNYXJrZXJSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMpOiBEZWxldGVkLgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjplbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtlckZvckJvdW5kcyk6IERlbGV0
ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtl
ckZvckJvdW5kcyk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnRleHRNYXJrZXJGb3JQb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcik6IERlbGV0
ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJp
bmdGb3JUZXh0TWFya2VyUmFuZ2UpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlV2l0aE9wdGlv
bnMpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlQ29udGFpbnNBdHRyaWJ1dGUpOiBEZWxldGVk
LgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEZvclRleHRNYXJr
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1Rl
eHRNYXJrZXJWYWxpZCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnRleHRNYXJrZXJGb3JJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVuZFRleHRNYXJrZXIpOiBEZWxldGVkLgorICAg
ICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZXRTZWxlY3RlZFRleHRNYXJrZXJS
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvTWFrZVZpc2libGUpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyk6
IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1cHBvcnRl
ZEFjdGlvbnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwYXRoRGVzY3JpcHRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXRoUG9zdHNjcmlwdHNEZXNjcmlwdGlvbiBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1hdGhQcmVz
Y3JpcHRzRGVzY3JpcHRpb24gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjbGFzc0xpc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV1RS
OjpzdHJpbmdBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNoYXJhY3RlckF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6d29yZEF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKFdU
Ujo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VudGVuY2VBdE9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlcGxhY2VUZXh0SW5S
YW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omlu
c2VydFRleHQpOiBEZWxldGVkLgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpwb3B1cFZhbHVlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVy
L1BsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1X
UEUuY21ha2U6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHA6Cisg
ICAgICAgIChXVFI6OlRlc3RPcHRpb25zOjpkZWZhdWx0cyk6CisKIDIwMjItMDMtMjIgIE15bGVz
IEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBTcXVlbGNoIHdh
cm5pbmcgbWVzc2FnZSBmcm9tIG91dHB1dCBvZiBidWlsZC1qc2MKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5oCmluZGV4IDFmNDYwY2QzNzcxYi4uYzBl
YjY2MjMyZmQ5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmgKQEAgLTM2LDExICszNiw2IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlm
CiAKLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgUExBVEZPUk0oR1RLKQotI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmgiCi0jaW5jbHVkZSA8YXRrL2F0
ay5oPgotI2VuZGlmCi0KIGNsYXNzIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTc4LDEwICs3Myw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHdpbk5vdGlmaWNhdGlvblJlY2VpdmVkKFBsYXRmb3JtVUlFbGVtZW50LCBjb25z
dCBzdGQ6OnN0cmluZyYgZXZlbnROYW1lKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKEFDQ0VTU0lC
SUxJVFkpICYmIFBMQVRGT1JNKEdUSykKLSAgICBBdGtPYmplY3QqIGNoaWxkRWxlbWVudEJ5SWQo
QXRrT2JqZWN0KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGlkKTsKLSNlbmRpZgotCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBKU1JldGFpblB0cjxKU0NsYXNzUmVmPiBjcmVhdGVKU0NsYXNzKCk7CiAKQEAg
LTk5LDkgKzkwLDUgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ+IG1fZ2xvYmFsTm90aWZp
Y2F0aW9uSGFuZGxlcjsKICNlbmRpZgogCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFBM
QVRGT1JNKEdUSykKLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI+
IG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcjsKLSNlbmRpZgotICAgIAogICAgIHZvaWQgcGxh
dGZvcm1SZXNldFRvQ29uc2lzdGVudFN0YXRlKCk7CiB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCmluZGV4IGY2ZTRmZjZlZjNiMC4uYjJlMzM2MWI4
N2RmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
CkBAIC00MywxMCArNDMsNiBAQCBPQkpDX0NMQVNTIE5TU3RyaW5nOwogI2luY2x1ZGUgPFdlYkNv
cmUvQ09NUHRyLmg+CiAjaW5jbHVkZSA8b2xlYWNjLmg+CiB0eXBlZGVmIENPTVB0cjxJQWNjZXNz
aWJsZT4gUGxhdGZvcm1VSUVsZW1lbnQ7Ci0jZWxpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYg
UExBVEZPUk0oR1RLKQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
QXRrLmgiCi0jaW5jbHVkZSA8YXRrL2F0ay5oPgotdHlwZWRlZiBBdGtPYmplY3QqIFBsYXRmb3Jt
VUlFbGVtZW50OwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1VSUVsZW1lbnQ7CiAjZW5k
aWYKQEAgLTI1MywxNCArMjQ5LDYgQEAgcHVibGljOgogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBhdHRyaWJ1dGVkU3RyaW5nRm9yRWxlbWVudCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9S
TShHVEspCi0gICAgLy8gVGV4dC1zcGVjaWZpYwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBjaGFyYWN0ZXJBdE9mZnNldChpbnQgb2Zmc2V0KTsKLSAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gd29yZEF0T2Zmc2V0KGludCBvZmZzZXQpOwotICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBsaW5lQXRPZmZzZXQoaW50IG9mZnNldCk7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IHNlbnRlbmNlQXRPZmZzZXQoaW50IG9mZnNldCk7Ci0jZW5kaWYKLQogICAgIC8vIFRhYmxl
LXNwZWNpZmljCiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCBjZWxsRm9yQ29sdW1uQW5kUm93
KHVuc2lnbmVkIGNvbHVtbiwgdW5zaWduZWQgcm93KTsKIApAQCAtMzU3LDggKzM0NSw0IEBAIHBy
aXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPiBtX2VsZW1lbnQ7CiAgICAgUmV0YWluUHRyPGlkPiBt
X25vdGlmaWNhdGlvbkhhbmRsZXI7CiAjZW5kaWYKLQotI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZ
KSAmJiBQTEFURk9STShHVEspCi0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyPiBtX25vdGlmaWNhdGlvbkhhbmRsZXI7Ci0jZW5kaWYKIH07CmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3ZhbGdyaW5kL3N1cHByZXNzaW9ucy50eHQgYi9Ub29scy9TY3JpcHRzL3Zh
bGdyaW5kL3N1cHByZXNzaW9ucy50eHQKaW5kZXggMDhhNDljOTViMTVlLi43YmZmZDI5YWU0MmEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvdmFsZ3JpbmQvc3VwcHJlc3Npb25zLnR4dAorKysg
Yi9Ub29scy9TY3JpcHRzL3ZhbGdyaW5kL3N1cHByZXNzaW9ucy50eHQKQEAgLTUyOSw1OCArNTI5
LDYgQEAKICMgMy4gU3VwcHJlc3Npb25zIGZvciByZWFsIHdlYmtpdCBidWdzIHRoYXQgYXJlIG5v
dCB5ZXQgZml4ZWQuCiAjIFRoZXNlIHNob3VsZCBhbGwgYmUgaW4gd2Via2l0J3MgYnVnIHRyYWNr
aW5nIHN5c3RlbSAoYnV0IGEgZmV3IGFyZW4ndCB5ZXQpLgogCi17Ci0gICAjIEF0a1Byb3BlcnR5
IGlzIGNhY2hlZCBidXQgbm90IHJlbGVhc2VkIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExODU2NyNjMikuCi0gICBjYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5
Ci0gICBNZW1jaGVjazpMZWFrCi0gICBmdW46bWFsbG9jCi0gICBmdW46X1pOM1dURjEwZmFzdE1h
bGxvY0VtCi0gICBmdW46X1pOM1dURjEzQ1N0cmluZ0J1ZmZlcjE5Y3JlYXRlVW5pbml0aWFsaXpl
ZEVtCi0gICBmdW46X1pOM1dURjdDU3RyaW5nNGluaXRFUEtjbQotICAgZnVuOl9aTjNXVEY3Q1N0
cmluZ0MxRVBLY20KLSAgIGZ1bjpfWk5LM1dURjZTdHJpbmc0dXRmOEVOUzBfMTRDb252ZXJzaW9u
TW9kZUUKLSAgIGZ1bjpjYWNoZUFuZFJldHVybkF0a1Byb3BlcnR5Ci19Ci0KLXsKLSAgICMgQXRr
UmVsYXRpb25TZXQgaXMgbmV2ZXIgZnJlZWQgYmVjYXVzZSB0aGUgdGFyZ2V0IEF0a09iamVjdCBp
cwotICAgIyBjYWNoZWQuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTE4NTY3LgotICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQotICAgTWVtY2hl
Y2s6TGVhawotICAgZnVuOm1hbGxvYwotICAgLi4uCi0gICBmdW46Z19vYmplY3Rfd2Vha19yZWYK
LSAgIGZ1bjphdGtfcmVsYXRpb25fc2V0X3Byb3BlcnR5Ci0gICBmdW46Z19vYmplY3RfbmV3dgot
ICAgZnVuOmdfb2JqZWN0X25ld192YWxpc3QKLSAgIGZ1bjpnX29iamVjdF9uZXcKLSAgIGZ1bjph
dGtfcmVsYXRpb25fbmV3Ci0gICBmdW46YXRrX3JlbGF0aW9uX3NldF9hZGRfcmVsYXRpb25fYnlf
dHlwZQotICAgZnVuOl9aTDMxc2V0QXRrUmVsYXRpb25TZXRGcm9tQ29yZU9iamVjdFBON1dlYkNv
cmUxOUFjY2Vzc2liaWxpdHlPYmplY3RFUDE1X0F0a1JlbGF0aW9uU2V0Ci0gICBmdW46X1pMMzB3
ZWJraXRBY2Nlc3NpYmxlUmVmUmVsYXRpb25TZXRQMTBfQXRrT2JqZWN0Ci0gICBmdW46X1pOMjJB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50MTR0aXRsZVVJRWxlbWVudEV2Ci19Ci0KLXsKLSAgICMgTGVh
ayBpbiB3ZWJraXRBY2Nlc3NpYmxlTmV3IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTgzODIKLSAgIHdlYmtpdEFjY2Vzc2libGVOZXcKLSAgIE1lbWNoZWNrOkxlYWsK
LSAgIGZ1bjoqYWxsb2MKLSAgIC4uLgotICAgZnVuOndlYmtpdEFjY2Vzc2libGVOZXcKLX0KLQot
ewotICAgIyBMZWFrIEFUSyB0ZXh0IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTgzODUKLSAgIHdlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dAotICAgTWVtY2hlY2s6
TGVhawotICAgZnVuOm1hbGxvYwotICAgZnVuOmdfbWFsbG9jCi0gICBmdW46Z19zdHJkdXAKLSAg
IGZ1bjpfWkwyN3dlYmtpdEFjY2Vzc2libGVUZXh0R2V0VGV4dFA4X0F0a1RleHRpaQotICAgZnVu
Ol9aTDIzd2Via2l0QWNjZXNzaWJsZUdldE5hbWVQMTBfQXRrT2JqZWN0Ci19Ci0KIHsKICAgICMg
TGVhayBQbHVnaW5PYmplY3QgaW4gZXhjZXB0aW9uYWwgY2lyY3Vtc3RhbmNlcyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4NTI4CiAgICBXZWJDb3JlOjpQbHVnaW5W
aWV3OjpzdGFydCgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdC1maWx0ZXItbG9n
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXQtZmlsdGVyLWxvZwppbmRleCA2YWQyY2JlYWE5MzEuLmYx
NWFhZDEwMWU2ZSAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXQtZmlsdGVyLWxvZwor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdC1maWx0ZXItbG9nCkBAIC01NSw3ICs1NSw3IEBAIGV4
Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yIGFzIGU6CiAKIHNjbSA9IFNDTURldGVjdG9yKEZpbGVT
eXN0ZW0oKSwgRXhlY3V0aXZlKCkpLmRlZmF1bHRfc2NtKCkKIAotZmlsdGVyX2RpcnMgPSBbICdn
b2JqZWN0JywgJ2dsaWInLCAnc291cCcsICdjYWlybycsICdnc3RyZWFtZXInLCAnYXRrJywgJ2Fk
d2FpdGEnLAorZmlsdGVyX2RpcnMgPSBbICdnb2JqZWN0JywgJ2dsaWInLCAnc291cCcsICdjYWly
bycsICdnc3RyZWFtZXInLCAnYXRzcGknLCAnYWR3YWl0YScsCiAgICAgICAgICAgICAgICAgJ3Vu
aXgnLCAnbGludXgnLCAnQ29vcmRpbmF0ZWRHcmFwaGljcycsICd0ZXhtYXAnLCAnbmljb3NpYScs
CiAgICAgICAgICAgICAgICAgJ1dlYkRyaXZlcicsICdoYXJmYnV6eicsICdmcmVldHlwZScsICdl
Z2wnLCAnYnVpbGRzdHJlYW0nIF0KIGlmIHBvcnQubmFtZSgpID09ICdndGsnOgpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktpdEFjY2Vzc2li
aWxpdHkuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsvVGVzdFdlYktp
dEFjY2Vzc2liaWxpdHkuY3BwCmluZGV4IDRiMmI1YzFhZjhhNS4uNTU0ZTlhYmRkOGJhIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0QWNj
ZXNzaWJpbGl0eS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHdGsv
VGVzdFdlYktpdEFjY2Vzc2liaWxpdHkuY3BwCkBAIC0zMTEsOSArMzExLDYgQEAgc3RhdGljIHZv
aWQgdGVzdEFjY2Vzc2libGVJZ25vcmVkT2JqZWN0cyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKIAogc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVDaGlsZHJlbkNoYW5n
ZWQoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7Ci0jaWYgIVVTRShB
VFNQSSkKLSAgICBnX3Rlc3Rfc2tpcCgiVGhpcyB0ZXN0IGRvZXNuJ3Qgd29yayB3aXRoIEFUSyIp
OwotI2Vsc2UKICAgICB0ZXN0LT5zaG93SW5XaW5kb3coKTsKICAgICB0ZXN0LT5sb2FkSHRtbCgK
ICAgICAgICAgIjxodG1sPiIKQEAgLTQxMCw3ICs0MDcsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0QWNj
ZXNzaWJsZUNoaWxkcmVuQ2hhbmdlZChBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcgogICAgIHNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9zdGF0ZV9zZXQo
YmF6LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMo
c2V0LmdldCgpLCBBVFNQSV9TVEFURV9ERUZVTkNUKSk7CiAgICAgZ19hc3NlcnRfY21waW50KGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRy
KSwgPT0sIDApOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlQXR0cmli
dXRlcyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTQyNiwxMSAr
NDIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVBdHRyaWJ1dGVzKEFjY2Vzc2liaWxp
dHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgICAgICBudWxscHRyKTsKICAgICB0ZXN0
LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKIAotI2lmIFVTRShBVFNQSSkKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogdG9vbGtpdE5hbWUgPSAiV2ViS2l0R1RLIjsKLSNlbHNlCi0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIHRvb2xraXROYW1lID0gIldlYktpdEd0ayI7Ci0jZW5kaWYKIAogICAgIGF1
dG8gdGVzdEFwcCA9IHRlc3QtPmZpbmRUZXN0QXBwbGljYXRpb24oKTsKICAgICBnX2Fzc2VydF90
cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUodGVzdEFwcC5nZXQoKSkpOwpAQCAtNDM5LDEyICs0MzEs
NyBAQCBzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZUF0dHJpYnV0ZXMoQWNjZXNzaWJpbGl0eVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NF
U1NJQkxFKGRvY3VtZW50V2ViLmdldCgpKSk7CiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2Fj
Y2Vzc2libGVfZ2V0X2NoaWxkX2NvdW50KGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSwgPT0s
IDIpOwogICAgIGF1dG8gYXR0cmlidXRlcyA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dl
dF9hdHRyaWJ1dGVzKGRvY3VtZW50V2ViLmdldCgpLCBudWxscHRyKSk7Ci0jaWYgVVNFKEFUU1BJ
KQogICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3NpemUoYXR0cmlidXRlcy5nZXQo
KSksID09LCAxKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEFUSyBpbmNsdWRlcyBkcmFnZ2VkIHN0
YXRlLCBidXQgZHJhZ2dpbmcgaXMgbm90IHN1cHBvcnRlZC4KLSAgICBnX2Fzc2VydF9jbXB1aW50
KGdfaGFzaF90YWJsZV9zaXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA9PSwgMik7Ci0jZW5kaWYKICAg
ICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9s
b29rdXAoYXR0cmlidXRlcy5nZXQoKSwgInRvb2xraXQiKSksID09LCB0b29sa2l0TmFtZSk7CiAK
ICAgICBhdXRvIGgyID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2lu
ZGV4KGRvY3VtZW50V2ViLmdldCgpLCAwLCBudWxscHRyKSk7CkBAIC00NjYsMTEgKzQ1Myw3IEBA
IHN0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlQXR0cmlidXRlcyhBY2Nlc3NpYmlsaXR5VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXB1aW50KGdfaGFzaF90YWJsZV9z
aXplKGF0dHJpYnV0ZXMuZ2V0KCkpLCA9PSwgNCk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCks
ICJ0b29sa2l0IikpLCA9PSwgdG9vbGtpdE5hbWUpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgp
LCAiY29tcHV0ZWQtcm9sZSIpKSwgPT0sICJsaW5rIik7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdf
YXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1
cChhdHRyaWJ1dGVzLmdldCgpLCAiaWQiKSksID09LCAid2Via2l0Z3RrIik7Ci0jZWxzZQotICAg
IGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xv
b2t1cChhdHRyaWJ1dGVzLmdldCgpLCAiaHRtbC1pZCIpKSwgPT0sICJ3ZWJraXRndGsiKTsKLSNl
bmRpZgogICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oZ19oYXNo
X3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAidGFnIikpLCA9PSwgImEiKTsKIH0KIApA
QCAtNTA4LDEzICs0OTEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZVN0YXRlKEFjY2Vz
c2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGF1dG8gaDEgPSBhZG9wdEdS
ZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIuZ2V0KCks
IDAsIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoaDEu
Z2V0KCkpKTsKICAgICBHUmVmUHRyPEF0c3BpU3RhdGVTZXQ+IHN0YXRlU2V0ID0gYWRvcHRHUmVm
KGF0c3BpX2FjY2Vzc2libGVfZ2V0X3N0YXRlX3NldChoMS5nZXQoKSkpOwotI2lmIFVTRShBVFNQ
SSkKICAgICBnX2Fzc2VydF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUo
c3RhdGVTZXQuZ2V0KCkpLCA9PSwgNCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBBVEsgaW5jbHVk
ZXMgb3JpZW50YXRpb24gc3RhdGUgaW4gZXZlcnkgZWxlbWVudC4KLSAgICBnX2Fzc2VydF9jbXB1
aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0KCkpLCA9PSwg
NSk7Ci0gICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQu
Z2V0KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKLSNlbmRpZgogICAgIGdfYXNzZXJ0X3Ry
dWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9F
TkFCTEVEKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3Rh
dGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTlNJVElWRSkpOwogICAgIGdfYXNzZXJ0X3RydWUo
YXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJ
QkxFKSk7CkBAIC01MjgsMTMgKzUwNSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlU3Rh
dGUoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgYXV0byBidXR0
b24gPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRfaW5kZXgoc2VjdGlv
bi5nZXQoKSwgbmV4dENoaWxkKyssIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF90cnVlKEFUU1BJ
X0lTX0FDQ0VTU0lCTEUoYnV0dG9uLmdldCgpKSk7CiAgICAgc3RhdGVTZXQgPSBhZG9wdEdSZWYo
YXRzcGlfYWNjZXNzaWJsZV9nZXRfc3RhdGVfc2V0KGJ1dHRvbi5nZXQoKSkpOwotI2lmIFVTRShB
VFNQSSkKICAgICBnX2Fzc2VydF9jbXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNp
emUoc3RhdGVTZXQuZ2V0KCkpLCA9PSwgNSk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBBVEsgaW5j
bHVkZXMgb3JpZW50YXRpb24gc3RhdGUgaW4gZXZlcnkgZWxlbWVudC4KLSAgICBnX2Fzc2VydF9j
bXB1aW50KEFjY2Vzc2liaWxpdHlUZXN0OjpzdGF0ZVNldFNpemUoc3RhdGVTZXQuZ2V0KCkpLCA9
PSwgNik7Ci0gICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVT
ZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKLSNlbmRpZgogICAgIGdfYXNzZXJ0
X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFU
RV9FTkFCTEVEKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMo
c3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTlNJVElWRSkpOwogICAgIGdfYXNzZXJ0X3Ry
dWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9W
SVNJQkxFKSk7CkBAIC01NDQsMjYgKzUxNSwxNCBAQCBzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJs
ZVN0YXRlKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGF1dG8g
YnV0dG9uRGlzYWJsZWQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfYXRf
aW5kZXgoc2VjdGlvbi5nZXQoKSwgbmV4dENoaWxkKyssIG51bGxwdHIpKTsKICAgICBnX2Fzc2Vy
dF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUoYnV0dG9uRGlzYWJsZWQuZ2V0KCkpKTsKICAgICBz
dGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9zdGF0ZV9zZXQoYnV0dG9u
RGlzYWJsZWQuZ2V0KCkpKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21wdWludChB
Y2Nlc3NpYmlsaXR5VGVzdDo6c3RhdGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDIpOwot
I2Vsc2UKLSAgICAvLyBGSVhNRTogQVRLIGluY2x1ZGVzIG9yaWVudGF0aW9uIHN0YXRlIGluIGV2
ZXJ5IGVsZW1lbnQuCi0gICAgZ19hc3NlcnRfY21wdWludChBY2Nlc3NpYmlsaXR5VGVzdDo6c3Rh
dGVTZXRTaXplKHN0YXRlU2V0LmdldCgpKSwgPT0sIDMpOwotICAgIGdfYXNzZXJ0X3RydWUoYXRz
cGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9IT1JJWk9O
VEFMKSk7Ci0jZW5kaWYKICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlu
cyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfVklTSUJMRSkpOwogICAgIGdfYXNzZXJ0X3Ry
dWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9T
SE9XSU5HKSk7CiAKICAgICBhdXRvIHRvZ2dsZUJ1dHRvbiA9IGFkb3B0R1JlZihhdHNwaV9hY2Nl
c3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0Q2hpbGQrKywgbnVs
bHB0cikpOwogICAgIGdfYXNzZXJ0X3RydWUoQVRTUElfSVNfQUNDRVNTSUJMRSh0b2dnbGVCdXR0
b24uZ2V0KCkpKTsKICAgICBzdGF0ZVNldCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dl
dF9zdGF0ZV9zZXQodG9nZ2xlQnV0dG9uLmdldCgpKSk7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdf
YXNzZXJ0X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRlU2V0U2l6ZShzdGF0ZVNldC5n
ZXQoKSksID09LCA2KTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEFUSyBpbmNsdWRlcyBvcmllbnRh
dGlvbiBzdGF0ZSBpbiBldmVyeSBlbGVtZW50LgotICAgIGdfYXNzZXJ0X2NtcHVpbnQoQWNjZXNz
aWJpbGl0eVRlc3Q6OnN0YXRlU2V0U2l6ZShzdGF0ZVNldC5nZXQoKSksID09LCA3KTsKLSAgICBn
X2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRT
UElfU1RBVEVfSE9SSVpPTlRBTCkpOwotI2VuZGlmCiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VOQUJMRUQpKTsK
ICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQo
KSwgQVRTUElfU1RBVEVfU0VOU0lUSVZFKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0
ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1ZJU0lCTEUpKTsKQEAg
LTU3NCwxMyArNTMzLDcgQEAgc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVTdGF0ZShBY2Nlc3Np
YmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBhdXRvIHJhZGlvID0gYWRvcHRH
UmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KHNlY3Rpb24uZ2V0KCksIG5l
eHRDaGlsZCsrLCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJ
QkxFKHJhZGlvLmdldCgpKSk7CiAgICAgc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNz
aWJsZV9nZXRfc3RhdGVfc2V0KHJhZGlvLmdldCgpKSk7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdf
YXNzZXJ0X2NtcHVpbnQoQWNjZXNzaWJpbGl0eVRlc3Q6OnN0YXRlU2V0U2l6ZShzdGF0ZVNldC5n
ZXQoKSksID09LCA2KTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEFUSyBpbmNsdWRlcyBvcmllbnRh
dGlvbiBzdGF0ZSBpbiBldmVyeSBlbGVtZW50LgotICAgIGdfYXNzZXJ0X2NtcHVpbnQoQWNjZXNz
aWJpbGl0eVRlc3Q6OnN0YXRlU2V0U2l6ZShzdGF0ZVNldC5nZXQoKSksID09LCA3KTsKLSAgICBn
X2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRT
UElfU1RBVEVfVkVSVElDQUwpKTsKLSNlbmRpZgogICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3Rh
dGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9FTkFCTEVEKSk7CiAg
ICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCks
IEFUU1BJX1NUQVRFX1NFTlNJVElWRSkpOwogICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVf
c2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9WSVNJQkxFKSk7CkBAIC02
MjgsMTIgKzU4MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxlU3RhdGUoQWNjZXNzaWJp
bGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9z
dGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0ZPQ1VTQUJMRSkp
OwogICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0Lmdl
dCgpLCBBVFNQSV9TVEFURV9FRElUQUJMRSkpOwogICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3Rh
dGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9TSU5HTEVfTElORSkp
OwotI2lmIFVTRShBVFNQSSkKICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250
YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0VMRUNUQUJMRV9URVhUKSk7Ci0jZWxz
ZQotICAgIC8vIEZJWE1FOiBBVEsgZG9lc24ndCBpbXBsZW1lbnQgc2VsZWN0YWJsZSB0ZXh0LCBi
dXQgaW5jbHVkZXMgb3ByaWVudGF0aW9uLgotICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVf
c2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9IT1JJWk9OVEFMKSk7Ci0j
ZW5kaWYKICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNl
dC5nZXQoKSwgQVRTUElfU1RBVEVfUkVRVUlSRUQpKTsKIAogICAgIGF1dG8gZW50cnlEaXNhYmxl
ZCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9u
LmdldCgpLCBuZXh0Q2hpbGQrKywgbnVsbHB0cikpOwpAQCAtNjQ0LDEyICs1OTIsNyBAQCBzdGF0
aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZVN0YXRlKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0
YXRlU2V0LmdldCgpLCBBVFNQSV9TVEFURV9TSE9XSU5HKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShh
dHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VESVRB
QkxFKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVT
ZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NJTkdMRV9MSU5FKSk7Ci0jaWYgVVNFKEFUU1BJKQogICAg
IGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBB
VFNQSV9TVEFURV9TRUxFQ1RBQkxFX1RFWFQpKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEFUSyBk
b2Vzbid0IGltcGxlbWVudCBzZWxlY3RhYmxlIHRleHQsIGJ1dCBpbmNsdWRlcyBvcHJpZW50YXRp
b24uCi0gICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQu
Z2V0KCksIEFUU1BJX1NUQVRFX0hPUklaT05UQUwpKTsKLSNlbmRpZgogCiAgICAgYXV0byBlbnRy
eVJlYWRPbmx5ID0gYWRvcHRHUmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4
KHNlY3Rpb24uZ2V0KCksIG5leHRDaGlsZCsrLCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfdHJ1
ZShBVFNQSV9JU19BQ0NFU1NJQkxFKGVudHJ5UmVhZE9ubHkuZ2V0KCkpKTsKQEAgLTY2MSwxMiAr
NjA0LDcgQEAgc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVTdGF0ZShBY2Nlc3NpYmlsaXR5VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3Nl
dF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0hPV0lORykpOwogICAgIGdf
YXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgpLCBBVFNQ
SV9TVEFURV9GT0NVU0FCTEUpKTsKICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9j
b250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfU0lOR0xFX0xJTkUpKTsKLSNpZiBV
U0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3Rh
dGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NFTEVDVEFCTEVfVEVYVCkpOwotI2Vsc2UKLSAgICAv
LyBGSVhNRTogQVRLIGRvZXNuJ3QgaW1wbGVtZW50IHNlbGVjdGFibGUgdGV4dCwgYnV0IGluY2x1
ZGVzIG9wcmllbnRhdGlvbi4KLSAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250
YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElfU1RBVEVfSE9SSVpPTlRBTCkpOwotI2VuZGlmCiAg
ICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCks
IEFUU1BJX1NUQVRFX1JFQURfT05MWSkpOwogCiAgICAgYXV0byB0ZXh0QXJlYSA9IGFkb3B0R1Jl
ZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChzZWN0aW9uLmdldCgpLCBuZXh0
Q2hpbGQrKywgbnVsbHB0cikpOwpAQCAtNjgxLDEyICs2MTksNyBAQCBzdGF0aWMgdm9pZCB0ZXN0
QWNjZXNzaWJsZVN0YXRlKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQog
ICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfc3RhdGVfc2V0X2NvbnRhaW5zKHN0YXRlU2V0LmdldCgp
LCBBVFNQSV9TVEFURV9GT0NVU0VEKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9z
ZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX0VESVRBQkxFKSk7CiAgICAg
Z19hc3NlcnRfdHJ1ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFU
U1BJX1NUQVRFX01VTFRJX0xJTkUpKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfdHJ1
ZShhdHNwaV9zdGF0ZV9zZXRfY29udGFpbnMoc3RhdGVTZXQuZ2V0KCksIEFUU1BJX1NUQVRFX1NF
TEVDVEFCTEVfVEVYVCkpOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogQVRLIGRvZXNuJ3QgaW1wbGVt
ZW50IHNlbGVjdGFibGUgdGV4dCwgYnV0IGluY2x1ZGVzIG9wcmllbnRhdGlvbi4KLSAgICBnX2Fz
c2VydF90cnVlKGF0c3BpX3N0YXRlX3NldF9jb250YWlucyhzdGF0ZVNldC5nZXQoKSwgQVRTUElf
U1RBVEVfSE9SSVpPTlRBTCkpOwotI2VuZGlmCiAKICAgICBhdXRvIHVsID0gYWRvcHRHUmVmKGF0
c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgpLCAyLCBu
dWxscHRyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHRleHRBcmVh
LmdldCgpKSk7CkBAIC03NTMsMTYgKzY4Niw2IEBAIHN0YXRpYyB2b2lkIHRlc3RBY2Nlc3NpYmxl
U3RhdGVDaGFuZ2VkKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAg
IHRlc3QtPnN0YXJ0RXZlbnRNb25pdG9yKGVudHJ5LmdldCgpLCB7ICJvYmplY3Q6c3RhdGUtY2hh
bmdlZCIgfSk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJs
ZXQgZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbnRyeScpOyBlLmFyaWFSZXF1aXJlZCA9
IHRydWU7IGUuZm9jdXMoKTsiLCBudWxscHRyKTsKICAgICBldmVudHMgPSB0ZXN0LT5zdG9wRXZl
bnRNb25pdG9yKDIpOwotI2lmICFVU0UoQVRTUEkpCi0gICAgLy8gRklYTUU6IFdpdGggQVRLIGZv
Y3VzZWQgZXZlbnQgaXMgc29tZXRpbWVzIGVtaXR0ZWQgdHdpY2UgZm9yIHNvbWUgcmVhc29uLgot
ICAgIGlmIChldmVudHMuc2l6ZSgpID09IDMpIHsKLSAgICAgICAgZXZlbnRzLnJlbW92ZUZpcnN0
TWF0Y2hpbmcoW10oYXV0byYgaXRlbSkgewotICAgICAgICAgICAgaWYgKCFzdHJjbXAoaXRlbS0+
dHlwZSwgIm9iamVjdDpzdGF0ZS1jaGFuZ2VkOmZvY3VzZWQiKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSk7Ci0gICAg
fQotI2VuZGlmCiAgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9PSwgMik7CiAg
ICAgaWYgKCFnX3N0cmNtcDAoZXZlbnRzWzBdLT50eXBlLCAib2JqZWN0OnN0YXRlLWNoYW5nZWQ6
Zm9jdXNlZCIpKSB7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwx
LCA9PSwgMSk7CkBAIC03NzgsNyArNzAxLDYgQEAgc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVT
dGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAg
ICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CiAgICAgZXZlbnRzID0geyB9OwogCi0jaWYgVVNF
KEFUU1BJKQogICAgIHRlc3QtPnJ1bkphdmFTY3JpcHRBbmRXYWl0VW50aWxGaW5pc2hlZCgiZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xpc3QnKS5mb2N1cygpOyIsIG51bGxwdHIpOwogICAgIGF1
dG8gbGlzdEJveCA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRl
eChzZWN0aW9uLmdldCgpLCBuZXh0Q2hpbGQrKywgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X3Ry
dWUoQVRTUElfSVNfQUNDRVNTSUJMRShsaXN0Qm94LmdldCgpKSk7CkBAIC04MzYsNyArNzU4LDYg
QEAgc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVTdGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0eVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZXZlbnRzID0geyB9OwogICAgIGdfYXNzZXJ0
X3RydWUoQWNjZXNzaWJpbGl0eVRlc3Q6OmlzU2VsZWN0ZWQob3B0aW9uMS5nZXQoKSkpOwogICAg
IGdfYXNzZXJ0X2ZhbHNlKEFjY2Vzc2liaWxpdHlUZXN0Ojppc1NlbGVjdGVkKG9wdGlvbjIuZ2V0
KCkpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJsZUV2ZW50TGlzdGVu
ZXIoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCkBAIC04ODAsOSArODAx
LDYgQEAgc3RhdGljIHZvaWQgdGVzdEFjY2Vzc2libGVFdmVudExpc3RlbmVyKEFjY2Vzc2liaWxp
dHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogCiBzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJs
ZUxpc3RNYXJrZXJzKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewot
I2lmICFVU0UoQVRTUEkpCi0gICAgZ190ZXN0X3NraXAoIkxpc3QgbWFya2VycyBhcmUgaGFuZGxl
ZCBkaWZmZXJlbnRseSB3aXRoIEFUSyIpOwotI2Vsc2UKICAgICBHVW5pcXVlUHRyPGNoYXI+IGJh
c2VEaXIoZ19zdHJkdXBfcHJpbnRmKCJmaWxlOi8vJXMvIiwgVGVzdDo6Z2V0UmVzb3VyY2VzRGly
KCkuZGF0YSgpKSk7CiAgICAgdGVzdC0+c2hvd0luV2luZG93KDgwMCwgNjAwKTsKICAgICB0ZXN0
LT5sb2FkSHRtbCgKQEAgLTk0OCw3ICs4NjYsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0QWNjZXNzaWJs
ZUxpc3RNYXJrZXJzKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAg
IGdfYXNzZXJ0X2NtcHN0cihuYW1lLmdldCgpLCA9PSwgImltYWdlIik7CiAgICAgR1JlZlB0cjxB
dHNwaUltYWdlPiBpbWFnZSA9IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9pbWFnZV9p
ZmFjZShtYXJrZXIuZ2V0KCkpKTsKICAgICBnX2Fzc2VydF9ub25udWxsKGltYWdlLmdldCgpKTsK
LSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0ZXN0Q29tcG9uZW50SGl0VGVzdChBY2Nlc3NpYmls
aXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTEwODAsMTEgKzk5Nyw2IEBAIHN0YXRp
YyB2b2lkIHRlc3RUZXh0QmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCiAKIHN0YXRpYyB2b2lkIHRlc3RUZXh0U3Vycm9nYXRlUGFpcihBY2Nlc3NpYmlsaXR5VGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKIHsKLSNpZiBVU0UoQVRLKQotICAgIGdfdGVzdF9za2lw
KCJTdXJyb2dhdGUgcGFpcnMgYXJlIG5vdCBjb3JyZWN0bHkgaGFuZGxlZCBieSBXZWJLaXQgd2hl
biB1c2luZyBBVEsiKTsKLSAgICByZXR1cm47Ci0jZW5kaWYKLQogICAgIHRlc3QtPnNob3dJbldp
bmRvdygpOwogICAgIHRlc3QtPmxvYWRIdG1sKAogICAgICAgICAiPGh0bWw+IgpAQCAtMTE2Niwx
NCArMTA3OCw4IEBAIHN0YXRpYyB2b2lkIHRlc3RUZXh0SXRlcmF0b3IoQWNjZXNzaWJpbGl0eVRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5lbmRf
b2Zmc2V0LCA9PSwgODQpOwogICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19h
dF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgpKSwgODUsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlf
Q0hBUiwgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0s
ICIiKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21waW50KHJhbmdlLT5zdGFydF9v
ZmZzZXQsID09LCAwKTsKICAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09
LCAwKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEFUSyByZXR1cm5zIHdyb25nIG9mZnNldHMgaW4g
dGhpcyBjYXNlLgotICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+c3RhcnRfb2Zmc2V0LCA9PSwg
ODQpOwotICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5kX29mZnNldCwgPT0sIDg0KTsKLSNl
bmRpZgogICAgIHJhbmdlLnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRT
UElfVEVYVChwLmdldCgpKSwgLTEsIEFUU1BJX1RFWFRfR1JBTlVMQVJJVFlfQ0hBUiwgbnVsbHB0
cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihyYW5nZS0+Y29udGVudCwgPT0sICIiKTsKICAgICBn
X2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29mZnNldCwgPT0sIDApOwpAQCAtMTI0OSw3ICsx
MTU1LDYgQEAgc3RhdGljIHZvaWQgdGVzdFRleHRJdGVyYXRvcihBY2Nlc3NpYmlsaXR5VGVzdCog
dGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPnN0YXJ0X29m
ZnNldCwgPT0sIDUzKTsKICAgICBnX2Fzc2VydF9jbXBpbnQocmFuZ2UtPmVuZF9vZmZzZXQsID09
LCA4NCk7CiAKLSNpZiBVU0UoQVRTUEkpIC8vIEFUSyBkb2Vzbid0IGltcGxlbWVudCBwYXJhZ3Jh
cGggZ3JhbnVsYXJpdHkuCiAgICAgLy8gUGFyYWdyYXBoIGdyYW51bGFyaXR5LgogICAgIHJhbmdl
LnJlc2V0KGF0c3BpX3RleHRfZ2V0X3N0cmluZ19hdF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgp
KSwgMCwgQVRTUElfVEVYVF9HUkFOVUxBUklUWV9QQVJBR1JBUEgsIG51bGxwdHIpKTsKICAgICBn
X2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiVGV4dCBvZiBmaXJzdCBzZW50ZW5j
ZS4gVGhpcyBpcyB0aGUgc2Vjb25kIHNlbnRlbmNlLiIpOwpAQCAtMTI1OSw3ICsxMTY0LDYgQEAg
c3RhdGljIHZvaWQgdGVzdFRleHRJdGVyYXRvcihBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBzdHIocmFuZ2UtPmNvbnRlbnQsID09LCAiQW5k
IHRoaXMgaXMgdGhlIG5leHQgcGFyYWdyYXBoLiIpOwogICAgIGdfYXNzZXJ0X2NtcGludChyYW5n
ZS0+c3RhcnRfb2Zmc2V0LCA9PSwgNTMpOwogICAgIGdfYXNzZXJ0X2NtcGludChyYW5nZS0+ZW5k
X29mZnNldCwgPT0sIDg0KTsKLSNlbmRpZgogCiAgICAgLy8gVXNpbmcgYSB0ZXh0IGNvbnRyb2wg
bm93LgogICAgIHRlc3QtPmxvYWRIdG1sKApAQCAtMTM4MSw3ICsxMjg1LDcgQEAgc3RhdGljIHZv
aWQgdGVzdFRleHRFeHRlbnRzKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogICAgIGdfYXNzZXJ0X2NtcHVpbnQocmFuZ2VSZWN0LT55LCA9PSwgZmlyc3RDaGFyUmVjdC0+
eSk7CiAgICAgZ19hc3NlcnRfY21wdWludChyYW5nZVJlY3QtPndpZHRoLCA+LCAwKTsKICAgICBn
X2Fzc2VydF9jbXB1aW50KHJhbmdlUmVjdC0+aGVpZ2h0LCA+LCAwKTsKLSNpZiBVU0UoQVRTUEkp
IC8vIE9mZnNldCBhdCBwb2ludCBpcyBicm9rZW4gd2l0aCBBVEsuCisKICAgICBhdXRvIG9mZnNl
dCA9IGF0c3BpX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludChBVFNQSV9URVhUKHAuZ2V0KCkpLCBm
aXJzdENoYXJSZWN0LT54LCBmaXJzdENoYXJSZWN0LT55LCBBVFNQSV9DT09SRF9UWVBFX1dJTkRP
VywgbnVsbHB0cik7CiAgICAgZ19hc3NlcnRfY21waW50KG9mZnNldCwgPT0sIDApOwogICAgIG9m
ZnNldCA9IGF0c3BpX3RleHRfZ2V0X29mZnNldF9hdF9wb2ludChBVFNQSV9URVhUKHAuZ2V0KCkp
LCBmaXJzdENoYXJSZWN0LT54ICsgZmlyc3RDaGFyUmVjdC0+d2lkdGgsIGZpcnN0Q2hhclJlY3Qt
PnksIEFUU1BJX0NPT1JEX1RZUEVfV0lORE9XLCBudWxscHRyKTsKQEAgLTEzOTAsNyArMTI5NCw2
IEBAIHN0YXRpYyB2b2lkIHRlc3RUZXh0RXh0ZW50cyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF9jbXBpbnQob2Zmc2V0LCA9PSwgMyk7CiAgICAg
b2Zmc2V0ID0gYXRzcGlfdGV4dF9nZXRfb2Zmc2V0X2F0X3BvaW50KEFUU1BJX1RFWFQocC5nZXQo
KSksIGxhc3RDaGFyUmVjdC0+eCArIGxhc3RDaGFyUmVjdC0+d2lkdGgsIGxhc3RDaGFyUmVjdC0+
eSwgQVRTUElfQ09PUkRfVFlQRV9XSU5ET1csIG51bGxwdHIpOwogICAgIGdfYXNzZXJ0X2NtcGlu
dChvZmZzZXQsID09LCA0KTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCB0ZXN0VGV4dFNlbGVj
dGlvbnMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCkBAIC0xNDIwLDEx
ICsxMzIzLDcgQEAgc3RhdGljIHZvaWQgdGVzdFRleHRTZWxlY3Rpb25zKEFjY2Vzc2liaWxpdHlU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGF1dG8gc2VsZWN0aW9uQ291bnQgPSBhdHNw
aV90ZXh0X2dldF9uX3NlbGVjdGlvbnMoQVRTUElfVEVYVChwLmdldCgpKSwgbnVsbHB0cik7CiAg
ICAgZ19hc3NlcnRfY21wdWludChzZWxlY3Rpb25Db3VudCwgPT0sIDApOwogICAgIGF1dG8gY2Fy
ZXRPZmZzZXQgPSBhdHNwaV90ZXh0X2dldF9jYXJldF9vZmZzZXQoQVRTUElfVEVYVChwLmdldCgp
KSwgbnVsbHB0cik7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcGludChjYXJldE9m
ZnNldCwgPT0sIC0xKTsKLSNlbHNlCi0gICAgZ19hc3NlcnRfY21waW50KGNhcmV0T2Zmc2V0LCA9
PSwgMCk7Ci0jZW5kaWYKIAogICAgIEdVbmlxdWVQdHI8QXRzcGlSYW5nZT4gc2VsZWN0aW9uKGF0
c3BpX3RleHRfZ2V0X3NlbGVjdGlvbihBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCBudWxscHRyKSk7
CiAgICAgZ19hc3NlcnRfbm9ubnVsbChzZWxlY3Rpb24uZ2V0KCkpOwpAQCAtMTU2Myw3ICsxNDYy
LDYgQEAgc3RhdGljIHZvaWQgdGVzdFRleHRBdHRyaWJ1dGVzKEFjY2Vzc2liaWxpdHlUZXN0KiB0
ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcHVpbnQoZ19oYXNoX3RhYmxlX3Np
emUoYXR0cmlidXRlcy5nZXQoKSksID4sIDEpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNf
Y2FzdDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAi
d2VpZ2h0IikpLCA9PSwgIjQwMCIpOwogCi0jaWYgVVNFKEFUU1BJKQogICAgIC8vIEF0c3BpIGlt
cGxlbWVudGF0aW9uIGhhbmRsZXMgcmFuZ2VzIHdpdGggdGhlIHNhbWUgYXR0cmlidXRlcyBhcyBv
bmUgcnVuLgogICAgIHRlc3QtPmxvYWRIdG1sKAogICAgICAgICAiPGh0bWw+IgpAQCAtMTYwMSw4
ICsxNDk5LDYgQEAgc3RhdGljIHZvaWQgdGVzdFRleHRBdHRyaWJ1dGVzKEFjY2Vzc2liaWxpdHlU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcHN0cihzdGF0aWNfY2Fz
dDxjb25zdCBjaGFyKj4oZ19oYXNoX3RhYmxlX2xvb2t1cChhdHRyaWJ1dGVzLmdldCgpLCAid2Vp
Z2h0IikpLCA9PSwgIjQwMCIpOwogICAgIGdfYXNzZXJ0X2NtcGludChzdGFydE9mZnNldCwgPT0s
IDE0KTsKICAgICBnX2Fzc2VydF9jbXBpbnQoZW5kT2Zmc2V0LCA9PSwgMjIpOwotCi0jZW5kaWYK
IH0KIAogc3RhdGljIHZvaWQgdGVzdFRleHRTdGF0ZUNoYW5nZWQoQWNjZXNzaWJpbGl0eVRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCkBAIC0xNjcwLDcgKzE1NjYsNiBAQCBzdGF0aWMgdm9pZCB0
ZXN0VGV4dFN0YXRlQ2hhbmdlZChBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKICAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDp0ZXh0
LWNhcmV0LW1vdmVkIik7CiAgICAgZ19hc3NlcnRfY21wdWludChldmVudHNbMF0tPmRldGFpbDEs
ID09LCAyKTsKIAotI2lmIFVTRShBVFNQSSkgLy8gU2VsZWN0aW9uIGNoYW5nZWQgc2VlbXMgdG8g
YmUgYnJva2VuIHdpdGggQVRLLgogICAgIC8vIFNlbGVjdGlvbiBjaGFuZ2VkLgogICAgIHRlc3Qt
PnN0YXJ0RXZlbnRNb25pdG9yKHAuZ2V0KCksIHsgIm9iamVjdDp0ZXh0LXNlbGVjdGlvbi1jaGFu
Z2VkIiwgIm9iamVjdDp0ZXh0LWNhcmV0LW1vdmVkIiB9KTsKICAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX3RleHRfc2V0X3NlbGVjdGlvbihBVFNQSV9URVhUKHAuZ2V0KCkpLCAwLCAxMCwgMTUsIG51
bGxwdHIpKTsKQEAgLTE3MDcsNyArMTYwMiw2IEBAIHN0YXRpYyB2b2lkIHRlc3RUZXh0U3RhdGVD
aGFuZ2VkKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNz
ZXJ0X25vbm51bGwoZXZlbnQpOwogICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnQtPmRldGFpbDEs
ID09LCAzKTsKICAgICBnX2Fzc2VydF9ub25udWxsKEFjY2Vzc2liaWxpdHlUZXN0OjpmaW5kRXZl
bnQoZXZlbnRzLCAib2JqZWN0OnRleHQtc2VsZWN0aW9uLWNoYW5nZWQiKSk7Ci0jZW5kaWYKIAog
ICAgIC8vIFRleHQgY2hhbmdlZC4KICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX3RleHRfc2V0X2Nh
cmV0X29mZnNldChBVFNQSV9URVhUKGlucHV0LmdldCgpKSwgNSwgbnVsbHB0cikpOwpAQCAtMTcx
Niw5ICsxNjEwLDcgQEAgc3RhdGljIHZvaWQgdGVzdFRleHRTdGF0ZUNoYW5nZWQoQWNjZXNzaWJp
bGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2
ZW50TW9uaXRvcigxKTsKICAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAx
KTsKICAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDp0ZXh0
LWNoYW5nZWQ6aW5zZXJ0Iik7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcHVpbnQo
ZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgNSk7Ci0jZW5kaWYKICAgICBnX2Fzc2VydF9jbXB1aW50
KGV2ZW50c1swXS0+ZGV0YWlsMiwgPT0sIDEpOwogICAgIGdfYXNzZXJ0X3RydWUoR19WQUxVRV9I
T0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55X2RhdGEpKTsKICAgICBnX2Fzc2VydF9jbXBzdHIo
Z192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJhIik7CkBAIC0x
NzM5LDkgKzE2MzEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0VGV4dFN0YXRlQ2hhbmdlZChBY2Nlc3Np
YmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBldmVudHMgPSB0ZXN0LT5zdG9w
RXZlbnRNb25pdG9yKDEpOwogICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNpemUoKSwgPT0s
IDEpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAib2JqZWN0OnRl
eHQtY2hhbmdlZDppbnNlcnQiKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21wdWlu
dChldmVudHNbMF0tPmRldGFpbDEsID09LCAxMCk7Ci0jZW5kaWYKICAgICBnX2Fzc2VydF9jbXB1
aW50KGV2ZW50c1swXS0+ZGV0YWlsMiwgPT0sIDEpOwogICAgIGdfYXNzZXJ0X3RydWUoR19WQUxV
RV9IT0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55X2RhdGEpKTsKICAgICBnX2Fzc2VydF9jbXBz
dHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJiIik7CkBA
IC0xNzUxLDkgKzE2NDEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0VGV4dFN0YXRlQ2hhbmdlZChBY2Nl
c3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBldmVudHMgPSB0ZXN0LT5z
dG9wRXZlbnRNb25pdG9yKDEpOwogICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzLnNpemUoKSwg
PT0sIDEpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAib2JqZWN0
OnRleHQtY2hhbmdlZDpkZWxldGUiKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21w
dWludChldmVudHNbMF0tPmRldGFpbDEsID09LCAxNCk7Ci0jZW5kaWYKICAgICBnX2Fzc2VydF9j
bXB1aW50KGV2ZW50c1swXS0+ZGV0YWlsMiwgPT0sIDEpOwogICAgIGdfYXNzZXJ0X3RydWUoR19W
QUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55X2RhdGEpKTsKICAgICBnX2Fzc2VydF9j
bXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJuIik7
CkBAIC0xNzYzLDkgKzE2NTEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0VGV4dFN0YXRlQ2hhbmdlZChB
Y2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICB0ZXN0LT5rZXlTdHJv
a2UoR0RLX0tFWV9hKTsKICAgICBldmVudHMgPSB0ZXN0LT5zdG9wRXZlbnRNb25pdG9yKDEpOwog
ICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMF0tPnR5cGUsID09LCAib2JqZWN0OnRleHQtY2hh
bmdlZDppbnNlcnQiKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21wdWludChldmVu
dHNbMF0tPmRldGFpbDEsID09LCAyKTsKLSNlbmRpZgogICAgIGdfYXNzZXJ0X2NtcHVpbnQoZXZl
bnRzWzBdLT5kZXRhaWwyLCA9PSwgMSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShHX1ZBTFVFX0hPTERT
X1NUUklORygmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihnX3Zh
bHVlX2dldF9zdHJpbmcoJmV2ZW50c1swXS0+YW55X2RhdGEpLCA9PSwgIuKAoiIpOwpAQCAtMTc3
NCw5ICsxNjYwLDcgQEAgc3RhdGljIHZvaWQgdGVzdFRleHRTdGF0ZUNoYW5nZWQoQWNjZXNzaWJp
bGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZXZlbnRzID0gdGVzdC0+c3RvcEV2
ZW50TW9uaXRvcigxKTsKICAgICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50cy5zaXplKCksID09LCAx
KTsKICAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzBdLT50eXBlLCA9PSwgIm9iamVjdDp0ZXh0
LWNoYW5nZWQ6ZGVsZXRlIik7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcHVpbnQo
ZXZlbnRzWzBdLT5kZXRhaWwxLCA9PSwgMik7Ci0jZW5kaWYKICAgICBnX2Fzc2VydF9jbXB1aW50
KGV2ZW50c1swXS0+ZGV0YWlsMiwgPT0sIDEpOwogICAgIGdfYXNzZXJ0X3RydWUoR19WQUxVRV9I
T0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55X2RhdGEpKTsKICAgICBnX2Fzc2VydF9jbXBzdHIo
Z192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICLigKIiKTsKQEAg
LTE3OTMsOSArMTY3Nyw3IEBAIHN0YXRpYyB2b2lkIHRlc3RUZXh0U3RhdGVDaGFuZ2VkKEFjY2Vz
c2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X3RydWUoR19W
QUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55X2RhdGEpKTsKICAgICBnX2Fzc2VydF9j
bXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMF0tPmFueV9kYXRhKSwgPT0sICJpcyBh
ICIpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihldmVudHNbMV0tPnR5cGUsID09LCAib2JqZWN0OnRl
eHQtY2hhbmdlZDppbnNlcnQiKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21wdWlu
dChldmVudHNbMV0tPmRldGFpbDEsID09LCA1KTsKLSNlbmRpZgogICAgIGdfYXNzZXJ0X2NtcHVp
bnQoZXZlbnRzWzFdLT5kZXRhaWwyLCA9PSwgMSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShHX1ZBTFVF
X0hPTERTX1NUUklORygmZXZlbnRzWzFdLT5hbnlfZGF0YSkpOwogICAgIGdfYXNzZXJ0X2NtcHN0
cihnX3ZhbHVlX2dldF9zdHJpbmcoJmV2ZW50c1sxXS0+YW55X2RhdGEpLCA9PSwgImMiKTsKQEAg
LTE4MDYsOSArMTY4OCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RUZXh0U3RhdGVDaGFuZ2VkKEFjY2Vz
c2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGV2ZW50cyA9IHRlc3QtPnN0
b3BFdmVudE1vbml0b3IoMSk7CiAgICAgZ19hc3NlcnRfY21wdWludChldmVudHMuc2l6ZSgpLCA9
PSwgMSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKGV2ZW50c1swXS0+dHlwZSwgPT0sICJvYmplY3Q6
dGV4dC1jaGFuZ2VkOmRlbGV0ZSIpOwotI2lmIFVTRShBVFNQSSkKICAgICBnX2Fzc2VydF9jbXB1
aW50KGV2ZW50c1swXS0+ZGV0YWlsMSwgPT0sIDEwKTsKLSNlbmRpZgogICAgIGdfYXNzZXJ0X2Nt
cHVpbnQoZXZlbnRzWzBdLT5kZXRhaWwyLCA9PSwgOCk7CiAgICAgZ19hc3NlcnRfdHJ1ZShHX1ZB
TFVFX0hPTERTX1NUUklORygmZXZlbnRzWzBdLT5hbnlfZGF0YSkpOwogICAgIGdfYXNzZXJ0X2Nt
cHN0cihnX3ZhbHVlX2dldF9zdHJpbmcoJmV2ZW50c1swXS0+YW55X2RhdGEpLCA9PSwgImJudGV0
IGVkIik7CkBAIC0xODI0LDE0ICsxNzA0LDExIEBAIHN0YXRpYyB2b2lkIHRlc3RUZXh0U3RhdGVD
aGFuZ2VkKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNz
ZXJ0X3RydWUoR19WQUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1swXS0+YW55X2RhdGEpKTsKICAg
ICBnX2Fzc2VydF9jbXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMF0tPmFueV9kYXRh
KSwgPT0sICLigKLigKLigKIiKTsKICAgICBnX2Fzc2VydF9jbXBzdHIoZXZlbnRzWzFdLT50eXBl
LCA9PSwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0Iik7Ci0jaWYgVVNFKEFUU1BJKQogICAg
IGdfYXNzZXJ0X2NtcHVpbnQoZXZlbnRzWzFdLT5kZXRhaWwxLCA9PSwgMCk7Ci0jZW5kaWYKICAg
ICBnX2Fzc2VydF9jbXB1aW50KGV2ZW50c1sxXS0+ZGV0YWlsMiwgPT0sIDEpOwogICAgIGdfYXNz
ZXJ0X3RydWUoR19WQUxVRV9IT0xEU19TVFJJTkcoJmV2ZW50c1sxXS0+YW55X2RhdGEpKTsKICAg
ICBnX2Fzc2VydF9jbXBzdHIoZ192YWx1ZV9nZXRfc3RyaW5nKCZldmVudHNbMV0tPmFueV9kYXRh
KSwgPT0sICLigKIiKTsKIAotI2lmIFVTRShBVFNQSSkKICAgICAvLyBUZXh0IGlucHV0IHZhbHVl
IGNoYW5nZWQuCiAgICAgdGVzdC0+c3RhcnRFdmVudE1vbml0b3IoaW5wdXQuZ2V0KCksIHsgIm9i
amVjdDp0ZXh0LWNoYW5nZWQ6aW5zZXJ0IiwgIm9iamVjdDp0ZXh0LWNoYW5nZWQ6ZGVsZXRlIiB9
KTsKICAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmluaXNoZWQoImRvY3VtZW50
LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpWzBdLnZhbHVlID0gJ2Zvbyc7IiwgbnVsbHB0
cik7CkBAIC0xODYyLDE0ICsxNzM5LDEwIEBAIHN0YXRpYyB2b2lkIHRlc3RUZXh0U3RhdGVDaGFu
Z2VkKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0
X2NtcHVpbnQoZXZlbnRzWzFdLT5kZXRhaWwyLCA9PSwgNCk7CiAgICAgZ19hc3NlcnRfdHJ1ZShH
X1ZBTFVFX0hPTERTX1NUUklORygmZXZlbnRzWzFdLT5hbnlfZGF0YSkpOwogICAgIGdfYXNzZXJ0
X2NtcHN0cihnX3ZhbHVlX2dldF9zdHJpbmcoJmV2ZW50c1sxXS0+YW55X2RhdGEpLCA9PSwgIuKA
ouKAouKAouKAoiIpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RUZXh0UmVwbGFjZWRP
YmplY3RzKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewotI2lmICFV
U0UoQVRTUEkpCi0gICAgZ190ZXN0X3NraXAoIkVtYmVkZGVkIG9iamVjdHMgYXJlIG5vdCBjb3Jy
ZWN0bHkgaGFuZGxlZCB3aXRoIEFUSyIpOwotI2Vsc2UKICAgICB0ZXN0LT5zaG93SW5XaW5kb3co
ODAwLCA2MDApOwogICAgIHRlc3QtPmxvYWRIdG1sKAogICAgICAgICAiPGh0bWw+IgpAQCAtMTk3
MiwxNCArMTg0NSwxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0VGV4dFJlcGxhY2VkT2JqZWN0cyhBY2Nl
c3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydF90cnVlKEFU
U1BJX0lTX1RFWFQobGluazIuZ2V0KCkpKTsKICAgICB0ZXh0LnJlc2V0KGF0c3BpX3RleHRfZ2V0
X3RleHQoQVRTUElfVEVYVChsaW5rMi5nZXQoKSksIDAsIC0xLCBudWxscHRyKSk7CiAgICAgZ19h
c3NlcnRfY21wc3RyKHRleHQuZ2V0KCksID09LCAibGluazIiKTsKLSNlbmRpZgogfQogCiBzdGF0
aWMgdm9pZCB0ZXN0VGV4dExpc3RNYXJrZXJzKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQogewotI2lmICFVU0UoQVRTUEkpCi0gICAgZ190ZXN0X3NraXAoIkxpc3QgbWFy
a2VycyBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSB3aXRoIEFUSyIpOwotI2Vsc2UKICAgICB0ZXN0
LT5zaG93SW5XaW5kb3coODAwLCA2MDApOwogICAgIHRlc3QtPmxvYWRIdG1sKAogICAgICAgICAi
PGh0bWw+IgpAQCAtMjA4Niw3ICsxOTU1LDYgQEAgc3RhdGljIHZvaWQgdGVzdFRleHRMaXN0TWFy
a2VycyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2Vy
dF90cnVlKEFUU1BJX0lTX1RFWFQobWFya2VyLmdldCgpKSk7CiAgICAgdGV4dC5yZXNldChhdHNw
aV90ZXh0X2dldF90ZXh0KEFUU1BJX1RFWFQobWFya2VyLmdldCgpKSwgMCwgLTEsIG51bGxwdHIp
KTsKICAgICBnX2Fzc2VydF9jbXBzdHIodGV4dC5nZXQoKSwgPT0sICIxLiAiKTsKLSNlbmRpZgog
fQogCiBzdGF0aWMgdm9pZCB0ZXN0VmFsdWVCYXNpYyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKQEAgLTIxNzYsMTEgKzIwNDQsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0SHlw
ZXJsaW5rQmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAg
Z19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRfbl9hbmNob3JzKEFUU1BJX0hZUEVS
TElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAxKTsKICAgICBnX2Fzc2VydF90cnVlKGF0
c3BpX2h5cGVybGlua19pc192YWxpZChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxw
dHIpKTsKICAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRl
eChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMCk7Ci0jaWYgVVNF
KEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0X2VuZF9pbmRl
eChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7Ci0jZWxzZQot
ICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChBVFNQSV9I
WVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMCk7Ci0jZW5kaWYKICAgICBHVW5p
cXVlUHRyPGNoYXI+IHVyaShhdHNwaV9oeXBlcmxpbmtfZ2V0X3VyaShBVFNQSV9IWVBFUkxJTkso
bGluay5nZXQoKSksIDAsIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF9jbXBzdHIodXJpLmdldCgp
LCA9PSwgImh0dHBzOi8vd3d3LndlYmtpdGd0ay5vcmcvIik7CiAgICAgZ19hc3NlcnRfdHJ1ZShh
dHNwaV9oeXBlcmxpbmtfZ2V0X29iamVjdChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIDAs
IG51bGxwdHIpID09IGEuZ2V0KCkpOwpAQCAtMjE5MiwxMyArMjA1Niw4IEBAIHN0YXRpYyB2b2lk
IHRlc3RIeXBlcmxpbmtCYXNpYyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKICAgICBnX2Fzc2VydF90cnVlKEFUU1BJX0lTX0hZUEVSTElOSyhsaW5rLmdldCgpKSk7CiAg
ICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRfbl9hbmNob3JzKEFUU1BJX0hZ
UEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAxKTsKICAgICBnX2Fzc2VydF90cnVl
KGF0c3BpX2h5cGVybGlua19pc192YWxpZChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51
bGxwdHIpKTsKLSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVy
bGlua19nZXRfc3RhcnRfaW5kZXgoQVRTUElfSFlQRVJMSU5LKGxpbmsuZ2V0KCkpLCBudWxscHRy
KSwgPT0sIDApOwogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0X2VuZF9p
bmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7Ci0jZWxz
ZQotICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KEFU
U1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAxMCk7Ci0gICAgZ19hc3Nl
cnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRfZW5kX2luZGV4KEFUU1BJX0hZUEVSTElOSyhs
aW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAxNCk7Ci0jZW5kaWYKICAgICB1cmkucmVzZXQoYXRz
cGlfaHlwZXJsaW5rX2dldF91cmkoQVRTUElfSFlQRVJMSU5LKGxpbmsuZ2V0KCkpLCAwLCBudWxs
cHRyKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHVyaS5nZXQoKSwgPT0sICIiKTsKICAgICBnX2Fz
c2VydF90cnVlKGF0c3BpX2h5cGVybGlua19nZXRfb2JqZWN0KEFUU1BJX0hZUEVSTElOSyhsaW5r
LmdldCgpKSwgMCwgbnVsbHB0cikgPT0gZGl2LmdldCgpKTsKQEAgLTIyMTMsMTEgKzIwNzIsNyBA
QCBzdGF0aWMgdm9pZCB0ZXN0SHlwZXJsaW5rQmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRf
bl9hbmNob3JzKEFUU1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAxKTsK
ICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX2h5cGVybGlua19pc192YWxpZChBVFNQSV9IWVBFUkxJ
TksobGluay5nZXQoKSksIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlw
ZXJsaW5rX2dldF9zdGFydF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxw
dHIpLCA9PSwgOCk7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9o
eXBlcmxpbmtfZ2V0X2VuZF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxw
dHIpLCA9PSwgOSk7Ci0jZWxzZQotICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtf
Z2V0X2VuZF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwg
MTYpOwotI2VuZGlmCiAgICAgdXJpLnJlc2V0KGF0c3BpX2h5cGVybGlua19nZXRfdXJpKEFUU1BJ
X0hZUEVSTElOSyhsaW5rLmdldCgpKSwgMCwgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0
cih1cmkuZ2V0KCksID09LCAiIik7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9oeXBlcmxpbmtf
Z2V0X29iamVjdChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIDAsIG51bGxwdHIpID09IGJ1
dHRvbjEuZ2V0KCkpOwpAQCAtMjIyNywxMyArMjA4Miw4IEBAIHN0YXRpYyB2b2lkIHRlc3RIeXBl
cmxpbmtCYXNpYyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBn
X2Fzc2VydF90cnVlKEFUU1BJX0lTX0hZUEVSTElOSyhsaW5rLmdldCgpKSk7CiAgICAgZ19hc3Nl
cnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRfbl9hbmNob3JzKEFUU1BJX0hZUEVSTElOSyhs
aW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAxKTsKICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX2h5
cGVybGlua19pc192YWxpZChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpKTsK
LSNpZiBVU0UoQVRTUEkpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRf
c3RhcnRfaW5kZXgoQVRTUElfSFlQRVJMSU5LKGxpbmsuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDE0
KTsKICAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoQVRT
UElfSFlQRVJMSU5LKGxpbmsuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDE1KTsKLSNlbHNlCi0gICAg
Z19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRfc3RhcnRfaW5kZXgoQVRTUElfSFlQ
RVJMSU5LKGxpbmsuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDIxKTsKLSAgICBnX2Fzc2VydF9jbXBp
bnQoYXRzcGlfaHlwZXJsaW5rX2dldF9lbmRfaW5kZXgoQVRTUElfSFlQRVJMSU5LKGxpbmsuZ2V0
KCkpLCBudWxscHRyKSwgPT0sIDI5KTsKLSNlbmRpZgogICAgIHVyaS5yZXNldChhdHNwaV9oeXBl
cmxpbmtfZ2V0X3VyaShBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIDAsIG51bGxwdHIpKTsK
ICAgICBnX2Fzc2VydF9jbXBzdHIodXJpLmdldCgpLCA9PSwgIiIpOwogICAgIGdfYXNzZXJ0X3Ry
dWUoYXRzcGlfaHlwZXJsaW5rX2dldF9vYmplY3QoQVRTUElfSFlQRVJMSU5LKGxpbmsuZ2V0KCkp
LCAwLCBudWxscHRyKSA9PSBidXR0b24yLmdldCgpKTsKQEAgLTIyNDgsMTEgKzIwOTgsNyBAQCBz
dGF0aWMgdm9pZCB0ZXN0SHlwZXJsaW5rQmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRfbl9h
bmNob3JzKEFUU1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAxKTsKICAg
ICBnX2Fzc2VydF90cnVlKGF0c3BpX2h5cGVybGlua19pc192YWxpZChBVFNQSV9IWVBFUkxJTkso
bGluay5nZXQoKSksIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlwZXJs
aW5rX2dldF9zdGFydF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIp
LCA9PSwgOCk7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBl
cmxpbmtfZ2V0X2VuZF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIp
LCA9PSwgOSk7Ci0jZWxzZQotICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0
X2VuZF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMTMp
OwotI2VuZGlmCiAgICAgdXJpLnJlc2V0KGF0c3BpX2h5cGVybGlua19nZXRfdXJpKEFUU1BJX0hZ
UEVSTElOSyhsaW5rLmdldCgpKSwgMCwgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0cih1
cmkuZ2V0KCksID09LCAiaHR0cHM6Ly93d3cud2Via2l0Z3RrLm9yZy8iKTsKICAgICBnX2Fzc2Vy
dF90cnVlKGF0c3BpX2h5cGVybGlua19nZXRfb2JqZWN0KEFUU1BJX0hZUEVSTElOSyhsaW5rLmdl
dCgpKSwgMCwgbnVsbHB0cikgPT0gbGluazEuZ2V0KCkpOwpAQCAtMjI2MiwxOCArMjEwOCwxMiBA
QCBzdGF0aWMgdm9pZCB0ZXN0SHlwZXJsaW5rQmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19IWVBFUkxJTksobGlu
ay5nZXQoKSkpOwogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0X25fYW5j
aG9ycyhBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMSk7CiAgICAg
Z19hc3NlcnRfdHJ1ZShhdHNwaV9oeXBlcmxpbmtfaXNfdmFsaWQoQVRTUElfSFlQRVJMSU5LKGxp
bmsuZ2V0KCkpLCBudWxscHRyKSk7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcGlu
dChhdHNwaV9oeXBlcmxpbmtfZ2V0X3N0YXJ0X2luZGV4KEFUU1BJX0hZUEVSTElOSyhsaW5rLmdl
dCgpKSwgbnVsbHB0ciksID09LCAxNCk7CiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVy
bGlua19nZXRfZW5kX2luZGV4KEFUU1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciks
ID09LCAxNSk7Ci0jZWxzZQotICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0
X3N0YXJ0X2luZGV4KEFUU1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAx
OCk7Ci0gICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlua19nZXRfZW5kX2luZGV4KEFU
U1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09LCAyMyk7Ci0jZW5kaWYKICAg
ICB1cmkucmVzZXQoYXRzcGlfaHlwZXJsaW5rX2dldF91cmkoQVRTUElfSFlQRVJMSU5LKGxpbmsu
Z2V0KCkpLCAwLCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHVyaS5nZXQoKSwgPT0s
ICJodHRwczovL3d3dy5nbm9tZS5vcmcvIik7CiAgICAgZ19hc3NlcnRfdHJ1ZShhdHNwaV9oeXBl
cmxpbmtfZ2V0X29iamVjdChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIDAsIG51bGxwdHIp
ID09IGxpbmsyLmdldCgpKTsKIAotI2lmIFVTRShBVFNQSSkKICAgICBhdXRvIHVsID0gYWRvcHRH
UmVmKGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxkX2F0X2luZGV4KGRvY3VtZW50V2ViLmdldCgp
LCA0LCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfdHJ1ZShBVFNQSV9JU19BQ0NFU1NJQkxFKHVs
LmdldCgpKSk7CiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjY2Vzc2libGVfZ2V0X2NoaWxk
X2NvdW50KHVsLmdldCgpLCBudWxscHRyKSwgPT0sIDEpOwpAQCAtMjI5MSw3ICsyMTMxLDYgQEAg
c3RhdGljIHZvaWQgdGVzdEh5cGVybGlua0Jhc2ljKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQogICAgIHVyaS5yZXNldChhdHNwaV9oeXBlcmxpbmtfZ2V0X3VyaShBVFNQ
SV9IWVBFUkxJTksobGluay5nZXQoKSksIDAsIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF9jbXBz
dHIodXJpLmdldCgpLCA9PSwgIiIpOwogICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfaHlwZXJsaW5r
X2dldF9vYmplY3QoQVRTUElfSFlQRVJMSU5LKGxpbmsuZ2V0KCkpLCAwLCBudWxscHRyKSA9PSBt
YXJrZXIuZ2V0KCkpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RIeXBlcnRleHRCYXNp
YyhBY2Nlc3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTIzMjMsMTEgKzIx
NjIsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0SHlwZXJ0ZXh0QmFzaWMoQWNjZXNzaWJpbGl0eVRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVybGlu
a19nZXRfbl9hbmNob3JzKEFUU1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0ciksID09
LCAxKTsKICAgICBnX2Fzc2VydF90cnVlKGF0c3BpX2h5cGVybGlua19pc192YWxpZChBVFNQSV9I
WVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF9jbXBpbnQoYXRz
cGlfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSks
IG51bGxwdHIpLCA9PSwgOCk7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcGludChh
dHNwaV9oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSks
IG51bGxwdHIpLCA9PSwgOSk7Ci0jZWxzZQotICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBl
cmxpbmtfZ2V0X2VuZF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIp
LCA9PSwgMTUpOwotI2VuZGlmCiAgICAgR1VuaXF1ZVB0cjxjaGFyPiB1cmkoYXRzcGlfaHlwZXJs
aW5rX2dldF91cmkoQVRTUElfSFlQRVJMSU5LKGxpbmsuZ2V0KCkpLCAwLCBudWxscHRyKSk7CiAg
ICAgZ19hc3NlcnRfY21wc3RyKHVyaS5nZXQoKSwgPT0sICIiKTsKICAgICBhdXRvIGJ1dHRvbiA9
IGFkb3B0R1JlZihhdHNwaV9hY2Nlc3NpYmxlX2dldF9jaGlsZF9hdF9pbmRleChwLmdldCgpLCAw
LCBudWxscHRyKSk7CkBAIC0yMzM3LDEzICsyMTcyLDggQEAgc3RhdGljIHZvaWQgdGVzdEh5cGVy
dGV4dEJhc2ljKEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdf
YXNzZXJ0X3RydWUoQVRTUElfSVNfSFlQRVJMSU5LKGxpbmsuZ2V0KCkpKTsKICAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRzcGlfaHlwZXJsaW5rX2dldF9uX2FuY2hvcnMoQVRTUElfSFlQRVJMSU5LKGxp
bmsuZ2V0KCkpLCBudWxscHRyKSwgPT0sIDEpOwogICAgIGdfYXNzZXJ0X3RydWUoYXRzcGlfaHlw
ZXJsaW5rX2lzX3ZhbGlkKEFUU1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgbnVsbHB0cikpOwot
I2lmIFVTRShBVFNQSSkKICAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlwZXJsaW5rX2dldF9z
dGFydF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMTQp
OwogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChBVFNQ
SV9IWVBFUkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMTUpOwotI2Vsc2UKLSAgICBn
X2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlwZXJsaW5rX2dldF9zdGFydF9pbmRleChBVFNQSV9IWVBF
UkxJTksobGluay5nZXQoKSksIG51bGxwdHIpLCA9PSwgMjApOwotICAgIGdfYXNzZXJ0X2NtcGlu
dChhdHNwaV9oeXBlcmxpbmtfZ2V0X2VuZF9pbmRleChBVFNQSV9IWVBFUkxJTksobGluay5nZXQo
KSksIG51bGxwdHIpLCA9PSwgMjQpOwotI2VuZGlmCiAgICAgdXJpLnJlc2V0KGF0c3BpX2h5cGVy
bGlua19nZXRfdXJpKEFUU1BJX0hZUEVSTElOSyhsaW5rLmdldCgpKSwgMCwgbnVsbHB0cikpOwog
ICAgIGdfYXNzZXJ0X2NtcHN0cih1cmkuZ2V0KCksID09LCAiaHR0cHM6Ly93d3cud2Via2l0Z3Rr
Lm9yZy8iKTsKICAgICBhdXRvIGEgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hp
bGRfYXRfaW5kZXgocC5nZXQoKSwgMSwgbnVsbHB0cikpOwpAQCAtMjM1MSwxNyArMjE4MSwxMCBA
QCBzdGF0aWMgdm9pZCB0ZXN0SHlwZXJ0ZXh0QmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiAKICAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlwZXJ0ZXh0X2dl
dF9saW5rX2luZGV4KEFUU1BJX0hZUEVSVEVYVChwLmdldCgpKSwgMCwgbnVsbHB0ciksID09LCAt
MSk7CiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVydGV4dF9nZXRfbGlua19pbmRleChB
VFNQSV9IWVBFUlRFWFQocC5nZXQoKSksIDgsIG51bGxwdHIpLCA9PSwgMCk7Ci0jaWYgVVNFKEFU
U1BJKQogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcnRleHRfZ2V0X2xpbmtfaW5kZXgo
QVRTUElfSFlQRVJURVhUKHAuZ2V0KCkpLCA5LCBudWxscHRyKSwgPT0sIC0xKTsKICAgICBnX2Fz
c2VydF9jbXBpbnQoYXRzcGlfaHlwZXJ0ZXh0X2dldF9saW5rX2luZGV4KEFUU1BJX0hZUEVSVEVY
VChwLmdldCgpKSwgMTQsIG51bGxwdHIpLCA9PSwgMSk7CiAgICAgZ19hc3NlcnRfY21waW50KGF0
c3BpX2h5cGVydGV4dF9nZXRfbGlua19pbmRleChBVFNQSV9IWVBFUlRFWFQocC5nZXQoKSksIDE1
LCBudWxscHRyKSwgPT0sIC0xKTsKLSNlbHNlCi0gICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5
cGVydGV4dF9nZXRfbGlua19pbmRleChBVFNQSV9IWVBFUlRFWFQocC5nZXQoKSksIDE1LCBudWxs
cHRyKSwgPT0sIC0xKTsKLSAgICBnX2Fzc2VydF9jbXBpbnQoYXRzcGlfaHlwZXJ0ZXh0X2dldF9s
aW5rX2luZGV4KEFUU1BJX0hZUEVSVEVYVChwLmdldCgpKSwgMjAsIG51bGxwdHIpLCA9PSwgMSk7
Ci0gICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2h5cGVydGV4dF9nZXRfbGlua19pbmRleChBVFNQ
SV9IWVBFUlRFWFQocC5nZXQoKSksIDI0LCBudWxscHRyKSwgPT0sIC0xKTsKLSNlbmRpZgogCi0j
aWYgVVNFKEFUU1BJKQogICAgIGF1dG8gb2wgPSBhZG9wdEdSZWYoYXRzcGlfYWNjZXNzaWJsZV9n
ZXRfY2hpbGRfYXRfaW5kZXgoZG9jdW1lbnRXZWIuZ2V0KCksIDEsIG51bGxwdHIpKTsKICAgICBn
X2Fzc2VydF90cnVlKEFUU1BJX0lTX0FDQ0VTU0lCTEUob2wuZ2V0KCkpKTsKICAgICBnX2Fzc2Vy
dF9jbXBpbnQoYXRzcGlfYWNjZXNzaWJsZV9nZXRfY2hpbGRfY291bnQob2wuZ2V0KCksIG51bGxw
dHIpLCA9PSwgMSk7CkBAIC0yMzkzLDcgKzIyMTYsNiBAQCBzdGF0aWMgdm9pZCB0ZXN0SHlwZXJ0
ZXh0QmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19h
c3NlcnRfY21waW50KGF0c3BpX2h5cGVydGV4dF9nZXRfbGlua19pbmRleChBVFNQSV9IWVBFUlRF
WFQobGkuZ2V0KCkpLCAxLCBudWxscHRyKSwgPT0sIC0xKTsKICAgICBnX2Fzc2VydF9jbXBpbnQo
YXRzcGlfaHlwZXJ0ZXh0X2dldF9saW5rX2luZGV4KEFUU1BJX0hZUEVSVEVYVChsaS5nZXQoKSks
IDEzLCBudWxscHRyKSwgPT0sIDEpOwogICAgIGdfYXNzZXJ0X2NtcGludChhdHNwaV9oeXBlcnRl
eHRfZ2V0X2xpbmtfaW5kZXgoQVRTUElfSFlQRVJURVhUKGxpLmdldCgpKSwgMTQsIG51bGxwdHIp
LCA9PSwgLTEpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RBY3Rpb25CYXNpYyhBY2Nl
c3NpYmlsaXR5VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTI0MzEsMTAgKzIyNTMsOCBA
QCBzdGF0aWMgdm9pZCB0ZXN0QWN0aW9uQmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2FjdGlvbl9nZXRfbl9hY3Rp
b25zKEFUU1BJX0FDVElPTihidXR0b24uZ2V0KCkpLCBudWxscHRyKSwgPT0sIDEpOwogICAgIG5h
bWUucmVzZXQoYXRzcGlfYWN0aW9uX2dldF9hY3Rpb25fbmFtZShBVFNQSV9BQ1RJT04oYnV0dG9u
LmdldCgpKSwgMCwgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihuYW1lLmdldCgpLCA9
PSwgInByZXNzIik7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGxvY2FsaXplZE5hbWUucmVzZXQoYXRz
cGlfYWN0aW9uX2dldF9sb2NhbGl6ZWRfbmFtZShBVFNQSV9BQ1RJT04oYnV0dG9uLmdldCgpKSwg
MCwgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihsb2NhbGl6ZWROYW1lLmdldCgpLCA9
PSwgInByZXNzIik7Ci0jZW5kaWYKICAgICBrZXlCaW5kaW5nLnJlc2V0KGF0c3BpX2FjdGlvbl9n
ZXRfa2V5X2JpbmRpbmcoQVRTUElfQUNUSU9OKGJ1dHRvbi5nZXQoKSksIDAsIG51bGxwdHIpKTsK
ICAgICBnX2Fzc2VydF9jbXBzdHIoa2V5QmluZGluZy5nZXQoKSwgPT0sICJwIik7CiAKQEAgLTI0
NDMsMTAgKzIyNjMsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0QWN0aW9uQmFzaWMoQWNjZXNzaWJpbGl0
eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21waW50KGF0c3BpX2Fj
dGlvbl9nZXRfbl9hY3Rpb25zKEFUU1BJX0FDVElPTihhLmdldCgpKSwgbnVsbHB0ciksID09LCAx
KTsKICAgICBuYW1lLnJlc2V0KGF0c3BpX2FjdGlvbl9nZXRfYWN0aW9uX25hbWUoQVRTUElfQUNU
SU9OKGEuZ2V0KCkpLCAwLCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKG5hbWUuZ2V0
KCksID09LCAianVtcCIpOwotI2lmIFVTRShBVFNQSSkKICAgICBsb2NhbGl6ZWROYW1lLnJlc2V0
KGF0c3BpX2FjdGlvbl9nZXRfbG9jYWxpemVkX25hbWUoQVRTUElfQUNUSU9OKGEuZ2V0KCkpLCAw
LCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsaXplZE5hbWUuZ2V0KCksID09
LCAianVtcCIpOwotI2VuZGlmCiAgICAga2V5QmluZGluZy5yZXNldChhdHNwaV9hY3Rpb25fZ2V0
X2tleV9iaW5kaW5nKEFUU1BJX0FDVElPTihhLmdldCgpKSwgMCwgbnVsbHB0cikpOwogICAgIGdf
YXNzZXJ0X2NtcHN0cihrZXlCaW5kaW5nLmdldCgpLCA9PSwgIiIpOwogfQpAQCAtMjQ4OSwxMSAr
MjMwNyw3IEBAIHN0YXRpYyB2b2lkIHRlc3REb2N1bWVudEJhc2ljKEFjY2Vzc2liaWxpdHlUZXN0
KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogCiAgICAgR1JlZlB0cjxHSGFzaFRhYmxlPiBhdHRyaWJ1
dGVzID0gYWRvcHRHUmVmKGF0c3BpX2RvY3VtZW50X2dldF9hdHRyaWJ1dGVzKEFUU1BJX0RPQ1VN
RU5UKGRvY3VtZW50V2ViLmdldCgpKSwgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X25vbm51bGwo
YXR0cmlidXRlcy5nZXQoKSk7Ci0jaWYgVVNFKEFUU1BJKQogICAgIGdfYXNzZXJ0X2NtcHVpbnQo
Z19oYXNoX3RhYmxlX3NpemUoYXR0cmlidXRlcy5nZXQoKSksID09LCA1KTsKLSNlbHNlCi0gICAg
Z19hc3NlcnRfY21wdWludChnX2hhc2hfdGFibGVfc2l6ZShhdHRyaWJ1dGVzLmdldCgpKSwgPT0s
IDMpOwotI2VuZGlmCiAgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJEb2NUeXBlIikpLCA9PSwg
Imh0bWwiKTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHZhbHVlKGF0c3BpX2RvY3VtZW50X2dldF9k
b2N1bWVudF9hdHRyaWJ1dGVfdmFsdWUoQVRTUElfRE9DVU1FTlQoZG9jdW1lbnRXZWIuZ2V0KCkp
LCBjb25zdF9jYXN0PGNoYXIqPigiRG9jVHlwZSIpLCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRf
Y21wc3RyKHZhbHVlLmdldCgpLCA9PSwgImh0bWwiKTsKQEAgLTI1MDMsMTQgKzIzMTcsMTIgQEAg
c3RhdGljIHZvaWQgdGVzdERvY3VtZW50QmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnRfY21wc3RyKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihnX2hhc2hfdGFibGVfbG9va3VwKGF0dHJpYnV0ZXMuZ2V0KCksICJVUkkiKSksID09LCAiaHR0
cDovL2V4YW1wbGUub3JnLyIpOwogICAgIHZhbHVlLnJlc2V0KGF0c3BpX2RvY3VtZW50X2dldF9k
b2N1bWVudF9hdHRyaWJ1dGVfdmFsdWUoQVRTUElfRE9DVU1FTlQoZG9jdW1lbnRXZWIuZ2V0KCkp
LCBjb25zdF9jYXN0PGNoYXIqPigiVVJJIiksIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF9jbXBz
dHIodmFsdWUuZ2V0KCksID09LCAiaHR0cDovL2V4YW1wbGUub3JnLyIpOwotI2lmIFVTRShBVFNQ
SSkKICAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfaGFzaF90
YWJsZV9sb29rdXAoYXR0cmlidXRlcy5nZXQoKSwgIk1pbWVUeXBlIikpLCA9PSwgInRleHQvaHRt
bCIpOwogICAgIHZhbHVlLnJlc2V0KGF0c3BpX2RvY3VtZW50X2dldF9kb2N1bWVudF9hdHRyaWJ1
dGVfdmFsdWUoQVRTUElfRE9DVU1FTlQoZG9jdW1lbnRXZWIuZ2V0KCkpLCBjb25zdF9jYXN0PGNo
YXIqPigiTWltZVR5cGUiKSwgbnVsbHB0cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0cih2YWx1ZS5n
ZXQoKSwgPT0sICJ0ZXh0L2h0bWwiKTsKICAgICBnX2Fzc2VydF9jbXBzdHIoc3RhdGljX2Nhc3Q8
Y29uc3QgY2hhcio+KGdfaGFzaF90YWJsZV9sb29rdXAoYXR0cmlidXRlcy5nZXQoKSwgIlRpdGxl
IikpLCA9PSwgIkRvY3VtZW50IGF0dHJpYnV0ZXMiKTsKICAgICB2YWx1ZS5yZXNldChhdHNwaV9k
b2N1bWVudF9nZXRfZG9jdW1lbnRfYXR0cmlidXRlX3ZhbHVlKEFUU1BJX0RPQ1VNRU5UKGRvY3Vt
ZW50V2ViLmdldCgpKSwgY29uc3RfY2FzdDxjaGFyKj4oIlRpdGxlIiksIG51bGxwdHIpKTsKICAg
ICBnX2Fzc2VydF9jbXBzdHIodmFsdWUuZ2V0KCksID09LCAiRG9jdW1lbnQgYXR0cmlidXRlcyIp
OwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIHRlc3REb2N1bWVudExvYWRFdmVudHMoQWNjZXNz
aWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCkBAIC0yNTk5LDEwICsyNDExLDggQEAg
c3RhdGljIHZvaWQgdGVzdEltYWdlQmFzaWMoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCiAKICAgICBHVW5pcXVlUHRyPGNoYXI+IGRlc2NyaXB0aW9uKGF0c3BpX2ltYWdl
X2dldF9pbWFnZV9kZXNjcmlwdGlvbihBVFNQSV9JTUFHRShpbWcuZ2V0KCkpLCBudWxscHRyKSk7
CiAgICAgZ19hc3NlcnRfY21wc3RyKGRlc2NyaXB0aW9uLmdldCgpLCA9PSwgIlRoaXMgaXMgYSBi
bGFuayBpY29uIik7Ci0jaWYgVVNFKEFUU1BJKQogICAgIEdVbmlxdWVQdHI8Y2hhcj4gbG9jYWxl
KGF0c3BpX2ltYWdlX2dldF9pbWFnZV9sb2NhbGUoQVRTUElfSU1BR0UoaW1nLmdldCgpKSwgbnVs
bHB0cikpOwogICAgIGdfYXNzZXJ0X2NtcHN0cihsb2NhbGUuZ2V0KCksID09LCAiZW4iKTsKLSNl
bmRpZgogfQogCiBzdGF0aWMgdm9pZCB0ZXN0U2VsZWN0aW9uTGlzdEJveChBY2Nlc3NpYmlsaXR5
VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTI3NDcsOSArMjU1Nyw2IEBAIHN0YXRpYyB2
b2lkIHRlc3RTZWxlY3Rpb25MaXN0Qm94KEFjY2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQogCiBzdGF0aWMgdm9pZCB0ZXN0U2VsZWN0aW9uTWVudUxpc3QoQWNjZXNzaWJpbGl0
eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7Ci0jaWYgIVVTRShBVFNQSSkKLSAgICBnX3Rl
c3Rfc2tpcCgiTWVudUxpc3Qgd29yayBkaWZmZXJlbnRseSB3aXRoIEFUSyIpOwotI2Vsc2UKICAg
ICB0ZXN0LT5zaG93SW5XaW5kb3coODAwLCA2MDApOwogICAgIHRlc3QtPmxvYWRIdG1sKAogICAg
ICAgICAiPGh0bWw+IgpAQCAtMjgyMCwxNCArMjYyNywxMCBAQCBzdGF0aWMgdm9pZCB0ZXN0U2Vs
ZWN0aW9uTWVudUxpc3QoQWNjZXNzaWJpbGl0eVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAg
ICAgZ19hc3NlcnRfZmFsc2UoYXRzcGlfc2VsZWN0aW9uX2Rlc2VsZWN0X2NoaWxkKEFUU1BJX1NF
TEVDVElPTihtZW51TGlzdC5nZXQoKSksIDAsIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydF9mYWxz
ZShhdHNwaV9zZWxlY3Rpb25fc2VsZWN0X2FsbChBVFNQSV9TRUxFQ1RJT04obWVudUxpc3QuZ2V0
KCkpLCBudWxscHRyKSk7CiAgICAgZ19hc3NlcnRfZmFsc2UoYXRzcGlfc2VsZWN0aW9uX2NsZWFy
X3NlbGVjdGlvbihBVFNQSV9TRUxFQ1RJT04obWVudUxpc3QuZ2V0KCkpLCBudWxscHRyKSk7Ci0j
ZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgdGVzdFRhYmxlQmFzaWMoQWNjZXNzaWJpbGl0eVRlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7Ci0jaWYgIVVTRShBVFNQSSkKLSAgICBnX3Rlc3Rfc2tp
cCgiVGFibGVzIHdvcmsgZGlmZmVyZW50bHkgd2l0aCBBVEsiKTsKLSNlbHNlCiAgICAgdGVzdC0+
c2hvd0luV2luZG93KDgwMCwgNjAwKTsKICAgICB0ZXN0LT5sb2FkSHRtbCgKICAgICAgICAgIjxo
dG1sPiIKQEAgLTMyMzgsNyArMzA0MSw2IEBAIHN0YXRpYyB2b2lkIHRlc3RUYWJsZUJhc2ljKEFj
Y2Vzc2liaWxpdHlUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcGlu
dChhdHNwaV90YWJsZV9nZXRfY29sdW1uX2V4dGVudF9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQo
KSksIDMsIDIsIG51bGxwdHIpLCA9PSwgMyk7CiAgICAgY2VsbCA9IGFkb3B0R1JlZihhdHNwaV90
YWJsZV9nZXRfYWNjZXNzaWJsZV9hdChBVFNQSV9UQUJMRSh0YWJsZS5nZXQoKSksIDMsIDIsIG51
bGxwdHIpKTsKICAgICBnX2Fzc2VydF90cnVlKGNlbGw4LmdldCgpID09IGNlbGwuZ2V0KCkpOwot
I2VuZGlmCiB9CiAKIHZvaWQgYmVmb3JlQWxsKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9Q
bGF0Zm9ybUdUSy5jbWFrZQppbmRleCBjNWEzOTkxNzQxZDAuLjkxNzQyYzA3NWY3NyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9nbGliL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZ2xpYi9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDcsNiArNDcsNiBA
QCBBRERfV0syX1RFU1QoVGVzdFdlYktpdEZhdmljb25EYXRhYmFzZSAke1RPT0xTX0RJUn0vVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTAogQUREX1dLMl9URVNUKFRlc3RXZWJLaXRWZXJzaW9u
ICR7VE9PTFNfRElSfS9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0V2ViS2l0VmVy
c2lvbi5jcHApCiBBRERfV0syX1RFU1QoVGVzdFdlYlZpZXdFZGl0b3IgJHtUT09MU19ESVJ9L1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RXZWJWaWV3RWRpdG9yLmNwcCkKIAotaWYg
KEFUU1BJX0ZPVU5EKQoraWYgKEVOQUJMRV9BQ0NFU1NJQklMSVRZIEFORCBBVFNQSV9GT1VORCkK
ICAgICBBRERfV0syX1RFU1QoVGVzdFdlYktpdEFjY2Vzc2liaWxpdHkgJHtUT09MU19ESVJ9L1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5LmNwcCkK
IGVuZGlmICgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKaW5kZXggNjM3YTExNmE5ZTQw
Li5jYWFiNWQ1OWI4MzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmgKQEAgLTM3LDEw
ICszNyw2IEBACiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKLSNpZiBVU0UoQVRLKQotI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyQXRrLmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdUUiB7CiAKIGNsYXNzIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ7CkBAIC0xMDAsOCArOTYsNiBAQCBwcml2YXRlOgogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPGlkPiBtX2dsb2JhbE5vdGlmaWNhdGlvbkhhbmRs
ZXI7Ci0jZWxpZiBVU0UoQVRLKQotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9u
SGFuZGxlcj4gbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyOwogI2VsaWYgVVNFKEFUU1BJKQog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcj4gbV9n
bG9iYWxOb3RpZmljYXRpb25IYW5kbGVyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oCmluZGV4IDZlYmE3MTE2Nzg4ZS4uNDk1NGQxYjIxZjE1IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaApAQCAtNDMsMTEgKzQzLDYgQEAgT0JKQ19DTEFTUyBOU0FycmF5OwogT0JKQ19D
TEFTUyBOU1N0cmluZzsKICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiB1c2luZyBQbGF0Zm9y
bVVJRWxlbWVudCA9IGlkOwotI2VsaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFkpICYmIFVTRShBVEsp
Ci0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuaCIKLSNpbmNs
dWRlIDxhdGsvYXRrLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotdHlwZWRlZiBH
UmVmUHRyPEF0a09iamVjdD4gUGxhdGZvcm1VSUVsZW1lbnQ7CiAjZWxpZiBVU0UoQVRTUEkpCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBBY2Nlc3NpYmlsaXR5T2JqZWN0QXRzcGk7CkBAIC0y
NDcsNyArMjQyLDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBhcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKICAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gYXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKICAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUNvbnRyb2xzRWxlbWVudEF0SW5kZXgo
dW5zaWduZWQpOwotI2lmIFBMQVRGT1JNKENPQ09BKSB8fCBVU0UoQVRLKSB8fCBVU0UoQVRTUEkp
CisjaWYgUExBVEZPUk0oQ09DT0EpIHx8IFVTRShBVFNQSSkKICAgICBSZWZQdHI8QWNjZXNzaWJp
bGl0eVVJRWxlbWVudD4gYXJpYURldGFpbHNFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7CiAgICAg
UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFFcnJvck1lc3NhZ2VFbGVtZW50QXRJ
bmRleCh1bnNpZ25lZCk7CiAjZWxzZQpAQCAtMjU1LDcgKzI1MCw3IEBAIHB1YmxpYzoKICAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdElu
ZGV4KHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShBVEsp
IHx8IFVTRShBVFNQSSkKKyNpZiBVU0UoQVRTUEkpCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+IGFyaWFMYWJlbGxlZEJ5RWxlbWVudEF0SW5kZXgodW5zaWduZWQpOwogICAgIFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBhcmlhRGVzY3JpYmVkQnlFbGVtZW50QXRJbmRl
eCh1bnNpZ25lZCk7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFPd25z
UmVmZXJlbmNpbmdFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7CkBAIC00MzUsOSArNDMwLDcgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGdldENoaWxkcmVuKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gPiYpOwogICAgIHZvaWQgZ2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9yPFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+JiwgdW5zaWduZWQgbG9jYXRpb24sIHVuc2ln
bmVkIGxlbmd0aCk7CiAKLSNpZiBVU0UoQVRLKQotICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlcj4gbV9ub3RpZmljYXRpb25IYW5kbGVyOwotI2VsaWYgVVNFKEFUU1BJ
KQorI2lmIFVTRShBVFNQSSkKICAgICBzdGF0aWMgUmVmUHRyPEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyPiBzX2NvbnRyb2xsZXI7CiAgICAgUmVmUHRyPFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmpl
Y3RBdHNwaT4gbV9lbGVtZW50OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlcj4gbV9ub3RpZmljYXRpb25IYW5kbGVyOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJBdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzZjhiOTg4OTY5NmYuLjAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBJ
Z2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuaCIKLQotI2lmIEVOQUJMRShBQ0NF
U1NJQklMSVRZKSAmJiBVU0UoQVRLKQotCi0jaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkluamVjdGVkQnVuZGxlLmgiCi0jaW5jbHVkZSAiSW5qZWN0ZWRCdW5k
bGVQYWdlLmgiCi0KLSNpbmNsdWRlIDxXZWJLaXQvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgotI2lu
Y2x1ZGUgPGF0ay9hdGsuaD4KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8d3RmL2dsaWIv
R1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFt
ZXNwYWNlIFdUUiB7Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJlc2V0VG9Db25z
aXN0ZW50U3RhdGUoKQotewotICAgIG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlciA9IG51bGxw
dHI7Ci19Ci0KLXN0YXRpYyBBdGtPYmplY3QqIGNoaWxkRWxlbWVudEJ5SWQoQXRrT2JqZWN0KiBw
YXJlbnQsIGNvbnN0IGNoYXIqIGlkKQotewotICAgIGlmICghQVRLX0lTX09CSkVDVChwYXJlbnQp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJvb2wgcGFyZW50Rm91bmQgPSBmYWxz
ZTsKLSAgICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGF0a19vYmplY3RfZ2V0X2F0
dHJpYnV0ZXMocGFyZW50KTsKLSAgICBmb3IgKEF0a0F0dHJpYnV0ZVNldCogYXR0cmlidXRlcyA9
IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMtPm5leHQp
IHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBzdGF0aWNfY2FzdDxBdGtBdHRy
aWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAgaWYgKCFzdHJjbXAoYXR0cmlidXRl
LT5uYW1lLCAiaHRtbC1pZCIpKSB7Ci0gICAgICAgICAgICBpZiAoIXN0cmNtcChhdHRyaWJ1dGUt
PnZhbHVlLCBpZCkpCi0gICAgICAgICAgICAgICAgcGFyZW50Rm91bmQgPSB0cnVlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgYXRrX2F0dHJpYnV0ZV9zZXRfZnJl
ZShhdHRyaWJ1dGVTZXQpOwotCi0gICAgaWYgKHBhcmVudEZvdW5kKQotICAgICAgICByZXR1cm4g
cGFyZW50OwotCi0gICAgaW50IGNoaWxkQ291bnQgPSBhdGtfb2JqZWN0X2dldF9uX2FjY2Vzc2li
bGVfY2hpbGRyZW4ocGFyZW50KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkQ291bnQ7
IGkrKykgewotICAgICAgICBBdGtPYmplY3QqIHJlc3VsdCA9IGNoaWxkRWxlbWVudEJ5SWQoYXRr
X29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGlsZChwYXJlbnQsIGkpLCBpZCk7Ci0gICAgICAgIGlm
IChBVEtfSVNfT0JKRUNUKHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0
cmluZ1JlZiBpZCkKLXsKLSAgICBBdGtPYmplY3QqIHJvb3QgPSBBVEtfT0JKRUNUKFdLQWNjZXNz
aWJpbGl0eVJvb3RPYmplY3QoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKSk7Ci0gICAgaWYgKCFyb290KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHNp
emVfdCBidWZmZXJTaXplID0gSlNTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKGlkKTsK
LSAgICBHVW5pcXVlUHRyPGdjaGFyPiBpZEJ1ZmZlcihzdGF0aWNfY2FzdDxnY2hhcio+KGdfbWFs
bG9jKGJ1ZmZlclNpemUpKSk7Ci0gICAgSlNTdHJpbmdHZXRVVEY4Q1N0cmluZyhpZCwgaWRCdWZm
ZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotCi0gICAgQXRrT2JqZWN0KiByZXN1bHQgPSBjaGlsZEVs
ZW1lbnRCeUlkKHJvb3QsIGlkQnVmZmVyLmdldCgpKTsKLSAgICBpZiAoQVRLX0lTX09CSkVDVChy
ZXN1bHQpKQotICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHJl
c3VsdCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQotewotICAgIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBwbGF0Zm9ybU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKCJhdGsiKSk7Ci0gICAgcmV0dXJuIHBsYXRmb3JtTmFtZTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6aW5qZWN0QWNjZXNzaWJpbGl0eVByZWZlcmVuY2Uo
SlNTdHJpbmdSZWYgZG9tYWluLCBKU1N0cmluZ1JlZiBrZXksIEpTU3RyaW5nUmVmIHZhbHVlKQot
ewotfQotCi1SZWY8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OnJvb3RFbGVtZW50KCkKLXsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICB2b2lkKiByb290ID0gV0tB
Y2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKTsKLQotICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8QXRrT2JqZWN0Kj4ocm9vdCkpOwotfQotCi1S
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZv
Y3VzZWRFbGVtZW50KCkKLXsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKLSAgICB2b2lkKiByb290ID0gV0tBY2Nl
c3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKTsKLQotICAgIGlmICghQVRLX0lTX09CSkVDVChy
b290KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEF0a09iamVjdCo+KHJvb3QpKTsKLX0KLQot
Ym9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWRkTm90aWZpY2F0aW9uTGlzdGVuZXIoSlNW
YWx1ZVJlZiBmdW5jdGlvbkNhbGxiYWNrKQotewotICAgIGlmICghZnVuY3Rpb25DYWxsYmFjaykK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gT25seSBvbmUgZ2xvYmFsIG5vdGlmaWNh
dGlvbiBsaXN0ZW5lci4KLSAgICBpZiAoIW1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcikKLSAg
ICAgICAgbV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyID0gQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXI6OmNyZWF0ZSgpOwotICAgIG1fZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlci0+
c2V0Tm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayhmdW5jdGlvbkNhbGxiYWNrKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyZW1vdmVO
b3RpZmljYXRpb25MaXN0ZW5lcigpCi17Ci0gICAgLy8gUHJvZ3JhbW1lcnMgc2hvdWxkIG5vdCBi
ZSB0cnlpbmcgdG8gcmVtb3ZlIGEgbGlzdGVuZXIgdGhhdCdzIGFscmVhZHkgcmVtb3ZlZC4KLSAg
ICBBU1NFUlQobV9nbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyKTsKLQotICAgIG1fZ2xvYmFsTm90
aWZpY2F0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXVFIKLQotI2VuZGlmIC8vIEVOQUJMRShBQ0NFU1NJQklMSVRZKSAmJiBVU0Uo
QVRLKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9h
dGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXJBdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjUwNWRjOGRkMGUu
LjAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVs
ZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmgiCi0KLSNpZiBF
TkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKLQotI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotI2luY2x1ZGUgIklu
amVjdGVkQnVuZGxlUGFnZS5oIgotI2luY2x1ZGUgIkpTV3JhcHBlci5oIgotI2luY2x1ZGUgPFdl
YktpdC9XS0J1bmRsZUZyYW1lLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxlUGFnZS5oPgot
I2luY2x1ZGUgPFdlYktpdC9XS0J1bmRsZVBhZ2VQcml2YXRlLmg+Ci0jaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1Vu
aXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXR5
cGVkZWYgSGFzaE1hcDxBdGtPYmplY3QqLCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
cio+IE5vdGlmaWNhdGlvbkhhbmRsZXJzTWFwOwotCi1zdGF0aWMgV1RGOjpWZWN0b3I8dW5zaWdu
ZWQ+JiBsaXN0ZW5lcklkcygpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdURjo6VmVj
dG9yPHVuc2lnbmVkPj4gaWRzOwotICAgIHJldHVybiBpZHMuZ2V0KCk7Ci19Ci0KLXN0YXRpYyBO
b3RpZmljYXRpb25IYW5kbGVyc01hcCYgbm90aWZpY2F0aW9uSGFuZGxlcnMoKQotewotICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxOb3RpZmljYXRpb25IYW5kbGVyc01hcD4gbWFwOwotICAgIHJl
dHVybiBtYXAuZ2V0KCk7Ci19Ci0KLUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyKiBn
bG9iYWxOb3RpZmljYXRpb25IYW5kbGVyID0gbnVsbHB0cjsKLQotZ2Jvb2xlYW4gYXhPYmplY3RF
dmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9uSGludCogc2lnbmFsSGludCwgdW5zaWduZWQg
bnVtUGFyYW1WYWx1ZXMsIGNvbnN0IEdWYWx1ZSogcGFyYW1WYWx1ZXMsIGdwb2ludGVyIGRhdGEp
Ci17Ci0gICAgLy8gQXQgbGVhc3Qgd2Ugc2hvdWxkIHJlY2VpdmUgdGhlIGluc3RhbmNlIGVtaXR0
aW5nIHRoZSBzaWduYWwuCi0gICAgaWYgKCFudW1QYXJhbVZhbHVlcykKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBBdGtPYmplY3QqIGFjY2Vzc2libGUgPSBBVEtfT0JKRUNUKGdfdmFsdWVf
Z2V0X29iamVjdCgmcGFyYW1WYWx1ZXNbMF0pKTsKLSAgICBpZiAoIWFjY2Vzc2libGUgfHwgIUFU
S19JU19PQkpFQ1QoYWNjZXNzaWJsZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwotCi0gICAgR1NpZ25hbFF1ZXJ5IHNp
Z25hbFF1ZXJ5OwotICAgIGNvbnN0IGNoYXIqIG5vdGlmaWNhdGlvbk5hbWUgPSBudWxscHRyOwot
ICAgIFZlY3RvcjxKU1ZhbHVlUmVmPiBleHRyYUFyZ3M7Ci0KLSAgICBnX3NpZ25hbF9xdWVyeShz
aWduYWxIaW50LT5zaWduYWxfaWQsICZzaWduYWxRdWVyeSk7Ci0KLSAgICBpZiAoIWdfc3RyY21w
MChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgInN0YXRlLWNoYW5nZSIpKSB7Ci0gICAgICAgIGlm
ICghZ19zdHJjbXAwKGdfdmFsdWVfZ2V0X3N0cmluZygmcGFyYW1WYWx1ZXNbMV0pLCAiY2hlY2tl
ZCIpKQotICAgICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJDaGVja2VkU3RhdGVDaGFuZ2Vk
IjsKLSAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFt
VmFsdWVzWzFdKSwgImludmFsaWQtZW50cnkiKSkKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbk5h
bWUgPSAiQVhJbnZhbGlkU3RhdHVzQ2hhbmdlZCI7Ci0gICAgICAgIGVsc2UgaWYgKCFnX3N0cmNt
cDAoZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVlc1sxXSksICJhY3RpdmUiKSkKLSAgICAg
ICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQWN0aXZlU3RhdGVDaGFuZ2VkIjsKLSAgICAgICAg
ZWxzZSBpZiAoIWdfc3RyY21wMChnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVzWzFdKSwg
ImJ1c3kiKSkKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhFbGVtZW50QnVzeUNo
YW5nZWQiOwotICAgICAgICBlbHNlIGlmICghZ19zdHJjbXAwKGdfdmFsdWVfZ2V0X3N0cmluZygm
cGFyYW1WYWx1ZXNbMV0pLCAiZW5hYmxlZCIpKQotICAgICAgICAgICAgbm90aWZpY2F0aW9uTmFt
ZSA9ICJBWERpc2FibGVkU3RhdGVDaGFuZ2VkIjsKLSAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21w
MChnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVzWzFdKSwgImV4cGFuZGVkIikpCi0gICAg
ICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkFYRXhwYW5kZWRDaGFuZ2VkIjsKLSAgICAgICAg
ZWxzZSBpZiAoIWdfc3RyY21wMChnX3ZhbHVlX2dldF9zdHJpbmcoJnBhcmFtVmFsdWVzWzFdKSwg
InByZXNzZWQiKSkKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhQcmVzc2VkU3Rh
dGVDaGFuZ2VkIjsKLSAgICAgICAgZWxzZSBpZiAoIWdfc3RyY21wMChnX3ZhbHVlX2dldF9zdHJp
bmcoJnBhcmFtVmFsdWVzWzFdKSwgInJlYWQtb25seSIpKQotICAgICAgICAgICAgbm90aWZpY2F0
aW9uTmFtZSA9ICJBWFJlYWRPbmx5U3RhdHVzQ2hhbmdlZCI7Ci0gICAgICAgIGVsc2UgaWYgKCFn
X3N0cmNtcDAoZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJhbVZhbHVlc1sxXSksICJyZXF1aXJlZCIp
KQotICAgICAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJBWFJlcXVpcmVkU3RhdHVzQ2hhbmdl
ZCI7Ci0gICAgICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAoZ192YWx1ZV9nZXRfc3RyaW5nKCZwYXJh
bVZhbHVlc1sxXSksICJzZW5zaXRpdmUiKSkKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUg
PSAiQVhTZW5zaXRpdmVTdGF0ZUNoYW5nZWQiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzaWduYWxWYWx1ZShnX3N0cmR1
cF9wcmludGYoIiVkIiwgZ192YWx1ZV9nZXRfYm9vbGVhbigmcGFyYW1WYWx1ZXNbMl0pKSk7Ci0g
ICAgICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc1NpZ25hbFZhbHVlKEFkb3B0LCBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhzaWduYWxWYWx1ZS5nZXQoKSkpOwotICAgICAgICBl
eHRyYUFyZ3MuYXBwZW5kKEpTVmFsdWVNYWtlU3RyaW5nKGpzQ29udGV4dCwganNTaWduYWxWYWx1
ZS5nZXQoKSkpOwotICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxf
bmFtZSwgImZvY3VzLWV2ZW50IikpIHsKLSAgICAgICAgaWYgKGdfdmFsdWVfZ2V0X2Jvb2xlYW4o
JnBhcmFtVmFsdWVzWzFdKSkKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhGb2N1
c2VkVUlFbGVtZW50Q2hhbmdlZCI7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1
ZXJ5LnNpZ25hbF9uYW1lLCAic2VsZWN0aW9uLWNoYW5nZWQiKSkgewotICAgICAgICBub3RpZmlj
YXRpb25OYW1lID0gIkFYU2VsZWN0ZWRDaGlsZHJlbkNoYW5nZWQiOwotICAgIH0gZWxzZSBpZiAo
IWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgImNoaWxkcmVuLWNoYW5nZWQiKSkg
ewotICAgICAgICBjb25zdCBnY2hhciogY2hpbGRyZW5DaGFuZ2VkRGV0YWlsID0gZ19xdWFya190
b19zdHJpbmcoc2lnbmFsSGludC0+ZGV0YWlsKTsKLSAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9
ICFnX3N0cmNtcDAoY2hpbGRyZW5DaGFuZ2VkRGV0YWlsLCAiYWRkIikgPyAiQVhDaGlsZHJlbkFk
ZGVkIiA6ICJBWENoaWxkcmVuUmVtb3ZlZCI7Ci0gICAgICAgIGdwb2ludGVyIGNoaWxkID0gZ192
YWx1ZV9nZXRfcG9pbnRlcigmcGFyYW1WYWx1ZXNbMl0pOwotICAgICAgICBpZiAoQVRLX0lTX09C
SkVDVChjaGlsZCkpCi0gICAgICAgICAgICBleHRyYUFyZ3MuYXBwZW5kKHRvSlMoanNDb250ZXh0
LCBXVEY6OmdldFB0cihXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShBVEtfT0JK
RUNUKGNoaWxkKSkpKSk7Ci0gICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHNpZ25hbFF1ZXJ5LnNp
Z25hbF9uYW1lLCAicHJvcGVydHktY2hhbmdlIikpIHsKLSAgICAgICAgaWYgKCFnX3N0cmNtcDAo
Z19xdWFya190b19zdHJpbmcoc2lnbmFsSGludC0+ZGV0YWlsKSwgImFjY2Vzc2libGUtdmFsdWUi
KSkKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbk5hbWUgPSAiQVhWYWx1ZUNoYW5nZWQiOwotICAg
IH0gZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgImxvYWQtY29t
cGxldGUiKSkKLSAgICAgICAgbm90aWZpY2F0aW9uTmFtZSA9ICJBWExvYWRDb21wbGV0ZSI7Ci0g
ICAgZWxzZSBpZiAoIWdfc3RyY21wMChzaWduYWxRdWVyeS5zaWduYWxfbmFtZSwgInRleHQtY2Fy
ZXQtbW92ZWQiKSkgewotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkFYVGV4dENhcmV0TW92
ZWQiOwotICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHNpZ25hbFZhbHVlKGdfc3RyZHVwX3ByaW50
ZigiJWQiLCBnX3ZhbHVlX2dldF9pbnQoJnBhcmFtVmFsdWVzWzFdKSkpOwotICAgICAgICBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4ganNTaWduYWxWYWx1ZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoc2lnbmFsVmFsdWUuZ2V0KCkpKTsKLSAgICAgICAgZXh0cmFBcmdzLmFw
cGVuZChKU1ZhbHVlTWFrZVN0cmluZyhqc0NvbnRleHQsIGpzU2lnbmFsVmFsdWUuZ2V0KCkpKTsK
LSAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJ0ZXh0
LWluc2VydCIpIHx8ICFnX3N0cmNtcDAoc2lnbmFsUXVlcnkuc2lnbmFsX25hbWUsICJ0ZXh0LXJl
bW92ZSIpKQotICAgICAgICBub3RpZmljYXRpb25OYW1lID0gIkFYVGV4dENoYW5nZWQiOwotCi0g
ICAgaWYgKCFqc0NvbnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKG5vdGlm
aWNhdGlvbk5hbWUpIHsKLSAgICAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZp
Y2F0aW9uRXZlbnROYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhub3Rp
ZmljYXRpb25OYW1lKSk7Ci0gICAgICAgIEpTVmFsdWVSZWYgbm90aWZpY2F0aW9uTmFtZUFyZ3Vt
ZW50ID0gSlNWYWx1ZU1ha2VTdHJpbmcoanNDb250ZXh0LCBqc05vdGlmaWNhdGlvbkV2ZW50TmFt
ZS5nZXQoKSk7Ci0gICAgICAgIE5vdGlmaWNhdGlvbkhhbmRsZXJzTWFwOjppdGVyYXRvciBlbGVt
ZW50Tm90aWZpY2F0aW9uSGFuZGxlciA9IG5vdGlmaWNhdGlvbkhhbmRsZXJzKCkuZmluZChhY2Nl
c3NpYmxlKTsKLSAgICAgICAgSlNWYWx1ZVJlZiBhcmd1bWVudHNbNV07IC8vIHRoaXMgZGltZW5z
aW9uIG11c3QgYmUgPj0gMiArIG1heChleHRyYUFyZ3Muc2l6ZSgpKQotICAgICAgICBhcmd1bWVu
dHNbMF0gPSB0b0pTKGpzQ29udGV4dCwgV1RGOjpnZXRQdHIoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpjcmVhdGUoYWNjZXNzaWJsZSkpKTsKLSAgICAgICAgYXJndW1lbnRzWzFdID0gbm90
aWZpY2F0aW9uTmFtZUFyZ3VtZW50OwotICAgICAgICBzaXplX3QgbnVtT2ZFeHRyYUFyZ3MgPSBl
eHRyYUFyZ3Muc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mRXh0
cmFBcmdzOyBpKyspCi0gICAgICAgICAgICBhcmd1bWVudHNbaSArIDJdID0gZXh0cmFBcmdzW2ld
OwotICAgICAgICBpZiAoZWxlbWVudE5vdGlmaWNhdGlvbkhhbmRsZXIgIT0gbm90aWZpY2F0aW9u
SGFuZGxlcnMoKS5lbmQoKSkgewotICAgICAgICAgICAgLy8gTGlzdGVuZXIgZm9yIG9uZSBlbGVt
ZW50LiBBcyBhcmd1bWVudHMsIGl0IGdldHMgdGhlIG5vdGlmaWNhdGlvbiBuYW1lCi0gICAgICAg
ICAgICAvLyBhbmQgc29tZXRpbWVzIGV4dHJhIGFyZ3VtZW50cy4KLSAgICAgICAgICAgIEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LAotICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
SlNPYmplY3RSZWY+KGVsZW1lbnROb3RpZmljYXRpb25IYW5kbGVyLT52YWx1ZS0+bm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjaygpKSwKLSAgICAgICAgICAgICAgICAwLCBudW1PZkV4dHJhQXJn
cyArIDEsIGFyZ3VtZW50cyArIDEsIDApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdsb2Jh
bE5vdGlmaWNhdGlvbkhhbmRsZXIpIHsKLSAgICAgICAgICAgIC8vIEEgZ2xvYmFsIGxpc3RlbmVy
IGdldHMgYWRkaXRpb25hbGx5IHRoZSBlbGVtZW50IGFzIHRoZSBmaXJzdCBhcmd1bWVudC4KLSAg
ICAgICAgICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oanNDb250ZXh0LAotICAgICAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8SlNPYmplY3RSZWY+KGdsb2JhbE5vdGlmaWNhdGlvbkhhbmRsZXItPm5v
dGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2soKSksCi0gICAgICAgICAgICAgICAgMCwgbnVtT2ZF
eHRyYUFyZ3MgKyAyLCBhcmd1bWVudHMsIDApOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlCi0KLUFjY2Vzc2liaWxpdHlOb3RpZmljYXRp
b25IYW5kbGVyOjpBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcigpCi0gICAgOiBtX3Bs
YXRmb3JtRWxlbWVudCgwKQotICAgICwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKDAp
Ci17Ci19Ci0KLUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjp+QWNjZXNzaWJpbGl0
eU5vdGlmaWNhdGlvbkhhbmRsZXIoKQotewotICAgIHJlbW92ZUFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyKCk7Ci0gICAgZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsK
LX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6c2V0Tm90aWZpY2F0
aW9uRnVuY3Rpb25DYWxsYmFjayhKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2spCi17Ci0gICAgaWYgKCFub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKSB7Ci0gICAgICAg
IHJlbW92ZUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyKCk7Ci0gICAgICAgIGRpc2Nv
bm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sgPSBub3RpZmljYXRpb25GdW5jdGlv
bkNhbGxiYWNrOwotCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7Ci0gICAgSlNDb250ZXh0UmVmIGpz
Q29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwot
Ci0gICAgY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKTsKLQotICAgIEpTVmFsdWVQcm90
ZWN0KGpzQ29udGV4dCwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKLSAgICAvLyBD
aGVjayBpZiB0aGlzIG5vdGlmaWNhdGlvbiBoYW5kbGVyIGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZp
YyBlbGVtZW50LgotICAgIGlmIChtX3BsYXRmb3JtRWxlbWVudCkgewotICAgICAgICBOb3RpZmlj
YXRpb25IYW5kbGVyc01hcDo6aXRlcmF0b3IgY3VycmVudE5vdGlmaWNhdGlvbkhhbmRsZXIgPSBu
b3RpZmljYXRpb25IYW5kbGVycygpLmZpbmQobV9wbGF0Zm9ybUVsZW1lbnQuZ2V0KCkpOwotICAg
ICAgICBpZiAoY3VycmVudE5vdGlmaWNhdGlvbkhhbmRsZXIgIT0gbm90aWZpY2F0aW9uSGFuZGxl
cnMoKS5lbmQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnROb3RpZmljYXRpb25IYW5k
bGVyLT52YWx1ZS0+cGxhdGZvcm1FbGVtZW50KCkpOwotICAgICAgICAgICAgSlNWYWx1ZVVucHJv
dGVjdChqc0NvbnRleHQsIGN1cnJlbnROb3RpZmljYXRpb25IYW5kbGVyLT52YWx1ZS0+bm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjaygpKTsKLSAgICAgICAgICAgIG5vdGlmaWNhdGlvbkhhbmRs
ZXJzKCkucmVtb3ZlKGN1cnJlbnROb3RpZmljYXRpb25IYW5kbGVyLT52YWx1ZS0+cGxhdGZvcm1F
bGVtZW50KCkuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIG5vdGlmaWNhdGlvbkhhbmRsZXJz
KCkuYWRkKG1fcGxhdGZvcm1FbGVtZW50LmdldCgpLCB0aGlzKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgICAgIEpTVmFsdWVV
bnByb3RlY3QoanNDb250ZXh0LCBnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyLT5ub3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrKCkpOwotICAgICAgICBnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVy
ID0gdGhpczsKLSAgICB9Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXI6OnJlbW92ZUFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyKCkKLXsKLSAgICBXS0J1
bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShwYWdlKTsKLSAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0KLSAgICBpZiAoZ2xvYmFsTm90aWZp
Y2F0aW9uSGFuZGxlciA9PSB0aGlzKSB7Ci0gICAgICAgIEpTVmFsdWVVbnByb3RlY3QoanNDb250
ZXh0LCBnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyLT5ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxi
YWNrKCkpOwotICAgICAgICBnbG9iYWxOb3RpZmljYXRpb25IYW5kbGVyID0gbnVsbHB0cjsKLSAg
ICB9IGVsc2UgaWYgKG1fcGxhdGZvcm1FbGVtZW50LmdldCgpKSB7Ci0gICAgICAgIE5vdGlmaWNh
dGlvbkhhbmRsZXJzTWFwOjppdGVyYXRvciByZW1vdmVOb3RpZmljYXRpb25IYW5kbGVyID0gbm90
aWZpY2F0aW9uSGFuZGxlcnMoKS5maW5kKG1fcGxhdGZvcm1FbGVtZW50LmdldCgpKTsKLSAgICAg
ICAgaWYgKHJlbW92ZU5vdGlmaWNhdGlvbkhhbmRsZXIgIT0gbm90aWZpY2F0aW9uSGFuZGxlcnMo
KS5lbmQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZVVucHJvdGVjdChqc0NvbnRleHQsIHJlbW92
ZU5vdGlmaWNhdGlvbkhhbmRsZXItPnZhbHVlLT5ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
KCkpOwotICAgICAgICAgICAgbm90aWZpY2F0aW9uSGFuZGxlcnMoKS5yZW1vdmUocmVtb3ZlTm90
aWZpY2F0aW9uSGFuZGxlcik7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQWNjZXNzaWJp
bGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OmNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkK
LXsKLSAgICAvLyBFbnN1cmUgbm8gY2FsbGJhY2tzIGFyZSBjb25uZWN0ZWQgYmVmb3JlLgotICAg
IGlmICghZGlzY29ubmVjdEFjY2Vzc2liaWxpdHlDYWxsYmFja3MoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY29uc3QgY2hhciogc2lnbmFsTmFtZXNbXSA9IHsKLSAgICAgICAgIkFUSzpBdGtP
YmplY3Q6c3RhdGUtY2hhbmdlIiwKLSAgICAgICAgIkFUSzpBdGtPYmplY3Q6Zm9jdXMtZXZlbnQi
LAotICAgICAgICAiQVRLOkF0a09iamVjdDphY3RpdmUtZGVzY2VuZGFudC1jaGFuZ2VkIiwKLSAg
ICAgICAgIkFUSzpBdGtPYmplY3Q6Y2hpbGRyZW4tY2hhbmdlZCIsCi0gICAgICAgICJBVEs6QXRr
T2JqZWN0OnByb3BlcnR5LWNoYW5nZSIsCi0gICAgICAgICJBVEs6QXRrT2JqZWN0OnZpc2libGUt
ZGF0YS1jaGFuZ2VkIiwKLSAgICAgICAgIkFUSzpBdGtEb2N1bWVudDpsb2FkLWNvbXBsZXRlIiwK
LSAgICAgICAgIkFUSzpBdGtTZWxlY3Rpb246c2VsZWN0aW9uLWNoYW5nZWQiLAotICAgICAgICAi
QVRLOkF0a1RleHQ6dGV4dC1jYXJldC1tb3ZlZCIsCi0gICAgICAgICJBVEs6QXRrVGV4dDp0ZXh0
LWluc2VydCIsCi0gICAgICAgICJBVEs6QXRrVGV4dDp0ZXh0LXJlbW92ZSIsCi0gICAgICAgIDAK
LSAgICB9OwotCi0gICAgLy8gUmVnaXN0ZXIgYXRrIGludGVyZmFjZXMsIG90aGVyd2lzZSBhZGRf
Z2xvYmFsIG1heSBmYWlsLgotICAgIEdPYmplY3QqIGR1bW15T2JqZWN0ID0gKEdPYmplY3QqKWdf
b2JqZWN0X25ldyhHX1RZUEVfT0JKRUNULCBOVUxMLCBOVUxMKTsKLSAgICBnX29iamVjdF91bnJl
ZihhdGtfbm9fb3Bfb2JqZWN0X25ldyhkdW1teU9iamVjdCkpOwotICAgIGdfb2JqZWN0X3VucmVm
KGR1bW15T2JqZWN0KTsKLQotICAgIC8vIEFkZCBnbG9iYWwgbGlzdGVuZXJzIGZvciBBdGtPYmpl
Y3QncyBzaWduYWxzLgotICAgIGZvciAoY29uc3QgY2hhcioqIHNpZ25hbE5hbWUgPSBzaWduYWxO
YW1lczsgKnNpZ25hbE5hbWU7IHNpZ25hbE5hbWUrKykgewotICAgICAgICB1bnNpZ25lZCBpZCA9
IGF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgKnNp
Z25hbE5hbWUpOwotICAgICAgICBpZiAoIWlkKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2Fn
ZSA9IG1ha2VTdHJpbmcoImF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyIGZhaWxlZCBmb3Ig
c2lnbmFsICIsICpzaWduYWxOYW1lLCAnXG4nKTsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1lc3NhZ2UpOwotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIH0KLQotICAgICAgICBsaXN0ZW5lcklkcygpLmFwcGVuZChpZCk7Ci0gICAgfQot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpkaXNjb25uZWN0QWNj
ZXNzaWJpbGl0eUNhbGxiYWNrcygpCi17Ci0gICAgLy8gT25seSBkaXNjb25uZWN0IGlmIHRoZXJl
IGlzIG5vIG5vdGlmaWNhdGlvbiBoYW5kbGVyLgotICAgIGlmICghbm90aWZpY2F0aW9uSGFuZGxl
cnMoKS5pc0VtcHR5KCkgfHwgZ2xvYmFsTm90aWZpY2F0aW9uSGFuZGxlcikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgLy8gQXRrT2JqZWN0IHNpZ25hbHMuCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsaXN0ZW5lcklkcygpLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIEFTU0VSVChs
aXN0ZW5lcklkcygpW2ldKTsKLSAgICAgICAgYXRrX3JlbW92ZV9nbG9iYWxfZXZlbnRfbGlzdGVu
ZXIobGlzdGVuZXJJZHMoKVtpXSk7Ci0gICAgfQotICAgIGxpc3RlbmVySWRzKCkuY2xlYXIoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCi0KLSNlbmRpZiAvLyBF
TkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyQXRrLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9B
Y2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAyM2VjZTk0YmJlMzQuLjAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlckF0ay5oCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQot
I3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWSkgJiYgVVNFKEFUSykKLQot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmg+Ci0jaW5jbHVkZSA8YXRrL2F0
ay5oPgotI2luY2x1ZGUgPGF0ay9hdGtvYmplY3QuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdUUiB7Ci0K
LWNsYXNzIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyIDogcHVibGljIFJlZkNvdW50
ZWQ8QWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI+IHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyPiBjcmVhdGUoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIoKSk7Ci0gICAgfQotICAgIH5BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcigp
OwotICAgIHZvaWQgc2V0UGxhdGZvcm1FbGVtZW50KEdSZWZQdHI8QXRrT2JqZWN0PiBwbGF0Zm9y
bUVsZW1lbnQpIHsgbV9wbGF0Zm9ybUVsZW1lbnQgPSBwbGF0Zm9ybUVsZW1lbnQ7IH0KLSAgICBH
UmVmUHRyPEF0a09iamVjdD4gcGxhdGZvcm1FbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9wbGF0
Zm9ybUVsZW1lbnQ7IH0KLSAgICB2b2lkIHNldE5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2so
SlNWYWx1ZVJlZik7Ci0gICAgSlNWYWx1ZVJlZiBub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIoKTsKLSAgICB2b2lk
IGNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCk7Ci0gICAgYm9vbCBkaXNjb25uZWN0QWNj
ZXNzaWJpbGl0eUNhbGxiYWNrcygpOwotICAgIHZvaWQgcmVtb3ZlQWNjZXNzaWJpbGl0eU5vdGlm
aWNhdGlvbkhhbmRsZXIoKTsKLQotICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBtX3BsYXRmb3JtRWxl
bWVudDsKLSAgICBKU1ZhbHVlUmVmIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjazsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdUUgotCi0jZW5kaWYgLy8gRU5BQkxFKEFDQ0VTU0lCSUxJVFkp
ICYmIFVTRShBVEspCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzI4ZDQxMWE5MDAuLjAwMDAwMDAwMDAw
MAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50QXRrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzMjQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oIgotCi0jaWYgRU5BQkxFKEFDQ0VTU0lCSUxJ
VFkpICYmIFVTRShBVEspCi0KLSNpbmNsdWRlICJJbmplY3RlZEJ1bmRsZS5oIgotI2luY2x1ZGUg
IkluamVjdGVkQnVuZGxlUGFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5n
UmVmLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvT3BhcXVlSlNTdHJpbmcuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViS2l0L1dLQnVuZGxl
RnJhbWUuaD4KLSNpbmNsdWRlIDxhdGsvYXRrLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgotI2luY2x1ZGUgPHd0
Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+Ci0KLW5hbWVzcGFjZSBXVFIgewotCi1uYW1lc3Bh
Y2UgewotCi1lbnVtIFJhbmdlTGltaXQgewotICAgIFJhbmdlTGltaXRNaW5pbXVtLAotICAgIFJh
bmdlTGltaXRNYXhpbXVtCi19OwotCi1lbnVtIEF0a0F0dHJpYnV0ZVR5cGUgewotICAgIE9iamVj
dEF0dHJpYnV0ZVR5cGUsCi0gICAgVGV4dEF0dHJpYnV0ZVR5cGUKLX07Ci0KLWVudW0gQXR0cmli
dXRlc0luZGV4IHsKLSAgICAvLyBBdHRyaWJ1dGUgbmFtZXMuCi0gICAgSW52YWxpZE5hbWVJbmRl
eCA9IDAsCi0gICAgQ29sdW1uQ291bnQsCi0gICAgQ29sdW1uSW5kZXgsCi0gICAgQ29sdW1uU3Bh
biwKLSAgICBSb3dDb3VudCwKLSAgICBSb3dJbmRleCwKLSAgICBSb3dTcGFuLAotICAgIFBvc0lu
U2V0SW5kZXgsCi0gICAgU2V0U2l6ZUluZGV4LAotICAgIFBsYWNlaG9sZGVyTmFtZUluZGV4LAot
ICAgIFNvcnROYW1lSW5kZXgsCi0gICAgQ3VycmVudE5hbWVJbmRleCwKLSAgICBBcmlhTGl2ZU5h
bWVJbmRleCwKLSAgICBBcmlhQXRvbWljTmFtZUluZGV4LAotICAgIEFyaWFSZWxldmFudE5hbWVJ
bmRleCwKLSAgICBCdXN5TmFtZUluZGV4LAotCi0gICAgLy8gQXR0cmlidXRlIHZhbHVlcy4KLSAg
ICBTb3J0QXNjZW5kaW5nVmFsdWVJbmRleCwKLSAgICBTb3J0RGVzY2VuZGluZ1ZhbHVlSW5kZXgs
Ci0gICAgU29ydFVua25vd25WYWx1ZUluZGV4LAotCi0gICAgTnVtYmVyT2ZBdHRyaWJ1dGVzCi19
OwotCi0vLyBBdHRyaWJ1dGUgbmFtZXMgJiBWYWx1ZXMgKGtlZXAgb24gc3luYyB3aXRoIGVudW0g
QXR0cmlidXRlc0luZGV4KS4KLXN0cnVjdCBBdHRyaWJ1dGUgewotICAgIFN0cmluZyBjb3JlRG9t
YWluOwotICAgIFN0cmluZyBhdGtEb21haW47Ci19OwotdXNpbmcgQXR0cmlidXRlcyA9IHN0ZDo6
YXJyYXk8QXR0cmlidXRlLCBOdW1iZXJPZkF0dHJpYnV0ZXM+Owotc3RhdGljIGNvbnN0IEF0dHJp
YnV0ZXMmIGF0dHJpYnV0ZXNNYXAoKQotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxBdHRy
aWJ1dGVzPiBhdHRyaWJ1dGVzID0gQXR0cmlidXRlcyh7Ci0gICAgICAgIC8vIEF0dHJpYnV0ZSBu
YW1lcy4KLSAgICAgICAgQXR0cmlidXRlIHsgIkFYSW52YWxpZCIsICJpbnZhbGlkIiB9LAotICAg
ICAgICBBdHRyaWJ1dGUgeyAiQVhBUklBQ29sdW1uQ291bnQiLCAiY29sY291bnQiIH0sCi0gICAg
ICAgIEF0dHJpYnV0ZSB7ICJBWEFSSUFDb2x1bW5JbmRleCIsICJjb2xpbmRleCIgfSwKLSAgICAg
ICAgQXR0cmlidXRlIHsgIkFYQVJJQUNvbHVtblNwYW4iLCAiY29sc3BhbiIgfSwKLSAgICAgICAg
QXR0cmlidXRlIHsgIkFYQVJJQVJvd0NvdW50IiwgInJvd2NvdW50IiB9LAotICAgICAgICBBdHRy
aWJ1dGUgeyAiQVhBUklBUm93SW5kZXgiLCAicm93aW5kZXgiIH0sCi0gICAgICAgIEF0dHJpYnV0
ZSB7ICJBWEFSSUFSb3dTcGFuIiwgInJvd3NwYW4iIH0sCi0gICAgICAgIEF0dHJpYnV0ZSB7ICJB
WEFSSUFQb3NJblNldCIsICJwb3NpbnNldCIgfSwKLSAgICAgICAgQXR0cmlidXRlIHsgIkFYQVJJ
QVNldFNpemUiLCAic2V0c2l6ZSIgfSwKLSAgICAgICAgQXR0cmlidXRlIHsgIkFYUGxhY2Vob2xk
ZXJWYWx1ZSIsICJwbGFjZWhvbGRlci10ZXh0IiB9ICwKLSAgICAgICAgQXR0cmlidXRlIHsgIkFY
U29ydERpcmVjdGlvbiIsICJzb3J0IiB9LAotICAgICAgICBBdHRyaWJ1dGUgeyAiQVhBUklBQ3Vy
cmVudCIsICJjdXJyZW50IiB9LAotICAgICAgICBBdHRyaWJ1dGUgeyAiQVhBUklBTGl2ZSIsICJs
aXZlIiB9LAotICAgICAgICBBdHRyaWJ1dGUgeyAiQVhBUklBQXRvbWljIiwgImF0b21pYyIgfSwK
LSAgICAgICAgQXR0cmlidXRlIHsgIkFYQVJJQVJlbGV2YW50IiwgInJlbGV2YW50IiB9LAotICAg
ICAgICBBdHRyaWJ1dGUgeyAiQVhFbGVtZW50QnVzeSIsICJidXN5IiB9LAotCi0gICAgICAgIC8v
IEF0dHJpYnV0ZSB2YWx1ZXMuCi0gICAgICAgIEF0dHJpYnV0ZSB7ICJBWEFzY2VuZGluZ1NvcnRE
aXJlY3Rpb24iLCAiYXNjZW5kaW5nIiB9LAotICAgICAgICBBdHRyaWJ1dGUgeyAiQVhEZXNjZW5k
aW5nU29ydERpcmVjdGlvbiIsICJkZXNjZW5kaW5nIiB9LAotICAgICAgICBBdHRyaWJ1dGUgeyAi
QVhVbmtub3duU29ydERpcmVjdGlvbiIsICJ1bmtub3duIiB9LAotICAgIH0pOwotICAgIHJldHVy
biBhdHRyaWJ1dGVzLmdldCgpOwotfQotCi1jb25zdCBjaGFyKiBsYW5kbWFya1N0cmluZ0Jhbm5l
ciA9ICJBWExhbmRtYXJrQmFubmVyIjsKLWNvbnN0IGNoYXIqIGxhbmRtYXJrU3RyaW5nQ29tcGxl
bWVudGFyeSA9ICJBWExhbmRtYXJrQ29tcGxlbWVudGFyeSI7Ci1jb25zdCBjaGFyKiBsYW5kbWFy
a1N0cmluZ0NvbnRlbnRpbmZvID0gIkFYTGFuZG1hcmtDb250ZW50SW5mbyI7Ci1jb25zdCBjaGFy
KiBsYW5kbWFya1N0cmluZ0Zvcm0gPSAiQVhMYW5kbWFya0Zvcm0iOwotY29uc3QgY2hhciogbGFu
ZG1hcmtTdHJpbmdNYWluID0gIkFYTGFuZG1hcmtNYWluIjsKLWNvbnN0IGNoYXIqIGxhbmRtYXJr
U3RyaW5nTmF2aWdhdGlvbiA9ICJBWExhbmRtYXJrTmF2aWdhdGlvbiI7Ci1jb25zdCBjaGFyKiBs
YW5kbWFya1N0cmluZ1JlZ2lvbiA9ICJBWExhbmRtYXJrUmVnaW9uIjsKLWNvbnN0IGNoYXIqIGxh
bmRtYXJrU3RyaW5nU2VhcmNoID0gIkFYTGFuZG1hcmtTZWFyY2giOwotCi1TdHJpbmcganNTdHJp
bmdUb1dURlN0cmluZyhKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgc2l6ZV90IGJ1ZmZl
clNpemUgPSBKU1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoYXR0cmlidXRlKTsKLSAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBidWZmZXIoc3RhdGljX2Nhc3Q8Z2NoYXIqPihnX21hbGxvYyhi
dWZmZXJTaXplKSkpOwotICAgIEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoYXR0cmlidXRlLCBidWZm
ZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6ZnJvbVVURjgoYnVm
ZmVyLmdldCgpKTsKLX0KLQotU3RyaW5nIGNvcmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShKU1N0
cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IGpzU3Ry
aW5nVG9XVEZTdHJpbmcoYXR0cmlidXRlKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE51bWJl
ck9mQXR0cmlidXRlczsgKytpKSB7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzTWFwKClbaV0uY29y
ZURvbWFpbiA9PSBhdHRyaWJ1dGVTdHJpbmcpCi0gICAgICAgICAgICByZXR1cm4gYXR0cmlidXRl
c01hcCgpW2ldLmF0a0RvbWFpbjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYXR0cmlidXRlU3RyaW5n
OwotfQotCi1TdHJpbmcgYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVWYWx1ZShBdGtB
dHRyaWJ1dGVUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Ci17Ci0gICAgaWYgKHR5cGUgPT0gT2JqZWN0QXR0cmlidXRlVHlwZSkgewotICAgICAgICAvLyBX
ZSBkb24ndCBleHBvc2UgdGhlICJjdXJyZW50IiBhdHRyaWJ1dGUgaWYgdGhlcmUgaXMgbm8gYXV0
aG9yLXByb3ZpZGVkIHZhbHVlLgotICAgICAgICBpZiAoaWQgPT0gYXR0cmlidXRlc01hcCgpW0N1
cnJlbnROYW1lSW5kZXhdLmF0a0RvbWFpbiAmJiB2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICByZXR1cm4gImZhbHNlIjsKLQotICAgICAgICAvLyBXZSBuZWVkIHRvIHRyYW5zbGF0ZSBBVEsg
dmFsdWVzIGV4cG9zZWQgZm9yICdhcmlhLXNvcnQnIChlLmcuICdhc2NlbmRpbmcnKQotICAgICAg
ICAvLyBpbnRvIHRob3NlIGV4cGVjdGVkIGJ5IHRoZSBsYXlvdXQgdGVzdHMgKGUuZy4gJ0FYQXNj
ZW5kaW5nU29ydERpcmVjdGlvbicpLgotICAgICAgICBpZiAoaWQgPT0gYXR0cmlidXRlc01hcCgp
W1NvcnROYW1lSW5kZXhdLmF0a0RvbWFpbiAmJiAhdmFsdWUuaXNFbXB0eSgpKSB7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUgPT0gYXR0cmlidXRlc01hcCgpW1NvcnRBc2NlbmRpbmdWYWx1ZUluZGV4
XS5hdGtEb21haW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNNYXAoKVtTb3J0
QXNjZW5kaW5nVmFsdWVJbmRleF0uY29yZURvbWFpbjsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9
PSBhdHRyaWJ1dGVzTWFwKClbU29ydERlc2NlbmRpbmdWYWx1ZUluZGV4XS5hdGtEb21haW4pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNNYXAoKVtTb3J0RGVzY2VuZGluZ1ZhbHVl
SW5kZXhdLmNvcmVEb21haW47Ci0KLSAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzTWFwKClb
U29ydFVua25vd25WYWx1ZUluZGV4XS5jb3JlRG9tYWluOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmICh0eXBlID09IFRleHRBdHRyaWJ1dGVUeXBlKSB7Ci0gICAgICAgIC8vIEluIGNhc2Ugb2Yg
J2FyaWEtaW52YWxpZCcgd2hlbiB0aGUgYXR0cmlidXRlIGVtcHR5IG9yIGhhcyAiZmFsc2UiIGZv
ciBBVEsKLSAgICAgICAgLy8gaXQgc2hvdWxkIG5vdCBiZSBtYXBwZWQgYXQgYWxsLCBidXQgbGF5
b3V0IHRlc3RzIHdpbGwgZXhwZWN0ICdmYWxzZScuCi0gICAgICAgIGlmIChpZCA9PSBhdHRyaWJ1
dGVzTWFwKClbSW52YWxpZE5hbWVJbmRleF0uYXRrRG9tYWluICYmIHZhbHVlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIHJldHVybiAiZmFsc2UiOwotICAgIH0KLQotICAgIHJldHVybiB2YWx1ZTsK
LX0KLQotQXRrQXR0cmlidXRlU2V0KiBnZXRBdHRyaWJ1dGVTZXQoQXRrT2JqZWN0KiBhY2Nlc3Np
YmxlLCBBdGtBdHRyaWJ1dGVUeXBlIHR5cGUpCi17Ci0gICAgaWYgKCFhY2Nlc3NpYmxlKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICh0eXBlID09IE9iamVjdEF0dHJpYnV0ZVR5
cGUpCi0gICAgICAgIHJldHVybiBhdGtfb2JqZWN0X2dldF9hdHRyaWJ1dGVzKGFjY2Vzc2libGUp
OwotCi0gICAgaWYgKHR5cGUgPT0gVGV4dEF0dHJpYnV0ZVR5cGUpIHsKLSAgICAgICAgaWYgKCFB
VEtfSVNfVEVYVChhY2Nlc3NpYmxlKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgICAgIHJldHVybiBhdGtfdGV4dF9nZXRfZGVmYXVsdF9hdHRyaWJ1dGVzKEFUS19URVhUKGFj
Y2Vzc2libGUpKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gbnVsbHB0cjsKLX0KLQotU3RyaW5nIGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQXRrT2Jq
ZWN0KiBhY2Nlc3NpYmxlLCBBdGtBdHRyaWJ1dGVUeXBlIHR5cGUsIFN0cmluZyBpZCkKLXsKLSAg
ICBBdGtBdHRyaWJ1dGVTZXQqIGF0dHJpYnV0ZVNldCA9IGdldEF0dHJpYnV0ZVNldChhY2Nlc3Np
YmxlLCB0eXBlKTsKLSAgICBpZiAoIWF0dHJpYnV0ZVNldCkKLSAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwotCi0gICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlOwotICAgIGZvciAoQXRrQXR0cmlidXRl
U2V0KiBhdHRyaWJ1dGVzID0gYXR0cmlidXRlU2V0OyBhdHRyaWJ1dGVzOyBhdHRyaWJ1dGVzID0g
YXR0cmlidXRlcy0+bmV4dCkgewotICAgICAgICBBdGtBdHRyaWJ1dGUqIGF0a0F0dHJpYnV0ZSA9
IHN0YXRpY19jYXN0PEF0a0F0dHJpYnV0ZSo+KGF0dHJpYnV0ZXMtPmRhdGEpOwotICAgICAgICBp
ZiAoaWQgPT0gYXRrQXR0cmlidXRlLT5uYW1lKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1
ZSA9IFN0cmluZzo6ZnJvbVVURjgoYXRrQXR0cmlidXRlLT52YWx1ZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVlKGF0dHJp
YnV0ZVNldCk7Ci0KLSAgICByZXR1cm4gYXRrQXR0cmlidXRlVmFsdWVUb0NvcmVBdHRyaWJ1dGVW
YWx1ZSh0eXBlLCBpZCwgYXR0cmlidXRlVmFsdWUpOwotfQotCi1TdHJpbmcgYXR0cmlidXRlU2V0
VG9TdHJpbmcoQXRrQXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQsIFN0cmluZyBzZXBhcmF0b3I9
IiwgIikKLXsKLSAgICBpZiAoIWF0dHJpYnV0ZVNldCkKLSAgICAgICAgcmV0dXJuIFN0cmluZygp
OwotCi0gICAgVmVjdG9yPFN0cmluZz4gYXR0cmlidXRlTGlzdDsKLSAgICBmb3IgKEF0a0F0dHJp
YnV0ZVNldCogYXR0cmlidXRlcyA9IGF0dHJpYnV0ZVNldDsgYXR0cmlidXRlczsgYXR0cmlidXRl
cyA9IGF0dHJpYnV0ZXMtPm5leHQpIHsKLSAgICAgICAgQXRrQXR0cmlidXRlKiBhdHRyaWJ1dGUg
PSBzdGF0aWNfY2FzdDxBdGtBdHRyaWJ1dGUqPihhdHRyaWJ1dGVzLT5kYXRhKTsKLSAgICAgICAg
aWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5uYW1lLCAiaHRtbC1pZCIpIHx8ICFnX3N0cmNtcDAo
YXR0cmlidXRlLT5uYW1lLCAidG9vbGtpdCIpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgYXR0cmlidXRlTGlzdC5hcHBlbmQobWFrZVN0cmluZyhhdHRyaWJ1dGUtPm5hbWUsICc6
JywgYXR0cmlidXRlLT52YWx1ZSkpOwotICAgIH0KLSAgICBhdGtfYXR0cmlidXRlX3NldF9mcmVl
KGF0dHJpYnV0ZVNldCk7Ci0KLSAgICBzdGQ6OnNvcnQoYXR0cmlidXRlTGlzdC5iZWdpbigpLCBh
dHRyaWJ1dGVMaXN0LmVuZCgpLCBXVEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbik7Ci0KLSAg
ICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYm9vbCBpc0ZpcnN0ID0gdHJ1ZTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGF0dHJpYnV0ZSA6IGF0dHJpYnV0ZUxpc3QpIHsKLSAgICAgICAgaWYg
KCFpc0ZpcnN0KQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoc2VwYXJhdG9yKTsKLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoYXR0cmlidXRlKTsKLSAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1TdHJpbmcgZ2V0QXRr
QXR0cmlidXRlU2V0QXNTdHJpbmcoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlLCBBdGtBdHRyaWJ1dGVU
eXBlIHR5cGUsICBTdHJpbmcgc2VwYXJhdG9yPSIsICIpCi17Ci0gICAgcmV0dXJuIGF0dHJpYnV0
ZVNldFRvU3RyaW5nKGdldEF0dHJpYnV0ZVNldChhY2Nlc3NpYmxlLCB0eXBlKSwgc2VwYXJhdG9y
KTsKLX0KLQotYm9vbCBjaGVja0VsZW1lbnRTdGF0ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50
LCBBdGtTdGF0ZVR5cGUgc3RhdGVUeXBlKQotewotICAgIGlmICghQVRLX0lTX09CSkVDVChlbGVt
ZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxBdGtTdGF0
ZVNldD4gc3RhdGVTZXQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfc3RhdGVfc2V0KEFUS19P
QkpFQ1QoZWxlbWVudC5nZXQoKSkpKTsKLSAgICByZXR1cm4gYXRrX3N0YXRlX3NldF9jb250YWlu
c19zdGF0ZShzdGF0ZVNldC5nZXQoKSwgc3RhdGVUeXBlKTsKLX0KLQotSlNTdHJpbmdSZWYgaW5k
ZXhSYW5nZUluVGFibGUoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCwgYm9vbCBpc1Jvd1Jhbmdl
KQotewotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHJhbmdlU3RyaW5nKGdfc3RyZHVwKCJ7MCwgMH0i
KSk7Ci0gICAgaWYgKCFBVEtfSVNfVEFCTEVfQ0VMTChlbGVtZW50LmdldCgpKSkKLSAgICAgICAg
cmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsK
LQotICAgIGdpbnQgcm93ID0gLTE7Ci0gICAgZ2ludCBjb2x1bW4gPSAtMTsKLSAgICBnaW50IHJv
d1NwYW4gPSAtMTsKLSAgICBnaW50IGNvbHVtblNwYW4gPSAtMTsKLSAgICBhdGtfdGFibGVfY2Vs
bF9nZXRfcm93X2NvbHVtbl9zcGFuKEFUS19UQUJMRV9DRUxMKGVsZW1lbnQuZ2V0KCkpLCAmcm93
LCAmY29sdW1uLCAmcm93U3BhbiwgJmNvbHVtblNwYW4pOwotCi0gICAgLy8gR2V0IHRoZSBhY3R1
YWwgdmFsdWVzLCBpZiByb3cgYW5kIGNvbHVtbnMgYXJlIHZhbGlkIHZhbHVlcy4KLSAgICBpZiAo
cm93ICE9IC0xICYmIGNvbHVtbiAhPSAtMSkgewotICAgICAgICBpbnQgYmFzZSA9IDA7Ci0gICAg
ICAgIGludCBsZW5ndGggPSAwOwotICAgICAgICBpZiAoaXNSb3dSYW5nZSkgewotICAgICAgICAg
ICAgYmFzZSA9IHJvdzsKLSAgICAgICAgICAgIGxlbmd0aCA9IHJvd1NwYW47Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBiYXNlID0gY29sdW1uOwotICAgICAgICAgICAgbGVuZ3RoID0g
Y29sdW1uU3BhbjsKLSAgICAgICAgfQotICAgICAgICByYW5nZVN0cmluZy5yZXNldChnX3N0cmR1
cF9wcmludGYoInslZCwgJWR9IiwgYmFzZSwgbGVuZ3RoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHJhbmdlU3RyaW5nLmdldCgpKTsKLX0KLQot
dm9pZCBhbHRlckN1cnJlbnRWYWx1ZShQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBpbnQgZmFj
dG9yKQotewotICAgIGlmICghQVRLX0lTX1ZBTFVFKGVsZW1lbnQuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkb3VibGUgY3VycmVudFZhbHVlOwotICAgIGF0a192YWx1ZV9nZXRfdmFs
dWVfYW5kX3RleHQoQVRLX1ZBTFVFKGVsZW1lbnQuZ2V0KCkpLCAmY3VycmVudFZhbHVlLCBudWxs
cHRyKTsKLQotICAgIGRvdWJsZSBpbmNyZW1lbnQgPSBhdGtfdmFsdWVfZ2V0X2luY3JlbWVudChB
VEtfVkFMVUUoZWxlbWVudC5nZXQoKSkpOwotICAgIGF0a192YWx1ZV9zZXRfdmFsdWUoQVRLX1ZB
TFVFKGVsZW1lbnQuZ2V0KCkpLCBjdXJyZW50VmFsdWUgKyBmYWN0b3IgKiBpbmNyZW1lbnQpOwot
fQotCi1nY2hhciogcmVwbGFjZUNoYXJhY3RlcnNGb3JSZXN1bHRzKGdjaGFyKiBzdHIpCi17Ci0g
ICAgV1RGOjpTdHJpbmcgdVN0cmluZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHIpOwotCi0g
ICAgLy8gVGhlIG9iamVjdCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgaXMgcGFzc2VkIGFsb25nIHRv
IEFUcyBzbyB3ZSBuZWVkIHRvIGJlCi0gICAgLy8gYWJsZSB0byB0ZXN0IGZvciB0aGVpciBwcmVz
ZW5jZSBhbmQgZG8gc28gd2l0aG91dCBjYXVzaW5nIHRlc3QgZmFpbHVyZXMuCi0gICAgdVN0cmlu
Zy5yZXBsYWNlKG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyLCAiPG9iaj4iKTsKLQotICAgIC8v
IFRoZSBwcmVzZW5jZSBvZiBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gYWNjZXNzaWJsZSB0ZXh0IG9m
IGEgc2luZ2xlIG9iamVjdAotICAgIC8vIGlzIGFwcHJvcHJpYXRlLCBidXQgaXQgbWFrZXMgdGVz
dCByZXN1bHRzIChlc3BlY2lhbGx5IHRoZSBhY2Nlc3NpYmxlIHRyZWUpCi0gICAgLy8gaGFyZGVy
IHRvIHJlYWQuCi0gICAgdVN0cmluZy5yZXBsYWNlKCJcbiIsICI8XFxuPiIpOwotCi0gICAgcmV0
dXJuIGdfc3RyZHVwKHVTdHJpbmcudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLWNvbnN0IGdjaGFyKiBy
b2xlVG9TdHJpbmcoQXRrT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQXRrUm9sZSByb2xlID0gYXRr
X29iamVjdF9nZXRfcm9sZShvYmplY3QpOwotCi0gICAgaWYgKHJvbGUgPT0gQVRLX1JPTEVfTEFO
RE1BUkspIHsKLSAgICAgICAgU3RyaW5nIHhtbFJvbGVzVmFsdWUgPSBnZXRBdHRyaWJ1dGVTZXRW
YWx1ZUZvcklkKG9iamVjdCwgT2JqZWN0QXR0cmlidXRlVHlwZSwgInhtbC1yb2xlcyIpOwotICAg
ICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1sUm9sZXNWYWx1ZSwgImJh
bm5lciIpKQotICAgICAgICAgICAgcmV0dXJuIGxhbmRtYXJrU3RyaW5nQmFubmVyOwotICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1sUm9sZXNWYWx1ZSwgImNvbXBs
ZW1lbnRhcnkiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ0NvbXBsZW1lbnRh
cnk7Ci0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh4bWxSb2xlc1Zh
bHVlLCAiY29udGVudGluZm8iKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ0Nv
bnRlbnRpbmZvOwotICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1s
Um9sZXNWYWx1ZSwgImRvYy1hY2tub3dsZWRnbWVudHMiKSkKLSAgICAgICAgICAgIHJldHVybiBs
YW5kbWFya1N0cmluZ1JlZ2lvbjsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKHhtbFJvbGVzVmFsdWUsICJkb2MtYWZ0ZXJ3b3JkIikpCi0gICAgICAgICAgICByZXR1
cm4gbGFuZG1hcmtTdHJpbmdSZWdpb247Ci0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZSh4bWxSb2xlc1ZhbHVlLCAiZG9jLWFwcGVuZGl4IikpCi0gICAgICAgICAgICBy
ZXR1cm4gbGFuZG1hcmtTdHJpbmdSZWdpb247Ci0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZSh4bWxSb2xlc1ZhbHVlLCAiZG9jLWJpYmxpb2dyYXBoeSIpKQotICAgICAg
ICAgICAgcmV0dXJuIGxhbmRtYXJrU3RyaW5nUmVnaW9uOwotICAgICAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1sUm9sZXNWYWx1ZSwgImRvYy1jaGFwdGVyIikpCi0gICAg
ICAgICAgICByZXR1cm4gbGFuZG1hcmtTdHJpbmdSZWdpb247Ci0gICAgICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh4bWxSb2xlc1ZhbHVlLCAiZG9jLWNvbmNsdXNpb24iKSkK
LSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1JlZ2lvbjsKLSAgICAgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFsdWUsICJkb2MtY3JlZGl0cyIp
KQotICAgICAgICAgICAgcmV0dXJuIGxhbmRtYXJrU3RyaW5nUmVnaW9uOwotICAgICAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1sUm9sZXNWYWx1ZSwgImRvYy1lbmRub3Rl
cyIpKQotICAgICAgICAgICAgcmV0dXJuIGxhbmRtYXJrU3RyaW5nUmVnaW9uOwotICAgICAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1sUm9sZXNWYWx1ZSwgImRvYy1lcGls
b2d1ZSIpKQotICAgICAgICAgICAgcmV0dXJuIGxhbmRtYXJrU3RyaW5nUmVnaW9uOwotICAgICAg
ICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1sUm9sZXNWYWx1ZSwgImRvYy1l
cnJhdGEiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1JlZ2lvbjsKLSAgICAg
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFsdWUsICJkb2Mt
Zm9yZXdvcmQiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1JlZ2lvbjsKLSAg
ICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFsdWUsICJk
b2MtZ2xvc3NhcnkiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1JlZ2lvbjsK
LSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFsdWUs
ICJkb2MtZ2xvc3NyZWYiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1JlZ2lv
bjsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFs
dWUsICJkb2MtaW5kZXgiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1JlZ2lv
bjsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFs
dWUsICJkb2MtaW50cm9kdWN0aW9uIikpCi0gICAgICAgICAgICByZXR1cm4gbGFuZG1hcmtTdHJp
bmdSZWdpb247Ci0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh4bWxS
b2xlc1ZhbHVlLCAiZG9jLXBhZ2VsaXN0IikpCi0gICAgICAgICAgICByZXR1cm4gbGFuZG1hcmtT
dHJpbmdSZWdpb247Ci0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh4
bWxSb2xlc1ZhbHVlLCAiZG9jLXBhcnQiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0
cmluZ1JlZ2lvbjsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHht
bFJvbGVzVmFsdWUsICJkb2MtcHJlZmFjZSIpKQotICAgICAgICAgICAgcmV0dXJuIGxhbmRtYXJr
U3RyaW5nUmVnaW9uOwotICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
eG1sUm9sZXNWYWx1ZSwgImRvYy1wcm9sb2d1ZSIpKQotICAgICAgICAgICAgcmV0dXJuIGxhbmRt
YXJrU3RyaW5nUmVnaW9uOwotICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UoeG1sUm9sZXNWYWx1ZSwgImRvYy10b2MiKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFy
a1N0cmluZ1JlZ2lvbjsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KHhtbFJvbGVzVmFsdWUsICJmb3JtIikpCi0gICAgICAgICAgICByZXR1cm4gbGFuZG1hcmtTdHJp
bmdGb3JtOwotICAgICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoeG1sUm9s
ZXNWYWx1ZSwgIm1haW4iKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ01haW47
Ci0gICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh4bWxSb2xlc1ZhbHVl
LCAibmF2aWdhdGlvbiIpKQotICAgICAgICAgICAgcmV0dXJuIGxhbmRtYXJrU3RyaW5nTmF2aWdh
dGlvbjsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVz
VmFsdWUsICJyZWdpb24iKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1JlZ2lv
bjsKLSAgICAgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHhtbFJvbGVzVmFs
dWUsICJzZWFyY2giKSkKLSAgICAgICAgICAgIHJldHVybiBsYW5kbWFya1N0cmluZ1NlYXJjaDsK
LSAgICB9Ci0KLSAgICBzd2l0Y2ggKHJvbGUpIHsKLSAgICBjYXNlIEFUS19ST0xFX0FMRVJUOgot
ICAgICAgICByZXR1cm4gIkFYQWxlcnQiOwotICAgIGNhc2UgQVRLX1JPTEVfRElBTE9HOgotICAg
ICAgICByZXR1cm4gIkFYRGlhbG9nIjsKLSAgICBjYXNlIEFUS19ST0xFX0NBTlZBUzoKLSAgICAg
ICAgcmV0dXJuICJBWENhbnZhcyI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DQVBUSU9OOgotICAgICAg
ICByZXR1cm4gIkFYQ2FwdGlvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DSEVDS19CT1g6Ci0gICAg
ICAgIHJldHVybiAiQVhDaGVja0JveCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9DT0xPUl9DSE9PU0VS
OgotICAgICAgICByZXR1cm4gIkFYQ29sb3JXZWxsIjsKLSAgICBjYXNlIEFUS19ST0xFX0NPTFVN
Tl9IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhDb2x1bW5IZWFkZXIiOwotICAgIGNhc2UgQVRL
X1JPTEVfQ09NQk9fQk9YOgotICAgICAgICByZXR1cm4gIkFYQ29tYm9Cb3giOwotICAgIGNhc2Ug
QVRLX1JPTEVfQ09NTUVOVDoKLSAgICAgICAgcmV0dXJuICJBWENvbW1lbnQiOwotICAgIGNhc2Ug
QVRLX1JPTEVfRE9DVU1FTlRfRlJBTUU6Ci0gICAgICAgIHJldHVybiAiQVhEb2N1bWVudCI7Ci0g
ICAgY2FzZSBBVEtfUk9MRV9ET0NVTUVOVF9XRUI6Ci0gICAgICAgIHJldHVybiAiQVhXZWJBcmVh
IjsKLSAgICBjYXNlIEFUS19ST0xFX0VNQkVEREVEOgotICAgICAgICByZXR1cm4gIkFYRW1iZWRk
ZWQiOwotICAgIGNhc2UgQVRLX1JPTEVfRU5UUlk6Ci0gICAgICAgIHJldHVybiAiQVhUZXh0Rmll
bGQiOwotICAgIGNhc2UgQVRLX1JPTEVfRk9PVEVSOgotICAgICAgICByZXR1cm4gIkFYRm9vdGVy
IjsKLSAgICBjYXNlIEFUS19ST0xFX0ZPUk06Ci0gICAgICAgIHJldHVybiAiQVhGb3JtIjsKLSAg
ICBjYXNlIEFUS19ST0xFX0dST1VQSU5HOgotICAgICAgICByZXR1cm4gIkFYR3JvdXAiOwotICAg
IGNhc2UgQVRLX1JPTEVfSEVBRElORzoKLSAgICAgICAgcmV0dXJuICJBWEhlYWRpbmciOwotICAg
IGNhc2UgQVRLX1JPTEVfSU1BR0U6Ci0gICAgICAgIHJldHVybiAiQVhJbWFnZSI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9JTUFHRV9NQVA6Ci0gICAgICAgIHJldHVybiAiQVhJbWFnZU1hcCI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9JTlZBTElEOgotICAgICAgICByZXR1cm4gIkFYSW52YWxpZCI7Ci0gICAg
Y2FzZSBBVEtfUk9MRV9MQUJFTDoKLSAgICAgICAgcmV0dXJuICJBWExhYmVsIjsKLSAgICBjYXNl
IEFUS19ST0xFX0xFVkVMX0JBUjoKLSAgICAgICAgcmV0dXJuICJBWExldmVsSW5kaWNhdG9yIjsK
LSAgICBjYXNlIEFUS19ST0xFX0xJTks6Ci0gICAgICAgIHJldHVybiAiQVhMaW5rIjsKLSAgICBj
YXNlIEFUS19ST0xFX0xJU1Q6Ci0gICAgICAgIHJldHVybiAiQVhMaXN0IjsKLSAgICBjYXNlIEFU
S19ST0xFX0xJU1RfQk9YOgotICAgICAgICByZXR1cm4gIkFYTGlzdEJveCI7Ci0gICAgY2FzZSBB
VEtfUk9MRV9MSVNUX0lURU06Ci0gICAgICAgIHJldHVybiAiQVhMaXN0SXRlbSI7Ci0gICAgY2Fz
ZSBBVEtfUk9MRV9NRU5VOgotICAgICAgICByZXR1cm4gIkFYTWVudSI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9NRU5VX0JBUjoKLSAgICAgICAgcmV0dXJuICJBWE1lbnVCYXIiOwotICAgIGNhc2UgQVRL
X1JPTEVfTUVOVV9JVEVNOgotICAgICAgICByZXR1cm4gIkFYTWVudUl0ZW0iOwotICAgIGNhc2Ug
QVRLX1JPTEVfTk9USUZJQ0FUSU9OOgotICAgICAgICByZXR1cm4gIkFYTm90aWZpY2F0aW9uIjsK
LSAgICBjYXNlIEFUS19ST0xFX1BBR0VfVEFCOgotICAgICAgICByZXR1cm4gIkFYVGFiIjsKLSAg
ICBjYXNlIEFUS19ST0xFX1BBR0VfVEFCX0xJU1Q6Ci0gICAgICAgIHJldHVybiAiQVhUYWJHcm91
cCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQU5FTDoKLSAgICAgICAgcmV0dXJuICJBWEdyb3VwIjsK
LSAgICBjYXNlIEFUS19ST0xFX1BBUkFHUkFQSDoKLSAgICAgICAgcmV0dXJuICJBWFBhcmFncmFw
aCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QQVNTV09SRF9URVhUOgotICAgICAgICByZXR1cm4gIkFY
UGFzc3dvcmRGaWVsZCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QUk9HUkVTU19CQVI6Ci0gICAgICAg
IHJldHVybiAiQVhQcm9ncmVzc0luZGljYXRvciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9QVVNIX0JV
VFRPTjoKLSAgICAgICAgcmV0dXJuICJBWEJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9SQURJ
T19CVVRUT046Ci0gICAgICAgIHJldHVybiAiQVhSYWRpb0J1dHRvbiI7Ci0gICAgY2FzZSBBVEtf
Uk9MRV9SQURJT19NRU5VX0lURU06Ci0gICAgICAgIHJldHVybiAiQVhSYWRpb01lbnVJdGVtIjsK
LSAgICBjYXNlIEFUS19ST0xFX1JPV19IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb3dIZWFk
ZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfQ0hFQ0tfTUVOVV9JVEVNOgotICAgICAgICByZXR1cm4g
IkFYQ2hlY2tNZW51SXRlbSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9SVUxFUjoKLSAgICAgICAgcmV0
dXJuICJBWFJ1bGVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1NDUk9MTF9CQVI6Ci0gICAgICAgIHJl
dHVybiAiQVhTY3JvbGxCYXIiOwotICAgIGNhc2UgQVRLX1JPTEVfU0NST0xMX1BBTkU6Ci0gICAg
ICAgIHJldHVybiAiQVhTY3JvbGxBcmVhIjsKLSAgICBjYXNlIEFUS19ST0xFX1NFQ1RJT046Ci0g
ICAgICAgIHJldHVybiAiQVhTZWN0aW9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1NFUEFSQVRPUjoK
LSAgICAgICAgcmV0dXJuICJBWFNlcGFyYXRvciI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TTElERVI6
Ci0gICAgICAgIHJldHVybiAiQVhTbGlkZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfU1BJTl9CVVRU
T046Ci0gICAgICAgIHJldHVybiAiQVhTcGluQnV0dG9uIjsKLSAgICBjYXNlIEFUS19ST0xFX1NU
QVRVU0JBUjoKLSAgICAgICAgcmV0dXJuICJBWFN0YXR1c0JhciI7Ci0gICAgY2FzZSBBVEtfUk9M
RV9UQUJMRToKLSAgICAgICAgcmV0dXJuICJBWFRhYmxlIjsKLSAgICBjYXNlIEFUS19ST0xFX1RB
QkxFX0NFTEw6Ci0gICAgICAgIHJldHVybiAiQVhDZWxsIjsKLSAgICBjYXNlIEFUS19ST0xFX1RB
QkxFX0NPTFVNTl9IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhDb2x1bW5IZWFkZXIiOwotICAg
IGNhc2UgQVRLX1JPTEVfVEFCTEVfUk9XOgotICAgICAgICByZXR1cm4gIkFYUm93IjsKLSAgICBj
YXNlIEFUS19ST0xFX1RBQkxFX1JPV19IRUFERVI6Ci0gICAgICAgIHJldHVybiAiQVhSb3dIZWFk
ZXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVE9HR0xFX0JVVFRPTjoKLSAgICAgICAgcmV0dXJuICJB
WFRvZ2dsZUJ1dHRvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UT09MX0JBUjoKLSAgICAgICAgcmV0
dXJuICJBWFRvb2xiYXIiOwotICAgIGNhc2UgQVRLX1JPTEVfVE9PTF9USVA6Ci0gICAgICAgIHJl
dHVybiAiQVhVc2VySW50ZXJmYWNlVG9vbHRpcCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UUkVFOgot
ICAgICAgICByZXR1cm4gIkFYVHJlZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9UUkVFX1RBQkxFOgot
ICAgICAgICByZXR1cm4gIkFYVHJlZUdyaWQiOwotICAgIGNhc2UgQVRLX1JPTEVfVFJFRV9JVEVN
OgotICAgICAgICByZXR1cm4gIkFYVHJlZUl0ZW0iOwotICAgIGNhc2UgQVRLX1JPTEVfV0lORE9X
OgotICAgICAgICByZXR1cm4gIkFYV2luZG93IjsKLSAgICBjYXNlIEFUS19ST0xFX1VOS05PV046
Ci0gICAgICAgIHJldHVybiAiQVhVbmtub3duIjsKLSAgICBjYXNlIEFUS19ST0xFX0FSVElDTEU6
Ci0gICAgICAgIHJldHVybiAiQVhBcnRpY2xlIjsKLSAgICBjYXNlIEFUS19ST0xFX0FVRElPOgot
ICAgICAgICByZXR1cm4gIkFYQXVkaW8iOwotICAgIGNhc2UgQVRLX1JPTEVfQkxPQ0tfUVVPVEU6
Ci0gICAgICAgIHJldHVybiAiQVhCbG9ja3F1b3RlIjsKLSAgICBjYXNlIEFUS19ST0xFX0RFRklO
SVRJT046Ci0gICAgICAgIHJldHVybiAiQVhEZWZpbml0aW9uIjsKLSAgICBjYXNlIEFUS19ST0xF
X0xPRzoKLSAgICAgICAgcmV0dXJuICJBWExvZyI7Ci0gICAgY2FzZSBBVEtfUk9MRV9NQVJRVUVF
OgotICAgICAgICByZXR1cm4gIkFYTWFycXVlZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9NQVRIOgot
ICAgICAgICByZXR1cm4gIkFYTWF0aCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9USU1FUjoKLSAgICAg
ICAgcmV0dXJuICJBWFRpbWVyIjsKLSAgICBjYXNlIEFUS19ST0xFX1ZJREVPOgotICAgICAgICBy
ZXR1cm4gIkFYVmlkZW8iOwotICAgIGNhc2UgQVRLX1JPTEVfREVTQ1JJUFRJT05fTElTVDoKLSAg
ICAgICAgcmV0dXJuICJBWERlc2NyaXB0aW9uTGlzdCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9ERVND
UklQVElPTl9URVJNOgotICAgICAgICByZXR1cm4gIkFYRGVzY3JpcHRpb25UZXJtIjsKLSAgICBj
YXNlIEFUS19ST0xFX0RFU0NSSVBUSU9OX1ZBTFVFOgotICAgICAgICByZXR1cm4gIkFYRGVzY3Jp
cHRpb25WYWx1ZSI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TVEFUSUM6Ci0gICAgICAgIHJldHVybiAi
QVhTdGF0aWMiOwotICAgIGNhc2UgQVRLX1JPTEVfTUFUSF9GUkFDVElPTjoKLSAgICAgICAgcmV0
dXJuICJBWE1hdGhGcmFjdGlvbiI7Ci0gICAgY2FzZSBBVEtfUk9MRV9NQVRIX1JPT1Q6Ci0gICAg
ICAgIHJldHVybiAiQVhNYXRoUm9vdCI7Ci0gICAgY2FzZSBBVEtfUk9MRV9TVUJTQ1JJUFQ6Ci0g
ICAgICAgIHJldHVybiAiQVhTdWJzY3JpcHQiOwotICAgIGNhc2UgQVRLX1JPTEVfU1VQRVJTQ1JJ
UFQ6Ci0gICAgICAgIHJldHVybiAiQVhTdXBlcnNjcmlwdCI7Ci0jaWYgQVRLX0NIRUNLX1ZFUlNJ
T04oMiwgMjUsIDIpCi0gICAgY2FzZSBBVEtfUk9MRV9GT09UTk9URToKLSAgICAgICAgcmV0dXJu
ICJBWEZvb3Rub3RlIjsKLSNlbmRpZgotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsIDMzLCAzKQot
ICAgIGNhc2UgQVRLX1JPTEVfQ09OVEVOVF9ERUxFVElPTjoKLSAgICAgICAgcmV0dXJuICJBWERl
bGV0aW9uIjsKLSAgICBjYXNlIEFUS19ST0xFX0NPTlRFTlRfSU5TRVJUSU9OOgotICAgICAgICBy
ZXR1cm4gIkFYSW5zZXJ0aW9uIjsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8vIFdl
IHdhbnQgdG8gZGlzdGluZ3Vpc2ggQVRLX1JPTEVfVU5LTk9XTiBmcm9tIGEga25vd24gQXRrUm9s
ZSB3aGljaAotICAgICAgICAvLyBvdXIgRFJUIGlzbid0IHByb3Blcmx5IGhhbmRsaW5nLgotICAg
ICAgICByZXR1cm4gIkZJWE1FIG5vdCBpZGVudGlmaWVkIjsKLSAgICB9Ci19Ci0KLVN0cmluZyBz
ZWxlY3RlZFRleHQoQXRrT2JqZWN0KiBhY2Nlc3NpYmxlKQotewotICAgIGlmICghQVRLX0lTX1RF
WFQoYWNjZXNzaWJsZSkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEF0a1RleHQq
IHRleHQgPSBBVEtfVEVYVChhY2Nlc3NpYmxlKTsKLQotICAgIGdpbnQgc3RhcnQsIGVuZDsKLSAg
ICBnX2ZyZWUoYXRrX3RleHRfZ2V0X3NlbGVjdGlvbih0ZXh0LCAwLCAmc3RhcnQsICZlbmQpKTsK
LQotICAgIHJldHVybiBhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0LCBzdGFydCwgZW5kKTsKLX0KLQot
U3RyaW5nIGF0dHJpYnV0ZXNPZkVsZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVu
dCkKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7Ci0KLSAgICBidWlsZGVyLmFwcGVuZChl
bGVtZW50LT5yb2xlKCktPnN0cmluZygpLCAnXG4nKTsKLQotICAgIC8vIEZvciB0aGUgcGFyZW50
IHdlIHByaW50IGl0cyByb2xlIGFuZCBpdHMgbmFtZSwgaWYgYXZhaWxhYmxlLgotICAgIGJ1aWxk
ZXIuYXBwZW5kKCJBWFBhcmVudDogIik7Ci0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKLSAgICBBdGtPYmplY3QqIGF0
a1BhcmVudCA9IHBhcmVudCA/IHBhcmVudC0+cGxhdGZvcm1VSUVsZW1lbnQoKS5nZXQoKSA6IG51
bGxwdHI7Ci0gICAgaWYgKGF0a1BhcmVudCkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChyb2xl
VG9TdHJpbmcoYXRrUGFyZW50KSk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHBhcmVudE5hbWUgPSBh
dGtfb2JqZWN0X2dldF9uYW1lKGF0a1BhcmVudCk7Ci0gICAgICAgIGlmIChwYXJlbnROYW1lICYm
IHBhcmVudE5hbWVbMF0pCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiAiLCBwYXJlbnRO
YW1lKTsKLSAgICB9IGVsc2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIihudWxsKSIpOwotICAg
IGJ1aWxkZXIuYXBwZW5kKCdcbicpOwotCi0gICAgYnVpbGRlci5hcHBlbmQoIkFYQ2hpbGRyZW46
ICIsIGVsZW1lbnQtPmNoaWxkcmVuQ291bnQoKSwgJ1xuJyk7Ci0KLSAgICBidWlsZGVyLmFwcGVu
ZCgiQVhQb3NpdGlvbjogIHsgIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbihlbGVt
ZW50LT54KCksIDYsIEtlZXBUcmFpbGluZ1plcm9zKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIiwg
IiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbihlbGVtZW50LT55KCksIDYsIEtlZXBU
cmFpbGluZ1plcm9zKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIiB9XG4iKTsKLQotICAgIGJ1aWxk
ZXIuYXBwZW5kKCJBWFNpemU6IHsgIiwgRm9ybWF0dGVkTnVtYmVyOjpmaXhlZFByZWNpc2lvbihl
bGVtZW50LT53aWR0aCgpLCA2LCBLZWVwVHJhaWxpbmdaZXJvcykpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKCIsICIsIEZvcm1hdHRlZE51bWJlcjo6Zml4ZWRQcmVjaXNpb24oZWxlbWVudC0+aGVpZ2h0
KCksIDYsIEtlZXBUcmFpbGluZ1plcm9zKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIiB9XG4iKTsK
LQotICAgIFN0cmluZyB0aXRsZSA9IGVsZW1lbnQtPnRpdGxlKCktPnN0cmluZygpOwotICAgIGlm
ICghdGl0bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRpdGxlKTsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGRlc2NyaXB0
aW9uID0gZWxlbWVudC0+ZGVzY3JpcHRpb24oKS0+c3RyaW5nKCk7Ci0gICAgaWYgKCFkZXNjcmlw
dGlvbi5pc0VtcHR5KCkpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGRlc2NyaXB0aW9uLnV0Zjgo
KS5kYXRhKCksICdcbicpOwotCi0gICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+c3RyaW5nVmFs
dWUoKS0+c3RyaW5nKCk7Ci0gICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKHZhbHVlLCAnXG4nKTsKLQotICAgIGJ1aWxkZXIuYXBwZW5kKCJBWEZvY3VzYWJs
ZTogIiwgZWxlbWVudC0+aXNGb2N1c2FibGUoKSwgJ1xuJyk7Ci0gICAgYnVpbGRlci5hcHBlbmQo
IkFYRm9jdXNlZDogIiwgZWxlbWVudC0+aXNGb2N1c2VkKCksICdcbicpOwotICAgIGJ1aWxkZXIu
YXBwZW5kKCJBWFNlbGVjdGFibGU6ICIsIGVsZW1lbnQtPmlzU2VsZWN0YWJsZSgpLCAnXG4nKTsK
LSAgICBidWlsZGVyLmFwcGVuZCgiQVhTZWxlY3RlZDogIiwgZWxlbWVudC0+aXNTZWxlY3RlZCgp
LCAnXG4nKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiQVhNdWx0aVNlbGVjdGFibGU6ICIsIGVsZW1l
bnQtPmlzTXVsdGlTZWxlY3RhYmxlKCksICdcbicpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJBWEVu
YWJsZWQ6ICIsIGVsZW1lbnQtPmlzRW5hYmxlZCgpLCAnXG4nKTsKLSAgICBidWlsZGVyLmFwcGVu
ZCgiQVhFeHBhbmRlZDogIiwgZWxlbWVudC0+aXNFeHBhbmRlZCgpLCAnXG4nKTsKLSAgICBidWls
ZGVyLmFwcGVuZCgiQVhSZXF1aXJlZDogIiwgZWxlbWVudC0+aXNSZXF1aXJlZCgpLCAnXG4nKTsK
LSAgICBidWlsZGVyLmFwcGVuZCgiQVhDaGVja2VkOiAiLCBlbGVtZW50LT5pc0NoZWNrZWQoKSwg
J1xuJyk7Ci0KLSAgICBTdHJpbmcgdXJsID0gZWxlbWVudC0+dXJsKCktPnN0cmluZygpOwotICAg
IGlmICghdXJsLmlzRW1wdHkoKSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodXJsLCAnXG4nKTsK
LQotICAgIC8vIFdlIGFwcGVuZCB0aGUgQVRLIHNwZWNpZmljIGF0dHJpYnV0ZXMgYXMgYSBzaW5n
bGUgbGluZSBhdCB0aGUgZW5kLgotICAgIGJ1aWxkZXIuYXBwZW5kKCJBWFBsYXRmb3JtQXR0cmli
dXRlczogIiwgZ2V0QXRrQXR0cmlidXRlU2V0QXNTdHJpbmcoZWxlbWVudC0+cGxhdGZvcm1VSUVs
ZW1lbnQoKS5nZXQoKSwgT2JqZWN0QXR0cmlidXRlVHlwZSkpOwotCi0gICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLX0KLQotc3RhdGljIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBjcmVh
dGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjb25zdCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+ID4mIGVsZW1lbnRzKQotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAg
ICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
YXR0cmlidXRlc09mRWxlbWVudChjb25zdF9jYXN0PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqPihl
bGVtZW50LmdldCgpKSksICJcbi0tLS0tLS0tLS0tLVxuIik7Ci0gICAgcmV0dXJuIEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1aWxkZXIudG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LX0KLQotc3RhdGljIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBnZXRU
YWJsZVJvd0hlYWRlcnMoQXRrVGFibGUqIGFjY2Vzc2libGUpCi17Ci0gICAgVmVjdG9yPFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IHJvd0hlYWRlcnM7Ci0KLSAgICBpbnQgcm93c0Nv
dW50ID0gYXRrX3RhYmxlX2dldF9uX3Jvd3MoYWNjZXNzaWJsZSk7Ci0gICAgZm9yIChpbnQgcm93
ID0gMDsgcm93IDwgcm93c0NvdW50OyArK3JvdykgewotICAgICAgICBpZiAoQXRrT2JqZWN0KiBo
ZWFkZXIgPSBhdGtfdGFibGVfZ2V0X3Jvd19oZWFkZXIoYWNjZXNzaWJsZSwgcm93KSkKLSAgICAg
ICAgICAgIHJvd0hlYWRlcnMuYXBwZW5kKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZSho
ZWFkZXIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcm93SGVhZGVyczsKLX0KLQotc3RhdGljIFZl
Y3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBnZXRUYWJsZUNvbHVtbkhlYWRl
cnMoQXRrVGFibGUqIGFjY2Vzc2libGUpCi17Ci0gICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50PiA+IGNvbHVtbkhlYWRlcnM7Ci0KLSAgICBpbnQgY29sdW1uc0NvdW50ID0g
YXRrX3RhYmxlX2dldF9uX2NvbHVtbnMoYWNjZXNzaWJsZSk7Ci0gICAgZm9yIChpbnQgY29sdW1u
ID0gMDsgY29sdW1uIDwgY29sdW1uc0NvdW50OyArK2NvbHVtbikgewotICAgICAgICBpZiAoQXRr
T2JqZWN0KiBoZWFkZXIgPSBhdGtfdGFibGVfZ2V0X2NvbHVtbl9oZWFkZXIoYWNjZXNzaWJsZSwg
Y29sdW1uKSkKLSAgICAgICAgICAgIGNvbHVtbkhlYWRlcnMuYXBwZW5kKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShoZWFkZXIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sdW1uSGVh
ZGVyczsKLX0KLQotc3RhdGljIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
PiBnZXRWaXNpYmxlQ2VsbHMoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKLXsKLSAg
ICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gdmlzaWJsZUNlbGxzOwot
Ci0gICAgQXRrVGFibGUqIGFjY2Vzc2libGUgPSBBVEtfVEFCTEUoZWxlbWVudC0+cGxhdGZvcm1V
SUVsZW1lbnQoKS5nZXQoKSk7Ci0gICAgaW50IHJvd3NDb3VudCA9IGF0a190YWJsZV9nZXRfbl9y
b3dzKGFjY2Vzc2libGUpOwotICAgIGludCBjb2x1bW5zQ291bnQgPSBhdGtfdGFibGVfZ2V0X25f
Y29sdW1ucyhhY2Nlc3NpYmxlKTsKLQotICAgIGZvciAoaW50IHJvdyA9IDA7IHJvdyA8IHJvd3ND
b3VudDsgKytyb3cpIHsKLSAgICAgICAgZm9yIChpbnQgY29sdW1uID0gMDsgY29sdW1uIDwgY29s
dW1uc0NvdW50OyArK2NvbHVtbikKLSAgICAgICAgICAgIHZpc2libGVDZWxscy5hcHBlbmQoZWxl
bWVudC0+Y2VsbEZvckNvbHVtbkFuZFJvdyhjb2x1bW4sIHJvdykpOwotICAgIH0KLQotICAgIHJl
dHVybiB2aXNpYmxlQ2VsbHM7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ+PiBjb252ZXJ0R1B0ckFycmF5VG9WZWN0b3IoY29uc3QgR1B0ckFycmF5KiBh
cnJheSkKLXsKLSAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiBjZWxs
czsKLSAgICBmb3IgKGd1aW50IGkgPSAwOyBpIDwgYXJyYXktPmxlbjsgaSsrKSB7Ci0gICAgICAg
IGlmIChBdGtPYmplY3QqIGF0a09iamVjdCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdfcHRy
X2FycmF5X2luZGV4KGFycmF5LCBpKSkpCi0gICAgICAgICAgICBjZWxscy5hcHBlbmQoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKGF0a09iamVjdCkpOwotICAgIH0KLSAgICByZXR1cm4g
Y2VsbHM7Ci19Ci0KLXN0YXRpYyBKU1ZhbHVlUmVmIGNvbnZlcnRUb0pTT2JqZWN0QXJyYXkoY29u
c3QgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4mIGNoaWxkcmVuKQotewot
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZy
YW1lKTsKLQotICAgIHNpemVfdCBlbGVtZW50Q291bnQgPSBjaGlsZHJlbi5zaXplKCk7Ci0gICAg
YXV0byB2YWx1ZUVsZW1lbnRzID0gbWFrZVVuaXF1ZUFycmF5PEpTVmFsdWVSZWY+KGVsZW1lbnRD
b3VudCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7IGkrKykKLSAg
ICAgICAgdmFsdWVFbGVtZW50c1tpXSA9IEpTT2JqZWN0TWFrZShjb250ZXh0LCBjaGlsZHJlbltp
XS0+d3JhcHBlckNsYXNzKCksIGNoaWxkcmVuW2ldLmdldCgpKTsKLQotICAgIHJldHVybiBKU09i
amVjdE1ha2VBcnJheShjb250ZXh0LCBlbGVtZW50Q291bnQsIHZhbHVlRWxlbWVudHMuZ2V0KCks
IG51bGxwdHIpOwotfQotCi1zdGF0aWMgZG91YmxlIHJhbmdlTWluTWF4VmFsdWUoQXRrVmFsdWUq
IGF0a1ZhbHVlLCBSYW5nZUxpbWl0IHJhbmdlTGltaXQpCi17Ci0gICAgQXRrUmFuZ2UqIHJhbmdl
ID0gYXRrX3ZhbHVlX2dldF9yYW5nZShhdGtWYWx1ZSk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBkb3VibGUgcmFuZ2VWYWx1ZSA9IDA7Ci0gICAgc3dpdGNoIChy
YW5nZUxpbWl0KSB7Ci0gICAgY2FzZSBSYW5nZUxpbWl0TWluaW11bToKLSAgICAgICAgcmFuZ2VW
YWx1ZSA9IGF0a19yYW5nZV9nZXRfbG93ZXJfbGltaXQocmFuZ2UpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIFJhbmdlTGltaXRNYXhpbXVtOgotICAgICAgICByYW5nZVZhbHVlID0gYXRrX3Jh
bmdlX2dldF91cHBlcl9saW1pdChyYW5nZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH07Ci0KLSAg
ICBhdGtfcmFuZ2VfZnJlZShyYW5nZSk7Ci0gICAgcmV0dXJuIHJhbmdlVmFsdWU7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlCi0KLUFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKLSAgICA6IG1fZWxlbWVudChlbGVtZW50
KQotewotfQotCi1BY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
KGNvbnN0IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQmIG90aGVyKQotICAgIDogSlNXcmFwcGFibGUo
KQotICAgICwgbV9lbGVtZW50KG90aGVyLm1fZWxlbWVudCkKLXsKLX0KLQotQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6fkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoKQotewotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzRXF1YWwoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogb3RoZXJF
bGVtZW50KQotewotICAgIHJldHVybiBtX2VsZW1lbnQgPT0gb3RoZXJFbGVtZW50LT5wbGF0Zm9y
bVVJRWxlbWVudCgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldENoaWxk
cmVuKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiYgY2hpbGRyZW4pCi17
Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGludCBjb3VudCA9IGNoaWxkcmVuQ291bnQoKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgR1JlZlB0cjxBdGtPYmplY3Q+IGNoaWxkID0g
YWRvcHRHUmVmKGF0a19vYmplY3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2Vs
ZW1lbnQuZ2V0KCkpLCBpKSk7Ci0KLSAgICAgICAgaWYgKCFBVEtfSVNfT0JKRUNUKGNoaWxkLmdl
dCgpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoY2hpbGQuZ2V0KCkpKTsKLSAgICB9Ci19Ci0K
LXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5XaXRoUmFuZ2UoVmVjdG9y
PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+JiBjaGlsZHJlbiwgdW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVt
ZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGVuZCA9IGxvY2F0aW9u
ICsgbGVuZ3RoOwotICAgIGZvciAodW5zaWduZWQgaSA9IGxvY2F0aW9uOyBpIDwgZW5kOyBpKysp
IHsKLSAgICAgICAgR1JlZlB0cjxBdGtPYmplY3Q+IGNoaWxkID0gYWRvcHRHUmVmKGF0a19vYmpl
Y3RfcmVmX2FjY2Vzc2libGVfY2hpbGQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBpKSk7
Ci0KLSAgICAgICAgaWYgKCFBVEtfSVNfT0JKRUNUKGNoaWxkLmdldCgpKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpjcmVhdGUoY2hpbGQuZ2V0KCkpKTsKLSAgICB9Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpjaGlsZHJlbkNvdW50KCkKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9l
bGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYXRrX29iamVj
dF9nZXRfbl9hY2Nlc3NpYmxlX2NoaWxkcmVuKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSk7
Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjplbGVtZW50QXRQb2ludChpbnQgeCwgaW50IHkpCi17Ci0gICAgaWYgKCFBVEtfSVNfQ09N
UE9ORU5UKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
R1JlZlB0cjxBdGtPYmplY3Q+IG9iamVjdEF0UG9pbnQgPSBhZG9wdEdSZWYoYXRrX2NvbXBvbmVu
dF9yZWZfYWNjZXNzaWJsZV9hdF9wb2ludChBVEtfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSks
IHgsIHksIEFUS19YWV9XSU5ET1cpKTsKLSAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Y3JlYXRlKG9iamVjdEF0UG9pbnQgPyBvYmplY3RBdFBvaW50LmdldCgpIDogbV9lbGVtZW50
LmdldCgpKTsKLX0KLQotdW5zaWduZWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW5kZXhPZkNo
aWxkKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFBVEtfSVNf
T0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9y
PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IGNoaWxkcmVuOwotICAgIGdldENoaWxk
cmVuKGNoaWxkcmVuKTsKLQotICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICBpZiAoY2hp
bGRyZW5baV0tPmlzRXF1YWwoZWxlbWVudCkpCi0gICAgICAgICAgICByZXR1cm4gaTsKLQotICAg
IHJldHVybiAwOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIGlmICgh
QVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gPiBjaGlsZHJlbjsK
LSAgICBnZXRDaGlsZHJlbldpdGhSYW5nZShjaGlsZHJlbiwgaW5kZXgsIDEpOwotCi0gICAgaWYg
KGNoaWxkcmVuLnNpemUoKSA9PSAxKQotICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF07Ci0KLSAg
ICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50PiBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXgoQXRrT2JqZWN0KiBlbGVtZW50LCBBdGtS
ZWxhdGlvblR5cGUgcmVsYXRpb25UeXBlLCB1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBpZiAoIUFU
S19JU19PQkpFQ1QoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQXRr
UmVsYXRpb25TZXQqIHJlbGF0aW9uU2V0ID0gYXRrX29iamVjdF9yZWZfcmVsYXRpb25fc2V0KGVs
ZW1lbnQpOwotICAgIGlmICghcmVsYXRpb25TZXQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgQXRrUmVsYXRpb24qIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3NldF9nZXRfcmVsYXRp
b25fYnlfdHlwZShyZWxhdGlvblNldCwgcmVsYXRpb25UeXBlKTsKLSAgICBpZiAoIXJlbGF0aW9u
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdQdHJBcnJheSogdGFyZ2V0TGlzdCA9
IGF0a19yZWxhdGlvbl9nZXRfdGFyZ2V0KHJlbGF0aW9uKTsKLSAgICBpZiAoIXRhcmdldExpc3Qg
fHwgIXRhcmdldExpc3QtPmxlbiB8fCBpbmRleCA+PSB0YXJnZXRMaXN0LT5sZW4pCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgQXRrT2JqZWN0KiB0YXJnZXQgPSBzdGF0aWNfY2FzdDxB
dGtPYmplY3QqPihnX3B0cl9hcnJheV9pbmRleCh0YXJnZXRMaXN0LCBpbmRleCkpOwotICAgIGdf
b2JqZWN0X3VucmVmKHJlbGF0aW9uU2V0KTsKLQotICAgIHJldHVybiB0YXJnZXQgPyBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjcmVhdGUodGFyZ2V0KS5wdHIoKSA6IG51bGxwdHI7Ci19Ci0KLVJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpsaW5r
ZWRVSUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFPd25zRWxlbWVudEF0SW5kZXgodW5z
aWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlFbGVtZW50QXRJbmRleCht
X2VsZW1lbnQuZ2V0KCksIEFUS19SRUxBVElPTl9OT0RFX1BBUkVOVF9PRiwgaW5kZXgpOwotfQot
Ci1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXJpYU93bnNSZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAg
IHJldHVybiBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXgobV9lbGVtZW50LmdldCgpLCBBVEtf
UkVMQVRJT05fTk9ERV9DSElMRF9PRiwgaW5kZXgpOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUZsb3dUb0VsZW1lbnRBdElu
ZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0
SW5kZXgobV9lbGVtZW50LmdldCgpLCBBVEtfUkVMQVRJT05fRkxPV1NfVE8sIGluZGV4KTsKLX0K
LQotUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OmFyaWFGbG93VG9SZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewot
ICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXgobV9lbGVtZW50LmdldCgpLCBB
VEtfUkVMQVRJT05fRkxPV1NfRlJPTSwgaW5kZXgpOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUNvbnRyb2xzRWxlbWVudEF0
SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIGFjY2Vzc2liaWxpdHlFbGVtZW50
QXRJbmRleChtX2VsZW1lbnQuZ2V0KCksIEFUS19SRUxBVElPTl9DT05UUk9MTEVSX0ZPUiwgaW5k
ZXgpOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6YXJpYUNvbnRyb2xzUmVmZXJlbmNpbmdFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBp
bmRleCkKLXsKLSAgICByZXR1cm4gYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4KG1fZWxlbWVu
dC5nZXQoKSwgQVRLX1JFTEFUSU9OX0NPTlRST0xMRURfQlksIGluZGV4KTsKLX0KLQotUmVmUHRy
PEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFMYWJl
bGxlZEJ5RWxlbWVudEF0SW5kZXgodW5zaWduZWQgaW5kZXgpCi17Ci0gICAgcmV0dXJuIGFjY2Vz
c2liaWxpdHlFbGVtZW50QXRJbmRleChtX2VsZW1lbnQuZ2V0KCksIEFUS19SRUxBVElPTl9MQUJF
TExFRF9CWSwgaW5kZXgpOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUxhYmVsbGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRBdElu
ZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0
SW5kZXgobV9lbGVtZW50LmdldCgpLCBBVEtfUkVMQVRJT05fTEFCRUxfRk9SLCBpbmRleCk7Ci19
Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphcmlhRGVzY3JpYmVkQnlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICBy
ZXR1cm4gYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgQVRLX1JF
TEFUSU9OX0RFU0NSSUJFRF9CWSwgaW5kZXgpOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURlc2NyaWJlZEJ5UmVmZXJlbmNp
bmdFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkKLXsKLSAgICByZXR1cm4gYWNjZXNzaWJp
bGl0eUVsZW1lbnRBdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgQVRLX1JFTEFUSU9OX0RFU0NSSVBU
SU9OX0ZPUiwgaW5kZXgpOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURldGFpbHNFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBp
bmRleCkKLXsKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNSwgMikKLSAgICByZXR1cm4gYWNj
ZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgQVRLX1JFTEFUSU9OX0RF
VEFJTFMsIGluZGV4KTsKLSNlbmRpZgotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8
QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYURldGFp
bHNSZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotI2lmIEFUS19D
SEVDS19WRVJTSU9OKDIsIDI1LCAyKQotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0
SW5kZXgobV9lbGVtZW50LmdldCgpLCBBVEtfUkVMQVRJT05fREVUQUlMU19GT1IsIGluZGV4KTsK
LSNlbmRpZgotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRB
dEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsIDI1LCAy
KQotICAgIHJldHVybiBhY2Nlc3NpYmlsaXR5RWxlbWVudEF0SW5kZXgobV9lbGVtZW50LmdldCgp
LCBBVEtfUkVMQVRJT05fRVJST1JfTUVTU0FHRSwgaW5kZXgpOwotI2VuZGlmCi0gICAgcmV0dXJu
IG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjphcmlhRXJyb3JNZXNzYWdlUmVmZXJlbmNpbmdFbGVtZW50QXRJbmRleCh1
bnNpZ25lZCBpbmRleCkKLXsKLSNpZiBBVEtfQ0hFQ0tfVkVSU0lPTigyLCAyNSwgMikKLSAgICBy
ZXR1cm4gYWNjZXNzaWJpbGl0eUVsZW1lbnRBdEluZGV4KG1fZWxlbWVudC5nZXQoKSwgQVRLX1JF
TEFUSU9OX0VSUk9SX0ZPUiwgaW5kZXgpOwotI2VuZGlmCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpkaXNjbG9zZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4KQotewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0F0SW5kZXgodW5zaWduZWQgaW5k
ZXgpCi17Ci0gICAgLy8gQVRLIGRvZXNuJ3QgaGF2ZSBBUEkgdG8gZ2V0IGFuIGFjY2Vzc2libGUg
cm93IGJ5IGluZGV4IGRpcmVjdGx5LiBJdCBkb2VzLCBob3dldmVyLCBoYXZlCi0gICAgLy8gQVBJ
IHRvIGdldCBjZWxscyBpbiB0aGUgcm93IHNwZWNpZmllZCBieSBpbmRleC4gVGhlIHBhcmVudCBv
ZiBhIGNlbGwgc2hvdWxkIGJlIHRoZSByb3cuCi0gICAgQXRrVGFibGUqIGF4VGFibGUgPSBBVEtf
VEFCTEUobV9lbGVtZW50LmdldCgpKTsKLSAgICB1bnNpZ25lZCBuQ29sdW1ucyA9IGNvbHVtbkNv
dW50KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBjb2wgPSAwOyBjb2wgPCBuQ29sdW1uczsgY29sKysp
IHsKLSAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgY2VsbCBpbiB0aGlzIHJvdyB0aGF0IG9ubHkg
c3BhbnMgb25lIHJvdy4KLSAgICAgICAgaWYgKGF0a190YWJsZV9nZXRfcm93X2V4dGVudF9hdChh
eFRhYmxlLCBpbmRleCwgY29sKSA9PSAxKSB7Ci0gICAgICAgICAgICBBdGtPYmplY3QqIGNlbGwg
PSBhdGtfdGFibGVfcmVmX2F0KGF4VGFibGUsIGluZGV4LCBjb2wpOwotICAgICAgICAgICAgcmV0
dXJuIGNlbGwgPyBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoYXRrX29iamVjdF9nZXRf
cGFyZW50KGNlbGwpKS5wdHIoKSA6IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkQ2hpbGRBdEluZGV4KHVuc2lnbmVkIGluZGV4KSBj
b25zdAotewotICAgIGlmICghQVRLX1NFTEVDVElPTihtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdSZWZQdHI8QXRrT2JqZWN0PiBjaGlsZCA9IGFkb3B0
R1JlZihhdGtfc2VsZWN0aW9uX3JlZl9zZWxlY3Rpb24oQVRLX1NFTEVDVElPTihtX2VsZW1lbnQu
Z2V0KCkpLCBpbmRleCkpOwotICAgIHJldHVybiBjaGlsZCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNyZWF0ZShjaGlsZC5nZXQoKSkucHRyKCkgOiBudWxscHRyOwotfQotCi11bnNpZ25lZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZENoaWxkcmVuQ291bnQoKSBjb25zdAotewot
ICAgIGlmICghQVRLX0lTX1NFTEVDVElPTihtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gYXRrX3NlbGVjdGlvbl9nZXRfc2VsZWN0aW9uX2NvdW50KEFUS19T
RUxFQ1RJT04obV9lbGVtZW50LmdldCgpKSk7Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFJvd0F0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBudWxscHRy
OwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6dGl0bGVVSUVsZW1lbnQoKQotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1l
bnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEF0a1JlbGF0aW9uU2V0
KiBzZXQgPSBhdGtfb2JqZWN0X3JlZl9yZWxhdGlvbl9zZXQoQVRLX09CSkVDVChtX2VsZW1lbnQu
Z2V0KCkpKTsKLSAgICBpZiAoIXNldCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBB
dGtPYmplY3QqIHRhcmdldCA9IG51bGxwdHI7Ci0gICAgaW50IGNvdW50ID0gYXRrX3JlbGF0aW9u
X3NldF9nZXRfbl9yZWxhdGlvbnMoc2V0KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50
OyBpKyspIHsKLSAgICAgICAgQXRrUmVsYXRpb24qIHJlbGF0aW9uID0gYXRrX3JlbGF0aW9uX3Nl
dF9nZXRfcmVsYXRpb24oc2V0LCBpKTsKLSAgICAgICAgaWYgKGF0a19yZWxhdGlvbl9nZXRfcmVs
YXRpb25fdHlwZShyZWxhdGlvbikgPT0gQVRLX1JFTEFUSU9OX0xBQkVMTEVEX0JZKSB7Ci0gICAg
ICAgICAgICBHUHRyQXJyYXkqIHRhcmdldExpc3QgPSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChy
ZWxhdGlvbik7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0TGlzdC0+bGVuKQotICAgICAgICAgICAg
ICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdfcHRyX2FycmF5X2luZGV4KHRh
cmdldExpc3QsIDApKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGdfb2JqZWN0X3VucmVmKHNl
dCk7Ci0gICAgcmV0dXJuIHRhcmdldCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZSh0
YXJnZXQpLnB0cigpIDogbnVsbHB0cjsKLX0KLQotUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmVudEVsZW1lbnQoKQotewotICAgIGlmICgh
QVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIEF0a09iamVjdCogcGFyZW50ID0gYXRrX29iamVjdF9nZXRfcGFyZW50KEFUS19PQkpF
Q1QobV9lbGVtZW50LmdldCgpKSk7Ci0gICAgcmV0dXJuIHBhcmVudCA/IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmNyZWF0ZShwYXJlbnQpLnB0cigpIDogbnVsbHB0cjsKLX0KLQotUmVmUHRyPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRpc2Nsb3NlZEJ5
Um93KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRy
aWJ1dGVzT2ZMaW5rZWRVSUVsZW1lbnRzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZE
b2N1bWVudExpbmtzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZDaGlsZHJlbigpCi17
Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgVmVjdG9yPFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiA+IGNoaWxkcmVuOwotICAgIGdldENoaWxkcmVuKGNo
aWxkcmVuKTsKLQotICAgIHJldHVybiBjcmVhdGVTdHJpbmdXaXRoQXR0cmlidXRlcyhjaGlsZHJl
bik7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjphbGxBdHRyaWJ1dGVzKCkKLXsKLSAgICBpZiAoIUFUS19JU19PQkpFQ1QobV9lbGVtZW50Lmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7
Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYXR0cmlidXRlc09m
RWxlbWVudCh0aGlzKS51dGY4KCkuZGF0YSgpKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ0Rlc2NyaXB0aW9uT2ZBdHRyaWJ1dGVW
YWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAot
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5nQXR0cmli
dXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIGlmICghQVRLX0lTX09CSkVD
VChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKLQotICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVOYW1lID0gY29yZUF0dHJp
YnV0ZVRvQXRrQXR0cmlidXRlKGF0dHJpYnV0ZSk7Ci0KLSAgICAvLyBUaGUgdmFsdWUgb2YgQVhT
ZWxlY3RlZFRleHQgaXMgbm90IGV4cG9zZWQgdGhyb3VnaCBhbnkgQXRrQXR0cmlidXRlLgotICAg
IGlmIChhdGtBdHRyaWJ1dGVOYW1lID09ICJBWFNlbGVjdGVkVGV4dCIpIHsKLSAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IHNlbGVjdGVkVGV4dChtX2VsZW1lbnQuZ2V0KCkpOwotICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIH0KLQotICAgIC8vIFRyeSBvYmplY3QgYXR0cmlidXRlcyBiZWZvcmUgdGV4dCBhdHRyaWJ1
dGVzLgotICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9y
SWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCBhdGtB
dHRyaWJ1dGVOYW1lKTsKLQotICAgIC8vIFRyeSB0ZXh0IGF0dHJpYnV0ZXMgaWYgdGhlIHJlcXVl
c3RlZCBvbmUgd2FzIG5vdCBmb3VuZCBhbmQgd2UgaGF2ZSBhbiBBdGtUZXh0IG9iamVjdC4KLSAg
ICBpZiAoYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpICYmIEFUS19JU19URVhUKG1fZWxlbWVudC5n
ZXQoKSkpCi0gICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJ
ZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIFRleHRBdHRyaWJ1dGVUeXBlLCBhdGtBdHRy
aWJ1dGVOYW1lKTsKLQotICAgIC8vIEFkZGl0aW9uYWwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQg
dGhlIGV4cG9zdXJlIG9mIHRoZSBzdGF0ZSBBVEtfU1RBVEVfSU5WQUxJRF9FTlRSWQotICAgIC8v
IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZXhwb3N1cmUgb2YgYXJpYS1pbnZhbGlkIGFzIGEgdGV4
dCBhdHRyaWJ1dGUsIGlmIHByZXNlbnQuCi0gICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUgPT0gYXR0
cmlidXRlc01hcCgpW0ludmFsaWROYW1lSW5kZXhdLmF0a0RvbWFpbikgewotICAgICAgICBib29s
IGlzSW52YWxpZFN0YXRlID0gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtf
U1RBVEVfSU5WQUxJRF9FTlRSWSk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoaXNJ
bnZhbGlkU3RhdGUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLQotICAgICAgICAvLyBJZiB0aGUgdGV4
dCBhdHRyaWJ1dGUgd2FzIHRoZXJlLCBjaGVjayB0aGF0IGl0J3MgY29uc2lzdGVudCB3aXRoCi0g
ICAgICAgIC8vIHdoYXQgdGhlIHN0YXRlIHNheXMgb3IgZm9yY2UgdGhlIHRlc3QgdG8gZmFpbCBv
dGhlcndpc2UuCi0gICAgICAgIGJvb2wgaXNBcmlhSW52YWxpZCA9IGF0dHJpYnV0ZVZhbHVlICE9
ICJmYWxzZSI7Ci0gICAgICAgIGlmIChpc0ludmFsaWRTdGF0ZSAhPSBpc0FyaWFJbnZhbGlkKQot
ICAgICAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF0dHJpYnV0
ZVZhbHVlLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKQotewotICAgIGlm
ICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIFN0cmluZyBhdGtBdHRyaWJ1dGVOYW1lID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRl
KGF0dHJpYnV0ZSk7Ci0gICAgaWYgKGF0a0F0dHJpYnV0ZU5hbWUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lID09ICJzZXRzaXplIiB8fCBh
dGtBdHRyaWJ1dGVOYW1lID09ICJwb3NpbnNldCIpIHsKLSAgICAgICAgU3RyaW5nIGF0dHJpYnV0
ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5n
ZXQoKSksIE9iamVjdEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5hbWUpOwotICAgICAgICBp
ZiAoIWF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGVWYWx1ZS50b0RvdWJsZSgpOwotICAgIH0KLQotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lLnN0
YXJ0c1dpdGgoInJvdyIpIHx8IGF0a0F0dHJpYnV0ZU5hbWUuc3RhcnRzV2l0aCgiY29sIikpIHsK
LSAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJ
ZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIE9iamVjdEF0dHJpYnV0ZVR5cGUsIGF0a0F0
dHJpYnV0ZU5hbWUpOwotICAgICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIHJldHVybiBwYXJzZUludGVnZXJBbGxvd2luZ1RyYWlsaW5nSnVuazxpbnQ+KGF0
dHJpYnV0ZVZhbHVlKS52YWx1ZV9vcigwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmN1cnJlbnRT
dGF0ZVZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotSlNWYWx1ZVJl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6cm93SGVhZGVycygpIGNvbnN0Ci17Ci0gICAgaWYgKEFUS19JU19UQUJMRShtX2VsZW1lbnQu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gY29udmVydFRvSlNPYmplY3RBcnJheShnZXRUYWJsZVJv
d0hlYWRlcnMoQVRLX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpKTsKLQotICAgIFZlY3RvcjxSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGhlYWRlcnM7Ci0gICAgaWYgKCFBVEtfSVNfVEFC
TEVfQ0VMTChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gY29udmVydFRvSlNPYmpl
Y3RBcnJheShoZWFkZXJzKTsKLQotICAgIGlmIChHUmVmUHRyPEdQdHJBcnJheT4gYXJyYXkgPSBh
ZG9wdEdSZWYoYXRrX3RhYmxlX2NlbGxfZ2V0X3Jvd19oZWFkZXJfY2VsbHMoQVRLX1RBQkxFX0NF
TEwobV9lbGVtZW50LmdldCgpKSkpKQotICAgICAgICBoZWFkZXJzID0gY29udmVydEdQdHJBcnJh
eVRvVmVjdG9yKGFycmF5LmdldCgpKTsKLSAgICByZXR1cm4gY29udmVydFRvSlNPYmplY3RBcnJh
eShoZWFkZXJzKTsKLX0KLQotSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpjb2x1
bW5IZWFkZXJzKCkgY29uc3QKLXsKLSAgICBpZiAoQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU09iamVjdEFycmF5KGdldFRhYmxlQ29sdW1u
SGVhZGVycyhBVEtfVEFCTEUobV9lbGVtZW50LmdldCgpKSkpOwotCi0gICAgVmVjdG9yPFJlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4gaGVhZGVyczsKLSAgICBpZiAoIUFUS19JU19UQUJM
RV9DRUxMKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBjb252ZXJ0VG9KU09iamVj
dEFycmF5KGhlYWRlcnMpOwotCi0gICAgaWYgKEdSZWZQdHI8R1B0ckFycmF5PiBhcnJheSA9IGFk
b3B0R1JlZihhdGtfdGFibGVfY2VsbF9nZXRfY29sdW1uX2hlYWRlcl9jZWxscyhBVEtfVEFCTEVf
Q0VMTChtX2VsZW1lbnQuZ2V0KCkpKSkpCi0gICAgICAgIGhlYWRlcnMgPSBjb252ZXJ0R1B0ckFy
cmF5VG9WZWN0b3IoYXJyYXkuZ2V0KCkpOwotICAgIHJldHVybiBjb252ZXJ0VG9KU09iamVjdEFy
cmF5KGhlYWRlcnMpOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0
cmlidXRlKSBjb25zdAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIEFUSyBkb2VzIG5vdCBoYXZlIHRo
aXMgQVBJLiBTbyB3ZSdyZSAiZmFraW5nIGl0IiBoZXJlIG9uIGEgY2FzZS1ieS1jYXNlIGJhc2lz
LgotICAgIFN0cmluZyBhdHRyaWJ1dGVTdHJpbmcgPSBqc1N0cmluZ1RvV1RGU3RyaW5nKGF0dHJp
YnV0ZSk7Ci0gICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JKRUNU
KG1fZWxlbWVudC5nZXQoKSkpOwotICAgIGlmIChyb2xlID09IEFUS19ST0xFX1NQSU5fQlVUVE9O
ICYmIGNvbnN0X2Nhc3Q8QWNjZXNzaWJpbGl0eVVJRWxlbWVudCo+KHRoaXMpLT5jaGlsZHJlbkNv
dW50KCkgPT0gMikgewotICAgICAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWERlY3JlbWVu
dEJ1dHRvbiIpCi0gICAgICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Kj4odGhpcyktPmNoaWxkQXRJbmRleCgwKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZVN0
cmluZyA9PSAiQVhJbmNyZW1lbnRCdXR0b24iKQotICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8QWNjZXNzaWJpbGl0eVVJRWxlbWVudCo+KHRoaXMpLT5jaGlsZEF0SW5kZXgoMSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6Ym9vbEF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKLXsKLSAgICBpZiAo
IUFUS19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgU3RyaW5nIGF0dHJpYnV0ZVN0cmluZyA9IGpzU3RyaW5nVG9XVEZTdHJpbmcoYXR0cmli
dXRlKTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEVsZW1lbnRCdXN5IikKLSAgICAg
ICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX0JV
U1kpOwotICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYQ2hlY2tlZCIpCi0gICAgICAgIHJl
dHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9DSEVDS0VE
KTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEVuYWJsZWQiKQotICAgICAgICByZXR1
cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RBVEVfRU5BQkxFRCk7
Ci0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhFeHBhbmRlZCIpCi0gICAgICAgIHJldHVy
biBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9FWFBBTkRFRCk7
Ci0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhGb2N1c2VkIikKLSAgICAgICAgcmV0dXJu
IGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTRUQpOwot
ICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYSW52YWxpZCIpCi0gICAgICAgIHJldHVybiBj
aGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9JTlZBTElEKTsKLSAg
ICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWE1vZGFsIikKLSAgICAgICAgcmV0dXJuIGNoZWNr
RWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX01PREFMKTsKLSAgICBpZiAo
YXR0cmlidXRlU3RyaW5nID09ICJBWE11bHRpU2VsZWN0YWJsZSIpCi0gICAgICAgIHJldHVybiBj
aGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9NVUxUSVNFTEVDVEFC
TEUpOwotICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYUmVxdWlyZWQiKQotICAgICAgICBy
ZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RBVEVfUkVRVUlS
RUQpOwotICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYU2VsZWN0ZWQiKQotICAgICAgICBy
ZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RBVEVfU0VMRUNU
RUQpOwotICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgPT0gIkFYU3VwcG9ydHNBdXRvQ29tcGxldGlv
biIpCi0gICAgICAgIHJldHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFU
S19TVEFURV9TVVBQT1JUU19BVVRPQ09NUExFVElPTik7Ci0gICAgaWYgKGF0dHJpYnV0ZVN0cmlu
ZyA9PSAiQVhWaXNpdGVkIikKLSAgICAgICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxl
bWVudC5nZXQoKSwgQVRLX1NUQVRFX1ZJU0lURUQpOwotCi0gICAgaWYgKGF0dHJpYnV0ZVN0cmlu
ZyA9PSAiQVhJbnRlcmZhY2VUYWJsZSIpCi0gICAgICAgIHJldHVybiBBVEtfSVNfVEFCTEUobV9l
bGVtZW50LmdldCgpKTsKLSAgICBpZiAoYXR0cmlidXRlU3RyaW5nID09ICJBWEludGVyZmFjZVRh
YmxlQ2VsbCIpCi0gICAgICAgIHJldHVybiBBVEtfSVNfVEFCTEVfQ0VMTChtX2VsZW1lbnQuZ2V0
KCkpOwotCi0gICAgaWYgKGF0dHJpYnV0ZVN0cmluZyA9PSAiQVhBUklBQXRvbWljIikgewotICAg
ICAgICBTdHJpbmcgYXRrQXR0cmlidXRlID0gY29yZUF0dHJpYnV0ZVRvQXRrQXR0cmlidXRlKGF0
dHJpYnV0ZSk7Ci0gICAgICAgIHJldHVybiBnZXRBdHRyaWJ1dGVTZXRWYWx1ZUZvcklkKEFUS19P
QkpFQ1QobV9lbGVtZW50LmdldCgpKSwgT2JqZWN0QXR0cmlidXRlVHlwZSwgYXRrQXR0cmlidXRl
KSA9PSAidHJ1ZSI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmlzQXR0cmlidXRlU2V0dGFibGUoSlNTdHJpbmdSZWYgYXR0cmli
dXRlKQotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgYXR0cmlidXRlU3RyaW5nID0ganNTdHJpbmdU
b1dURlN0cmluZyhhdHRyaWJ1dGUpOwotICAgIGlmIChhdHRyaWJ1dGVTdHJpbmcgIT0gIkFYVmFs
dWUiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBBVEsgZG9lcyBub3QgaGF2ZSBh
IHNpbmdsZSBzdGF0ZSBvciBwcm9wZXJ0eSB0byBpbmRpY2F0ZSB3aGV0aGVyIG9yIG5vdCB0aGUg
dmFsdWUKLSAgICAvLyBvZiBhbiBhY2Nlc3NpYmxlIG9iamVjdCBjYW4gYmUgc2V0LiBBVHMgbG9v
ayBhdCBzZXZlcmFsIHN0YXRlcyBhbmQgcHJvcGVydGllcyBiYXNlZAotICAgIC8vIG9uIHRoZSB0
eXBlIG9mIG9iamVjdC4gSWYgbm90aGluZyBleHBsaWNpdGx5IGluZGljYXRlcyB0aGUgdmFsdWUg
Y2FuIG9yIGNhbm5vdCBiZQotICAgIC8vIHNldCwgQVRzIG1ha2Ugcm9sZS0gYW5kIGludGVyZmFj
ZS1iYXNlZCBkZWNpc2lvbnMuIFdlJ2xsIGRvIHNvbWV0aGluZyBzaW1pbGFyIGhlcmUuCi0KLSAg
ICAvLyBUaGlzIHN0YXRlIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQgb25seSBmb3IgdGV4dCB3
aWRnZXRzIGFuZCBjb250ZW50ZWRpdGFibGUgZWxlbWVudHMuCi0gICAgaWYgKGNoZWNrRWxlbWVu
dFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX0VESVRBQkxFKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlzIHN0YXRlIGlzIGFwcGxpY2FibGUgdG8gY2hlY2tib3hl
cywgcmFkaW9idXR0b25zLCBzd2l0Y2hlcywgZXRjLgotICAgIGlmIChjaGVja0VsZW1lbnRTdGF0
ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9DSEVDS0FCTEUpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIC8vIFRoaXMgc3RhdGUgaXMgZXhwZWN0ZWQgdG8gYmUgcHJlc2VudCBvbmx5
IGZvciBjb250cm9scyBhbmQgb25seSBpZiBleHBsaWNpdGx5IHNldC4KLSAgICBpZiAoY2hlY2tF
bGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RBVEVfUkVBRF9PTkxZKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2UgZXhwb3NlIGFuIG9iamVjdCBhdHRyaWJ1dGUg
dG8gQVRzIHdoZW4gdGhlcmUgaXMgYW4gYXV0aG9yLXByb3ZpZGVkIEFSSUEgcHJvcGVydHkKLSAg
ICAvLyBhbmQgYWxzbyB3aGVuIHRoZXJlIGlzIGEgc3VwcG9ydGVkIEFSSUEgcm9sZSBidXQgbm8g
YXV0aG9yLXByb3ZpZGVkIHZhbHVlLgotICAgIFN0cmluZyBpc1JlYWRPbmx5ID0gZ2V0QXR0cmli
dXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIE9iamVjdEF0dHJp
YnV0ZVR5cGUsICJyZWFkb25seSIpOwotICAgIGlmICghaXNSZWFkT25seS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBpc1JlYWRPbmx5ID09ICJ0cnVlIiA/IGZhbHNlIDogdHJ1ZTsKLQotICAg
IC8vIElmIHdlIGhhdmUgYSBuYXRpdmUgbGlzdGJveCBvciBjb21ib2JveCBhbmQgdGhlIHZhbHVl
IGNhbiBiZSBzZXQsIHRoZSBvcHRpb25zIHNob3VsZAotICAgIC8vIGhhdmUgQVRLX1NUQVRFX1NF
TEVDVEFCTEUuCi0gICAgQXRrUm9sZSByb2xlID0gYXRrX29iamVjdF9nZXRfcm9sZShBVEtfT0JK
RUNUKG1fZWxlbWVudC5nZXQoKSkpOwotICAgIGlmIChyb2xlID09IEFUS19ST0xFX0xJU1RfQk9Y
IHx8IHJvbGUgPT0gQVRLX1JPTEVfQ09NQk9fQk9YKSB7Ci0gICAgICAgIGlmIChHUmVmUHRyPEF0
a09iamVjdD4gY2hpbGQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfYWNjZXNzaWJsZV9jaGls
ZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIDApKSkgewotICAgICAgICAgICAgaWYgKGF0
a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChjaGlsZC5nZXQoKSkpID09IEFUS19ST0xFX01F
TlUpCi0gICAgICAgICAgICAgICAgY2hpbGQgPSBhZG9wdEdSZWYoYXRrX29iamVjdF9yZWZfYWNj
ZXNzaWJsZV9jaGlsZChBVEtfT0JKRUNUKGNoaWxkLmdldCgpKSwgMCkpOwotICAgICAgICAgICAg
cmV0dXJuIGNoaWxkICYmIGNoZWNrRWxlbWVudFN0YXRlKGNoaWxkLmdldCgpLCBBVEtfU1RBVEVf
U0VMRUNUQUJMRSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgbmF0
aXZlIGVsZW1lbnQgd2hpY2ggZXhwb3NlcyBhIHJhbmdlIHdob3NlIHZhbHVlIGNhbiBiZSBzZXQs
IGl0IHNob3VsZAotICAgIC8vIGJlIGZvY3VzYWJsZSBhbmQgaGF2ZSBhIHRydWUgcmFuZ2UuCi0g
ICAgaWYgKEFUS19JU19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpICYmIGNoZWNrRWxlbWVudFN0YXRl
KG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX0ZPQ1VTQUJMRSkpCi0gICAgICAgIHJldHVybiBt
aW5WYWx1ZSgpICE9IG1heFZhbHVlKCk7Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNBdHRyaWJ1dGVTdXBwb3J0ZWQoSlNTdHJpbmdSZWYg
YXR0cmlidXRlKQotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTdHJpbmcgYXRrQXR0cmlidXRlTmFtZSA9IGNv
cmVBdHRyaWJ1dGVUb0F0a0F0dHJpYnV0ZShhdHRyaWJ1dGUpOwotICAgIGlmIChhdGtBdHRyaWJ1
dGVOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gSW4gQVRL
LCAiYnVzeSIgaXMgYSBzdGF0ZSBhbmQgaXMgc3VwcG9ydGVkIG9uIGFsbCBBdGtPYmplY3QgaW5z
dGFuY2VzLgotICAgIGlmIChhdGtBdHRyaWJ1dGVOYW1lID09ICJidXN5IikKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICAvLyBGb3Igbm93LCBhbiBhdHRyaWJ1dGUgaXMgc3VwcG9ydGVkIHdo
ZXRoZXIgaXQncyBleHBvc2VkIGFzIGEgb2JqZWN0IG9yIGEgdGV4dCBhdHRyaWJ1dGUuCi0gICAg
U3RyaW5nIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JK
RUNUKG1fZWxlbWVudC5nZXQoKSksIE9iamVjdEF0dHJpYnV0ZVR5cGUsIGF0a0F0dHJpYnV0ZU5h
bWUpOwotICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS5pc0VtcHR5KCkpCi0gICAgICAgIGF0dHJpYnV0
ZVZhbHVlID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJZChBVEtfT0JKRUNUKG1fZWxlbWVudC5n
ZXQoKSksIFRleHRBdHRyaWJ1dGVUeXBlLCBhdGtBdHRyaWJ1dGVOYW1lKTsKLQotICAgIC8vIFdo
ZW4gdGhlIGFyaWEtbGl2ZSB2YWx1ZSBpcyAib2ZmIiwgd2UgZXhwb3NlIHRoYXQgdmFsdWUgdmlh
IHRoZSAibGl2ZSIgb2JqZWN0IGF0dHJpYnV0ZS4KLSAgICBpZiAoYXRrQXR0cmlidXRlTmFtZSA9
PSAibGl2ZSIgJiYgYXR0cmlidXRlVmFsdWUgPT0gIm9mZiIpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiAhYXR0cmlidXRlVmFsdWUuaXNFbXB0eSgpOwotfQotCi1KU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYW1ldGVyaXplZEF0
dHJpYnV0ZU5hbWVzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpyb2xlKCkKLXsKLSAgICBpZiAoIUFUS19J
U19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBHVW5pcXVlUHRyPGNoYXI+IHJvbGVTdHJpbmdX
aXRoUHJlZml4KGdfc3RyZHVwX3ByaW50ZigiQVhSb2xlOiAlcyIsIHJvbGVUb1N0cmluZyhBVEtf
T0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpKSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHJvbGVTdHJpbmdXaXRoUHJlZml4LmdldCgpKTsKLX0KLQotSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1YnJvbGUoKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJvbGVEZXNjcmlwdGlvbigpCi17Ci0gICAgU3RyaW5nIHJvbGVEZXNjcmlwdGlv
biA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkp
LCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAicm9sZWRlc2NyaXB0aW9uIik7Ci0gICAgR1VuaXF1ZVB0
cjxnY2hhcj4gYXhSb2xlRGVzY3JpcHRpb24oZ19zdHJkdXBfcHJpbnRmKCJBWFJvbGVEZXNjcmlw
dGlvbjogJXMiLCByb2xlRGVzY3JpcHRpb24udXRmOCgpLmRhdGEoKSkpOwotCi0gICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4Um9sZURlc2NyaXB0aW9uLmdldCgpKTsK
LX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNv
bXB1dGVkUm9sZVN0cmluZygpCi17Ci0gICAgU3RyaW5nIHJvbGUgPSBnZXRBdHRyaWJ1dGVTZXRW
YWx1ZUZvcklkKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSwgT2JqZWN0QXR0cmlidXRlVHlw
ZSwgImNvbXB1dGVkLXJvbGUiKTsKLSAgICBpZiAoIXJvbGUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocm9sZS51dGY4KCkuZGF0YSgpKTsK
LQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1K
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGl0bGUoKQot
ewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIGNvbnN0IGdjaGFy
KiBuYW1lID0gYXRrX29iamVjdF9nZXRfbmFtZShBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkp
OwotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IGF4VGl0bGUoZ19zdHJkdXBfcHJpbnRmKCJBWFRpdGxl
OiAlcyIsIG5hbWUgPyBuYW1lIDogIiIpKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhheFRpdGxlLmdldCgpKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdS
ZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmRlc2NyaXB0aW9uKCkKLXsKLSAgICBpZiAoIUFU
S19JU19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBjb25zdCBnY2hhciogZGVzY3JpcHRpb24g
PSBhdGtfb2JqZWN0X2dldF9kZXNjcmlwdGlvbihBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkp
OwotICAgIGlmICghZGVzY3JpcHRpb24pCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hhcj4gYXhEZXNjKGdfc3Ry
ZHVwX3ByaW50ZigiQVhEZXNjcmlwdGlvbjogJXMiLCBkZXNjcmlwdGlvbikpOwotCi0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGF4RGVzYy5nZXQoKSk7Ci19Ci0KLUpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpvcmllbnRhdGlv
bigpIGNvbnN0Ci17Ci0gICAgaWYgKCFBVEtfSVNfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAg
Y29uc3QgZ2NoYXIqIGF4T3JpZW50YXRpb24gPSBudWxscHRyOwotICAgIGlmIChjaGVja0VsZW1l
bnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9IT1JJWk9OVEFMKSkKLSAgICAgICAg
YXhPcmllbnRhdGlvbiA9ICJBWE9yaWVudGF0aW9uOiBBWEhvcml6b250YWxPcmllbnRhdGlvbiI7
Ci0gICAgZWxzZSBpZiAoY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RB
VEVfVkVSVElDQUwpKQotICAgICAgICBheE9yaWVudGF0aW9uID0gIkFYT3JpZW50YXRpb246IEFY
VmVydGljYWxPcmllbnRhdGlvbiI7Ci0gICAgZWxzZQotICAgICAgICBheE9yaWVudGF0aW9uID0g
IkFYT3JpZW50YXRpb246IEFYVW5rbm93bk9yaWVudGF0aW9uIjsKLQotICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhheE9yaWVudGF0aW9uKTsKLX0KLQotSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0cmluZ1ZhbHVlKCkKLXsK
LSAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hh
cj4gdGV4dChhdGtfdGV4dF9nZXRfdGV4dChBVEtfVEVYVChtX2VsZW1lbnQuZ2V0KCkpLCAwLCAt
MSkpOwotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHRleHRXaXRoUmVwbGFjZWRDaGFyYWN0ZXJzKHJl
cGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyh0ZXh0LmdldCgpKSk7Ci0gICAgR1VuaXF1ZVB0cjxn
Y2hhcj4gYXhWYWx1ZShnX3N0cmR1cF9wcmludGYoIkFYVmFsdWU6ICVzIiwgdGV4dFdpdGhSZXBs
YWNlZENoYXJhY3RlcnMuZ2V0KCkpKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhheFZhbHVlLmdldCgpKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omxhbmd1YWdlKCkKLXsKLSAgICBpZiAoIUFUS19JU19P
QkpFQ1QobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBjb25zdCBnY2hhciogbG9jYWxlID0gYXRrX29iamVj
dF9nZXRfb2JqZWN0X2xvY2FsZShBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpOwotICAgIGlm
ICghbG9jYWxlKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygw
LCAwKTsKLQotICAgIEdVbmlxdWVQdHI8Y2hhcj4gYXhWYWx1ZShnX3N0cmR1cF9wcmludGYoIkFY
TGFuZ3VhZ2U6ICVzIiwgbG9jYWxlKSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGF4VmFsdWUuZ2V0KCkpOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aGVscFRleHQoKSBjb25zdAotewotICAgIGlmICghQVRL
X0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIEF0a1JlbGF0aW9uU2V0KiByZWxhdGlvblNl
dCA9IGF0a19vYmplY3RfcmVmX3JlbGF0aW9uX3NldChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQo
KSkpOwotICAgIGlmICghcmVsYXRpb25TZXQpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgQXRrUmVsYXRpb24qIHJlbGF0aW9uID0gYXRr
X3JlbGF0aW9uX3NldF9nZXRfcmVsYXRpb25fYnlfdHlwZShyZWxhdGlvblNldCwgQVRLX1JFTEFU
SU9OX0RFU0NSSUJFRF9CWSk7Ci0gICAgaWYgKCFyZWxhdGlvbikKLSAgICAgICAgcmV0dXJuIEpT
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBHUHRyQXJyYXkqIHRhcmdl
dExpc3QgPSBhdGtfcmVsYXRpb25fZ2V0X3RhcmdldChyZWxhdGlvbik7Ci0gICAgaWYgKCF0YXJn
ZXRMaXN0IHx8ICF0YXJnZXRMaXN0LT5sZW4pCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
IGJ1aWxkZXIuYXBwZW5kKCJBWEhlbHA6ICIpOwotCi0gICAgZm9yIChndWludCB0YXJnZXRDb3Vu
dCA9IDA7IHRhcmdldENvdW50IDwgdGFyZ2V0TGlzdC0+bGVuOyB0YXJnZXRDb3VudCsrKSB7Ci0g
ICAgICAgIGlmIChBdGtPYmplY3QqIHRhcmdldCA9IHN0YXRpY19jYXN0PEF0a09iamVjdCo+KGdf
cHRyX2FycmF5X2luZGV4KHRhcmdldExpc3QsIHRhcmdldENvdW50KSkpIHsKLSAgICAgICAgICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHRleHQoYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQodGFyZ2V0
KSwgMCwgLTEpKTsKLSAgICAgICAgICAgIGlmICh0YXJnZXRDb3VudCkKLSAgICAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnICcpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQodGV4dC5n
ZXQoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBnX29iamVjdF91bnJlZihyZWxhdGlvblNl
dCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVpbGRlci50
b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6eCgpCi17Ci0gICAgaWYgKCFBVEtfSVNfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IHg7Ci0gICAgYXRrX2NvbXBvbmVudF9nZXRf
ZXh0ZW50cyhBVEtfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSksICZ4LCBudWxscHRyLCBudWxs
cHRyLCBudWxscHRyLCBBVEtfWFlfU0NSRUVOKTsKLSAgICByZXR1cm4geDsKLX0KLQotZG91Ymxl
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnkoKQotewotICAgIGlmICghQVRLX0lTX0NPTVBPTkVO
VChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGludCB5OwotICAg
IGF0a19jb21wb25lbnRfZ2V0X2V4dGVudHMoQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkp
LCBudWxscHRyLCAmeSwgbnVsbHB0ciwgbnVsbHB0ciwgQVRLX1hZX1NDUkVFTik7Ci0gICAgcmV0
dXJuIHk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp3aWR0aCgpCi17Ci0g
ICAgaWYgKCFBVEtfSVNfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgaW50IHdpZHRoOwotICAgIGF0a19jb21wb25lbnRfZ2V0X2V4dGVudHMoQVRL
X0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkpLCBudWxscHRyLCBudWxscHRyLCAmd2lkdGgsIG51
bGxwdHIsIEFUS19YWV9XSU5ET1cpOwotICAgIHJldHVybiB3aWR0aDsKLX0KLQotZG91YmxlIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmhlaWdodCgpCi17Ci0gICAgaWYgKCFBVEtfSVNfQ09NUE9O
RU5UKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IGhlaWdo
dDsKLSAgICBhdGtfY29tcG9uZW50X2dldF9leHRlbnRzKEFUS19DT01QT05FTlQobV9lbGVtZW50
LmdldCgpKSwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgJmhlaWdodCwgQVRLX1hZX1dJTkRP
Vyk7Ci0gICAgcmV0dXJuIGhlaWdodDsKLX0KLQotZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OmNsaWNrUG9pbnRYKCkKLXsKLSAgICBpZiAoIUFUS19JU19DT01QT05FTlQobV9lbGVtZW50
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpbnQgeCwgd2lkdGg7Ci0gICAgYXRr
X2NvbXBvbmVudF9nZXRfZXh0ZW50cyhBVEtfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSksICZ4
LCBudWxscHRyLCAmd2lkdGgsIG51bGxwdHIsIEFUS19YWV9XSU5ET1cpOwotICAgIHJldHVybiB4
ICsgd2lkdGggLyAyLjA7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGlj
a1BvaW50WSgpCi17Ci0gICAgaWYgKCFBVEtfSVNfQ09NUE9ORU5UKG1fZWxlbWVudC5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IHksIGhlaWdodDsKLSAgICBhdGtfY29tcG9u
ZW50X2dldF9leHRlbnRzKEFUS19DT01QT05FTlQobV9lbGVtZW50LmdldCgpKSwgbnVsbHB0ciwg
JnksIG51bGxwdHIsICZoZWlnaHQsIEFUS19YWV9XSU5ET1cpOwotICAgIHJldHVybiB5ICsgaGVp
Z2h0IC8gMi4wOwotfQotCi1kb3VibGUgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aW50VmFsdWUo
KSBjb25zdAotewotICAgIGlmICghQVRLX0lTX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIGlmIChBVEtfSVNfVkFMVUUobV9lbGVtZW50LmdldCgpKSkg
ewotICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgIGF0a192YWx1ZV9nZXRfdmFsdWVfYW5k
X3RleHQoQVRLX1ZBTFVFKG1fZWxlbWVudC5nZXQoKSksICZ2YWx1ZSwgbnVsbHB0cik7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICAvLyBDb25zaWRlciBoZWFkaW5ncyBhcyBh
biBzcGVjaWFsIGNhc2Ugd2hlbiByZXR1cm5pbmcgdGhlICJpbnQgdmFsdWUiIG9mCi0gICAgLy8g
YW4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudCwgc28gd2UgY2FuIHJldXNlIHNvbWUgdGVzdHMgdG8g
Y2hlY2sgdGhlIGxldmVsCi0gICAgLy8gYm90aCBmb3IgSFRNTCBoZWFkaW5ncyBhbmQgb2JqZWN0
cyB3aXRoIHRoZSBhcmlhLWxldmVsIGF0dHJpYnV0ZS4KLSAgICBpZiAoYXRrX29iamVjdF9nZXRf
cm9sZShBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSkpID09IEFUS19ST0xFX0hFQURJTkcpIHsK
LSAgICAgICAgU3RyaW5nIGhlYWRpbmdMZXZlbCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQo
QVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAibGV2ZWwi
KTsKLSAgICAgICAgYm9vbCBvazsKLSAgICAgICAgZG91YmxlIGhlYWRpbmdMZXZlbFZhbHVlID0g
aGVhZGluZ0xldmVsLnRvRG91YmxlKCZvayk7Ci0gICAgICAgIGlmIChvaykKLSAgICAgICAgICAg
IHJldHVybiBoZWFkaW5nTGV2ZWxWYWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0KLQot
ZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1pblZhbHVlKCkKLXsKLSAgICBpZiAoIUFU
S19JU19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJl
dHVybiByYW5nZU1pbk1heFZhbHVlKEFUS19WQUxVRShtX2VsZW1lbnQuZ2V0KCkpLCBSYW5nZUxp
bWl0TWluaW11bSk7Ci19Ci0KLWRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXhWYWx1
ZSgpCi17Ci0gICAgaWYgKCFBVEtfSVNfVkFMVUUobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gcmFuZ2VNaW5NYXhWYWx1ZShBVEtfVkFMVUUobV9lbGVt
ZW50LmdldCgpKSwgUmFuZ2VMaW1pdE1heGltdW0pOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dmFsdWVEZXNjcmlwdGlvbigpCi17Ci0gICAg
U3RyaW5nIHZhbHVlVGV4dCA9IGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVCht
X2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAidmFsdWV0ZXh0Iik7Ci0gICAg
R1VuaXF1ZVB0cjxnY2hhcj4gdmFsdWVEZXNjcmlwdGlvbihnX3N0cmR1cF9wcmludGYoIkFYVmFs
dWVEZXNjcmlwdGlvbjogJXMiLCB2YWx1ZVRleHQudXRmOCgpLmRhdGEoKSkpOwotICAgIHJldHVy
biBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh2YWx1ZURlc2NyaXB0aW9uLmdldCgpKTsK
LX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omluc2VydGlvblBvaW50TGluZU51bWJl
cigpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAtMTsKLX0KLQotYm9v
bCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1ByZXNzQWN0aW9uU3VwcG9ydGVkKCkKLXsKLSAg
ICBpZiAoIUFUS19JU19BQ1RJT04obV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY29uc3QgZ2NoYXIqIGFjdGlvbk5hbWUgPSBhdGtfYWN0aW9uX2dldF9uYW1l
KEFUS19BQ1RJT04obV9lbGVtZW50LmdldCgpKSwgMCk7Ci0gICAgcmV0dXJuIGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKFN0cmluZyhhY3Rpb25OYW1lKSwgInByZXNzIikgfHwgZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoU3RyaW5nKGFjdGlvbk5hbWUpLCAianVtcCIpOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5jcmVtZW50QWN0aW9uU3VwcG9ydGVk
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRGVjcmVtZW50QWN0aW9uU3VwcG9ydGVkKCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIGNoZWNr
RWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX0VOQUJMRUQpOwotfQotCi1i
b29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzUmVxdWlyZWQoKSBjb25zdAotewotICAgIHJl
dHVybiBjaGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9SRVFVSVJF
RCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNGb2N1c2VkKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RB
VEVfRk9DVVNFRCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNTZWxlY3Rl
ZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQo
KSwgQVRLX1NUQVRFX1NFTEVDVEVEKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojppc1NlbGVjdGVkT3B0aW9uQWN0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVt
ZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RBVEVfQUNUSVZFKTsKLX0KLQotYm9vbCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc0V4cGFuZGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Y2hlY2tFbGVtZW50U3RhdGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RBVEVfRVhQQU5ERUQpOwot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzQ2hlY2tlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX0NI
RUNLRUQpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzSW5kZXRlcm1pbmF0
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQo
KSwgQVRLX1NUQVRFX0lOREVURVJNSU5BVEUpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6aGllcmFyY2hpY2FsTGV2ZWwoKSBjb25zdAotewotICAgIHJldHVybiBwYXJzZUludGVn
ZXJBbGxvd2luZ1RyYWlsaW5nSnVuazxpbnQ+KGdldEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRL
X09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBPYmplY3RBdHRyaWJ1dGVUeXBlLCAibGV2ZWwiKSku
dmFsdWVfb3IoMCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzcGVha0FzKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6YXJpYUlzR3JhYmJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZVNldFZhbHVlRm9ySWQoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpLCBPYmpl
Y3RBdHRyaWJ1dGVUeXBlLCAiZ3JhYmJlZCIpID09ICJ0cnVlIjsKLX0KLQotSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEcm9wRWZmZWN0cygpIGNv
bnN0Ci17Ci0gICAgU3RyaW5nIGRyb3BFZmZlY3RzID0gZ2V0QXR0cmlidXRlU2V0VmFsdWVGb3JJ
ZChBVEtfT0JKRUNUKG1fZWxlbWVudC5nZXQoKSksIE9iamVjdEF0dHJpYnV0ZVR5cGUsICJkcm9w
ZWZmZWN0Iik7Ci0gICAgcmV0dXJuIGRyb3BFZmZlY3RzLmlzRW1wdHkoKSA/IEpTU3RyaW5nQ3Jl
YXRlV2l0aENoYXJhY3RlcnMoMCwgMCkgOiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhk
cm9wRWZmZWN0cy51dGY4KCkuZGF0YSgpKTsKLX0KLQotLy8gcGFyYW1ldGVyaXplZCBhdHRyaWJ1
dGVzCi1pbnQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bGluZUZvckluZGV4KGludCBpbmRleCkK
LXsKLSAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biAtMTsKLQotICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBhdGtfdGV4dF9nZXRfY2hhcmFj
dGVyX2NvdW50KEFUS19URVhUKG1fZWxlbWVudC5nZXQoKSkpKQotICAgICAgICByZXR1cm4gLTE7
Ci0KLSAgICBHVW5pcXVlUHRyPGdjaGFyPiB0ZXh0KGF0a190ZXh0X2dldF90ZXh0KEFUS19URVhU
KG1fZWxlbWVudC5nZXQoKSksIDAsIGluZGV4KSk7Ci0gICAgaW50IGxpbmVObyA9IDA7Ci0gICAg
Zm9yIChnY2hhciogb2Zmc2V0ID0gdGV4dC5nZXQoKTsgKm9mZnNldDsgKytvZmZzZXQpIHsKLSAg
ICAgICAgaWYgKCpvZmZzZXQgPT0gJ1xuJykKLSAgICAgICAgICAgICsrbGluZU5vOwotICAgIH0K
LQotICAgIHJldHVybiBsaW5lTm87Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvckxpbmUoaW50IGxpbmUpCi17Ci0gICAgaWYgKCFB
VEtfSVNfVEVYVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIEF0a1RleHQqIHRleHQgPSBBVEtfVEVYVCht
X2VsZW1lbnQuZ2V0KCkpOwotICAgIGdpbnQgc3RhcnRPZmZzZXQgPSAwLCBlbmRPZmZzZXQgPSAw
OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IGxpbmU7ICsraSkKLSAgICAgICAgYXRrX3RleHRf
Z2V0X3N0cmluZ19hdF9vZmZzZXQodGV4dCwgZW5kT2Zmc2V0LCBBVEtfVEVYVF9HUkFOVUxBUklU
WV9MSU5FLCAmc3RhcnRPZmZzZXQsICZlbmRPZmZzZXQpOwotCi0gICAgR1VuaXF1ZVB0cjxnY2hh
cj4gcmFuZ2UoZ19zdHJkdXBfcHJpbnRmKCJ7JWQsICVkfSIsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQgLSBzdGFydE9mZnNldCkpOwotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhyYW5nZS5nZXQoKSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpyYW5nZUZvclBvc2l0aW9uKGludCB4LCBpbnQgeSkKLXsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3Rl
cnMoMCwgMCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojpib3VuZHNGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3Ro
KQotewotICAgIGlmICghQVRLX0lTX1RFWFQobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBBdGtUZXh0UmVj
dGFuZ2xlIHJlY3Q7Ci0gICAgYXRrX3RleHRfZ2V0X3JhbmdlX2V4dGVudHMoQVRLX1RFWFQobV9l
bGVtZW50LmdldCgpKSwgbG9jYXRpb24sIGxvY2F0aW9uICsgbGVuZ3RoLCBBVEtfWFlfV0lORE9X
LCAmcmVjdCk7Ci0KLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBib3VuZHMoZ19zdHJkdXBfcHJpbnRm
KCJ7JWQsICVkLCAlZCwgJWR9IiwgcmVjdC54LCByZWN0LnksIHJlY3Qud2lkdGgsIHJlY3QuaGVp
Z2h0KSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJvdW5kcy5n
ZXQoKSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdHJpbmdGb3JSYW5nZSh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQot
ewotICAgIGlmICghQVRLX0lTX1RFWFQobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJu
IEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBTdHJpbmcgc3RyaW5n
ID0gYXRrX3RleHRfZ2V0X3RleHQoQVRLX1RFWFQobV9lbGVtZW50LmdldCgpKSwgbG9jYXRpb24s
IGxvY2F0aW9uICsgbGVuZ3RoKTsKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlKHVuc2ln
bmVkIGxvY2F0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgaWYgKCFBVEtfSVNfVEVYVCht
X2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFj
dGVycygwLCAwKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLQotICAgIC8vIFRoZSBk
ZWZhdWx0IHRleHQgYXR0cmlidXRlcyBhcHBseSB0byB0aGUgZW50aXJlIGVsZW1lbnQuCi0gICAg
YnVpbGRlci5hcHBlbmQoIlxuXHREZWZhdWx0IHRleHQgYXR0cmlidXRlczpcblx0XHQiLCBhdHRy
aWJ1dGVTZXRUb1N0cmluZyhnZXRBdHRyaWJ1dGVTZXQobV9lbGVtZW50LmdldCgpLCBUZXh0QXR0
cmlidXRlVHlwZSksICJcblx0XHQiKSk7Ci0KLSAgICAvLyBUaGUgYXR0cmlidXRlIHJ1biBwcm92
aWRlcyBhdHRyaWJ1dGVzIHNwZWNpZmljIHRvIHRoZSByYW5nZSBvZiB0ZXh0IGF0IHRoZSBzcGVj
aWZpZWQgb2Zmc2V0LgotICAgIEF0a1RleHQqIHRleHQgPSBBVEtfVEVYVChtX2VsZW1lbnQuZ2V0
KCkpOwotICAgIGdpbnQgc3RhcnQgPSAwLCBlbmQgPSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9
IGxvY2F0aW9uOyBpIDwgbG9jYXRpb24gKyBsZW5ndGg7IGkgPSBlbmQpIHsKLSAgICAgICAgQXRr
QXR0cmlidXRlU2V0KiBhdHRyaWJ1dGVTZXQgPSBhdGtfdGV4dF9nZXRfcnVuX2F0dHJpYnV0ZXMo
dGV4dCwgaSwgJnN0YXJ0LCAmZW5kKTsKLSAgICAgICAgR1VuaXF1ZVB0cjxnY2hhcj4gc3Vic3Ry
aW5nKHJlcGxhY2VDaGFyYWN0ZXJzRm9yUmVzdWx0cyhhdGtfdGV4dF9nZXRfdGV4dCh0ZXh0LCBz
dGFydCwgZW5kKSkpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiXG5cdFJhbmdlIGF0dHJpYnV0
ZXMgZm9yICciLCBzdWJzdHJpbmcuZ2V0KCksICInOlxuXHRcdCIsIGF0dHJpYnV0ZVNldFRvU3Ry
aW5nKGF0dHJpYnV0ZVNldCwgIlxuXHRcdCIpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdSYW5n
ZUlzTWlzc3BlbGxlZCh1bnNpZ25lZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVudENvdW50Rm9yU2VhcmNoUHJlZGljYXRlKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBzdGFydEVsZW1lbnQs
IGJvb2wgaXNEaXJlY3Rpb25OZXh0LCBKU1ZhbHVlUmVmIHNlYXJjaEtleSwgSlNTdHJpbmdSZWYg
c2VhcmNoVGV4dCwgYm9vbCB2aXNpYmxlT25seSwgYm9vbCBpbW1lZGlhdGVEZXNjZW5kYW50c09u
bHkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiAwOwotfQotCi1SZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVt
ZW50Rm9yU2VhcmNoUHJlZGljYXRlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50KiBzdGFydEVsZW1lbnQsIGJvb2wgaXNEaXJlY3Rpb25OZXh0LCBKU1ZhbHVlUmVm
IHNlYXJjaEtleSwgSlNTdHJpbmdSZWYgc2VhcmNoVGV4dCwgYm9vbCB2aXNpYmxlT25seSwgYm9v
bCBpbW1lZGlhdGVEZXNjZW5kYW50c09ubHkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0VGV4dFdpdGhDcml0ZXJpYShKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNTdHJpbmdSZWYgYW1iaWd1aXR5UmVzb2x1dGlvbiwgSlNWYWx1ZVJlZiBzZWFyY2hT
dHJpbmdzLCBKU1N0cmluZ1JlZiByZXBsYWNlbWVudFN0cmluZywgSlNTdHJpbmdSZWYgYWN0aXZp
dHkpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1uSGVhZGVycygpCi17Ci0gICAgaWYgKCFBVEtfSVNfVEFCTEUobV9lbGVtZW50
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gY29sdW1u
SGVhZGVycyA9IGdldFRhYmxlQ29sdW1uSGVhZGVycyhBVEtfVEFCTEUobV9lbGVtZW50LmdldCgp
KSk7Ci0gICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKGNvbHVtbkhlYWRlcnMp
OwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
YXR0cmlidXRlc09mUm93SGVhZGVycygpCi17Ci0gICAgaWYgKCFBVEtfSVNfVEFCTEUobV9lbGVt
ZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMo
MCwgMCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+ID4gcm93
SGVhZGVycyA9IGdldFRhYmxlUm93SGVhZGVycyhBVEtfVEFCTEUobV9lbGVtZW50LmdldCgpKSk7
Ci0gICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKHJvd0hlYWRlcnMpOwotfQot
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmli
dXRlc09mQ29sdW1ucygpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBK
U1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotfQotCi1KU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlc09mUm93cygpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFy
YWN0ZXJzKDAsIDApOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXR0cmlidXRlc09mVmlzaWJsZUNlbGxzKCkKLXsKLSAgICBpZiAoIUFUS19J
U19UQUJMRShtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudD4gPiB2aXNpYmxlQ2VsbHMgPSBnZXRWaXNpYmxlQ2VsbHModGhpcyk7Ci0gICAgcmV0
dXJuIGNyZWF0ZVN0cmluZ1dpdGhBdHRyaWJ1dGVzKHZpc2libGVDZWxscyk7Ci19Ci0KLUpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjphdHRyaWJ1dGVzT2ZI
ZWFkZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJvd0NvdW50KCkKLXsKLSAgICBpZiAoIUFUS19JU19UQUJMRShtX2VsZW1lbnQuZ2V0KCkp
KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBhdGtfdGFibGVfZ2V0X25fcm93cyhB
VEtfVEFCTEUobV9lbGVtZW50LmdldCgpKSk7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50Ojpjb2x1bW5Db3VudCgpCi17Ci0gICAgaWYgKCFBVEtfSVNfVEFCTEUobV9lbGVtZW50Lmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gYXRrX3RhYmxlX2dldF9uX2Nv
bHVtbnMoQVRLX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpOwotfQotCi1pbnQgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aW5kZXhJblRhYmxlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0g
ICAgcmV0dXJuIC0xOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6cm93SW5kZXhSYW5nZSgpCi17Ci0gICAgLy8gUmFuZ2UgaW4gdGFibGUgZm9y
IHJvd3MuCi0gICAgcmV0dXJuIGluZGV4UmFuZ2VJblRhYmxlKG1fZWxlbWVudC5nZXQoKSwgdHJ1
ZSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpjb2x1bW5JbmRleFJhbmdlKCkKLXsKLSAgICAvLyBSYW5nZSBpbiB0YWJsZSBmb3IgY29sdW1u
cy4KLSAgICByZXR1cm4gaW5kZXhSYW5nZUluVGFibGUobV9lbGVtZW50LmdldCgpLCBmYWxzZSk7
Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpjZWxsRm9yQ29sdW1uQW5kUm93KHVuc2lnbmVkIGNvbCwgdW5zaWduZWQgcm93KQotewot
ICAgIGlmICghQVRLX0lTX1RBQkxFKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgLy8gQWRvcHQgdGhlIEF0a09iamVjdCByZXByZXNlbnRpbmcgdGhlIGNl
bGwgYmVjYXVzZQotICAgIC8vIGF0X3RhYmxlX3JlZl9hdCgpIHRyYW5zZmVycyBmdWxsIG93bmVy
c2hpcC4KLSAgICBHUmVmUHRyPEF0a09iamVjdD4gZm91bmRDZWxsID0gYWRvcHRHUmVmKGF0a190
YWJsZV9yZWZfYXQoQVRLX1RBQkxFKG1fZWxlbWVudC5nZXQoKSksIHJvdywgY29sKSk7Ci0gICAg
cmV0dXJuIGZvdW5kQ2VsbCA/IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShmb3VuZENl
bGwuZ2V0KCkpLnB0cigpIDogbnVsbHB0cjsKLX0KLQotUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Omhvcml6b250YWxTY3JvbGxiYXIoKSBjb25z
dAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnZl
cnRpY2FsU2Nyb2xsYmFyKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCi17Ci0gICAgaWYgKCFBVEtfSVNfVEVY
VChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycygwLCAwKTsKLQotICAgIGdpbnQgc3RhcnQsIGVuZDsKLSAgICBnX2ZyZWUoYXRrX3Rl
eHRfZ2V0X3NlbGVjdGlvbihBVEtfVEVYVChtX2VsZW1lbnQuZ2V0KCkpLCAwLCAmc3RhcnQsICZl
bmQpKTsKLQotICAgIEdVbmlxdWVQdHI8Z2NoYXI+IHNlbGVjdGlvbihnX3N0cmR1cF9wcmludGYo
InslZCwgJWR9Iiwgc3RhcnQsIGVuZCAtIHN0YXJ0KSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHNlbGVjdGlvbi5nZXQoKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2V0U2VsZWN0ZWRUZXh0UmFuZ2UodW5zaWduZWQgbG9jYXRpb24sIHVu
c2lnbmVkIGxlbmd0aCkKLXsKLSAgICBpZiAoIUFUS19JU19URVhUKG1fZWxlbWVudC5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1
cm4gYXRrX3RleHRfc2V0X2NhcmV0X29mZnNldChBVEtfVEVYVChtX2VsZW1lbnQuZ2V0KCkpLCBs
b2NhdGlvbik7Ci0KLSAgICByZXR1cm4gYXRrX3RleHRfc2V0X3NlbGVjdGlvbihBVEtfVEVYVCht
X2VsZW1lbnQuZ2V0KCkpLCAwLCBsb2NhdGlvbiwgbG9jYXRpb24gKyBsZW5ndGgpOwotfQotCi12
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmluY3JlbWVudCgpCi17Ci0gICAgYWx0ZXJDdXJy
ZW50VmFsdWUobV9lbGVtZW50LmdldCgpLCAxKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpkZWNyZW1lbnQoKQotewotICAgIGFsdGVyQ3VycmVudFZhbHVlKG1fZWxlbWVudC5n
ZXQoKSwgLTEpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNob3dNZW51KCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cHJlc3MoKQotewotICAgIGlmICghQVRLX0lTX0FDVElPTihtX2VsZW1lbnQuZ2V0KCkp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBPbmx5IG9uZSBhY3Rpb24gcGVyIG9iamVjdCBp
cyBzdXBwb3J0ZWQgc28gZmFyLgotICAgIGF0a19hY3Rpb25fZG9fYWN0aW9uKEFUS19BQ1RJT04o
bV9lbGVtZW50LmdldCgpKSwgMCk7Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2V0U2VsZWN0ZWRDaGlsZChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiBlbGVtZW50KSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzZXRTZWxlY3RlZENoaWxkQXRJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAg
ICBpZiAoIUFUS19JU19TRUxFQ1RJT04obV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXRrX3NlbGVjdGlvbl9hZGRfc2VsZWN0aW9uKEFUS19TRUxFQ1RJT04obV9lbGVt
ZW50LmdldCgpKSwgaW5kZXgpOwotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJl
bW92ZVNlbGVjdGlvbkF0SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAgaWYgKCFB
VEtfSVNfU0VMRUNUSU9OKG1fZWxlbWVudC5nZXQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF0a19zZWxlY3Rpb25fcmVtb3ZlX3NlbGVjdGlvbihBVEtfU0VMRUNUSU9OKG1fZWxlbWVudC5n
ZXQoKSksIGluZGV4KTsKLX0KLQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjbGVhclNl
bGVjdGVkQ2hpbGRyZW4oKSBjb25zdAotewotICAgIGlmICghQVRLX0lTX1NFTEVDVElPTihtX2Vs
ZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdGtfc2VsZWN0aW9uX2NsZWFy
X3NlbGVjdGlvbihBVEtfU0VMRUNUSU9OKG1fZWxlbWVudC5nZXQoKSkpOwotfQotCi1KU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWNjZXNzaWJpbGl0eVZh
bHVlKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudEVuY29kaW5nKCkKLXsKLSAgICBp
ZiAoIUFUS19JU19ET0NVTUVOVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIEF0a1JvbGUgcm9sZSA9IGF0
a19vYmplY3RfZ2V0X3JvbGUoQVRLX09CSkVDVChtX2VsZW1lbnQuZ2V0KCkpKTsKLSAgICBpZiAo
cm9sZSAhPSBBVEtfUk9MRV9ET0NVTUVOVF9XRUIpCi0gICAgICAgIHJldHVybiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIDApOwotCi0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGF0a19kb2N1bWVudF9nZXRfYXR0cmlidXRlX3ZhbHVlKEFUS19ET0NVTUVO
VChtX2VsZW1lbnQuZ2V0KCkpLCAiRW5jb2RpbmciKSk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpkb2N1bWVudFVSSSgpCi17Ci0gICAgaWYg
KCFBVEtfSVNfRE9DVU1FTlQobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBBdGtSb2xlIHJvbGUgPSBhdGtf
b2JqZWN0X2dldF9yb2xlKEFUS19PQkpFQ1QobV9lbGVtZW50LmdldCgpKSk7Ci0gICAgaWYgKHJv
bGUgIT0gQVRLX1JPTEVfRE9DVU1FTlRfV0VCKQotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLQotICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhhdGtfZG9jdW1lbnRfZ2V0X2F0dHJpYnV0ZV92YWx1ZShBVEtfRE9DVU1FTlQo
bV9lbGVtZW50LmdldCgpKSwgIlVSSSIpKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVybCgpCi17Ci0gICAgaWYgKCFBVEtfSVNfSFlQRVJM
SU5LX0lNUEwobV9lbGVtZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMoMCwgMCk7Ci0KLSAgICBBdGtIeXBlcmxpbmsqIGh5cGVybGluayA9IGF0
a19oeXBlcmxpbmtfaW1wbF9nZXRfaHlwZXJsaW5rKEFUS19IWVBFUkxJTktfSU1QTChtX2VsZW1l
bnQuZ2V0KCkpKTsKLSAgICBHVW5pcXVlUHRyPGNoYXI+IGh5cGVybGlua1VSSShhdGtfaHlwZXJs
aW5rX2dldF91cmkoaHlwZXJsaW5rLCAwKSk7Ci0KLSAgICBpZiAoIWh5cGVybGlua1VSSS5nZXQo
KSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJBWFVSTDog
KG51bGwpIik7Ci0KLSAgICAvLyBCdWlsZCB0aGUgcmVzdWx0IHN0cmluZywgc3RyaXBwaW5nIHRo
ZSBhYnNvbHV0ZSBVUkwgcGF0aHMgaWYgcHJlc2VudC4KLSAgICBjaGFyKiBsb2NhbFVSSSA9IGdf
c3Ryc3RyX2xlbihoeXBlcmxpbmtVUkkuZ2V0KCksIC0xLCAiTGF5b3V0VGVzdHMiKTsKLSAgICBT
dHJpbmcgYXhVUkwgPSBtYWtlU3RyaW5nKCJBWFVSTDogIiwgbG9jYWxVUkkgPyBsb2NhbFVSSSA6
IGh5cGVybGlua1VSSS5nZXQoKSk7Ci0gICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGF4VVJMLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmFkZE5vdGlmaWNhdGlvbkxpc3RlbmVyKEpTVmFsdWVSZWYgZnVuY3Rpb25DYWxsYmFj
aykKLXsKLSAgICBpZiAoIWZ1bmN0aW9uQ2FsbGJhY2spCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIC8vIE9ubHkgb25lIG5vdGlmaWNhdGlvbiBsaXN0ZW5lciBwZXIgZWxlbWVudC4KLSAg
ICBpZiAobV9ub3RpZmljYXRpb25IYW5kbGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBtX25vdGlmaWNhdGlvbkhhbmRsZXIgPSBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
cjo6Y3JlYXRlKCk7Ci0gICAgbV9ub3RpZmljYXRpb25IYW5kbGVyLT5zZXRQbGF0Zm9ybUVsZW1l
bnQocGxhdGZvcm1VSUVsZW1lbnQoKSk7Ci0gICAgbV9ub3RpZmljYXRpb25IYW5kbGVyLT5zZXRO
b3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKGZ1bmN0aW9uQ2FsbGJhY2spOwotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlTm90aWZp
Y2F0aW9uTGlzdGVuZXIoKQotewotICAgIC8vIFByb2dyYW1tZXJzIHNob3VsZCBub3QgYmUgdHJ5
aW5nIHRvIHJlbW92ZSBhIGxpc3RlbmVyIHRoYXQncyBhbHJlYWR5IHJlbW92ZWQuCi0gICAgQVNT
RVJUKG1fbm90aWZpY2F0aW9uSGFuZGxlcik7Ci0gICAgbV9ub3RpZmljYXRpb25IYW5kbGVyID0g
bnVsbHB0cjsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3Rh
dGUobV9lbGVtZW50LmdldCgpLCBBVEtfU1RBVEVfRk9DVVNBQkxFKTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojppc1NlbGVjdGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBj
aGVja0VsZW1lbnRTdGF0ZShtX2VsZW1lbnQuZ2V0KCksIEFUS19TVEFURV9TRUxFQ1RBQkxFKTsK
LX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpU2VsZWN0YWJsZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRL
X1NUQVRFX01VTFRJU0VMRUNUQUJMRSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6aXNWaXNpYmxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9l
bGVtZW50LmdldCgpLCBBVEtfU1RBVEVfVklTSUJMRSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNPZmZTY3JlZW4oKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
aXNDb2xsYXBzZWQoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6aXNJZ25vcmVkKCkg
Y29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzU2luZ2xlTGluZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQoKSwgQVRLX1NUQVRFX1NJ
TkdMRV9MSU5FKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc011bHRpTGlu
ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNoZWNrRWxlbWVudFN0YXRlKG1fZWxlbWVudC5nZXQo
KSwgQVRLX1NUQVRFX01VTFRJX0xJTkUpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Omhhc1BvcHVwKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hlY2tFbGVtZW50U3RhdGUobV9l
bGVtZW50LmdldCgpLCBBVEtfU1RBVEVfSEFTX1BPUFVQKTsKLX0KLQotdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojp0YWtlRm9jdXMoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLX0K
LQotdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp0YWtlU2VsZWN0aW9uKCkKLXsKLSAgICAv
LyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YWRk
U2VsZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci19Ci0KLXZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cmVtb3ZlU2VsZWN0aW9uKCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci19Ci0KLS8vIFRleHQgbWFya2VycwotUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmxpbmVUZXh0TWFya2VyUmFuZ2VGb3JU
ZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQotewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotUmVmUHRyPEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJr
ZXJSYW5nZUZvckVsZW1lbnQoQWNjZXNzaWJpbGl0eVVJRWxlbWVudCogZWxlbWVudCkKLXsKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWludCBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojp0ZXh0TWFya2VyUmFuZ2VMZW5ndGgoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXJSYW5nZSogcmFuZ2UpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJl
dHVybiAwOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnByZXZpb3VzVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciog
dGV4dE1hcmtlcikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIG51bGxw
dHI7Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bmV4dFRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRleHRNYXJr
ZXIpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3RyaW5n
Rm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIG1hcmtlclJh
bmdlKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJlY3RzRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2UqIG1hcmtlclJhbmdlLCBKU1N0cmluZ1JlZiBzZWFyY2hUZXh0KQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycygwLCAwKTsKLX0KLQotUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIqIHN0YXJ0TWFya2VyLCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciogZW5kTWFya2VyKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXJSYW5nZSogcmFuZ2UpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAg
IHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSogcmFuZ2UpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRN
YXJrZXI+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmVuZFRleHRNYXJrZXJGb3JCb3VuZHMoaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgLy8gRklYTUU6IGltcGxl
bWVudAotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRN
YXJrZXI+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN0YXJ0VGV4dE1hcmtlckZvckJvdW5kcyhp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlckZvclBvaW50KGludCB4
LCBpbnQgeSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIG51bGxwdHI7
Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIqIG1hcmtlcikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UqKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1KU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6YXR0cmlidXRlZFN0cmluZ0ZvclRl
eHRNYXJrZXJSYW5nZVdpdGhPcHRpb25zKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqLCBi
b29sKQotewotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OmF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2VDb250YWluc0F0dHJpYnV0
ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUsIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UqIHJh
bmdlKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWludCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbmRleEZvclRleHRNYXJrZXIoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqIG1hcmtlcikKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50Ci0gICAg
cmV0dXJuIC0xOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmlzVGV4dE1hcmtl
clZhbGlkKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQotewotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVJlZlB0cjxBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlckZvckluZGV4
KGludCB0ZXh0SW5kZXgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBu
dWxscHRyOwotfQotICAgIAotUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdGFydFRleHRNYXJrZXIoKQotewotICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQKLSAgICByZXR1cm4gbnVsbHB0cjsgICAgCi19Ci0KLVJlZlB0cjxBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6ZW5kVGV4dE1hcmtlcigpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudAotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UqKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKLXsKLSNpZiBBVEtf
Q0hFQ0tfVkVSU0lPTigyLCAzMCwgMCkKLSAgICBpZiAoIUFUS19JU19DT01QT05FTlQobV9lbGVt
ZW50LmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXRrX2NvbXBvbmVudF9zY3JvbGxf
dG8oQVRLX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkpLCBBVEtfU0NST0xMX0FOWVdIRVJFKTsK
LSNlbmRpZgotfQotCi12b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFs
UG9pbnQoaW50IHgsIGludCB5KQotewotI2lmIEFUS19DSEVDS19WRVJTSU9OKDIsIDMwLCAwKQot
ICAgIGlmICghQVRLX0lTX0NPTVBPTkVOVChtX2VsZW1lbnQuZ2V0KCkpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBhdGtfY29tcG9uZW50X3Njcm9sbF90b19wb2ludChBVEtfQ09NUE9ORU5UKG1f
ZWxlbWVudC5nZXQoKSksIEFUS19YWV9XSU5ET1csIHgsIHkpOwotI2VuZGlmCi19Ci0KLXZvaWQg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzdXBwb3J0ZWRBY3Rpb25zKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpwYXRoRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXRoUG9zdHNjcmlwdHNEZXNjcmlwdGlv
bigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1h
dGhQcmVzY3JpcHRzRGVzY3JpcHRpb24oKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjbGFzc0xpc3QoKSBjb25zdAotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBzdHJpbmdBdE9mZnNldChQbGF0Zm9ybVVJRWxlbWVudCBlbGVtZW50LCBBdGtUZXh0Qm91bmRh
cnkgYm91bmRhcnksIGludCBvZmZzZXQpCi17Ci0gICAgaWYgKCFBVEtfSVNfVEVYVChlbGVtZW50
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwg
MCk7Ci0KLSAgICBnaW50IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQ7Ci0gICAgU3RyaW5nQnVpbGRl
ciBidWlsZGVyOwotCi0gICAgQXRrVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5OwotICAgIHN3
aXRjaCAoYm91bmRhcnkpIHsKLSAgICBjYXNlIEFUS19URVhUX0JPVU5EQVJZX0NIQVI6Ci0gICAg
ICAgIGdyYW51bGFyaXR5ID0gQVRLX1RFWFRfR1JBTlVMQVJJVFlfQ0hBUjsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBBVEtfVEVYVF9CT1VOREFSWV9XT1JEX1NUQVJUOgotICAgICAgICBncmFu
dWxhcml0eSA9IEFUS19URVhUX0dSQU5VTEFSSVRZX1dPUkQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgQVRLX1RFWFRfQk9VTkRBUllfTElORV9TVEFSVDoKLSAgICAgICAgZ3JhbnVsYXJpdHkg
PSBBVEtfVEVYVF9HUkFOVUxBUklUWV9MSU5FOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFU
S19URVhUX0JPVU5EQVJZX1NFTlRFTkNFX1NUQVJUOgotICAgICAgICBncmFudWxhcml0eSA9IEFU
S19URVhUX0dSQU5VTEFSSVRZX1NFTlRFTkNFOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKLSAg
ICB9Ci0KLSAgICBidWlsZGVyLmFwcGVuZChhdGtfdGV4dF9nZXRfc3RyaW5nX2F0X29mZnNldChB
VEtfVEVYVChlbGVtZW50LmdldCgpKSwgb2Zmc2V0LCBncmFudWxhcml0eSwgJnN0YXJ0T2Zmc2V0
LCAmZW5kT2Zmc2V0KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoIiwgIiwgc3RhcnRPZmZzZXQsICIs
ICIsIGVuZE9mZnNldCk7Ci0KLSAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1KU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y2hhcmFjdGVyQXRPZmZzZXQoaW50
IG9mZnNldCkKLXsKLSAgICByZXR1cm4gc3RyaW5nQXRPZmZzZXQobV9lbGVtZW50LCBBVEtfVEVY
VF9CT1VOREFSWV9DSEFSLCBvZmZzZXQpOwotfQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6d29yZEF0T2Zmc2V0KGludCBvZmZzZXQpCi17Ci0gICAg
cmV0dXJuIHN0cmluZ0F0T2Zmc2V0KG1fZWxlbWVudCwgQVRLX1RFWFRfQk9VTkRBUllfV09SRF9T
VEFSVCwgb2Zmc2V0KTsKLX0KLQotSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmxpbmVBdE9mZnNldChpbnQgb2Zmc2V0KQotewotICAgIHJldHVybiBzdHJp
bmdBdE9mZnNldChtX2VsZW1lbnQsIEFUS19URVhUX0JPVU5EQVJZX0xJTkVfU1RBUlQsIG9mZnNl
dCk7Ci19Ci0KLUpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzZW50ZW5jZUF0T2Zmc2V0KGludCBvZmZzZXQpCi17Ci0gICAgcmV0dXJuIHN0cmluZ0F0T2Zm
c2V0KG1fZWxlbWVudCwgQVRLX1RFWFRfQk9VTkRBUllfU0VOVEVOQ0VfU1RBUlQsIG9mZnNldCk7
Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmVwbGFjZVRleHRJblJhbmdlKEpT
U3RyaW5nUmVmLCBpbnQsIGludCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjppbnNlcnRUZXh0KEpT
U3RyaW5nUmVmKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1KU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cG9w
dXBWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gbnVs
bHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RSCi0KLSNlbmRpZiAvLyBFTkFCTEUoQUNDRVNT
SUJJTElUWSkgJiYgVVNFKEFUSykKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
UGxhdGZvcm1HVEsuY21ha2UgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtR1RLLmNt
YWtlCmluZGV4IDQ0ZWJiYzMwMDMzNi4uYTg3YWRlZGNjMGUxIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1HVEsuY21ha2UKQEAgLTIyLDE0ICsyMiwxMiBAQCBsaXN0KEFQUEVORCBX
ZWJLaXRUZXN0UnVubmVyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiApCiAKIGxpc3QoQVBQ
RU5EIFdlYktpdFRlc3RSdW5uZXJfTElCUkFSSUVTCi0gICAgJHtBVEtfTElCUkFSSUVTfQogICAg
ICR7R0xJQl9MSUJSQVJJRVN9CiAgICAgQ2Fpcm86OkNhaXJvCiAgICAgR1RLOjpHVEsKICkKIAog
bGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5lckluamVjdGVkQnVuZGxlX0xJQlJBUklFUwotICAg
ICR7QVRLX0xJQlJBUklFU30KICAgICAke0dMSUJfTElCUkFSSUVTfQogICAgIEZvbnRjb25maWc6
OkZvbnRjb25maWcKICAgICBHVEs6OkdUSwpAQCAtNDAsMTAgKzM4LDYgQEAgbGlzdChBUFBFTkQg
V2ViS2l0VGVzdFJ1bm5lcl9GUkFNRVdPUktTCiApCiAKIGxpc3QoQVBQRU5EIFdlYktpdFRlc3RS
dW5uZXJJbmplY3RlZEJ1bmRsZV9TT1VSQ0VTCi0gICAgSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyQXRrLmNwcAotICAgIEluamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKLSAgICBJbmplY3RlZEJ1bmRsZS9hdGsv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKLQogICAgIEluamVjdGVkQnVuZGxlL2F0c3Bp
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRzcGkuY3BwCiAgICAgSW5qZWN0ZWRCdW5kbGUvYXRz
cGkvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIuY3BwCiAgICAgSW5qZWN0ZWRCdW5k
bGUvYXRzcGkvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0c3BpLmNwcApAQCAtNTUsOSArNDksNyBA
QCBsaXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfU09VUkNFUwogKQog
CiBsaXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfSU5DTFVERV9ESVJF
Q1RPUklFUwotICAgICR7QVRLX0lOQ0xVREVfRElSU30KICAgICAke0dMSUJfSU5DTFVERV9ESVJT
fQotICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9ESVJ9L0luamVjdGVkQnVuZGxlL2F0awogICAgICR7
V2ViS2l0VGVzdFJ1bm5lcl9ESVJ9L0luamVjdGVkQnVuZGxlL2F0c3BpCiAgICAgJHtXZWJLaXRU
ZXN0UnVubmVyX0RJUn0vSW5qZWN0ZWRCdW5kbGUvZ3RrCiApCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV1BFLmNtYWtlIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9QbGF0Zm9ybVdQRS5jbWFrZQppbmRleCBmNmI1OWRiM2MwZWUuLjRmMzY0MGE4YjkzOCAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtV1BFLmNtYWtlCkBAIC0xOSw3ICsxOSw2IEBA
IGxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfSU5DTFVERV9ESVJFQ1RPUklFUwogKQogCiBs
aXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVyX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCi0g
ICAgJHtBVEtfSU5DTFVERV9ESVJTfQogICAgICR7R0xJQl9JTkNMVURFX0RJUlN9CiAgICAgJHtM
SUJYS0JDT01NT05fSU5DTFVERV9ESVJTfQogICAgICR7V1BFQkFDS0VORF9GRE9fSU5DTFVERV9E
SVJTfQpAQCAtMzUsMTYgKzM0LDExIEBAIGxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJfTElC
UkFSSUVTCiAKIGxpc3QoQVBQRU5EIFdlYktpdFRlc3RSdW5uZXJJbmplY3RlZEJ1bmRsZV9MSUJS
QVJJRVMKICAgICAkPFRBUkdFVF9PQkpFQ1RTOkphdmFTY3JpcHRDb3JlPgotICAgICR7QVRLX0xJ
QlJBUklFU30KICAgICAke0dMSUJfTElCUkFSSUVTfQogICAgIENhaXJvOjpDYWlybwogKQogCiBs
aXN0KEFQUEVORCBXZWJLaXRUZXN0UnVubmVySW5qZWN0ZWRCdW5kbGVfU09VUkNFUwotICAgIElu
amVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKLSAgICBJbmpl
Y3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCi0g
ICAgSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCi0KICAg
ICBJbmplY3RlZEJ1bmRsZS9hdHNwaS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0c3BpLmNwcAog
ICAgIEluamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVy
LmNwcAogICAgIEluamVjdGVkQnVuZGxlL2F0c3BpL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdHNw
aS5jcHAKQEAgLTU1LDkgKzQ5LDcgQEAgbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5lckluamVj
dGVkQnVuZGxlX1NPVVJDRVMKICkKIAogbGlzdChBUFBFTkQgV2ViS2l0VGVzdFJ1bm5lckluamVj
dGVkQnVuZGxlX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAke0FUS19JTkNMVURFX0RJUlN9CiAg
ICAgJHtHTElCX0lOQ0xVREVfRElSU30KLSAgICAke1dlYktpdFRlc3RSdW5uZXJfRElSfS9Jbmpl
Y3RlZEJ1bmRsZS9hdGsKICAgICAke1dlYktpdFRlc3RSdW5uZXJfRElSfS9JbmplY3RlZEJ1bmRs
ZS9hdHNwaQogICAgICR7V2ViS2l0VGVzdFJ1bm5lcl9ESVJ9L0luamVjdGVkQnVuZGxlL3dwZQog
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RPcHRpb25zLmNwcAppbmRleCA3ZTc3M2E1Zjg4ODku
LmZhZjNiMWU5ZDgzZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0
aW9ucy5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0T3B0aW9ucy5jcHAKQEAg
LTk3LDkgKzk3LDYgQEAgY29uc3QgVGVzdEZlYXR1cmVzJiBUZXN0T3B0aW9uczo6ZGVmYXVsdHMo
KQogICAgICAgICAgICAgeyAiSW5wdXRUeXBlTW9udGhFbmFibGVkIiwgdHJ1ZSB9LAogICAgICAg
ICAgICAgeyAiSW5wdXRUeXBlVGltZUVuYWJsZWQiLCB0cnVlIH0sCiAgICAgICAgICAgICB7ICJJ
bnB1dFR5cGVXZWVrRW5hYmxlZCIsIHRydWUgfSwKLSNpZiBVU0UoQVRTUEkpCi0gICAgICAgICAg
ICB7ICJJc0FjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkIiwgdHJ1ZSB9LAotI2VuZGlm
CiAgICAgICAgICAgICB7ICJKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkIiwgdHJ1ZSB9LAog
ICAgICAgICAgICAgeyAiSmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSIsIHRy
dWUgfSwKICAgICAgICAgICAgIHsgIkxhcmdlSW1hZ2VBc3luY0RlY29kaW5nRW5hYmxlZCIsIGZh
bHNlIH0sCg==
</data>
<flag name="review"
          id="483322"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>