<?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>177766</bug_id>
          
          <creation_ts>2017-10-02 12:55:31 -0700</creation_ts>
          <short_desc>[Settings] Convert more settings to be generated</short_desc>
          <delta_ts>2017-10-18 21:42:39 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>fujii</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1355419</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-02 12:55:31 -0700</bug_when>
    <thetext>[Settings] Convert more settings to be generated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355429</commentid>
    <comment_count>1</comment_count>
      <attachid>322414</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-02 13:10:34 -0700</bug_when>
    <thetext>Created attachment 322414
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355685</commentid>
    <comment_count>2</comment_count>
      <attachid>322489</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-02 20:44:47 -0700</bug_when>
    <thetext>Created attachment 322489
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355734</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-10-03 01:32:42 -0700</bug_when>
    <thetext>GTK port EWS also failed even though it is green.
I tested with GTK port and reproduced the same error.

By removing the following outdated file, it succeeds to build:

WebKitBuild/Release/DerivedSources/ForwardingHeaders/WebCore/Settings.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1355801</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-03 07:00:34 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #3)
&gt; GTK port EWS also failed even though it is green.
&gt; I tested with GTK port and reproduced the same error.
&gt; 
&gt; By removing the following outdated file, it succeeds to build:
&gt; 
&gt; WebKitBuild/Release/DerivedSources/ForwardingHeaders/WebCore/Settings.h

Any idea how to fix this? I&apos;m not sure how to make the new generated Settings.h available as a forwarding header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1356214</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2017-10-03 19:45:50 -0700</bug_when>
    <thetext>Generally speaking, it&apos;s impossible to remove old generating files.
For example, Foo.idl generated Foo.cpp, and Bar.cpp generated Bar.o.
Then, the source files Foo.idl and Bar.cpp are removed.
The old generated files Foo.cpp and Bar.o exist in the build directory.
It&apos;s impossible to remove these generated files because the new build script has no information about the files.

Old generated file is WebKitBuild/Release/DerivedSources/ForwardingHeaders/WebCore/Settings.h.
New generated file is WebKitBuild/Release/DerivedSources/WebCore/Settings.h

-IDerivedSources/ForwardingHeaders is given before -IDerivedSources.
Then, #include &lt;WebCore/Settings.h&gt; refers old one.

One solution is reordering the include directories.
But, I don&apos;t think this is a good idea.
Becuase opposite problems can happen, and this is only for the incremental build failure.

Another solution is using a different name, for example SettingsGenerated.h.
And, Preserve Source/WebCore/page/Settings.h with just two following lines:

&gt; #pragma once
&gt; #include &quot;SettingsGenerated.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361884</commentid>
    <comment_count>6</comment_count>
      <attachid>324165</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-18 14:16:06 -0700</bug_when>
    <thetext>Created attachment 324165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361899</commentid>
    <comment_count>7</comment_count>
      <attachid>324168</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-18 14:43:41 -0700</bug_when>
    <thetext>Created attachment 324168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361984</commentid>
    <comment_count>8</comment_count>
      <attachid>324190</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-18 18:11:06 -0700</bug_when>
    <thetext>Created attachment 324190
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361986</commentid>
    <comment_count>9</comment_count>
      <attachid>324191</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-18 18:18:03 -0700</bug_when>
    <thetext>Created attachment 324191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362048</commentid>
    <comment_count>10</comment_count>
      <attachid>324191</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-10-18 20:41:25 -0700</bug_when>
    <thetext>Comment on attachment 324191
Patch

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

&gt; Source/WebCore/page/Settings.in:328
&gt; +loadsImagesAutomatically initial=false, onChange=imagesEnabledChanged
&gt; +imagesEnabled initial=true, getter=areImagesEnabled, onChange=imagesEnabledChanged

Should these have the same onChange?

Answer: yes, even though it looks like a typo.

&gt; Source/WebCore/page/SettingsBase.cpp:478
&gt;  
&gt; +
&gt; +

Lots of spaces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362049</commentid>
    <comment_count>11</comment_count>
      <attachid>324191</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-18 21:08:42 -0700</bug_when>
    <thetext>Comment on attachment 324191
Patch

Clearing flags on attachment: 324191

Committed r223653: &lt;https://trac.webkit.org/changeset/223653&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362050</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-18 21:08:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362051</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-18 21:09:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/35067339&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362054</commentid>
    <comment_count>14</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2017-10-18 21:36:55 -0700</bug_when>
    <thetext>This change broke the Windows build:
C:\cygwin\home\buildbot\WebKit\Source\WebCore\page\SettingsBase.cpp(562): error C2039: &apos;setResourceUsageOverlayVisible&apos;: is not a member of &apos;WebCore::Page&apos; [C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362055</commentid>
    <comment_count>15</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-18 21:40:20 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #14)
&gt; This change broke the Windows build:
&gt; C:\cygwin\home\buildbot\WebKit\Source\WebCore\page\SettingsBase.cpp(562):
&gt; error C2039: &apos;setResourceUsageOverlayVisible&apos;: is not a member of
&gt; &apos;WebCore::Page&apos;
&gt; [C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\WebCore\WebCore.
&gt; vcxproj]

Working on a fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1362056</commentid>
    <comment_count>16</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-10-18 21:42:39 -0700</bug_when>
    <thetext>Build fix in r223665.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322414</attachid>
            <date>2017-10-02 13:10:34 -0700</date>
            <delta_ts>2017-10-02 20:44:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177766-20171002131034.patch</filename>
            <type>text/plain</type>
            <size>200209</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDE3LTEwLTAyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBDb252ZXJ0IG1vcmUg
c2V0dGluZ3MgdG8gYmUgZ2VuZXJhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIHN0cmF0ZWd5IGZvciBTZXR0aW5ncyBn
ZW5lcmF0aW9uIGFyb3VuZCBhIGJpdC4gUHJldmlvdXNseSwKKyAgICAgICAgd2UgZ2VuZXJhdGVk
IGEgY2xhc3MgY2FsbGVkIFNldHRpbmdzR2VuZXJhdGVkIGFuZCBoYWQgb3VyIGhhbmQgd3JpdHRl
biBTZXR0aW5ncworICAgICAgICBpbmhlcml0IGZyb20gaXQuIE5vdywgaW5zdGVhZCwgdGhlIGhh
bmQgd3JpdHRlbiBiaXQgaGFzIGJlZW4gcmVuYW1lZCB0byAKKyAgICAgICAgU2V0dGluZ3NCYXNl
IGFuZCB0aGUgZ2VuZXJhdGVkIHBhcnQgaXMgY2FsbGVkIFNldHRpbmdzIGFuZCBpdCBpbmhlcml0
cyBmcm9tCisgICAgICAgIHRoZSBoYW5kIHdyaXR0ZW4gY2xhc3MuIFRoaXMgYWxsb3dzIHVzIHRv
IGFkZCBoZWxwZXJzIGluIHRoZSBiYXNlIGNsYXNzIHRoYXQKKyAgICAgICAgdGhlIGdlbmVyYXRl
ZCBjb2RlIGNhbiBjYWxsLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB1c2Ugb2YgdGhpcyBu
ZXcgc3R1Y3R1cmUsIFNldHRpbmdzLmluIGhhcyByZXBsYWNlZCBpdHMgIAorICAgICAgICAnc2V0
TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzJyB3aXRoIGEgbW9yZSBnZW5lcmljICdvbkNoYW5n
ZT1mdW5jdGlvbk5hbWUnCisgICAgICAgIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiBhIHNldHRp
bmcgY2hhbmdlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbW92ZSBtb3N0IG9mCisgICAgICAgIHRoZSBy
ZW1haW5pbmcgbm9uLWdsb2JhbCBzZXR0aW5ncyB0byBTZXR0aW5ncy5pbi4KKyAgICAgICAgCisg
ICAgICAgIAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogV2ViQ29y
ZU1hY3Jvcy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKKyAgICAgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGZpbGVzIGFuZCByZW5hbWVzLgorCisg
ICAgICAgICogU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRlU2V0dGluZ3NIZWFkZXJG
aWxlLnB5OgorICAgICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRp
bmdzSW1wbGVtZW50YXRpb25GaWxlLnB5OgorICAgICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0
aW5ncy9TZXR0aW5ncy5weToKKworICAgICAgICAgICAgLSBDb252ZXJ0IHRvIHByb2R1Y2UgYSBk
ZXJpdmVkIGNsYXNzIGNhbGwgU2V0dGluZ3MgcmF0aGVyIHRoYW4gCisgICAgICAgICAgICAgIGEg
YmFzZSBjbGFzcyBjYWxsZWQgU2V0dGluZ3NHZW5lcmF0ZWQuCisgICAgICAgICAgICAtIFJlcGxh
Y2Ugc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzIHdpdGggb25DaGFuZ2U9ZnVuY3Rpb25O
YW1lLgorICAgICAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFVSTCB0eXBlLgorCisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIAorICAgICAgICAgICAgTWFrZSBTZXR0aW5nc0Jh
c2UgYSBmcmllbmQsIGxpa2UgU2V0dGluZ3MgaXMuCisgICAgICAgIAorICAgICAgICAqIHBhZ2Uv
U2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwYWdlL1N0b3JhZ2VCbG9ja2luZ1BvbGljeS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmguCisKKyAg
ICAgICAgICAgIE1vdmUgU3RvcmFnZUJsb2NraW5nUG9saWN5IGVudW0gb3V0IG9mIFNlY3VyaXR5
T3JpZ2luIHRvIGFsbG93IGl0IHRvIHdvcmsKKyAgICAgICAgICAgIHdpdGggdGhlIGdlbmVyYXRv
ci4KKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL1NldHRpbmdzQmFzZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwLgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3NCYXNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuaC4KKyAgICAgICAgKiBwYWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1tOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQ29jb2EubW0uCisgICAg
ICAgICogcGFnZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tOiBSZW1vdmVkLgorICAgICAgICAKKyAg
ICAgICAgICAgIC0gUmVuYW1lIFNldHRpbmdzLntoLHBwfSBhbmQgU2V0dGluZ3NDb2NvYS5tbSB0
byBTZXR0aW5nc0Jhc2Uue2gsY3BwfSBhbmQgU2V0dGluZ3NCYXNlQ29jb2EubW0uCisgICAgICAg
ICAgICAtIFJlbW92ZSBoYW5kIHdyaXR0ZW4gc2V0dGluZ3MgdGhhdCBhcmUgbm93IGluIFNldHRp
bmdzLmluCisgICAgICAgICAgICAtIEFkZCBjaGFuZ2UgaGFuZGxlcnMgdXNlZCBieSB0aGUgb25D
aGFuZ2UgdmFsdWVzIGluIFNldHRpbmdzLmluCisgICAgICAgIAorICAgICAgICAqIHBhZ2UvU2V0
dGluZ3MuaW46CisKKyAgICAgICAgICAgIEFkZCBhZGRpdGlvbmFsIHNldHRpbmdzIHRvIGJlIGdl
bmVyYXRlZCBmcm9tIFNldHRpbmdzLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRp
bmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OnNldFN0b3JhZ2VC
bG9ja2luZ1BvbGljeSk6CisgICAgICAgIAorICAgICAgICAgICAgVXBkYXRlIGZvciByZW5hbWVk
IFN0b3JhZ2VCbG9ja2luZ1BvbGljeS4KKwogMjAxNy0xMC0wMiAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IG1lbW9yeSBsZWFrcyBpbiBSZW5kZXJNdWx0
aUNvbHVtbkZsb3cKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAyMjI3MTApCisr
KyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjI1Niw3
ICsyMjU2LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvU2VjdXJpdHlPcmlnaW4u
Y3BwCiAgICAgcGFnZS9TZWN1cml0eU9yaWdpbkRhdGEuY3BwCiAgICAgcGFnZS9TZWN1cml0eVBv
bGljeS5jcHAKLSAgICBwYWdlL1NldHRpbmdzLmNwcAorICAgIHBhZ2UvU2V0dGluZ3NCYXNlLmNw
cAogICAgIHBhZ2UvU29ja2V0UHJvdmlkZXIuY3BwCiAgICAgcGFnZS9TcGF0aWFsTmF2aWdhdGlv
bi5jcHAKICAgICBwYWdlL1N1c3BlbmRhYmxlVGltZXIuY3BwCkBAIC00MDIzLDkgKzQwMjMsOSBA
QCBHRU5FUkFURV9FVkVOVF9GQUNUT1JZKCR7V0VCQ09SRV9ESVJ9L2RvCiBsaXN0KEFQUEVORCBX
ZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vRXZl
bnRUYXJnZXRJbnRlcmZhY2VzLmgpCiAKIAotR0VORVJBVEVfU0VUVElOR1NfTUFDUk9TKCR7V0VC
Q09SRV9ESVJ9L3BhZ2UvU2V0dGluZ3MuaW4gU2V0dGluZ3NHZW5lcmF0ZWQuaCkKLWxpc3QoQVBQ
RU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElS
fS9TZXR0aW5nc0dlbmVyYXRlZC5oKQotbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJD
RVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1NldHRpbmdzR2VuZXJhdGVkLmNwcCkK
K0dFTkVSQVRFX1NFVFRJTkdTX01BQ1JPUygke1dFQkNPUkVfRElSfS9wYWdlL1NldHRpbmdzLmlu
IFNldHRpbmdzLmgpCitsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vU2V0dGluZ3MuaCkKK2xpc3QoQVBQRU5EIFdlYkNvcmVf
REVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TZXR0aW5ncy5j
cHApCiBsaXN0KEFQUEVORCBXZWJDb3JlVGVzdFN1cHBvcnRfU09VUkNFUyAke0RFUklWRURfU09V
UkNFU19XRUJDT1JFX0RJUn0vSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5jcHApCiAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg2LDgg
KzEzODYsOCBAQCBHRU5FUkFURV9TRVRUSU5HU19TQ1JJUFRTID0gXAogICAgICQoV2ViQ29yZSkv
U2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL1NldHRpbmdzLnB5IFwKICAgICAkKFdlYkNvcmUpL1Nj
cmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9fX2luaXRfXy5weQogCi1hbGwgOiBJbnRlcm5hbFNldHRp
bmdzR2VuZXJhdGVkLmlkbCBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcCBJbnRlcm5hbFNl
dHRpbmdzR2VuZXJhdGVkLmggU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIFNldHRpbmdzR2VuZXJhdGVk
LmgKLUludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQlaWRsIEludGVybmFsU2V0dGluZ3NHZW5lcmF0
ZWQlY3BwIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQlaCBTZXR0aW5nc0dlbmVyYXRlZCVjcHAg
U2V0dGluZ3NHZW5lcmF0ZWQlaCA6ICQoV2ViQ29yZSkvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdz
LnB5ICQoR0VORVJBVEVfU0VUVElOR1NfU0NSSVBUUykgcGFnZS9TZXR0aW5ncy5pbgorYWxsIDog
SW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5pZGwgSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5j
cHAgSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIFNldHRpbmdzLmNwcCBTZXR0aW5ncy5oCitJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkJWlkbCBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkJWNw
cCBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkJWggU2V0dGluZ3MlY3BwIFNldHRpbmdzJWggOiAk
KFdlYkNvcmUpL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy5weSAkKEdFTkVSQVRFX1NFVFRJTkdT
X1NDUklQVFMpIHBhZ2UvU2V0dGluZ3MuaW4KIAkkKFBZVEhPTikgJDwgLS1pbnB1dCAkKFdlYkNv
cmUpL3BhZ2UvU2V0dGluZ3MuaW4KIAogIyAtLS0tLS0tLQpJbmRleDogU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1N
YWMuY21ha2UJKHJldmlzaW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNyArMjU1LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGFnZS9jb2NvYS9QZXJmb3JtYW5jZUxvZ2dpbmdDb2NvYS5tbQog
ICAgIHBhZ2UvY29jb2EvUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbQogICAgIHBhZ2UvY29j
b2EvUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tCi0gICAgcGFnZS9jb2NvYS9TZXR0aW5nc0Nv
Y29hLm1tCisgICAgcGFnZS9jb2NvYS9TZXR0aW5nc0Jhc2VDb2NvYS5tbQogICAgIHBhZ2UvY29j
b2EvVXNlckFnZW50Lm1tCiAKICAgICBwYWdlL21hYy9DaHJvbWVNYWMubW0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmVNYWNyb3MuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvV2ViQ29yZU1hY3Jvcy5jbWFrZQkocmV2aXNpb24gMjIyNzEwKQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZU1hY3Jvcy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3IEBA
IG1hY3JvKEdFTkVSQVRFX1NFVFRJTkdTX01BQ1JPUyBfaW5maWxlIF8KICAgICAjIGJ1aWxkIGlu
IHBhcmFsbGVsIG9yIHRoZSB0d28gaW5zdGFuY2VzIG9mIHRoZSBydWxlIG1heSBjb25mbGljdC4K
ICAgICAjIDxodHRwczovL2NtYWtlLm9yZy9jbWFrZS9oZWxwL3YzLjAvY29tbWFuZC9hZGRfY3Vz
dG9tX2NvbW1hbmQuaHRtbD4KICAgICBzZXQoX2V4dHJhX291dHB1dAotICAgICAgICAke0RFUklW
RURfU09VUkNFU19XRUJDT1JFX0RJUn0vU2V0dGluZ3NHZW5lcmF0ZWQuY3BwCisgICAgICAgICR7
REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9TZXR0aW5ncy5jcHAKICAgICAgICAgJHtERVJJ
VkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaAogICAg
ICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vSW50ZXJuYWxTZXR0aW5nc0dlbmVy
YXRlZC5jcHAKICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0ludGVybmFs
U2V0dGluZ3NHZW5lcmF0ZWQuaWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVy
YXRlU2V0dGluZ3MvR2VuZXJhdGVTZXR0aW5nc0hlYWRlckZpbGUucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRlU2V0dGluZ3NI
ZWFkZXJGaWxlLnB5CShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9TY3JpcHRz
L0dlbmVyYXRlU2V0dGluZ3MvR2VuZXJhdGVTZXR0aW5nc0hlYWRlckZpbGUucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTI1LDExICsyNSwxMSBAQAogCiBpbXBvcnQgb3MucGF0aAogCi1mcm9tIFNldHRp
bmdzIGltcG9ydCBsaWNlbnNlLCBtYWtlQ29uZGl0aW9uYWxTdHJpbmcsIG1ha2VTZXR0ZXJGdW5j
dGlvbk5hbWUsIG1ha2VHZXR0ZXJGdW5jdGlvbk5hbWUsIGluY2x1ZGVGb3JTZXR0aW5nLCB0eXBl
SXNWYWx1ZVR5cGUKK2Zyb20gU2V0dGluZ3MgaW1wb3J0IGxpY2Vuc2UsIG1ha2VDb25kaXRpb25h
bFN0cmluZywgbWFrZVNldHRlckZ1bmN0aW9uTmFtZSwgbWFrZUdldHRlckZ1bmN0aW9uTmFtZSwg
aW5jbHVkZUZvclNldHRpbmcsIHR5cGVJc1ZhbHVlVHlwZSwgaGFzQ29tcGxleFNldHRlcgogCiAK
IGRlZiBnZW5lcmF0ZVNldHRpbmdzSGVhZGVyRmlsZShvdXRwdXREaXJlY3RvcnksIHNldHRpbmdz
KToKLSAgICBvdXRwdXRQYXRoID0gb3MucGF0aC5qb2luKG91dHB1dERpcmVjdG9yeSwgIlNldHRp
bmdzR2VuZXJhdGVkLmgiKQorICAgIG91dHB1dFBhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0RGly
ZWN0b3J5LCAiU2V0dGluZ3MuaCIpCiAgICAgb3V0cHV0RmlsZSA9IG9wZW4ob3V0cHV0UGF0aCwg
J3cnKQogICAgIG91dHB1dEZpbGUud3JpdGUobGljZW5zZSgpKQogCkBAIC01MCw3ICs1MCw3IEBA
IGRlZiBnZW5lcmF0ZVNldHRpbmdzSGVhZGVyRmlsZShvdXRwdXREaXIKIAogICAgIG91dHB1dEZp
bGUud3JpdGUoIiNwcmFnbWEgb25jZVxuXG4iKQogCi0gICAgb3V0cHV0RmlsZS53cml0ZSgiI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+XG5cbiIpCisgICAgb3V0cHV0RmlsZS53cml0ZSgiI2lu
Y2x1ZGUgXCJTZXR0aW5nc0Jhc2UuaFwiXG5cbiIpCiAKICAgICBwcmludEluY2x1ZGVzKG91dHB1
dEZpbGUsIHNvcnRlZFVuY29uZGl0aW9uYWxTZXR0aW5nc05hbWVzLCBzb3J0ZWRDb25kaXRpb25h
bHMsIHNldHRpbmdzQnlDb25kaXRpb25hbCwgc2V0dGluZ3MpCiAKQEAgLTU4LDE3ICs1OCwxNyBA
QCBkZWYgZ2VuZXJhdGVTZXR0aW5nc0hlYWRlckZpbGUob3V0cHV0RGlyCiAKICAgICBvdXRwdXRG
aWxlLndyaXRlKCJjbGFzcyBQYWdlO1xuXG4iKQogCi0gICAgb3V0cHV0RmlsZS53cml0ZSgiY2xh
c3MgU2V0dGluZ3NHZW5lcmF0ZWQgOiBwdWJsaWMgUmVmQ291bnRlZDxTZXR0aW5nc0dlbmVyYXRl
ZD4ge1xuIikKKyAgICBvdXRwdXRGaWxlLndyaXRlKCJjbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBT
ZXR0aW5nc0Jhc2Uge1xuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCJwdWJsaWM6XG4iKQotICAg
IG91dHB1dEZpbGUud3JpdGUoIiAgICB+U2V0dGluZ3NHZW5lcmF0ZWQoKTtcblxuIikKKyAgICBv
dXRwdXRGaWxlLndyaXRlKCIgICAgc3RhdGljIFJlZjxTZXR0aW5ncz4gY3JlYXRlKFBhZ2UqKTtc
blxuIikKKyAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgflNldHRpbmdzKCk7XG5cbiIpCiAKICAg
ICBwcmludEdldHRlcnNBbmRTZXR0ZXJzKG91dHB1dEZpbGUsIHNvcnRlZFVuY29uZGl0aW9uYWxT
ZXR0aW5nc05hbWVzLCBzb3J0ZWRDb25kaXRpb25hbHMsIHNldHRpbmdzQnlDb25kaXRpb25hbCwg
c2V0dGluZ3MpCiAKICAgICBvdXRwdXRGaWxlLndyaXRlKCJcbiIpCi0gICAgb3V0cHV0RmlsZS53
cml0ZSgicHJvdGVjdGVkOlxuIikKLSAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgU2V0dGluZ3NH
ZW5lcmF0ZWQoKTtcblxuIikKKyAgICBvdXRwdXRGaWxlLndyaXRlKCJwcml2YXRlOlxuIikKKyAg
ICBvdXRwdXRGaWxlLndyaXRlKCIgICAgU2V0dGluZ3MoUGFnZSopO1xuXG4iKQogCi0gICAgb3V0
cHV0RmlsZS53cml0ZSgiICAgIFBhZ2UqIG1fcGFnZSB7IG51bGxwdHIgfTtcbiIpCiAgICAgcHJp
bnRNZW1iZXJWYXJpYWJsZXMob3V0cHV0RmlsZSwgc29ydGVkVW5jb25kaXRpb25hbFNldHRpbmdz
TmFtZXMsIHNvcnRlZENvbmRpdGlvbmFscywgc2V0dGluZ3NCeUNvbmRpdGlvbmFsLCBzZXR0aW5n
cykKIAogICAgIG91dHB1dEZpbGUud3JpdGUoIn07XG5cbiIpCkBAIC0xMTUsNyArMTE1LDcgQEAg
ZGVmIHByaW50R2V0dGVyQW5kU2V0dGVyKG91dHB1dEZpbGUsIHNldAogICAgIGdldHRlckZ1bmN0
aW9uTmFtZSA9IG1ha2VHZXR0ZXJGdW5jdGlvbk5hbWUoc2V0dGluZykKIAogICAgICMgRXhwb3J0
IGlzIG9ubHkgbmVlZGVkIGlmIHRoZSBkZWZpbml0aW9uIGlzIG5vdCBpbiB0aGUgaGVhZGVyLgot
ICAgIHdlYmNvcmVFeHBvcnQgPSAiV0VCQ09SRV9FWFBPUlQgIiBpZiBzZXR0aW5nLnNldE5lZWRz
U3R5bGVSZWNhbGNJbkFsbEZyYW1lcyBlbHNlICIiCisgICAgd2ViY29yZUV4cG9ydCA9ICJXRUJD
T1JFX0VYUE9SVCAiIGlmIGhhc0NvbXBsZXhTZXR0ZXIoc2V0dGluZykgZWxzZSAiIgogCiAgICAg
aWYgbm90IHR5cGVJc1ZhbHVlVHlwZShzZXR0aW5nKToKICAgICAgICAgb3V0cHV0RmlsZS53cml0
ZSgiICAgICIgKyBzZXR0aW5nLnR5cGUgKyAiICIgKyBnZXR0ZXJGdW5jdGlvbk5hbWUgKyAiKCkg
Y29uc3QgeyByZXR1cm4gbV8iICsgc2V0dGluZy5uYW1lICsgIjsgfSBcbiIpCkBAIC0xMjQsNyAr
MTI0LDcgQEAgZGVmIHByaW50R2V0dGVyQW5kU2V0dGVyKG91dHB1dEZpbGUsIHNldAogICAgICAg
ICBvdXRwdXRGaWxlLndyaXRlKCIgICAgY29uc3QgIiArIHNldHRpbmcudHlwZSArICImICIgKyBn
ZXR0ZXJGdW5jdGlvbk5hbWUgKyAiKCkgY29uc3QgeyByZXR1cm4gbV8iICsgc2V0dGluZy5uYW1l
ICsgIjsgfSBcbiIpCiAgICAgICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICAiICsgd2ViY29yZUV4
cG9ydCArICJ2b2lkICIgKyBzZXR0ZXJGdW5jdGlvbk5hbWUgKyAiKGNvbnN0ICIgKyBzZXR0aW5n
LnR5cGUgKyAiJiAiICsgc2V0dGluZy5uYW1lICsgIikiKQogCi0gICAgaWYgc2V0dGluZy5zZXRO
ZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM6CisgICAgaWYgaGFzQ29tcGxleFNldHRlcihzZXR0
aW5nKToKICAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgiO1xuXG4iKQogICAgIGVsc2U6CiAgICAg
ICAgIG91dHB1dEZpbGUud3JpdGUoIiB7IG1fIiArIHNldHRpbmcubmFtZSArICIgPSAiICsgc2V0
dGluZy5uYW1lICsgIjsgfVxuXG4iKQpJbmRleDogU291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5l
cmF0ZVNldHRpbmdzL0dlbmVyYXRlU2V0dGluZ3NJbXBsZW1lbnRhdGlvbkZpbGUucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRl
U2V0dGluZ3NJbXBsZW1lbnRhdGlvbkZpbGUucHkJKHJldmlzaW9uIDIyMjcxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVt
ZW50YXRpb25GaWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTEgQEAKIAogaW1w
b3J0IG9zLnBhdGgKIAotZnJvbSBTZXR0aW5ncyBpbXBvcnQgbGljZW5zZSwgbWFrZUNvbmRpdGlv
bmFsU3RyaW5nLCBtYWtlU2V0dGVyRnVuY3Rpb25OYW1lLCB0eXBlSXNWYWx1ZVR5cGUKK2Zyb20g
U2V0dGluZ3MgaW1wb3J0IGxpY2Vuc2UsIG1ha2VDb25kaXRpb25hbFN0cmluZywgbWFrZVNldHRl
ckZ1bmN0aW9uTmFtZSwgbWFrZVNldHRlckNoYW5nZUZ1bmN0aW9uTmFtZSwgdHlwZUlzVmFsdWVU
eXBlLCBoYXNDb21wbGV4U2V0dGVyCiAKIAogZGVmIGdlbmVyYXRlU2V0dGluZ3NJbXBsZW1lbnRh
dGlvbkZpbGUob3V0cHV0RGlyZWN0b3J5LCBzZXR0aW5ncyk6Ci0gICAgb3V0cHV0UGF0aCA9IG9z
LnBhdGguam9pbihvdXRwdXREaXJlY3RvcnksICJTZXR0aW5nc0dlbmVyYXRlZC5jcHAiKQorICAg
IG91dHB1dFBhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0RGlyZWN0b3J5LCAiU2V0dGluZ3MuY3Bw
IikKICAgICBvdXRwdXRGaWxlID0gb3BlbihvdXRwdXRQYXRoLCAndycpCiAgICAgb3V0cHV0Rmls
ZS53cml0ZShsaWNlbnNlKCkpCiAKQEAgLTQ5LDE2ICs0OSwyMSBAQCBkZWYgZ2VuZXJhdGVTZXR0
aW5nc0ltcGxlbWVudGF0aW9uRmlsZShvCiAgICAgc29ydGVkQ29uZGl0aW9uYWxzID0gc29ydGVk
KHNldHRpbmdzQnlDb25kaXRpb25hbC5pdGVya2V5cygpKQogCiAgICAgb3V0cHV0RmlsZS53cml0
ZSgiI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iKQotICAgIG91dHB1dEZpbGUud3JpdGUoIiNpbmNs
dWRlIFwiU2V0dGluZ3NHZW5lcmF0ZWQuaFwiXG5cbiIpCisgICAgb3V0cHV0RmlsZS53cml0ZSgi
I2luY2x1ZGUgXCJTZXR0aW5ncy5oXCJcblxuIikKIAogICAgIG91dHB1dEZpbGUud3JpdGUoIiNp
bmNsdWRlIFwiUGFnZS5oXCJcbiIpCiAgICAgb3V0cHV0RmlsZS53cml0ZSgiI2luY2x1ZGUgXCJT
ZXR0aW5nc0RlZmF1bHRWYWx1ZXMuaFwiXG5cbiIpCiAKICAgICBvdXRwdXRGaWxlLndyaXRlKCJu
YW1lc3BhY2UgV2ViQ29yZSB7XG5cbiIpCiAKKyAgICBvdXRwdXRGaWxlLndyaXRlKCJSZWY8U2V0
dGluZ3M+IFNldHRpbmdzOjpjcmVhdGUoUGFnZSogcGFnZSlcbiIpCisgICAgb3V0cHV0RmlsZS53
cml0ZSgie1xuIikKKyAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2V0dGluZ3MocGFnZSkpO1xuIikKKyAgICBvdXRwdXRGaWxlLndyaXRlKCJ9XG5cbiIpCisK
ICAgICBwcmludENvbnN0cnVjdG9yKG91dHB1dEZpbGUsIHNvcnRlZFVuY29uZGl0aW9uYWxTZXR0
aW5nc05hbWVzLCBzb3J0ZWRDb25kaXRpb25hbHMsIHNldHRpbmdzQnlDb25kaXRpb25hbCwgc2V0
dGluZ3MpCiAKLSAgICBvdXRwdXRGaWxlLndyaXRlKCJTZXR0aW5nc0dlbmVyYXRlZDo6flNldHRp
bmdzR2VuZXJhdGVkKClcbiIpCisgICAgb3V0cHV0RmlsZS53cml0ZSgiU2V0dGluZ3M6On5TZXR0
aW5ncygpXG4iKQogICAgIG91dHB1dEZpbGUud3JpdGUoIntcbiIpCiAgICAgb3V0cHV0RmlsZS53
cml0ZSgifVxuXG4iKQogCkBAIC04NiwxMSArOTEsNyBAQCBkZWYgcHJpbnRJbml0aWFsaXplcihv
dXRwdXRGaWxlLCBzZXR0aW5nCiAgICAgaWYgbm90IG5lZWRzSW5pdGlhbGl6ZXIoc2V0dGluZywg
c3RhdGUpOgogICAgICAgICByZXR1cm4KIAotICAgIGlmIG5vdCBzdGF0ZVsiaGFuZGxlZEZpcnN0
VmFyaWFibGUiXToKLSAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIDogbV8iICsgc2V0dGlu
Zy5uYW1lICsgIigiICsgc2V0dGluZy5pbml0aWFsICsgIilcbiIpCi0gICAgICAgIHN0YXRlWyJo
YW5kbGVkRmlyc3RWYXJpYWJsZSJdID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIG91dHB1dEZp
bGUud3JpdGUoIiAgICAsIG1fIiArIHNldHRpbmcubmFtZSArICIoIiArIHNldHRpbmcuaW5pdGlh
bCArICIpXG4iKQorICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICAsIG1fIiArIHNldHRpbmcubmFt
ZSArICIoIiArIHNldHRpbmcuaW5pdGlhbCArICIpXG4iKQogCiAKIGRlZiBwcmludENvbmRpdGlv
bmFsSW5pdGlhbGl6ZXJzKG91dHB1dEZpbGUsIGNvbmRpdGlvbmFsLCBzZXR0aW5nc0J5Q29uZGl0
aW9uYWwsIHNldHRpbmdzLCBzdGF0ZSk6CkBAIC0xMTYsMTAgKzExNywxMCBAQCBkZWYgcHJpbnRD
b25kaXRpb25hbEluaXRpYWxpemVycyhvdXRwdXRGCiAKIAogZGVmIHByaW50Q29uc3RydWN0b3Io
b3V0cHV0RmlsZSwgc29ydGVkVW5jb25kaXRpb25hbFNldHRpbmdzTmFtZXMsIHNvcnRlZENvbmRp
dGlvbmFscywgc2V0dGluZ3NCeUNvbmRpdGlvbmFsLCBzZXR0aW5ncyk6Ci0gICAgb3V0cHV0Rmls
ZS53cml0ZSgiU2V0dGluZ3NHZW5lcmF0ZWQ6OlNldHRpbmdzR2VuZXJhdGVkKClcbiIpCisgICAg
b3V0cHV0RmlsZS53cml0ZSgiU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpXG4iKQorICAg
IG91dHB1dEZpbGUud3JpdGUoIiAgICA6IFNldHRpbmdzQmFzZShwYWdlKVxuIikKIAogICAgIHN0
YXRlID0gewotICAgICAgICAiaGFuZGxlZEZpcnN0VmFyaWFibGUiOiBGYWxzZSwKICAgICAgICAg
InByb2Nlc3NpbmdCb29sIjogVHJ1ZQogICAgIH0KIApAQCAtMTQ0LDcgKzE0NSw3IEBAIGRlZiBw
cmludENvbnN0cnVjdG9yKG91dHB1dEZpbGUsIHNvcnRlZFUKIAogCiBkZWYgbmVlZHNTZXR0ZXJC
b2R5KHNldHRpbmcpOgotICAgIGlmIHNldHRpbmcuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJh
bWVzOgorICAgIGlmIGhhc0NvbXBsZXhTZXR0ZXIoc2V0dGluZyk6CiAgICAgICAgIHJldHVybiBU
cnVlCiAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTE1NCwxNyArMTU1LDE4IEBAIGRlZiBwcmludFNl
dHRlckJvZHkob3V0cHV0RmlsZSwgc2V0dGluZykKICAgICAgICAgcmV0dXJuCiAKICAgICBzZXR0
ZXJGdW5jdGlvbk5hbWUgPSBtYWtlU2V0dGVyRnVuY3Rpb25OYW1lKHNldHRpbmcpCisgICAgY2hh
bmdlRnVuY3Rpb25OYW1lID0gbWFrZVNldHRlckNoYW5nZUZ1bmN0aW9uTmFtZShzZXR0aW5nKQog
CiAgICAgaWYgbm90IHR5cGVJc1ZhbHVlVHlwZShzZXR0aW5nKToKLSAgICAgICAgb3V0cHV0Rmls
ZS53cml0ZSgidm9pZCBTZXR0aW5nc0dlbmVyYXRlZDo6IiArIHNldHRlckZ1bmN0aW9uTmFtZSAr
ICIoIiArIHNldHRpbmcudHlwZSArICIgIiArIHNldHRpbmcubmFtZSArICIpXG4iKQorICAgICAg
ICBvdXRwdXRGaWxlLndyaXRlKCJ2b2lkIFNldHRpbmdzOjoiICsgc2V0dGVyRnVuY3Rpb25OYW1l
ICsgIigiICsgc2V0dGluZy50eXBlICsgIiAiICsgc2V0dGluZy5uYW1lICsgIilcbiIpCiAgICAg
ZWxzZToKLSAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgidm9pZCBTZXR0aW5nc0dlbmVyYXRlZDo6
IiArIHNldHRlckZ1bmN0aW9uTmFtZSArICIoY29uc3QgIiArIHNldHRpbmcudHlwZSArICImICIg
KyBzZXR0aW5nLm5hbWUgKyAiKVxuIikKKyAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgidm9pZCBT
ZXR0aW5nczo6IiArIHNldHRlckZ1bmN0aW9uTmFtZSArICIoY29uc3QgIiArIHNldHRpbmcudHlw
ZSArICImICIgKyBzZXR0aW5nLm5hbWUgKyAiKVxuIikKIAogICAgIG91dHB1dEZpbGUud3JpdGUo
IntcbiIpCiAgICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIGlmIChtXyIgKyBzZXR0aW5nLm5hbWUg
KyAiID09ICIgKyBzZXR0aW5nLm5hbWUgKyAiKVxuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCIg
ICAgICAgIHJldHVybjtcbiIpCiAgICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIG1fIiArIHNldHRp
bmcubmFtZSArICIgPSAiICsgc2V0dGluZy5uYW1lICsgIjtcbiIpCi0gICAgb3V0cHV0RmlsZS53
cml0ZSgiICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7XG4iKQor
ICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICAiICsgY2hhbmdlRnVuY3Rpb25OYW1lICsgIigpO1xu
IikKICAgICBvdXRwdXRGaWxlLndyaXRlKCJ9XG5cbiIpCiAKIApJbmRleDogU291cmNlL1dlYkNv
cmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL1NldHRpbmdzLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9TZXR0aW5ncy5weQkocmV2aXNp
b24gMjIyNzEwKQorKysgU291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL1Nl
dHRpbmdzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC02NCw5ICs2NCw5IEBAIGNsYXNzIFNldHRpbmc6
CiAgICAgICAgIHNlbGYudHlwZSA9ICJib29sIgogICAgICAgICBzZWxmLmluaXRpYWwgPSBOb25l
CiAgICAgICAgIHNlbGYuY29uZGl0aW9uYWwgPSBOb25lCi0gICAgICAgIHNlbGYuc2V0TmVlZHNT
dHlsZVJlY2FsY0luQWxsRnJhbWVzID0gTm9uZQogICAgICAgICBzZWxmLmluY2x1ZGUgPSBOb25l
CiAgICAgICAgIHNlbGYuZ2V0dGVyID0gTm9uZQorICAgICAgICBzZWxmLm9uQ2hhbmdlID0gTm9u
ZQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IHNlbGYubmFtZSAr
ICIgVFlQRToiICsgc2VsZi50eXBlCkBAIC03NCwxMiArNzQsMTIgQEAgY2xhc3MgU2V0dGluZzoK
ICAgICAgICAgICAgIHJlc3VsdCArPSAiIElOSVQ6IiArIHNlbGYuaW5pdGlhbAogICAgICAgICBp
ZiAoc2VsZi5jb25kaXRpb25hbCk6CiAgICAgICAgICAgICByZXN1bHQgKz0gIiBDT05EOiIgKyBz
ZWxmLmNvbmRpdGlvbmFsCi0gICAgICAgIGlmIChzZWxmLnNldE5lZWRzU3R5bGVSZWNhbGNJbkFs
bEZyYW1lcyk6Ci0gICAgICAgICAgICByZXN1bHQgKz0gIiBSRUNBTEM6IiArIHNlbGYuc2V0TmVl
ZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzCiAgICAgICAgIGlmIChzZWxmLmluY2x1ZGUpOgogICAg
ICAgICAgICAgcmVzdWx0ICs9ICIgSU5DTFVERToiICsgc2VsZi5pbmNsdWRlCiAgICAgICAgIGlm
IChzZWxmLmdldHRlcik6CiAgICAgICAgICAgICByZXN1bHQgKz0gIiBHRVRURVI6IiArIHNlbGYu
Z2V0dGVyCisgICAgICAgIGlmIChzZWxmLm9uQ2hhbmdlKToKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAiIENIQU5HRToiICsgc2VsZi5vbkNoYW5nZQogICAgICAgICByZXR1cm4gcmVzdWx0CiAKIApA
QCAtODgsNyArODgsNyBAQCBkZWYgdXBwZXJjYXNlRmlyc3ROKHN0cmluZywgbik6CiAKIAogZGVm
IG1ha2VTZXR0ZXJGdW5jdGlvbk5hbWUoc2V0dGluZyk6Ci0gICAgZm9yIHByZWZpeCBpbiBbImNz
cyIsICJ4c3MiLCAiZnRwIiwgImRvbSJdOgorICAgIGZvciBwcmVmaXggaW4gWyJjc3MiLCAieHNz
IiwgImZ0cCIsICJkb20iLCAiZG5zIl06CiAgICAgICAgIGlmIHNldHRpbmcubmFtZS5zdGFydHN3
aXRoKHByZWZpeCk6CiAgICAgICAgICAgICByZXR1cm4gInNldCIgKyB1cHBlcmNhc2VGaXJzdE4o
c2V0dGluZy5uYW1lLCBsZW4ocHJlZml4KSkKICAgICByZXR1cm4gInNldCIgKyB1cHBlcmNhc2VG
aXJzdE4oc2V0dGluZy5uYW1lLCAxKQpAQCAtMTQzLDYgKzE0Myw4IEBAIGRlZiB0eXBlSXNQcmlt
aXRpdmUoc2V0dGluZyk6CiBkZWYgdHlwZUlzVmFsdWVUeXBlKHNldHRpbmcpOgogICAgIGlmIHNl
dHRpbmcudHlwZSA9PSAnU3RyaW5nJzoKICAgICAgICAgcmV0dXJuIFRydWUKKyAgICBpZiBzZXR0
aW5nLnR5cGUgPT0gJ1VSTCc6CisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICByZXR1cm4gRmFs
c2UKIApAQCAtMTY3LDYgKzE2OSwxNiBAQCBkZWYgaW5jbHVkZUZvclNldHRpbmcoc2V0dGluZyk6
CiAgICAgcmV0dXJuICJcIiIgKyBzZXR0aW5nLnR5cGUgKyAiLmhcIiIKIAogCitkZWYgbWFrZVNl
dHRlckNoYW5nZUZ1bmN0aW9uTmFtZShzZXR0aW5nKToKKyAgICBpZiBzZXR0aW5nLm9uQ2hhbmdl
OgorICAgICAgICByZXR1cm4gc2V0dGluZy5vbkNoYW5nZQorICAgIHJldHVybiBOb25lCisKKwor
ZGVmIGhhc0NvbXBsZXhTZXR0ZXIoc2V0dGluZyk6CisgICAgcmV0dXJuIG1ha2VTZXR0ZXJDaGFu
Z2VGdW5jdGlvbk5hbWUoc2V0dGluZykgIT0gTm9uZQorCisKIGRlZiBwYXJzZUlucHV0KGlucHV0
KToKICAgICBzZXR0aW5ncyA9IHt9CiAgICAgZm9yIGxpbmUgaW4gb3BlbihpbnB1dCwgInIiKToK
QEAgLTE4NCwxMiArMTk2LDEyIEBAIGRlZiBwYXJzZUlucHV0KGlucHV0KToKICAgICAgICAgICAg
ICAgICAgICAgc2V0dGluZy5pbml0aWFsID0gdmFsdWUKICAgICAgICAgICAgICAgICBpZiAobmFt
ZSA9PSAnY29uZGl0aW9uYWwnKToKICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5jb25kaXRp
b25hbCA9IHZhbHVlCi0gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ3NldE5lZWRzU3R5bGVS
ZWNhbGNJbkFsbEZyYW1lcycpOgotICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNldE5lZWRz
U3R5bGVSZWNhbGNJbkFsbEZyYW1lcyA9IHZhbHVlCiAgICAgICAgICAgICAgICAgaWYgKG5hbWUg
PT0gJ2luY2x1ZGUnKToKICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5pbmNsdWRlID0gdmFs
dWUKICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnZ2V0dGVyJyk6CiAgICAgICAgICAgICAg
ICAgICAgIHNldHRpbmcuZ2V0dGVyID0gdmFsdWUKKyAgICAgICAgICAgICAgICBpZiAobmFtZSA9
PSAnb25DaGFuZ2UnKToKKyAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5vbkNoYW5nZSA9IHZh
bHVlCiAKICAgICAgICAgICAgICMgRklYTUU6IEFTU0VSVCBzb21ldGhpbmcgYWJvdXQgc2V0dGlu
Zy5pbml0aWFsCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjM5LDcg
KzYzOSw3IEBACiAJCTE0OTQ3RkZFMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRN
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTQ3
RkZDMTJGODBDRDIwMEEwRjYzMSAvKiBEb2N1bWVudE9yZGVyZWRNYXAuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDk5M0JFNTBCMkYyQjFDMDA1
MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0OTkzQkUzMEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRy
b2xsZXIuY3BwICovOyB9OwogCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDk5M0JFNDBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTRDOUE1RUEwQjNEMTA1RjAw
NUEwMjMyIC8qIFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgKi87
IH07CisJCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5nc0Jhc2UuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRDOUE1RTkwQjNEMTA1
RjAwNUEwMjMyIC8qIFNldHRpbmdzQmFzZS5jcHAgKi87IH07CiAJCTE0Q0Y3QjMzMDlGNkVDRDcw
MEVCMzY2NSAvKiBKU0NTU1J1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMTRDRjdCMzEwOUY2RUNENzAwRUIzNjY1IC8qIEpTQ1NTUnVsZS5jcHAg
Ki87IH07CiAJCTE0Q0Y3QjM0MDlGNkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3QjMyMDlGNkVDRDcw
MEVCMzY2NSAvKiBKU0NTU1J1bGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxNEQ2NEI1QzEzNEE1QjZCMDBFNThGREEgLyogVHJlZVNjb3BlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0RDY0QjVB
MTM0QTVCNkIwMEU1OEZEQSAvKiBUcmVlU2NvcGUuY3BwICovOyB9OwpAQCAtMzE1MSw4ICszMTUx
LDggQEAKIAkJN0FGOUIyMEUxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QUY5QjIwQTE4
Q0ZCNUYzMDBDNjRCRUYgLyogSlNWVFRSZWdpb25MaXN0LmNwcCAqLzsgfTsKIAkJN0FGOUIyMEYx
OENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpT
VlRUUmVnaW9uTGlzdC5oICovOyB9OwogCQk3QkU3NDI3MzgxRkE5MDZGQkI0RjBGMkMgLyogSlNT
VkdHcmFwaGljc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDk1MEM0QzAyQkVEODkzNkY4MThFMkY5OSAvKiBKU1NWR0dyYXBoaWNzRWxlbWVu
dC5oICovOyB9OwotCQk3QzAxN0NCNjFGN0U3MDRCMDA0NDRFOUIgLyogU2V0dGluZ3NHZW5lcmF0
ZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mw
MTdDQjIxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzR2VuZXJhdGVkLmNwcCAqLzsgfTsKLQkJ
N0MwMTdDQjcxRjdFNzA1MDAwNDQ0RTlCIC8qIFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAxN0NCMzFGN0U2RkZGMDA0
NDRFOUIgLyogU2V0dGluZ3NHZW5lcmF0ZWQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3QzAxN0NCNjFGN0U3MDRCMDA0NDRFOUIgLyogU2V0dGlu
Z3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0Mw
MTdDQjIxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzLmNwcCAqLzsgfTsKKwkJN0MwMTdDQjcx
RjdFNzA1MDAwNDQ0RTlCIC8qIFNldHRpbmdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAxN0NCMzFGN0U2RkZGMDA0NDRFOUIgLyogU2V0dGluZ3Mu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAx
N0NCQjFGN0U5N0NFMDA0NDRFOUIgLyogRGVidWdPdmVybGF5UmVnaW9ucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMTdDQkExRjdFOTdDRTAwNDQ0
RTlCIC8qIERlYnVnT3ZlcmxheVJlZ2lvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAxN0NCRDFGN0U5ODM3MDA0NDRFOUIgLyogRWRpdGFi
bGVMaW5rQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDMDE3Q0JDMUY3RTk4MzcwMDQ0NEU5QiAvKiBFZGl0YWJsZUxpbmtCZWhhdmlvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMDE3
Q0JGMUY3RTk4ODgwMDQ0NEU5QiAvKiBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDE3Q0JFMUY3RTk4ODgw
MDQ0NEU5QiAvKiBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQxNyw2ICszNDE3LDcgQEAKIAkJN0NF
NkNCRkIxODdGMzcwNzAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFNkNCRkExODdGMzcwNzAwRDQ2QkY1
IC8qIEZvcm1hdENvbnZlcnRlci5oICovOyB9OwogCQk3Q0U2Q0JGRDE4N0YzOTQ5MDBENDZCRjUg
LyogRm9ybWF0Q29udmVydGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDRTZDQkZDMTg3RjM5NDkwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIu
Y3BwICovOyB9OwogCQk3Q0U5QTEyQjFFQTJGMURCMDA2NTFBRDEgLyogSURMQXR0cmlidXRlcy5q
c29uIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgzQjUz
MzgxNEYzOTlCQjAwNzIwRDlEIC8qIElETEF0dHJpYnV0ZXMuanNvbiAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3Q0VENzdGRDFGODI5MkU1MDAzQTIx
NkUgLyogU3RvcmFnZUJsb2NraW5nUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0VENzdGQzFGODI5MkMzMDAzQTIxNkUgLyogU3RvcmFnZUJs
b2NraW5nUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJN0NGMTU4OUIxRUJDNENGRDAwRDRCRkI3IC8qIFN1YnJlc291cmNlSW50ZWdyaXR5
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDRjE1
ODk5MUVCQkNEQzcwMEQ0QkZCNyAvKiBTdWJyZXNvdXJjZUludGVncml0eS5jcHAgKi87IH07CiAJ
CTdDRjkzMEU3MUUwMUY5QjQwMEJBRkZCRSAvKiBQYXltZW50SGVhZGVycy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGOTMwRTYxRTAxRjlBRDAwQkFG
RkJFIC8qIFBheW1lbnRIZWFkZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJN0NGREM1N0MxQUMxRDgwNTAwRTI0QTU3IC8qIENvbnRlbnRFeHRl
bnNpb25FcnJvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3Q0ZEQzU3QTFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNw
cCAqLzsgfTsKQEAgLTQwMDEsNyArNDAwMiw3IEBACiAJCTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFC
QyAvKiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGNTIzRDI3OTAyREU0M0Q3MDE4NjM1Q0EgLyogVGV4dFJlc291cmNl
RGVjb2Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTkzRjE5OTE4MDgyNDVFNTkwMDFFOUFCQyAvKiBSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QzMDQwMkRFNDQ3NjAxODYzNUNBIC8q
IFJhbmdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJOTNGMTk5MkYwODI0NUU1OTAwMUU5QUJDIC8qIEN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2ODQwMkRFM0I4NjAxRUE0MTIyIC8q
IEN1cnNvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0EwMkRFM0ExNDAxRUE0MTIy
IC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJOTNGMTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdzQmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4Nzg2M0EwMkRFM0Ex
NDAxRUE0MTIyIC8qIFNldHRpbmdzQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTUwMDgyNDVFNTkwMDFFOUFCQyAvKiBDYWNoZVBv
bGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjU4
Nzg2NDkwMkRFM0E5QTAxRUE0MTIyIC8qIENhY2hlUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOTNGMTk5NjMwODI0NUU1OTAwMUU5QUJD
IC8qIFNTTEtleUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRjU4Nzg2NjIwMkRFM0IxMTAxRUE0MTIyIC8qIFNTTEtleUdlbmVyYXRvci5o
ICovOyB9OwogCQk5M0YxOTk4QzA4MjQ1RTU5MDAxRTlBQkMgLyogUmVuZGVyVHJlZUFzVGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM5NTVBNDEw
M0Q3MjkzMjAwODYzNUNFIC8qIFJlbmRlclRyZWVBc1RleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDQ1NCw3ICs0NDU1LDcgQEAKIAkJQTE3
QzgxMjIwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdDODEyMDBGMkE1Q0Y3MDA1
REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKIAkJQTE3QzgxMjMwRjJBNUNG
NzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE3QzgxMjEwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxF
bGVtZW50RmFjdG9yeS5oICovOyB9OwogCQlBMTdEMjc1RTFFQUM1Nzk4MDBCRjAxRTcgLyogTWVk
aWFTZWxlY3Rpb25PcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEExN0QyNzVEMUVBQzU3OTgwMEJGMDFFNyAvKiBNZWRpYVNlbGVjdGlvbk9wdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUEx
ODJENUI3MUJFNzIyNjcwMDg3QTdDQyAvKiBTZXR0aW5nc0NvY29hLm1tIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0ND
IC8qIFNldHRpbmdzQ29jb2EubW0gKi87IH07CisJCUExODJENUI3MUJFNzIyNjcwMDg3QTdDQyAv
KiBTZXR0aW5nc0Jhc2VDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEExODJENUI2MUJFNzIyNjIwMDg3QTdDQyAvKiBTZXR0aW5nc0Jhc2VDb2Nv
YS5tbSAqLzsgfTsKIAkJQTE4NUI0MjkxRTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdMb2FkZXIu
bW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTg1QjQy
NzFFODIxMUExMDBEQzkxMTggLyogUHJldmlld0xvYWRlci5tbSAqLzsgfTsKIAkJQTE4NUI0MkEx
RTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdMb2FkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExODVCNDI4MUU4MjExQTEwMERDOTExOCAvKiBQcmV2
aWV3TG9hZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQTE4ODkwQUUxQUExM0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50
RmlsdGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTE4ODkwQUMxQUExM0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVy
Lm1tICovOyB9OwpAQCAtODIxNyw3ICs4MjE4LDcgQEAKIAkJMTQ5OTNCRTQwQjJGMkIxQzAwNTA0
OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRm9jdXNDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0QTk4
RTA1MTM2Mzg2QTIwMEM5RkVEMiAvKiBCbG9iLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBC
bG9iLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRCREY1OUExMzY1Mzk5MTAw
MTQ4MzkzIC8qIEZpbGVSZWFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEZpbGVSZWFk
ZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxNEM5QTVFOTBCM0QxMDVGMDA1
QTAyMzIgLyogU2V0dGluZ3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNldHRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTRDOUE1RTkw
QjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2V0dGluZ3NCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMTRDRjc4NzEwOUY1ODdDQTAwRUIzNjY1IC8qIERlcHJlY2F0ZWRDU1NPTVZhbHVl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGVwcmVjYXRlZENTU09NVmFsdWUuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNENGN0E3MDA5RjVDRjlBMDBFQjM2NjUgLyog
Q1NTUnVsZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENTU1J1bGUuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNENGN0IzMTA5RjZFQ0Q3MDBFQjM2NjUgLyogSlNDU1NS
dWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NTU1J1bGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTEzNTAsOCArMTEzNTEsOCBAQAog
CQk3QUY5QjIwOTE4Q0ZCNUYyMDBDNjRCRUYgLyogSlNWVFRSZWdpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNWVFRSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0FGOUIyMEExOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QUY5QjIwQjE4Q0ZCNUYzMDBDNjRCRUYg
LyogSlNWVFRSZWdpb25MaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
VlRUUmVnaW9uTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3QzAxN0NCMjFG
N0U2RkZGMDA0NDRFOUIgLyogU2V0dGluZ3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk3QzAxN0NCMzFGN0U2RkZGMDA0NDRFOUIgLyogU2V0dGluZ3NHZW5l
cmF0ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dGluZ3NHZW5lcmF0
ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwMTdDQjIxRjdFNkZGRjAwNDQ0
RTlCIC8qIFNldHRpbmdzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNldHRpbmdzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0MwMTdDQjMxRjdF
NkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNldHRpbmdzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDE3Q0JBMUY3
RTk3Q0UwMDQ0NEU5QiAvKiBEZWJ1Z092ZXJsYXlSZWdpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
YnVnT3ZlcmxheVJlZ2lvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MwMTdD
QkMxRjdFOTgzNzAwNDQ0RTlCIC8qIEVkaXRhYmxlTGlua0JlaGF2aW9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEVkaXRhYmxlTGlua0JlaGF2aW9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTdDMDE3Q0JFMUY3RTk4ODgwMDQ0NEU5QiAvKiBGb3JjZWRBY2Nlc3NpYmlsaXR5VmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xMTcwMyw2ICsxMTcwNCw3IEBACiAJCTdDRTdGQTU5MUVGODgyMzAw
MDYwQzlENiAvKiBEb2N1bWVudFRvdWNoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERvY3VtZW50VG91Y2gu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFN0ZBNUExRUY4ODIzMDAwNjBDOUQ2
IC8qIERvY3VtZW50VG91Y2guaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERvY3VtZW50VG91Y2guaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Q0U3RkE1QjFFRjg4MjMwMDA2MEM5RDYgLyogRG9jdW1lbnRU
b3VjaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEb2N1bWVudFRvdWNoLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0NFRDc3RkMxRjgyOTJDMzAwM0EyMTZFIC8qIFN0b3JhZ2VC
bG9ja2luZ1BvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdG9yYWdl
QmxvY2tpbmdQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGMTU4OTkx
RUJCQ0RDNzAwRDRCRkI3IC8qIFN1YnJlc291cmNlSW50ZWdyaXR5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN1YnJlc291cmNlSW50ZWdyaXR5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NGMTU4OUExRUJCQ0RDNzAwRDRCRkI3IC8qIFN1YnJl
c291cmNlSW50ZWdyaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1YnJl
c291cmNlSW50ZWdyaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjkzMEU2
MUUwMUY5QUQwMEJBRkZCRSAvKiBQYXltZW50SGVhZGVycy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXltZW50SGVhZGVycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTI5MjgsNyArMTI5MzAsNyBAQAogCQlBMTdDODEyMDBGMkE1Q0Y3MDA1REFBRUIgLyog
SFRNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUExN0M4MTIxMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSFRNTEVsZW1lbnRGYWN0b3J5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExN0QyNzVEMUVBQzU3OTgwMEJGMDFFNyAvKiBNZWRpYVNl
bGVjdGlvbk9wdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVNlbGVjdGlvbk9wdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3Q0MgLyog
U2V0dGluZ3NDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFNldHRpbmdzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExODJENUI2
MUJFNzIyNjIwMDg3QTdDQyAvKiBTZXR0aW5nc0Jhc2VDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNldHRpbmdzQmFzZUNvY29hLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBMTg1QjQyNzFFODIxMUExMDBEQzkxMTggLyogUHJldmlld0xv
YWRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFByZXZpZXdM
b2FkZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExODVCNDI4MUU4MjExQTEw
MERDOTExOCAvKiBQcmV2aWV3TG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFByZXZpZXdMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE4ODkw
QUMxQUExM0YyNTAwMjZDMzAxIC8qIFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGFyZW50YWxDb250cm9sc0Nv
bnRlbnRGaWx0ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTk0NSw3ICsx
NTk0Nyw3IEBACiAJCUY1NUIzREFDMTI1MUYxMkQwMDNFRjI2OSAvKiBXZWVrSW5wdXRUeXBlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlZWtJbnB1dFR5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRjU4Nzg0RjAwMkRFMzc1OTAxRUE0MTIyIC8qIEN1cnNv
ck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IEN1cnNvck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NTRDMDJERTM3NTkwMUVBNDEyMiAvKiBXZWJD
b3JlRnJhbWVWaWV3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdlYkNvcmVGcmFtZVZpZXcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFi
V2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAv
KiBTZXR0aW5ncy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTZXR0aW5ncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKKwkJRjU4Nzg2M0EwMkRFM0ExNDAxRUE0MTIyIC8qIFNldHRpbmdz
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTZXR0aW5nc0Jhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NjQ5MDJERTNBOUEwMUVBNDEyMiAvKiBDYWNoZVBvbGlj
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWNoZVBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJRjU4Nzg2NjIwMkRFM0IxMTAxRUE0MTIyIC8qIFNTTEtleUdlbmVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
U0xLZXlHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4Njg0MDJERTNCODYwMUVBNDEyMiAvKiBDdXJzb3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Vyc29y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwpAQCAtMTkzMTUsNyArMTkzMTcsNyBAQAogCQkJCUFENUEwQzIyMURFQ0EzN0UwMDcwNzA1NCAv
KiBQZXJmb3JtYW5jZUxvZ2dpbmdDb2NvYS5tbSAqLywKIAkJCQlBREZFMkI1NDFCRDVGNDEyMDBE
QUI0NTcgLyogUmVzb3VyY2VVc2FnZU92ZXJsYXlDb2NvYS5tbSAqLywKIAkJCQlBNTA3MUU4ODFD
NTZENEZBMDA5OTUxQkUgLyogUmVzb3VyY2VVc2FnZVRocmVhZENvY29hLm1tICovLAotCQkJCUEx
ODJENUI2MUJFNzIyNjIwMDg3QTdDQyAvKiBTZXR0aW5nc0NvY29hLm1tICovLAorCQkJCUExODJE
NUI2MUJFNzIyNjIwMDg3QTdDQyAvKiBTZXR0aW5nc0Jhc2VDb2NvYS5tbSAqLywKIAkJCQk3QzAx
N0NEMTFGN0VDQTYyMDA0NDRFOUIgLyogU2V0dGluZ3NEZWZhdWx0VmFsdWVzQ29jb2EubW0gKi8s
CiAJCQkJMjYyNTVGMDExODg3OEUxMTAwMDZFMUZEIC8qIFVzZXJBZ2VudC5oICovLAogCQkJCTVE
NTk3NUI2MTk2MzYzN0IwMEQwMDg3OCAvKiBVc2VyQWdlbnQubW0gKi8sCkBAIC0xOTQzNSw4ICsx
OTQzNyw4IEBACiAJCQkJNDNCODVFRDMxOENCRUM1MjAwRTMxQUY0IC8qIFNlbGVjdG9yUHNldWRv
Q2xhc3NBbmRDb21wYXRpYmlsaXR5RWxlbWVudE1hcC5ncGVyZiAqLywKIAkJCQkyNkFBMEY5RDE4
RDJBMThCMDA0MTkzODEgLyogU2VsZWN0b3JQc2V1ZG9FbGVtZW50VHlwZU1hcC5jcHAgKi8sCiAJ
CQkJMjZBQTBGOUYxOEQyQTFDMTAwNDE5MzgxIC8qIFNlbGVjdG9yUHNldWRvRWxlbWVudFR5cGVN
YXAuZ3BlcmYgKi8sCi0JCQkJN0MwMTdDQjIxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzR2Vu
ZXJhdGVkLmNwcCAqLywKLQkJCQk3QzAxN0NCMzFGN0U2RkZGMDA0NDRFOUIgLyogU2V0dGluZ3NH
ZW5lcmF0ZWQuaCAqLywKKwkJCQk3QzAxN0NCMjFGN0U2RkZGMDA0NDRFOUIgLyogU2V0dGluZ3Mu
Y3BwICovLAorCQkJCTdDMDE3Q0IzMUY3RTZGRkYwMDQ0NEU5QiAvKiBTZXR0aW5ncy5oICovLAog
CQkJCTk5MDhCMEZEMUJDQUQwN0QwMEVEMEY1NSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5j
cHAgKi8sCiAJCQkJOUIwM0Q4MDYxQkIzMTEwRDAwQjc2NEM5IC8qIFN0cmVhbUludGVybmFsc0J1
aWx0aW5zLmggKi8sCiAJCQkJODM4NkE5NkUxOUY2MUU0RjAwRTFFQzRBIC8qIFN0eWxlQnVpbGRl
ci5jcHAgKi8sCkBAIC0xOTg5MiwxNCArMTk4OTQsMTUgQEAKIAkJCQlCQ0QwRTBGOTBFOTcyQzM1
MDAyNjVERUEgLyogU2VjdXJpdHlPcmlnaW5IYXNoLmggKi8sCiAJCQkJOTc0RDJEQTIxNDZBNTM1
RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmNwcCAqLywKIAkJCQk5NzREMkRBMzE0NkE1MzVE
MDBENTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuaCAqLywKLQkJCQkxNEM5QTVFOTBCM0QxMDVGMDA1
QTAyMzIgLyogU2V0dGluZ3MuY3BwICovLAotCQkJCUY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAv
KiBTZXR0aW5ncy5oICovLAogCQkJCUJDNTlERUY4MTY5REVEQzMwMDE2QUMzNCAvKiBTZXR0aW5n
cy5pbiAqLywKKwkJCQkxNEM5QTVFOTBCM0QxMDVGMDA1QTAyMzIgLyogU2V0dGluZ3NCYXNlLmNw
cCAqLywKKwkJCQlGNTg3ODYzQTAyREUzQTE0MDFFQTQxMjIgLyogU2V0dGluZ3NCYXNlLmggKi8s
CiAJCQkJN0MwMTdDQ0ExRjdFOUI4QjAwNDQ0RTlCIC8qIFNldHRpbmdzRGVmYXVsdFZhbHVlcy5o
ICovLAogCQkJCTVDNjg4QUEyMUQzODEyNkYwMDBCNTRGQSAvKiBTb2NrZXRQcm92aWRlci5jcHAg
Ki8sCiAJCQkJNUM3Qzg4RDcxRDBGMUYyQjAwOUQyRjZEIC8qIFNvY2tldFByb3ZpZGVyLmggKi8s
CiAJCQkJNjI2Q0RFMEMxMTQwNDI0QzAwMUU1QTY4IC8qIFNwYXRpYWxOYXZpZ2F0aW9uLmNwcCAq
LywKIAkJCQk2MjZDREUwRDExNDA0MjRDMDAxRTVBNjggLyogU3BhdGlhbE5hdmlnYXRpb24uaCAq
LywKKwkJCQk3Q0VENzdGQzFGODI5MkMzMDAzQTIxNkUgLyogU3RvcmFnZUJsb2NraW5nUG9saWN5
LmggKi8sCiAJCQkJNjJDMTIxN0ExMUFCOUU3NjAwM0M0NjJDIC8qIFN1c3BlbmRhYmxlVGltZXIu
Y3BwICovLAogCQkJCTYyQzEyMTdCMTFBQjlFNzcwMDNDNDYyQyAvKiBTdXNwZW5kYWJsZVRpbWVy
LmggKi8sCiAJCQkJN0MwMTdDQzgxRjdFOUIzMDAwNDQ0RTlCIC8qIFRleHREaXJlY3Rpb25TdWJt
ZW51SW5jbHVzaW9uQmVoYXZpb3IuaCAqLywKQEAgLTMwMDc3LDkgKzMwMDgwLDkgQEAKIAkJCQk1
MUYxNzU2QzFGM0VCQzgzMDBDNzQ5NTAgLyogU2VydmljZVdvcmtlclVwZGF0ZVZpYUNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUUxMDA5OUU2NDkyMDA1NkU1ODEgLyogU2V0Tm9kZUF0
dHJpYnV0ZUNvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUI4REJEQjRDMTMwQjBGOEEwMEY1
Q0RCMSAvKiBTZXRTZWxlY3Rpb25Db21tYW5kLmggaW4gSGVhZGVycyAqLywKLQkJCQk5M0YxOTk0
RjA4MjQ1RTU5MDAxRTlBQkMgLyogU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTdDMDE3
Q0I3MUY3RTcwNTAwMDQ0NEU5QiAvKiBTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTNG
MTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRpbmdzQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJN0MwMTdDQ0IxRjdFOUI4QjAwNDQ0RTlCIC8qIFNldHRpbmdzRGVmYXVsdFZhbHVlcy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJN0MwMTdDQjcxRjdFNzA1MDAwNDQ0RTlCIC8qIFNldHRpbmdzR2Vu
ZXJhdGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNERDQ1MDEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1RUI4QzQwRTgyMDMxQjAwQjI1OTY1
IC8qIFNoYWRvd0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE2RDE2OTY0MTM0NkI0QzEwMDBF
Qjc3MCAvKiBTaGFkb3dSb290LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMTY5LDYgKzMwMTcyLDcg
QEAKIAkJCQlBNUFGQjM1MDExNTE1MUE3MDBCMDQ1Q0IgLyogU3RlcFJhbmdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxQUMyRDg0NTE3MTczNEExMDA2NTJGQzAgLyogU3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTFCRTM3RTAwREFFRTAwRTAwMTA4NUZDIC8qIFN0b3JhZ2VBcmVhLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3Q0VENzdGRDFGODI5MkU1MDAzQTIxNkUgLyogU3RvcmFnZUJsb2Nr
aW5nUG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUUwQkFCQjBEQTU1NDcxMDBBOUU0MTcg
LyogU3RvcmFnZUV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUVCREQ4NDEwNUVEREVDMDA1
NjgxNkYgLyogU3RvcmFnZUV2ZW50RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTFF
MEJCMzgwREE1QUNCNjAwQTlFNDE3IC8qIFN0b3JhZ2VNYXAuaCBpbiBIZWFkZXJzICovLApAQCAt
MzM5OTUsMTAgKzMzOTk5LDEwIEBACiAJCQkJNTFGNjQ1QTIxRjRCRjUzQzAwQjU0REVEIC8qIFNl
cnZpY2VXb3JrZXJSZWdpc3RyYXRpb25PcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkz
MzA5RTBGMDk5RTY0OTIwMDU2RTU4MSAvKiBTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCOERCREI0QjEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9u
Q29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkxNEM5QTVFQTBCM0QxMDVGMDA1QTAyMzIg
LyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTE4MkQ1QjcxQkU3MjI2NzAwODdB
N0NDIC8qIFNldHRpbmdzQ29jb2EubW0gaW4gU291cmNlcyAqLywKKwkJCQk3QzAxN0NCNjFGN0U3
MDRCMDA0NDRFOUIgLyogU2V0dGluZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMTRDOUE1RUEw
QjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzQmFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
MTgyRDVCNzFCRTcyMjY3MDA4N0E3Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gaW4gU291cmNl
cyAqLywKIAkJCQk3QzAxN0NEMzFGN0VDQTYzMDA0NDRFOUIgLyogU2V0dGluZ3NEZWZhdWx0VmFs
dWVzQ29jb2EubW0gaW4gU291cmNlcyAqLywKLQkJCQk3QzAxN0NCNjFGN0U3MDRCMDA0NDRFOUIg
LyogU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzREQ0NEYxMkY1
RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM1RUI4
QzMwRTgyMDMxQjAwQjI1OTY1IC8qIFNoYWRvd0RhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTZEMTY5NjIxMzQ2QjQ5QjAwMEVCNzcwIC8qIFNoYWRvd1Jvb3QuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAkocmV2aXNpb24gMjIyNzEwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEsNyBAQCBjbGFzcyBWaXNp
YmxlU2VsZWN0aW9uOwogY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiBjbGFzcyBTY3JvbGxpbmdDb29y
ZGluYXRvcjsKIGNsYXNzIFNldHRpbmdzOworY2xhc3MgU2V0dGluZ3NCYXNlOwogY2xhc3MgU29j
a2V0UHJvdmlkZXI7CiBjbGFzcyBTdG9yYWdlTmFtZXNwYWNlOwogY2xhc3MgU3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyOwpAQCAtMTUwLDYgKzE1MSw3IEBAIGNsYXNzIFBhZ2UgOiBwdWJsaWMgU3Vw
cGxlbWVudGFibGU8UGFnZT4KICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlKTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBmcmllbmQgY2xhc3MgU2V0dGluZ3M7CisgICAg
ZnJpZW5kIGNsYXNzIFNldHRpbmdzQmFzZTsKIAogcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHVwZGF0ZVN0eWxlRm9yQWxsUGFnZXNBZnRlckdsb2JhbENoYW5nZUluRW52
aXJvbm1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHJldmlz
aW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUg
IlN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00MywxMSArNDQs
NyBAQCBwdWJsaWM6CiAgICAgICAgIEFzawogICAgIH07CiAKLSAgICBlbnVtIFN0b3JhZ2VCbG9j
a2luZ1BvbGljeSB7Ci0gICAgICAgIEFsbG93QWxsU3RvcmFnZSA9IDAsCi0gICAgICAgIEJsb2Nr
VGhpcmRQYXJ0eVN0b3JhZ2UsCi0gICAgICAgIEJsb2NrQWxsU3RvcmFnZQotICAgIH07CisgICAg
dXNpbmcgU3RvcmFnZUJsb2NraW5nUG9saWN5ID0gV2ViQ29yZTo6U3RvcmFnZUJsb2NraW5nUG9s
aWN5OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZWN1cml0eU9yaWdpbj4gY3Jl
YXRlKGNvbnN0IFVSTCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2VjdXJpdHlP
cmlnaW4+IGNyZWF0ZVVuaXF1ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAJKHJl
dmlzaW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShub25l
eGlzdGVudCkKQEAgLTEsNjc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcsIDIwMDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0KLSNpbmNsdWRlICJBdWRpb1Nlc3Np
b24uaCIKLSNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDYWNo
ZWRSZXNvdXJjZUxvYWRlci5oIgotI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2UuaCIKLSNpbmNsdWRl
ICJET01UaW1lci5oIgotI2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUgIkZvbnRHZW5lcmljRmFtaWxp
ZXMuaCIKLSNpbmNsdWRlICJGcmFtZVRyZWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNp
bmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNp
bmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGFnZUNh
Y2hlLmgiCi0jaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW5jbHVkZSA8
bGltaXRzPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgPHd0Zi9zcGkv
ZGFyd2luL2R5bGRTUEkuaD4KLSNlbmRpZgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYg
VVNFKEFWRk9VTkRBVElPTikKLSNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFj
LmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0jaW5jbHVkZSAiTW9ja1Jl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyB2b2lkIHNldEltYWdlTG9hZGluZ1NldHRpbmdzKFBhZ2UqIHBhZ2UpCi17Ci0g
ICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9
ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLnNldEltYWdlc0VuYWJsZWQocGFnZS0+c2V0dGluZ3MoKS5hcmVJbWFnZXNFbmFibGVkKCkp
OwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRB
dXRvTG9hZEltYWdlcyhwYWdlLT5zZXR0aW5ncygpLmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgp
KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlD
aGFuZ2UoUGFnZSogcGFnZSkKLXsKLSAgICBpbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOwot
ICAgIGlmIChwYWdlKQotICAgICAgICBwYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFt
ZXMoKTsKLX0KLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi1ib29sIFNldHRpbmdzOjpnQVZGb3Vu
ZGF0aW9uRW5hYmxlZCA9IHRydWU7Ci1ib29sIFNldHRpbmdzOjpnQVZGb3VuZGF0aW9uTlNVUkxT
ZXNzaW9uRW5hYmxlZCA9IHRydWU7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotYm9v
bCBTZXR0aW5nczo6Z1FUS2l0RW5hYmxlZCA9IGZhbHNlOwotI2VuZGlmCi0KLSNpZiBVU0UoR1NU
UkVBTUVSKQotYm9vbCBTZXR0aW5nczo6Z0dTdHJlYW1lckVuYWJsZWQgPSB0cnVlOwotI2VuZGlm
Ci0KLWJvb2wgU2V0dGluZ3M6OmdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxzZTsKLWJvb2wg
U2V0dGluZ3M6OmdVc2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6
OmdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkID0gZmFsc2U7Ci0KLSNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQotYm9vbCBTZXR0aW5nczo6Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBmYWxz
ZTsKLWJvb2wgU2V0dGluZ3M6OmdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24g
PSB0cnVlOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi1ib29sIFNldHRpbmdzOjpnU2hv
dWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMgPSB0cnVlOwotI2VuZGlmCi0gICAgCi1ib29sIFNl
dHRpbmdzOjpnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmFs
c2U7Ci1ib29sIFNldHRpbmdzOjpnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQg
PSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVu
YWJsZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9
IGZhbHNlOwotCi0jaWYgUExBVEZPUk0oSU9TKQotYm9vbCBTZXR0aW5nczo6Z05ldHdvcmtEYXRh
VXNhZ2VUcmFja2luZ0VuYWJsZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdBVktpdEVuYWJs
ZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9i
c2VydmF0aW9uID0gZmFsc2U7Ci0jZW5kaWYKLWJvb2wgU2V0dGluZ3M6OmdNYW5hZ2VBdWRpb1Nl
c3Npb24gPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJs
ZWQgPSBmYWxzZTsKLQotYm9vbCBTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVk
KCkKLXsKLSAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUN1c3RvbVBhc3RlYm9h
cmREYXRhVG9EZWZhdWx0VmFsdWU7Ci0gICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUN1c3Rv
bVBhc3RlYm9hcmREYXRhVG9EZWZhdWx0VmFsdWUsIFtdIHsKLSNpZiBQTEFURk9STShJT1MpICYm
IF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTEwMzAwCi0gICAgICAgIGdDdXN0
b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQgPSBJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmko
KSB8fCBkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlMRF9JT1NfVkVSU0lPTl8x
MV8zOwotI2VsaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPj0gMTAxMzA0Ci0gICAgICAgIC8vIEZJWE1FOiBVcGRhdGUgdGhpcyBsaW5rZWQtb24gY2hl
Y2sgb25jZSB0aGUgY29ycmVjdCBtYWNybyBpcyBpbiB0aGUgU0RLLgotICAgICAgICBnQ3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkID0gTWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCkgfHwgZHls
ZF9nZXRfcHJvZ3JhbV9zZGtfdmVyc2lvbigpID4gRFlMRF9NQUNPU1hfVkVSU0lPTl8xMF8xMzsK
LSNlbHNlCi0gICAgICAgIGdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQgPSBmYWxzZTsKLSNl
bmRpZgotICAgIH0pOwotICAgIHJldHVybiBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOwot
fQotCi0vLyBUaGlzIGFtb3VudCBvZiB0aW1lIG11c3QgaGF2ZSBlbGFwc2VkIGJlZm9yZSB3ZSB3
aWxsIGV2ZW4gY29uc2lkZXIgc2NoZWR1bGluZyBhIGxheW91dCB3aXRob3V0IGEgZGVsYXkuCi0v
LyBGSVhNRTogRm9yIGZhc3RlciBtYWNoaW5lcyB0aGlzIHZhbHVlIGNhbiByZWFsbHkgYmUgbG93
ZXJlZCB0byAyMDAuIDI1MCBpcyBhZGVxdWF0ZSwgYnV0IGEgbGl0dGxlIGhpZ2gKLS8vIGZvciBk
dWFsIEc1cy4gOikKLXN0YXRpYyBjb25zdCBTZWNvbmRzIGxheW91dFNjaGVkdWxlVGhyZXNob2xk
ID0gMjUwX21zOwotCi1TZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKLSAgICA6IG1fbWVk
aWFUeXBlT3ZlcnJpZGUoInNjcmVlbiIpCi0gICAgLCBtX2ZvbnRHZW5lcmljRmFtaWxpZXMoc3Rk
OjptYWtlX3VuaXF1ZTxGb250R2VuZXJpY0ZhbWlsaWVzPigpKQotICAgICwgbV9zdG9yYWdlQmxv
Y2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3RvcmFnZSkKLSAgICAsIG1fbGF5
b3V0SW50ZXJ2YWwobGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQpCi0gICAgLCBtX21pbmltdW1ET01U
aW1lckludGVydmFsKERPTVRpbWVyOjpkZWZhdWx0TWluaW11bUludGVydmFsKCkpCi0gICAgLCBt
X2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSkKLSAgICAsIG1fYXJlSW1hZ2VzRW5hYmxl
ZCh0cnVlKQotICAgICwgbV9hcmVQbHVnaW5zRW5hYmxlZChmYWxzZSkKLSAgICAsIG1faXNTY3Jp
cHRFbmFibGVkKGZhbHNlKQotICAgICwgbV91c2VzUGFnZUNhY2hlKGZhbHNlKQotICAgICwgbV9i
YWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShmYWxzZSkKLSAgICAsIG1fZG5zUHJlZmV0
Y2hpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdF
bmFibGVkKGZhbHNlKQotICAgICwgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyKCp0aGlz
LCAmU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCkKLSAgICAsIG1faGlk
ZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2hpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChmYWxzZSkKLXsKLSAgICAvLyBBIEZyYW1l
IG1heSBub3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBBdG9t
aWNTdHJpbmcKLSAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgotICAgIEF0b21p
Y1N0cmluZzo6aW5pdCgpOwotCi0gICAgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKTsK
LQotICAgIC8vIFBhZ2UgaXMgbm90IHlldCBmdWxseSBpbml0aWFsaXplZCB3aGVuIGNvbnN0cnVj
dGluZyBTZXR0aW5ncywgc28ga2VlcGluZyBtX3BhZ2UgbnVsbCBvdmVyIGluaXRpYWxpemVEZWZh
dWx0Rm9udEZhbWlsaWVzKCkgY2FsbC4KLSAgICBtX3BhZ2UgPSBwYWdlOwotfQotCi1TZXR0aW5n
czo6flNldHRpbmdzKCkKLXsKLX0KLQotUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBh
Z2UqIHBhZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ3MocGFnZSkpOwot
fQotCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1
bHRGb250RmFtaWxpZXMoKQotewotICAgIC8vIE90aGVyIHBsYXRmb3JtcyBjYW4gc2V0IHVwIGZv
bnRzIGZyb20gYSBjbGllbnQsIGJ1dCBvbiBNYWMsIHdlIHdhbnQgaXQgaW4gV2ViQ29yZSB0byBz
aGFyZSBjb2RlIGJldHdlZW4gV2ViS2l0MSBhbmQgV2ViS2l0Mi4KLX0KLSNlbmRpZgotCi1jb25z
dCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUg
c2NyaXB0KSBjb25zdAotewotICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnN0YW5k
YXJkRm9udEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRTdGFuZGFyZEZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkK
LXsKLSAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFN0YW5kYXJk
Rm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGlu
dmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29uc3QgQXRv
bWljU3RyaW5nJiBTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5maXhlZEZvbnRGYW1p
bHkoc2NyaXB0KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBj
aGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRGaXhlZEZvbnRGYW1pbHkoZmFtaWx5
LCBzY3JpcHQpOwotICAgIGlmIChjaGFuZ2VzKQotICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5l
cmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2V0dGlu
Z3M6OnNlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2VyaWZGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0K
LXZvaWQgU2V0dGluZ3M6OnNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQotewotICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdl
bmVyaWNGYW1pbGllcy0+c2V0U2VyaWZGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKLSAgICBp
ZiAoY2hhbmdlcykKLSAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZSht
X3BhZ2UpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpzYW5zU2VyaWZGb250
RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250R2Vu
ZXJpY0ZhbWlsaWVzLT5zYW5zU2VyaWZGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0KLXZvaWQgU2V0
dGluZ3M6OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHks
IFVTY3JpcHRDb2RlIHNjcmlwdCkKLXsKLSAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmlj
RmFtaWxpZXMtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOwotICAgIGlm
IChjaGFuZ2VzKQotICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1f
cGFnZSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OmN1cnNpdmVGb250RmFt
aWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250R2VuZXJp
Y0ZhbWlsaWVzLT5jdXJzaXZlRm9udEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdz
OjpzZXRDdXJzaXZlRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlw
dENvZGUgc2NyaXB0KQotewotICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGll
cy0+c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOwotICAgIGlmIChjaGFuZ2Vz
KQotICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Ci19
Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OmZhbnRhc3lGb250RmFtaWx5KFVTY3Jp
cHRDb2RlIHNjcmlwdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVz
LT5mYW50YXN5Rm9udEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRGYW50
YXN5Rm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2Ny
aXB0KQotewotICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0RmFu
dGFzeUZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOwotICAgIGlmIChjaGFuZ2VzKQotICAgICAg
ICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Ci19Ci0KLWNvbnN0
IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OnBpY3RvZ3JhcGhGb250RmFtaWx5KFVTY3JpcHRDb2Rl
IHNjcmlwdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5waWN0
b2dyYXBoRm9udEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRQaWN0b2dy
YXBoRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2Ny
aXB0KQotewotICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0UGlj
dG9ncmFwaEZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOwotICAgIGlmIChjaGFuZ2VzKQotICAg
ICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Ci19Ci0KLWJv
b2wgU2V0dGluZ3M6OmRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKQotewotICAgIHJldHVy
biBXZWJDb3JlOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci19Ci0KLWZsb2F0IFNl
dHRpbmdzOjpkZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpCi17Ci0gICAgcmV0dXJuIFdlYkNv
cmU6OmRlZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXplOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRN
ZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRlKQotewotICAg
IGlmIChtX21lZGlhVHlwZU92ZXJyaWRlID09IG1lZGlhVHlwZU92ZXJyaWRlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX21lZGlhVHlwZU92ZXJyaWRlID0gbWVkaWFUeXBlT3ZlcnJpZGU7Ci0K
LSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiB2aWV3
ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCk7Ci0gICAgQVNTRVJUKHZpZXcpOwotCi0gICAg
dmlldy0+c2V0TWVkaWFUeXBlKG1lZGlhVHlwZU92ZXJyaWRlKTsKLSAgICBtX3BhZ2UtPnNldE5l
ZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRMb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkpCi17Ci0g
ICAgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk7
Ci0gICAgCi0gICAgLy8gQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIHRvIHRydWUgbWlnaHQgaW1tZWRp
YXRlbHkgc3RhcnQgbmV3IGxvYWRzIGZvciBpbWFnZXMgdGhhdCBoYWQgcHJldmlvdXNseSBoYWQg
bG9hZGluZyBkaXNhYmxlZC4KLSAgICAvLyBJZiB0aGlzIGhhcHBlbnMgd2hpbGUgYSBXZWJWaWV3
IGlzIGJlaW5nIGRlYWxsb2MnZWQsIGFuZCB3ZSBkb24ndCBrbm93IHRoZSBXZWJWaWV3IGlzIGJl
aW5nIGRlYWxsb2MnZWQsIHRoZXNlIG5ldyBsb2FkcwotICAgIC8vIGNhbiBjYXVzZSBjcmFzaGVz
IGRvd25zdHJlYW0gd2hlbiB0aGUgV2ViVmlldyBtZW1vcnkgaGFzIGFjdHVhbGx5IGJlZW4gZnJl
ZSdkLgotICAgIC8vIE9uZSBleGFtcGxlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbiBpcyBpbiBNYWMg
YXBwcyB0aGF0IHN1YmNsYXNzIFdlYlZpZXcgdGhlbiBkbyB3b3JrIGluIHRoZWlyIG92ZXJyaWRk
ZW4gZGVhbGxvYyBtZXRob2RzLgotICAgIC8vIFN0YXJ0aW5nIHRoZXNlIGxvYWRzIHN5bmNocm9u
b3VzbHkgaXMgbm90IGltcG9ydGFudC4gIEJ5IHB1dHRpbmcgaXQgb24gYSAwLWRlbGF5LCBwcm9w
ZXJseSBjbG9zaW5nIHRoZSBQYWdlIGNhbmNlbHMgdGhlbQotICAgIC8vIGJlZm9yZSB0aGV5IGhh
dmUgYSBjaGFuY2UgdG8gcmVhbGx5IHN0YXJ0LgotICAgIC8vIFNlZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzYwNTcyIGZvciBtb3JlIGRpc2N1c3Npb24uCi0gICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0
aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIFNldHRpbmdzOjppbWFnZUxv
YWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQoKQotewotICAgIHNldEltYWdlTG9hZGluZ1NldHRpbmdz
KG1fcGFnZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldFNjcmlwdEVuYWJsZWQoYm9vbCBpc1Nj
cmlwdEVuYWJsZWQpCi17Ci0gICAgaWYgKG1faXNTY3JpcHRFbmFibGVkID09IGlzU2NyaXB0RW5h
YmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pc1NjcmlwdEVuYWJsZWQgPSBpc1Njcmlw
dEVuYWJsZWQ7Ci0KLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgUExB
VEZPUk0oSU9TKQotICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUlt
YWdlc0VuYWJsZWQpCi17Ci0gICAgbV9hcmVJbWFnZXNFbmFibGVkID0gYXJlSW1hZ2VzRW5hYmxl
ZDsKLQotICAgIC8vIFNlZSBjb21tZW50IGluIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseS4K
LSAgICBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19
Ci0KLXZvaWQgU2V0dGluZ3M6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgYXJlUGx1Z2luc0VuYWJs
ZWQpCi17Ci0gICAgaWYgKG1fYXJlUGx1Z2luc0VuYWJsZWQgPT0gYXJlUGx1Z2luc0VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fYXJlUGx1Z2luc0VuYWJsZWQgPSBhcmVQbHVnaW5z
RW5hYmxlZDsKLSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhmYWxzZSk7Ci19Ci0KLXZvaWQgU2V0
dGluZ3M6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgVVJMJiB1c2VyU3R5bGVTaGVl
dExvY2F0aW9uKQotewotICAgIGlmIChtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPT0gdXNlclN0
eWxlU2hlZXRMb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV91c2VyU3R5bGVTaGVl
dExvY2F0aW9uID0gdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKLQotICAgIGlmIChtX3BhZ2UpCi0g
ICAgICAgIG1fcGFnZS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKTsKLX0KLQotdm9p
ZCBTZXR0aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkK
LXsKLSAgICBhdXRvIG9sZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWluaW11bURP
TVRpbWVySW50ZXJ2YWwsIGludGVydmFsKTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5hZGp1
c3RNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChvbGRUaW1lckludGVydmFsKTsKLSAgICB9Ci19Ci0K
LXZvaWQgU2V0dGluZ3M6OnNldExheW91dEludGVydmFsKFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwp
Ci17Ci0gICAgLy8gRklYTUU6IEl0IHNlZW1zIHdlaXJkIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkg
ZGlzcmVnYXJkIHRoZSBzcGVjaWZpZWQgbGF5b3V0IGludGVydmFsLgotICAgIC8vIFdlIHNob3Vs
ZCBlaXRoZXIgZXhwb3NlIGxheW91dFNjaGVkdWxlVGhyZXNob2xkIG9yIGJldHRlciBjb21tdW5p
Y2F0ZSB0aGlzIGludmFyaWFudC4KLSAgICBtX2xheW91dEludGVydmFsID0gc3RkOjptYXgobGF5
b3V0SW50ZXJ2YWwsIGxheW91dFNjaGVkdWxlVGhyZXNob2xkKTsKLX0KLQotdm9pZCBTZXR0aW5n
czo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCi17Ci0gICAgaWYgKG1fdXNl
c1BhZ2VDYWNoZSA9PSB1c2VzUGFnZUNhY2hlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIG1fdXNlc1BhZ2VDYWNoZSA9IHVzZXNQYWdlQ2FjaGU7Ci0KLSAgICBpZiAoIW1fcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCi0gICAgICAgIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9u
ZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEROU1ByZWZldGNoaW5nRW5hYmxlZChib29sIGRu
c1ByZWZldGNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQg
PT0gZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Ruc1By
ZWZldGNoaW5nRW5hYmxlZCA9IGRuc1ByZWZldGNoaW5nRW5hYmxlZDsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLSNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZVVzYWdl
T3ZlcmxheVZpc2libGUoYm9vbCB2aXNpYmxlKQotewotICAgIGlmIChtX3Jlc291cmNlVXNhZ2VP
dmVybGF5VmlzaWJsZSA9PSB2aXNpYmxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc291
cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSA9IHZpc2libGU7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAg
ICAgbV9wYWdlLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUodmlzaWJsZSk7Ci19Ci0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLXZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFVzZUhp
Z2hSZXNvbHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMpCi17
Ci0gICAgZ1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gc2hvdWxkVXNlSGlnaFJlc29s
dXRpb25UaW1lcnM7Ci19Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2Nr
aW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgZW5hYmxlZCkK
LXsKLSAgICBpZiAobV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPT0gZW5hYmxlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBlbmFibGVkOwotICAgIGlm
IChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7
Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
KGJvb2wgc2hvdWxkRXh0ZW5kKQotewotICAgIGlmIChtX2JhY2tncm91bmRTaG91bGRFeHRlbmRC
ZXlvbmRQYWdlID09IHNob3VsZEV4dGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNr
Z3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKLQotICAgIGlmICht
X3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRC
YWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsKLX0KLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi12b2lk
IFNldHRpbmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBp
ZiAoZ0FWRm91bmRhdGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZ0FWRm91bmRhdGlvbkVuYWJsZWQgPSBlbmFibGVkOwotICAgIEhUTUxNZWRpYUVsZW1lbnQ6
OnJlc2V0TWVkaWFFbmdpbmVzKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlv
bk5TVVJMU2Vzc2lvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChnQVZGb3VuZGF0
aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBnQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9IGVuYWJsZWQ7Ci19Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJv
b2wgZW5hYmxlZCkKLXsKLSAgICBpZiAoZ1FUS2l0RW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBnUVRLaXRFbmFibGVkID0gZW5hYmxlZDsKLSAgICBIVE1MTWVkaWFF
bGVtZW50OjpyZXNldE1lZGlhRW5naW5lcygpOwotfQotI2VuZGlmCi0KLSNpZiBVU0UoR1NUUkVB
TUVSKQotdm9pZCBTZXR0aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChib29sIGVuYWJsZWQpCi17
Ci0gICAgaWYgKGdHU3RyZWFtZXJFbmFibGVkID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGdHU3RyZWFtZXJFbmFibGVkID0gZW5hYmxlZDsKLSAgICBIVE1MTWVkaWFFbGVtZW50
OjpyZXNldE1lZGlhRW5naW5lcygpOwotfQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQotYm9vbCBTZXR0aW5nczo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCi17Ci0gICAg
cmV0dXJuIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwotfQotCi12b2lkIFNldHRpbmdzOjpz
ZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBnTW9ja0Nh
cHR1cmVEZXZpY2VzRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAgTW9ja1JlYWx0aW1lTWVkaWFTb3Vy
Y2VDZW50ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChlbmFibGVk
KTsKLX0KLQotYm9vbCBTZXR0aW5nczo6bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbjsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKQot
ewotICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247Ci19Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6
c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKLQotICAg
IGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCi0gICAgICAgIG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFi
bGVkKGVuYWJsZWQpOwotfQotCi0vLyBJdCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0
aW5nIGRvZXNuJ3QgY2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1l
LgotLy8gVGhlIE1hYyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRl
cmVnaXN0ZXJpbmcgcGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgotLy8gb2JqZWN0cy4gVGhl
cmVmb3JlLCBpZiB0aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJh
dGlvbiBtYXkgbm90IGhhcHBlbgotLy8gY29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBs
YXRmb3JtIHRvIGZvbGxvdyBkYW5nbGluZyBwb2ludGVycy4KLXZvaWQgU2V0dGluZ3M6OnNldE1v
Y2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZ01vY2tTY3JvbGxiYXJzRW5h
YmxlZCA9IGZsYWc7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBzY3JvbGwgYmFy
cyBpbiBleGlzdGluZyBwYWdlcy4KLX0KLQotYm9vbCBTZXR0aW5nczo6bW9ja1Njcm9sbGJhcnNF
bmFibGVkKCkKLXsKLSAgICByZXR1cm4gZ01vY2tTY3JvbGxiYXJzRW5hYmxlZDsKLX0KLQotdm9p
ZCBTZXR0aW5nczo6c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZykKLXsKLSAgICBn
VXNlc092ZXJsYXlTY3JvbGxiYXJzID0gZmxhZzsKLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
dXBkYXRlIHNjcm9sbCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgotfQotCi1ib29sIFNldHRpbmdz
Ojp1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKQotewotICAgIHJldHVybiBnVXNlc092ZXJsYXlTY3Jv
bGxiYXJzOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJv
b2wgZmxhZykKLXsKLSAgICBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZsYWc7Ci19Ci0K
LWJvb2wgU2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKQotewotICAgIHJldHVybiBn
TW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZDsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0U2hvdWxk
UmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wgZmxhZykKLXsKLSAgICBn
U2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmxhZzsKLX0KLQot
Ym9vbCBTZXR0aW5nczo6c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJz
KCkKLXsKLSAgICByZXR1cm4gZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0
dGVyczsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdFbmFibGVkID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VE
T01UaW1lclRocm90dGxpbmdFbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQotICAgICAg
ICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKLX0K
LQotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNy
ZWFzZXMoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdBdXRvSW5jcmVhc2VzID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5n
ZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3Bl
bnNpb25FbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBpZiAobV9oaWRkZW5QYWdlQ1NTQW5pbWF0
aW9uU3VzcGVuc2lvbkVuYWJsZWQgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGlk
ZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9w
YWdlKQotICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3Rh
dGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldExvd1Bvd2VyVmlkZW9BdWRpb0J1
ZmZlclNpemVFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAgICBnTG93UG93ZXJWaWRlb0F1ZGlvQnVm
ZmVyU2l6ZUVuYWJsZWQgPSBmbGFnOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgZ1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkRW5hYmxlZCA9IGZsYWc7Ci19Ci0KLSNpZiBQTEFURk9STShJT1MpCi12b2lk
IFNldHRpbmdzOjpzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKHVuc2lnbmVkIHNlc3Np
b25DYXRlZ29yeSkKLXsKLSAgICBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zZXRDYXRl
Z29yeU92ZXJyaWRlKHN0YXRpY19jYXN0PEF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlPihzZXNz
aW9uQ2F0ZWdvcnkpKTsKLX0KLQotdW5zaWduZWQgU2V0dGluZ3M6OmF1ZGlvU2Vzc2lvbkNhdGVn
b3J5T3ZlcnJpZGUoKQotewotICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24o
KS5jYXRlZ29yeU92ZXJyaWRlKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE5ldHdvcmtEYXRh
VXNhZ2VUcmFja2luZ0VuYWJsZWQoYm9vbCB0cmFja2luZ0VuYWJsZWQpCi17Ci0gICAgZ05ldHdv
cmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQgPSB0cmFja2luZ0VuYWJsZWQ7Ci19Ci0KLWJvb2wg
U2V0dGluZ3M6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKQotewotICAgIHJldHVy
biBnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKLX0KLQotc3RhdGljIFN0cmluZyYg
c2hhcmVkTmV0d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKQotewotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTdHJpbmc+IG5ldHdvcmtJbnRlcmZhY2VOYW1lOwotICAgIHJldHVybiBuZXR3b3Jr
SW50ZXJmYWNlTmFtZTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TmV0d29ya0ludGVyZmFjZU5h
bWUoY29uc3QgU3RyaW5nJiBuZXR3b3JrSW50ZXJmYWNlTmFtZSkKLXsKLSAgICBzaGFyZWROZXR3
b3JrSW50ZXJmYWNlTmFtZUdsb2JhbCgpID0gbmV0d29ya0ludGVyZmFjZU5hbWU7Ci19Ci0KLWNv
bnN0IFN0cmluZyYgU2V0dGluZ3M6Om5ldHdvcmtJbnRlcmZhY2VOYW1lKCkKLXsKLSAgICByZXR1
cm4gc2hhcmVkTmV0d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKTsKLX0KLSNlbmRpZgotCi1ib29s
IFNldHRpbmdzOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpCi17Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIHJldHVybiAhTWFjQXBwbGljYXRpb246OmlzSUJvb2tzKCk7Ci0j
ZWxpZiBQTEFURk9STShJT1MpCi0gICAgcmV0dXJuICFJT1NBcHBsaWNhdGlvbjo6aXNJQm9va3Mo
KTsKLSNlbHNlCi0gICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKLX0KLQotdm9pZCBTZXR0aW5nczo6
c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd0FueVNTTENlcnRpZmljYXRlKQot
ewotICAgIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93QW55U1NMQ2VydGlmaWNhdGU7
Ci19Ci0KLWJvb2wgU2V0dGluZ3M6OmFsbG93c0FueVNTTENlcnRpZmljYXRlKCkKLXsKLSAgICBy
ZXR1cm4gZ0FsbG93c0FueVNTTENlcnRpZmljYXRlOwotfQotCi0jaWYgIVBMQVRGT1JNKENPQ09B
KQotY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWly
aW5nSGFyZHdhcmVTdXBwb3J0KCkKLXsKLSAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLX0KLSNl
bmRpZgotCi12b2lkIFNldHRpbmdzOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3
YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlcykKLXsKLSAgICBtX21lZGlhQ29u
dGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0LnNocmluaygwKTsKLSAgICBmb3IgKGF1
dG8gdHlwZSA6IFN0cmluZ1ZpZXcoY29udGVudFR5cGVzKS5zcGxpdCgnOicpKQotICAgICAgICBt
X21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0LmFwcGVuZChDb250ZW50
VHlwZSB7IHR5cGUudG9TdHJpbmcoKSB9KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFD
b250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgVmVjdG9yPENvbnRlbnRU
eXBlPiYgY29udGVudFR5cGVzKQotewotICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdI
YXJkd2FyZVN1cHBvcnQgPSBjb250ZW50VHlwZXM7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5j
cHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2
ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5oCShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwzNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
My0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgICAgICAgICAoQykg
MjAwNiBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiQ29udGVudFR5cGUuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUg
IlNldHRpbmdzRGVmYXVsdFZhbHVlcy5oIgotI2luY2x1ZGUgIlNldHRpbmdzR2VuZXJhdGVkLmgi
Ci0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJVUkwuaCIKLSNpbmNsdWRlIDx1bmljb2Rl
L3VzY3JpcHQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0F0b21pY1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGb250R2VuZXJpY0ZhbWlsaWVzOwotCi1j
bGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBTZXR0aW5nc0dlbmVyYXRlZCB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxTZXR0aW5ncz4gY3JlYXRlKFBhZ2UqKTsKLSAgICB+U2V0dGluZ3MoKTsKLQot
ICAgIHZvaWQgcGFnZURlc3Ryb3llZCgpIHsgbV9wYWdlID0gbnVsbHB0cjsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5n
JiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29u
c3QgQXRvbWljU3RyaW5nJiBzdGFuZGFyZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBU
X0NPTU1PTikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpeGVkRm9udEZh
bWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseShV
U2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2Rl
ID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2VyaWZGb250RmFtaWx5KFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNvbnN0Owot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVf
RVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29k
ZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NS
SVBUX0NPTU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJz
aXZlRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3Ry
aW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
Y29uc3QgQXRvbWljU3RyaW5nJiBmYW50YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJ
UFRfQ09NTU9OKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGljdG9ncmFw
aEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NP
TU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBwaWN0b2dyYXBo
Rm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNp
emUoKTsKLQotICAgIC8vIE9ubHkgc2V0IGJ5IExheW91dCBUZXN0cy4KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0
IFN0cmluZyYgbWVkaWFUeXBlT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92
ZXJyaWRlOyB9Ci0KLSAgICAvLyBVbmxpa2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1
cHByZXNzZXMgdGhlIG5ldHdvcmsgbG9hZCBvZgotICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNh
Y2hlZCBpbWFnZSB3aWxsIHN0aWxsIGJlIHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKLSAgICBi
b29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFn
ZXNBdXRvbWF0aWNhbGx5OyB9Ci0KLSAgICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQg
c2hvdWxkIGNhbGwgU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQotICAgIC8v
IGluc3RlYWQgb2YgdGhpcyBmdW5jdGlvbi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNj
cmlwdHMoKSBjaGVja3MgdGhlCi0gICAgLy8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hp
bmcsIGFuZCBvdGhlciBpbXBvcnRhbnQgZGV0YWlscy4KLSAgICBib29sIGlzU2NyaXB0RW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTY3JpcHRFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTY3JpcHRFbmFibGVkKGJvb2wpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJlSW1hZ2VzRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsKLSAgICBib29sIGFyZVBsdWdpbnNFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5zRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBkbnNQ
cmVmZXRjaGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Ruc1ByZWZldGNoaW5nRW5hYmxl
ZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KGNvbnN0IFVSTCYpOwotICAgIGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChTZWNvbmRzKTsgLy8gSW5pdGlh
bGl6ZWQgdG8gRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKS4KLSAgICBTZWNvbmRz
IG1pbmltdW1ET01UaW1lckludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRE9NVGlt
ZXJJbnRlcnZhbDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMYXlvdXRJbnRlcnZh
bChTZWNvbmRzKTsKLSAgICBTZWNvbmRzIGxheW91dEludGVydmFsKCkgY29uc3QgeyByZXR1cm4g
bV9sYXlvdXRJbnRlcnZhbDsgfQotCi0gICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z0VuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgaGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0F1dG9JbmNyZWFzZXMoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdBdXRvSW5jcmVhc2VzOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRI
aWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyhib29sKTsKLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlc1BhZ2VDYWNoZShib29sKTsKLSAgICBib29sIHVzZXNQ
YWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3VzZXNQYWdlQ2FjaGU7IH0KLQotI2lmIEVOQUJM
RShSRVNPVVJDRV9VU0FHRSkKLSAgICBib29sIHJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlOyB9Ci0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUoYm9vbCk7Ci0j
ZW5kaWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VI
aWdoUmVzb2x1dGlvblRpbWVycyhib29sKTsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRVc2VIaWdo
UmVzb2x1dGlvblRpbWVycygpIHsgcmV0dXJuIGdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVy
czsgfQotI2VuZGlmCi0KLSAgICBzdGF0aWMgYm9vbCBpc1Bvc3RMb2FkQ1BVVXNhZ2VNZWFzdXJl
bWVudEVuYWJsZWQoKTsKLSAgICBzdGF0aWMgYm9vbCBpc1Bvc3RCYWNrZ3JvdW5kaW5nQ1BVVXNh
Z2VNZWFzdXJlbWVudEVuYWJsZWQoKTsKLSAgICBzdGF0aWMgYm9vbCBpc1BlckFjdGl2aXR5U3Rh
dGVDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOwotCi0gICAgc3RhdGljIGJvb2wgaXNQb3N0
TG9hZE1lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNQ
b3N0QmFja2dyb3VuZGluZ01lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7Ci0KLSAgICBz
dGF0aWMgYm9vbCBnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpOwotCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShi
b29sKTsKLSAgICBib29sIGJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZTsgfQotCi0jaWYgVVNF
KEFWRk9VTkRBVElPTikKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBVkZvdW5k
YXRpb25FbmFibGVkKGJvb2wgZmxhZyk7Ci0gICAgc3RhdGljIGJvb2wgaXNBVkZvdW5kYXRpb25F
bmFibGVkKCkgeyByZXR1cm4gZ0FWRm91bmRhdGlvbkVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkKGJvb2wg
ZmxhZyk7Ci0gICAgc3RhdGljIGJvb2wgaXNBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVk
KCkgeyByZXR1cm4gZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQ7IH0KLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0
UVRLaXRFbmFibGVkKGJvb2wgZmxhZyk7Ci0gICAgc3RhdGljIGJvb2wgaXNRVEtpdEVuYWJsZWQo
KSB7IHJldHVybiBnUVRLaXRFbmFibGVkOyB9Ci0jZWxzZQotICAgIHN0YXRpYyBib29sIGlzUVRL
aXRFbmFibGVkKCkgeyByZXR1cm4gZmFsc2U7IH0KLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1F
UikKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRHU3RyZWFtZXJFbmFibGVkKGJv
b2wgZmxhZyk7Ci0gICAgc3RhdGljIGJvb2wgaXNHU3RyZWFtZXJFbmFibGVkKCkgeyByZXR1cm4g
Z0dTdHJlYW1lckVuYWJsZWQ7IH0KLSNlbmRpZgotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgc2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZmxhZyk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgbW9ja1Njcm9sbGJhcnNFbmFibGVkKCk7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VzT3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBmbGFnKTsK
LSAgICBzdGF0aWMgYm9vbCB1c2VzT3ZlcmxheVNjcm9sbGJhcnMoKTsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldFVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoYm9vbCk7Ci0gICAg
c3RhdGljIGJvb2wgdXNlc01vY2tTY3JvbGxBbmltYXRvcigpOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VC
bG9ja2luZ1BvbGljeSk7Ci0gICAgU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGlj
eSBzdG9yYWdlQmxvY2tpbmdQb2xpY3koKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VCbG9ja2lu
Z1BvbGljeTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JvbGxpbmdQZXJmb3Jt
YW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZCgpIHsgcmV0dXJuIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5h
YmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkUmVzcGVj
dFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wpOwotICAgIHN0YXRpYyBib29sIHNo
b3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycygpOwotCi0gICAgYm9vbCBo
aWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZDsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGJv
b2wpOwotCi0gICAgc3RhdGljIGJvb2wgbG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJs
ZWQoKSB7IHJldHVybiBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7IH0KLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJT
aXplRW5hYmxlZChib29sKTsKLQotICAgIHN0YXRpYyBib29sIHJlc291cmNlTG9hZFN0YXRpc3Rp
Y3NFbmFibGVkKCkgeyByZXR1cm4gZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxl
ZDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkKGJvb2wpOwotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIHNldEF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUodW5zaWduZWQp
OwotICAgIHN0YXRpYyB1bnNpZ25lZCBhdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKCk7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tp
bmdFbmFibGVkKGJvb2wpOwotICAgIHN0YXRpYyBib29sIG5ldHdvcmtEYXRhVXNhZ2VUcmFja2lu
Z0VuYWJsZWQoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE5ldHdvcmtJ
bnRlcmZhY2VOYW1lKGNvbnN0IFN0cmluZyYpOwotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIG5l
dHdvcmtJbnRlcmZhY2VOYW1lKCk7Ci0KLSNpZiBIQVZFKEFWS0lUKQotICAgIHN0YXRpYyB2b2lk
IHNldEFWS2l0RW5hYmxlZChib29sIGZsYWcpIHsgZ0FWS2l0RW5hYmxlZCA9IGZsYWc7IH0KLSNl
bmRpZgotICAgIHN0YXRpYyBib29sIGF2S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGdBVktpdEVuYWJs
ZWQ7IH0KLQotICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2Jz
ZXJ2YXRpb24oYm9vbCBmbGFnKSB7IGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0
aW9uID0gZmxhZzsgfQotICAgIHN0YXRpYyBib29sIHNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRl
T2JzZXJ2YXRpb24oKSB7IHJldHVybiBnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZh
dGlvbjsgfQotI2VuZGlmCi0KLSNpZiBVU0UoQVVESU9fU0VTU0lPTikKLSAgICBzdGF0aWMgdm9p
ZCBzZXRTaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29yeShib29sIGZsYWcpIHsgZ01hbmFn
ZUF1ZGlvU2Vzc2lvbiA9IGZsYWc7IH0KLSAgICBzdGF0aWMgYm9vbCBzaG91bGRNYW5hZ2VBdWRp
b1Nlc3Npb25DYXRlZ29yeSgpIHsgcmV0dXJuIGdNYW5hZ2VBdWRpb1Nlc3Npb247IH0KLSNlbmRp
ZgotCi0gICAgc3RhdGljIHZvaWQgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2wg
ZW5hYmxlZCkgeyBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZW5hYmxlZDsgfQotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgp
OwotICAgIAotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgc3RhdGljIGJvb2wgbW9ja0Nh
cHR1cmVEZXZpY2VzRW5hYmxlZCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoYm9vbCk7Ci0KLSAgICBib29sIG1lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbigpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyB2b2lkIHNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sKTsK
LSNlbmRpZgotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QWxsb3dzQW55U1NM
Q2VydGlmaWNhdGUoYm9vbCk7Ci0gICAgc3RhdGljIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNh
dGUoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRN
ZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQo
Y29uc3QgVmVjdG9yPENvbnRlbnRUeXBlPiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgU3RyaW5nJik7
Ci0gICAgY29uc3QgVmVjdG9yPENvbnRlbnRUeXBlPiYgbWVkaWFDb250ZW50VHlwZXNSZXF1aXJp
bmdIYXJkd2FyZVN1cHBvcnQoKSBjb25zdCB7IHJldHVybiBtX21lZGlhQ29udGVudFR5cGVzUmVx
dWlyaW5nSGFyZHdhcmVTdXBwb3J0OyB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgU2V0dGlu
Z3MoUGFnZSopOwotCi0gICAgdm9pZCBpbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpOwot
Ci0gICAgU3RyaW5nIG1fbWVkaWFUeXBlT3ZlcnJpZGU7Ci0gICAgVVJMIG1fdXNlclN0eWxlU2hl
ZXRMb2NhdGlvbjsKLSAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdlbmVyaWNGYW1pbGll
cz4gbV9mb250R2VuZXJpY0ZhbWlsaWVzOwotICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxv
Y2tpbmdQb2xpY3kgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3k7Ci0gICAgU2Vjb25kcyBtX2xheW91
dEludGVydmFsOwotICAgIFNlY29uZHMgbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbDsKLQotICAg
IGJvb2wgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgOiAxOwotICAgIGJvb2wgbV9hcmVJbWFn
ZXNFbmFibGVkIDogMTsKLSAgICBib29sIG1fYXJlUGx1Z2luc0VuYWJsZWQgOiAxOwotICAgIGJv
b2wgbV9pc1NjcmlwdEVuYWJsZWQgOiAxOwotICAgIGJvb2wgbV91c2VzUGFnZUNhY2hlIDogMTsK
LSAgICBib29sIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgOiAxOwotICAgIGJv
b2wgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgOiAxOwotCi0gICAgYm9vbCBtX3Njcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQgOiAxOwotCi0gICAgVGltZXIgbV9zZXRJbWFnZUxvYWRp
bmdTZXR0aW5nc1RpbWVyOwotICAgIHZvaWQgaW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVk
KCk7Ci0KLSAgICBib29sIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgOiAx
OwotICAgIGJvb2wgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQgOiAx
OwotCi0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotICAgIGJvb2wgbV9yZXNvdXJjZVVzYWdl
T3ZlcmxheVZpc2libGUgeyBmYWxzZSB9OwotI2VuZGlmCi0KLSAgICBib29sIG1faGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMgeyBmYWxzZSB9OwotCi0jaWYgVVNFKEFW
Rk9VTkRBVElPTikKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnQVZGb3VuZGF0aW9u
RW5hYmxlZDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnQVZGb3VuZGF0aW9uTlNV
UkxTZXNzaW9uRW5hYmxlZDsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ1FUS2l0RW5hYmxlZDsKLSNlbmRpZgotCi0jaWYgVVNF
KEdTVFJFQU1FUikKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnR1N0cmVhbWVyRW5h
YmxlZDsKLSNlbmRpZgotCi0gICAgc3RhdGljIGJvb2wgZ01vY2tTY3JvbGxiYXJzRW5hYmxlZDsK
LSAgICBzdGF0aWMgYm9vbCBnVXNlc092ZXJsYXlTY3JvbGxiYXJzOwotICAgIHN0YXRpYyBib29s
IGdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkOwotCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIHN0
YXRpYyBib29sIGdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVyczsKLSNlbmRpZgotICAgIHN0
YXRpYyBib29sIGdTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnM7Ci0j
aWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXRpYyBib29sIGdOZXR3b3JrRGF0YVVzYWdlVHJhY2tp
bmdFbmFibGVkOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdBVktpdEVuYWJsZWQ7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ1Nob3VsZE9wdE91dE9mTmV0d29ya1N0
YXRlT2JzZXJ2YXRpb247Ci0jZW5kaWYKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBn
TWFuYWdlQXVkaW9TZXNzaW9uOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdDdXN0
b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQ7Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAg
IHN0YXRpYyBib29sIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwotICAgIHN0YXRpYyBib29s
IGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247Ci0jZW5kaWYKLQotICAgIHN0
YXRpYyBib29sIGdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZDsKLSAgICBzdGF0
aWMgYm9vbCBnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkOwotICAgIHN0YXRp
YyBib29sIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZTsKLQotICAgIFZlY3RvcjxDb250ZW50VHlw
ZT4gbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydDsKLX07Ci0KLWlu
bGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RMb2FkQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQo
KQotewotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJh
Y2tncm91bmRpbmdDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCi17Ci0jaWYgUExBVEZPUk0o
TUFDKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlTWVh
c3VyZW1lbnRFbmFibGVkKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIHRydWU7
Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxpbmUgYm9vbCBTZXR0
aW5nczo6aXNQb3N0TG9hZE1lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKLXsKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNl
OwotI2VuZGlmCi19Ci0KLWlubGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW5n
TWVtb3J5VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEg
KzAsMCAjIwotbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5pbgkocmV2aXNpb24gMjIyNzEwKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5pbgkod29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBAIGRldmlj
ZUhlaWdodCB0eXBlPWludCwgaW5pdGlhbD0wCiAjIHNpbmNlIHRoZSBtZW1vcnkgdXNlZCB3b24n
dCBiZSByZWxlYXNlZCB1bnRpbCB0aGUgUGFnZSBpcyBkZXN0cm95ZWQuCiBzZXNzaW9uU3RvcmFn
ZVF1b3RhIHR5cGU9dW5zaWduZWQsIGluaXRpYWw9U3RvcmFnZU1hcDo6bm9RdW90YQogCi1taW5p
bXVtRm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxs
RnJhbWVzPTEKLW1pbmltdW1Mb2dpY2FsRm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgc2V0
TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLWRlZmF1bHRGb250U2l6ZSB0eXBlPWludCwg
aW5pdGlhbD0xNiwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLWRlZmF1bHRGaXhl
ZEZvbnRTaXplIHR5cGU9aW50LCBpbml0aWFsPTAsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZy
YW1lcz0xCittaW5pbXVtRm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgb25DaGFuZ2U9c2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCittaW5pbXVtTG9naWNhbEZvbnRTaXplIHR5cGU9
aW50LCBpbml0aWFsPTAsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwor
ZGVmYXVsdEZvbnRTaXplIHR5cGU9aW50LCBpbml0aWFsPTE2LCBvbkNoYW5nZT1zZXROZWVkc1Jl
Y2FsY1N0eWxlSW5BbGxGcmFtZXMKK2RlZmF1bHRGaXhlZEZvbnRTaXplIHR5cGU9aW50LCBpbml0
aWFsPTAsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBlZGl0aW5n
QmVoYXZpb3JUeXBlIHR5cGU9RWRpdGluZ0JlaGF2aW9yVHlwZSwgaW5pdGlhbD1lZGl0aW5nQmVo
YXZpb3JUeXBlRm9yUGxhdGZvcm0oKQogbWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGggdHlw
ZT11bnNpZ25lZCwgaW5pdGlhbD1kZWZhdWx0TWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGgK
QEAgLTU5LDE0ICs1OSwxNiBAQCBzaG91bGRQcmludEJhY2tncm91bmRzIGluaXRpYWw9ZmFsc2UK
IHVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlIGluaXRpYWw9ZmFsc2UsIGNv
bmRpdGlvbmFsPURBU0hCT0FSRF9TVVBQT1JUCiBjbGlwYm9hcmRBY2Nlc3NQb2xpY3kgdHlwZT1D
bGlwYm9hcmRBY2Nlc3NQb2xpY3ksIGluaXRpYWw9Q2xpcGJvYXJkQWNjZXNzUG9saWN5OjpSZXF1
aXJlc1VzZXJHZXN0dXJlCiAKLXRleHRBcmVhc0FyZVJlc2l6YWJsZSBpbml0aWFsPWZhbHNlLCBz
ZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotYXV0aG9yQW5kVXNlclN0eWxlc0VuYWJs
ZWQgaW5pdGlhbD10cnVlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotYWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgaW5pdGlhbD10cnVlLCBzZXROZWVkc1N0eWxlUmVjYWxj
SW5BbGxGcmFtZXM9MQotYWNjZWxlcmF0ZWRDb21wb3NpdGVkQW5pbWF0aW9uc0VuYWJsZWQgaW5p
dGlhbD10cnVlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotc2hvd0RlYnVnQm9y
ZGVycyBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotc2hv
d1JlcGFpbnRDb3VudGVyIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZy
YW1lcz0xCit0ZXh0QXJlYXNBcmVSZXNpemFibGUgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCithdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCBp
bml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwordXNl
clN0eWxlU2hlZXRMb2NhdGlvbiB0eXBlPVVSTCwgb25DaGFuZ2U9dXNlclN0eWxlU2hlZXRMb2Nh
dGlvbkNoYW5nZWQKK2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIGluaXRpYWw9dHJ1ZSwg
b25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCithY2NlbGVyYXRlZENvbXBv
c2l0ZWRBbmltYXRpb25zRW5hYmxlZCBpbml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcworc2hvd0RlYnVnQm9yZGVycyBpbml0aWFsPWZhbHNlLCBvbkNo
YW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK3Nob3dSZXBhaW50Q291bnRlciBp
bml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKIHZp
c2libGVEZWJ1Z092ZXJsYXlSZWdpb25zIHR5cGU9RGVidWdPdmVybGF5UmVnaW9ucywgaW5pdGlh
bD0wCiBzaG93VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3IgaW5pdGlhbD1mYWxzZQorcmVzb3VyY2VV
c2FnZU92ZXJsYXlWaXNpYmxlIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXJlc291cmNlVXNhZ2VP
dmVybGF5VmlzaWJsZUNoYW5nZWQsIGNvbmRpdGlvbj1SRVNPVVJDRV9VU0FHRQogCiAjIFRoaXMg
aXMgYSBxdWlyayB3ZSBhcmUgcHJvLWFjdGl2ZWx5IGFwcGx5aW5nIHRvIG9sZCBhcHBsaWNhdGlv
bnMuIEl0IGNoYW5nZXMga2V5Ym9hcmQgZXZlbnQgZGlzcGF0Y2hpbmcsCiAjIG1ha2luZyBrZXlJ
ZGVudGlmaWVyIGF2YWlsYWJsZSBvbiBrZXlwcmVzcyBldmVudHMsIG1ha2luZyBjaGFyQ29kZSBh
dmFpbGFibGUgb24ga2V5ZG93bi9rZXl1cCBldmVudHMsCkBAIC0xOTksMTMgKzIwMSwxMyBAQCBz
ZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkIGluaXRpYWw9CiB1c2VMZWdhY3lCYWNrZ3Jv
dW5kU2l6ZVNob3J0aGFuZEJlaGF2aW9yIGluaXRpYWw9ZmFsc2UKIGZpeGVkQmFja2dyb3VuZHNQ
YWludFJlbGF0aXZlVG9Eb2N1bWVudCBpbml0aWFsPWRlZmF1bHRGaXhlZEJhY2tncm91bmRzUGFp
bnRSZWxhdGl2ZVRvRG9jdW1lbnQKIAotdGV4dEF1dG9zaXppbmdFbmFibGVkIGluaXRpYWw9ZGVm
YXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFt
ZXM9MSwgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0laSU5HCi10ZXh0QXV0b3NpemluZ1dpbmRvd1Np
emVPdmVycmlkZSB0eXBlPUludFNpemUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0x
LCBjb25kaXRpb25hbD1URVhUX0FVVE9TSVpJTkcKLW1pbmltdW1ab29tRm9udFNpemUgdHlwZT1m
bG9hdCwgaW5pdGlhbD1kZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSwgY29uZGl0aW9uYWw9VEVY
VF9BVVRPU0laSU5HCi0KLXN1YnBpeGVsQW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkIGluaXRp
YWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1zaW1wbGVMaW5lTGF5
b3V0RW5hYmxlZCBpbml0aWFsPXRydWUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0x
Ci1zaW1wbGVMaW5lTGF5b3V0RGVidWdCb3JkZXJzRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBzZXRO
ZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQordGV4dEF1dG9zaXppbmdFbmFibGVkIGluaXRp
YWw9ZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpLCBvbkNoYW5nZT1zZXROZWVkc1JlY2Fs
Y1N0eWxlSW5BbGxGcmFtZXMsIGNvbmRpdGlvbmFsPVRFWFRfQVVUT1NJWklORwordGV4dEF1dG9z
aXppbmdXaW5kb3dTaXplT3ZlcnJpZGUgdHlwZT1JbnRTaXplLCBvbkNoYW5nZT1zZXROZWVkc1Jl
Y2FsY1N0eWxlSW5BbGxGcmFtZXMsIGNvbmRpdGlvbmFsPVRFWFRfQVVUT1NJWklORworbWluaW11
bVpvb21Gb250U2l6ZSB0eXBlPWZsb2F0LCBpbml0aWFsPWRlZmF1bHRNaW5pbXVtWm9vbUZvbnRT
aXplKCksIGNvbmRpdGlvbmFsPVRFWFRfQVVUT1NJWklORworCitzdWJwaXhlbEFudGlhbGlhc2Vk
TGF5ZXJUZXh0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0
eWxlSW5BbGxGcmFtZXMKK3NpbXBsZUxpbmVMYXlvdXRFbmFibGVkIGluaXRpYWw9dHJ1ZSwgb25D
aGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaW1wbGVMaW5lTGF5b3V0RGVi
dWdCb3JkZXJzRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0
eWxlSW5BbGxGcmFtZXMKIAogc3VicGl4ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZCBpbml0
aWFsPWZhbHNlCiAKQEAgLTI3MSw3ICsyNzMsNyBAQCB0cmVhdElQQWRkcmVzc0FzRG9tYWluIGlu
aXRpYWw9ZmFsc2UKIG1lZGlhUHJlbG9hZGluZ0VuYWJsZWQgaW5pdGlhbD1mYWxzZQogCiAjIFJ1
bnRpbWUtZW5hYmxlZCBmZWF0dXJlcwotdmlzdWFsVmlld3BvcnRFbmFibGVkIGluaXRpYWw9ZmFs
c2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCit2aXN1YWxWaWV3cG9ydEVuYWJs
ZWQgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVz
CiAKIGlucHV0RXZlbnRzRW5hYmxlZCBpbml0aWFsPXRydWUKIApAQCAtMzA2LDcgKzMwOCw3IEBA
IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkIGluaXRpYWw9ZmFsc2UKIAogdGltZVdpdGhvdXRNb3Vz
ZU1vdmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMgdHlwZT1TZWNvbmRzLCBpbml0aWFsPTNfcyAK
IAotZm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRz
U3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCitmb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMg
aW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiB3
ZWJGb250c0Fsd2F5c0ZhbGxCYWNrIGluaXRpYWw9ZmFsc2UKIAogcGF5bWVudFJlcXVlc3RFbmFi
bGVkIGluaXRpYWw9ZmFsc2UsIGNvbmRpdGlvbmFsPVBBWU1FTlRfUkVRVUVTVApAQCAtMzE3LDYg
KzMxOSwzMCBAQCBhcHBsZVBheUNhcGFiaWxpdHlEaXNjbG9zdXJlQWxsb3dlZCBpbml0CiBqYXZh
RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBnZXR0ZXI9aXNKYXZhRW5hYmxlZAogamF2YUVuYWJsZWRG
b3JMb2NhbEZpbGVzIGluaXRpYWw9dHJ1ZSwgZ2V0dGVyPWlzSmF2YUVuYWJsZWRGb3JMb2NhbEZp
bGVzCiAKKyMgVW5saWtlIHRoZSBpbWFnZXNFbmFibGVkIHNldHRpbmcsIHRoaXMgb25seSBzdXBw
cmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQgb2YKKyMgdGhlIGltYWdlIFVSTC4gQSBjYWNoZWQgaW1h
Z2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBpZiByZXF1ZXN0ZWQuCitsb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHkgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9aW1hZ2VzRW5hYmxlZENoYW5nZWQKK2lt
YWdlc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBnZXR0ZXI9YXJlSW1hZ2VzRW5hYmxlZCwgb25DaGFu
Z2U9aW1hZ2VzRW5hYmxlZENoYW5nZWQKK3NjcmlwdEVuYWJsZWQgaW5pdGlhbD1mYWxzZSwgZ2V0
dGVyPWlzU2NyaXB0RW5hYmxlZCwgb25DaGFuZ2U9c2NyaXB0RW5hYmxlZENoYW5nZWQKK3BsdWdp
bnNFbmFibGVkIGluaXRpYWw9ZmFsc2UsIGdldHRlcj1hcmVQbHVnaW5zRW5hYmxlZCwgb25DaGFu
Z2U9cGx1Z2luc0VuYWJsZWRDaGFuZ2VkCisKK3VzZXNQYWdlQ2FjaGUgaW5pdGlhbD1mYWxzZSwg
b25DaGFuZ2U9dXNlc1BhZ2VDYWNoZUNoYW5nZWQKKworZG5zUHJlZmV0Y2hpbmdFbmFibGVkIGlu
aXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWRuc1ByZWZldGNoaW5nRW5hYmxlZENoYW5nZWQKKworYmFj
a2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9YmFj
a2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2VDaGFuZ2VkCisKK3Njcm9sbGluZ1BlcmZvcm1h
bmNlTG9nZ2luZ0VuYWJsZWQgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2Nyb2xsaW5nUGVyZm9y
bWFuY2VMb2dnaW5nRW5hYmxlZENoYW5nZWQKKworaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z0VuYWJsZWQgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0
bGluZ1N0YXRlQ2hhbmdlZAoraGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFz
ZXMgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0
YXRlQ2hhbmdlZAoraGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkIGluaXRp
YWw9ZmFsc2UsIG9uQ2hhbmdlPWhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxl
ZENoYW5nZWQKKworc3RvcmFnZUJsb2NraW5nUG9saWN5IHR5cGU9U3RvcmFnZUJsb2NraW5nUG9s
aWN5LCBpbml0aWFsPUFsbG93QWxsU3RvcmFnZSwgb25DaGFuZ2U9c3RvcmFnZUJsb2NraW5nUG9s
aWN5Q2hhbmdlZAorCisjIE9ubHkgc2V0IGJ5IExheW91dCBUZXN0cy4KK21lZGlhVHlwZU92ZXJy
aWRlIHR5cGU9U3RyaW5nLCBpbml0aWFsPSJzY3JlZW4iLCBvbkNoYW5nZT1tZWRpYVR5cGVPdmVy
cmlkZUNoYW5nZWQKKwogZm9udFJlbmRlcmluZ01vZGUgdHlwZT1Gb250UmVuZGVyaW5nTW9kZSwg
aW5pdGlhbD1Gb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsCiAKIHByZWZlck1JTUVUeXBlRm9ySW1h
Z2VzIGluaXRpYWw9ZmFsc2UKQEAgLTMzMCw0ICszNTYsNCBAQCBtZWRpYURldmljZUlkZW50aWZp
ZXJTdG9yYWdlRGlyZWN0b3J5IHR5CiAjIGNhbiBmaXggdGhlIGJ1ZyBmcm9tIHRoZWlyIGVuZC4K
IG5lZWRzQWRvYmVGcmFtZVJlbG9hZGluZ1F1aXJrIGluaXRpYWw9ZmFsc2UsIGdldHRlcj1uZWVk
c0Fjcm9iYXRGcmFtZVJlbG9hZGluZ1F1aXJrCiAKLXRvdWNoRXZlbnRFbXVsYXRpb25FbmFibGVk
IGluaXRpYWw9ZmFsc2UsIGdldHRlcj1pc1RvdWNoRXZlbnRFbXVsYXRpb25FbmFibGVkLCBjb25k
aXRpb25hbD1UT1VDSF9FVkVOVFMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit0b3VjaEV2
ZW50RW11bGF0aW9uRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBnZXR0ZXI9aXNUb3VjaEV2ZW50RW11
bGF0aW9uRW5hYmxlZCwgY29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5nc0Jhc2UuY3BwCShyZXZpc2lvbiAyMjI3MTApCShmcm9tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwOjIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3NCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKwor
I2luY2x1ZGUgIkF1ZGlvU2Vzc2lvbi5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxl
ci5oIgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ29va2ll
U3RvcmFnZS5oIgorI2luY2x1ZGUgIkRPTVRpbWVyLmgiCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCisjaW5jbHVk
ZSAiRm9udEdlbmVyaWNGYW1pbGllcy5oIgorI2luY2x1ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKKyNpbmNsdWRlICJSdW50aW1lQXBwbGljYXRpb25D
aGVja3MuaCIKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCisjaWYgUExBVEZPUk0oQ09DT0Ep
CisjaW5jbHVkZSA8d3RmL3NwaS9kYXJ3aW4vZHlsZFNQSS5oPgorI2VuZGlmCisKKyNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoQVZGT1VOREFUSU9OKQorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXJNYWMuaCIKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyNpbmNsdWRlICJNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlci5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgc2V0SW1hZ2VMb2FkaW5nU2V0dGlu
Z3MoUGFnZSogcGFnZSkKK3sKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmICghZnJhbWUtPmRvY3Vt
ZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0SW1hZ2VzRW5hYmxlZChwYWdlLT5zZXR0aW5ncygp
LmFyZUltYWdlc0VuYWJsZWQoKSk7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpLnNldEF1dG9Mb2FkSW1hZ2VzKHBhZ2UtPnNldHRpbmdzKCkubG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5KCkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW52YWxpZGF0
ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShQYWdlKiBwYWdlKQoreworICAgIGludmFsaWRhdGVG
b250Q2FzY2FkZUNhY2hlKCk7CisgICAgaWYgKHBhZ2UpCisgICAgICAgIHBhZ2UtPnNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCisjaWYgVVNFKEFWRk9VTkRBVElPTikKK2Jv
b2wgU2V0dGluZ3M6OmdBVkZvdW5kYXRpb25FbmFibGVkID0gdHJ1ZTsKK2Jvb2wgU2V0dGluZ3M6
OmdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkID0gdHJ1ZTsKKyNlbmRpZgorCisjaWYg
UExBVEZPUk0oQ09DT0EpCitib29sIFNldHRpbmdzOjpnUVRLaXRFbmFibGVkID0gZmFsc2U7Cisj
ZW5kaWYKKworI2lmIFVTRShHU1RSRUFNRVIpCitib29sIFNldHRpbmdzOjpnR1N0cmVhbWVyRW5h
YmxlZCA9IHRydWU7CisjZW5kaWYKKworYm9vbCBTZXR0aW5nczo6Z01vY2tTY3JvbGxiYXJzRW5h
YmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z1VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZh
bHNlOworYm9vbCBTZXR0aW5nczo6Z01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmYWxzZTsK
KworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCitib29sIFNldHRpbmdzOjpnTW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z01lZGlhQ2FwdHVyZVJlcXVp
cmVzU2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikK
K2Jvb2wgU2V0dGluZ3M6OmdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyA9IHRydWU7Cisj
ZW5kaWYKKyAgICAKK2Jvb2wgU2V0dGluZ3M6OmdTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0
dHJpYnV0ZVNldHRlcnMgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdMb3dQb3dlclZpZGVvQXVk
aW9CdWZmZXJTaXplRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z1Jlc291cmNlTG9h
ZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z0FsbG93
c0FueVNTTENlcnRpZmljYXRlID0gZmFsc2U7CisKKyNpZiBQTEFURk9STShJT1MpCitib29sIFNl
dHRpbmdzOjpnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZCA9IGZhbHNlOworYm9vbCBT
ZXR0aW5nczo6Z0FWS2l0RW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z1Nob3VsZE9w
dE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24gPSBmYWxzZTsKKyNlbmRpZgorYm9vbCBTZXR0
aW5nczo6Z01hbmFnZUF1ZGlvU2Vzc2lvbiA9IGZhbHNlOworYm9vbCBTZXR0aW5nczo6Z0N1c3Rv
bVBhc3RlYm9hcmREYXRhRW5hYmxlZCA9IGZhbHNlOworCitib29sIFNldHRpbmdzOjpjdXN0b21Q
YXN0ZWJvYXJkRGF0YUVuYWJsZWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0
aWFsaXplQ3VzdG9tUGFzdGVib2FyZERhdGFUb0RlZmF1bHRWYWx1ZTsKKyAgICBzdGQ6OmNhbGxf
b25jZShpbml0aWFsaXplQ3VzdG9tUGFzdGVib2FyZERhdGFUb0RlZmF1bHRWYWx1ZSwgW10gewor
I2lmIFBMQVRGT1JNKElPUykgJiYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAx
MTAzMDAKKyAgICAgICAgZ0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCA9IElPU0FwcGxpY2F0
aW9uOjppc01vYmlsZVNhZmFyaSgpIHx8IGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24oKSA+
PSBEWUxEX0lPU19WRVJTSU9OXzExXzM7CisjZWxpZiBQTEFURk9STShNQUMpICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEzMDQKKyAgICAgICAgLy8gRklYTUU6IFVwZGF0
ZSB0aGlzIGxpbmtlZC1vbiBjaGVjayBvbmNlIHRoZSBjb3JyZWN0IG1hY3JvIGlzIGluIHRoZSBT
REsuCisgICAgICAgIGdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQgPSBNYWNBcHBsaWNhdGlv
bjo6aXNTYWZhcmkoKSB8fCBkeWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPiBEWUxEX01B
Q09TWF9WRVJTSU9OXzEwXzEzOworI2Vsc2UKKyAgICAgICAgZ0N1c3RvbVBhc3RlYm9hcmREYXRh
RW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisgICAgfSk7CisgICAgcmV0dXJuIGdDdXN0b21QYXN0
ZWJvYXJkRGF0YUVuYWJsZWQ7Cit9CisKKy8vIFRoaXMgYW1vdW50IG9mIHRpbWUgbXVzdCBoYXZl
IGVsYXBzZWQgYmVmb3JlIHdlIHdpbGwgZXZlbiBjb25zaWRlciBzY2hlZHVsaW5nIGEgbGF5b3V0
IHdpdGhvdXQgYSBkZWxheS4KKy8vIEZJWE1FOiBGb3IgZmFzdGVyIG1hY2hpbmVzIHRoaXMgdmFs
dWUgY2FuIHJlYWxseSBiZSBsb3dlcmVkIHRvIDIwMC4gMjUwIGlzIGFkZXF1YXRlLCBidXQgYSBs
aXR0bGUgaGlnaAorLy8gZm9yIGR1YWwgRzVzLiA6KQorc3RhdGljIGNvbnN0IFNlY29uZHMgbGF5
b3V0U2NoZWR1bGVUaHJlc2hvbGQgPSAyNTBfbXM7CisKK1NldHRpbmdzOjpTZXR0aW5ncyhQYWdl
KiBwYWdlKQorICAgIDogbV9tZWRpYVR5cGVPdmVycmlkZSgic2NyZWVuIikKKyAgICAsIG1fZm9u
dEdlbmVyaWNGYW1pbGllcyhzdGQ6Om1ha2VfdW5pcXVlPEZvbnRHZW5lcmljRmFtaWxpZXM+KCkp
CisgICAgLCBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxT
dG9yYWdlKQorICAgICwgbV9sYXlvdXRJbnRlcnZhbChsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCkK
KyAgICAsIG1fbWluaW11bURPTVRpbWVySW50ZXJ2YWwoRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVt
SW50ZXJ2YWwoKSkKKyAgICAsIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGZhbHNlKQorICAg
ICwgbV9hcmVJbWFnZXNFbmFibGVkKHRydWUpCisgICAgLCBtX2FyZVBsdWdpbnNFbmFibGVkKGZh
bHNlKQorICAgICwgbV9pc1NjcmlwdEVuYWJsZWQoZmFsc2UpCisgICAgLCBtX3VzZXNQYWdlQ2Fj
aGUoZmFsc2UpCisgICAgLCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGZhbHNl
KQorICAgICwgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX3Njcm9sbGlu
Z1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX3NldEltYWdlTG9hZGlu
Z1NldHRpbmdzVGltZXIoKnRoaXMsICZTZXR0aW5nczo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1l
ckZpcmVkKQorICAgICwgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChmYWxz
ZSkKKyAgICAsIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGZhbHNl
KQoreworICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQsIHNvIHdl
IGluaXRpYWxpemUgdGhlIEF0b21pY1N0cmluZworICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0
byB1c2UgaXQuCisgICAgQXRvbWljU3RyaW5nOjppbml0KCk7CisKKyAgICBpbml0aWFsaXplRGVm
YXVsdEZvbnRGYW1pbGllcygpOworCisgICAgLy8gUGFnZSBpcyBub3QgeWV0IGZ1bGx5IGluaXRp
YWxpemVkIHdoZW4gY29uc3RydWN0aW5nIFNldHRpbmdzLCBzbyBrZWVwaW5nIG1fcGFnZSBudWxs
IG92ZXIgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKSBjYWxsLgorICAgIG1fcGFnZSA9
IHBhZ2U7Cit9CisKK1NldHRpbmdzOjp+U2V0dGluZ3MoKQoreworfQorCitSZWY8U2V0dGluZ3M+
IFNldHRpbmdzOjpjcmVhdGUoUGFnZSogcGFnZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTZXR0aW5ncyhwYWdlKSk7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCit2b2lkIFNldHRp
bmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCit7CisgICAgLy8gT3RoZXIgcGxh
dGZvcm1zIGNhbiBzZXQgdXAgZm9udHMgZnJvbSBhIGNsaWVudCwgYnV0IG9uIE1hYywgd2Ugd2Fu
dCBpdCBpbiBXZWJDb3JlIHRvIHNoYXJlIGNvZGUgYmV0d2VlbiBXZWJLaXQxIGFuZCBXZWJLaXQy
LgorfQorI2VuZGlmCisKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OnN0YW5kYXJkRm9u
dEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZm9udEdl
bmVyaWNGYW1pbGllcy0+c3RhbmRhcmRGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3ZvaWQgU2V0
dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
VVNjcmlwdENvZGUgc2NyaXB0KQoreworICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNG
YW1pbGllcy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKKyAgICBpZiAo
Y2hhbmdlcykKKyAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3Bh
Z2UpOworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHko
VVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFt
aWxpZXMtPmZpeGVkRm9udEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRG
aXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNj
cmlwdCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEZp
eGVkRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAg
IGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKK30KKworY29uc3Qg
QXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlw
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXJpZkZvbnRG
YW1pbHkoc2NyaXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2VyaWZGb250RmFtaWx5KGNv
bnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9v
bCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRTZXJpZkZvbnRGYW1pbHkoZmFt
aWx5LCBzY3JpcHQpOworICAgIGlmIChjaGFuZ2VzKQorICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJH
ZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0
dGluZ3M6OnNhbnNTZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAorewor
ICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNhbnNTZXJpZkZvbnRGYW1pbHkoc2Ny
aXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBB
dG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQoreworICAgIGJvb2wgY2hh
bmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShmYW1p
bHksIHNjcmlwdCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdl
bmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0
aW5nczo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAg
IHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPmN1cnNpdmVGb250RmFtaWx5KHNjcmlwdCk7
Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0g
bV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRDdXJzaXZlRm9udEZhbWlseShmYW1pbHksIHNjcmlw
dCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1p
bHlDaGFuZ2UobV9wYWdlKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6ZmFu
dGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJldHVybiBt
X2ZvbnRHZW5lcmljRmFtaWxpZXMtPmZhbnRhc3lGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3Zv
aWQgU2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2Vu
ZXJpY0ZhbWlsaWVzLT5zZXRGYW50YXN5Rm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CisgICAg
aWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
bV9wYWdlKTsKK30KKworY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6cGljdG9ncmFwaEZv
bnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnRH
ZW5lcmljRmFtaWxpZXMtPnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2Vu
ZXJpY0ZhbWlsaWVzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7Cisg
ICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFu
Z2UobV9wYWdlKTsKK30KKworYm9vbCBTZXR0aW5nczo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5h
YmxlZCgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJs
ZWQoKTsKK30KKworZmxvYXQgU2V0dGluZ3M6OmRlZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXplKCkK
K3sKKyAgICByZXR1cm4gV2ViQ29yZTo6ZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemU7Cit9CisK
K3ZvaWQgU2V0dGluZ3M6OnNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgbWVkaWFU
eXBlT3ZlcnJpZGUpCit7CisgICAgaWYgKG1fbWVkaWFUeXBlT3ZlcnJpZGUgPT0gbWVkaWFUeXBl
T3ZlcnJpZGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWVkaWFUeXBlT3ZlcnJpZGUgPSBt
ZWRpYVR5cGVPdmVycmlkZTsKKworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKyAgICBB
U1NFUlQodmlldyk7CisKKyAgICB2aWV3LT5zZXRNZWRpYVR5cGUobWVkaWFUeXBlT3ZlcnJpZGUp
OworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Cit9CisKK3Zv
aWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sIGxvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseSkKK3sKKyAgICBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA9IGxvYWRz
SW1hZ2VzQXV0b21hdGljYWxseTsKKyAgICAKKyAgICAvLyBDaGFuZ2luZyB0aGlzIHNldHRpbmcg
dG8gdHJ1ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFydCBuZXcgbG9hZHMgZm9yIGltYWdlcyB0aGF0
IGhhZCBwcmV2aW91c2x5IGhhZCBsb2FkaW5nIGRpc2FibGVkLgorICAgIC8vIElmIHRoaXMgaGFw
cGVucyB3aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgYW5kIHdlIGRvbid0IGtu
b3cgdGhlIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgdGhlc2UgbmV3IGxvYWRzCisgICAg
Ly8gY2FuIGNhdXNlIGNyYXNoZXMgZG93bnN0cmVhbSB3aGVuIHRoZSBXZWJWaWV3IG1lbW9yeSBo
YXMgYWN0dWFsbHkgYmVlbiBmcmVlJ2QuCisgICAgLy8gT25lIGV4YW1wbGUgd2hlcmUgdGhpcyBj
YW4gaGFwcGVuIGlzIGluIE1hYyBhcHBzIHRoYXQgc3ViY2xhc3MgV2ViVmlldyB0aGVuIGRvIHdv
cmsgaW4gdGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9jIG1ldGhvZHMuCisgICAgLy8gU3RhcnRpbmcg
dGhlc2UgbG9hZHMgc3luY2hyb25vdXNseSBpcyBub3QgaW1wb3J0YW50LiAgQnkgcHV0dGluZyBp
dCBvbiBhIDAtZGVsYXksIHByb3Blcmx5IGNsb3NpbmcgdGhlIFBhZ2UgY2FuY2VscyB0aGVtCisg
ICAgLy8gYmVmb3JlIHRoZXkgaGF2ZSBhIGNoYW5jZSB0byByZWFsbHkgc3RhcnQuCisgICAgLy8g
U2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjA1NzIgZm9yIG1vcmUgZGlzY3Vzc2lvbi4KKyAgICBt
X3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3Zv
aWQgU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCgpCit7CisgICAgc2V0
SW1hZ2VMb2FkaW5nU2V0dGluZ3MobV9wYWdlKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2Ny
aXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKK3sKKyAgICBpZiAobV9pc1NjcmlwdEVu
YWJsZWQgPT0gaXNTY3JpcHRFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lzU2Ny
aXB0RW5hYmxlZCA9IGlzU2NyaXB0RW5hYmxlZDsKKworICAgIGlmICghbV9wYWdlKQorICAgICAg
ICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2Fs
Y1N0eWxlSW5BbGxGcmFtZXMoKTsKKyNlbmRpZgorfQorCit2b2lkIFNldHRpbmdzOjpzZXRJbWFn
ZXNFbmFibGVkKGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCkKK3sKKyAgICBtX2FyZUltYWdlc0VuYWJs
ZWQgPSBhcmVJbWFnZXNFbmFibGVkOworCisgICAgLy8gU2VlIGNvbW1lbnQgaW4gc2V0TG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5LgorICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0UGx1Z2luc0VuYWJsZWQo
Ym9vbCBhcmVQbHVnaW5zRW5hYmxlZCkKK3sKKyAgICBpZiAobV9hcmVQbHVnaW5zRW5hYmxlZCA9
PSBhcmVQbHVnaW5zRW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9hcmVQbHVnaW5z
RW5hYmxlZCA9IGFyZVBsdWdpbnNFbmFibGVkOworICAgIFBhZ2U6OnJlZnJlc2hQbHVnaW5zKGZh
bHNlKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25z
dCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCit7CisgICAgaWYgKG1fdXNlclN0eWxlU2hl
ZXRMb2NhdGlvbiA9PSB1c2VyU3R5bGVTaGVldExvY2F0aW9uKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1c2VyU3R5bGVTaGVldExvY2F0aW9uOwor
CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT51c2VyU3R5bGVTaGVldExvY2F0aW9u
Q2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZh
bChTZWNvbmRzIGludGVydmFsKQoreworICAgIGF1dG8gb2xkVGltZXJJbnRlcnZhbCA9IHN0ZDo6
ZXhjaGFuZ2UobV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbCwgaW50ZXJ2YWwpOworCisgICAgaWYg
KCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1f
cGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZnJh
bWUtPmRvY3VtZW50KCktPmFkanVzdE1pbmltdW1ET01UaW1lckludGVydmFsKG9sZFRpbWVySW50
ZXJ2YWwpOworICAgIH0KK30KKwordm9pZCBTZXR0aW5nczo6c2V0TGF5b3V0SW50ZXJ2YWwoU2Vj
b25kcyBsYXlvdXRJbnRlcnZhbCkKK3sKKyAgICAvLyBGSVhNRTogSXQgc2VlbXMgd2VpcmQgdGhh
dCB0aGlzIGZ1bmN0aW9uIG1heSBkaXNyZWdhcmQgdGhlIHNwZWNpZmllZCBsYXlvdXQgaW50ZXJ2
YWwuCisgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBleHBvc2UgbGF5b3V0U2NoZWR1bGVUaHJlc2hv
bGQgb3IgYmV0dGVyIGNvbW11bmljYXRlIHRoaXMgaW52YXJpYW50LgorICAgIG1fbGF5b3V0SW50
ZXJ2YWwgPSBzdGQ6Om1heChsYXlvdXRJbnRlcnZhbCwgbGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQp
OworfQorCit2b2lkIFNldHRpbmdzOjpzZXRVc2VzUGFnZUNhY2hlKGJvb2wgdXNlc1BhZ2VDYWNo
ZSkKK3sKKyAgICBpZiAobV91c2VzUGFnZUNhY2hlID09IHVzZXNQYWdlQ2FjaGUpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgbV91c2VzUGFnZUNhY2hlID0gdXNlc1BhZ2VDYWNoZTsK
KworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fdXNlc1Bh
Z2VDYWNoZSkKKyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6ZU5vdygw
LCBQcnVuaW5nUmVhc29uOjpOb25lKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0RE5TUHJlZmV0
Y2hpbmdFbmFibGVkKGJvb2wgZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQoreworICAgIGlmIChtX2Ru
c1ByZWZldGNoaW5nRW5hYmxlZCA9PSBkbnNQcmVmZXRjaGluZ0VuYWJsZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkID0gZG5zUHJlZmV0Y2hpbmdFbmFi
bGVkOworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+ZG5zUHJlZmV0Y2hpbmdTdGF0
ZUNoYW5nZWQoKTsKK30KKworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKK3ZvaWQgU2V0dGlu
Z3M6OnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAg
aWYgKG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID09IHZpc2libGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID0gdmlzaWJsZTsKKyAg
ICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNldFJlc291cmNlVXNhZ2VPdmVybGF5Vmlz
aWJsZSh2aXNpYmxlKTsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQordm9pZCBTZXR0
aW5nczo6c2V0U2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCBzaG91bGRVc2VIaWdo
UmVzb2x1dGlvblRpbWVycykKK3sKKyAgICBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMg
PSBzaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVyczsKK30KKyNlbmRpZgorCit2b2lkIFNldHRp
bmdzOjpzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9j
a2luZ1BvbGljeSBlbmFibGVkKQoreworICAgIGlmIChtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9
PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3N0b3JhZ2VCbG9ja2luZ1BvbGlj
eSA9IGVuYWJsZWQ7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zdG9yYWdlQmxv
Y2tpbmdTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0QmFja2dyb3VuZFNo
b3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbCBzaG91bGRFeHRlbmQpCit7CisgICAgaWYgKG1fYmFj
a2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgPT0gc2hvdWxkRXh0ZW5kKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlID0gc2hvdWxk
RXh0ZW5kOworCisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52
aWV3KCktPnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOworfQorCisjaWYgVVNF
KEFWRk9VTkRBVElPTikKK3ZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9v
bCBlbmFibGVkKQoreworICAgIGlmIChnQVZGb3VuZGF0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQor
ICAgICAgICByZXR1cm47CisKKyAgICBnQVZGb3VuZGF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7Cisg
ICAgSFRNTE1lZGlhRWxlbWVudDo6cmVzZXRNZWRpYUVuZ2luZXMoKTsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit7
CisgICAgaWYgKGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkID09IGVuYWJsZWQpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkID0g
ZW5hYmxlZDsKK30KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCit2b2lkIFNldHRpbmdz
OjpzZXRRVEtpdEVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChnUVRLaXRFbmFibGVk
ID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGdRVEtpdEVuYWJsZWQgPSBlbmFi
bGVkOworICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0TWVkaWFFbmdpbmVzKCk7Cit9CisjZW5k
aWYKKworI2lmIFVTRShHU1RSRUFNRVIpCit2b2lkIFNldHRpbmdzOjpzZXRHU3RyZWFtZXJFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZ0dTdHJlYW1lckVuYWJsZWQgPT0gZW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ0dTdHJlYW1lckVuYWJsZWQgPSBlbmFibGVkOwor
ICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0TWVkaWFFbmdpbmVzKCk7Cit9CisjZW5kaWYKKwor
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCitib29sIFNldHRpbmdzOjptb2NrQ2FwdHVyZURldmlj
ZXNFbmFibGVkKCkKK3sKKyAgICByZXR1cm4gZ01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ7Cit9
CisKK3ZvaWQgU2V0dGluZ3M6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQoreworICAgIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZW5hYmxlZDsKKyAgICBN
b2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0TW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VD
ZW50ZXJFbmFibGVkKGVuYWJsZWQpOworfQorCitib29sIFNldHRpbmdzOjptZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiBnTWVkaWFDYXB0
dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRNZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCBtZWRpYUNhcHR1cmVSZXF1aXJl
c1NlY3VyZUNvbm5lY3Rpb24pCit7CisgICAgZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbiA9IG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsKK30KKyNlbmRp
ZgorCit2b2lkIFNldHRpbmdzOjpzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVk
KGJvb2wgZW5hYmxlZCkKK3sKKyAgICBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJs
ZWQgPSBlbmFibGVkOworCisgICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPm1haW5GcmFtZSgpLnZp
ZXcoKSkKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNldFNjcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZW5hYmxlZCk7Cit9CisKKy8vIEl0J3MgdmVyeSBpbXBv
cnRhbnQgdGhhdCB0aGlzIHNldHRpbmcgZG9lc24ndCBjaGFuZ2UgaW4gdGhlIG1pZGRsZSBvZiBh
IGRvY3VtZW50J3MgbGlmZXRpbWUuCisvLyBUaGUgTWFjIHBvcnQgdXNlcyB0aGlzIGZsYWcgd2hl
biByZWdpc3RlcmluZyBhbmQgZGVyZWdpc3RlcmluZyBwbGF0Zm9ybS1kZXBlbmRlbnQgc2Nyb2xs
YmFyCisvLyBvYmplY3RzLiBUaGVyZWZvcmUsIGlmIHRoaXMgY2hhbmdlcyBhdCBhbiB1bmV4cGVj
dGVkIHRpbWUsIGRlcmVnaXN0cmF0aW9uIG1heSBub3QgaGFwcGVuCisvLyBjb3JyZWN0bHksIHdo
aWNoIG1heSBjYXVzZSB0aGUgcGxhdGZvcm0gdG8gZm9sbG93IGRhbmdsaW5nIHBvaW50ZXJzLgor
dm9pZCBTZXR0aW5nczo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAg
ICBnTW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmxhZzsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgdXBkYXRlIHNjcm9sbCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgorfQorCitib29sIFNldHRp
bmdzOjptb2NrU2Nyb2xsYmFyc0VuYWJsZWQoKQoreworICAgIHJldHVybiBnTW9ja1Njcm9sbGJh
cnNFbmFibGVkOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRVc2VzT3ZlcmxheVNjcm9sbGJhcnMo
Ym9vbCBmbGFnKQoreworICAgIGdVc2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBmbGFnOworICAgIC8v
IEZJWE1FOiBUaGlzIHNob3VsZCB1cGRhdGUgc2Nyb2xsIGJhcnMgaW4gZXhpc3RpbmcgcGFnZXMu
Cit9CisKK2Jvb2wgU2V0dGluZ3M6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpCit7CisgICAgcmV0
dXJuIGdVc2VzT3ZlcmxheVNjcm9sbGJhcnM7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldFVzZXNN
b2NrU2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKQoreworICAgIGdNb2NrU2Nyb2xsQW5pbWF0b3JF
bmFibGVkID0gZmxhZzsKK30KKworYm9vbCBTZXR0aW5nczo6dXNlc01vY2tTY3JvbGxBbmltYXRv
cigpCit7CisgICAgcmV0dXJuIGdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkOworfQorCit2b2lk
IFNldHRpbmdzOjpzZXRTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMo
Ym9vbCBmbGFnKQoreworICAgIGdTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNl
dHRlcnMgPSBmbGFnOworfQorCitib29sIFNldHRpbmdzOjpzaG91bGRSZXNwZWN0UHJpb3JpdHlJ
bkNTU0F0dHJpYnV0ZVNldHRlcnMoKQoreworICAgIHJldHVybiBnU2hvdWxkUmVzcGVjdFByaW9y
aXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRIaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgaWYgKG1faGlk
ZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPT0gZmxhZykKKyAgICAgICAgcmV0dXJu
OworICAgIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBmbGFnOworICAg
IGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRIaWRkZW5QYWdlRE9NVGlt
ZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyhib29sIGZsYWcpCit7CisgICAgaWYgKG1faGlkZGVu
UGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMgPT0gZmxhZykKKyAgICAgICAgcmV0
dXJuOworICAgIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMgPSBm
bGFnOworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZURPTVRpbWVy
VGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRIaWRkZW5Q
YWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGlmICht
X2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9PSBmbGFnKQorICAgICAg
ICByZXR1cm47CisgICAgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQg
PSBmbGFnOworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0
TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCBmbGFnKQoreworICAgIGdM
b3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZsYWc7Cit9CisKK3ZvaWQgU2V0
dGluZ3M6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAg
ICBnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkID0gZmxhZzsKK30KKworI2lm
IFBMQVRGT1JNKElPUykKK3ZvaWQgU2V0dGluZ3M6OnNldEF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3Zl
cnJpZGUodW5zaWduZWQgc2Vzc2lvbkNhdGVnb3J5KQoreworICAgIEF1ZGlvU2Vzc2lvbjo6c2hh
cmVkU2Vzc2lvbigpLnNldENhdGVnb3J5T3ZlcnJpZGUoc3RhdGljX2Nhc3Q8QXVkaW9TZXNzaW9u
OjpDYXRlZ29yeVR5cGU+KHNlc3Npb25DYXRlZ29yeSkpOworfQorCit1bnNpZ25lZCBTZXR0aW5n
czo6YXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSgpCit7CisgICAgcmV0dXJuIEF1ZGlvU2Vz
c2lvbjo6c2hhcmVkU2Vzc2lvbigpLmNhdGVnb3J5T3ZlcnJpZGUoKTsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZChib29sIHRyYWNraW5nRW5h
YmxlZCkKK3sKKyAgICBnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZCA9IHRyYWNraW5n
RW5hYmxlZDsKK30KKworYm9vbCBTZXR0aW5nczo6bmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5h
YmxlZCgpCit7CisgICAgcmV0dXJuIGdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkOwor
fQorCitzdGF0aWMgU3RyaW5nJiBzaGFyZWROZXR3b3JrSW50ZXJmYWNlTmFtZUdsb2JhbCgpCit7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbmV0d29ya0ludGVyZmFjZU5hbWU7
CisgICAgcmV0dXJuIG5ldHdvcmtJbnRlcmZhY2VOYW1lOworfQorCit2b2lkIFNldHRpbmdzOjpz
ZXROZXR3b3JrSW50ZXJmYWNlTmFtZShjb25zdCBTdHJpbmcmIG5ldHdvcmtJbnRlcmZhY2VOYW1l
KQoreworICAgIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCkgPSBuZXR3b3JrSW50
ZXJmYWNlTmFtZTsKK30KKworY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6bmV0d29ya0ludGVyZmFj
ZU5hbWUoKQoreworICAgIHJldHVybiBzaGFyZWROZXR3b3JrSW50ZXJmYWNlTmFtZUdsb2JhbCgp
OworfQorI2VuZGlmCisKK2Jvb2wgU2V0dGluZ3M6Omdsb2JhbENvbnN0UmVkZWNsYXJhdGlvblNo
b3VsZFRocm93KCkKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuICFNYWNBcHBsaWNh
dGlvbjo6aXNJQm9va3MoKTsKKyNlbGlmIFBMQVRGT1JNKElPUykKKyAgICByZXR1cm4gIUlPU0Fw
cGxpY2F0aW9uOjppc0lCb29rcygpOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgor
fQorCit2b2lkIFNldHRpbmdzOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93
QW55U1NMQ2VydGlmaWNhdGUpCit7CisgICAgZ0FsbG93c0FueVNTTENlcnRpZmljYXRlID0gYWxs
b3dBbnlTU0xDZXJ0aWZpY2F0ZTsKK30KKworYm9vbCBTZXR0aW5nczo6YWxsb3dzQW55U1NMQ2Vy
dGlmaWNhdGUoKQoreworICAgIHJldHVybiBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGU7Cit9CisK
KyNpZiAhUExBVEZPUk0oQ09DT0EpCitjb25zdCBTdHJpbmcmIFNldHRpbmdzOjpkZWZhdWx0TWVk
aWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKQoreworICAgIHJldHVybiBl
bXB0eVN0cmluZygpOworfQorI2VuZGlmCisKK3ZvaWQgU2V0dGluZ3M6OnNldE1lZGlhQ29udGVu
dFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFN0cmluZyYgY29udGVudFR5cGVz
KQoreworICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQuc2hy
aW5rKDApOworICAgIGZvciAoYXV0byB0eXBlIDogU3RyaW5nVmlldyhjb250ZW50VHlwZXMpLnNw
bGl0KCc6JykpCisgICAgICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1
cHBvcnQuYXBwZW5kKENvbnRlbnRUeXBlIHsgdHlwZS50b1N0cmluZygpIH0pOworfQorCit2b2lk
IFNldHRpbmdzOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChj
b25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBjb250ZW50VHlwZXMpCit7CisgICAgbV9tZWRpYUNv
bnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCA9IGNvbnRlbnRUeXBlczsKK30KKwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMj
IC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuY3BwCShyZXZpc2lvbiAyMjI3MTApCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJTZXR0aW5nc0Jhc2UuaCIKIAogI2luY2x1ZGUgIkF1ZGlvU2Vzc2lv
bi5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgpAQCAtNDMsNiArNDMsNyBA
QAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUuaCIKICNpbmNsdWRlICJS
dW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3
dGYvU3RkTGliRXh0cmFzLmg+CkBAIC02MSwxOSArNjIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyB2b2lkIHNldEltYWdlTG9hZGluZ1NldHRpbmdzKFBhZ2UqIHBhZ2UpCi17
Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKEZyYW1lKiBmcmFt
ZSA9ICZwYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2
ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxv
YWRlcigpLnNldEltYWdlc0VuYWJsZWQocGFnZS0+c2V0dGluZ3MoKS5hcmVJbWFnZXNFbmFibGVk
KCkpOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5z
ZXRBdXRvTG9hZEltYWdlcyhwYWdlLT5zZXR0aW5ncygpLmxvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eSgpKTsKLSAgICB9Ci19Ci0KIHN0YXRpYyB2b2lkIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1p
bHlDaGFuZ2UoUGFnZSogcGFnZSkKIHsKICAgICBpbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgp
OwpAQCAtODIsNDUgKzcwLDQ1IEBAIHN0YXRpYyB2b2lkIGludmFsaWRhdGVBZnRlckdlbmVyaWNG
YW1pbHkKIH0KIAogI2lmIFVTRShBVkZPVU5EQVRJT04pCi1ib29sIFNldHRpbmdzOjpnQVZGb3Vu
ZGF0aW9uRW5hYmxlZCA9IHRydWU7Ci1ib29sIFNldHRpbmdzOjpnQVZGb3VuZGF0aW9uTlNVUkxT
ZXNzaW9uRW5hYmxlZCA9IHRydWU7Citib29sIFNldHRpbmdzQmFzZTo6Z0FWRm91bmRhdGlvbkVu
YWJsZWQgPSB0cnVlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdBVkZvdW5kYXRpb25OU1VSTFNlc3Np
b25FbmFibGVkID0gdHJ1ZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi1ib29sIFNl
dHRpbmdzOjpnUVRLaXRFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z1FUS2l0
RW5hYmxlZCA9IGZhbHNlOwogI2VuZGlmCiAKICNpZiBVU0UoR1NUUkVBTUVSKQotYm9vbCBTZXR0
aW5nczo6Z0dTdHJlYW1lckVuYWJsZWQgPSB0cnVlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdHU3Ry
ZWFtZXJFbmFibGVkID0gdHJ1ZTsKICNlbmRpZgogCi1ib29sIFNldHRpbmdzOjpnTW9ja1Njcm9s
bGJhcnNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnVXNlc092ZXJsYXlTY3JvbGxi
YXJzID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9
IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxz
ZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnVXNlc092ZXJsYXlTY3JvbGxiYXJzID0gZmFsc2U7Citi
b29sIFNldHRpbmdzQmFzZTo6Z01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmYWxzZTsKIAog
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi1ib29sIFNldHRpbmdzOjpnTW9ja0NhcHR1cmVEZXZp
Y2VzRW5hYmxlZCA9IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6Z01lZGlhQ2FwdHVyZVJlcXVpcmVz
U2VjdXJlQ29ubmVjdGlvbiA9IHRydWU7Citib29sIFNldHRpbmdzQmFzZTo6Z01vY2tDYXB0dXJl
RGV2aWNlc0VuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnTWVkaWFDYXB0dXJl
UmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
V0lOKQotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gdHJ1
ZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMgPSB0
cnVlOwogI2VuZGlmCiAgICAgCi1ib29sIFNldHRpbmdzOjpnU2hvdWxkUmVzcGVjdFByaW9yaXR5
SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTG93UG93ZXJW
aWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGluZ3M6
OmdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdT
aG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMgPSBmYWxzZTsKK2Jvb2wg
U2V0dGluZ3NCYXNlOjpnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgPSBmYWxz
ZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFi
bGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z0FsbG93c0FueVNTTENlcnRpZmljYXRl
ID0gZmFsc2U7CiAKICNpZiBQTEFURk9STShJT1MpCi1ib29sIFNldHRpbmdzOjpnTmV0d29ya0Rh
dGFVc2FnZVRyYWNraW5nRW5hYmxlZCA9IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6Z0FWS2l0RW5h
YmxlZCA9IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZE9wdE91dE9mTmV0d29ya1N0YXRl
T2JzZXJ2YXRpb24gPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnTmV0d29ya0RhdGFVc2Fn
ZVRyYWNraW5nRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdBVktpdEVuYWJs
ZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3Rh
dGVPYnNlcnZhdGlvbiA9IGZhbHNlOwogI2VuZGlmCi1ib29sIFNldHRpbmdzOjpnTWFuYWdlQXVk
aW9TZXNzaW9uID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnQ3VzdG9tUGFzdGVib2FyZERhdGFF
bmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z01hbmFnZUF1ZGlvU2Vzc2lvbiA9
IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQg
PSBmYWxzZTsKIAotYm9vbCBTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkK
K2Jvb2wgU2V0dGluZ3NCYXNlOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKQogewogICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplQ3VzdG9tUGFzdGVib2FyZERhdGFUb0Rl
ZmF1bHRWYWx1ZTsKICAgICBzdGQ6OmNhbGxfb25jZShpbml0aWFsaXplQ3VzdG9tUGFzdGVib2Fy
ZERhdGFUb0RlZmF1bHRWYWx1ZSwgW10gewpAQCAtMTQxLDIzICsxMjksMTIgQEAgYm9vbCBTZXR0
aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibAogLy8gZm9yIGR1YWwgRzVzLiA6KQogc3Rh
dGljIGNvbnN0IFNlY29uZHMgbGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQgPSAyNTBfbXM7CiAKLVNl
dHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQotICAgIDogbV9tZWRpYVR5cGVPdmVycmlkZSgi
c2NyZWVuIikKK1NldHRpbmdzQmFzZTo6U2V0dGluZ3NCYXNlKFBhZ2UqIHBhZ2UpCisgICAgOiBt
X3BhZ2UobnVsbHB0cikKICAgICAsIG1fZm9udEdlbmVyaWNGYW1pbGllcyhzdGQ6Om1ha2VfdW5p
cXVlPEZvbnRHZW5lcmljRmFtaWxpZXM+KCkpCi0gICAgLCBtX3N0b3JhZ2VCbG9ja2luZ1BvbGlj
eShTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9yYWdlKQogICAgICwgbV9sYXlvdXRJbnRlcnZh
bChsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCkKICAgICAsIG1fbWluaW11bURPTVRpbWVySW50ZXJ2
YWwoRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKSkKLSAgICAsIG1fbG9hZHNJbWFn
ZXNBdXRvbWF0aWNhbGx5KGZhbHNlKQotICAgICwgbV9hcmVJbWFnZXNFbmFibGVkKHRydWUpCi0g
ICAgLCBtX2FyZVBsdWdpbnNFbmFibGVkKGZhbHNlKQotICAgICwgbV9pc1NjcmlwdEVuYWJsZWQo
ZmFsc2UpCi0gICAgLCBtX3VzZXNQYWdlQ2FjaGUoZmFsc2UpCi0gICAgLCBtX2JhY2tncm91bmRT
aG91bGRFeHRlbmRCZXlvbmRQYWdlKGZhbHNlKQotICAgICwgbV9kbnNQcmVmZXRjaGluZ0VuYWJs
ZWQoZmFsc2UpCi0gICAgLCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZmFs
c2UpCi0gICAgLCBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIoKnRoaXMsICZTZXR0aW5n
czo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKQotICAgICwgbV9oaWRkZW5QYWdlRE9N
VGltZXJUaHJvdHRsaW5nRW5hYmxlZChmYWxzZSkKLSAgICAsIG1faGlkZGVuUGFnZUNTU0FuaW1h
dGlvblN1c3BlbnNpb25FbmFibGVkKGZhbHNlKQorICAgICwgbV9zZXRJbWFnZUxvYWRpbmdTZXR0
aW5nc1RpbWVyKCp0aGlzLCAmU2V0dGluZ3NCYXNlOjppbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVy
RmlyZWQpCiB7CiAgICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVkIHlldCwg
c28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nCiAgICAgLy8gaGFzaCBiZWZvcmUgdHJ5
aW5nIHRvIHVzZSBpdC4KQEAgLTE2OSwxOTYgKzE0NiwxMDIgQEAgU2V0dGluZ3M6OlNldHRpbmdz
KFBhZ2UqIHBhZ2UpCiAgICAgbV9wYWdlID0gcGFnZTsKIH0KIAotU2V0dGluZ3M6On5TZXR0aW5n
cygpCitTZXR0aW5nc0Jhc2U6On5TZXR0aW5nc0Jhc2UoKQogewogfQogCi1SZWY8U2V0dGluZ3M+
IFNldHRpbmdzOjpjcmVhdGUoUGFnZSogcGFnZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTZXR0aW5ncyhwYWdlKSk7Ci19Ci0KICNpZiAhUExBVEZPUk0oQ09DT0EpCi12b2lkIFNldHRp
bmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCit2b2lkIFNldHRpbmdzQmFzZTo6
aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQogewogICAgIC8vIE90aGVyIHBsYXRmb3Jt
cyBjYW4gc2V0IHVwIGZvbnRzIGZyb20gYSBjbGllbnQsIGJ1dCBvbiBNYWMsIHdlIHdhbnQgaXQg
aW4gV2ViQ29yZSB0byBzaGFyZSBjb2RlIGJldHdlZW4gV2ViS2l0MSBhbmQgV2ViS2l0Mi4KIH0K
ICNlbmRpZgogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1p
bHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5n
c0Jhc2U6OnN0YW5kYXJkRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c3RhbmRhcmRGb250RmFtaWx5KHNjcmlw
dCk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBBdG9t
aWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6
OnNldFN0YW5kYXJkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlw
dENvZGUgc2NyaXB0KQogewogICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGll
cy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKICAgICBpZiAoY2hhbmdl
cykKICAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwog
fQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpmaXhlZEZvbnRGYW1pbHkoVVNjcmlw
dENvZGUgc2NyaXB0KSBjb25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OmZp
eGVkRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
Zm9udEdlbmVyaWNGYW1pbGllcy0+Zml4ZWRGb250RmFtaWx5KHNjcmlwdCk7CiB9CiAKLXZvaWQg
U2V0dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
VVNjcmlwdENvZGUgc2NyaXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEZpeGVkRm9udEZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQogewogICAg
IGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0Rml4ZWRGb250RmFtaWx5
KGZhbWlseSwgc2NyaXB0KTsKICAgICBpZiAoY2hhbmdlcykKICAgICAgICAgaW52YWxpZGF0ZUFm
dGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcm
IFNldHRpbmdzOjpzZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAorY29u
c3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OnNlcmlmRm9udEZhbWlseShVU2NyaXB0Q29k
ZSBzY3JpcHQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2Vy
aWZGb250RmFtaWx5KHNjcmlwdCk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFNlcmlmRm9udEZh
bWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQordm9p
ZCBTZXR0aW5nc0Jhc2U6OnNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZh
bWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQogewogICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdl
bmVyaWNGYW1pbGllcy0+c2V0U2VyaWZGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKICAgICBp
ZiAoY2hhbmdlcykKICAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZSht
X3BhZ2UpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpzYW5zU2VyaWZGb250
RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0
dGluZ3NCYXNlOjpzYW5zU2VyaWZGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zYW5zU2VyaWZGb250RmFtaWx5
KHNjcmlwdCk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5
LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJp
Y0ZhbWlsaWVzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKICAgICBp
ZiAoY2hhbmdlcykKICAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZSht
X3BhZ2UpOwogfQogCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpjdXJzaXZlRm9udEZh
bWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNldHRp
bmdzQmFzZTo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewog
ICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPmN1cnNpdmVGb250RmFtaWx5KHNjcmlw
dCk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit2b2lkIFNldHRpbmdzQmFzZTo6
c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRD
b2RlIHNjcmlwdCkKIHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMt
PnNldEN1cnNpdmVGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKICAgICBpZiAoY2hhbmdlcykK
ICAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwogfQog
Ci1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpmYW50YXN5Rm9udEZhbWlseShVU2NyaXB0
Q29kZSBzY3JpcHQpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzQmFzZTo6ZmFu
dGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJldHVybiBt
X2ZvbnRHZW5lcmljRmFtaWxpZXMtPmZhbnRhc3lGb250RmFtaWx5KHNjcmlwdCk7CiB9CiAKLXZv
aWQgU2V0dGluZ3M6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0RmFudGFzeUZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkK
IHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEZhbnRhc3lG
b250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKICAgICBpZiAoY2hhbmdlcykKICAgICAgICAgaW52
YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwogfQogCi1jb25zdCBBdG9t
aWNTdHJpbmcmIFNldHRpbmdzOjpwaWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3Jp
cHQpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzQmFzZTo6cGljdG9ncmFwaEZv
bnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJldHVybiBtX2ZvbnRH
ZW5lcmljRmFtaWxpZXMtPnBpY3RvZ3JhcGhGb250RmFtaWx5KHNjcmlwdCk7CiB9CiAKLXZvaWQg
U2V0dGluZ3M6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFt
aWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0UGljdG9ncmFw
aEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlw
dCkKIHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFBpY3Rv
Z3JhcGhGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKICAgICBpZiAoY2hhbmdlcykKICAgICAg
ICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwogfQogCi1ib29s
IFNldHRpbmdzOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCkKLXsKLSAgICByZXR1cm4g
V2ViQ29yZTo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpOwotfQotCi1mbG9hdCBTZXR0
aW5nczo6ZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKQotewotICAgIHJldHVybiBXZWJDb3Jl
OjpkZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TWVk
aWFUeXBlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVPdmVycmlkZSkKLXsKLSAgICBp
ZiAobV9tZWRpYVR5cGVPdmVycmlkZSA9PSBtZWRpYVR5cGVPdmVycmlkZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9tZWRpYVR5cGVPdmVycmlkZSA9IG1lZGlhVHlwZU92ZXJyaWRlOwotCi0g
ICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogdmlldyA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIHZp
ZXctPnNldE1lZGlhVHlwZShtZWRpYVR5cGVPdmVycmlkZSk7Ci0gICAgbV9wYWdlLT5zZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KQotewotICAg
IG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5ID0gbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5Owot
ICAgIAotICAgIC8vIENoYW5naW5nIHRoaXMgc2V0dGluZyB0byB0cnVlIG1pZ2h0IGltbWVkaWF0
ZWx5IHN0YXJ0IG5ldyBsb2FkcyBmb3IgaW1hZ2VzIHRoYXQgaGFkIHByZXZpb3VzbHkgaGFkIGxv
YWRpbmcgZGlzYWJsZWQuCi0gICAgLy8gSWYgdGhpcyBoYXBwZW5zIHdoaWxlIGEgV2ViVmlldyBp
cyBiZWluZyBkZWFsbG9jJ2VkLCBhbmQgd2UgZG9uJ3Qga25vdyB0aGUgV2ViVmlldyBpcyBiZWlu
ZyBkZWFsbG9jJ2VkLCB0aGVzZSBuZXcgbG9hZHMKLSAgICAvLyBjYW4gY2F1c2UgY3Jhc2hlcyBk
b3duc3RyZWFtIHdoZW4gdGhlIFdlYlZpZXcgbWVtb3J5IGhhcyBhY3R1YWxseSBiZWVuIGZyZWUn
ZC4KLSAgICAvLyBPbmUgZXhhbXBsZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4gaXMgaW4gTWFjIGFw
cHMgdGhhdCBzdWJjbGFzcyBXZWJWaWV3IHRoZW4gZG8gd29yayBpbiB0aGVpciBvdmVycmlkZGVu
IGRlYWxsb2MgbWV0aG9kcy4KLSAgICAvLyBTdGFydGluZyB0aGVzZSBsb2FkcyBzeW5jaHJvbm91
c2x5IGlzIG5vdCBpbXBvcnRhbnQuICBCeSBwdXR0aW5nIGl0IG9uIGEgMC1kZWxheSwgcHJvcGVy
bHkgY2xvc2luZyB0aGUgUGFnZSBjYW5jZWxzIHRoZW0KLSAgICAvLyBiZWZvcmUgdGhleSBoYXZl
IGEgY2hhbmNlIHRvIHJlYWxseSBzdGFydC4KLSAgICAvLyBTZWUgaHR0cDovL3dlYmtpdC5vcmcv
Yi82MDU3MiBmb3IgbW9yZSBkaXNjdXNzaW9uLgotICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGlu
Z3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6aW1hZ2VMb2Fk
aW5nU2V0dGluZ3NUaW1lckZpcmVkKCkKLXsKLSAgICBzZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyht
X3BhZ2UpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRTY3JpcHRFbmFibGVkKGJvb2wgaXNTY3Jp
cHRFbmFibGVkKQotewotICAgIGlmIChtX2lzU2NyaXB0RW5hYmxlZCA9PSBpc1NjcmlwdEVuYWJs
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNTY3JpcHRFbmFibGVkID0gaXNTY3JpcHRF
bmFibGVkOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRG
T1JNKElPUykKLSAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwot
I2VuZGlmCi19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEltYWdlc0VuYWJsZWQoYm9vbCBhcmVJbWFn
ZXNFbmFibGVkKQotewotICAgIG1fYXJlSW1hZ2VzRW5hYmxlZCA9IGFyZUltYWdlc0VuYWJsZWQ7
Ci0KLSAgICAvLyBTZWUgY29tbWVudCBpbiBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkuCi0g
ICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQot
Ci12b2lkIFNldHRpbmdzOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGFyZVBsdWdpbnNFbmFibGVk
KQotewotICAgIGlmIChtX2FyZVBsdWdpbnNFbmFibGVkID09IGFyZVBsdWdpbnNFbmFibGVkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FyZVBsdWdpbnNFbmFibGVkID0gYXJlUGx1Z2luc0Vu
YWJsZWQ7Ci0gICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMoZmFsc2UpOwotfQotCi12b2lkIFNldHRp
bmdzOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRM
b2NhdGlvbikKLXsKLSAgICBpZiAobV91c2VyU3R5bGVTaGVldExvY2F0aW9uID09IHVzZXJTdHls
ZVNoZWV0TG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fdXNlclN0eWxlU2hlZXRM
b2NhdGlvbiA9IHVzZXJTdHlsZVNoZWV0TG9jYXRpb247Ci0KLSAgICBpZiAobV9wYWdlKQotICAg
ICAgICBtX3BhZ2UtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCk7Ci19Ci0KLXZvaWQg
U2V0dGluZ3M6OnNldE1pbmltdW1ET01UaW1lckludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpCit2
b2lkIFNldHRpbmdzQmFzZTo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRl
cnZhbCkKIHsKICAgICBhdXRvIG9sZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWlu
aW11bURPTVRpbWVySW50ZXJ2YWwsIGludGVydmFsKTsKIApAQCAtMzcxLDc5ICsyNTQsNTYgQEAg
dm9pZCBTZXR0aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YQogICAgIH0KIH0KIAotdm9p
ZCBTZXR0aW5nczo6c2V0TGF5b3V0SW50ZXJ2YWwoU2Vjb25kcyBsYXlvdXRJbnRlcnZhbCkKK3Zv
aWQgU2V0dGluZ3NCYXNlOjpzZXRMYXlvdXRJbnRlcnZhbChTZWNvbmRzIGxheW91dEludGVydmFs
KQogewogICAgIC8vIEZJWE1FOiBJdCBzZWVtcyB3ZWlyZCB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5
IGRpc3JlZ2FyZCB0aGUgc3BlY2lmaWVkIGxheW91dCBpbnRlcnZhbC4KICAgICAvLyBXZSBzaG91
bGQgZWl0aGVyIGV4cG9zZSBsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCBvciBiZXR0ZXIgY29tbXVu
aWNhdGUgdGhpcyBpbnZhcmlhbnQuCiAgICAgbV9sYXlvdXRJbnRlcnZhbCA9IHN0ZDo6bWF4KGxh
eW91dEludGVydmFsLCBsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCk7CiB9CiAKLXZvaWQgU2V0dGlu
Z3M6OnNldFVzZXNQYWdlQ2FjaGUoYm9vbCB1c2VzUGFnZUNhY2hlKQorI2lmICFQTEFURk9STShD
T0NPQSkKK2NvbnN0IFN0cmluZyYgU2V0dGluZ3NCYXNlOjpkZWZhdWx0TWVkaWFDb250ZW50VHlw
ZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKQogewotICAgIGlmIChtX3VzZXNQYWdlQ2FjaGUg
PT0gdXNlc1BhZ2VDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBtX3VzZXNQ
YWdlQ2FjaGUgPSB1c2VzUGFnZUNhY2hlOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV91c2VzUGFnZUNhY2hlKQotICAgICAgICBQYWdlQ2FjaGU6OnNp
bmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOworICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwogfQorI2VuZGlmCiAKLXZvaWQgU2V0dGluZ3M6OnNldEROU1By
ZWZldGNoaW5nRW5hYmxlZChib29sIGRuc1ByZWZldGNoaW5nRW5hYmxlZCkKK3ZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25z
dCBTdHJpbmcmIGNvbnRlbnRUeXBlcykKIHsKLSAgICBpZiAobV9kbnNQcmVmZXRjaGluZ0VuYWJs
ZWQgPT0gZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Ru
c1ByZWZldGNoaW5nRW5hYmxlZCA9IGRuc1ByZWZldGNoaW5nRW5hYmxlZDsKLSAgICBpZiAobV9w
YWdlKQotICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAg
bV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5zaHJpbmsoMCk7Cisg
ICAgZm9yIChhdXRvIHR5cGUgOiBTdHJpbmdWaWV3KGNvbnRlbnRUeXBlcykuc3BsaXQoJzonKSkK
KyAgICAgICAgbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5hcHBl
bmQoQ29udGVudFR5cGUgeyB0eXBlLnRvU3RyaW5nKCkgfSk7CiB9CiAKLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCi12b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2li
bGUoYm9vbCB2aXNpYmxlKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE1lZGlhQ29udGVudFR5cGVz
UmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIGNvbnRl
bnRUeXBlcykKIHsKLSAgICBpZiAobV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgPT0gdmlz
aWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2li
bGUgPSB2aXNpYmxlOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2V0UmVzb3Vy
Y2VVc2FnZU92ZXJsYXlWaXNpYmxlKHZpc2libGUpOworICAgIG1fbWVkaWFDb250ZW50VHlwZXNS
ZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQgPSBjb250ZW50VHlwZXM7CiB9Ci0jZW5kaWYKIAotI2lm
IFBMQVRGT1JNKFdJTikKLXZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9u
VGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMpCisvLyBNQVJLIC0gRGVm
YXVsdHMgdG8gbW92ZQorCitib29sIFNldHRpbmdzQmFzZTo6ZGVmYXVsdFRleHRBdXRvc2l6aW5n
RW5hYmxlZCgpCiB7Ci0gICAgZ1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gc2hvdWxk
VXNlSGlnaFJlc29sdXRpb25UaW1lcnM7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRlZmF1bHRUZXh0
QXV0b3NpemluZ0VuYWJsZWQoKTsKIH0KLSNlbmRpZgogCi12b2lkIFNldHRpbmdzOjpzZXRTdG9y
YWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBl
bmFibGVkKQorZmxvYXQgU2V0dGluZ3NCYXNlOjpkZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgp
CiB7Ci0gICAgaWYgKG1fc3RvcmFnZUJsb2NraW5nUG9saWN5ID09IGVuYWJsZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc3RvcmFnZUJsb2NraW5nUG9saWN5ID0gZW5hYmxlZDsKLSAgICBp
ZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgp
OworICAgIHJldHVybiBXZWJDb3JlOjpkZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZTsKIH0KIAot
dm9pZCBTZXR0aW5nczo6c2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbCBz
aG91bGRFeHRlbmQpCi17Ci0gICAgaWYgKG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2UgPT0gc2hvdWxkRXh0ZW5kKQotICAgICAgICByZXR1cm47CiAKLSAgICBtX2JhY2tncm91bmRT
aG91bGRFeHRlbmRCZXlvbmRQYWdlID0gc2hvdWxkRXh0ZW5kOworLy8gTUFSSyAtIEdsb2JhbCBz
ZXR0aW5ncwogCi0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52
aWV3KCktPnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOworI2lmIFBMQVRGT1JN
KFdJTikKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVy
cyhib29sIHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKQoreworICAgIGdTaG91bGRVc2VI
aWdoUmVzb2x1dGlvblRpbWVycyA9IHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzOwogfQor
I2VuZGlmCiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQotdm9pZCBTZXR0aW5nczo6c2V0QVZGb3Vu
ZGF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0QVZGb3Vu
ZGF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGdBVkZvdW5kYXRpb25FbmFi
bGVkID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ1Miw3ICszMTIsNyBAQCB2b2lk
IFNldHRpbmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvCiAgICAgSFRNTE1lZGlhRWxlbWVu
dDo6cmVzZXRNZWRpYUVuZ2luZXMoKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0QVZGb3VuZGF0
aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6
c2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAg
aWYgKGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkID09IGVuYWJsZWQpCiAgICAgICAg
IHJldHVybjsKQEAgLTQ2Miw3ICszMjIsNyBAQCB2b2lkIFNldHRpbmdzOjpzZXRBVkZvdW5kYXRp
b25OU1VSTFNlc3NpCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5n
czo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRR
VEtpdEVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChnUVRLaXRFbmFibGVkID09IGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ3Myw3ICszMzMsNyBAQCB2b2lkIFNldHRpbmdz
OjpzZXRRVEtpdEVuYWJsZWQoYm9vbCBlbmFiCiAjZW5kaWYKIAogI2lmIFVTRShHU1RSRUFNRVIp
Ci12b2lkIFNldHRpbmdzOjpzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQg
U2V0dGluZ3NCYXNlOjpzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBp
ZiAoZ0dTdHJlYW1lckVuYWJsZWQgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDg0
LDEzNiArMzQ0LDEwMSBAQCB2b2lkIFNldHRpbmdzOjpzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wg
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi1ib29sIFNldHRpbmdzOjptb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkKCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjptb2NrQ2FwdHVyZURl
dmljZXNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZ01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ7
CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQogewogICAgIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZW5hYmxl
ZDsKICAgICBNb2NrUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2V0TW9ja1JlYWx0aW1lTWVk
aWFTb3VyY2VDZW50ZXJFbmFibGVkKGVuYWJsZWQpOwogfQogCi1ib29sIFNldHRpbmdzOjptZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdAorYm9vbCBTZXR0aW5nc0Jh
c2U6Om1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbigpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiB9CiAKLXZvaWQg
U2V0dGluZ3M6OnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sIG1l
ZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbikKK3ZvaWQgU2V0dGluZ3NCYXNlOjpz
ZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCBtZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24pCiB7CiAgICAgZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2Vj
dXJlQ29ubmVjdGlvbiA9IG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjsKIH0K
ICNlbmRpZgogCi12b2lkIFNldHRpbmdzOjpzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdF
bmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2lu
Z0VuYWJsZWQgPSBlbmFibGVkOwotCi0gICAgaWYgKG1fcGFnZSAmJiBtX3BhZ2UtPm1haW5GcmFt
ZSgpLnZpZXcoKSkKLSAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNldFNjcm9s
bGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KIC8vIEl0J3MgdmVy
eSBpbXBvcnRhbnQgdGhhdCB0aGlzIHNldHRpbmcgZG9lc24ndCBjaGFuZ2UgaW4gdGhlIG1pZGRs
ZSBvZiBhIGRvY3VtZW50J3MgbGlmZXRpbWUuCiAvLyBUaGUgTWFjIHBvcnQgdXNlcyB0aGlzIGZs
YWcgd2hlbiByZWdpc3RlcmluZyBhbmQgZGVyZWdpc3RlcmluZyBwbGF0Zm9ybS1kZXBlbmRlbnQg
c2Nyb2xsYmFyCiAvLyBvYmplY3RzLiBUaGVyZWZvcmUsIGlmIHRoaXMgY2hhbmdlcyBhdCBhbiB1
bmV4cGVjdGVkIHRpbWUsIGRlcmVnaXN0cmF0aW9uIG1heSBub3QgaGFwcGVuCiAvLyBjb3JyZWN0
bHksIHdoaWNoIG1heSBjYXVzZSB0aGUgcGxhdGZvcm0gdG8gZm9sbG93IGRhbmdsaW5nIHBvaW50
ZXJzLgotdm9pZCBTZXR0aW5nczo6c2V0TW9ja1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZmxhZykK
K3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBmbGFnKQog
ewogICAgIGdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmbGFnOwogICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCB1cGRhdGUgc2Nyb2xsIGJhcnMgaW4gZXhpc3RpbmcgcGFnZXMuCiB9CiAKLWJvb2wg
U2V0dGluZ3M6Om1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpCitib29sIFNldHRpbmdzQmFzZTo6bW9j
a1Njcm9sbGJhcnNFbmFibGVkKCkKIHsKICAgICByZXR1cm4gZ01vY2tTY3JvbGxiYXJzRW5hYmxl
ZDsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxh
ZykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRVc2VzT3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBmbGFn
KQogewogICAgIGdVc2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBmbGFnOwogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCB1cGRhdGUgc2Nyb2xsIGJhcnMgaW4gZXhpc3RpbmcgcGFnZXMuCiB9CiAKLWJv
b2wgU2V0dGluZ3M6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpCitib29sIFNldHRpbmdzQmFzZTo6
dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkKIHsKICAgICByZXR1cm4gZ1VzZXNPdmVybGF5U2Nyb2xs
YmFyczsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcihib29s
IGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcihib29s
IGZsYWcpCiB7CiAgICAgZ01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmbGFnOwogfQogCi1i
b29sIFNldHRpbmdzOjp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkKK2Jvb2wgU2V0dGluZ3NCYXNl
Ojp1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCkKIHsKICAgICByZXR1cm4gZ01vY2tTY3JvbGxBbmlt
YXRvckVuYWJsZWQ7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFJlc3BlY3RQcmlvcml0
eUluQ1NTQXR0cmlidXRlU2V0dGVycyhib29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0
U2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wgZmxhZykKIHsK
ICAgICBnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmxhZzsK
IH0KIAotYm9vbCBTZXR0aW5nczo6c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVT
ZXR0ZXJzKCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjpzaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0
dHJpYnV0ZVNldHRlcnMoKQogewogICAgIHJldHVybiBnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5D
U1NBdHRyaWJ1dGVTZXR0ZXJzOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRIaWRkZW5QYWdlRE9N
VGltZXJUaHJvdHRsaW5nRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgaWYgKG1faGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAg
IG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBmbGFnOwotICAgIGlmICht
X3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRl
Q2hhbmdlZCgpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJv
dHRsaW5nQXV0b0luY3JlYXNlcyhib29sIGZsYWcpCi17Ci0gICAgaWYgKG1faGlkZGVuUGFnZURP
TVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMgPSBmbGFnOwot
ICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0
bGluZ1N0YXRlQ2hhbmdlZCgpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRIaWRkZW5QYWdlQ1NT
QW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRl
blBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9PSBmbGFnKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQgPSBmbGFn
OwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZUNTU0FuaW1hdGlv
blN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TG93UG93
ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5nc0Jh
c2U6OnNldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKGJvb2wgZmxhZykKIHsK
ICAgICBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgPSBmbGFnOwogfQogCi12
b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sIGZsYWcp
Cit2b2lkIFNldHRpbmdzQmFzZTo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9v
bCBmbGFnKQogewogICAgIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQgPSBm
bGFnOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQotdm9pZCBTZXR0aW5nczo6c2V0QXVkaW9TZXNz
aW9uQ2F0ZWdvcnlPdmVycmlkZSh1bnNpZ25lZCBzZXNzaW9uQ2F0ZWdvcnkpCit2b2lkIFNldHRp
bmdzQmFzZTo6c2V0QXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSh1bnNpZ25lZCBzZXNzaW9u
Q2F0ZWdvcnkpCiB7CiAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0Q2F0ZWdv
cnlPdmVycmlkZShzdGF0aWNfY2FzdDxBdWRpb1Nlc3Npb246OkNhdGVnb3J5VHlwZT4oc2Vzc2lv
bkNhdGVnb3J5KSk7CiB9CiAKLXVuc2lnbmVkIFNldHRpbmdzOjphdWRpb1Nlc3Npb25DYXRlZ29y
eU92ZXJyaWRlKCkKK3Vuc2lnbmVkIFNldHRpbmdzQmFzZTo6YXVkaW9TZXNzaW9uQ2F0ZWdvcnlP
dmVycmlkZSgpCiB7CiAgICAgcmV0dXJuIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vzc2lvbigpLmNh
dGVnb3J5T3ZlcnJpZGUoKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0TmV0d29ya0RhdGFVc2Fn
ZVRyYWNraW5nRW5hYmxlZChib29sIHRyYWNraW5nRW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNl
OjpzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJvb2wgdHJhY2tpbmdFbmFibGVk
KQogewogICAgIGdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkID0gdHJhY2tpbmdFbmFi
bGVkOwogfQogCi1ib29sIFNldHRpbmdzOjpuZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVk
KCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjpuZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKCkK
IHsKICAgICByZXR1cm4gZ05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQ7CiB9CkBAIC02
MjQsMTggKzQ0OSwxOCBAQCBzdGF0aWMgU3RyaW5nJiBzaGFyZWROZXR3b3JrSW50ZXJmYWNlTmFt
CiAgICAgcmV0dXJuIG5ldHdvcmtJbnRlcmZhY2VOYW1lOwogfQogCi12b2lkIFNldHRpbmdzOjpz
ZXROZXR3b3JrSW50ZXJmYWNlTmFtZShjb25zdCBTdHJpbmcmIG5ldHdvcmtJbnRlcmZhY2VOYW1l
KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE5ldHdvcmtJbnRlcmZhY2VOYW1lKGNvbnN0IFN0cmlu
ZyYgbmV0d29ya0ludGVyZmFjZU5hbWUpCiB7CiAgICAgc2hhcmVkTmV0d29ya0ludGVyZmFjZU5h
bWVHbG9iYWwoKSA9IG5ldHdvcmtJbnRlcmZhY2VOYW1lOwogfQogCi1jb25zdCBTdHJpbmcmIFNl
dHRpbmdzOjpuZXR3b3JrSW50ZXJmYWNlTmFtZSgpCitjb25zdCBTdHJpbmcmIFNldHRpbmdzQmFz
ZTo6bmV0d29ya0ludGVyZmFjZU5hbWUoKQogewogICAgIHJldHVybiBzaGFyZWROZXR3b3JrSW50
ZXJmYWNlTmFtZUdsb2JhbCgpOwogfQogI2VuZGlmCiAKLWJvb2wgU2V0dGluZ3M6Omdsb2JhbENv
bnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KCkKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnbG9iYWxD
b25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IHJldHVybiAhTWFjQXBwbGljYXRpb246OmlzSUJvb2tzKCk7CkBAIC02NDYsMzQgKzQ3MSwxMzEg
QEAgYm9vbCBTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uUwogI2VuZGlmCiB9CiAK
LXZvaWQgU2V0dGluZ3M6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wgYWxsb3dBbnlT
U0xDZXJ0aWZpY2F0ZSkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZShib29sIGFsbG93QW55U1NMQ2VydGlmaWNhdGUpCiB7CiAgICAgZ0FsbG93c0FueVNTTENl
cnRpZmljYXRlID0gYWxsb3dBbnlTU0xDZXJ0aWZpY2F0ZTsKIH0KIAotYm9vbCBTZXR0aW5nczo6
YWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoKQorYm9vbCBTZXR0aW5nc0Jhc2U6OmFsbG93c0FueVNT
TENlcnRpZmljYXRlKCkKIHsKICAgICByZXR1cm4gZ0FsbG93c0FueVNTTENlcnRpZmljYXRlOwog
fQogCi0jaWYgIVBMQVRGT1JNKENPQ09BKQotY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVs
dE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkKKworLy8gTUFSSyAt
IG9uQ2hhbmdlIGhhbmRsZXJzCisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXROZWVkc1JlY2FsY1N0
eWxlSW5BbGxGcmFtZXMoKQogewotICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIGlmICht
X3BhZ2UpCisgICAgICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7
Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjptZWRpYVR5cGVPdmVycmlkZUNoYW5nZWQoKQorewor
ICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBGcmFtZVZpZXcqIHZpZXcg
PSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKKyAgICBpZiAodmlldykKKyAgICAgICAgdmll
dy0+c2V0TWVkaWFUeXBlKG1fcGFnZS0+c2V0dGluZ3MoKS5tZWRpYVR5cGVPdmVycmlkZSgpKTsK
KworICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Cit9CisKK3Zv
aWQgU2V0dGluZ3NCYXNlOjppbWFnZXNFbmFibGVkQ2hhbmdlZCgpCit7CisgICAgLy8gQ2hhbmdp
bmcgdGhpcyBzZXR0aW5nIHRvIHRydWUgbWlnaHQgaW1tZWRpYXRlbHkgc3RhcnQgbmV3IGxvYWRz
IGZvciBpbWFnZXMgdGhhdCBoYWQgcHJldmlvdXNseSBoYWQgbG9hZGluZyBkaXNhYmxlZC4KKyAg
ICAvLyBJZiB0aGlzIGhhcHBlbnMgd2hpbGUgYSBXZWJWaWV3IGlzIGJlaW5nIGRlYWxsb2MnZWQs
IGFuZCB3ZSBkb24ndCBrbm93IHRoZSBXZWJWaWV3IGlzIGJlaW5nIGRlYWxsb2MnZWQsIHRoZXNl
IG5ldyBsb2FkcworICAgIC8vIGNhbiBjYXVzZSBjcmFzaGVzIGRvd25zdHJlYW0gd2hlbiB0aGUg
V2ViVmlldyBtZW1vcnkgaGFzIGFjdHVhbGx5IGJlZW4gZnJlZSdkLgorICAgIC8vIE9uZSBleGFt
cGxlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbiBpcyBpbiBNYWMgYXBwcyB0aGF0IHN1YmNsYXNzIFdl
YlZpZXcgdGhlbiBkbyB3b3JrIGluIHRoZWlyIG92ZXJyaWRkZW4gZGVhbGxvYyBtZXRob2RzLgor
ICAgIC8vIFN0YXJ0aW5nIHRoZXNlIGxvYWRzIHN5bmNocm9ub3VzbHkgaXMgbm90IGltcG9ydGFu
dC4gQnkgcHV0dGluZyBpdCBvbiBhIDAtZGVsYXksIHByb3Blcmx5IGNsb3NpbmcgdGhlIFBhZ2Ug
Y2FuY2VscyB0aGVtCisgICAgLy8gYmVmb3JlIHRoZXkgaGF2ZSBhIGNoYW5jZSB0byByZWFsbHkg
c3RhcnQuCisgICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjA1NzIgZm9yIG1vcmUgZGlz
Y3Vzc2lvbi4KKyAgICBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90
KDBfcyk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjppbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVy
RmlyZWQoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNh
Y2hlZFJlc291cmNlTG9hZGVyKCkuc2V0SW1hZ2VzRW5hYmxlZChtX3BhZ2UtPnNldHRpbmdzKCku
YXJlSW1hZ2VzRW5hYmxlZCgpKTsKKyAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJl
c291cmNlTG9hZGVyKCkuc2V0QXV0b0xvYWRJbWFnZXMobV9wYWdlLT5zZXR0aW5ncygpLmxvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSgpKTsKKyAgICB9CiB9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpz
Y3JpcHRFbmFibGVkQ2hhbmdlZCgpCit7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIC8vIEZJWE1F
OiBXaHkgZG8gd2Ugb25seSBkbyB0aGlzIG9uIGlPUz8KKyAgICBpZiAobV9wYWdlKQorICAgICAg
ICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogI2VuZGlmCit9CiAK
LXZvaWQgU2V0dGluZ3M6OnNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBw
b3J0KGNvbnN0IFN0cmluZyYgY29udGVudFR5cGVzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnBsdWdp
bnNFbmFibGVkQ2hhbmdlZCgpCiB7Ci0gICAgbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hh
cmR3YXJlU3VwcG9ydC5zaHJpbmsoMCk7Ci0gICAgZm9yIChhdXRvIHR5cGUgOiBTdHJpbmdWaWV3
KGNvbnRlbnRUeXBlcykuc3BsaXQoJzonKSkKLSAgICAgICAgbV9tZWRpYUNvbnRlbnRUeXBlc1Jl
cXVpcmluZ0hhcmR3YXJlU3VwcG9ydC5hcHBlbmQoQ29udGVudFR5cGUgeyB0eXBlLnRvU3RyaW5n
KCkgfSk7CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMoZmFsc2UpOwogfQogCi12b2lkIFNldHRp
bmdzOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBW
ZWN0b3I8Q29udGVudFR5cGU+JiBjb250ZW50VHlwZXMpCit2b2lkIFNldHRpbmdzQmFzZTo6dXNl
clN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKQogewotICAgIG1fbWVkaWFDb250ZW50VHlwZXNS
ZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQgPSBjb250ZW50VHlwZXM7CisgICAgaWYgKG1fcGFnZSkK
KyAgICAgICAgbV9wYWdlLT51c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpOworfQorCit2
b2lkIFNldHRpbmdzQmFzZTo6dXNlc1BhZ2VDYWNoZUNoYW5nZWQoKQoreworICAgIGlmICghbV9w
YWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fcGFnZS0+c2V0dGluZ3MoKS51c2Vz
UGFnZUNhY2hlKCkpCisgICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVO
b3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpkbnNQ
cmVmZXRjaGluZ0VuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBt
X3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3NC
YXNlOjpyZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9w
YWdlKQorICAgICAgICBtX3BhZ2UtPnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShtX3Bh
Z2UtPnNldHRpbmdzKCkucmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKCkpOworfQorCit2b2lk
IFNldHRpbmdzQmFzZTo6c3RvcmFnZUJsb2NraW5nUG9saWN5Q2hhbmdlZCgpCit7CisgICAgaWYg
KG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKTsK
K30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUo
KS52aWV3KCktPnVwZGF0ZUV4dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOworfQorCit2b2lk
IFNldHRpbmdzQmFzZTo6c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZENoYW5nZWQo
KQoreworICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCisgICAg
ICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxv
Z2dpbmdFbmFibGVkKG1fcGFnZS0+c2V0dGluZ3MoKS5zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dp
bmdFbmFibGVkKCkpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6aGlkZGVuUGFnZURPTVRpbWVy
VGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9w
YWdlLT5oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7CiB9CiAKK3Zv
aWQgU2V0dGluZ3NCYXNlOjpoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWRD
aGFuZ2VkKCkKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VD
U1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFuZ2VkKCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkocmV2aXNpb24gMjIy
NzEwKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmg6MjIyNzEwKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAoQykgMjAwNiBHcmFoYW0gRGVubmlzIChncmFo
YW0uZGVubmlzQGdtYWlsLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29udGVudFR5cGUuaCIKKyNpbmNs
dWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNldHRpbmdzRGVmYXVsdFZhbHVlcy5o
IgorI2luY2x1ZGUgIlNldHRpbmdzR2VuZXJhdGVkLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNp
bmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx1bmljb2RlL3VzY3JpcHQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBGb250R2VuZXJpY0ZhbWlsaWVzOworCitjbGFzcyBTZXR0aW5ncyA6IHB1YmxpYyBT
ZXR0aW5nc0dlbmVyYXRlZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxTZXR0aW5ncz4gY3Jl
YXRlKFBhZ2UqKTsKKyAgICB+U2V0dGluZ3MoKTsKKworICAgIHZvaWQgcGFnZURlc3Ryb3llZCgp
IHsgbV9wYWdlID0gbnVsbHB0cjsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdGFu
ZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBU
X0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBzdGFuZGFy
ZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEZpeGVkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcm
LCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25z
dCBBdG9taWNTdHJpbmcmIGZpeGVkRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09N
TU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2VyaWZGb250RmFtaWx5
KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOworICAg
IFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc2VyaWZGb250RmFtaWx5KFVTY3Jp
cHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2Rl
ID0gVVNDUklQVF9DT01NT04pOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25z
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7CisgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBjdXJzaXZlRm9udEZhbWlseShVU2NyaXB0Q29k
ZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NS
SVBUX0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBmYW50
YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7CisgICAgV0VCQ09SRV9FWFBP
UlQgY29uc3QgQXRvbWljU3RyaW5nJiBwaWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSA9
IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29s
IGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKTsKKworICAgIC8vIE9ubHkgc2V0
IGJ5IExheW91dCBUZXN0cy4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhVHlwZU92
ZXJyaWRlKGNvbnN0IFN0cmluZyYpOworICAgIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlT3ZlcnJp
ZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92ZXJyaWRlOyB9CisKKyAgICAvLyBVbmxp
a2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1cHByZXNzZXMgdGhlIG5ldHdvcmsgbG9h
ZCBvZgorICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNhY2hlZCBpbWFnZSB3aWxsIHN0aWxsIGJl
IHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKKyAgICBib29sIGxvYWRzSW1hZ2VzQXV0b21hdGlj
YWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5OyB9CisKKyAg
ICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQgc2hvdWxkIGNhbGwgU2NyaXB0Q29udHJv
bGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQorICAgIC8vIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlv
bi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKSBjaGVja3MgdGhlCisgICAg
Ly8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hpbmcsIGFuZCBvdGhlciBpbXBvcnRhbnQg
ZGV0YWlscy4KKyAgICBib29sIGlzU2NyaXB0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNT
Y3JpcHRFbmFibGVkOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JpcHRFbmFibGVk
KGJvb2wpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wp
OworICAgIGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlSW1hZ2Vz
RW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChi
b29sKTsKKyAgICBib29sIGFyZVBsdWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVQ
bHVnaW5zRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRETlNQcmVmZXRj
aGluZ0VuYWJsZWQoYm9vbCk7CisgICAgYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNvbnN0IFVSTCYpOworICAgIGNvbnN0
IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxl
U2hlZXRMb2NhdGlvbjsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaW5pbXVtRE9N
VGltZXJJbnRlcnZhbChTZWNvbmRzKTsgLy8gSW5pdGlhbGl6ZWQgdG8gRE9NVGltZXI6OmRlZmF1
bHRNaW5pbXVtSW50ZXJ2YWwoKS4KKyAgICBTZWNvbmRzIG1pbmltdW1ET01UaW1lckludGVydmFs
KCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbDsgfQorCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRMYXlvdXRJbnRlcnZhbChTZWNvbmRzKTsKKyAgICBTZWNvbmRz
IGxheW91dEludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRJbnRlcnZhbDsgfQorCisg
ICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQ7IH0KKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGJvb2wp
OworICAgIGJvb2wgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoKSBj
b25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2Vz
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nQXV0b0luY3JlYXNlcyhib29sKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNl
c1BhZ2VDYWNoZShib29sKTsKKyAgICBib29sIHVzZXNQYWdlQ2FjaGUoKSBjb25zdCB7IHJldHVy
biBtX3VzZXNQYWdlQ2FjaGU7IH0KKworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICBi
b29sIHJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb3Vy
Y2VVc2FnZU92ZXJsYXlWaXNpYmxlOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRSZXNv
dXJjZVVzYWdlT3ZlcmxheVZpc2libGUoYm9vbCk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJ
TikKKyAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyhib29s
KTsKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycygpIHsgcmV0
dXJuIGdTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVyczsgfQorI2VuZGlmCisKKyAgICBzdGF0
aWMgYm9vbCBpc1Bvc3RMb2FkQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKTsKKyAgICBzdGF0
aWMgYm9vbCBpc1Bvc3RCYWNrZ3JvdW5kaW5nQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKTsK
KyAgICBzdGF0aWMgYm9vbCBpc1BlckFjdGl2aXR5U3RhdGVDUFVVc2FnZU1lYXN1cmVtZW50RW5h
YmxlZCgpOworCisgICAgc3RhdGljIGJvb2wgaXNQb3N0TG9hZE1lbW9yeVVzYWdlTWVhc3VyZW1l
bnRFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNQb3N0QmFja2dyb3VuZGluZ01lbW9yeVVz
YWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7CisKKyAgICBzdGF0aWMgYm9vbCBnbG9iYWxDb25zdFJl
ZGVjbGFyYXRpb25TaG91bGRUaHJvdygpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRC
YWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShib29sKTsKKyAgICBib29sIGJhY2tncm91
bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZTsgfQorCisjaWYgVVNFKEFWRk9VTkRBVElPTikKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvb2wgZmxhZyk7
CisgICAgc3RhdGljIGJvb2wgaXNBVkZvdW5kYXRpb25FbmFibGVkKCkgeyByZXR1cm4gZ0FWRm91
bmRhdGlvbkVuYWJsZWQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBVkZv
dW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkKGJvb2wgZmxhZyk7CisgICAgc3RhdGljIGJvb2wg
aXNBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkKCkgeyByZXR1cm4gZ0FWRm91bmRhdGlv
bk5TVVJMU2Vzc2lvbkVuYWJsZWQ7IH0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0UVRLaXRFbmFibGVkKGJvb2wgZmxhZyk7
CisgICAgc3RhdGljIGJvb2wgaXNRVEtpdEVuYWJsZWQoKSB7IHJldHVybiBnUVRLaXRFbmFibGVk
OyB9CisjZWxzZQorICAgIHN0YXRpYyBib29sIGlzUVRLaXRFbmFibGVkKCkgeyByZXR1cm4gZmFs
c2U7IH0KKyNlbmRpZgorCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRHU3RyZWFtZXJFbmFibGVkKGJvb2wgZmxhZyk7CisgICAgc3RhdGljIGJv
b2wgaXNHU3RyZWFtZXJFbmFibGVkKCkgeyByZXR1cm4gZ0dTdHJlYW1lckVuYWJsZWQ7IH0KKyNl
bmRpZgorCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TW9ja1Njcm9sbGJhcnNF
bmFibGVkKGJvb2wgZmxhZyk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgbW9ja1Nj
cm9sbGJhcnNFbmFibGVkKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRV
c2VzT3ZlcmxheVNjcm9sbGJhcnMoYm9vbCBmbGFnKTsKKyAgICBzdGF0aWMgYm9vbCB1c2VzT3Zl
cmxheVNjcm9sbGJhcnMoKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgdXNlc01vY2tTY3Jv
bGxBbmltYXRvcigpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdG9yYWdlQmxvY2tp
bmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSk7CisgICAgU2Vj
dXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBzdG9yYWdlQmxvY2tpbmdQb2xpY3ko
KSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsgfQorCisgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wp
OworICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIHsgcmV0dXJu
IG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQorCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVT
ZXR0ZXJzKGJvb2wpOworICAgIHN0YXRpYyBib29sIHNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NT
QXR0cmlidXRlU2V0dGVycygpOworCisgICAgYm9vbCBoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25T
dXNwZW5zaW9uRW5hYmxlZDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFn
ZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGJvb2wpOworCisgICAgc3RhdGljIGJvb2wg
bG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoKSB7IHJldHVybiBnTG93UG93ZXJW
aWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZChib29sKTsKKworICAg
IHN0YXRpYyBib29sIHJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCkgeyByZXR1cm4gZ1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wpOworCisj
aWYgUExBVEZPUk0oSU9TKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEF1ZGlv
U2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUodW5zaWduZWQpOworICAgIHN0YXRpYyB1bnNpZ25lZCBh
dWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgdm9pZCBzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJvb2wpOworICAgIHN0
YXRpYyBib29sIG5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE5ldHdvcmtJbnRlcmZhY2VOYW1lKGNvbnN0IFN0cmlu
ZyYpOworICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIG5ldHdvcmtJbnRlcmZhY2VOYW1lKCk7CisK
KyNpZiBIQVZFKEFWS0lUKQorICAgIHN0YXRpYyB2b2lkIHNldEFWS2l0RW5hYmxlZChib29sIGZs
YWcpIHsgZ0FWS2l0RW5hYmxlZCA9IGZsYWc7IH0KKyNlbmRpZgorICAgIHN0YXRpYyBib29sIGF2
S2l0RW5hYmxlZCgpIHsgcmV0dXJuIGdBVktpdEVuYWJsZWQ7IH0KKworICAgIHN0YXRpYyB2b2lk
IHNldFNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24oYm9vbCBmbGFnKSB7IGdT
aG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uID0gZmxhZzsgfQorICAgIHN0YXRp
YyBib29sIHNob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24oKSB7IHJldHVybiBn
U2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbjsgfQorI2VuZGlmCisKKyNpZiBV
U0UoQVVESU9fU0VTU0lPTikKKyAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRNYW5hZ2VBdWRpb1Nl
c3Npb25DYXRlZ29yeShib29sIGZsYWcpIHsgZ01hbmFnZUF1ZGlvU2Vzc2lvbiA9IGZsYWc7IH0K
KyAgICBzdGF0aWMgYm9vbCBzaG91bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29yeSgpIHsgcmV0
dXJuIGdNYW5hZ2VBdWRpb1Nlc3Npb247IH0KKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQgc2V0
Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2wgZW5hYmxlZCkgeyBnQ3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkID0gZW5hYmxlZDsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBi
b29sIGN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpOworICAgIAorI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCisgICAgc3RhdGljIGJvb2wgbW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWQoYm9vbCk7CisKKyAgICBib29sIG1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bigpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1lZGlhQ2FwdHVy
ZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sKTsKKyNlbmRpZgorCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgc2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCk7CisgICAg
c3RhdGljIGJvb2wgYWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoKTsKKworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmlu
Z0hhcmR3YXJlU3VwcG9ydCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFDb250
ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgVmVjdG9yPENvbnRlbnRUeXBl
PiYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJp
bmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgU3RyaW5nJik7CisgICAgY29uc3QgVmVjdG9yPENvbnRl
bnRUeXBlPiYgbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKSBjb25z
dCB7IHJldHVybiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0OyB9
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU2V0dGluZ3MoUGFnZSopOworCisgICAgdm9pZCBp
bml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpOworCisgICAgU3RyaW5nIG1fbWVkaWFUeXBl
T3ZlcnJpZGU7CisgICAgVVJMIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKKyAgICBjb25zdCBz
dGQ6OnVuaXF1ZV9wdHI8Rm9udEdlbmVyaWNGYW1pbGllcz4gbV9mb250R2VuZXJpY0ZhbWlsaWVz
OworICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgbV9zdG9yYWdlQmxv
Y2tpbmdQb2xpY3k7CisgICAgU2Vjb25kcyBtX2xheW91dEludGVydmFsOworICAgIFNlY29uZHMg
bV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbDsKKworICAgIGJvb2wgbV9sb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHkgOiAxOworICAgIGJvb2wgbV9hcmVJbWFnZXNFbmFibGVkIDogMTsKKyAgICBib29s
IG1fYXJlUGx1Z2luc0VuYWJsZWQgOiAxOworICAgIGJvb2wgbV9pc1NjcmlwdEVuYWJsZWQgOiAx
OworICAgIGJvb2wgbV91c2VzUGFnZUNhY2hlIDogMTsKKyAgICBib29sIG1fYmFja2dyb3VuZFNo
b3VsZEV4dGVuZEJleW9uZFBhZ2UgOiAxOworICAgIGJvb2wgbV9kbnNQcmVmZXRjaGluZ0VuYWJs
ZWQgOiAxOworCisgICAgYm9vbCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQg
OiAxOworCisgICAgVGltZXIgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyOworICAgIHZv
aWQgaW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCk7CisKKyAgICBib29sIG1faGlkZGVu
UGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgOiAxOworICAgIGJvb2wgbV9oaWRkZW5QYWdl
Q1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQgOiAxOworCisjaWYgRU5BQkxFKFJFU09VUkNF
X1VTQUdFKQorICAgIGJvb2wgbV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgeyBmYWxzZSB9
OworI2VuZGlmCisKKyAgICBib29sIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9J
bmNyZWFzZXMgeyBmYWxzZSB9OworCisjaWYgVVNFKEFWRk9VTkRBVElPTikKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgYm9vbCBnQVZGb3VuZGF0aW9uRW5hYmxlZDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBnQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZDsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wg
Z1FUS2l0RW5hYmxlZDsKKyNlbmRpZgorCisjaWYgVVNFKEdTVFJFQU1FUikKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgYm9vbCBnR1N0cmVhbWVyRW5hYmxlZDsKKyNlbmRpZgorCisgICAgc3Rh
dGljIGJvb2wgZ01vY2tTY3JvbGxiYXJzRW5hYmxlZDsKKyAgICBzdGF0aWMgYm9vbCBnVXNlc092
ZXJsYXlTY3JvbGxiYXJzOworICAgIHN0YXRpYyBib29sIGdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFi
bGVkOworCisjaWYgUExBVEZPUk0oV0lOKQorICAgIHN0YXRpYyBib29sIGdTaG91bGRVc2VIaWdo
UmVzb2x1dGlvblRpbWVyczsKKyNlbmRpZgorICAgIHN0YXRpYyBib29sIGdTaG91bGRSZXNwZWN0
UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnM7CisjaWYgUExBVEZPUk0oSU9TKQorICAgIHN0
YXRpYyBib29sIGdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBib29sIGdBVktpdEVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIGJvb2wgZ1Nob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb247CisjZW5kaWYK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnTWFuYWdlQXVkaW9TZXNzaW9uOworICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQ7
CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHN0YXRpYyBib29sIGdNb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkOworICAgIHN0YXRpYyBib29sIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1Nl
Y3VyZUNvbm5lY3Rpb247CisjZW5kaWYKKworICAgIHN0YXRpYyBib29sIGdMb3dQb3dlclZpZGVv
QXVkaW9CdWZmZXJTaXplRW5hYmxlZDsKKyAgICBzdGF0aWMgYm9vbCBnUmVzb3VyY2VMb2FkU3Rh
dGlzdGljc0VuYWJsZWRFbmFibGVkOworICAgIHN0YXRpYyBib29sIGdBbGxvd3NBbnlTU0xDZXJ0
aWZpY2F0ZTsKKworICAgIFZlY3RvcjxDb250ZW50VHlwZT4gbV9tZWRpYUNvbnRlbnRUeXBlc1Jl
cXVpcmluZ0hhcmR3YXJlU3VwcG9ydDsKK307CisKK2lubGluZSBib29sIFNldHRpbmdzOjppc1Bv
c3RMb2FkQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQoreworI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIHJldHVybiB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30K
KworaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tncm91bmRpbmdDUFVVc2FnZU1lYXN1
cmVtZW50RW5hYmxlZCgpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiB0cnVlOwor
I2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIGJvb2wgU2V0dGlu
Z3M6OmlzUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK3sKKyNp
ZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxz
ZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZE1lbW9yeVVz
YWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBi
b29sIFNldHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW5nTWVtb3J5VXNhZ2VNZWFzdXJlbWVudEVu
YWJsZWQoKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisg
ICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgJ
KHJldmlzaW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDIyICsyOSwyMiBAQAogI2luY2x1ZGUgIkNvbnRlbnRUeXBl
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5nc0RlZmF1
bHRWYWx1ZXMuaCIKLSNpbmNsdWRlICJTZXR0aW5nc0dlbmVyYXRlZC5oIgogI2luY2x1ZGUgIlRp
bWVyLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21p
Y1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250R2VuZXJp
Y0ZhbWlsaWVzOworY2xhc3MgUGFnZTsKIAotY2xhc3MgU2V0dGluZ3MgOiBwdWJsaWMgU2V0dGlu
Z3NHZW5lcmF0ZWQgeworY2xhc3MgU2V0dGluZ3NCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8U2V0
dGluZ3NCYXNlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXR0aW5ncz4gY3JlYXRlKFBh
Z2UqKTsKLSAgICB+U2V0dGluZ3MoKTsKKyAgICB+U2V0dGluZ3NCYXNlKCk7CiAKICAgICB2b2lk
IHBhZ2VEZXN0cm95ZWQoKSB7IG1fcGFnZSA9IG51bGxwdHI7IH0KIApAQCAtNjksNTQgKzY5LDI5
IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBpY3RvZ3JhcGhGb250RmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwog
ICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgcGljdG9ncmFwaEZvbnRGYW1p
bHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CiAKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IGRlZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXplKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChTZWNvbmRz
KTsKKyAgICBTZWNvbmRzIG1pbmltdW1ET01UaW1lckludGVydmFsKCkgY29uc3QgeyByZXR1cm4g
bV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbDsgfQogCi0gICAgLy8gT25seSBzZXQgYnkgTGF5b3V0
IFRlc3RzLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWVkaWFUeXBlT3ZlcnJpZGUoY29u
c3QgU3RyaW5nJik7Ci0gICAgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVPdmVycmlkZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWVkaWFUeXBlT3ZlcnJpZGU7IH0KLQotICAgIC8vIFVubGlrZSBhcmVJbWFn
ZXNFbmFibGVkLCB0aGlzIG9ubHkgc3VwcHJlc3NlcyB0aGUgbmV0d29yayBsb2FkIG9mCi0gICAg
Ly8gdGhlIGltYWdlIFVSTC4gIEEgY2FjaGVkIGltYWdlIHdpbGwgc3RpbGwgYmUgcmVuZGVyZWQg
aWYgcmVxdWVzdGVkLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5KGJvb2wpOwotICAgIGJvb2wgbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCkgY29u
c3QgeyByZXR1cm4gbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk7IH0KLQotICAgIC8vIENsaWVu
dHMgdGhhdCBleGVjdXRlIHNjcmlwdCBzaG91bGQgY2FsbCBTY3JpcHRDb250cm9sbGVyOjpjYW5F
eGVjdXRlU2NyaXB0cygpCi0gICAgLy8gaW5zdGVhZCBvZiB0aGlzIGZ1bmN0aW9uLiBTY3JpcHRD
b250cm9sbGVyOjpjYW5FeGVjdXRlU2NyaXB0cygpIGNoZWNrcyB0aGUKLSAgICAvLyBIVE1MIHNh
bmRib3gsIHBsdWctaW4gc2FuZGJveGluZywgYW5kIG90aGVyIGltcG9ydGFudCBkZXRhaWxzLgot
ICAgIGJvb2wgaXNTY3JpcHRFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NjcmlwdEVuYWJs
ZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNjcmlwdEVuYWJsZWQoYm9vbCk7Ci0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlc0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9v
bCBhcmVJbWFnZXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVJbWFnZXNFbmFibGVkOyB9
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBsdWdpbnNFbmFibGVkKGJvb2wpOwotICAg
IGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZVBsdWdpbnNFbmFi
bGVkOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMYXlvdXRJbnRlcnZhbChTZWNvbmRz
KTsKKyAgICBTZWNvbmRzIGxheW91dEludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRJ
bnRlcnZhbDsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRETlNQcmVmZXRjaGluZ0Vu
YWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZDsgfQorICAgIC8vIEZJWE1FOiBNb3ZlIHRoaXMg
dG8gU2V0dGluZ3NEZWZhdWx0VmFsdWVzLmgKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29u
c3QgU3RyaW5nJiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBv
cnQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlv
bihjb25zdCBVUkwmKTsKLSAgICBjb25zdCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247IH0KKyAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNv
bnN0IFZlY3RvcjxDb250ZW50VHlwZT4mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1l
ZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFN0cmluZyYpOwor
ICAgIGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5n
SGFyZHdhcmVTdXBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVp
cmluZ0hhcmR3YXJlU3VwcG9ydDsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaW5p
bXVtRE9NVGltZXJJbnRlcnZhbChTZWNvbmRzKTsgLy8gSW5pdGlhbGl6ZWQgdG8gRE9NVGltZXI6
OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKS4KLSAgICBTZWNvbmRzIG1pbmltdW1ET01UaW1lcklu
dGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbDsgfQogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMYXlvdXRJbnRlcnZhbChTZWNvbmRzKTsKLSAgICBT
ZWNvbmRzIGxheW91dEludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9sYXlvdXRJbnRlcnZhbDsg
fQorICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIFNldHRpbmdzRGVmYXVsdFZhbHVlcy5oCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxl
ZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCBkZWZhdWx0TWluaW11bVpvb21G
b250U2l6ZSgpOwogCi0gICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQ7
IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1
dG9JbmNyZWFzZXMoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdBdXRvSW5jcmVhc2VzOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIaWRkZW5QYWdl
RE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyhib29sKTsKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0VXNlc1BhZ2VDYWNoZShib29sKTsKLSAgICBib29sIHVzZXNQYWdlQ2FjaGUo
KSBjb25zdCB7IHJldHVybiBtX3VzZXNQYWdlQ2FjaGU7IH0KLQotI2lmIEVOQUJMRShSRVNPVVJD
RV9VU0FHRSkKLSAgICBib29sIHJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUoYm9vbCk7Ci0jZW5kaWYKKwor
CisgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgYXJlIGFsbCBnbG9iYWxzIGFuZCBzaG91bGQg
YmUgbW92ZWQgZWxzZXdoZXJlIG9yIG1hZGUgcGVyLVNldHRpbmdzLgorICAgIC8vICAgICAgICBI
YXZpbmcgdGhlIFNldHRpbmdzIGNsYXNzIGNvbnRhaW4gYm90aCBwZXItU2V0dGluZ3MgYW5kIGds
b2JhbCBzZXR0aW5ncyBpcyBtb3JlCisgICAgLy8gICAgICAgIGNvbmZ1c2luZyB0aGFuIGl0cyB3
b3J0aC4KIAogI2lmIFBMQVRGT1JNKFdJTikKICAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRVc2VI
aWdoUmVzb2x1dGlvblRpbWVycyhib29sKTsKQEAgLTEzMiw5ICsxMDcsNiBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgYm9vbCBnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpOwog
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25k
UGFnZShib29sKTsKLSAgICBib29sIGJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZTsgfQotCiAj
aWYgVVNFKEFWRk9VTkRBVElPTikKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRB
VkZvdW5kYXRpb25FbmFibGVkKGJvb2wgZmxhZyk7CiAgICAgc3RhdGljIGJvb2wgaXNBVkZvdW5k
YXRpb25FbmFibGVkKCkgeyByZXR1cm4gZ0FWRm91bmRhdGlvbkVuYWJsZWQ7IH0KQEAgLTE2Mywx
OCArMTM1LDkgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFVz
ZXNNb2NrU2Nyb2xsQW5pbWF0b3IoYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgdXNlc01vY2tTY3Jv
bGxBbmltYXRvcigpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTdG9yYWdlQmxvY2tp
bmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSk7Ci0gICAgU2Vj
dXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBzdG9yYWdlQmxvY2tpbmdQb2xpY3ko
KSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsgfQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGJvb2wp
OwotICAgIGJvb2wgc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpIHsgcmV0dXJu
IG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZDsgfQotCiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgc2V0U2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVT
ZXR0ZXJzKGJvb2wpOwogICAgIHN0YXRpYyBib29sIHNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NT
QXR0cmlidXRlU2V0dGVycygpOwogCi0gICAgYm9vbCBoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25T
dXNwZW5zaW9uRW5hYmxlZDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFn
ZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGJvb2wpOwotCiAgICAgc3RhdGljIGJvb2wg
bG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoKSB7IHJldHVybiBnTG93UG93ZXJW
aWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZChib29sKTsKIApAQCAt
MjE5LDQ1ICsxODIsMzcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wpOwogICAgIHN0YXRpYyBib29sIGFsbG93
c0FueVNTTENlcnRpZmljYXRlKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3Qg
U3RyaW5nJiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQo
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5n
SGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0
KGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29u
dGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9tZWRp
YUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydDsgfQorcHJvdGVjdGVkOgorICAg
IGV4cGxpY2l0IFNldHRpbmdzQmFzZShQYWdlKik7CiAKLXByaXZhdGU6Ci0gICAgZXhwbGljaXQg
U2V0dGluZ3MoUGFnZSopOworICAgIC8vIEhlbHBlcnMgdXNlZCBieSBnZW5lcmF0ZWQgU2V0dGlu
Z3MuY3BwLgorICAgIHZvaWQgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CisgICAg
dm9pZCBtZWRpYVR5cGVPdmVycmlkZUNoYW5nZWQoKTsKKyAgICB2b2lkIGltYWdlc0VuYWJsZWRD
aGFuZ2VkKCk7CisgICAgdm9pZCBzY3JpcHRFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgcGx1
Z2luc0VuYWJsZWRDaGFuZ2VkKCk7CisgICAgdm9pZCB1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hh
bmdlZCgpOworICAgIHZvaWQgdXNlc1BhZ2VDYWNoZUNoYW5nZWQoKTsKKyAgICB2b2lkIGRuc1By
ZWZldGNoaW5nRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIHJlc291cmNlVXNhZ2VPdmVybGF5
VmlzaWJsZUNoYW5nZWQoKTsKKyAgICB2b2lkIHN0b3JhZ2VCbG9ja2luZ1BvbGljeUNoYW5nZWQo
KTsKKyAgICB2b2lkIGJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlQ2hhbmdlZCgpOwor
ICAgIHZvaWQgc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZENoYW5nZWQoKTsKKyAg
ICB2b2lkIGhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB2
b2lkIGhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZENoYW5nZWQoKTsKKyAg
ICAKIAogICAgIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKTsKIAotICAgIFN0
cmluZyBtX21lZGlhVHlwZU92ZXJyaWRlOwotICAgIFVSTCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRp
b247CisgICAgUGFnZSogbV9wYWdlOworCiAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZvbnRH
ZW5lcmljRmFtaWxpZXM+IG1fZm9udEdlbmVyaWNGYW1pbGllczsKLSAgICBTZWN1cml0eU9yaWdp
bjo6U3RvcmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5OwogICAgIFNl
Y29uZHMgbV9sYXlvdXRJbnRlcnZhbDsKICAgICBTZWNvbmRzIG1fbWluaW11bURPTVRpbWVySW50
ZXJ2YWw7CiAKLSAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5IDogMTsKLSAgICBi
b29sIG1fYXJlSW1hZ2VzRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX2FyZVBsdWdpbnNFbmFibGVk
IDogMTsKLSAgICBib29sIG1faXNTY3JpcHRFbmFibGVkIDogMTsKLSAgICBib29sIG1fdXNlc1Bh
Z2VDYWNoZSA6IDE7Ci0gICAgYm9vbCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
IDogMTsKLSAgICBib29sIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkIDogMTsKLQotICAgIGJvb2wg
bV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkIDogMTsKLQogICAgIFRpbWVyIG1f
c2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lcjsKICAgICB2b2lkIGltYWdlTG9hZGluZ1NldHRp
bmdzVGltZXJGaXJlZCgpOwogCi0gICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkIDogMTsKLSAgICBib29sIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNp
b25FbmFibGVkIDogMTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLSAgICBib29sIG1f
cmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlIHsgZmFsc2UgfTsKLSNlbmRpZgotCi0gICAgYm9v
bCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzIHsgZmFsc2UgfTsK
LQogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wg
Z0FWRm91bmRhdGlvbkVuYWJsZWQ7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ0FW
Rm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQ7CkBAIC0yOTksNyArMjU0LDcgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8Q29udGVudFR5cGU+IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdI
YXJkd2FyZVN1cHBvcnQ7CiB9OwogCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZENQ
VVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK2lubGluZSBib29sIFNldHRpbmdzQmFzZTo6aXNQ
b3N0TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKIHsKICNpZiBQTEFURk9STShDT0NP
QSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMwOCw3ICsyNjMsNyBAQCBpbmxpbmUgYm9vbCBTZXR0
aW5nczo6aXNQb3N0TG9hZENQVVVzYWdlCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU2V0dGlu
Z3M6OmlzUG9zdEJhY2tncm91bmRpbmdDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCitpbmxp
bmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9zdEJhY2tncm91bmRpbmdDUFVVc2FnZU1lYXN1cmVt
ZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVybiB0cnVlOwpAQCAt
MzE3LDcgKzI3Miw3IEBAIGlubGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW4K
ICNlbmRpZgogfQogCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQZXJBY3Rpdml0eVN0YXRlQ1BV
VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQoraW5saW5lIGJvb2wgU2V0dGluZ3NCYXNlOjppc1Bl
ckFjdGl2aXR5U3RhdGVDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZP
Uk0oTUFDKQogICAgIHJldHVybiB0cnVlOwpAQCAtMzI2LDcgKzI4MSw3IEBAIGlubGluZSBib29s
IFNldHRpbmdzOjppc1BlckFjdGl2aXR5U3RhdGUKICNlbmRpZgogfQogCi1pbmxpbmUgYm9vbCBT
ZXR0aW5nczo6aXNQb3N0TG9hZE1lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK2lubGlu
ZSBib29sIFNldHRpbmdzQmFzZTo6aXNQb3N0TG9hZE1lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFi
bGVkKCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNSw3
ICsyOTAsNyBAQCBpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZE1lbW9yeVVzCiAjZW5k
aWYKIH0KIAotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlV
c2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCitpbmxpbmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9z
dEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCiB7CiAjaWYgUExB
VEZPUk0oTUFDKQogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9T
dG9yYWdlQmxvY2tpbmdQb2xpY3kuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L1N0b3JhZ2VCbG9ja2luZ1BvbGljeS5oCShyZXZpc2lvbiAyMjI3MDMpCShmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaDoyMjI3MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1N0b3JhZ2VCbG9ja2luZ1BvbGljeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBVUkw7CisKK2NsYXNzIFNlY3VyaXR5T3JpZ2luIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFNlY3VyaXR5T3JpZ2luPiB7CitwdWJsaWM6CisgICAgZW51bSBQb2xpY3kgeworICAg
ICAgICBBbHdheXNEZW55ID0gMCwKKyAgICAgICAgQWx3YXlzQWxsb3csCisgICAgICAgIEFzawor
ICAgIH07CisKKyAgICBlbnVtIFN0b3JhZ2VCbG9ja2luZ1BvbGljeSB7CisgICAgICAgIEFsbG93
QWxsU3RvcmFnZSA9IDAsCisgICAgICAgIEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UsCisgICAgICAg
IEJsb2NrQWxsU3RvcmFnZQorICAgIH07CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PFNlY3VyaXR5T3JpZ2luPiBjcmVhdGUoY29uc3QgVVJMJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxTZWN1cml0eU9yaWdpbj4gY3JlYXRlVW5pcXVlKCk7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPFNlY3VyaXR5T3JpZ2luPiBjcmVhdGVGcm9tU3RyaW5nKGNvbnN0
IFN0cmluZyYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2VjdXJpdHlPcmlnaW4+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIGhvc3QsIHN0ZDo6
b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQpOworCisgICAgLy8gU29tZSBVUkwgc2NoZW1lcyB1c2Ug
bmVzdGVkIFVSTHMgZm9yIHRoZWlyIHNlY3VyaXR5IGNvbnRleHQuIEZvciBleGFtcGxlLAorICAg
IC8vIGZpbGVzeXN0ZW0gVVJMcyBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKKyAgICAvLworICAg
IC8vICAgZmlsZXN5c3RlbTpodHRwOi8vZXhhbXBsZS5jb20vdGVtcG9yYXJ5L3BhdGgvdG8vZmls
ZS5wbmcKKyAgICAvLworICAgIC8vIFdlJ3JlIHN1cHBvc2VkIHRvIHVzZSAiaHR0cDovL2V4YW1w
bGUuY29tIiBhcyB0aGUgb3JpZ2luLgorICAgIC8vCisgICAgLy8gR2VuZXJhbGx5LCB3ZSBhZGQg
VVJMIHNjaGVtZXMgdG8gdGhpcyBsaXN0IHdoZW4gV2ViS2l0IHN1cHBvcnQgdGhlbS4gRm9yCisg
ICAgLy8gZXhhbXBsZSwgd2UgZG9uJ3QgaW5jbHVkZSB0aGUgImphciIgc2NoZW1lLCBldmVuIHRo
b3VnaCBGaXJlZm94CisgICAgLy8gdW5kZXJzdGFuZHMgdGhhdCAiamFyIiB1c2VzIGFuIGlubmVy
IFVSTCBmb3IgaXQncyBzZWN1cml0eSBvcmlnaW4uCisgICAgc3RhdGljIGJvb2wgc2hvdWxkVXNl
SW5uZXJVUkwoY29uc3QgVVJMJik7CisgICAgc3RhdGljIFVSTCBleHRyYWN0SW5uZXJVUkwoY29u
c3QgVVJMJik7CisKKyAgICAvLyBDcmVhdGUgYSBkZWVwIGNvcHkgb2YgdGhpcyBTZWN1cml0eU9y
aWdpbi4gVGhpcyBtZXRob2QgaXMgdXNlZnVsCisgICAgLy8gd2hlbiBtYXJzaGFsbGluZyBhIFNl
Y3VyaXR5T3JpZ2luIHRvIGFub3RoZXIgdGhyZWFkLgorICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxT
ZWN1cml0eU9yaWdpbj4gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7CisKKyAgICAvLyBTZXQgdGhlIGRv
bWFpbiBwcm9wZXJ0eSBvZiB0aGlzIHNlY3VyaXR5IG9yaWdpbiB0byBuZXdEb21haW4uIFRoaXMK
KyAgICAvLyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIG5ld0RvbWFpbiBpcyBhIHN1
ZmZpeCBvZiB0aGUgY3VycmVudAorICAgIC8vIGRvbWFpbi4gVGhlIGNhbGxlciBpcyByZXNwb25z
aWJsZSBmb3IgdmFsaWRhdGluZyBuZXdEb21haW4uCisgICAgdm9pZCBzZXREb21haW5Gcm9tRE9N
KGNvbnN0IFN0cmluZyYgbmV3RG9tYWluKTsKKyAgICBib29sIGRvbWFpbldhc1NldEluRE9NKCkg
Y29uc3QgeyByZXR1cm4gbV9kb21haW5XYXNTZXRJbkRPTTsgfQorCisgICAgY29uc3QgU3RyaW5n
JiBwcm90b2NvbCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG9jb2w7IH0KKyAgICBjb25zdCBTdHJp
bmcmIGhvc3QoKSBjb25zdCB7IHJldHVybiBtX2hvc3Q7IH0KKyAgICBjb25zdCBTdHJpbmcmIGRv
bWFpbigpIGNvbnN0IHsgcmV0dXJuIG1fZG9tYWluOyB9CisgICAgc3RkOjpvcHRpb25hbDx1aW50
MTZfdD4gcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fcG9ydDsgfQorCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIGEgZ2l2ZW4gVVJMIGlzIHNlY3VyZSwgYmFzZWQgZWl0aGVyIGRpcmVjdGx5IG9uIGl0
cworICAgIC8vIG93biBwcm90b2NvbCwgb3IsIHdoZW4gcmVsZXZhbnQsIG9uIHRoZSBwcm90b2Nv
bCBvZiBpdHMgImlubmVyIFVSTCIKKyAgICAvLyBQcm90b2NvbHMgbGlrZSBibG9iOiBhbmQgZmls
ZXN5c3RlbTogZmFsbCBpbnRvIHRoaXMgbGF0dGVyIGNhdGVnb3J5LgorICAgIHN0YXRpYyBib29s
IGlzU2VjdXJlKGNvbnN0IFVSTCYpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgU2Vj
dXJpdHlPcmlnaW4gY2FuIHNjcmlwdCBvYmplY3RzIGluIHRoZSBnaXZlbgorICAgIC8vIFNlY3Vy
aXR5T3JpZ2luLiBGb3IgZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhbGxvd2lu
ZworICAgIC8vIHNjcmlwdCBmcm9tIG9uZSBzZWN1cml0eSBvcmlnaW4gdG8gcmVhZCBvciB3cml0
ZSBvYmplY3RzIGZyb20KKyAgICAvLyBhbm90aGVyIFNlY3VyaXR5T3JpZ2luLgorICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgY2FuQWNjZXNzKGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Q7CisK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBTZWN1cml0eU9yaWdpbiBjYW4gcmVhZCBjb250
ZW50IHJldHJpZXZlZCBmcm9tCisgICAgLy8gdGhlIGdpdmVuIFVSTC4gRm9yIGV4YW1wbGUsIGNh
bGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgaXNzdWluZworICAgIC8vIFhNTEh0dHBSZXF1ZXN0cy4K
KyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNhblJlcXVlc3QoY29uc3QgVVJMJikgY29uc3Q7CisK
KyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBTZWN1cml0eU9yaWdpbiBjYW4gcmVjZWl2ZSBk
cmFnIGNvbnRlbnQgZnJvbSB0aGUKKyAgICAvLyBpbml0aWF0b3IuIEZvciBleGFtcGxlLCBjYWxs
IHRoaXMgZnVuY3Rpb24gYmVmb3JlIGFsbG93aW5nIGNvbnRlbnQgdG8gYmUKKyAgICAvLyBkcm9w
cGVkIG9udG8gYSB0YXJnZXQuCisgICAgYm9vbCBjYW5SZWNlaXZlRHJhZ0RhdGEoY29uc3QgU2Vj
dXJpdHlPcmlnaW4mIGRyYWdJbml0aWF0b3IpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVl
IGlmIHxkb2N1bWVudHwgY2FuIGRpc3BsYXkgY29udGVudCBmcm9tIHRoZSBnaXZlbiBVUkwgKGUu
Zy4sCisgICAgLy8gaW4gYW4gaWZyYW1lIG9yIGFzIGFuIGltYWdlKS4gRm9yIGV4YW1wbGUsIHdl
YiBzaXRlcyBnZW5lcmFsbHkgY2Fubm90CisgICAgLy8gZGlzcGxheSBjb250ZW50IGZyb20gdGhl
IHVzZXIncyBmaWxlcyBzeXN0ZW0uCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjYW5EaXNwbGF5
KGNvbnN0IFVSTCYpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgU2VjdXJp
dHlPcmlnaW4gY2FuIGxvYWQgbG9jYWwgcmVzb3VyY2VzLCBzdWNoCisgICAgLy8gYXMgaW1hZ2Vz
LCBpZnJhbWVzLCBhbmQgc3R5bGUgc2hlZXRzLCBhbmQgY2FuIGxpbmsgdG8gbG9jYWwgVVJMcy4K
KyAgICAvLyBGb3IgZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjcmVhdGluZyBh
biBpZnJhbWUgdG8gYQorICAgIC8vIGZpbGU6Ly8gVVJMLgorICAgIC8vCisgICAgLy8gTm90ZTog
QSBTZWN1cml0eU9yaWdpbiBtaWdodCBiZSBhbGxvd2VkIHRvIGxvYWQgbG9jYWwgcmVzb3VyY2Vz
CisgICAgLy8gICAgICAgd2l0aG91dCBiZWluZyBhYmxlIHRvIGlzc3VlIGFuIFhNTEh0dHBSZXF1
ZXN0IGZvciBhIGxvY2FsIFVSTC4KKyAgICAvLyAgICAgICBUbyBkZXRlcm1pbmUgd2hldGhlciB0
aGUgU2VjdXJpdHlPcmlnaW4gY2FuIGlzc3VlIGFuCisgICAgLy8gICAgICAgWE1MSHR0cFJlcXVl
c3QgZm9yIGEgVVJMLCBjYWxsIGNhblJlcXVlc3QodXJsKS4KKyAgICBib29sIGNhbkxvYWRMb2Nh
bFJlc291cmNlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FuTG9hZExvY2FsUmVzb3VyY2VzOyB9CisK
KyAgICAvLyBFeHBsaWNpdGx5IGdyYW50IHRoZSBhYmlsaXR5IHRvIGxvYWQgbG9jYWwgcmVzb3Vy
Y2VzIHRvIHRoaXMKKyAgICAvLyBTZWN1cml0eU9yaWdpbi4KKyAgICAvLworICAgIC8vIE5vdGU6
IFRoaXMgbWV0aG9kIGV4aXN0cyBvbmx5IHRvIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxp
dHkKKyAgICAvLyAgICAgICB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFdlYktpdC4KKyAgICB2b2lk
IGdyYW50TG9hZExvY2FsUmVzb3VyY2VzKCk7CisKKyAgICAvLyBFeHBsaWNpdGx5IGdyYW50IHRo
ZSBhYmlsaXR5IHRvIGFjY2VzcyB2ZXJ5IG90aGVyIFNlY3VyaXR5T3JpZ2luLgorICAgIC8vCisg
ICAgLy8gV0FSTklORzogVGhpcyBpcyBhbiBleHRyZW1lbHkgcG93ZXJmdWwgYWJpbGl0eS4gVXNl
IHdpdGggY2F1dGlvbiEKKyAgICB2b2lkIGdyYW50VW5pdmVyc2FsQWNjZXNzKCk7CisgICAgYm9v
bCBoYXNVbml2ZXJzYWxBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VuaXZlcnNhbEFjY2Vzczsg
fQorCisgICAgdm9pZCBzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU3RvcmFnZUJsb2NraW5nUG9s
aWN5IHBvbGljeSkgeyBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9IHBvbGljeTsgfQorCisgICAg
dm9pZCBncmFudFN0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyaygpOworICAgIGJvb2wgbmVl
ZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsoKSBjb25zdCB7IHJldHVybiBtX25lZWRz
U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrOyB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBT
dHJpbmcgZG9tYWluRm9yQ2FjaGVQYXJ0aXRpb24oKSBjb25zdDsKKworICAgIGJvb2wgY2FuQWNj
ZXNzRGF0YWJhc2UoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbikgY29uc3QgeyByZXR1
cm4gY2FuQWNjZXNzU3RvcmFnZSgmdG9wT3JpZ2luKTsgfTsKKyAgICBib29sIGNhbkFjY2Vzc1Nl
c3Npb25TdG9yYWdlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0
dXJuIGNhbkFjY2Vzc1N0b3JhZ2UoJnRvcE9yaWdpbiwgQWx3YXlzQWxsb3dGcm9tVGhpcmRQYXJ0
eSk7IH0KKyAgICBib29sIGNhbkFjY2Vzc0xvY2FsU3RvcmFnZShjb25zdCBTZWN1cml0eU9yaWdp
biogdG9wT3JpZ2luKSBjb25zdCB7IHJldHVybiBjYW5BY2Nlc3NTdG9yYWdlKHRvcE9yaWdpbik7
IH07CisgICAgYm9vbCBjYW5BY2Nlc3NQbHVnaW5TdG9yYWdlKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
JiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0dXJuIGNhbkFjY2Vzc1N0b3JhZ2UoJnRvcE9yaWdpbik7
IH0KKyAgICBib29sIGNhbkFjY2Vzc0FwcGxpY2F0aW9uQ2FjaGUoY29uc3QgU2VjdXJpdHlPcmln
aW4mIHRvcE9yaWdpbikgY29uc3QgeyByZXR1cm4gY2FuQWNjZXNzU3RvcmFnZSgmdG9wT3JpZ2lu
KTsgfQorICAgIGJvb2wgY2FuQWNjZXNzQ29va2llcygpIGNvbnN0IHsgcmV0dXJuICFpc1VuaXF1
ZSgpOyB9CisgICAgYm9vbCBjYW5SZXF1ZXN0R2VvbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAh
aXNVbmlxdWUoKTsgfQorICAgIFBvbGljeSBjYW5TaG93Tm90aWZpY2F0aW9ucygpIGNvbnN0Owor
CisgICAgLy8gVGhlIGxvY2FsIFNlY3VyaXR5T3JpZ2luIGlzIHRoZSBtb3N0IHByaXZpbGVnZWQg
U2VjdXJpdHlPcmlnaW4uCisgICAgLy8gVGhlIGxvY2FsIFNlY3VyaXR5T3JpZ2luIGNhbiBzY3Jp
cHQgYW55IGRvY3VtZW50LCBuYXZpZ2F0ZSB0byBsb2NhbAorICAgIC8vIHJlc291cmNlcywgYW5k
IGNhbiBzZXQgYXJiaXRyYXJ5IGhlYWRlcnMgb24gWE1MSHR0cFJlcXVlc3RzLgorICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNMb2NhbCgpIGNvbnN0OworCisgICAgLy8gVGhlIG9yaWdpbiBpcyBh
IGdsb2JhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIHdoZW4gdGhlIERvY3VtZW50IGlz
CisgICAgLy8gY3JlYXRlZC4gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1
cnJlbnQtd29yay8jc2FuZGJveE9yaWdpbgorICAgIC8vCisgICAgLy8gVGhlcmUncyBhIHN1YnRs
ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSB1bmlxdWUgb3JpZ2luIGFuZCBhbiBvcmlnaW4gdGhhdAor
ICAgIC8vIGhhcyB0aGUgU2FuZGJveE9yaWdpbiBmbGFnIHNldC4gVGhlIGxhdHRlciBpbXBsaWVz
IHRoZSBmb3JtZXIsIGFuZCwgaW4KKyAgICAvLyBhZGRpdGlvbiwgdGhlIFNhbmRib3hPcmlnaW4g
ZmxhZyBpcyBpbmhlcml0ZWQgYnkgaWZyYW1lcy4KKyAgICBib29sIGlzVW5pcXVlKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1VuaXF1ZTsgfQorCisgICAgLy8gTWFya3MgYSBmaWxlOi8vIG9yaWdpbiBh
cyBiZWluZyBpbiBhIGRvbWFpbiBkZWZpbmVkIGJ5IGl0cyBwYXRoLgorICAgIC8vIEZJWE1FIDgx
NTc4OiBUaGUgbmFtaW5nIG9mIHRoaXMgaXMgY29uZnVzaW5nLiBGaWxlcyB3aXRoIHJlc3RyaWN0
ZWQgYWNjZXNzIHRvIG90aGVyIGxvY2FsIGZpbGVzCisgICAgLy8gc3RpbGwgY2FuIGhhdmUgb3Ro
ZXIgcHJpdmlsZWdlcyB0aGF0IGNhbiBiZSByZW1lbWJlcmVkLCB0aGVyZWJ5IG5vdCBtYWtpbmcg
dGhlbSB1bmlxdWUuCisgICAgdm9pZCBlbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uKCk7CisKKyAg
ICAvLyBDb252ZXJ0IHRoaXMgU2VjdXJpdHlPcmlnaW4gaW50byBhIHN0cmluZy4gVGhlIHN0cmlu
ZworICAgIC8vIHJlcHJlc2VudGF0aW9uIG9mIGEgU2VjdXJpdHlPcmlnaW4gaXMgc2ltaWxhciB0
byBhIFVSTCwgZXhjZXB0IGl0CisgICAgLy8gbGFja3MgYSBwYXRoIGNvbXBvbmVudC4gVGhlIHN0
cmluZyByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBlbmNvZGUKKyAgICAvLyB0aGUgdmFsdWUgb2Yg
dGhlIFNlY3VyaXR5T3JpZ2luJ3MgZG9tYWluIHByb3BlcnR5LgorICAgIC8vCisgICAgLy8gV2hl
biB1c2luZyB0aGUgc3RyaW5nIHZhbHVlLCBpdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0
IGl0IG1pZ2h0IGJlCisgICAgLy8gIm51bGwiLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGlzIFNlY3Vy
aXR5T3JpZ2luIGlzIHVuaXF1ZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gdGhpcyBTZWN1cml0eU9y
aWdpbiBtaWdodCBoYXZlIGNvbWUgZnJvbSBhIHNhbmRib3hlZCBpZnJhbWUsIHRoZQorICAgIC8v
IFNlY3VyaXR5T3JpZ2luIG1pZ2h0IGJlIGVtcHR5LCBvciB3ZSBtaWdodCBoYXZlIGV4cGxpY2l0
bHkgZGVjaWRlZCB0aGF0CisgICAgLy8gd2Ugc2hvdWxkVHJlYXRVUkxTY2hlbWVBc05vQWNjZXNz
LgorICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OworCisgICAgLy8g
U2ltaWxhciB0byB0b1N0cmluZygpLCBidXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgYW55
IGZhY3RvcnMgdGhhdAorICAgIC8vIGNvdWxkIG1ha2UgdGhlIHN0cmluZyByZXR1cm4gIm51bGwi
LgorICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyB0b1Jhd1N0cmluZygpIGNvbnN0OworCisgICAg
Ly8gVGhpcyBtZXRob2QgY2hlY2tzIGZvciBlcXVhbGl0eSBiZXR3ZWVuIFNlY3VyaXR5T3JpZ2lu
cywgbm90IHdoZXRoZXIKKyAgICAvLyBvbmUgb3JpZ2luIGNhbiBhY2Nlc3MgYW5vdGhlci4gSXQg
aXMgdXNlZCBmb3IgaGFzaCB0YWJsZSBrZXlzLgorICAgIC8vIEZvciBhY2Nlc3MgY2hlY2tzLCB1
c2UgY2FuQWNjZXNzKCkuCisgICAgLy8gRklYTUU6IElmIHRoaXMgbWV0aG9kIGlzIHJlYWxseSBv
bmx5IHVzZWZ1bCBmb3IgaGFzaCB0YWJsZSBrZXlzLCBpdAorICAgIC8vIHNob3VsZCBiZSByZWZh
Y3RvcmVkIGludG8gU2VjdXJpdHlPcmlnaW5IYXNoLgorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
ZXF1YWwoY29uc3QgU2VjdXJpdHlPcmlnaW4qKSBjb25zdDsKKworICAgIC8vIFRoaXMgbWV0aG9k
IGNoZWNrcyBmb3IgZXF1YWxpdHksIGlnbm9yaW5nIHRoZSB2YWx1ZSBvZiBkb2N1bWVudC5kb21h
aW4KKyAgICAvLyAoYW5kIHdoZXRoZXIgaXQgd2FzIHNldCkgYnV0IGNvbnNpZGVyaW5nIHRoZSBo
b3N0LiBJdCBpcyB1c2VkIGZvciBwb3N0TWVzc2FnZS4KKyAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzU2FtZVNjaGVtZUhvc3RQb3J0KGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Q7CisKKyAg
ICAvLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSAic2FtZSBvcmlnaW4iIGFsZ29yaXRobSBm
cm9tIHRoZSBIVE1MIFN0YW5kYXJkOgorICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5v
cmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjc2FtZS1vcmlnaW4KKyAgICBXRUJDT1JFX0VYUE9S
VCBib29sIGlzU2FtZU9yaWdpbkFzKGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Q7CisKKyAg
ICBzdGF0aWMgVVJMIHVybFdpdGhVbmlxdWVTZWN1cml0eU9yaWdpbigpOworCisgICAgYm9vbCBp
c1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkoKSBjb25zdCB7IHJldHVybiBtX2lzUG90ZW50aWFsbHlU
cnVzdHdvcnRoeTsgfQorCisgICAgc3RhdGljIGJvb2wgaXNMb2NhbEhvc3RPckxvb3BiYWNrSVBB
ZGRyZXNzKGNvbnN0IFVSTCYpOworCitwcml2YXRlOgorICAgIFNlY3VyaXR5T3JpZ2luKCk7Cisg
ICAgZXhwbGljaXQgU2VjdXJpdHlPcmlnaW4oY29uc3QgVVJMJik7CisgICAgZXhwbGljaXQgU2Vj
dXJpdHlPcmlnaW4oY29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKKworICAgIC8vIEZJWE1FOiBSZW5h
bWUgdGhpcyBmdW5jdGlvbiB0byBzb21ldGhpbmcgbW9yZSBzZW1hbnRpYy4KKyAgICBib29sIHBh
c3Nlc0ZpbGVDaGVjayhjb25zdCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0OworCisgICAgLy8gVGhp
cyBtZXRob2QgY2hlY2tzIHRoYXQgdGhlIHNjaGVtZSBmb3IgdGhpcyBvcmlnaW4gaXMgYW4gSFRU
UC1mYW1pbHkKKyAgICAvLyBzY2hlbWUsIGUuZy4gSFRUUCBhbmQgSFRUUFMuCisgICAgYm9vbCBp
c0hUVFBGYW1pbHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3RvY29sID09ICJodHRwIiB8fCBtX3By
b3RvY29sID09ICJodHRwcyI7IH0KKyAgICAKKyAgICBlbnVtIFNob3VsZEFsbG93RnJvbVRoaXJk
UGFydHkgeyBBbHdheXNBbGxvd0Zyb21UaGlyZFBhcnR5LCBNYXliZUFsbG93RnJvbVRoaXJkUGFy
dHkgfTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoY29uc3QgU2Vj
dXJpdHlPcmlnaW4qLCBTaG91bGRBbGxvd0Zyb21UaGlyZFBhcnR5ID0gTWF5YmVBbGxvd0Zyb21U
aGlyZFBhcnR5KSBjb25zdDsKKworICAgIFN0cmluZyBtX3Byb3RvY29sOworICAgIFN0cmluZyBt
X2hvc3Q7CisgICAgU3RyaW5nIG1fZG9tYWluOworICAgIFN0cmluZyBtX2ZpbGVQYXRoOworICAg
IHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IG1fcG9ydDsKKyAgICBib29sIG1faXNVbmlxdWUgeyBm
YWxzZSB9OworICAgIGJvb2wgbV91bml2ZXJzYWxBY2Nlc3MgeyBmYWxzZSB9OworICAgIGJvb2wg
bV9kb21haW5XYXNTZXRJbkRPTSB7IGZhbHNlIH07CisgICAgYm9vbCBtX2NhbkxvYWRMb2NhbFJl
c291cmNlcyB7IGZhbHNlIH07CisgICAgU3RvcmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJs
b2NraW5nUG9saWN5IHsgQWxsb3dBbGxTdG9yYWdlIH07CisgICAgYm9vbCBtX2VuZm9yY2VGaWxl
UGF0aFNlcGFyYXRpb24geyBmYWxzZSB9OworICAgIGJvb2wgbV9uZWVkc1N0b3JhZ2VBY2Nlc3NG
cm9tRmlsZVVSTHNRdWlyayB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUG90ZW50aWFsbHlUcnVz
dHdvcnRoeSB7IGZhbHNlIH07Cit9OworCitib29sIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRy
dXN0d29ydGh5KGNvbnN0IFVSTCYpOworCisvLyBSZXR1cm5zIHRydWUgaWYgdGhlIE9yaWdpbiBo
ZWFkZXIgdmFsdWVzIHNlcmlhbGl6ZWQgZnJvbSB0aGVzZSB0d28gb3JpZ2lucyB3b3VsZCBiZSB0
aGUgc2FtZS4KK2Jvb2wgb3JpZ2luc01hdGNoKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiwgY29uc3Qg
U2VjdXJpdHlPcmlnaW4mKTsKK2Jvb2wgb3JpZ2luc01hdGNoKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
KiwgY29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3Rv
cmFnZUJsb2NraW5nUG9saWN5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9T
dG9yYWdlQmxvY2tpbmdQb2xpY3kuaAkocmV2aXNpb24gMjIyNzAzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9TdG9yYWdlQmxvY2tpbmdQb2xpY3kuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjE2
ICsyOCwxMiBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFVSTDsKLQotY2xhc3MgU2VjdXJpdHlPcmlnaW4gOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2VjdXJpdHlPcmlnaW4+IHsKLXB1YmxpYzoKLSAgICBlbnVt
IFBvbGljeSB7Ci0gICAgICAgIEFsd2F5c0RlbnkgPSAwLAotICAgICAgICBBbHdheXNBbGxvdywK
LSAgICAgICAgQXNrCi0gICAgfTsKLQotICAgIGVudW0gU3RvcmFnZUJsb2NraW5nUG9saWN5IHsK
LSAgICAgICAgQWxsb3dBbGxTdG9yYWdlID0gMCwKLSAgICAgICAgQmxvY2tUaGlyZFBhcnR5U3Rv
cmFnZSwKLSAgICAgICAgQmxvY2tBbGxTdG9yYWdlCi0gICAgfTsKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWY8U2VjdXJpdHlPcmlnaW4+IGNyZWF0ZShjb25zdCBVUkwmKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNlY3VyaXR5T3JpZ2luPiBjcmVhdGVVbmlxdWUoKTsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2VjdXJpdHlPcmlnaW4+IGNyZWF0ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxT
ZWN1cml0eU9yaWdpbj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIGNvbnN0IFN0cmlu
ZyYgaG9zdCwgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gcG9ydCk7Ci0KLSAgICAvLyBTb21lIFVS
TCBzY2hlbWVzIHVzZSBuZXN0ZWQgVVJMcyBmb3IgdGhlaXIgc2VjdXJpdHkgY29udGV4dC4gRm9y
IGV4YW1wbGUsCi0gICAgLy8gZmlsZXN5c3RlbSBVUkxzIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5n
OgotICAgIC8vCi0gICAgLy8gICBmaWxlc3lzdGVtOmh0dHA6Ly9leGFtcGxlLmNvbS90ZW1wb3Jh
cnkvcGF0aC90by9maWxlLnBuZwotICAgIC8vCi0gICAgLy8gV2UncmUgc3VwcG9zZWQgdG8gdXNl
ICJodHRwOi8vZXhhbXBsZS5jb20iIGFzIHRoZSBvcmlnaW4uCi0gICAgLy8KLSAgICAvLyBHZW5l
cmFsbHksIHdlIGFkZCBVUkwgc2NoZW1lcyB0byB0aGlzIGxpc3Qgd2hlbiBXZWJLaXQgc3VwcG9y
dCB0aGVtLiBGb3IKLSAgICAvLyBleGFtcGxlLCB3ZSBkb24ndCBpbmNsdWRlIHRoZSAiamFyIiBz
Y2hlbWUsIGV2ZW4gdGhvdWdoIEZpcmVmb3gKLSAgICAvLyB1bmRlcnN0YW5kcyB0aGF0ICJqYXIi
IHVzZXMgYW4gaW5uZXIgVVJMIGZvciBpdCdzIHNlY3VyaXR5IG9yaWdpbi4KLSAgICBzdGF0aWMg
Ym9vbCBzaG91bGRVc2VJbm5lclVSTChjb25zdCBVUkwmKTsKLSAgICBzdGF0aWMgVVJMIGV4dHJh
Y3RJbm5lclVSTChjb25zdCBVUkwmKTsKLQotICAgIC8vIENyZWF0ZSBhIGRlZXAgY29weSBvZiB0
aGlzIFNlY3VyaXR5T3JpZ2luLiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwKLSAgICAvLyB3aGVuIG1h
cnNoYWxsaW5nIGEgU2VjdXJpdHlPcmlnaW4gdG8gYW5vdGhlciB0aHJlYWQuCi0gICAgV0VCQ09S
RV9FWFBPUlQgUmVmPFNlY3VyaXR5T3JpZ2luPiBpc29sYXRlZENvcHkoKSBjb25zdDsKLQotICAg
IC8vIFNldCB0aGUgZG9tYWluIHByb3BlcnR5IG9mIHRoaXMgc2VjdXJpdHkgb3JpZ2luIHRvIG5l
d0RvbWFpbi4gVGhpcwotICAgIC8vIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgbmV3
RG9tYWluIGlzIGEgc3VmZml4IG9mIHRoZSBjdXJyZW50Ci0gICAgLy8gZG9tYWluLiBUaGUgY2Fs
bGVyIGlzIHJlc3BvbnNpYmxlIGZvciB2YWxpZGF0aW5nIG5ld0RvbWFpbi4KLSAgICB2b2lkIHNl
dERvbWFpbkZyb21ET00oY29uc3QgU3RyaW5nJiBuZXdEb21haW4pOwotICAgIGJvb2wgZG9tYWlu
V2FzU2V0SW5ET00oKSBjb25zdCB7IHJldHVybiBtX2RvbWFpbldhc1NldEluRE9NOyB9Ci0KLSAg
ICBjb25zdCBTdHJpbmcmIHByb3RvY29sKCkgY29uc3QgeyByZXR1cm4gbV9wcm90b2NvbDsgfQot
ICAgIGNvbnN0IFN0cmluZyYgaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdDsgfQotICAgIGNv
bnN0IFN0cmluZyYgZG9tYWluKCkgY29uc3QgeyByZXR1cm4gbV9kb21haW47IH0KLSAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9wb3J0OyB9Ci0KLSAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgYSBnaXZlbiBVUkwgaXMgc2VjdXJlLCBiYXNlZCBlaXRoZXIg
ZGlyZWN0bHkgb24gaXRzCi0gICAgLy8gb3duIHByb3RvY29sLCBvciwgd2hlbiByZWxldmFudCwg
b24gdGhlIHByb3RvY29sIG9mIGl0cyAiaW5uZXIgVVJMIgotICAgIC8vIFByb3RvY29scyBsaWtl
IGJsb2I6IGFuZCBmaWxlc3lzdGVtOiBmYWxsIGludG8gdGhpcyBsYXR0ZXIgY2F0ZWdvcnkuCi0g
ICAgc3RhdGljIGJvb2wgaXNTZWN1cmUoY29uc3QgVVJMJik7Ci0KLSAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhpcyBTZWN1cml0eU9yaWdpbiBjYW4gc2NyaXB0IG9iamVjdHMgaW4gdGhlIGdpdmVu
Ci0gICAgLy8gU2VjdXJpdHlPcmlnaW4uIEZvciBleGFtcGxlLCBjYWxsIHRoaXMgZnVuY3Rpb24g
YmVmb3JlIGFsbG93aW5nCi0gICAgLy8gc2NyaXB0IGZyb20gb25lIHNlY3VyaXR5IG9yaWdpbiB0
byByZWFkIG9yIHdyaXRlIG9iamVjdHMgZnJvbQotICAgIC8vIGFub3RoZXIgU2VjdXJpdHlPcmln
aW4uCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjYW5BY2Nlc3MoY29uc3QgU2VjdXJpdHlPcmln
aW4mKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFNlY3VyaXR5T3JpZ2lu
IGNhbiByZWFkIGNvbnRlbnQgcmV0cmlldmVkIGZyb20KLSAgICAvLyB0aGUgZ2l2ZW4gVVJMLiBG
b3IgZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBpc3N1aW5nCi0gICAgLy8gWE1M
SHR0cFJlcXVlc3RzLgotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY2FuUmVxdWVzdChjb25zdCBV
UkwmKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFNlY3VyaXR5T3JpZ2lu
IGNhbiByZWNlaXZlIGRyYWcgY29udGVudCBmcm9tIHRoZQotICAgIC8vIGluaXRpYXRvci4gRm9y
IGV4YW1wbGUsIGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgYWxsb3dpbmcgY29udGVudCB0byBi
ZQotICAgIC8vIGRyb3BwZWQgb250byBhIHRhcmdldC4KLSAgICBib29sIGNhblJlY2VpdmVEcmFn
RGF0YShjb25zdCBTZWN1cml0eU9yaWdpbiYgZHJhZ0luaXRpYXRvcikgY29uc3Q7Ci0KLSAgICAv
LyBSZXR1cm5zIHRydWUgaWYgfGRvY3VtZW50fCBjYW4gZGlzcGxheSBjb250ZW50IGZyb20gdGhl
IGdpdmVuIFVSTCAoZS5nLiwKLSAgICAvLyBpbiBhbiBpZnJhbWUgb3IgYXMgYW4gaW1hZ2UpLiBG
b3IgZXhhbXBsZSwgd2ViIHNpdGVzIGdlbmVyYWxseSBjYW5ub3QKLSAgICAvLyBkaXNwbGF5IGNv
bnRlbnQgZnJvbSB0aGUgdXNlcidzIGZpbGVzIHN5c3RlbS4KLSAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIGNhbkRpc3BsYXkoY29uc3QgVVJMJikgY29uc3Q7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhpcyBTZWN1cml0eU9yaWdpbiBjYW4gbG9hZCBsb2NhbCByZXNvdXJjZXMsIHN1Y2gKLSAg
ICAvLyBhcyBpbWFnZXMsIGlmcmFtZXMsIGFuZCBzdHlsZSBzaGVldHMsIGFuZCBjYW4gbGluayB0
byBsb2NhbCBVUkxzLgotICAgIC8vIEZvciBleGFtcGxlLCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVm
b3JlIGNyZWF0aW5nIGFuIGlmcmFtZSB0byBhCi0gICAgLy8gZmlsZTovLyBVUkwuCi0gICAgLy8K
LSAgICAvLyBOb3RlOiBBIFNlY3VyaXR5T3JpZ2luIG1pZ2h0IGJlIGFsbG93ZWQgdG8gbG9hZCBs
b2NhbCByZXNvdXJjZXMKLSAgICAvLyAgICAgICB3aXRob3V0IGJlaW5nIGFibGUgdG8gaXNzdWUg
YW4gWE1MSHR0cFJlcXVlc3QgZm9yIGEgbG9jYWwgVVJMLgotICAgIC8vICAgICAgIFRvIGRldGVy
bWluZSB3aGV0aGVyIHRoZSBTZWN1cml0eU9yaWdpbiBjYW4gaXNzdWUgYW4KLSAgICAvLyAgICAg
ICBYTUxIdHRwUmVxdWVzdCBmb3IgYSBVUkwsIGNhbGwgY2FuUmVxdWVzdCh1cmwpLgotICAgIGJv
b2wgY2FuTG9hZExvY2FsUmVzb3VyY2VzKCkgY29uc3QgeyByZXR1cm4gbV9jYW5Mb2FkTG9jYWxS
ZXNvdXJjZXM7IH0KLQotICAgIC8vIEV4cGxpY2l0bHkgZ3JhbnQgdGhlIGFiaWxpdHkgdG8gbG9h
ZCBsb2NhbCByZXNvdXJjZXMgdG8gdGhpcwotICAgIC8vIFNlY3VyaXR5T3JpZ2luLgotICAgIC8v
Ci0gICAgLy8gTm90ZTogVGhpcyBtZXRob2QgZXhpc3RzIG9ubHkgdG8gc3VwcG9ydCBiYWNrd2Fy
ZHMgY29tcGF0aWJpbGl0eQotICAgIC8vICAgICAgIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgV2Vi
S2l0LgotICAgIHZvaWQgZ3JhbnRMb2FkTG9jYWxSZXNvdXJjZXMoKTsKLQotICAgIC8vIEV4cGxp
Y2l0bHkgZ3JhbnQgdGhlIGFiaWxpdHkgdG8gYWNjZXNzIHZlcnkgb3RoZXIgU2VjdXJpdHlPcmln
aW4uCi0gICAgLy8KLSAgICAvLyBXQVJOSU5HOiBUaGlzIGlzIGFuIGV4dHJlbWVseSBwb3dlcmZ1
bCBhYmlsaXR5LiBVc2Ugd2l0aCBjYXV0aW9uIQotICAgIHZvaWQgZ3JhbnRVbml2ZXJzYWxBY2Nl
c3MoKTsKLSAgICBib29sIGhhc1VuaXZlcnNhbEFjY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fdW5p
dmVyc2FsQWNjZXNzOyB9Ci0KLSAgICB2b2lkIHNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTdG9y
YWdlQmxvY2tpbmdQb2xpY3kgcG9saWN5KSB7IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5ID0gcG9s
aWN5OyB9Ci0KLSAgICB2b2lkIGdyYW50U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrKCk7
Ci0gICAgYm9vbCBuZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyaygpIGNvbnN0IHsg
cmV0dXJuIG1fbmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcms7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBkb21haW5Gb3JDYWNoZVBhcnRpdGlvbigpIGNvbnN0OwotCi0g
ICAgYm9vbCBjYW5BY2Nlc3NEYXRhYmFzZShjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2lu
KSBjb25zdCB7IHJldHVybiBjYW5BY2Nlc3NTdG9yYWdlKCZ0b3BPcmlnaW4pOyB9OwotICAgIGJv
b2wgY2FuQWNjZXNzU2Vzc2lvblN0b3JhZ2UoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdp
bikgY29uc3QgeyByZXR1cm4gY2FuQWNjZXNzU3RvcmFnZSgmdG9wT3JpZ2luLCBBbHdheXNBbGxv
d0Zyb21UaGlyZFBhcnR5KTsgfQotICAgIGJvb2wgY2FuQWNjZXNzTG9jYWxTdG9yYWdlKGNvbnN0
IFNlY3VyaXR5T3JpZ2luKiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0dXJuIGNhbkFjY2Vzc1N0b3Jh
Z2UodG9wT3JpZ2luKTsgfTsKLSAgICBib29sIGNhbkFjY2Vzc1BsdWdpblN0b3JhZ2UoY29uc3Qg
U2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbikgY29uc3QgeyByZXR1cm4gY2FuQWNjZXNzU3RvcmFn
ZSgmdG9wT3JpZ2luKTsgfQotICAgIGJvb2wgY2FuQWNjZXNzQXBwbGljYXRpb25DYWNoZShjb25z
dCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKSBjb25zdCB7IHJldHVybiBjYW5BY2Nlc3NTdG9y
YWdlKCZ0b3BPcmlnaW4pOyB9Ci0gICAgYm9vbCBjYW5BY2Nlc3NDb29raWVzKCkgY29uc3QgeyBy
ZXR1cm4gIWlzVW5pcXVlKCk7IH0KLSAgICBib29sIGNhblJlcXVlc3RHZW9sb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuICFpc1VuaXF1ZSgpOyB9Ci0gICAgUG9saWN5IGNhblNob3dOb3RpZmljYXRp
b25zKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGUgbG9jYWwgU2VjdXJpdHlPcmlnaW4gaXMgdGhlIG1v
c3QgcHJpdmlsZWdlZCBTZWN1cml0eU9yaWdpbi4KLSAgICAvLyBUaGUgbG9jYWwgU2VjdXJpdHlP
cmlnaW4gY2FuIHNjcmlwdCBhbnkgZG9jdW1lbnQsIG5hdmlnYXRlIHRvIGxvY2FsCi0gICAgLy8g
cmVzb3VyY2VzLCBhbmQgY2FuIHNldCBhcmJpdHJhcnkgaGVhZGVycyBvbiBYTUxIdHRwUmVxdWVz
dHMuCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0xvY2FsKCkgY29uc3Q7Ci0KLSAgICAvLyBU
aGUgb3JpZ2luIGlzIGEgZ2xvYmFsbHkgdW5pcXVlIGlkZW50aWZpZXIgYXNzaWduZWQgd2hlbiB0
aGUgRG9jdW1lbnQgaXMKLSAgICAvLyBjcmVhdGVkLiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3Bl
Y3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzYW5kYm94T3JpZ2luCi0gICAgLy8KLSAgICAvLyBU
aGVyZSdzIGEgc3VidGxlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHVuaXF1ZSBvcmlnaW4gYW5kIGFu
IG9yaWdpbiB0aGF0Ci0gICAgLy8gaGFzIHRoZSBTYW5kYm94T3JpZ2luIGZsYWcgc2V0LiBUaGUg
bGF0dGVyIGltcGxpZXMgdGhlIGZvcm1lciwgYW5kLCBpbgotICAgIC8vIGFkZGl0aW9uLCB0aGUg
U2FuZGJveE9yaWdpbiBmbGFnIGlzIGluaGVyaXRlZCBieSBpZnJhbWVzLgotICAgIGJvb2wgaXNV
bmlxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzVW5pcXVlOyB9Ci0KLSAgICAvLyBNYXJrcyBhIGZp
bGU6Ly8gb3JpZ2luIGFzIGJlaW5nIGluIGEgZG9tYWluIGRlZmluZWQgYnkgaXRzIHBhdGguCi0g
ICAgLy8gRklYTUUgODE1Nzg6IFRoZSBuYW1pbmcgb2YgdGhpcyBpcyBjb25mdXNpbmcuIEZpbGVz
IHdpdGggcmVzdHJpY3RlZCBhY2Nlc3MgdG8gb3RoZXIgbG9jYWwgZmlsZXMKLSAgICAvLyBzdGls
bCBjYW4gaGF2ZSBvdGhlciBwcml2aWxlZ2VzIHRoYXQgY2FuIGJlIHJlbWVtYmVyZWQsIHRoZXJl
Ynkgbm90IG1ha2luZyB0aGVtIHVuaXF1ZS4KLSAgICB2b2lkIGVuZm9yY2VGaWxlUGF0aFNlcGFy
YXRpb24oKTsKLQotICAgIC8vIENvbnZlcnQgdGhpcyBTZWN1cml0eU9yaWdpbiBpbnRvIGEgc3Ry
aW5nLiBUaGUgc3RyaW5nCi0gICAgLy8gcmVwcmVzZW50YXRpb24gb2YgYSBTZWN1cml0eU9yaWdp
biBpcyBzaW1pbGFyIHRvIGEgVVJMLCBleGNlcHQgaXQKLSAgICAvLyBsYWNrcyBhIHBhdGggY29t
cG9uZW50LiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGVuY29kZQotICAgIC8v
IHRoZSB2YWx1ZSBvZiB0aGUgU2VjdXJpdHlPcmlnaW4ncyBkb21haW4gcHJvcGVydHkuCi0gICAg
Ly8KLSAgICAvLyBXaGVuIHVzaW5nIHRoZSBzdHJpbmcgdmFsdWUsIGl0J3MgaW1wb3J0YW50IHRv
IHJlbWVtYmVyIHRoYXQgaXQgbWlnaHQgYmUKLSAgICAvLyAibnVsbCIuIFRoaXMgaGFwcGVucyB3
aGVuIHRoaXMgU2VjdXJpdHlPcmlnaW4gaXMgdW5pcXVlLiBGb3IgZXhhbXBsZSwKLSAgICAvLyB0
aGlzIFNlY3VyaXR5T3JpZ2luIG1pZ2h0IGhhdmUgY29tZSBmcm9tIGEgc2FuZGJveGVkIGlmcmFt
ZSwgdGhlCi0gICAgLy8gU2VjdXJpdHlPcmlnaW4gbWlnaHQgYmUgZW1wdHksIG9yIHdlIG1pZ2h0
IGhhdmUgZXhwbGljaXRseSBkZWNpZGVkIHRoYXQKLSAgICAvLyB3ZSBzaG91bGRUcmVhdFVSTFNj
aGVtZUFzTm9BY2Nlc3MuCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3Q7Ci0KLSAgICAvLyBTaW1pbGFyIHRvIHRvU3RyaW5nKCksIGJ1dCBkb2VzIG5vdCB0YWtlIGlu
dG8gYWNjb3VudCBhbnkgZmFjdG9ycyB0aGF0Ci0gICAgLy8gY291bGQgbWFrZSB0aGUgc3RyaW5n
IHJldHVybiAibnVsbCIuCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHRvUmF3U3RyaW5nKCkg
Y29uc3Q7Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBjaGVja3MgZm9yIGVxdWFsaXR5IGJldHdlZW4g
U2VjdXJpdHlPcmlnaW5zLCBub3Qgd2hldGhlcgotICAgIC8vIG9uZSBvcmlnaW4gY2FuIGFjY2Vz
cyBhbm90aGVyLiBJdCBpcyB1c2VkIGZvciBoYXNoIHRhYmxlIGtleXMuCi0gICAgLy8gRm9yIGFj
Y2VzcyBjaGVja3MsIHVzZSBjYW5BY2Nlc3MoKS4KLSAgICAvLyBGSVhNRTogSWYgdGhpcyBtZXRo
b2QgaXMgcmVhbGx5IG9ubHkgdXNlZnVsIGZvciBoYXNoIHRhYmxlIGtleXMsIGl0Ci0gICAgLy8g
c2hvdWxkIGJlIHJlZmFjdG9yZWQgaW50byBTZWN1cml0eU9yaWdpbkhhc2guCi0gICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBlcXVhbChjb25zdCBTZWN1cml0eU9yaWdpbiopIGNvbnN0OwotCi0gICAg
Ly8gVGhpcyBtZXRob2QgY2hlY2tzIGZvciBlcXVhbGl0eSwgaWdub3JpbmcgdGhlIHZhbHVlIG9m
IGRvY3VtZW50LmRvbWFpbgotICAgIC8vIChhbmQgd2hldGhlciBpdCB3YXMgc2V0KSBidXQgY29u
c2lkZXJpbmcgdGhlIGhvc3QuIEl0IGlzIHVzZWQgZm9yIHBvc3RNZXNzYWdlLgotICAgIFdFQkNP
UkVfRVhQT1JUIGJvb2wgaXNTYW1lU2NoZW1lSG9zdFBvcnQoY29uc3QgU2VjdXJpdHlPcmlnaW4m
KSBjb25zdDsKLQotICAgIC8vIFRoaXMgbWV0aG9kIGltcGxlbWVudHMgdGhlICJzYW1lIG9yaWdp
biIgYWxnb3JpdGhtIGZyb20gdGhlIEhUTUwgU3RhbmRhcmQ6Ci0gICAgLy8gaHR0cHM6Ly9odG1s
LnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNzYW1lLW9yaWdpbgotICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNTYW1lT3JpZ2luQXMoY29uc3QgU2VjdXJpdHlPcmlnaW4m
KSBjb25zdDsKLQotICAgIHN0YXRpYyBVUkwgdXJsV2l0aFVuaXF1ZVNlY3VyaXR5T3JpZ2luKCk7
Ci0KLSAgICBib29sIGlzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNQb3RlbnRpYWxseVRydXN0d29ydGh5OyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0xvY2FsSG9z
dE9yTG9vcGJhY2tJUEFkZHJlc3MoY29uc3QgVVJMJik7Ci0KLXByaXZhdGU6Ci0gICAgU2VjdXJp
dHlPcmlnaW4oKTsKLSAgICBleHBsaWNpdCBTZWN1cml0eU9yaWdpbihjb25zdCBVUkwmKTsKLSAg
ICBleHBsaWNpdCBTZWN1cml0eU9yaWdpbihjb25zdCBTZWN1cml0eU9yaWdpbiopOwotCi0gICAg
Ly8gRklYTUU6IFJlbmFtZSB0aGlzIGZ1bmN0aW9uIHRvIHNvbWV0aGluZyBtb3JlIHNlbWFudGlj
LgotICAgIGJvb2wgcGFzc2VzRmlsZUNoZWNrKGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Q7
Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBjaGVja3MgdGhhdCB0aGUgc2NoZW1lIGZvciB0aGlzIG9y
aWdpbiBpcyBhbiBIVFRQLWZhbWlseQotICAgIC8vIHNjaGVtZSwgZS5nLiBIVFRQIGFuZCBIVFRQ
Uy4KLSAgICBib29sIGlzSFRUUEZhbWlseSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdG9jb2wgPT0g
Imh0dHAiIHx8IG1fcHJvdG9jb2wgPT0gImh0dHBzIjsgfQotICAgIAotICAgIGVudW0gU2hvdWxk
QWxsb3dGcm9tVGhpcmRQYXJ0eSB7IEFsd2F5c0FsbG93RnJvbVRoaXJkUGFydHksIE1heWJlQWxs
b3dGcm9tVGhpcmRQYXJ0eSB9OwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgY2FuQWNjZXNzU3Rv
cmFnZShjb25zdCBTZWN1cml0eU9yaWdpbiosIFNob3VsZEFsbG93RnJvbVRoaXJkUGFydHkgPSBN
YXliZUFsbG93RnJvbVRoaXJkUGFydHkpIGNvbnN0OwotCi0gICAgU3RyaW5nIG1fcHJvdG9jb2w7
Ci0gICAgU3RyaW5nIG1faG9zdDsKLSAgICBTdHJpbmcgbV9kb21haW47Ci0gICAgU3RyaW5nIG1f
ZmlsZVBhdGg7Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gbV9wb3J0OwotICAgIGJvb2wg
bV9pc1VuaXF1ZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3VuaXZlcnNhbEFjY2VzcyB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2RvbWFpbldhc1NldEluRE9NIHsgZmFsc2UgfTsKLSAgICBib29sIG1f
Y2FuTG9hZExvY2FsUmVzb3VyY2VzIHsgZmFsc2UgfTsKLSAgICBTdG9yYWdlQmxvY2tpbmdQb2xp
Y3kgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgeyBBbGxvd0FsbFN0b3JhZ2UgfTsKLSAgICBib29s
IG1fZW5mb3JjZUZpbGVQYXRoU2VwYXJhdGlvbiB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX25lZWRz
U3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJMc1F1aXJrIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNQ
b3RlbnRpYWxseVRydXN0d29ydGh5IHsgZmFsc2UgfTsKK2VudW0gU3RvcmFnZUJsb2NraW5nUG9s
aWN5IHsKKyAgICBBbGxvd0FsbFN0b3JhZ2UsCisgICAgQmxvY2tUaGlyZFBhcnR5U3RvcmFnZSwK
KyAgICBCbG9ja0FsbFN0b3JhZ2UKIH07CiAKLWJvb2wgc2hvdWxkVHJlYXRBc1BvdGVudGlhbGx5
VHJ1c3R3b3J0aHkoY29uc3QgVVJMJik7Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgT3JpZ2lu
IGhlYWRlciB2YWx1ZXMgc2VyaWFsaXplZCBmcm9tIHRoZXNlIHR3byBvcmlnaW5zIHdvdWxkIGJl
IHRoZSBzYW1lLgotYm9vbCBvcmlnaW5zTWF0Y2goY29uc3QgU2VjdXJpdHlPcmlnaW4mLCBjb25z
dCBTZWN1cml0eU9yaWdpbiYpOwotYm9vbCBvcmlnaW5zTWF0Y2goY29uc3QgU2VjdXJpdHlPcmln
aW4qLCBjb25zdCBTZWN1cml0eU9yaWdpbiopOwotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0J
KHJldmlzaW9uIDIyMjcxMCkJKGZyb20gU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5n
c0NvY29hLm1tOjIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NC
YXNlQ29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKworI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBp
bmxpbmUgY29uc3QgY2hhciogc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCkKK3sK
KyAgICByZXR1cm4gIlBpbmdGYW5nIFRDIjsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFy
KiBzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpCit7CisgICAgcmV0dXJuICJQaW5n
RmFuZyBTQyI7Cit9CisKKyNpZiBQTEFURk9STShNQUMpCisKK3N0YXRpYyBib29sIG9zYWthTW9u
b0lzSW5zdGFsbGVkKCkKK3sKKyAgICBpbnQgb25lID0gMTsKKyAgICBSZXRhaW5QdHI8Q0ZOdW1i
ZXJSZWY+IHllcyA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVySW50VHlwZSwgJm9uZSkpOworICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZv
bnRFbmFibGVkQXR0cmlidXRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSB9OworICAgIENGVHlwZVJl
ZiB2YWx1ZXNbXSA9IHsgeWVzLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpIH07CisgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdU
SCh2YWx1ZXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlv
bmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+
IGRlc2NyaXB0b3IgPSBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRl
cyhhdHRyaWJ1dGVzLmdldCgpKSk7CisgICAgUmV0YWluUHRyPENGU2V0UmVmPiBtYW5kYXRvcnlB
dHRyaWJ1dGVzID0gYWRvcHRDRihDRlNldENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlz
LCBXVEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZVNldENhbGxCYWNrcykpOworICAgIHJl
dHVybiBhZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlwdG9y
KGRlc2NyaXB0b3IuZ2V0KCksIG1hbmRhdG9yeUF0dHJpYnV0ZXMuZ2V0KCkpKTsKK30KKwordm9p
ZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQoreworICAgIHNldFN0
YW5kYXJkRm9udEZhbWlseSgiU29uZ3RpIFRDIiwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwor
ICAgIHNldFNlcmlmRm9udEZhbWlseSgiU29uZ3RpIFRDIiwgVVNDUklQVF9UUkFESVRJT05BTF9I
QU4pOworICAgIHNldEZpeGVkRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRG
YW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOworICAgIHNldFNhbnNTZXJpZkZvbnRG
YW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElU
SU9OQUxfSEFOKTsKKyAgICBzZXRDdXJzaXZlRm9udEZhbWlseSgiS2FpdGkgVEMiLCBVU0NSSVBU
X1RSQURJVElPTkFMX0hBTik7CisKKyAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIlNvbmd0aSBT
QyIsIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOworICAgIHNldFNlcmlmRm9udEZhbWlseSgiU29u
Z3RpIFNDIiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5
KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9I
QU4pOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZv
bnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7CisgICAgc2V0Q3Vyc2l2ZUZvbnRG
YW1pbHkoIkthaXRpIFNDIiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7CisKKyAgICBzZXRTdGFu
ZGFyZEZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9P
Ul9ISVJBR0FOQSk7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KG9zYWthTW9ub0lzSW5zdGFsbGVk
KCkgPyAiT3Nha2EtTW9ubyIgOiAiSGlyYWdpbm8gU2FucyIsIFVTQ1JJUFRfS0FUQUtBTkFfT1Jf
SElSQUdBTkEpOworICAgIHNldFNlcmlmRm9udEZhbWlseSgiSGlyYWdpbm8gTWluY2hvIFByb04i
LCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFt
aWx5KCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJB
R0FOQSk7CisKKyAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFwcGxlTXl1bmdqbyIsIFVTQ1JJ
UFRfSEFOR1VMKTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIkFwcGxlTXl1bmdqbyIsIFVTQ1JJ
UFRfSEFOR1VMKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8i
LCBVU0NSSVBUX0hBTkdVTCk7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXBwbGUgU0Qg
R290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKKworICAgIHNldFN0YW5kYXJkRm9udEZhbWls
eSgiVGltZXMiLCBVU0NSSVBUX0NPTU1PTik7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KCJDb3Vy
aWVyIiwgVVNDUklQVF9DT01NT04pOworICAgIHNldFNlcmlmRm9udEZhbWlseSgiVGltZXMiLCBV
U0NSSVBUX0NPTU1PTik7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiSGVsdmV0aWNhIiwg
VVNDUklQVF9DT01NT04pOworfQorCisjZWxzZQorCit2b2lkIFNldHRpbmdzOjppbml0aWFsaXpl
RGVmYXVsdEZvbnRGYW1pbGllcygpCit7CisgICAgLy8gVGhlcmUgaXMgbm8gc2VyaWYgQ2hpbmVz
ZSBmb250IGluIGRlZmF1bHQgaU9TIGluc3RhbGxhdGlvbi4KKyAgICBzZXRTdGFuZGFyZEZvbnRG
YW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElU
SU9OQUxfSEFOKTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxI
YW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKKyAgICBzZXRGaXhlZEZv
bnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJB
RElUSU9OQUxfSEFOKTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRp
dGlvbmFsSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisKKyAgICAv
LyBUaGVyZSBpcyBubyBzZXJpZiBDaGluZXNlIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0
aW9uLgorICAgIHNldFN0YW5kYXJkRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9u
dEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKyAgICBzZXRTZXJpZkZvbnRGYW1p
bHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVE
X0hBTik7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250
RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOworICAgIHNldFNhbnNTZXJpZkZvbnRG
YW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElG
SUVEX0hBTik7CisKKyAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQ
cm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7CisgICAgc2V0Rml4ZWRGb250RmFt
aWx5KCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJB
R0FOQSk7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBNaW5jaG8gUHJvTiIsIFVT
Q1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOworICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHko
IkhpcmFnaW5vIEtha3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5B
KTsKKworICAgIC8vIFRoZXJlIGlzIG5vIHNlcmlmIEtvcmVhbiBmb250IGluIGRlZmF1bHQgaU9T
IGluc3RhbGxhdGlvbi4KKyAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhp
YyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KCJBcHBsZSBT
RCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOworICAgIHNldEZpeGVkRm9udEZhbWlseSgi
QXBwbGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKKyAgICBzZXRTYW5zU2VyaWZG
b250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOworCisgICAg
c2V0U3RhbmRhcmRGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBzZXRG
aXhlZEZvbnRGYW1pbHkoIkNvdXJpZXIiLCBVU0NSSVBUX0NPTU1PTik7CisgICAgc2V0U2VyaWZG
b250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBzZXRTYW5zU2VyaWZGb250
RmFtaWx5KCJIZWx2ZXRpY2EiLCBVU0NSSVBUX0NPTU1PTik7Cit9CisKKyNlbmRpZgorCitjb25z
dCBTdHJpbmcmIFNldHRpbmdzOjpkZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJk
d2FyZVN1cHBvcnQoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGRlZmF1
bHRNZWRpYUNvbnRlbnRUeXBlcyB7ICJ2aWRlby9tcDQ7Y29kZWNzPWh2YzE6dmlkZW8vbXA0O2Nv
ZGVjcz1oZXYxIiB9OworICAgIHJldHVybiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXM7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NDb2NvYS5tbQpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9s
LXN0eWxlCiMjIC0wLDAgKzEgIyMKK0xGClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5nc0Jhc2VDb2NvYS5t
bQkocmV2aXNpb24gMjIyNzEwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5n
c0Jhc2VDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlNldHRp
bmdzQmFzZS5oIgogCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKQEAgLTU0LDcg
KzU0LDcgQEAgc3RhdGljIGJvb2wgb3Nha2FNb25vSXNJbnN0YWxsZWQoKQogICAgIHJldHVybiBh
ZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlwdG9yKGRlc2Ny
aXB0b3IuZ2V0KCksIG1hbmRhdG9yeUF0dHJpYnV0ZXMuZ2V0KCkpKTsKIH0KIAotdm9pZCBTZXR0
aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQordm9pZCBTZXR0aW5nc0Jhc2U6
OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCkKIHsKICAgICBzZXRTdGFuZGFyZEZvbnRG
YW1pbHkoIlNvbmd0aSBUQyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKICAgICBzZXRTZXJp
ZkZvbnRGYW1pbHkoIlNvbmd0aSBUQyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKQEAgLTg2
LDcgKzg2LDcgQEAgdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaQogCiAj
ZWxzZQogCi12b2lkIFNldHRpbmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCit2
b2lkIFNldHRpbmdzQmFzZTo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQogewogICAg
IC8vIFRoZXJlIGlzIG5vIHNlcmlmIENoaW5lc2UgZm9udCBpbiBkZWZhdWx0IGlPUyBpbnN0YWxs
YXRpb24uCiAgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlvbmFsSGFu
Rm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CkBAIC0xMTksNyArMTE5LDcg
QEAgdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaQogCiAjZW5kaWYKIAot
Y29uc3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5n
SGFyZHdhcmVTdXBwb3J0KCkKK2NvbnN0IFN0cmluZyYgU2V0dGluZ3NCYXNlOjpkZWZhdWx0TWVk
aWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTdHJpbmc+IGRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlcyB7ICJ2aWRlby9t
cDQ7Y29kZWNzPWh2YzE6dmlkZW8vbXA0O2NvZGVjcz1oZXYxIiB9OwogICAgIHJldHVybiBkZWZh
dWx0TWVkaWFDb250ZW50VHlwZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1Nl
dHRpbmdzQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9T
ZXR0aW5nc0NvY29hLm1tCShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L2NvY29hL1NldHRpbmdzQ29jb2EubW0JKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjggKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgot
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRG
YW1pbHkoKQotewotICAgIHJldHVybiAiUGluZ0ZhbmcgVEMiOwotfQotCi1zdGF0aWMgaW5saW5l
IGNvbnN0IGNoYXIqIHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCkKLXsKLSAgICBy
ZXR1cm4gIlBpbmdGYW5nIFNDIjsKLX0KLQotI2lmIFBMQVRGT1JNKE1BQykKLQotc3RhdGljIGJv
b2wgb3Nha2FNb25vSXNJbnN0YWxsZWQoKQotewotICAgIGludCBvbmUgPSAxOwotICAgIFJldGFp
blB0cjxDRk51bWJlclJlZj4geWVzID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJbnRUeXBlLCAmb25lKSk7Ci0gICAgQ0ZUeXBlUmVmIGtleXNb
XSA9IHsga0NURm9udEVuYWJsZWRBdHRyaWJ1dGUsIGtDVEZvbnROYW1lQXR0cmlidXRlIH07Ci0g
ICAgQ0ZUeXBlUmVmIHZhbHVlc1tdID0geyB5ZXMuZ2V0KCksIENGU1RSKCJPc2FrYS1Nb25vIikg
fTsKLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBhdHRyaWJ1dGVzID0gYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBXVEZf
QVJSQVlfTEVOR1RIKHZhbHVlcyksICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICBSZXRhaW5QdHI8Q1RGb250RGVz
Y3JpcHRvclJlZj4gZGVzY3JpcHRvciA9IGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZVdp
dGhBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMuZ2V0KCkpKTsKLSAgICBSZXRhaW5QdHI8Q0ZTZXRSZWY+
IG1hbmRhdG9yeUF0dHJpYnV0ZXMgPSBhZG9wdENGKENGU2V0Q3JlYXRlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIGtleXMsIFdURl9BUlJBWV9MRU5HVEgoa2V5cyksICZrQ0ZUeXBlU2V0Q2FsbEJhY2tz
KSk7Ci0gICAgcmV0dXJuIGFkb3B0Q0YoQ1RGb250RGVzY3JpcHRvckNyZWF0ZU1hdGNoaW5nRm9u
dERlc2NyaXB0b3IoZGVzY3JpcHRvci5nZXQoKSwgbWFuZGF0b3J5QXR0cmlidXRlcy5nZXQoKSkp
OwotfQotCi12b2lkIFNldHRpbmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpCi17
Ci0gICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBUX1RSQURJVElP
TkFMX0hBTik7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBUX1RS
QURJVElPTkFMX0hBTik7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlv
bmFsSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7Ci0gICAgc2V0U2Fu
c1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVND
UklQVF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldEN1cnNpdmVGb250RmFtaWx5KCJLYWl0aSBU
QyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLQotICAgIHNldFN0YW5kYXJkRm9udEZhbWls
eSgiU29uZ3RpIFNDIiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0U2VyaWZGb250
RmFtaWx5KCJTb25ndGkgU0MiLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKLSAgICBzZXRGaXhl
ZEZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9T
SU1QTElGSUVEX0hBTik7Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZTaW1w
bGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKLSAgICBzZXRD
dXJzaXZlRm9udEZhbWlseSgiS2FpdGkgU0MiLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKLQot
ICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiSGlyYWdpbm8gTWluY2hvIFByb04iLCBVU0NSSVBU
X0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKLSAgICBzZXRGaXhlZEZvbnRGYW1pbHkob3Nha2FNb25v
SXNJbnN0YWxsZWQoKSA/ICJPc2FrYS1Nb25vIiA6ICJIaXJhZ2lubyBTYW5zIiwgVVNDUklQVF9L
QVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBN
aW5jaG8gUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOwotICAgIHNldFNhbnNT
ZXJpZkZvbnRGYW1pbHkoIkhpcmFnaW5vIEtha3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFL
QU5BX09SX0hJUkFHQU5BKTsKLQotICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiQXBwbGVNeXVu
Z2pvIiwgVVNDUklQVF9IQU5HVUwpOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiQXBwbGVNeXVu
Z2pvIiwgVVNDUklQVF9IQU5HVUwpOwotICAgIHNldEZpeGVkRm9udEZhbWlseSgiQXBwbGUgU0Qg
R290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5
KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOwotCi0gICAgc2V0U3RhbmRh
cmRGb250RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBzZXRGaXhlZEZvbnRG
YW1pbHkoIkNvdXJpZXIiLCBVU0NSSVBUX0NPTU1PTik7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5
KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJI
ZWx2ZXRpY2EiLCBVU0NSSVBUX0NPTU1PTik7Ci19Ci0KLSNlbHNlCi0KLXZvaWQgU2V0dGluZ3M6
OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCkKLXsKLSAgICAvLyBUaGVyZSBpcyBubyBz
ZXJpZiBDaGluZXNlIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgotICAgIHNldFN0
YW5kYXJkRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVND
UklQVF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldFNlcmlmRm9udEZhbWlseShzYW5zU2VyaWZU
cmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwotICAg
IHNldEZpeGVkRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwg
VVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fu
c1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFO
KTsKLQotICAgIC8vIFRoZXJlIGlzIG5vIHNlcmlmIENoaW5lc2UgZm9udCBpbiBkZWZhdWx0IGlP
UyBpbnN0YWxsYXRpb24uCi0gICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBs
aWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNldFNl
cmlmRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBU
X1NJTVBMSUZJRURfSEFOKTsKLSAgICBzZXRGaXhlZEZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxp
ZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0U2Fu
c1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NS
SVBUX1NJTVBMSUZJRURfSEFOKTsKLQotICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiSGlyYWdp
bm8gTWluY2hvIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKLSAgICBzZXRG
aXhlZEZvbnRGYW1pbHkoIkhpcmFnaW5vIEtha3UgR290aGljIFByb04iLCBVU0NSSVBUX0tBVEFL
QU5BX09SX0hJUkFHQU5BKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNo
byBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0U2Fuc1Nlcmlm
Rm9udEZhbWlseSgiSGlyYWdpbm8gS2FrdSBHb3RoaWMgUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFf
T1JfSElSQUdBTkEpOwotCi0gICAgLy8gVGhlcmUgaXMgbm8gc2VyaWYgS29yZWFuIGZvbnQgaW4g
ZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgotICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiQXBw
bGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1p
bHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdVTCk7Ci0gICAgc2V0Rml4ZWRG
b250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOwotICAgIHNl
dFNhbnNTZXJpZkZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdV
TCk7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIlRpbWVzIiwgVVNDUklQVF9DT01NT04p
OwotICAgIHNldEZpeGVkRm9udEZhbWlseSgiQ291cmllciIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAg
ICBzZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIiwgVVNDUklQVF9DT01NT04pOwotICAgIHNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoIkhlbHZldGljYSIsIFVTQ1JJUFRfQ09NTU9OKTsKLX0KLQotI2Vu
ZGlmCi0KLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1Jl
cXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzIHsgInZpZGVvL21wNDtjb2RlY3M9aHZjMTp2
aWRlby9tcDQ7Y29kZWNzPWhldjEiIH07Ci0gICAgcmV0dXJuIGRlZmF1bHRNZWRpYUNvbnRlbnRU
eXBlczsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1MRgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGlu
Z3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0
aW5ncy5jcHAJKHJldmlzaW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxTZXR0aW5ncy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMywxMSArNTEzLDExIEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsU2V0dGluZ3M6OnNldFMKICAgICBpZiAoIW1fcGFnZSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogICAgIGlm
IChtb2RlID09ICJBbGxvd0FsbCIpCi0gICAgICAgIHNldHRpbmdzKCkuc2V0U3RvcmFnZUJsb2Nr
aW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2UpOworICAgICAgICBzZXR0
aW5ncygpLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShBbGxvd0FsbFN0b3JhZ2UpOwogICAgIGVs
c2UgaWYgKG1vZGUgPT0gIkJsb2NrVGhpcmRQYXJ0eSIpCi0gICAgICAgIHNldHRpbmdzKCkuc2V0
U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpCbG9ja1RoaXJkUGFydHlTdG9y
YWdlKTsKKyAgICAgICAgc2V0dGluZ3MoKS5zZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koQmxvY2tU
aGlyZFBhcnR5U3RvcmFnZSk7CiAgICAgZWxzZSBpZiAobW9kZSA9PSAiQmxvY2tBbGwiKQotICAg
ICAgICBzZXR0aW5ncygpLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6
QmxvY2tBbGxTdG9yYWdlKTsKKyAgICAgICAgc2V0dGluZ3MoKS5zZXRTdG9yYWdlQmxvY2tpbmdQ
b2xpY3koQmxvY2tBbGxTdG9yYWdlKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBTeW50YXhFcnJvciB9OwogICAgIHJldHVybiB7IH07CkluZGV4OiBTb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNp
b24gMjIyNzM2KQorKysgU291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNyBAQAorMjAxNy0xMC0wMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgor
CisgICAgICAgIFtTZXR0aW5nc10gQ29udmVydCBtb3JlIHNldHRpbmdzIHRvIGJlIGdlbmVyYXRl
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NzY2
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFy
ZWQvV2ViUHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Qy9XS0FQSUNhc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5j
ZXMubW06CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByZWZlcmVuY2VzLmNwcDoKKworICAgICAg
ICAgICAgVXBkYXRlIGZvciByZW5hbWUgb2YgU3RvcmFnZUJsb2NraW5nUG9saWN5LgorCiAyMDE3
LTEwLTAyICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUkVHUkVTU0lPTjogQVBJIHRlc3RzIFdlYktpdC5Qcm9jZXNzRGlkVGVybWluYXRlUmVx
dWVzdGVkQnlDbGllbnQgYW5kIFdlYktpdC5Qcm9jZXNzRGlkVGVybWluYXRlV2l0aFJlYXNvbkNy
YXNoIGFyZSB0aW1pbmcgb3V0CkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJl
bmNlc0RlZmluaXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
UHJlZmVyZW5jZXNEZWZpbml0aW9ucy5oCShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyOCw3ICszMjgsNyBAQAogICAgIG1hY3JvKEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBpbnNw
ZWN0b3JBdHRhY2hlZEhlaWdodCwgVUludDMyLCB1aW50MzJfdCwgMzAwLCAiIiwgIiIpIFwKICAg
ICBtYWNybyhJbnNwZWN0b3JBdHRhY2hlZFdpZHRoLCBpbnNwZWN0b3JBdHRhY2hlZFdpZHRoLCBV
SW50MzIsIHVpbnQzMl90LCA3NTAsICIiLCAiIikgXAogICAgIG1hY3JvKEluc3BlY3RvckF0dGFj
aG1lbnRTaWRlLCBpbnNwZWN0b3JBdHRhY2htZW50U2lkZSwgVUludDMyLCB1aW50MzJfdCwgMCwg
IiIsICIiKSBcCi0gICAgbWFjcm8oU3RvcmFnZUJsb2NraW5nUG9saWN5LCBzdG9yYWdlQmxvY2tp
bmdQb2xpY3ksIFVJbnQzMiwgdWludDMyX3QsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpCbG9j
a1RoaXJkUGFydHlTdG9yYWdlLCAiIiwgIiIpIFwKKyAgICBtYWNybyhTdG9yYWdlQmxvY2tpbmdQ
b2xpY3ksIHN0b3JhZ2VCbG9ja2luZ1BvbGljeSwgVUludDMyLCB1aW50MzJfdCwgV2ViQ29yZTo6
QmxvY2tUaGlyZFBhcnR5U3RvcmFnZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oSmF2YVNjcmlwdFJ1
bnRpbWVGbGFncywgamF2YVNjcmlwdFJ1bnRpbWVGbGFncywgVUludDMyLCB1aW50MzJfdCwgMCwg
IiIsICIiKSBcCiAgICAgbWFjcm8oRGF0YURldGVjdG9yVHlwZXMsIGRhdGFEZXRlY3RvclR5cGVz
LCBVSW50MzIsIHVpbnQzMl90LCAwLCAiIiwgIiIpIFwKICAgICBtYWNybyhVc2VySW50ZXJmYWNl
RGlyZWN0aW9uUG9saWN5LCB1c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5LCBVSW50MzIsIHVp
bnQzMl90LCAwLCAiIiwgIiIpIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
ZWZlcmVuY2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQ
cmVmZXJlbmNlcy5jcHAJKHJldmlzaW9uIDIyMjcxMCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlByZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBS
ZWY8V2ViUHJlZmVyZW5jZXM+IFdlYlByZWZlcmVuY2VzOjpjcmVhCiAgICAgcHJlZmVyZW5jZXMt
PnJlZ2lzdGVyRGVmYXVsdEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6amF2YUVu
YWJsZWRLZXkoKSwgdHJ1ZSk7CiAgICAgcHJlZmVyZW5jZXMtPnJlZ2lzdGVyRGVmYXVsdEJvb2xW
YWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6amF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzS2V5
KCksIHRydWUpOwogICAgIHByZWZlcmVuY2VzLT5yZWdpc3RlckRlZmF1bHRCb29sVmFsdWVGb3JL
ZXkoV2ViUHJlZmVyZW5jZXNLZXk6OnBsdWdpbnNFbmFibGVkS2V5KCksIHRydWUpOwotICAgIHBy
ZWZlcmVuY2VzLT5yZWdpc3RlckRlZmF1bHRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNl
c0tleTo6c3RvcmFnZUJsb2NraW5nUG9saWN5S2V5KCksIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
OjpBbGxvd0FsbFN0b3JhZ2UpOworICAgIHByZWZlcmVuY2VzLT5yZWdpc3RlckRlZmF1bHRVSW50
MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c3RvcmFnZUJsb2NraW5nUG9saWN5S2V5
KCksIFdlYkNvcmU6OkFsbG93QWxsU3RvcmFnZSk7CiAgICAgcmV0dXJuIHByZWZlcmVuY2VzOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkocmV2
aXNpb24gMjIyNzEwKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyNywyOSArNDI3LDI5IEBAIGlubGluZSBXS0hUVFBDb29r
aWVBY2NlcHRQb2xpY3kgdG9BUEkoSFQKICAgICByZXR1cm4ga1dLSFRUUENvb2tpZUFjY2VwdFBv
bGljeUFsd2F5czsKIH0KIAotaW5saW5lIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpTdG9yYWdl
QmxvY2tpbmdQb2xpY3kgdG9TdG9yYWdlQmxvY2tpbmdQb2xpY3koV0tTdG9yYWdlQmxvY2tpbmdQ
b2xpY3kgcG9saWN5KQoraW5saW5lIFdlYkNvcmU6OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b1N0
b3JhZ2VCbG9ja2luZ1BvbGljeShXS1N0b3JhZ2VCbG9ja2luZ1BvbGljeSBwb2xpY3kpCiB7CiAg
ICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBjYXNlIGtXS0FsbG93QWxsU3RvcmFnZToKLSAgICAg
ICAgcmV0dXJuIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2U7CisgICAg
ICAgIHJldHVybiBXZWJDb3JlOjpBbGxvd0FsbFN0b3JhZ2U7CiAgICAgY2FzZSBrV0tCbG9ja1Ro
aXJkUGFydHlTdG9yYWdlOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46
OkJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2U7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpCbG9ja1Ro
aXJkUGFydHlTdG9yYWdlOwogICAgIGNhc2Uga1dLQmxvY2tBbGxTdG9yYWdlOgotICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrQWxsU3RvcmFnZTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkJsb2NrQWxsU3RvcmFnZTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkFsbG93QWxs
U3RvcmFnZTsKKyAgICByZXR1cm4gV2ViQ29yZTo6QWxsb3dBbGxTdG9yYWdlOwogfQogCi1pbmxp
bmUgV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgdG9BUEkoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46
OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBwb2xpY3kpCitpbmxpbmUgV0tTdG9yYWdlQmxvY2tpbmdQ
b2xpY3kgdG9BUEkoV2ViQ29yZTo6U3RvcmFnZUJsb2NraW5nUG9saWN5IHBvbGljeSkKIHsKICAg
ICBzd2l0Y2ggKHBvbGljeSkgewotICAgIGNhc2UgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkFs
bG93QWxsU3RvcmFnZToKKyAgICBjYXNlIFdlYkNvcmU6OkFsbG93QWxsU3RvcmFnZToKICAgICAg
ICAgcmV0dXJuIGtXS0FsbG93QWxsU3RvcmFnZTsKLSAgICBjYXNlIFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luOjpCbG9ja1RoaXJkUGFydHlTdG9yYWdlOgorICAgIGNhc2UgV2ViQ29yZTo6QmxvY2tU
aGlyZFBhcnR5U3RvcmFnZToKICAgICAgICAgcmV0dXJuIGtXS0Jsb2NrVGhpcmRQYXJ0eVN0b3Jh
Z2U7Ci0gICAgY2FzZSBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6QmxvY2tBbGxTdG9yYWdlOgor
ICAgIGNhc2UgV2ViQ29yZTo6QmxvY2tBbGxTdG9yYWdlOgogICAgICAgICByZXR1cm4ga1dLQmxv
Y2tBbGxTdG9yYWdlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDIyMjcxMCkKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xODAsMjkgKzE4MCwyOSBAQCAtICh2b2lkKV9zZXRUZWxlcGhvbmVOdW1iZXJE
ZXRlY3Rpb25Jc0VuCiAgICAgX3ByZWZlcmVuY2VzLT5zZXRUZWxlcGhvbmVOdW1iZXJQYXJzaW5n
RW5hYmxlZCh0ZWxlcGhvbmVOdW1iZXJEZXRlY3Rpb25Jc0VuYWJsZWQpOwogfQogCi1zdGF0aWMg
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b1N0b3JhZ2VC
bG9ja2luZ1BvbGljeShfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgcG9saWN5KQorc3RhdGljIFdl
YkNvcmU6OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b1N0b3JhZ2VCbG9ja2luZ1BvbGljeShfV0tT
dG9yYWdlQmxvY2tpbmdQb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRjaCAocG9saWN5KSB7CiAg
ICAgY2FzZSBfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lBbGxvd0FsbDoKLSAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2U7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpBbGxvd0FsbFN0b3JhZ2U7CiAgICAgY2FzZSBfV0tTdG9yYWdlQmxvY2tpbmdQ
b2xpY3lCbG9ja1RoaXJkUGFydHk6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbjo6QmxvY2tUaGlyZFBhcnR5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkJs
b2NrVGhpcmRQYXJ0eVN0b3JhZ2U7CiAgICAgY2FzZSBfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lC
bG9ja0FsbDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpCbG9ja0Fs
bFN0b3JhZ2U7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpCbG9ja0FsbFN0b3JhZ2U7CiAgICAg
fQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2U7CisgICAgcmV0dXJuIFdlYkNvcmU6OkFsbG93QWxs
U3RvcmFnZTsKIH0KIAotc3RhdGljIF9XS1N0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b0FQSShXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJsb2NraW5nUG9saWN5IHBvbGljeSkKK3N0YXRp
YyBfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgdG9BUEkoV2ViQ29yZTo6U3RvcmFnZUJsb2NraW5n
UG9saWN5IHBvbGljeSkKIHsKICAgICBzd2l0Y2ggKHBvbGljeSkgewotICAgIGNhc2UgV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3RvcmFnZToKKyAgICBjYXNlIFdlYkNvcmU6OkFs
bG93QWxsU3RvcmFnZToKICAgICAgICAgcmV0dXJuIF9XS1N0b3JhZ2VCbG9ja2luZ1BvbGljeUFs
bG93QWxsOwotICAgIGNhc2UgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrVGhpcmRQYXJ0
eVN0b3JhZ2U6CisgICAgY2FzZSBXZWJDb3JlOjpCbG9ja1RoaXJkUGFydHlTdG9yYWdlOgogICAg
ICAgICByZXR1cm4gX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QmxvY2tUaGlyZFBhcnR5OwotICAg
IGNhc2UgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrQWxsU3RvcmFnZToKKyAgICBjYXNl
IFdlYkNvcmU6OkJsb2NrQWxsU3RvcmFnZToKICAgICAgICAgcmV0dXJuIF9XS1N0b3JhZ2VCbG9j
a2luZ1BvbGljeUJsb2NrQWxsOwogICAgIH0KIApAQCAtMjEyLDcgKzIxMiw3IEBAIHN0YXRpYyBf
V0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgdG9BUEkoV2UKIAogLSAoX1dLU3RvcmFnZUJsb2NraW5n
UG9saWN5KV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kKIHsKLSAgICByZXR1cm4gdG9BUEkoc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeT4oX3By
ZWZlcmVuY2VzLT5zdG9yYWdlQmxvY2tpbmdQb2xpY3koKSkpOworICAgIHJldHVybiB0b0FQSShz
dGF0aWNfY2FzdDxXZWJDb3JlOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3k+KF9wcmVmZXJlbmNlcy0+
c3RvcmFnZUJsb2NraW5nUG9saWN5KCkpKTsKIH0KIAogLSAodm9pZClfc2V0U3RvcmFnZUJsb2Nr
aW5nUG9saWN5OihfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kpcG9saWN5CkluZGV4OiBTb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjI3MTApCisrKyBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0x
MC0wMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtTZXR0aW5nc10g
Q29udmVydCBtb3JlIHNldHRpbmdzIHRvIGJlIGdlbmVyYXRlZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NzY2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAg
ICAgICgtW1dlYlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKworICAgICAgICAgICAgVXBk
YXRlIGZvciByZW5hbWVkIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS4KKwogMjAxNy0wOS0yOSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3ctdXAgdG8g
aHR0cHM6Ly90cmFjLndlYmtpdC5vcmcvcjIyMjIzOSB0byBmaXggY3Jhc2hlcy4KSW5kZXg6IFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIyMjcx
MCkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjg2NSwxMyArMjg2NSwxMyBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5n
ZWQ6KFdlYlByZWZlcmVuCiAKICAgICBzd2l0Y2ggKFtwcmVmZXJlbmNlcyBzdG9yYWdlQmxvY2tp
bmdQb2xpY3ldKSB7CiAgICAgY2FzZSBXZWJBbGxvd0FsbFN0b3JhZ2U6Ci0gICAgICAgIHNldHRp
bmdzLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9y
YWdlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KEFsbG93QWxs
U3RvcmFnZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViQmxvY2tUaGlyZFBhcnR5U3Rv
cmFnZToKLSAgICAgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5
T3JpZ2luOjpCbG9ja1RoaXJkUGFydHlTdG9yYWdlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3Rv
cmFnZUJsb2NraW5nUG9saWN5KEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIFdlYkJsb2NrQWxsU3RvcmFnZToKLSAgICAgICAgc2V0dGluZ3Muc2V0U3Rv
cmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpCbG9ja0FsbFN0b3JhZ2UpOworICAg
ICAgICBzZXR0aW5ncy5zZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koQmxvY2tBbGxTdG9yYWdlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322489</attachid>
            <date>2017-10-02 20:44:47 -0700</date>
            <delta_ts>2017-10-18 14:07:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177766-20171002204446.patch</filename>
            <type>text/plain</type>
            <size>200143</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDE3LTEwLTAyICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBDb252ZXJ0IG1vcmUg
c2V0dGluZ3MgdG8gYmUgZ2VuZXJhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIGNoYW5nZXMgdGhlIHN0cmF0ZWd5IGZvciBTZXR0aW5ncyBn
ZW5lcmF0aW9uIGFyb3VuZCBhIGJpdC4gUHJldmlvdXNseSwKKyAgICAgICAgd2UgZ2VuZXJhdGVk
IGEgY2xhc3MgY2FsbGVkIFNldHRpbmdzR2VuZXJhdGVkIGFuZCBoYWQgb3VyIGhhbmQgd3JpdHRl
biBTZXR0aW5ncworICAgICAgICBpbmhlcml0IGZyb20gaXQuIE5vdywgaW5zdGVhZCwgdGhlIGhh
bmQgd3JpdHRlbiBiaXQgaGFzIGJlZW4gcmVuYW1lZCB0byAKKyAgICAgICAgU2V0dGluZ3NCYXNl
IGFuZCB0aGUgZ2VuZXJhdGVkIHBhcnQgaXMgY2FsbGVkIFNldHRpbmdzIGFuZCBpdCBpbmhlcml0
cyBmcm9tCisgICAgICAgIHRoZSBoYW5kIHdyaXR0ZW4gY2xhc3MuIFRoaXMgYWxsb3dzIHVzIHRv
IGFkZCBoZWxwZXJzIGluIHRoZSBiYXNlIGNsYXNzIHRoYXQKKyAgICAgICAgdGhlIGdlbmVyYXRl
ZCBjb2RlIGNhbiBjYWxsLgorICAgICAgICAKKyAgICAgICAgVG8gbWFrZSB1c2Ugb2YgdGhpcyBu
ZXcgc3R1Y3R1cmUsIFNldHRpbmdzLmluIGhhcyByZXBsYWNlZCBpdHMgIAorICAgICAgICAnc2V0
TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzJyB3aXRoIGEgbW9yZSBnZW5lcmljICdvbkNoYW5n
ZT1mdW5jdGlvbk5hbWUnCisgICAgICAgIHRoYXQgZ2V0cyB0cmlnZ2VyZWQgd2hlbiBhIHNldHRp
bmcgY2hhbmdlcy4gVGhpcyBhbGxvd3MgdXMgdG8gbW92ZSBtb3N0IG9mCisgICAgICAgIHRoZSBy
ZW1haW5pbmcgbm9uLWdsb2JhbCBzZXR0aW5ncyB0byBTZXR0aW5ncy5pbi4KKyAgICAgICAgCisg
ICAgICAgIAorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogV2ViQ29y
ZU1hY3Jvcy5jbWFrZToKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisKKyAgICAgICAgICAgIFVwZGF0ZSBmb3IgbmV3IGZpbGVzIGFuZCByZW5hbWVzLgorCisg
ICAgICAgICogU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRlU2V0dGluZ3NIZWFkZXJG
aWxlLnB5OgorICAgICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRp
bmdzSW1wbGVtZW50YXRpb25GaWxlLnB5OgorICAgICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0
aW5ncy9TZXR0aW5ncy5weToKKworICAgICAgICAgICAgLSBDb252ZXJ0IHRvIHByb2R1Y2UgYSBk
ZXJpdmVkIGNsYXNzIGNhbGwgU2V0dGluZ3MgcmF0aGVyIHRoYW4gCisgICAgICAgICAgICAgIGEg
YmFzZSBjbGFzcyBjYWxsZWQgU2V0dGluZ3NHZW5lcmF0ZWQuCisgICAgICAgICAgICAtIFJlcGxh
Y2Ugc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzIHdpdGggb25DaGFuZ2U9ZnVuY3Rpb25O
YW1lLgorICAgICAgICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFVSTCB0eXBlLgorCisgICAg
ICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgIAorICAgICAgICAgICAgTWFrZSBTZXR0aW5nc0Jh
c2UgYSBmcmllbmQsIGxpa2UgU2V0dGluZ3MgaXMuCisgICAgICAgIAorICAgICAgICAqIHBhZ2Uv
U2VjdXJpdHlPcmlnaW4uaDoKKyAgICAgICAgKiBwYWdlL1N0b3JhZ2VCbG9ja2luZ1BvbGljeS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmguCisKKyAg
ICAgICAgICAgIE1vdmUgU3RvcmFnZUJsb2NraW5nUG9saWN5IGVudW0gb3V0IG9mIFNlY3VyaXR5
T3JpZ2luIHRvIGFsbG93IGl0IHRvIHdvcmsKKyAgICAgICAgICAgIHdpdGggdGhlIGdlbmVyYXRv
ci4KKworICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBh
Z2UvU2V0dGluZ3MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL1NldHRpbmdzQmFzZS5jcHA6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwLgorICAgICAgICAq
IHBhZ2UvU2V0dGluZ3NCYXNlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0
dGluZ3MuaC4KKyAgICAgICAgKiBwYWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1tOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQ29jb2EubW0uCisgICAg
ICAgICogcGFnZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tOiBSZW1vdmVkLgorICAgICAgICAKKyAg
ICAgICAgICAgIC0gUmVuYW1lIFNldHRpbmdzLntoLHBwfSBhbmQgU2V0dGluZ3NDb2NvYS5tbSB0
byBTZXR0aW5nc0Jhc2Uue2gsY3BwfSBhbmQgU2V0dGluZ3NCYXNlQ29jb2EubW0uCisgICAgICAg
ICAgICAtIFJlbW92ZSBoYW5kIHdyaXR0ZW4gc2V0dGluZ3MgdGhhdCBhcmUgbm93IGluIFNldHRp
bmdzLmluCisgICAgICAgICAgICAtIEFkZCBjaGFuZ2UgaGFuZGxlcnMgdXNlZCBieSB0aGUgb25D
aGFuZ2UgdmFsdWVzIGluIFNldHRpbmdzLmluCisgICAgICAgIAorICAgICAgICAqIHBhZ2UvU2V0
dGluZ3MuaW46CisKKyAgICAgICAgICAgIEFkZCBhZGRpdGlvbmFsIHNldHRpbmdzIHRvIGJlIGdl
bmVyYXRlZCBmcm9tIFNldHRpbmdzLgorCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRp
bmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsU2V0dGluZ3M6OnNldFN0b3JhZ2VC
bG9ja2luZ1BvbGljeSk6CisgICAgICAgIAorICAgICAgICAgICAgVXBkYXRlIGZvciByZW5hbWVk
IFN0b3JhZ2VCbG9ja2luZ1BvbGljeS4KKwogMjAxNy0xMC0wMiAgSm9hbm1hcmllIERpZ2dzICA8
amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAgICAgQVg6IFtBVEtdIFRoZSB2YWx1ZSBvZiBhcmlh
LWxldmVsIGlzIG5vdCBleHBvc2VkIG9uIG5vbi1oZWFkaW5nIHJvbGVzCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMjIyNzY2KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTIyNTYsNyArMjI1Niw3IEBAIHNldChXZWJDb3JlX1NP
VVJDRVMKICAgICBwYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAogICAgIHBhZ2UvU2VjdXJpdHlPcmln
aW5EYXRhLmNwcAogICAgIHBhZ2UvU2VjdXJpdHlQb2xpY3kuY3BwCi0gICAgcGFnZS9TZXR0aW5n
cy5jcHAKKyAgICBwYWdlL1NldHRpbmdzQmFzZS5jcHAKICAgICBwYWdlL1NvY2tldFByb3ZpZGVy
LmNwcAogICAgIHBhZ2UvU3BhdGlhbE5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9TdXNwZW5kYWJs
ZVRpbWVyLmNwcApAQCAtNDAyMyw5ICs0MDIzLDkgQEAgR0VORVJBVEVfRVZFTlRfRkFDVE9SWSgk
e1dFQkNPUkVfRElSfS9kbwogbGlzdChBUFBFTkQgV2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtE
RVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0V2ZW50VGFyZ2V0SW50ZXJmYWNlcy5oKQogCiAK
LUdFTkVSQVRFX1NFVFRJTkdTX01BQ1JPUygke1dFQkNPUkVfRElSfS9wYWdlL1NldHRpbmdzLmlu
IFNldHRpbmdzR2VuZXJhdGVkLmgpCi1saXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNF
UyAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJUn0vU2V0dGluZ3NHZW5lcmF0ZWQuaCkKLWxp
c3QoQVBQRU5EIFdlYkNvcmVfREVSSVZFRF9TT1VSQ0VTICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNP
UkVfRElSfS9TZXR0aW5nc0dlbmVyYXRlZC5jcHApCitHRU5FUkFURV9TRVRUSU5HU19NQUNST1Mo
JHtXRUJDT1JFX0RJUn0vcGFnZS9TZXR0aW5ncy5pbiBTZXR0aW5ncy5oKQorbGlzdChBUFBFTkQg
V2ViQ29yZV9ERVJJVkVEX1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1Nl
dHRpbmdzLmgpCitsaXN0KEFQUEVORCBXZWJDb3JlX0RFUklWRURfU09VUkNFUyAke0RFUklWRURf
U09VUkNFU19XRUJDT1JFX0RJUn0vU2V0dGluZ3MuY3BwKQogbGlzdChBUFBFTkQgV2ViQ29yZVRl
c3RTdXBwb3J0X1NPVVJDRVMgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L0ludGVybmFs
U2V0dGluZ3NHZW5lcmF0ZWQuY3BwKQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQkocmV2aXNpb24gMjIyNzY2KQorKysgU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTM4Niw4ICsxMzg2LDggQEAgR0VORVJBVEVfU0VUVElO
R1NfU0NSSVBUUyA9IFwKICAgICAkKFdlYkNvcmUpL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9T
ZXR0aW5ncy5weSBcCiAgICAgJChXZWJDb3JlKS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3MvX19p
bml0X18ucHkKIAotYWxsIDogSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5pZGwgSW50ZXJuYWxT
ZXR0aW5nc0dlbmVyYXRlZC5jcHAgSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIFNldHRpbmdz
R2VuZXJhdGVkLmNwcCBTZXR0aW5nc0dlbmVyYXRlZC5oCi1JbnRlcm5hbFNldHRpbmdzR2VuZXJh
dGVkJWlkbCBJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkJWNwcCBJbnRlcm5hbFNldHRpbmdzR2Vu
ZXJhdGVkJWggU2V0dGluZ3NHZW5lcmF0ZWQlY3BwIFNldHRpbmdzR2VuZXJhdGVkJWggOiAkKFdl
YkNvcmUpL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy5weSAkKEdFTkVSQVRFX1NFVFRJTkdTX1ND
UklQVFMpIHBhZ2UvU2V0dGluZ3MuaW4KK2FsbCA6IEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQu
aWRsIEludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIEludGVybmFsU2V0dGluZ3NHZW5lcmF0
ZWQuaCBTZXR0aW5ncy5jcHAgU2V0dGluZ3MuaAorSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZCVp
ZGwgSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZCVjcHAgSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZCVoIFNldHRpbmdzJWNwcCBTZXR0aW5ncyVoIDogJChXZWJDb3JlKS9TY3JpcHRzL0dlbmVyYXRl
U2V0dGluZ3MucHkgJChHRU5FUkFURV9TRVRUSU5HU19TQ1JJUFRTKSBwYWdlL1NldHRpbmdzLmlu
CiAJJChQWVRIT04pICQ8IC0taW5wdXQgJChXZWJDb3JlKS9wYWdlL1NldHRpbmdzLmluCiAKICMg
LS0tLS0tLS0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCShyZXZpc2lvbiAyMjI3NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
MjU1LDcgKzI1NSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvY29j
b2EvUGVyZm9ybWFuY2VMb2dnaW5nQ29jb2EubW0KICAgICBwYWdlL2NvY29hL1Jlc291cmNlVXNh
Z2VPdmVybGF5Q29jb2EubW0KICAgICBwYWdlL2NvY29hL1Jlc291cmNlVXNhZ2VUaHJlYWRDb2Nv
YS5tbQotICAgIHBhZ2UvY29jb2EvU2V0dGluZ3NDb2NvYS5tbQorICAgIHBhZ2UvY29jb2EvU2V0
dGluZ3NCYXNlQ29jb2EubW0KICAgICBwYWdlL2NvY29hL1VzZXJBZ2VudC5tbQogCiAgICAgcGFn
ZS9tYWMvQ2hyb21lTWFjLm1tCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlTWFjcm9zLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmVNYWNyb3MuY21ha2UJKHJl
dmlzaW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmVNYWNyb3MuY21ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBtYWNybyhHRU5FUkFURV9TRVRUSU5HU19N
QUNST1MgX2luZmlsZSBfCiAgICAgIyBidWlsZCBpbiBwYXJhbGxlbCBvciB0aGUgdHdvIGluc3Rh
bmNlcyBvZiB0aGUgcnVsZSBtYXkgY29uZmxpY3QuCiAgICAgIyA8aHR0cHM6Ly9jbWFrZS5vcmcv
Y21ha2UvaGVscC92My4wL2NvbW1hbmQvYWRkX2N1c3RvbV9jb21tYW5kLmh0bWw+CiAgICAgc2V0
KF9leHRyYV9vdXRwdXQKLSAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCQ09SRV9ESVJ9L1Nl
dHRpbmdzR2VuZXJhdGVkLmNwcAorICAgICAgICAke0RFUklWRURfU09VUkNFU19XRUJDT1JFX0RJ
Un0vU2V0dGluZ3MuY3BwCiAgICAgICAgICR7REVSSVZFRF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9J
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmgKICAgICAgICAgJHtERVJJVkVEX1NPVVJDRVNfV0VC
Q09SRV9ESVJ9L0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwCiAgICAgICAgICR7REVSSVZF
RF9TT1VSQ0VTX1dFQkNPUkVfRElSfS9JbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmlkbApJbmRl
eDogU291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRlU2V0dGlu
Z3NIZWFkZXJGaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvR2Vu
ZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSGVhZGVyRmlsZS5weQkocmV2aXNpb24gMjIy
NzY2KQorKysgU291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRl
U2V0dGluZ3NIZWFkZXJGaWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMSArMjUsMTEgQEAK
IAogaW1wb3J0IG9zLnBhdGgKIAotZnJvbSBTZXR0aW5ncyBpbXBvcnQgbGljZW5zZSwgbWFrZUNv
bmRpdGlvbmFsU3RyaW5nLCBtYWtlU2V0dGVyRnVuY3Rpb25OYW1lLCBtYWtlR2V0dGVyRnVuY3Rp
b25OYW1lLCBpbmNsdWRlRm9yU2V0dGluZywgdHlwZUlzVmFsdWVUeXBlCitmcm9tIFNldHRpbmdz
IGltcG9ydCBsaWNlbnNlLCBtYWtlQ29uZGl0aW9uYWxTdHJpbmcsIG1ha2VTZXR0ZXJGdW5jdGlv
bk5hbWUsIG1ha2VHZXR0ZXJGdW5jdGlvbk5hbWUsIGluY2x1ZGVGb3JTZXR0aW5nLCB0eXBlSXNW
YWx1ZVR5cGUsIGhhc0NvbXBsZXhTZXR0ZXIKIAogCiBkZWYgZ2VuZXJhdGVTZXR0aW5nc0hlYWRl
ckZpbGUob3V0cHV0RGlyZWN0b3J5LCBzZXR0aW5ncyk6Ci0gICAgb3V0cHV0UGF0aCA9IG9zLnBh
dGguam9pbihvdXRwdXREaXJlY3RvcnksICJTZXR0aW5nc0dlbmVyYXRlZC5oIikKKyAgICBvdXRw
dXRQYXRoID0gb3MucGF0aC5qb2luKG91dHB1dERpcmVjdG9yeSwgIlNldHRpbmdzLmgiKQogICAg
IG91dHB1dEZpbGUgPSBvcGVuKG91dHB1dFBhdGgsICd3JykKICAgICBvdXRwdXRGaWxlLndyaXRl
KGxpY2Vuc2UoKSkKIApAQCAtNTAsNyArNTAsNyBAQCBkZWYgZ2VuZXJhdGVTZXR0aW5nc0hlYWRl
ckZpbGUob3V0cHV0RGlyCiAKICAgICBvdXRwdXRGaWxlLndyaXRlKCIjcHJhZ21hIG9uY2Vcblxu
IikKIAotICAgIG91dHB1dEZpbGUud3JpdGUoIiNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPlxu
XG4iKQorICAgIG91dHB1dEZpbGUud3JpdGUoIiNpbmNsdWRlIFwiU2V0dGluZ3NCYXNlLmhcIlxu
XG4iKQogCiAgICAgcHJpbnRJbmNsdWRlcyhvdXRwdXRGaWxlLCBzb3J0ZWRVbmNvbmRpdGlvbmFs
U2V0dGluZ3NOYW1lcywgc29ydGVkQ29uZGl0aW9uYWxzLCBzZXR0aW5nc0J5Q29uZGl0aW9uYWws
IHNldHRpbmdzKQogCkBAIC01OCwxNyArNTgsMTcgQEAgZGVmIGdlbmVyYXRlU2V0dGluZ3NIZWFk
ZXJGaWxlKG91dHB1dERpcgogCiAgICAgb3V0cHV0RmlsZS53cml0ZSgiY2xhc3MgUGFnZTtcblxu
IikKIAotICAgIG91dHB1dEZpbGUud3JpdGUoImNsYXNzIFNldHRpbmdzR2VuZXJhdGVkIDogcHVi
bGljIFJlZkNvdW50ZWQ8U2V0dGluZ3NHZW5lcmF0ZWQ+IHtcbiIpCisgICAgb3V0cHV0RmlsZS53
cml0ZSgiY2xhc3MgU2V0dGluZ3MgOiBwdWJsaWMgU2V0dGluZ3NCYXNlIHtcbiIpCiAgICAgb3V0
cHV0RmlsZS53cml0ZSgicHVibGljOlxuIikKLSAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgflNl
dHRpbmdzR2VuZXJhdGVkKCk7XG5cbiIpCisgICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIHN0YXRp
YyBSZWY8U2V0dGluZ3M+IGNyZWF0ZShQYWdlKik7XG5cbiIpCisgICAgb3V0cHV0RmlsZS53cml0
ZSgiICAgIH5TZXR0aW5ncygpO1xuXG4iKQogCiAgICAgcHJpbnRHZXR0ZXJzQW5kU2V0dGVycyhv
dXRwdXRGaWxlLCBzb3J0ZWRVbmNvbmRpdGlvbmFsU2V0dGluZ3NOYW1lcywgc29ydGVkQ29uZGl0
aW9uYWxzLCBzZXR0aW5nc0J5Q29uZGl0aW9uYWwsIHNldHRpbmdzKQogCiAgICAgb3V0cHV0Rmls
ZS53cml0ZSgiXG4iKQotICAgIG91dHB1dEZpbGUud3JpdGUoInByb3RlY3RlZDpcbiIpCi0gICAg
b3V0cHV0RmlsZS53cml0ZSgiICAgIFNldHRpbmdzR2VuZXJhdGVkKCk7XG5cbiIpCisgICAgb3V0
cHV0RmlsZS53cml0ZSgicHJpdmF0ZTpcbiIpCisgICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIFNl
dHRpbmdzKFBhZ2UqKTtcblxuIikKIAotICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICBQYWdlKiBt
X3BhZ2UgeyBudWxscHRyIH07XG4iKQogICAgIHByaW50TWVtYmVyVmFyaWFibGVzKG91dHB1dEZp
bGUsIHNvcnRlZFVuY29uZGl0aW9uYWxTZXR0aW5nc05hbWVzLCBzb3J0ZWRDb25kaXRpb25hbHMs
IHNldHRpbmdzQnlDb25kaXRpb25hbCwgc2V0dGluZ3MpCiAKICAgICBvdXRwdXRGaWxlLndyaXRl
KCJ9O1xuXG4iKQpAQCAtMTE1LDcgKzExNSw3IEBAIGRlZiBwcmludEdldHRlckFuZFNldHRlcihv
dXRwdXRGaWxlLCBzZXQKICAgICBnZXR0ZXJGdW5jdGlvbk5hbWUgPSBtYWtlR2V0dGVyRnVuY3Rp
b25OYW1lKHNldHRpbmcpCiAKICAgICAjIEV4cG9ydCBpcyBvbmx5IG5lZWRlZCBpZiB0aGUgZGVm
aW5pdGlvbiBpcyBub3QgaW4gdGhlIGhlYWRlci4KLSAgICB3ZWJjb3JlRXhwb3J0ID0gIldFQkNP
UkVfRVhQT1JUICIgaWYgc2V0dGluZy5zZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXMgZWxz
ZSAiIgorICAgIHdlYmNvcmVFeHBvcnQgPSAiV0VCQ09SRV9FWFBPUlQgIiBpZiBoYXNDb21wbGV4
U2V0dGVyKHNldHRpbmcpIGVsc2UgIiIKIAogICAgIGlmIG5vdCB0eXBlSXNWYWx1ZVR5cGUoc2V0
dGluZyk6CiAgICAgICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICAiICsgc2V0dGluZy50eXBlICsg
IiAiICsgZ2V0dGVyRnVuY3Rpb25OYW1lICsgIigpIGNvbnN0IHsgcmV0dXJuIG1fIiArIHNldHRp
bmcubmFtZSArICI7IH0gXG4iKQpAQCAtMTI0LDcgKzEyNCw3IEBAIGRlZiBwcmludEdldHRlckFu
ZFNldHRlcihvdXRwdXRGaWxlLCBzZXQKICAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIGNv
bnN0ICIgKyBzZXR0aW5nLnR5cGUgKyAiJiAiICsgZ2V0dGVyRnVuY3Rpb25OYW1lICsgIigpIGNv
bnN0IHsgcmV0dXJuIG1fIiArIHNldHRpbmcubmFtZSArICI7IH0gXG4iKQogICAgICAgICBvdXRw
dXRGaWxlLndyaXRlKCIgICAgIiArIHdlYmNvcmVFeHBvcnQgKyAidm9pZCAiICsgc2V0dGVyRnVu
Y3Rpb25OYW1lICsgIihjb25zdCAiICsgc2V0dGluZy50eXBlICsgIiYgIiArIHNldHRpbmcubmFt
ZSArICIpIikKIAotICAgIGlmIHNldHRpbmcuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVz
OgorICAgIGlmIGhhc0NvbXBsZXhTZXR0ZXIoc2V0dGluZyk6CiAgICAgICAgIG91dHB1dEZpbGUu
d3JpdGUoIjtcblxuIikKICAgICBlbHNlOgogICAgICAgICBvdXRwdXRGaWxlLndyaXRlKCIgeyBt
XyIgKyBzZXR0aW5nLm5hbWUgKyAiID0gIiArIHNldHRpbmcubmFtZSArICI7IH1cblxuIikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRp
bmdzSW1wbGVtZW50YXRpb25GaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1Nj
cmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50YXRpb25GaWxl
LnB5CShyZXZpc2lvbiAyMjI3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRl
U2V0dGluZ3MvR2VuZXJhdGVTZXR0aW5nc0ltcGxlbWVudGF0aW9uRmlsZS5weQkod29ya2luZyBj
b3B5KQpAQCAtMjUsMTEgKzI1LDExIEBACiAKIGltcG9ydCBvcy5wYXRoCiAKLWZyb20gU2V0dGlu
Z3MgaW1wb3J0IGxpY2Vuc2UsIG1ha2VDb25kaXRpb25hbFN0cmluZywgbWFrZVNldHRlckZ1bmN0
aW9uTmFtZSwgdHlwZUlzVmFsdWVUeXBlCitmcm9tIFNldHRpbmdzIGltcG9ydCBsaWNlbnNlLCBt
YWtlQ29uZGl0aW9uYWxTdHJpbmcsIG1ha2VTZXR0ZXJGdW5jdGlvbk5hbWUsIG1ha2VTZXR0ZXJD
aGFuZ2VGdW5jdGlvbk5hbWUsIHR5cGVJc1ZhbHVlVHlwZSwgaGFzQ29tcGxleFNldHRlcgogCiAK
IGRlZiBnZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50YXRpb25GaWxlKG91dHB1dERpcmVjdG9yeSwg
c2V0dGluZ3MpOgotICAgIG91dHB1dFBhdGggPSBvcy5wYXRoLmpvaW4ob3V0cHV0RGlyZWN0b3J5
LCAiU2V0dGluZ3NHZW5lcmF0ZWQuY3BwIikKKyAgICBvdXRwdXRQYXRoID0gb3MucGF0aC5qb2lu
KG91dHB1dERpcmVjdG9yeSwgIlNldHRpbmdzLmNwcCIpCiAgICAgb3V0cHV0RmlsZSA9IG9wZW4o
b3V0cHV0UGF0aCwgJ3cnKQogICAgIG91dHB1dEZpbGUud3JpdGUobGljZW5zZSgpKQogCkBAIC00
OSwxNiArNDksMjEgQEAgZGVmIGdlbmVyYXRlU2V0dGluZ3NJbXBsZW1lbnRhdGlvbkZpbGUobwog
ICAgIHNvcnRlZENvbmRpdGlvbmFscyA9IHNvcnRlZChzZXR0aW5nc0J5Q29uZGl0aW9uYWwuaXRl
cmtleXMoKSkKIAogICAgIG91dHB1dEZpbGUud3JpdGUoIiNpbmNsdWRlIFwiY29uZmlnLmhcIlxu
IikKLSAgICBvdXRwdXRGaWxlLndyaXRlKCIjaW5jbHVkZSBcIlNldHRpbmdzR2VuZXJhdGVkLmhc
IlxuXG4iKQorICAgIG91dHB1dEZpbGUud3JpdGUoIiNpbmNsdWRlIFwiU2V0dGluZ3MuaFwiXG5c
biIpCiAKICAgICBvdXRwdXRGaWxlLndyaXRlKCIjaW5jbHVkZSBcIlBhZ2UuaFwiXG4iKQogICAg
IG91dHB1dEZpbGUud3JpdGUoIiNpbmNsdWRlIFwiU2V0dGluZ3NEZWZhdWx0VmFsdWVzLmhcIlxu
XG4iKQogCiAgICAgb3V0cHV0RmlsZS53cml0ZSgibmFtZXNwYWNlIFdlYkNvcmUge1xuXG4iKQog
CisgICAgb3V0cHV0RmlsZS53cml0ZSgiUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBh
Z2UqIHBhZ2UpXG4iKQorICAgIG91dHB1dEZpbGUud3JpdGUoIntcbiIpCisgICAgb3V0cHV0Rmls
ZS53cml0ZSgiICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNldHRpbmdzKHBhZ2UpKTtcbiIpCisg
ICAgb3V0cHV0RmlsZS53cml0ZSgifVxuXG4iKQorCiAgICAgcHJpbnRDb25zdHJ1Y3RvcihvdXRw
dXRGaWxlLCBzb3J0ZWRVbmNvbmRpdGlvbmFsU2V0dGluZ3NOYW1lcywgc29ydGVkQ29uZGl0aW9u
YWxzLCBzZXR0aW5nc0J5Q29uZGl0aW9uYWwsIHNldHRpbmdzKQogCi0gICAgb3V0cHV0RmlsZS53
cml0ZSgiU2V0dGluZ3NHZW5lcmF0ZWQ6On5TZXR0aW5nc0dlbmVyYXRlZCgpXG4iKQorICAgIG91
dHB1dEZpbGUud3JpdGUoIlNldHRpbmdzOjp+U2V0dGluZ3MoKVxuIikKICAgICBvdXRwdXRGaWxl
LndyaXRlKCJ7XG4iKQogICAgIG91dHB1dEZpbGUud3JpdGUoIn1cblxuIikKIApAQCAtODYsMTEg
KzkxLDcgQEAgZGVmIHByaW50SW5pdGlhbGl6ZXIob3V0cHV0RmlsZSwgc2V0dGluZwogICAgIGlm
IG5vdCBuZWVkc0luaXRpYWxpemVyKHNldHRpbmcsIHN0YXRlKToKICAgICAgICAgcmV0dXJuCiAK
LSAgICBpZiBub3Qgc3RhdGVbImhhbmRsZWRGaXJzdFZhcmlhYmxlIl06Ci0gICAgICAgIG91dHB1
dEZpbGUud3JpdGUoIiAgICA6IG1fIiArIHNldHRpbmcubmFtZSArICIoIiArIHNldHRpbmcuaW5p
dGlhbCArICIpXG4iKQotICAgICAgICBzdGF0ZVsiaGFuZGxlZEZpcnN0VmFyaWFibGUiXSA9IFRy
dWUKLSAgICBlbHNlOgotICAgICAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgLCBtXyIgKyBzZXR0
aW5nLm5hbWUgKyAiKCIgKyBzZXR0aW5nLmluaXRpYWwgKyAiKVxuIikKKyAgICBvdXRwdXRGaWxl
LndyaXRlKCIgICAgLCBtXyIgKyBzZXR0aW5nLm5hbWUgKyAiKCIgKyBzZXR0aW5nLmluaXRpYWwg
KyAiKVxuIikKIAogCiBkZWYgcHJpbnRDb25kaXRpb25hbEluaXRpYWxpemVycyhvdXRwdXRGaWxl
LCBjb25kaXRpb25hbCwgc2V0dGluZ3NCeUNvbmRpdGlvbmFsLCBzZXR0aW5ncywgc3RhdGUpOgpA
QCAtMTE2LDEwICsxMTcsMTAgQEAgZGVmIHByaW50Q29uZGl0aW9uYWxJbml0aWFsaXplcnMob3V0
cHV0RgogCiAKIGRlZiBwcmludENvbnN0cnVjdG9yKG91dHB1dEZpbGUsIHNvcnRlZFVuY29uZGl0
aW9uYWxTZXR0aW5nc05hbWVzLCBzb3J0ZWRDb25kaXRpb25hbHMsIHNldHRpbmdzQnlDb25kaXRp
b25hbCwgc2V0dGluZ3MpOgotICAgIG91dHB1dEZpbGUud3JpdGUoIlNldHRpbmdzR2VuZXJhdGVk
OjpTZXR0aW5nc0dlbmVyYXRlZCgpXG4iKQorICAgIG91dHB1dEZpbGUud3JpdGUoIlNldHRpbmdz
OjpTZXR0aW5ncyhQYWdlKiBwYWdlKVxuIikKKyAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgOiBT
ZXR0aW5nc0Jhc2UocGFnZSlcbiIpCiAKICAgICBzdGF0ZSA9IHsKLSAgICAgICAgImhhbmRsZWRG
aXJzdFZhcmlhYmxlIjogRmFsc2UsCiAgICAgICAgICJwcm9jZXNzaW5nQm9vbCI6IFRydWUKICAg
ICB9CiAKQEAgLTE0NCw3ICsxNDUsNyBAQCBkZWYgcHJpbnRDb25zdHJ1Y3RvcihvdXRwdXRGaWxl
LCBzb3J0ZWRVCiAKIAogZGVmIG5lZWRzU2V0dGVyQm9keShzZXR0aW5nKToKLSAgICBpZiBzZXR0
aW5nLnNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lczoKKyAgICBpZiBoYXNDb21wbGV4U2V0
dGVyKHNldHRpbmcpOgogICAgICAgICByZXR1cm4gVHJ1ZQogICAgIHJldHVybiBGYWxzZQogCkBA
IC0xNTQsMTcgKzE1NSwxOCBAQCBkZWYgcHJpbnRTZXR0ZXJCb2R5KG91dHB1dEZpbGUsIHNldHRp
bmcpCiAgICAgICAgIHJldHVybgogCiAgICAgc2V0dGVyRnVuY3Rpb25OYW1lID0gbWFrZVNldHRl
ckZ1bmN0aW9uTmFtZShzZXR0aW5nKQorICAgIGNoYW5nZUZ1bmN0aW9uTmFtZSA9IG1ha2VTZXR0
ZXJDaGFuZ2VGdW5jdGlvbk5hbWUoc2V0dGluZykKIAogICAgIGlmIG5vdCB0eXBlSXNWYWx1ZVR5
cGUoc2V0dGluZyk6Ci0gICAgICAgIG91dHB1dEZpbGUud3JpdGUoInZvaWQgU2V0dGluZ3NHZW5l
cmF0ZWQ6OiIgKyBzZXR0ZXJGdW5jdGlvbk5hbWUgKyAiKCIgKyBzZXR0aW5nLnR5cGUgKyAiICIg
KyBzZXR0aW5nLm5hbWUgKyAiKVxuIikKKyAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgidm9pZCBT
ZXR0aW5nczo6IiArIHNldHRlckZ1bmN0aW9uTmFtZSArICIoIiArIHNldHRpbmcudHlwZSArICIg
IiArIHNldHRpbmcubmFtZSArICIpXG4iKQogICAgIGVsc2U6Ci0gICAgICAgIG91dHB1dEZpbGUu
d3JpdGUoInZvaWQgU2V0dGluZ3NHZW5lcmF0ZWQ6OiIgKyBzZXR0ZXJGdW5jdGlvbk5hbWUgKyAi
KGNvbnN0ICIgKyBzZXR0aW5nLnR5cGUgKyAiJiAiICsgc2V0dGluZy5uYW1lICsgIilcbiIpCisg
ICAgICAgIG91dHB1dEZpbGUud3JpdGUoInZvaWQgU2V0dGluZ3M6OiIgKyBzZXR0ZXJGdW5jdGlv
bk5hbWUgKyAiKGNvbnN0ICIgKyBzZXR0aW5nLnR5cGUgKyAiJiAiICsgc2V0dGluZy5uYW1lICsg
IilcbiIpCiAKICAgICBvdXRwdXRGaWxlLndyaXRlKCJ7XG4iKQogICAgIG91dHB1dEZpbGUud3Jp
dGUoIiAgICBpZiAobV8iICsgc2V0dGluZy5uYW1lICsgIiA9PSAiICsgc2V0dGluZy5uYW1lICsg
IilcbiIpCiAgICAgb3V0cHV0RmlsZS53cml0ZSgiICAgICAgICByZXR1cm47XG4iKQogICAgIG91
dHB1dEZpbGUud3JpdGUoIiAgICBtXyIgKyBzZXR0aW5nLm5hbWUgKyAiID0gIiArIHNldHRpbmcu
bmFtZSArICI7XG4iKQotICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICBtX3BhZ2UtPnNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpO1xuIikKKyAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAg
IiArIGNoYW5nZUZ1bmN0aW9uTmFtZSArICIoKTtcbiIpCiAgICAgb3V0cHV0RmlsZS53cml0ZSgi
fVxuXG4iKQogCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5n
cy9TZXR0aW5ncy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVy
YXRlU2V0dGluZ3MvU2V0dGluZ3MucHkJKHJldmlzaW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJD
b3JlL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9TZXR0aW5ncy5weQkod29ya2luZyBjb3B5KQpA
QCAtNjQsOSArNjQsOSBAQCBjbGFzcyBTZXR0aW5nOgogICAgICAgICBzZWxmLnR5cGUgPSAiYm9v
bCIKICAgICAgICAgc2VsZi5pbml0aWFsID0gTm9uZQogICAgICAgICBzZWxmLmNvbmRpdGlvbmFs
ID0gTm9uZQotICAgICAgICBzZWxmLnNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyA9IE5v
bmUKICAgICAgICAgc2VsZi5pbmNsdWRlID0gTm9uZQogICAgICAgICBzZWxmLmdldHRlciA9IE5v
bmUKKyAgICAgICAgc2VsZi5vbkNoYW5nZSA9IE5vbmUKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYp
OgogICAgICAgICByZXN1bHQgPSBzZWxmLm5hbWUgKyAiIFRZUEU6IiArIHNlbGYudHlwZQpAQCAt
NzQsMTIgKzc0LDEyIEBAIGNsYXNzIFNldHRpbmc6CiAgICAgICAgICAgICByZXN1bHQgKz0gIiBJ
TklUOiIgKyBzZWxmLmluaXRpYWwKICAgICAgICAgaWYgKHNlbGYuY29uZGl0aW9uYWwpOgogICAg
ICAgICAgICAgcmVzdWx0ICs9ICIgQ09ORDoiICsgc2VsZi5jb25kaXRpb25hbAotICAgICAgICBp
ZiAoc2VsZi5zZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXMpOgotICAgICAgICAgICAgcmVz
dWx0ICs9ICIgUkVDQUxDOiIgKyBzZWxmLnNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcwog
ICAgICAgICBpZiAoc2VsZi5pbmNsdWRlKToKICAgICAgICAgICAgIHJlc3VsdCArPSAiIElOQ0xV
REU6IiArIHNlbGYuaW5jbHVkZQogICAgICAgICBpZiAoc2VsZi5nZXR0ZXIpOgogICAgICAgICAg
ICAgcmVzdWx0ICs9ICIgR0VUVEVSOiIgKyBzZWxmLmdldHRlcgorICAgICAgICBpZiAoc2VsZi5v
bkNoYW5nZSk6CisgICAgICAgICAgICByZXN1bHQgKz0gIiBDSEFOR0U6IiArIHNlbGYub25DaGFu
Z2UKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAKQEAgLTg4LDcgKzg4LDcgQEAgZGVmIHVwcGVy
Y2FzZUZpcnN0TihzdHJpbmcsIG4pOgogCiAKIGRlZiBtYWtlU2V0dGVyRnVuY3Rpb25OYW1lKHNl
dHRpbmcpOgotICAgIGZvciBwcmVmaXggaW4gWyJjc3MiLCAieHNzIiwgImZ0cCIsICJkb20iXToK
KyAgICBmb3IgcHJlZml4IGluIFsiY3NzIiwgInhzcyIsICJmdHAiLCAiZG9tIiwgImRucyJdOgog
ICAgICAgICBpZiBzZXR0aW5nLm5hbWUuc3RhcnRzd2l0aChwcmVmaXgpOgogICAgICAgICAgICAg
cmV0dXJuICJzZXQiICsgdXBwZXJjYXNlRmlyc3ROKHNldHRpbmcubmFtZSwgbGVuKHByZWZpeCkp
CiAgICAgcmV0dXJuICJzZXQiICsgdXBwZXJjYXNlRmlyc3ROKHNldHRpbmcubmFtZSwgMSkKQEAg
LTE0Myw2ICsxNDMsOCBAQCBkZWYgdHlwZUlzUHJpbWl0aXZlKHNldHRpbmcpOgogZGVmIHR5cGVJ
c1ZhbHVlVHlwZShzZXR0aW5nKToKICAgICBpZiBzZXR0aW5nLnR5cGUgPT0gJ1N0cmluZyc6CiAg
ICAgICAgIHJldHVybiBUcnVlCisgICAgaWYgc2V0dGluZy50eXBlID09ICdVUkwnOgorICAgICAg
ICByZXR1cm4gVHJ1ZQogCiAgICAgcmV0dXJuIEZhbHNlCiAKQEAgLTE2Nyw2ICsxNjksMTYgQEAg
ZGVmIGluY2x1ZGVGb3JTZXR0aW5nKHNldHRpbmcpOgogICAgIHJldHVybiAiXCIiICsgc2V0dGlu
Zy50eXBlICsgIi5oXCIiCiAKIAorZGVmIG1ha2VTZXR0ZXJDaGFuZ2VGdW5jdGlvbk5hbWUoc2V0
dGluZyk6CisgICAgaWYgc2V0dGluZy5vbkNoYW5nZToKKyAgICAgICAgcmV0dXJuIHNldHRpbmcu
b25DaGFuZ2UKKyAgICByZXR1cm4gTm9uZQorCisKK2RlZiBoYXNDb21wbGV4U2V0dGVyKHNldHRp
bmcpOgorICAgIHJldHVybiBtYWtlU2V0dGVyQ2hhbmdlRnVuY3Rpb25OYW1lKHNldHRpbmcpICE9
IE5vbmUKKworCiBkZWYgcGFyc2VJbnB1dChpbnB1dCk6CiAgICAgc2V0dGluZ3MgPSB7fQogICAg
IGZvciBsaW5lIGluIG9wZW4oaW5wdXQsICJyIik6CkBAIC0xODQsMTIgKzE5NiwxMiBAQCBkZWYg
cGFyc2VJbnB1dChpbnB1dCk6CiAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuaW5pdGlhbCA9
IHZhbHVlCiAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ2NvbmRpdGlvbmFsJyk6CiAgICAg
ICAgICAgICAgICAgICAgIHNldHRpbmcuY29uZGl0aW9uYWwgPSB2YWx1ZQotICAgICAgICAgICAg
ICAgIGlmIChuYW1lID09ICdzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXMnKToKLSAgICAg
ICAgICAgICAgICAgICAgc2V0dGluZy5zZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXMgPSB2
YWx1ZQogICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICdpbmNsdWRlJyk6CiAgICAgICAgICAg
ICAgICAgICAgIHNldHRpbmcuaW5jbHVkZSA9IHZhbHVlCiAgICAgICAgICAgICAgICAgaWYgKG5h
bWUgPT0gJ2dldHRlcicpOgogICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLmdldHRlciA9IHZh
bHVlCisgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ29uQ2hhbmdlJyk6CisgICAgICAgICAg
ICAgICAgICAgIHNldHRpbmcub25DaGFuZ2UgPSB2YWx1ZQogCiAgICAgICAgICAgICAjIEZJWE1F
OiBBU1NFUlQgc29tZXRoaW5nIGFib3V0IHNldHRpbmcuaW5pdGlhbAogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAyMjI3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTYzOSw3ICs2MzksNyBAQAogCQkxNDk0N0ZGRTEyRjgw
Q0QyMDBBMEY2MzEgLyogRG9jdW1lbnRPcmRlcmVkTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk0N0ZGQzEyRjgwQ0QyMDBBMEY2MzEgLyogRG9j
dW1lbnRPcmRlcmVkTWFwLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDk5M0JF
MzBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJMTQ5OTNC
RTYwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQ5OTNCRTQwQjJGMkIxQzAwNTA0OTdGIC8q
IEZvY3VzQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5ncy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEM5QTVFOTBCM0Qx
MDVGMDA1QTAyMzIgLyogU2V0dGluZ3MuY3BwICovOyB9OworCQkxNEM5QTVFQTBCM0QxMDVGMDA1
QTAyMzIgLyogU2V0dGluZ3NCYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5nc0Jhc2Uu
Y3BwICovOyB9OwogCQkxNENGN0IzMzA5RjZFQ0Q3MDBFQjM2NjUgLyogSlNDU1NSdWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0Q0Y3QjMxMDlG
NkVDRDcwMEVCMzY2NSAvKiBKU0NTU1J1bGUuY3BwICovOyB9OwogCQkxNENGN0IzNDA5RjZFQ0Q3
MDBFQjM2NjUgLyogSlNDU1NSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxNENGN0IzMjA5RjZFQ0Q3MDBFQjM2NjUgLyogSlNDU1NSdWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTRENjRCNUMx
MzRBNUI2QjAwRTU4RkRBIC8qIFRyZWVTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEQ2NEI1QTEzNEE1QjZCMDBFNThGREEgLyogVHJlZVNj
b3BlLmNwcCAqLzsgfTsKQEAgLTMxNTEsOCArMzE1MSw4IEBACiAJCTdBRjlCMjBFMThDRkI1RjQw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gN0FGOUIyMEExOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVn
aW9uTGlzdC5jcHAgKi87IH07CiAJCTdBRjlCMjBGMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJl
Z2lvbkxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDdBRjlCMjBCMThDRkI1RjMwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCAqLzsgfTsKIAkJ
N0JFNzQyNzM4MUZBOTA2RkJCNEYwRjJDIC8qIEpTU1ZHR3JhcGhpY3NFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5NTBDNEMwMkJFRDg5MzZG
ODE4RTJGOTkgLyogSlNTVkdHcmFwaGljc0VsZW1lbnQuaCAqLzsgfTsKLQkJN0MwMTdDQjYxRjdF
NzA0QjAwNDQ0RTlCIC8qIFNldHRpbmdzR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDE3Q0IyMUY3RTZGRkYwMDQ0NEU5QiAvKiBT
ZXR0aW5nc0dlbmVyYXRlZC5jcHAgKi87IH07Ci0JCTdDMDE3Q0I3MUY3RTcwNTAwMDQ0NEU5QiAv
KiBTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gN0MwMTdDQjMxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzR2VuZXJhdGVk
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJN0Mw
MTdDQjYxRjdFNzA0QjAwNDQ0RTlCIC8qIFNldHRpbmdzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMDE3Q0IyMUY3RTZGRkYwMDQ0NEU5QiAvKiBT
ZXR0aW5ncy5jcHAgKi87IH07CisJCTdDMDE3Q0I3MUY3RTcwNTAwMDQ0NEU5QiAvKiBTZXR0aW5n
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MwMTdD
QjMxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0MwMTdDQkIxRjdFOTdDRTAwNDQ0RTlCIC8qIERl
YnVnT3ZlcmxheVJlZ2lvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDMDE3Q0JBMUY3RTk3Q0UwMDQ0NEU5QiAvKiBEZWJ1Z092ZXJsYXlSZWdpb25z
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0Mw
MTdDQkQxRjdFOTgzNzAwNDQ0RTlCIC8qIEVkaXRhYmxlTGlua0JlaGF2aW9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzAxN0NCQzFGN0U5ODM3MDA0
NDRFOUIgLyogRWRpdGFibGVMaW5rQmVoYXZpb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzAxN0NCRjFGN0U5ODg4MDA0NDRFOUIgLyogRm9y
Y2VkQWNjZXNzaWJpbGl0eVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3QzAxN0NCRTFGN0U5ODg4MDA0NDRFOUIgLyogRm9yY2VkQWNjZXNzaWJp
bGl0eVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM0MTcsNiArMzQxNyw3IEBACiAJCTdDRTZDQkZCMTg3RjM3MDcwMEQ0NkJGNSAvKiBG
b3JtYXRDb252ZXJ0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDdDRTZDQkZBMTg3RjM3MDcwMEQ0NkJGNSAvKiBGb3JtYXRDb252ZXJ0ZXIuaCAqLzsg
fTsKIAkJN0NFNkNCRkQxODdGMzk0OTAwRDQ2QkY1IC8qIEZvcm1hdENvbnZlcnRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0U2Q0JGQzE4N0Yz
OTQ5MDBENDZCRjUgLyogRm9ybWF0Q29udmVydGVyLmNwcCAqLzsgfTsKIAkJN0NFOUExMkIxRUEy
RjFEQjAwNjUxQUQxIC8qIElETEF0dHJpYnV0ZXMuanNvbiBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4M0I1MzM4MTRGMzk5QkIwMDcyMEQ5RCAvKiBJRExB
dHRyaWJ1dGVzLmpzb24gKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJN0NFRDc3RkQxRjgyOTJFNTAwM0EyMTZFIC8qIFN0b3JhZ2VCbG9ja2luZ1BvbGlj
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NFRDc3
RkMxRjgyOTJDMzAwM0EyMTZFIC8qIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDRjE1ODlCMUVCQzRDRkQw
MEQ0QkZCNyAvKiBTdWJyZXNvdXJjZUludGVncml0eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Q0YxNTg5OTFFQkJDREM3MDBENEJGQjcgLyogU3Vi
cmVzb3VyY2VJbnRlZ3JpdHkuY3BwICovOyB9OwogCQk3Q0Y5MzBFNzFFMDFGOUI0MDBCQUZGQkUg
LyogUGF5bWVudEhlYWRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDdDRjkzMEU2MUUwMUY5QUQwMEJBRkZCRSAvKiBQYXltZW50SGVhZGVycy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDRkRDNTdD
MUFDMUQ4MDUwMEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0NGREM1N0ExQUMxRDgwNTAwRTI0
QTU3IC8qIENvbnRlbnRFeHRlbnNpb25FcnJvci5jcHAgKi87IH07CkBAIC00MDAxLDcgKzQwMDIs
NyBAQAogCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMgLyogVGV4dFJlc291cmNlRGVjb2Rlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRjUyM0QyNzkw
MkRFNDNENzAxODYzNUNBIC8qIFRleHRSZXNvdXJjZURlY29kZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0YxOTkxODA4MjQ1RTU5MDAxRTlB
QkMgLyogUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1MjNEMzA0MDJERTQ0NzYwMTg2MzVDQSAvKiBSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkzRjE5OTJGMDgyNDVFNTkwMDFFOUFC
QyAvKiBDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEY1ODc4Njg0MDJERTNCODYwMUVBNDEyMiAvKiBDdXJzb3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk5M0YxOTk0RjA4MjQ1RTU5MDAxRTlB
QkMgLyogU2V0dGluZ3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAvKiBTZXR0aW5ncy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTkzRjE5OTRGMDgyNDVFNTkw
MDFFOUFCQyAvKiBTZXR0aW5nc0Jhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEY1ODc4NjNBMDJERTNBMTQwMUVBNDEyMiAvKiBTZXR0aW5nc0Jhc2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk5M0Yx
OTk1MDA4MjQ1RTU5MDAxRTlBQkMgLyogQ2FjaGVQb2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjQ5MDJERTNBOUEwMUVBNDEyMiAvKiBD
YWNoZVBvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTkzRjE5OTYzMDgyNDVFNTkwMDFFOUFCQyAvKiBTU0xLZXlHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEY1ODc4NjYyMDJERTNC
MTEwMUVBNDEyMiAvKiBTU0xLZXlHZW5lcmF0b3IuaCAqLzsgfTsKIAkJOTNGMTk5OEMwODI0NUU1
OTAwMUU5QUJDIC8qIFJlbmRlclRyZWVBc1RleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzOTU1QTQxMDNENzI5MzIwMDg2MzVDRSAvKiBSZW5kZXJU
cmVlQXNUZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTQ0NTQsNyArNDQ1NSw3IEBACiAJCUExN0M4MTIyMEYyQTVDRjcwMDVEQUFFQiAvKiBI
VE1MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9y
eS5jcHAgKi87IH07CiAJCUExN0M4MTIzMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZh
Y3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEEx
N0M4MTIxMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKIAkJ
QTE3RDI3NUUxRUFDNTc5ODAwQkYwMUU3IC8qIE1lZGlhU2VsZWN0aW9uT3B0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTdEMjc1RDFFQUM1Nzk4
MDBCRjAxRTcgLyogTWVkaWFTZWxlY3Rpb25PcHRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBMTgyRDVCNzFCRTcyMjY3MDA4N0E3Q0MgLyog
U2V0dGluZ3NDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEExODJENUI2MUJFNzIyNjIwMDg3QTdDQyAvKiBTZXR0aW5nc0NvY29hLm1tICovOyB9
OworCQlBMTgyRDVCNzFCRTcyMjY3MDA4N0E3Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTgyRDVCNjFCRTcy
MjYyMDA4N0E3Q0MgLyogU2V0dGluZ3NCYXNlQ29jb2EubW0gKi87IH07CiAJCUExODVCNDI5MUU4
MjExQTEwMERDOTExOCAvKiBQcmV2aWV3TG9hZGVyLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTE4NUI0MjcxRTgyMTFBMTAwREM5MTE4IC8qIFByZXZp
ZXdMb2FkZXIubW0gKi87IH07CiAJCUExODVCNDJBMUU4MjExQTEwMERDOTExOCAvKiBQcmV2aWV3
TG9hZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
MTg1QjQyODFFODIxMUExMDBEQzkxMTggLyogUHJldmlld0xvYWRlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUExODg5MEFFMUFBMTNGMjUwMDI2
QzMwMSAvKiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEExODg5MEFDMUFBMTNGMjUwMDI2QzMwMSAv
KiBQYXJlbnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLzsgfTsKQEAgLTgyMTcsNyArODIx
OCw3IEBACiAJCTE0OTkzQkU0MEIyRjJCMUMwMDUwNDk3RiAvKiBGb2N1c0NvbnRyb2xsZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvY3VzQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNEE5OEUwNTEzNjM4NkEyMDBDOUZFRDIgLyogQmxv
Yi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQmxvYi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTE0QkRGNTlBMTM2NTM5OTEwMDE0ODM5MyAvKiBGaWxlUmVhZGVyLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBGaWxlUmVhZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMTRDOUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXR0aW5ncy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTE0QzlBNUU5MEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5n
c0Jhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNldHRpbmdz
QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0Q0Y3ODcxMDlGNTg3Q0Ew
MEVCMzY2NSAvKiBEZXByZWNhdGVkQ1NTT01WYWx1ZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IERlcHJlY2F0ZWRDU1NPTVZhbHVlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTRDRjdBNzAwOUY1Q0Y5QTAwRUIzNjY1IC8qIENTU1J1bGUuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBDU1NSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRD
RjdCMzEwOUY2RUNENzAwRUIzNjY1IC8qIEpTQ1NTUnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTExMzUwLDggKzExMzUxLDggQEAKIAkJN0FGOUIyMDkxOENGQjVGMjAwQzY0QkVG
IC8qIEpTVlRUUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTVlRU
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdBRjlCMjBBMThDRkI1RjMw
MEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNWVFRSZWdpb25MaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0FGOUIyMEIxOENGQjVGMzAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1ZUVFJlZ2lvbkxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MwMTdDQjIxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdz
R2VuZXJhdGVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNldHRp
bmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJN0MwMTdDQjMx
RjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzR2VuZXJhdGVkLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNldHRpbmdzR2VuZXJhdGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTdDMDE3Q0IyMUY3RTZGRkYwMDQ0NEU5QiAvKiBTZXR0aW5ncy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXR0aW5ncy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTdDMDE3Q0IzMUY3RTZGRkYwMDQ0NEU5QiAvKiBTZXR0aW5ncy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR0aW5ncy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3QzAxN0NCQTFGN0U5N0NFMDA0NDRFOUIgLyogRGVidWdPdmVy
bGF5UmVnaW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z092ZXJsYXlSZWdpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMDE3Q0JDMUY3RTk4MzcwMDQ0NEU5QiAvKiBFZGl0
YWJsZUxpbmtCZWhhdmlvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFZGl0YWJsZUxpbmtCZWhhdmlvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzAxN0NCRTFGN0U5ODg4MDA0NDRFOUIg
LyogRm9yY2VkQWNjZXNzaWJpbGl0eVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcmNlZEFjY2Vz
c2liaWxpdHlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTE3MDMsNiAr
MTE3MDQsNyBAQAogCQk3Q0U3RkE1OTFFRjg4MjMwMDA2MEM5RDYgLyogRG9jdW1lbnRUb3VjaC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBEb2N1bWVudFRvdWNoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTdDRTdGQTVBMUVGODgyMzAwMDYwQzlENiAvKiBEb2N1bWVudFRvdWNoLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBEb2N1bWVudFRvdWNoLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0NFN0ZB
NUIxRUY4ODIzMDAwNjBDOUQ2IC8qIERvY3VtZW50VG91Y2guY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRG9jdW1lbnRUb3VjaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDRUQ3
N0ZDMUY4MjkyQzMwMDNBMjE2RSAvKiBTdG9yYWdlQmxvY2tpbmdQb2xpY3kuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RvcmFnZUJsb2NraW5nUG9saWN5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDRjE1ODk5MUVCQkNEQzcwMEQ0QkZCNyAvKiBTdWJyZXNv
dXJjZUludGVncml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
dWJyZXNvdXJjZUludGVncml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdD
RjE1ODlBMUVCQkNEQzcwMEQ0QkZCNyAvKiBTdWJyZXNvdXJjZUludGVncml0eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdWJyZXNvdXJjZUludGVncml0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3Q0Y5MzBFNjFFMDFGOUFEMDBCQUZGQkUgLyogUGF5bWVu
dEhlYWRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGF5bWVudEhlYWRl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyOTI4LDcgKzEyOTMwLDcgQEAK
IAkJQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIg
LyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMTdE
Mjc1RDFFQUM1Nzk4MDBCRjAxRTcgLyogTWVkaWFTZWxlY3Rpb25PcHRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWVkaWFTZWxlY3Rpb25PcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQTE4MkQ1QjYxQkU3MjI2MjAwODdBN0NDIC8qIFNldHRpbmdzQ29jb2EubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZXR0aW5nc0NvY29hLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3Q0MgLyogU2V0dGlu
Z3NCYXNlQ29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBT
ZXR0aW5nc0Jhc2VDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE4NUI0
MjcxRTgyMTFBMTAwREM5MTE4IC8qIFByZXZpZXdMb2FkZXIubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQcmV2aWV3TG9hZGVyLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlBMTg1QjQyODFFODIxMUExMDBEQzkxMTggLyogUHJldmlld0xvYWRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQcmV2aWV3TG9hZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExODg5MEFDMUFBMTNGMjUwMDI2QzMwMSAvKiBQYXJl
bnRhbENvbnRyb2xzQ29udGVudEZpbHRlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFBhcmVudGFsQ29udHJvbHNDb250ZW50RmlsdGVyLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTU5NDUsNyArMTU5NDcsNyBAQAogCQlGNTVCM0RBQzEyNTFG
MTJEMDAzRUYyNjkgLyogV2Vla0lucHV0VHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWVrSW5wdXRUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUY1
ODc4NEYwMDJERTM3NTkwMUVBNDEyMiAvKiBDdXJzb3JNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDdXJzb3JNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlG
NTg3ODU0QzAyREUzNzU5MDFFQTQxMjIgLyogV2ViQ29yZUZyYW1lVmlldy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb3JlRnJhbWVWaWV3
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwotCQlGNTg3ODYzQTAyREUzQTE0MDFFQTQxMjIgLyogU2V0dGluZ3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dGluZ3MuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CisJCUY1ODc4
NjNBMDJERTNBMTQwMUVBNDEyMiAvKiBTZXR0aW5nc0Jhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dGluZ3NCYXNlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODY0
OTAyREUzQTlBMDFFQTQxMjIgLyogQ2FjaGVQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVQb2xpY3kuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUY1ODc4NjYyMDJE
RTNCMTEwMUVBNDEyMiAvKiBTU0xLZXlHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1NMS2V5R2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlGNTg3ODY4
NDAyREUzQjg2MDFFQTQxMjIgLyogQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEN1cnNvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKQEAgLTE5MzE1LDcgKzE5MzE3LDcgQEAK
IAkJCQlBRDVBMEMyMjFERUNBMzdFMDA3MDcwNTQgLyogUGVyZm9ybWFuY2VMb2dnaW5nQ29jb2Eu
bW0gKi8sCiAJCQkJQURGRTJCNTQxQkQ1RjQxMjAwREFCNDU3IC8qIFJlc291cmNlVXNhZ2VPdmVy
bGF5Q29jb2EubW0gKi8sCiAJCQkJQTUwNzFFODgxQzU2RDRGQTAwOTk1MUJFIC8qIFJlc291cmNl
VXNhZ2VUaHJlYWRDb2NvYS5tbSAqLywKLQkJCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3Q0MgLyog
U2V0dGluZ3NDb2NvYS5tbSAqLywKKwkJCQlBMTgyRDVCNjFCRTcyMjYyMDA4N0E3Q0MgLyogU2V0
dGluZ3NCYXNlQ29jb2EubW0gKi8sCiAJCQkJN0MwMTdDRDExRjdFQ0E2MjAwNDQ0RTlCIC8qIFNl
dHRpbmdzRGVmYXVsdFZhbHVlc0NvY29hLm1tICovLAogCQkJCTI2MjU1RjAxMTg4NzhFMTEwMDA2
RTFGRCAvKiBVc2VyQWdlbnQuaCAqLywKIAkJCQk1RDU5NzVCNjE5NjM2MzdCMDBEMDA4NzggLyog
VXNlckFnZW50Lm1tICovLApAQCAtMTk0MzUsOCArMTk0MzcsOCBAQAogCQkJCTQzQjg1RUQzMThD
QkVDNTIwMEUzMUFGNCAvKiBTZWxlY3RvclBzZXVkb0NsYXNzQW5kQ29tcGF0aWJpbGl0eUVsZW1l
bnRNYXAuZ3BlcmYgKi8sCiAJCQkJMjZBQTBGOUQxOEQyQTE4QjAwNDE5MzgxIC8qIFNlbGVjdG9y
UHNldWRvRWxlbWVudFR5cGVNYXAuY3BwICovLAogCQkJCTI2QUEwRjlGMThEMkExQzEwMDQxOTM4
MSAvKiBTZWxlY3RvclBzZXVkb0VsZW1lbnRUeXBlTWFwLmdwZXJmICovLAotCQkJCTdDMDE3Q0Iy
MUY3RTZGRkYwMDQ0NEU5QiAvKiBTZXR0aW5nc0dlbmVyYXRlZC5jcHAgKi8sCi0JCQkJN0MwMTdD
QjMxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzR2VuZXJhdGVkLmggKi8sCisJCQkJN0MwMTdD
QjIxRjdFNkZGRjAwNDQ0RTlCIC8qIFNldHRpbmdzLmNwcCAqLywKKwkJCQk3QzAxN0NCMzFGN0U2
RkZGMDA0NDRFOUIgLyogU2V0dGluZ3MuaCAqLywKIAkJCQk5OTA4QjBGRDFCQ0FEMDdEMDBFRDBG
NTUgLyogU3RyZWFtSW50ZXJuYWxzQnVpbHRpbnMuY3BwICovLAogCQkJCTlCMDNEODA2MUJCMzEx
MEQwMEI3NjRDOSAvKiBTdHJlYW1JbnRlcm5hbHNCdWlsdGlucy5oICovLAogCQkJCTgzODZBOTZF
MTlGNjFFNEYwMEUxRUM0QSAvKiBTdHlsZUJ1aWxkZXIuY3BwICovLApAQCAtMTk4OTIsMTQgKzE5
ODk0LDE1IEBACiAJCQkJQkNEMEUwRjkwRTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2lu
SGFzaC5oICovLAogCQkJCTk3NEQyREEyMTQ2QTUzNUQwMEQ1MUY4QiAvKiBTZWN1cml0eVBvbGlj
eS5jcHAgKi8sCiAJCQkJOTc0RDJEQTMxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5
LmggKi8sCi0JCQkJMTRDOUE1RTkwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCAqLywK
LQkJCQlGNTg3ODYzQTAyREUzQTE0MDFFQTQxMjIgLyogU2V0dGluZ3MuaCAqLywKIAkJCQlCQzU5
REVGODE2OURFREMzMDAxNkFDMzQgLyogU2V0dGluZ3MuaW4gKi8sCisJCQkJMTRDOUE1RTkwQjNE
MTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzQmFzZS5jcHAgKi8sCisJCQkJRjU4Nzg2M0EwMkRFM0Ex
NDAxRUE0MTIyIC8qIFNldHRpbmdzQmFzZS5oICovLAogCQkJCTdDMDE3Q0NBMUY3RTlCOEIwMDQ0
NEU5QiAvKiBTZXR0aW5nc0RlZmF1bHRWYWx1ZXMuaCAqLywKIAkJCQk1QzY4OEFBMjFEMzgxMjZG
MDAwQjU0RkEgLyogU29ja2V0UHJvdmlkZXIuY3BwICovLAogCQkJCTVDN0M4OEQ3MUQwRjFGMkIw
MDlEMkY2RCAvKiBTb2NrZXRQcm92aWRlci5oICovLAogCQkJCTYyNkNERTBDMTE0MDQyNEMwMDFF
NUE2OCAvKiBTcGF0aWFsTmF2aWdhdGlvbi5jcHAgKi8sCiAJCQkJNjI2Q0RFMEQxMTQwNDI0QzAw
MUU1QTY4IC8qIFNwYXRpYWxOYXZpZ2F0aW9uLmggKi8sCisJCQkJN0NFRDc3RkMxRjgyOTJDMzAw
M0EyMTZFIC8qIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oICovLAogCQkJCTYyQzEyMTdBMTFBQjlF
NzYwMDNDNDYyQyAvKiBTdXNwZW5kYWJsZVRpbWVyLmNwcCAqLywKIAkJCQk2MkMxMjE3QjExQUI5
RTc3MDAzQzQ2MkMgLyogU3VzcGVuZGFibGVUaW1lci5oICovLAogCQkJCTdDMDE3Q0M4MUY3RTlC
MzAwMDQ0NEU5QiAvKiBUZXh0RGlyZWN0aW9uU3VibWVudUluY2x1c2lvbkJlaGF2aW9yLmggKi8s
CkBAIC0zMDA3Nyw5ICszMDA4MCw5IEBACiAJCQkJNTFGMTc1NkMxRjNFQkM4MzAwQzc0OTUwIC8q
IFNlcnZpY2VXb3JrZXJVcGRhdGVWaWFDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlF
MTAwOTlFNjQ5MjAwNTZFNTgxIC8qIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCOERCREI0QzEzMEIwRjhBMDBGNUNEQjEgLyogU2V0U2VsZWN0aW9uQ29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJOTNGMTk5NEYwODI0NUU1OTAwMUU5QUJDIC8qIFNldHRp
bmdzLmggaW4gSGVhZGVycyAqLywKKwkJCQk3QzAxN0NCNzFGN0U3MDUwMDA0NDRFOUIgLyogU2V0
dGluZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTkzRjE5OTRGMDgyNDVFNTkwMDFFOUFCQyAvKiBT
ZXR0aW5nc0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDE3Q0NCMUY3RTlCOEIwMDQ0NEU5
QiAvKiBTZXR0aW5nc0RlZmF1bHRWYWx1ZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTdDMDE3Q0I3
MUY3RTcwNTAwMDQ0NEU5QiAvKiBTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzREQ0NTAxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDNUVCOEM0MEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFkb3dEYXRhLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNkQxNjk2NDEzNDZCNEMxMDAwRUI3NzAgLyogU2hhZG93Um9vdC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDE2OSw2ICszMDE3Miw3IEBACiAJCQkJQTVBRkIzNTAxMTUxNTFBNzAw
QjA0NUNCIC8qIFN0ZXBSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMkQ4NDUxNzE3MzRB
MTAwNjUyRkMwIC8qIFN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQkUzN0UwMERBRUUw
MEUwMDEwODVGQyAvKiBTdG9yYWdlQXJlYS5oIGluIEhlYWRlcnMgKi8sCisJCQkJN0NFRDc3RkQx
RjgyOTJFNTAwM0EyMTZFIC8qIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTFFMEJBQkIwREE1NTQ3MTAwQTlFNDE3IC8qIFN0b3JhZ2VFdmVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzVFQkREODQxMDVFRERFQzAwNTY4MTZGIC8qIFN0b3JhZ2VFdmVudERpc3Bh
dGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxRTBCQjM4MERBNUFDQjYwMEE5RTQxNyAvKiBT
dG9yYWdlTWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTMzOTk1LDEwICszMzk5OSwxMCBAQAogCQkJ
CTUxRjY0NUEyMUY0QkY1M0MwMEI1NERFRCAvKiBTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uT3B0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOUUwRjA5OUU2NDkyMDA1NkU1ODEgLyog
U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjhEQkRCNEIx
MzBCMEY4QTAwRjVDREIxIC8qIFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIGluIFNvdXJjZXMgKi8s
Ci0JCQkJMTRDOUE1RUEwQjNEMTA1RjAwNUEwMjMyIC8qIFNldHRpbmdzLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUExODJENUI3MUJFNzIyNjcwMDg3QTdDQyAvKiBTZXR0aW5nc0NvY29hLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJN0MwMTdDQjYxRjdFNzA0QjAwNDQ0RTlCIC8qIFNldHRpbmdzLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTE0QzlBNUVBMEIzRDEwNUYwMDVBMDIzMiAvKiBTZXR0aW5n
c0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTE4MkQ1QjcxQkU3MjI2NzAwODdBN0NDIC8q
IFNldHRpbmdzQmFzZUNvY29hLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MwMTdDRDMxRjdFQ0E2
MzAwNDQ0RTlCIC8qIFNldHRpbmdzRGVmYXVsdFZhbHVlc0NvY29hLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJN0MwMTdDQjYxRjdFNzA0QjAwNDQ0RTlCIC8qIFNldHRpbmdzR2VuZXJhdGVkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGM0RENDRGMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNUVCOEMzMEU4MjAzMUIwMEIyNTk2NSAvKiBTaGFk
b3dEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE2RDE2OTYyMTM0NkI0OUIwMDBFQjc3MCAv
KiBTaGFkb3dSb290LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlz
aW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjEsNiArMTIxLDcgQEAgY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3I7CiBjbGFzcyBTZXR0aW5nczsK
K2NsYXNzIFNldHRpbmdzQmFzZTsKIGNsYXNzIFNvY2tldFByb3ZpZGVyOwogY2xhc3MgU3RvcmFn
ZU5hbWVzcGFjZTsKIGNsYXNzIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjsKQEAgLTE1MCw2ICsx
NTEsNyBAQCBjbGFzcyBQYWdlIDogcHVibGljIFN1cHBsZW1lbnRhYmxlPFBhZ2U+CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUGFnZSk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgZnJpZW5kIGNsYXNzIFNldHRpbmdzOworICAgIGZyaWVuZCBjbGFzcyBTZXR0aW5nc0Jhc2U7
CiAKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCB1cGRhdGVTdHlsZUZv
ckFsbFBhZ2VzQWZ0ZXJHbG9iYWxDaGFuZ2VJbkVudmlyb25tZW50KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9TZWN1cml0eU9yaWdpbi5oCShyZXZpc2lvbiAyMjI3NjYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJTdG9yYWdlQmxvY2tpbmdQb2xpY3kuaCIK
ICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtNDMsMTEgKzQ0LDcgQEAgcHVibGljOgogICAgICAgICBBc2sK
ICAgICB9OwogCi0gICAgZW51bSBTdG9yYWdlQmxvY2tpbmdQb2xpY3kgewotICAgICAgICBBbGxv
d0FsbFN0b3JhZ2UgPSAwLAotICAgICAgICBCbG9ja1RoaXJkUGFydHlTdG9yYWdlLAotICAgICAg
ICBCbG9ja0FsbFN0b3JhZ2UKLSAgICB9OworICAgIHVzaW5nIFN0b3JhZ2VCbG9ja2luZ1BvbGlj
eSA9IFdlYkNvcmU6OlN0b3JhZ2VCbG9ja2luZ1BvbGljeTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWY8U2VjdXJpdHlPcmlnaW4+IGNyZWF0ZShjb25zdCBVUkwmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNlY3VyaXR5T3JpZ2luPiBjcmVhdGVVbmlxdWUoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAyMjI3NjYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDY3OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDExLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTZXR0
aW5ncy5oIgotCi0jaW5jbHVkZSAiQXVkaW9TZXNzaW9uLmgiCi0jaW5jbHVkZSAiQmFja0Zvcndh
cmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKLSNpbmNs
dWRlICJDb29raWVTdG9yYWdlLmgiCi0jaW5jbHVkZSAiRE9NVGltZXIuaCIKLSNpbmNsdWRlICJE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKLSNpbmNsdWRlICJGb250R2VuZXJpY0ZhbWlsaWVzLmgiCi0jaW5jbHVkZSAiRnJhbWVUcmVl
LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5o
IgotI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgotI2luY2x1ZGUgIlJ1bnRpbWVB
cHBsaWNhdGlvbkNoZWNrcy5oIgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlIDx3dGYvc3BpL2Rhcndpbi9keWxkU1BJLmg+Ci0jZW5kaWYK
LQotI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShBVkZPVU5EQVRJT04pCi0jaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlck1hYy5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQotI2luY2x1ZGUgIk1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgdm9pZCBzZXRJbWFnZUxv
YWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFm
cmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+
ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJbWFnZXNFbmFibGVkKHBhZ2Ut
PnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50
KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0QXV0b0xvYWRJbWFnZXMocGFnZS0+c2V0dGlu
Z3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKFBhZ2UqIHBhZ2UpCi17Ci0gICAg
aW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKLSAgICBpZiAocGFnZSkKLSAgICAgICAgcGFn
ZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci19Ci0KLSNpZiBVU0UoQVZGT1VO
REFUSU9OKQotYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbkVuYWJsZWQgPSB0cnVlOwotYm9v
bCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSB0cnVlOwotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLWJvb2wgU2V0dGluZ3M6OmdRVEtpdEVuYWJsZWQg
PSBmYWxzZTsKLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUikKLWJvb2wgU2V0dGluZ3M6OmdH
U3RyZWFtZXJFbmFibGVkID0gdHJ1ZTsKLSNlbmRpZgotCi1ib29sIFNldHRpbmdzOjpnTW9ja1Nj
cm9sbGJhcnNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnVXNlc092ZXJsYXlTY3Jv
bGxiYXJzID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxl
ZCA9IGZhbHNlOwotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLWJvb2wgU2V0dGluZ3M6OmdN
b2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnTWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uID0gdHJ1ZTsKLSNlbmRpZgotCi0jaWYgUExB
VEZPUk0oV0lOKQotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJz
ID0gdHJ1ZTsKLSNlbmRpZgotICAgIAotYm9vbCBTZXR0aW5nczo6Z1Nob3VsZFJlc3BlY3RQcmlv
cml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyA9IGZhbHNlOwotYm9vbCBTZXR0aW5nczo6Z0xvd1Bv
d2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpn
UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRp
bmdzOjpnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUgPSBmYWxzZTsKLQotI2lmIFBMQVRGT1JNKElP
UykKLWJvb2wgU2V0dGluZ3M6OmdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkID0gZmFs
c2U7Ci1ib29sIFNldHRpbmdzOjpnQVZLaXRFbmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdz
OjpnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbiA9IGZhbHNlOwotI2VuZGlm
Ci1ib29sIFNldHRpbmdzOjpnTWFuYWdlQXVkaW9TZXNzaW9uID0gZmFsc2U7Ci1ib29sIFNldHRp
bmdzOjpnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7Ci0KLWJvb2wgU2V0dGlu
Z3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGluaXRpYWxpemVDdXN0b21QYXN0ZWJvYXJkRGF0YVRvRGVmYXVsdFZhbHVlOwotICAg
IHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVDdXN0b21QYXN0ZWJvYXJkRGF0YVRvRGVmYXVsdFZh
bHVlLCBbXSB7Ci0jaWYgUExBVEZPUk0oSU9TKSAmJiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9B
TExPV0VEID49IDExMDMwMAotICAgICAgICBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0g
SU9TQXBwbGljYXRpb246OmlzTW9iaWxlU2FmYXJpKCkgfHwgZHlsZF9nZXRfcHJvZ3JhbV9zZGtf
dmVyc2lvbigpID49IERZTERfSU9TX1ZFUlNJT05fMTFfMzsKLSNlbGlmIFBMQVRGT1JNKE1BQykg
JiYgX19NQUNfT1NfWF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTMwNAotICAgICAgICAvLyBG
SVhNRTogVXBkYXRlIHRoaXMgbGlua2VkLW9uIGNoZWNrIG9uY2UgdGhlIGNvcnJlY3QgbWFjcm8g
aXMgaW4gdGhlIFNESy4KLSAgICAgICAgZ0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCA9IE1h
Y0FwcGxpY2F0aW9uOjppc1NhZmFyaSgpIHx8IGR5bGRfZ2V0X3Byb2dyYW1fc2RrX3ZlcnNpb24o
KSA+IERZTERfTUFDT1NYX1ZFUlNJT05fMTBfMTM7Ci0jZWxzZQotICAgICAgICBnQ3VzdG9tUGFz
dGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7Ci0jZW5kaWYKLSAgICB9KTsKLSAgICByZXR1cm4g
Z0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZDsKLX0KLQotLy8gVGhpcyBhbW91bnQgb2YgdGlt
ZSBtdXN0IGhhdmUgZWxhcHNlZCBiZWZvcmUgd2Ugd2lsbCBldmVuIGNvbnNpZGVyIHNjaGVkdWxp
bmcgYSBsYXlvdXQgd2l0aG91dCBhIGRlbGF5LgotLy8gRklYTUU6IEZvciBmYXN0ZXIgbWFjaGlu
ZXMgdGhpcyB2YWx1ZSBjYW4gcmVhbGx5IGJlIGxvd2VyZWQgdG8gMjAwLiAyNTAgaXMgYWRlcXVh
dGUsIGJ1dCBhIGxpdHRsZSBoaWdoCi0vLyBmb3IgZHVhbCBHNXMuIDopCi1zdGF0aWMgY29uc3Qg
U2Vjb25kcyBsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCA9IDI1MF9tczsKLQotU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCi0gICAgOiBtX21lZGlhVHlwZU92ZXJyaWRlKCJzY3JlZW4iKQot
ICAgICwgbV9mb250R2VuZXJpY0ZhbWlsaWVzKHN0ZDo6bWFrZV91bmlxdWU8Rm9udEdlbmVyaWNG
YW1pbGllcz4oKSkKLSAgICAsIG1fc3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2lu
OjpBbGxvd0FsbFN0b3JhZ2UpCi0gICAgLCBtX2xheW91dEludGVydmFsKGxheW91dFNjaGVkdWxl
VGhyZXNob2xkKQotICAgICwgbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbChET01UaW1lcjo6ZGVm
YXVsdE1pbmltdW1JbnRlcnZhbCgpKQotICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHko
ZmFsc2UpCi0gICAgLCBtX2FyZUltYWdlc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1fYXJlUGx1Z2lu
c0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxzZSkKLSAgICAsIG1f
dXNlc1BhZ2VDYWNoZShmYWxzZSkKLSAgICAsIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9u
ZFBhZ2UoZmFsc2UpCi0gICAgLCBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZChmYWxzZSkKLSAgICAs
IG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fc2V0
SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lcigqdGhpcywgJlNldHRpbmdzOjppbWFnZUxvYWRpbmdT
ZXR0aW5nc1RpbWVyRmlyZWQpCi0gICAgLCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdF
bmFibGVkKGZhbHNlKQotICAgICwgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVu
YWJsZWQoZmFsc2UpCi17Ci0gICAgLy8gQSBGcmFtZSBtYXkgbm90IGhhdmUgYmVlbiBjcmVhdGVk
IHlldCwgc28gd2UgaW5pdGlhbGl6ZSB0aGUgQXRvbWljU3RyaW5nCi0gICAgLy8gaGFzaCBiZWZv
cmUgdHJ5aW5nIHRvIHVzZSBpdC4KLSAgICBBdG9taWNTdHJpbmc6OmluaXQoKTsKLQotICAgIGlu
aXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCk7Ci0KLSAgICAvLyBQYWdlIGlzIG5vdCB5ZXQg
ZnVsbHkgaW5pdGlhbGl6ZWQgd2hlbiBjb25zdHJ1Y3RpbmcgU2V0dGluZ3MsIHNvIGtlZXBpbmcg
bV9wYWdlIG51bGwgb3ZlciBpbml0aWFsaXplRGVmYXVsdEZvbnRGYW1pbGllcygpIGNhbGwuCi0g
ICAgbV9wYWdlID0gcGFnZTsKLX0KLQotU2V0dGluZ3M6On5TZXR0aW5ncygpCi17Ci19Ci0KLVJl
ZjxTZXR0aW5ncz4gU2V0dGluZ3M6OmNyZWF0ZShQYWdlKiBwYWdlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNldHRpbmdzKHBhZ2UpKTsKLX0KLQotI2lmICFQTEFURk9STShDT0NPQSkK
LXZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCkKLXsKLSAgICAv
LyBPdGhlciBwbGF0Zm9ybXMgY2FuIHNldCB1cCBmb250cyBmcm9tIGEgY2xpZW50LCBidXQgb24g
TWFjLCB3ZSB3YW50IGl0IGluIFdlYkNvcmUgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIFdlYktpdDEg
YW5kIFdlYktpdDIuCi19Ci0jZW5kaWYKLQotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6
c3RhbmRhcmRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zdGFuZGFyZEZvbnRGYW1pbHkoc2NyaXB0KTsKLX0K
LQotdm9pZCBTZXR0aW5nczo6c2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0gICAgYm9vbCBjaGFuZ2VzID0gbV9m
b250R2VuZXJpY0ZhbWlsaWVzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQp
OwotICAgIGlmIChjaGFuZ2VzKQotICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5
Q2hhbmdlKG1fcGFnZSk7Ci19Ci0KLWNvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OmZpeGVk
Rm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9u
dEdlbmVyaWNGYW1pbGllcy0+Zml4ZWRGb250RmFtaWx5KHNjcmlwdCk7Ci19Ci0KLXZvaWQgU2V0
dGluZ3M6OnNldEZpeGVkRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNj
cmlwdENvZGUgc2NyaXB0KQotewotICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1p
bGllcy0+c2V0Rml4ZWRGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKLSAgICBpZiAoY2hhbmdl
cykKLSAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwot
fQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpzZXJpZkZvbnRGYW1pbHkoVVNjcmlw
dENvZGUgc2NyaXB0KSBjb25zdAotewotICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMt
PnNlcmlmRm9udEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRTZXJpZkZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkK
LXsKLSAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFNlcmlmRm9u
dEZhbWlseShmYW1pbHksIHNjcmlwdCk7Ci0gICAgaWYgKGNoYW5nZXMpCi0gICAgICAgIGludmFs
aWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKLX0KLQotY29uc3QgQXRvbWlj
U3RyaW5nJiBTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2Fuc1NlcmlmRm9u
dEZhbWlseShzY3JpcHQpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRTYW5zU2VyaWZGb250RmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCi17Ci0g
ICAgYm9vbCBjaGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRTYW5zU2VyaWZGb250
RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKLSAgICBpZiAoY2hhbmdlcykKLSAgICAgICAgaW52YWxp
ZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwotfQotCi1jb25zdCBBdG9taWNT
dHJpbmcmIFNldHRpbmdzOjpjdXJzaXZlRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+Y3Vyc2l2ZUZvbnRGYW1p
bHkoc2NyaXB0KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKLXsKLSAgICBib29s
IGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEN1cnNpdmVGb250RmFtaWx5KGZh
bWlseSwgc2NyaXB0KTsKLSAgICBpZiAoY2hhbmdlcykKLSAgICAgICAgaW52YWxpZGF0ZUFmdGVy
R2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2UpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFNl
dHRpbmdzOjpmYW50YXN5Rm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+ZmFudGFzeUZvbnRGYW1pbHkoc2NyaXB0
KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0RmFudGFzeUZvbnRGYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKLXsKLSAgICBib29sIGNoYW5nZXMg
PSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldEZhbnRhc3lGb250RmFtaWx5KGZhbWlseSwgc2Ny
aXB0KTsKLSAgICBpZiAoY2hhbmdlcykKLSAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0Zh
bWlseUNoYW5nZShtX3BhZ2UpOwotfQotCi1jb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpw
aWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fZm9udEdlbmVyaWNGYW1pbGllcy0+cGljdG9ncmFwaEZvbnRGYW1pbHkoc2NyaXB0KTsK
LX0KLQotdm9pZCBTZXR0aW5nczo6c2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKLXsKLSAgICBib29sIGNoYW5nZXMg
PSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGZhbWlseSwg
c2NyaXB0KTsKLSAgICBpZiAoY2hhbmdlcykKLSAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJp
Y0ZhbWlseUNoYW5nZShtX3BhZ2UpOwotfQotCi1ib29sIFNldHRpbmdzOjpkZWZhdWx0VGV4dEF1
dG9zaXppbmdFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6ZGVmYXVsdFRleHRBdXRv
c2l6aW5nRW5hYmxlZCgpOwotfQotCi1mbG9hdCBTZXR0aW5nczo6ZGVmYXVsdE1pbmltdW1ab29t
Rm9udFNpemUoKQotewotICAgIHJldHVybiBXZWJDb3JlOjpkZWZhdWx0TWluaW11bVpvb21Gb250
U2l6ZTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFUeXBlT3ZlcnJpZGUoY29uc3QgU3Ry
aW5nJiBtZWRpYVR5cGVPdmVycmlkZSkKLXsKLSAgICBpZiAobV9tZWRpYVR5cGVPdmVycmlkZSA9
PSBtZWRpYVR5cGVPdmVycmlkZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tZWRpYVR5cGVP
dmVycmlkZSA9IG1lZGlhVHlwZU92ZXJyaWRlOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAg
IHJldHVybjsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmll
dygpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIHZpZXctPnNldE1lZGlhVHlwZShtZWRpYVR5
cGVPdmVycmlkZSk7Ci0gICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMo
KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGJvb2wg
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KQotewotICAgIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5ID0gbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5OwotICAgIAotICAgIC8vIENoYW5naW5nIHRo
aXMgc2V0dGluZyB0byB0cnVlIG1pZ2h0IGltbWVkaWF0ZWx5IHN0YXJ0IG5ldyBsb2FkcyBmb3Ig
aW1hZ2VzIHRoYXQgaGFkIHByZXZpb3VzbHkgaGFkIGxvYWRpbmcgZGlzYWJsZWQuCi0gICAgLy8g
SWYgdGhpcyBoYXBwZW5zIHdoaWxlIGEgV2ViVmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCBhbmQg
d2UgZG9uJ3Qga25vdyB0aGUgV2ViVmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCB0aGVzZSBuZXcg
bG9hZHMKLSAgICAvLyBjYW4gY2F1c2UgY3Jhc2hlcyBkb3duc3RyZWFtIHdoZW4gdGhlIFdlYlZp
ZXcgbWVtb3J5IGhhcyBhY3R1YWxseSBiZWVuIGZyZWUnZC4KLSAgICAvLyBPbmUgZXhhbXBsZSB3
aGVyZSB0aGlzIGNhbiBoYXBwZW4gaXMgaW4gTWFjIGFwcHMgdGhhdCBzdWJjbGFzcyBXZWJWaWV3
IHRoZW4gZG8gd29yayBpbiB0aGVpciBvdmVycmlkZGVuIGRlYWxsb2MgbWV0aG9kcy4KLSAgICAv
LyBTdGFydGluZyB0aGVzZSBsb2FkcyBzeW5jaHJvbm91c2x5IGlzIG5vdCBpbXBvcnRhbnQuICBC
eSBwdXR0aW5nIGl0IG9uIGEgMC1kZWxheSwgcHJvcGVybHkgY2xvc2luZyB0aGUgUGFnZSBjYW5j
ZWxzIHRoZW0KLSAgICAvLyBiZWZvcmUgdGhleSBoYXZlIGEgY2hhbmNlIHRvIHJlYWxseSBzdGFy
dC4KLSAgICAvLyBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82MDU3MiBmb3IgbW9yZSBkaXNjdXNz
aW9uLgotICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5zdGFydE9uZVNob3QoMF9z
KTsKLX0KLQotdm9pZCBTZXR0aW5nczo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCkK
LXsKLSAgICBzZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhtX3BhZ2UpOwotfQotCi12b2lkIFNldHRp
bmdzOjpzZXRTY3JpcHRFbmFibGVkKGJvb2wgaXNTY3JpcHRFbmFibGVkKQotewotICAgIGlmICht
X2lzU2NyaXB0RW5hYmxlZCA9PSBpc1NjcmlwdEVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1faXNTY3JpcHRFbmFibGVkID0gaXNTY3JpcHRFbmFibGVkOwotCi0gICAgaWYgKCFtX3Bh
Z2UpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX3BhZ2UtPnNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2V0dGlu
Z3M6OnNldEltYWdlc0VuYWJsZWQoYm9vbCBhcmVJbWFnZXNFbmFibGVkKQotewotICAgIG1fYXJl
SW1hZ2VzRW5hYmxlZCA9IGFyZUltYWdlc0VuYWJsZWQ7Ci0KLSAgICAvLyBTZWUgY29tbWVudCBp
biBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkuCi0gICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0
aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRQbHVn
aW5zRW5hYmxlZChib29sIGFyZVBsdWdpbnNFbmFibGVkKQotewotICAgIGlmIChtX2FyZVBsdWdp
bnNFbmFibGVkID09IGFyZVBsdWdpbnNFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2FyZVBsdWdpbnNFbmFibGVkID0gYXJlUGx1Z2luc0VuYWJsZWQ7Ci0gICAgUGFnZTo6cmVmcmVz
aFBsdWdpbnMoZmFsc2UpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRVc2VyU3R5bGVTaGVldExv
Y2F0aW9uKGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKLXsKLSAgICBpZiAobV91
c2VyU3R5bGVTaGVldExvY2F0aW9uID09IHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHVzZXJTdHlsZVNoZWV0
TG9jYXRpb247Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnVzZXJTdHlsZVNo
ZWV0TG9jYXRpb25DaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE1pbmltdW1ET01U
aW1lckludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpCi17Ci0gICAgYXV0byBvbGRUaW1lckludGVy
dmFsID0gc3RkOjpleGNoYW5nZShtX21pbmltdW1ET01UaW1lckludGVydmFsLCBpbnRlcnZhbCk7
Ci0KLSAgICBpZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCi0gICAg
ICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+YWRqdXN0TWluaW11bURPTVRpbWVySW50ZXJ2YWwo
b2xkVGltZXJJbnRlcnZhbCk7Ci0gICAgfQotfQotCi12b2lkIFNldHRpbmdzOjpzZXRMYXlvdXRJ
bnRlcnZhbChTZWNvbmRzIGxheW91dEludGVydmFsKQotewotICAgIC8vIEZJWE1FOiBJdCBzZWVt
cyB3ZWlyZCB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IGRpc3JlZ2FyZCB0aGUgc3BlY2lmaWVkIGxh
eW91dCBpbnRlcnZhbC4KLSAgICAvLyBXZSBzaG91bGQgZWl0aGVyIGV4cG9zZSBsYXlvdXRTY2hl
ZHVsZVRocmVzaG9sZCBvciBiZXR0ZXIgY29tbXVuaWNhdGUgdGhpcyBpbnZhcmlhbnQuCi0gICAg
bV9sYXlvdXRJbnRlcnZhbCA9IHN0ZDo6bWF4KGxheW91dEludGVydmFsLCBsYXlvdXRTY2hlZHVs
ZVRocmVzaG9sZCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldFVzZXNQYWdlQ2FjaGUoYm9vbCB1
c2VzUGFnZUNhY2hlKQotewotICAgIGlmIChtX3VzZXNQYWdlQ2FjaGUgPT0gdXNlc1BhZ2VDYWNo
ZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBtX3VzZXNQYWdlQ2FjaGUgPSB1c2Vz
UGFnZUNhY2hlOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghbV91c2VzUGFnZUNhY2hlKQotICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5l
VG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOwotfQotCi12b2lkIFNldHRpbmdzOjpz
ZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQpCi17Ci0g
ICAgaWYgKG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkID09IGRuc1ByZWZldGNoaW5nRW5hYmxlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgPSBkbnNQcmVm
ZXRjaGluZ0VuYWJsZWQ7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5kbnNQcmVm
ZXRjaGluZ1N0YXRlQ2hhbmdlZCgpOwotfQotCi0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQot
dm9pZCBTZXR0aW5nczo6c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKLXsKLSAgICBpZiAobV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgPT0gdmlzaWJsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgPSB2
aXNpYmxlOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c2V0UmVzb3VyY2VVc2Fn
ZU92ZXJsYXlWaXNpYmxlKHZpc2libGUpOwotfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4p
Ci12b2lkIFNldHRpbmdzOjpzZXRTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyhib29sIHNo
b3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKQotewotICAgIGdTaG91bGRVc2VIaWdoUmVzb2x1
dGlvblRpbWVycyA9IHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzOwotfQotI2VuZGlmCi0K
LXZvaWQgU2V0dGluZ3M6OnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6
U3RvcmFnZUJsb2NraW5nUG9saWN5IGVuYWJsZWQpCi17Ci0gICAgaWYgKG1fc3RvcmFnZUJsb2Nr
aW5nUG9saWN5ID09IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZUJs
b2NraW5nUG9saWN5ID0gZW5hYmxlZDsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2Ut
PnN0b3JhZ2VCbG9ja2luZ1N0YXRlQ2hhbmdlZCgpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRC
YWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShib29sIHNob3VsZEV4dGVuZCkKLXsKLSAg
ICBpZiAobV9iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9PSBzaG91bGRFeHRlbmQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2UgPSBzaG91bGRFeHRlbmQ7Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLnZpZXcoKS0+dXBkYXRlRXh0ZW5kQmFja2dyb3VuZElmTmVjZXNzYXJ5KCk7Ci19
Ci0KLSNpZiBVU0UoQVZGT1VOREFUSU9OKQotdm9pZCBTZXR0aW5nczo6c2V0QVZGb3VuZGF0aW9u
RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGdBVkZvdW5kYXRpb25FbmFibGVkID09
IGVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdBVkZvdW5kYXRpb25FbmFibGVkID0g
ZW5hYmxlZDsKLSAgICBIVE1MTWVkaWFFbGVtZW50OjpyZXNldE1lZGlhRW5naW5lcygpOwotfQot
Ci12b2lkIFNldHRpbmdzOjpzZXRBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkKGJvb2wg
ZW5hYmxlZCkKLXsKLSAgICBpZiAoZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPT0g
ZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lv
bkVuYWJsZWQgPSBlbmFibGVkOwotfQotI2VuZGlmCi0KLSNpZiBQTEFURk9STShDT0NPQSkKLXZv
aWQgU2V0dGluZ3M6OnNldFFUS2l0RW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgaWYgKGdR
VEtpdEVuYWJsZWQgPT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZ1FUS2l0RW5h
YmxlZCA9IGVuYWJsZWQ7Ci0gICAgSFRNTE1lZGlhRWxlbWVudDo6cmVzZXRNZWRpYUVuZ2luZXMo
KTsKLX0KLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUikKLXZvaWQgU2V0dGluZ3M6OnNldEdT
dHJlYW1lckVuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIGlmIChnR1N0cmVhbWVyRW5hYmxl
ZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBnR1N0cmVhbWVyRW5hYmxlZCA9
IGVuYWJsZWQ7Ci0gICAgSFRNTE1lZGlhRWxlbWVudDo6cmVzZXRNZWRpYUVuZ2luZXMoKTsKLX0K
LSNlbmRpZgotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLWJvb2wgU2V0dGluZ3M6Om1vY2tD
YXB0dXJlRGV2aWNlc0VuYWJsZWQoKQotewotICAgIHJldHVybiBnTW9ja0NhcHR1cmVEZXZpY2Vz
RW5hYmxlZDsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxl
ZChib29sIGVuYWJsZWQpCi17Ci0gICAgZ01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBlbmFi
bGVkOwotICAgIE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzZXRNb2NrUmVhbHRpbWVN
ZWRpYVNvdXJjZUNlbnRlckVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLWJvb2wgU2V0dGluZ3M6Om1l
ZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247Ci19Ci0KLXZvaWQgU2V0dGlu
Z3M6OnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbihib29sIG1lZGlhQ2Fw
dHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbikKLXsKLSAgICBnTWVkaWFDYXB0dXJlUmVxdWly
ZXNTZWN1cmVDb25uZWN0aW9uID0gbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9u
OwotfQotI2VuZGlmCi0KLXZvaWQgU2V0dGluZ3M6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9n
Z2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci0KLSAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+bWFp
bkZyYW1lKCkudmlldygpKQotICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2V0
U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChlbmFibGVkKTsKLX0KLQotLy8gSXQn
cyB2ZXJ5IGltcG9ydGFudCB0aGF0IHRoaXMgc2V0dGluZyBkb2Vzbid0IGNoYW5nZSBpbiB0aGUg
bWlkZGxlIG9mIGEgZG9jdW1lbnQncyBsaWZldGltZS4KLS8vIFRoZSBNYWMgcG9ydCB1c2VzIHRo
aXMgZmxhZyB3aGVuIHJlZ2lzdGVyaW5nIGFuZCBkZXJlZ2lzdGVyaW5nIHBsYXRmb3JtLWRlcGVu
ZGVudCBzY3JvbGxiYXIKLS8vIG9iamVjdHMuIFRoZXJlZm9yZSwgaWYgdGhpcyBjaGFuZ2VzIGF0
IGFuIHVuZXhwZWN0ZWQgdGltZSwgZGVyZWdpc3RyYXRpb24gbWF5IG5vdCBoYXBwZW4KLS8vIGNv
cnJlY3RseSwgd2hpY2ggbWF5IGNhdXNlIHRoZSBwbGF0Zm9ybSB0byBmb2xsb3cgZGFuZ2xpbmcg
cG9pbnRlcnMuCi12b2lkIFNldHRpbmdzOjpzZXRNb2NrU2Nyb2xsYmFyc0VuYWJsZWQoYm9vbCBm
bGFnKQotewotICAgIGdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmbGFnOwotICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCB1cGRhdGUgc2Nyb2xsIGJhcnMgaW4gZXhpc3RpbmcgcGFnZXMuCi19Ci0K
LWJvb2wgU2V0dGluZ3M6Om1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIGdN
b2NrU2Nyb2xsYmFyc0VuYWJsZWQ7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldFVzZXNPdmVybGF5
U2Nyb2xsYmFycyhib29sIGZsYWcpCi17Ci0gICAgZ1VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZs
YWc7Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBzY3JvbGwgYmFycyBpbiBleGlz
dGluZyBwYWdlcy4KLX0KLQotYm9vbCBTZXR0aW5nczo6dXNlc092ZXJsYXlTY3JvbGxiYXJzKCkK
LXsKLSAgICByZXR1cm4gZ1VzZXNPdmVybGF5U2Nyb2xsYmFyczsKLX0KLQotdm9pZCBTZXR0aW5n
czo6c2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcihib29sIGZsYWcpCi17Ci0gICAgZ01vY2tTY3Jv
bGxBbmltYXRvckVuYWJsZWQgPSBmbGFnOwotfQotCi1ib29sIFNldHRpbmdzOjp1c2VzTW9ja1Nj
cm9sbEFuaW1hdG9yKCkKLXsKLSAgICByZXR1cm4gZ01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQ7
Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmli
dXRlU2V0dGVycyhib29sIGZsYWcpCi17Ci0gICAgZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NT
QXR0cmlidXRlU2V0dGVycyA9IGZsYWc7Ci19Ci0KLWJvb2wgU2V0dGluZ3M6OnNob3VsZFJlc3Bl
Y3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycygpCi17Ci0gICAgcmV0dXJuIGdTaG91bGRS
ZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnM7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6
OnNldEhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGJvb2wgZmxhZykKLXsKLSAg
ICBpZiAobV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9PSBmbGFnKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA9
IGZsYWc7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlRE9NVGlt
ZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEhpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKGJvb2wgZmxhZykKLXsKLSAgICBp
ZiAobV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyA9PSBmbGFnKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0lu
Y3JlYXNlcyA9IGZsYWc7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5oaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6
OnNldEhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChib29sIGZsYWcpCi17
Ci0gICAgaWYgKG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID09IGZs
YWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5z
aW9uRW5hYmxlZCA9IGZsYWc7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5oaWRk
ZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCgpOwotfQotCi12b2lkIFNl
dHRpbmdzOjpzZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZChib29sIGZsYWcp
Ci17Ci0gICAgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkID0gZmxhZzsKLX0K
LQotdm9pZCBTZXR0aW5nczo6c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBm
bGFnKQotewotICAgIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQgPSBmbGFn
OwotfQotCi0jaWYgUExBVEZPUk0oSU9TKQotdm9pZCBTZXR0aW5nczo6c2V0QXVkaW9TZXNzaW9u
Q2F0ZWdvcnlPdmVycmlkZSh1bnNpZ25lZCBzZXNzaW9uQ2F0ZWdvcnkpCi17Ci0gICAgQXVkaW9T
ZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuc2V0Q2F0ZWdvcnlPdmVycmlkZShzdGF0aWNfY2FzdDxB
dWRpb1Nlc3Npb246OkNhdGVnb3J5VHlwZT4oc2Vzc2lvbkNhdGVnb3J5KSk7Ci19Ci0KLXVuc2ln
bmVkIFNldHRpbmdzOjphdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKCkKLXsKLSAgICByZXR1
cm4gQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCkuY2F0ZWdvcnlPdmVycmlkZSgpOwotfQot
Ci12b2lkIFNldHRpbmdzOjpzZXROZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKGJvb2wg
dHJhY2tpbmdFbmFibGVkKQotewotICAgIGdOZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVk
ID0gdHJhY2tpbmdFbmFibGVkOwotfQotCi1ib29sIFNldHRpbmdzOjpuZXR3b3JrRGF0YVVzYWdl
VHJhY2tpbmdFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gZ05ldHdvcmtEYXRhVXNhZ2VUcmFja2lu
Z0VuYWJsZWQ7Ci19Ci0KLXN0YXRpYyBTdHJpbmcmIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1l
R2xvYmFsKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBuZXR3b3JrSW50
ZXJmYWNlTmFtZTsKLSAgICByZXR1cm4gbmV0d29ya0ludGVyZmFjZU5hbWU7Ci19Ci0KLXZvaWQg
U2V0dGluZ3M6OnNldE5ldHdvcmtJbnRlcmZhY2VOYW1lKGNvbnN0IFN0cmluZyYgbmV0d29ya0lu
dGVyZmFjZU5hbWUpCi17Ci0gICAgc2hhcmVkTmV0d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKSA9
IG5ldHdvcmtJbnRlcmZhY2VOYW1lOwotfQotCi1jb25zdCBTdHJpbmcmIFNldHRpbmdzOjpuZXR3
b3JrSW50ZXJmYWNlTmFtZSgpCi17Ci0gICAgcmV0dXJuIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VO
YW1lR2xvYmFsKCk7Ci19Ci0jZW5kaWYKLQotYm9vbCBTZXR0aW5nczo6Z2xvYmFsQ29uc3RSZWRl
Y2xhcmF0aW9uU2hvdWxkVGhyb3coKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4g
IU1hY0FwcGxpY2F0aW9uOjppc0lCb29rcygpOwotI2VsaWYgUExBVEZPUk0oSU9TKQotICAgIHJl
dHVybiAhSU9TQXBwbGljYXRpb246OmlzSUJvb2tzKCk7Ci0jZWxzZQotICAgIHJldHVybiB0cnVl
OwotI2VuZGlmCi19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldEFsbG93c0FueVNTTENlcnRpZmljYXRl
KGJvb2wgYWxsb3dBbnlTU0xDZXJ0aWZpY2F0ZSkKLXsKLSAgICBnQWxsb3dzQW55U1NMQ2VydGlm
aWNhdGUgPSBhbGxvd0FueVNTTENlcnRpZmljYXRlOwotfQotCi1ib29sIFNldHRpbmdzOjphbGxv
d3NBbnlTU0xDZXJ0aWZpY2F0ZSgpCi17Ci0gICAgcmV0dXJuIGdBbGxvd3NBbnlTU0xDZXJ0aWZp
Y2F0ZTsKLX0KLQotI2lmICFQTEFURk9STShDT0NPQSkKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6
OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpCi17Ci0g
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBTZXR0aW5nczo6c2V0
TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZXMpCi17Ci0gICAgbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJl
U3VwcG9ydC5zaHJpbmsoMCk7Ci0gICAgZm9yIChhdXRvIHR5cGUgOiBTdHJpbmdWaWV3KGNvbnRl
bnRUeXBlcykuc3BsaXQoJzonKSkKLSAgICAgICAgbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmlu
Z0hhcmR3YXJlU3VwcG9ydC5hcHBlbmQoQ29udGVudFR5cGUgeyB0eXBlLnRvU3RyaW5nKCkgfSk7
Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdh
cmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIGNvbnRlbnRUeXBlcykKLXsKLSAg
ICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0ID0gY29udGVudFR5
cGVzOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3Zu
OmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAkocmV2aXNpb24gMjIyNzY2KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCShub25leGlzdGVudCkKQEAgLTEsMzQ3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiAgICAgICAgICAgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFt
LmRlbm5pc0BnbWFpbC5jb20pCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCi0jaW5jbHVk
ZSAiU2VjdXJpdHlPcmlnaW4uaCIKLSNpbmNsdWRlICJTZXR0aW5nc0RlZmF1bHRWYWx1ZXMuaCIK
LSNpbmNsdWRlICJTZXR0aW5nc0dlbmVyYXRlZC5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5j
bHVkZSAiVVJMLmgiCi0jaW5jbHVkZSA8dW5pY29kZS91c2NyaXB0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRm9udEdlbmVyaWNGYW1pbGllczsKLQotY2xhc3MgU2V0dGluZ3MgOiBwdWJsaWMgU2V0
dGluZ3NHZW5lcmF0ZWQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0dGluZ3M+IGNyZWF0
ZShQYWdlKik7Ci0gICAgflNldHRpbmdzKCk7Ci0KLSAgICB2b2lkIHBhZ2VEZXN0cm95ZWQoKSB7
IG1fcGFnZSA9IG51bGxwdHI7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhbmRh
cmRGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9D
T01NT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRG
b250RmFtaWx5KFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pIGNvbnN0OwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwg
VVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
QXRvbWljU3RyaW5nJiBmaXhlZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1P
TikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNlcmlmRm9udEZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmLCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIHNlcmlmRm9udEZhbWlseShVU2NyaXB0
Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0U2Fuc1NlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBVU2NyaXB0Q29kZSA9
IFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcm
IHNhbnNTZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVf
RVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgY3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUg
PSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZh
bnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQ
VF9DT01NT04pOwotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgZmFudGFz
eUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOwotICAgIFdFQkNPUkVfRVhQT1JU
IGNvbnN0IEF0b21pY1N0cmluZyYgcGljdG9ncmFwaEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBV
U0NSSVBUX0NPTU1PTikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBk
ZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGZsb2F0IGRlZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXplKCk7Ci0KLSAgICAvLyBPbmx5IHNldCBi
eSBMYXlvdXQgVGVzdHMuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYVR5cGVPdmVy
cmlkZShjb25zdCBTdHJpbmcmKTsKLSAgICBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRl
KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGVPdmVycmlkZTsgfQotCi0gICAgLy8gVW5saWtl
IGFyZUltYWdlc0VuYWJsZWQsIHRoaXMgb25seSBzdXBwcmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQg
b2YKLSAgICAvLyB0aGUgaW1hZ2UgVVJMLiAgQSBjYWNoZWQgaW1hZ2Ugd2lsbCBzdGlsbCBiZSBy
ZW5kZXJlZCBpZiByZXF1ZXN0ZWQuCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMb2Fkc0lt
YWdlc0F1dG9tYXRpY2FsbHkoYm9vbCk7Ci0gICAgYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoKSBjb25zdCB7IHJldHVybiBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseTsgfQotCi0gICAg
Ly8gQ2xpZW50cyB0aGF0IGV4ZWN1dGUgc2NyaXB0IHNob3VsZCBjYWxsIFNjcmlwdENvbnRyb2xs
ZXI6OmNhbkV4ZWN1dGVTY3JpcHRzKCkKLSAgICAvLyBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24u
IFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4ZWN1dGVTY3JpcHRzKCkgY2hlY2tzIHRoZQotICAgIC8v
IEhUTUwgc2FuZGJveCwgcGx1Zy1pbiBzYW5kYm94aW5nLCBhbmQgb3RoZXIgaW1wb3J0YW50IGRl
dGFpbHMuCi0gICAgYm9vbCBpc1NjcmlwdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2Ny
aXB0RW5hYmxlZDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2NyaXB0RW5hYmxlZChi
b29sKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW1hZ2VzRW5hYmxlZChib29sKTsK
LSAgICBib29sIGFyZUltYWdlc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZUltYWdlc0Vu
YWJsZWQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9v
bCk7Ci0gICAgYm9vbCBhcmVQbHVnaW5zRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlUGx1
Z2luc0VuYWJsZWQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RE5TUHJlZmV0Y2hp
bmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgZG5zUHJlZmV0Y2hpbmdFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQ7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBVUkwmKTsKLSAgICBjb25zdCBV
UkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb247IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWluaW11bURPTVRp
bWVySW50ZXJ2YWwoU2Vjb25kcyk7IC8vIEluaXRpYWxpemVkIHRvIERPTVRpbWVyOjpkZWZhdWx0
TWluaW11bUludGVydmFsKCkuCi0gICAgU2Vjb25kcyBtaW5pbXVtRE9NVGltZXJJbnRlcnZhbCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bURPTVRpbWVySW50ZXJ2YWw7IH0KLQotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0TGF5b3V0SW50ZXJ2YWwoU2Vjb25kcyk7Ci0gICAgU2Vjb25kcyBs
YXlvdXRJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0SW50ZXJ2YWw7IH0KLQotICAg
IGJvb2wgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChib29sKTsK
LSAgICBib29sIGhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKCkgY29u
c3QgeyByZXR1cm4gbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlczsg
fQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z0F1dG9JbmNyZWFzZXMoYm9vbCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFVzZXNQ
YWdlQ2FjaGUoYm9vbCk7Ci0gICAgYm9vbCB1c2VzUGFnZUNhY2hlKCkgY29uc3QgeyByZXR1cm4g
bV91c2VzUGFnZUNhY2hlOyB9Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgYm9v
bCByZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNl
VXNhZ2VPdmVybGF5VmlzaWJsZTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3Vy
Y2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4p
Ci0gICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7
Ci0gICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoKSB7IHJldHVy
biBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnM7IH0KLSNlbmRpZgotCi0gICAgc3RhdGlj
IGJvb2wgaXNQb3N0TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7Ci0gICAgc3RhdGlj
IGJvb2wgaXNQb3N0QmFja2dyb3VuZGluZ0NQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7Ci0g
ICAgc3RhdGljIGJvb2wgaXNQZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJs
ZWQoKTsKLQotICAgIHN0YXRpYyBib29sIGlzUG9zdExvYWRNZW1vcnlVc2FnZU1lYXN1cmVtZW50
RW5hYmxlZCgpOwotICAgIHN0YXRpYyBib29sIGlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2Fn
ZU1lYXN1cmVtZW50RW5hYmxlZCgpOwotCi0gICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRl
Y2xhcmF0aW9uU2hvdWxkVGhyb3coKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFj
a2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbCk7Ci0gICAgYm9vbCBiYWNrZ3JvdW5k
U2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3Vs
ZEV4dGVuZEJleW9uZFBhZ2U7IH0KLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGZsYWcpOwot
ICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5k
YXRpb25FbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3Vu
ZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZChib29sIGZsYWcpOwotICAgIHN0YXRpYyBib29sIGlz
QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25O
U1VSTFNlc3Npb25FbmFibGVkOyB9Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFFUS2l0RW5hYmxlZChib29sIGZsYWcpOwot
ICAgIHN0YXRpYyBib29sIGlzUVRLaXRFbmFibGVkKCkgeyByZXR1cm4gZ1FUS2l0RW5hYmxlZDsg
fQotI2Vsc2UKLSAgICBzdGF0aWMgYm9vbCBpc1FUS2l0RW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNl
OyB9Ci0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgc2V0R1N0cmVhbWVyRW5hYmxlZChib29sIGZsYWcpOwotICAgIHN0YXRpYyBib29s
IGlzR1N0cmVhbWVyRW5hYmxlZCgpIHsgcmV0dXJuIGdHU3RyZWFtZXJFbmFibGVkOyB9Ci0jZW5k
aWYKLQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE1vY2tTY3JvbGxiYXJzRW5h
YmxlZChib29sIGZsYWcpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIG1vY2tTY3Jv
bGxiYXJzRW5hYmxlZCgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0VXNl
c092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZyk7Ci0gICAgc3RhdGljIGJvb2wgdXNlc092ZXJs
YXlTY3JvbGxiYXJzKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2Vz
TW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wpOwotICAgIHN0YXRpYyBib29sIHVzZXNNb2NrU2Nyb2xs
QW5pbWF0b3IoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RvcmFnZUJsb2NraW5n
UG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kpOwotICAgIFNlY3Vy
aXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgc3RvcmFnZUJsb2NraW5nUG9saWN5KCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3k7IH0KLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sKTsK
LSAgICBib29sIHNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSB7IHJldHVybiBt
X3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQ7IH0KLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0
dGVycyhib29sKTsKLSAgICBzdGF0aWMgYm9vbCBzaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0
dHJpYnV0ZVNldHRlcnMoKTsKLQotICAgIGJvb2wgaGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3Bl
bnNpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvbkVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VD
U1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChib29sKTsKLQotICAgIHN0YXRpYyBib29sIGxv
d1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKCkgeyByZXR1cm4gZ0xvd1Bvd2VyVmlk
ZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgc2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCk7Ci0KLSAgICBz
dGF0aWMgYm9vbCByZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpIHsgcmV0dXJuIGdSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgdm9pZCBzZXRSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKLQotI2lm
IFBMQVRGT1JNKElPUykKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBdWRpb1Nl
c3Npb25DYXRlZ29yeU92ZXJyaWRlKHVuc2lnbmVkKTsKLSAgICBzdGF0aWMgdW5zaWduZWQgYXVk
aW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgc2V0TmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZChib29sKTsKLSAgICBzdGF0
aWMgYm9vbCBuZXR3b3JrRGF0YVVzYWdlVHJhY2tpbmdFbmFibGVkKCk7Ci0KLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdm9pZCBzZXROZXR3b3JrSW50ZXJmYWNlTmFtZShjb25zdCBTdHJpbmcm
KTsKLSAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBuZXR3b3JrSW50ZXJmYWNlTmFtZSgpOwotCi0j
aWYgSEFWRShBVktJVCkKLSAgICBzdGF0aWMgdm9pZCBzZXRBVktpdEVuYWJsZWQoYm9vbCBmbGFn
KSB7IGdBVktpdEVuYWJsZWQgPSBmbGFnOyB9Ci0jZW5kaWYKLSAgICBzdGF0aWMgYm9vbCBhdktp
dEVuYWJsZWQoKSB7IHJldHVybiBnQVZLaXRFbmFibGVkOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBz
ZXRTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uKGJvb2wgZmxhZykgeyBnU2hv
dWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVPYnNlcnZhdGlvbiA9IGZsYWc7IH0KLSAgICBzdGF0aWMg
Ym9vbCBzaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uKCkgeyByZXR1cm4gZ1No
b3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb247IH0KLSNlbmRpZgotCi0jaWYgVVNF
KEFVRElPX1NFU1NJT04pCi0gICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNz
aW9uQ2F0ZWdvcnkoYm9vbCBmbGFnKSB7IGdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmbGFnOyB9Ci0g
ICAgc3RhdGljIGJvb2wgc2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoKSB7IHJldHVy
biBnTWFuYWdlQXVkaW9TZXNzaW9uOyB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyB2b2lkIHNldEN1
c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZChib29sIGVuYWJsZWQpIHsgZ0N1c3RvbVBhc3RlYm9h
cmREYXRhRW5hYmxlZCA9IGVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKTsKLSAgICAKLSNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQotICAgIHN0YXRpYyBib29sIG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVk
KGJvb2wpOwotCi0gICAgYm9vbCBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24o
KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCk7Ci0jZW5kaWYKLQotICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyB2b2lkIHNldEFsbG93c0FueVNTTENlcnRpZmljYXRlKGJvb2wpOwotICAgIHN0
YXRpYyBib29sIGFsbG93c0FueVNTTENlcnRpZmljYXRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgY29uc3QgU3RyaW5nJiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdI
YXJkd2FyZVN1cHBvcnQoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhQ29udGVu
dFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4m
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5n
SGFyZHdhcmVTdXBwb3J0KGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFZlY3RvcjxDb250ZW50
VHlwZT4mIG1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkgY29uc3Qg
eyByZXR1cm4gbV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydDsgfQot
Ci1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNldHRpbmdzKFBhZ2UqKTsKLQotICAgIHZvaWQgaW5p
dGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKTsKLQotICAgIFN0cmluZyBtX21lZGlhVHlwZU92
ZXJyaWRlOwotICAgIFVSTCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247Ci0gICAgY29uc3Qgc3Rk
Ojp1bmlxdWVfcHRyPEZvbnRHZW5lcmljRmFtaWxpZXM+IG1fZm9udEdlbmVyaWNGYW1pbGllczsK
LSAgICBTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJsb2Nr
aW5nUG9saWN5OwotICAgIFNlY29uZHMgbV9sYXlvdXRJbnRlcnZhbDsKLSAgICBTZWNvbmRzIG1f
bWluaW11bURPTVRpbWVySW50ZXJ2YWw7Ci0KLSAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5IDogMTsKLSAgICBib29sIG1fYXJlSW1hZ2VzRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBt
X2FyZVBsdWdpbnNFbmFibGVkIDogMTsKLSAgICBib29sIG1faXNTY3JpcHRFbmFibGVkIDogMTsK
LSAgICBib29sIG1fdXNlc1BhZ2VDYWNoZSA6IDE7Ci0gICAgYm9vbCBtX2JhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlIDogMTsKLSAgICBib29sIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVk
IDogMTsKLQotICAgIGJvb2wgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkIDog
MTsKLQotICAgIFRpbWVyIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lcjsKLSAgICB2b2lk
IGltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCgpOwotCi0gICAgYm9vbCBtX2hpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdFbmFibGVkIDogMTsKLSAgICBib29sIG1faGlkZGVuUGFnZUNT
U0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkIDogMTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKLSAgICBib29sIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlIHsgZmFsc2UgfTsK
LSNlbmRpZgotCi0gICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5j
cmVhc2VzIHsgZmFsc2UgfTsKLQotI2lmIFVTRShBVkZPVU5EQVRJT04pCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZ0FWRm91bmRhdGlvbkVuYWJsZWQ7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIGJvb2wgZ0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQ7Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdR
VEtpdEVuYWJsZWQ7Ci0jZW5kaWYKLQotI2lmIFVTRShHU1RSRUFNRVIpCi0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIGJvb2wgZ0dTdHJlYW1lckVuYWJsZWQ7Ci0jZW5kaWYKLQotICAgIHN0YXRp
YyBib29sIGdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7Ci0gICAgc3RhdGljIGJvb2wgZ1VzZXNPdmVy
bGF5U2Nyb2xsYmFyczsKLSAgICBzdGF0aWMgYm9vbCBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxl
ZDsKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgYm9vbCBnU2hvdWxkVXNlSGlnaFJl
c29sdXRpb25UaW1lcnM7Ci0jZW5kaWYKLSAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUmVzcGVjdFBy
aW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzOwotI2lmIFBMQVRGT1JNKElPUykKLSAgICBzdGF0
aWMgYm9vbCBnTmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgYm9vbCBnQVZLaXRFbmFibGVkOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBib29sIGdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uOwotI2VuZGlmCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ01hbmFnZUF1ZGlvU2Vzc2lvbjsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOwot
Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBzdGF0aWMgYm9vbCBnTW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZDsKLSAgICBzdGF0aWMgYm9vbCBnTWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uOwotI2VuZGlmCi0KLSAgICBzdGF0aWMgYm9vbCBnTG93UG93ZXJWaWRlb0F1
ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7Ci0gICAgc3RhdGljIGJvb2wgZ1Jlc291cmNlTG9hZFN0YXRp
c3RpY3NFbmFibGVkRW5hYmxlZDsKLSAgICBzdGF0aWMgYm9vbCBnQWxsb3dzQW55U1NMQ2VydGlm
aWNhdGU7Ci0KLSAgICBWZWN0b3I8Q29udGVudFR5cGU+IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1
aXJpbmdIYXJkd2FyZVN1cHBvcnQ7Ci19OwotCi1pbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0
TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKLXsKLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0K
LWlubGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW5nQ1BVVXNhZ2VNZWFzdXJl
bWVudEVuYWJsZWQoKQotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gdHJ1ZTsKLSNl
bHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLWlubGluZSBib29sIFNldHRpbmdz
Ojppc1BlckFjdGl2aXR5U3RhdGVDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCi17Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7
Ci0jZW5kaWYKLX0KLQotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdExvYWRNZW1vcnlVc2Fn
ZU1lYXN1cmVtZW50RW5hYmxlZCgpCi17Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgcmV0dXJu
IHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi1pbmxpbmUgYm9v
bCBTZXR0aW5nczo6aXNQb3N0QmFja2dyb3VuZGluZ01lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFi
bGVkKCkKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHJldmlz
aW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaW4JKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDEwICszNSwxMCBAQCBkZXZpY2VIZWlnaHQgdHlwZT1pbnQsIGluaXRpYWw9
MAogIyBzaW5jZSB0aGUgbWVtb3J5IHVzZWQgd29uJ3QgYmUgcmVsZWFzZWQgdW50aWwgdGhlIFBh
Z2UgaXMgZGVzdHJveWVkLgogc2Vzc2lvblN0b3JhZ2VRdW90YSB0eXBlPXVuc2lnbmVkLCBpbml0
aWFsPVN0b3JhZ2VNYXA6Om5vUXVvdGEKIAotbWluaW11bUZvbnRTaXplIHR5cGU9aW50LCBpbml0
aWFsPTAsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1taW5pbXVtTG9naWNhbEZv
bnRTaXplIHR5cGU9aW50LCBpbml0aWFsPTAsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1l
cz0xCi1kZWZhdWx0Rm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MTYsIHNldE5lZWRzU3R5bGVS
ZWNhbGNJbkFsbEZyYW1lcz0xCi1kZWZhdWx0Rml4ZWRGb250U2l6ZSB0eXBlPWludCwgaW5pdGlh
bD0wLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQorbWluaW11bUZvbnRTaXplIHR5
cGU9aW50LCBpbml0aWFsPTAsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cworbWluaW11bUxvZ2ljYWxGb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0wLCBvbkNoYW5nZT1z
ZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK2RlZmF1bHRGb250U2l6ZSB0eXBlPWludCwg
aW5pdGlhbD0xNiwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitkZWZh
dWx0Rml4ZWRGb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0wLCBvbkNoYW5nZT1zZXROZWVkc1Jl
Y2FsY1N0eWxlSW5BbGxGcmFtZXMKIAogZWRpdGluZ0JlaGF2aW9yVHlwZSB0eXBlPUVkaXRpbmdC
ZWhhdmlvclR5cGUsIGluaXRpYWw9ZWRpdGluZ0JlaGF2aW9yVHlwZUZvclBsYXRmb3JtKCkKIG1h
eGltdW1IVE1MUGFyc2VyRE9NVHJlZURlcHRoIHR5cGU9dW5zaWduZWQsIGluaXRpYWw9ZGVmYXVs
dE1heGltdW1IVE1MUGFyc2VyRE9NVHJlZURlcHRoCkBAIC01OSwxNCArNTksMTYgQEAgc2hvdWxk
UHJpbnRCYWNrZ3JvdW5kcyBpbml0aWFsPWZhbHNlCiB1c2VzRGFzaGJvYXJkQmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSBpbml0aWFsPWZhbHNlLCBjb25kaXRpb25hbD1EQVNIQk9BUkRfU1VQUE9S
VAogY2xpcGJvYXJkQWNjZXNzUG9saWN5IHR5cGU9Q2xpcGJvYXJkQWNjZXNzUG9saWN5LCBpbml0
aWFsPUNsaXBib2FyZEFjY2Vzc1BvbGljeTo6UmVxdWlyZXNVc2VyR2VzdHVyZQogCi10ZXh0QXJl
YXNBcmVSZXNpemFibGUgaW5pdGlhbD1mYWxzZSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJh
bWVzPTEKLWF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkIGluaXRpYWw9dHJ1ZSwgc2V0TmVlZHNT
dHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLWFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIGlu
aXRpYWw9dHJ1ZSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLWFjY2VsZXJhdGVk
Q29tcG9zaXRlZEFuaW1hdGlvbnNFbmFibGVkIGluaXRpYWw9dHJ1ZSwgc2V0TmVlZHNTdHlsZVJl
Y2FsY0luQWxsRnJhbWVzPTEKLXNob3dEZWJ1Z0JvcmRlcnMgaW5pdGlhbD1mYWxzZSwgc2V0TmVl
ZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLXNob3dSZXBhaW50Q291bnRlciBpbml0aWFsPWZh
bHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQordGV4dEFyZWFzQXJlUmVzaXph
YmxlIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cworYXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBvbkNoYW5nZT1zZXRO
ZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gdHlwZT1V
UkwsIG9uQ2hhbmdlPXVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkCithY2NlbGVyYXRlZENv
bXBvc2l0aW5nRW5hYmxlZCBpbml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5
bGVJbkFsbEZyYW1lcworYWNjZWxlcmF0ZWRDb21wb3NpdGVkQW5pbWF0aW9uc0VuYWJsZWQgaW5p
dGlhbD10cnVlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK3Nob3dE
ZWJ1Z0JvcmRlcnMgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzCitzaG93UmVwYWludENvdW50ZXIgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiB2aXNpYmxlRGVidWdPdmVybGF5UmVnaW9ucyB0
eXBlPURlYnVnT3ZlcmxheVJlZ2lvbnMsIGluaXRpYWw9MAogc2hvd1RpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yIGluaXRpYWw9ZmFsc2UKK3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSBpbml0aWFs
PWZhbHNlLCBvbkNoYW5nZT1yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGVDaGFuZ2VkLCBjb25k
aXRpb249UkVTT1VSQ0VfVVNBR0UKIAogIyBUaGlzIGlzIGEgcXVpcmsgd2UgYXJlIHByby1hY3Rp
dmVseSBhcHBseWluZyB0byBvbGQgYXBwbGljYXRpb25zLiBJdCBjaGFuZ2VzIGtleWJvYXJkIGV2
ZW50IGRpc3BhdGNoaW5nLAogIyBtYWtpbmcga2V5SWRlbnRpZmllciBhdmFpbGFibGUgb24ga2V5
cHJlc3MgZXZlbnRzLCBtYWtpbmcgY2hhckNvZGUgYXZhaWxhYmxlIG9uIGtleWRvd24va2V5dXAg
ZXZlbnRzLApAQCAtMTk5LDEzICsyMDEsMTMgQEAgc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5h
YmxlZCBpbml0aWFsPQogdXNlTGVnYWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciBp
bml0aWFsPWZhbHNlCiBmaXhlZEJhY2tncm91bmRzUGFpbnRSZWxhdGl2ZVRvRG9jdW1lbnQgaW5p
dGlhbD1kZWZhdWx0Rml4ZWRCYWNrZ3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50CiAKLXRl
eHRBdXRvc2l6aW5nRW5hYmxlZCBpbml0aWFsPWRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQo
KSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEsIGNvbmRpdGlvbmFsPVRFWFRfQVVU
T1NJWklORwotdGV4dEF1dG9zaXppbmdXaW5kb3dTaXplT3ZlcnJpZGUgdHlwZT1JbnRTaXplLCBz
ZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MSwgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0la
SU5HCi1taW5pbXVtWm9vbUZvbnRTaXplIHR5cGU9ZmxvYXQsIGluaXRpYWw9ZGVmYXVsdE1pbmlt
dW1ab29tRm9udFNpemUsIGNvbmRpdGlvbmFsPVRFWFRfQVVUT1NJWklORwotCi1zdWJwaXhlbEFu
dGlhbGlhc2VkTGF5ZXJUZXh0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVj
YWxjSW5BbGxGcmFtZXM9MQotc2ltcGxlTGluZUxheW91dEVuYWJsZWQgaW5pdGlhbD10cnVlLCBz
ZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotc2ltcGxlTGluZUxheW91dERlYnVnQm9y
ZGVyc0VuYWJsZWQgaW5pdGlhbD1mYWxzZSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVz
PTEKK3RleHRBdXRvc2l6aW5nRW5hYmxlZCBpbml0aWFsPWRlZmF1bHRUZXh0QXV0b3NpemluZ0Vu
YWJsZWQoKSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzLCBjb25kaXRp
b25hbD1URVhUX0FVVE9TSVpJTkcKK3RleHRBdXRvc2l6aW5nV2luZG93U2l6ZU92ZXJyaWRlIHR5
cGU9SW50U2l6ZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzLCBjb25k
aXRpb25hbD1URVhUX0FVVE9TSVpJTkcKK21pbmltdW1ab29tRm9udFNpemUgdHlwZT1mbG9hdCwg
aW5pdGlhbD1kZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpLCBjb25kaXRpb25hbD1URVhUX0FV
VE9TSVpJTkcKKworc3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQgaW5pdGlhbD1m
YWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaW1wbGVMaW5l
TGF5b3V0RW5hYmxlZCBpbml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJ
bkFsbEZyYW1lcworc2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWQgaW5pdGlhbD1m
YWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAKIHN1YnBpeGVs
Q1NTT01FbGVtZW50TWV0cmljc0VuYWJsZWQgaW5pdGlhbD1mYWxzZQogCkBAIC0yNzEsNyArMjcz
LDcgQEAgdHJlYXRJUEFkZHJlc3NBc0RvbWFpbiBpbml0aWFsPWZhbHNlCiBtZWRpYVByZWxvYWRp
bmdFbmFibGVkIGluaXRpYWw9ZmFsc2UKIAogIyBSdW50aW1lLWVuYWJsZWQgZmVhdHVyZXMKLXZp
c3VhbFZpZXdwb3J0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5B
bGxGcmFtZXM9MQordmlzdWFsVmlld3BvcnRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdl
PXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBpbnB1dEV2ZW50c0VuYWJsZWQgaW5p
dGlhbD10cnVlCiAKQEAgLTMwNiw3ICszMDgsNyBAQCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCBp
bml0aWFsPWZhbHNlCiAKIHRpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRy
b2xzIHR5cGU9U2Vjb25kcywgaW5pdGlhbD0zX3MgCiAKLWZvbnRGYWxsYmFja1ByZWZlcnNQaWN0
b2dyYXBocyBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQor
Zm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogd2ViRm9udHNBbHdheXNGYWxsQmFjayBpbml0
aWFsPWZhbHNlCiAKIHBheW1lbnRSZXF1ZXN0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBjb25kaXRp
b25hbD1QQVlNRU5UX1JFUVVFU1QKQEAgLTMxNyw2ICszMTksMzAgQEAgYXBwbGVQYXlDYXBhYmls
aXR5RGlzY2xvc3VyZUFsbG93ZWQgaW5pdAogamF2YUVuYWJsZWQgaW5pdGlhbD1mYWxzZSwgZ2V0
dGVyPWlzSmF2YUVuYWJsZWQKIGphdmFFbmFibGVkRm9yTG9jYWxGaWxlcyBpbml0aWFsPXRydWUs
IGdldHRlcj1pc0phdmFFbmFibGVkRm9yTG9jYWxGaWxlcwogCisjIFVubGlrZSB0aGUgaW1hZ2Vz
RW5hYmxlZCBzZXR0aW5nLCB0aGlzIG9ubHkgc3VwcHJlc3NlcyB0aGUgbmV0d29yayBsb2FkIG9m
CisjIHRoZSBpbWFnZSBVUkwuIEEgY2FjaGVkIGltYWdlIHdpbGwgc3RpbGwgYmUgcmVuZGVyZWQg
aWYgcmVxdWVzdGVkLgorbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5IGluaXRpYWw9ZmFsc2UsIG9u
Q2hhbmdlPWltYWdlc0VuYWJsZWRDaGFuZ2VkCitpbWFnZXNFbmFibGVkIGluaXRpYWw9dHJ1ZSwg
Z2V0dGVyPWFyZUltYWdlc0VuYWJsZWQsIG9uQ2hhbmdlPWltYWdlc0VuYWJsZWRDaGFuZ2VkCitz
Y3JpcHRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIGdldHRlcj1pc1NjcmlwdEVuYWJsZWQsIG9uQ2hh
bmdlPXNjcmlwdEVuYWJsZWRDaGFuZ2VkCitwbHVnaW5zRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBn
ZXR0ZXI9YXJlUGx1Z2luc0VuYWJsZWQsIG9uQ2hhbmdlPXBsdWdpbnNFbmFibGVkQ2hhbmdlZAor
Cit1c2VzUGFnZUNhY2hlIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXVzZXNQYWdlQ2FjaGVDaGFu
Z2VkCisKK2Ruc1ByZWZldGNoaW5nRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1kbnNQ
cmVmZXRjaGluZ0VuYWJsZWRDaGFuZ2VkCisKK2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlQ2hhbmdlZAorCitzY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkIGluaXRpYWw9
ZmFsc2UsIG9uQ2hhbmdlPXNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2Vk
CisKK2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9u
Q2hhbmdlPWhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQKK2hpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdl
PWhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQKK2hpZGRlblBhZ2VDU1NB
bmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1oaWRkZW5Q
YWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWRDaGFuZ2VkCisKK3N0b3JhZ2VCbG9ja2lu
Z1BvbGljeSB0eXBlPVN0b3JhZ2VCbG9ja2luZ1BvbGljeSwgaW5pdGlhbD1BbGxvd0FsbFN0b3Jh
Z2UsIG9uQ2hhbmdlPXN0b3JhZ2VCbG9ja2luZ1BvbGljeUNoYW5nZWQKKworIyBPbmx5IHNldCBi
eSBMYXlvdXQgVGVzdHMuCittZWRpYVR5cGVPdmVycmlkZSB0eXBlPVN0cmluZywgaW5pdGlhbD0i
c2NyZWVuIiwgb25DaGFuZ2U9bWVkaWFUeXBlT3ZlcnJpZGVDaGFuZ2VkCisKIGZvbnRSZW5kZXJp
bmdNb2RlIHR5cGU9Rm9udFJlbmRlcmluZ01vZGUsIGluaXRpYWw9Rm9udFJlbmRlcmluZ01vZGU6
Ok5vcm1hbAogCiBwcmVmZXJNSU1FVHlwZUZvckltYWdlcyBpbml0aWFsPWZhbHNlCkBAIC0zMzAs
NCArMzU2LDQgQEAgbWVkaWFEZXZpY2VJZGVudGlmaWVyU3RvcmFnZURpcmVjdG9yeSB0eQogIyBj
YW4gZml4IHRoZSBidWcgZnJvbSB0aGVpciBlbmQuCiBuZWVkc0Fkb2JlRnJhbWVSZWxvYWRpbmdR
dWlyayBpbml0aWFsPWZhbHNlLCBnZXR0ZXI9bmVlZHNBY3JvYmF0RnJhbWVSZWxvYWRpbmdRdWly
awogCi10b3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBnZXR0ZXI9aXNU
b3VjaEV2ZW50RW11bGF0aW9uRW5hYmxlZCwgY29uZGl0aW9uYWw9VE9VQ0hfRVZFTlRTClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQordG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQgaW5pdGlh
bD1mYWxzZSwgZ2V0dGVyPWlzVG91Y2hFdmVudEVtdWxhdGlvbkVuYWJsZWQsIGNvbmRpdGlvbmFs
PVRPVUNIX0VWRU5UUwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmNwcAkocmV2
aXNpb24gMjIyNzY2KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcDoyMjI3
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDksIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisKKyNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIK
KyNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNv
dXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkNvb2tpZVN0b3JhZ2UuaCIKKyNpbmNsdWRlICJET01U
aW1lci5oIgorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkZvbnRHZW5lcmljRmFtaWxpZXMuaCIK
KyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKyNpbmNsdWRl
ICJNYWluRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFnZUNhY2hlLmgi
CisjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCisjaW5jbHVkZSA8bGltaXRz
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgPHd0Zi9zcGkvZGFyd2lu
L2R5bGRTUEkuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEFW
Rk9VTkRBVElPTikKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyTWFjLmgiCisj
ZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisjaW5jbHVkZSAiTW9ja1JlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyB2b2lkIHNldEltYWdlTG9hZGluZ1NldHRpbmdzKFBhZ2UqIHBhZ2UpCit7CisgICAgaWYg
KCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZwYWdl
LT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQo
KSkgeworICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnNl
dEltYWdlc0VuYWJsZWQocGFnZS0+c2V0dGluZ3MoKS5hcmVJbWFnZXNFbmFibGVkKCkpOworICAg
ICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRBdXRvTG9h
ZEltYWdlcyhwYWdlLT5zZXR0aW5ncygpLmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2Uo
UGFnZSogcGFnZSkKK3sKKyAgICBpbnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpOworICAgIGlm
IChwYWdlKQorICAgICAgICBwYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsK
K30KKworI2lmIFVTRShBVkZPVU5EQVRJT04pCitib29sIFNldHRpbmdzOjpnQVZGb3VuZGF0aW9u
RW5hYmxlZCA9IHRydWU7Citib29sIFNldHRpbmdzOjpnQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9u
RW5hYmxlZCA9IHRydWU7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorYm9vbCBTZXR0
aW5nczo6Z1FUS2l0RW5hYmxlZCA9IGZhbHNlOworI2VuZGlmCisKKyNpZiBVU0UoR1NUUkVBTUVS
KQorYm9vbCBTZXR0aW5nczo6Z0dTdHJlYW1lckVuYWJsZWQgPSB0cnVlOworI2VuZGlmCisKK2Jv
b2wgU2V0dGluZ3M6OmdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGlu
Z3M6OmdVc2VzT3ZlcmxheVNjcm9sbGJhcnMgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdNb2Nr
U2Nyb2xsQW5pbWF0b3JFbmFibGVkID0gZmFsc2U7CisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQorYm9vbCBTZXR0aW5nczo6Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBmYWxzZTsKK2Jv
b2wgU2V0dGluZ3M6OmdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSB0cnVl
OworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCitib29sIFNldHRpbmdzOjpnU2hvdWxkVXNl
SGlnaFJlc29sdXRpb25UaW1lcnMgPSB0cnVlOworI2VuZGlmCisgICAgCitib29sIFNldHRpbmdz
OjpnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmFsc2U7Citi
b29sIFNldHRpbmdzOjpnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgPSBmYWxz
ZTsKK2Jvb2wgU2V0dGluZ3M6OmdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJsZWQg
PSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGZhbHNl
OworCisjaWYgUExBVEZPUk0oSU9TKQorYm9vbCBTZXR0aW5nczo6Z05ldHdvcmtEYXRhVXNhZ2VU
cmFja2luZ0VuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdBVktpdEVuYWJsZWQgPSBm
YWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0
aW9uID0gZmFsc2U7CisjZW5kaWYKK2Jvb2wgU2V0dGluZ3M6OmdNYW5hZ2VBdWRpb1Nlc3Npb24g
PSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3M6OmdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQgPSBm
YWxzZTsKKworYm9vbCBTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkKK3sK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUN1c3RvbVBhc3RlYm9hcmREYXRh
VG9EZWZhdWx0VmFsdWU7CisgICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUN1c3RvbVBhc3Rl
Ym9hcmREYXRhVG9EZWZhdWx0VmFsdWUsIFtdIHsKKyNpZiBQTEFURk9STShJT1MpICYmIF9fSVBI
T05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTEwMzAwCisgICAgICAgIGdDdXN0b21QYXN0
ZWJvYXJkRGF0YUVuYWJsZWQgPSBJT1NBcHBsaWNhdGlvbjo6aXNNb2JpbGVTYWZhcmkoKSB8fCBk
eWxkX2dldF9wcm9ncmFtX3Nka192ZXJzaW9uKCkgPj0gRFlMRF9JT1NfVkVSU0lPTl8xMV8zOwor
I2VsaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0g
MTAxMzA0CisgICAgICAgIC8vIEZJWE1FOiBVcGRhdGUgdGhpcyBsaW5rZWQtb24gY2hlY2sgb25j
ZSB0aGUgY29ycmVjdCBtYWNybyBpcyBpbiB0aGUgU0RLLgorICAgICAgICBnQ3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkID0gTWFjQXBwbGljYXRpb246OmlzU2FmYXJpKCkgfHwgZHlsZF9nZXRf
cHJvZ3JhbV9zZGtfdmVyc2lvbigpID4gRFlMRF9NQUNPU1hfVkVSU0lPTl8xMF8xMzsKKyNlbHNl
CisgICAgICAgIGdDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQgPSBmYWxzZTsKKyNlbmRpZgor
ICAgIH0pOworICAgIHJldHVybiBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOworfQorCisv
LyBUaGlzIGFtb3VudCBvZiB0aW1lIG11c3QgaGF2ZSBlbGFwc2VkIGJlZm9yZSB3ZSB3aWxsIGV2
ZW4gY29uc2lkZXIgc2NoZWR1bGluZyBhIGxheW91dCB3aXRob3V0IGEgZGVsYXkuCisvLyBGSVhN
RTogRm9yIGZhc3RlciBtYWNoaW5lcyB0aGlzIHZhbHVlIGNhbiByZWFsbHkgYmUgbG93ZXJlZCB0
byAyMDAuIDI1MCBpcyBhZGVxdWF0ZSwgYnV0IGEgbGl0dGxlIGhpZ2gKKy8vIGZvciBkdWFsIEc1
cy4gOikKK3N0YXRpYyBjb25zdCBTZWNvbmRzIGxheW91dFNjaGVkdWxlVGhyZXNob2xkID0gMjUw
X21zOworCitTZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFnZSkKKyAgICA6IG1fbWVkaWFUeXBl
T3ZlcnJpZGUoInNjcmVlbiIpCisgICAgLCBtX2ZvbnRHZW5lcmljRmFtaWxpZXMoc3RkOjptYWtl
X3VuaXF1ZTxGb250R2VuZXJpY0ZhbWlsaWVzPigpKQorICAgICwgbV9zdG9yYWdlQmxvY2tpbmdQ
b2xpY3koU2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3RvcmFnZSkKKyAgICAsIG1fbGF5b3V0SW50
ZXJ2YWwobGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQpCisgICAgLCBtX21pbmltdW1ET01UaW1lcklu
dGVydmFsKERPTVRpbWVyOjpkZWZhdWx0TWluaW11bUludGVydmFsKCkpCisgICAgLCBtX2xvYWRz
SW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSkKKyAgICAsIG1fYXJlSW1hZ2VzRW5hYmxlZCh0cnVl
KQorICAgICwgbV9hcmVQbHVnaW5zRW5hYmxlZChmYWxzZSkKKyAgICAsIG1faXNTY3JpcHRFbmFi
bGVkKGZhbHNlKQorICAgICwgbV91c2VzUGFnZUNhY2hlKGZhbHNlKQorICAgICwgbV9iYWNrZ3Jv
dW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShmYWxzZSkKKyAgICAsIG1fZG5zUHJlZmV0Y2hpbmdF
bmFibGVkKGZhbHNlKQorICAgICwgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVk
KGZhbHNlKQorICAgICwgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyKCp0aGlzLCAmU2V0
dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCkKKyAgICAsIG1faGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoZmFsc2UpCisgICAgLCBtX2hpZGRlblBhZ2VDU1NB
bmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChmYWxzZSkKK3sKKyAgICAvLyBBIEZyYW1lIG1heSBu
b3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBBdG9taWNTdHJp
bmcKKyAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgorICAgIEF0b21pY1N0cmlu
Zzo6aW5pdCgpOworCisgICAgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKTsKKworICAg
IC8vIFBhZ2UgaXMgbm90IHlldCBmdWxseSBpbml0aWFsaXplZCB3aGVuIGNvbnN0cnVjdGluZyBT
ZXR0aW5ncywgc28ga2VlcGluZyBtX3BhZ2UgbnVsbCBvdmVyIGluaXRpYWxpemVEZWZhdWx0Rm9u
dEZhbWlsaWVzKCkgY2FsbC4KKyAgICBtX3BhZ2UgPSBwYWdlOworfQorCitTZXR0aW5nczo6flNl
dHRpbmdzKCkKK3sKK30KKworUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBhZ2UqIHBh
Z2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ3MocGFnZSkpOworfQorCisj
aWYgIVBMQVRGT1JNKENPQ09BKQordm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250
RmFtaWxpZXMoKQoreworICAgIC8vIE90aGVyIHBsYXRmb3JtcyBjYW4gc2V0IHVwIGZvbnRzIGZy
b20gYSBjbGllbnQsIGJ1dCBvbiBNYWMsIHdlIHdhbnQgaXQgaW4gV2ViQ29yZSB0byBzaGFyZSBj
b2RlIGJldHdlZW4gV2ViS2l0MSBhbmQgV2ViS2l0Mi4KK30KKyNlbmRpZgorCitjb25zdCBBdG9t
aWNTdHJpbmcmIFNldHRpbmdzOjpzdGFuZGFyZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0
KSBjb25zdAoreworICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnN0YW5kYXJkRm9u
dEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRTdGFuZGFyZEZvbnRGYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3sKKyAg
ICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFN0YW5kYXJkRm9udEZh
bWlseShmYW1pbHksIHNjcmlwdCk7CisgICAgaWYgKGNoYW5nZXMpCisgICAgICAgIGludmFsaWRh
dGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKK30KKworY29uc3QgQXRvbWljU3Ry
aW5nJiBTZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5maXhlZEZvbnRGYW1pbHkoc2Ny
aXB0KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0Rml4ZWRGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCit7CisgICAgYm9vbCBjaGFuZ2Vz
ID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRGaXhlZEZvbnRGYW1pbHkoZmFtaWx5LCBzY3Jp
cHQpOworICAgIGlmIChjaGFuZ2VzKQorICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFt
aWx5Q2hhbmdlKG1fcGFnZSk7Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OnNl
cmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
Zm9udEdlbmVyaWNGYW1pbGllcy0+c2VyaWZGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwg
VVNjcmlwdENvZGUgc2NyaXB0KQoreworICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNG
YW1pbGllcy0+c2V0U2VyaWZGb250RmFtaWx5KGZhbWlseSwgc2NyaXB0KTsKKyAgICBpZiAoY2hh
bmdlcykKKyAgICAgICAgaW52YWxpZGF0ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShtX3BhZ2Up
OworfQorCitjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzOjpzYW5zU2VyaWZGb250RmFtaWx5
KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0Zh
bWlsaWVzLT5zYW5zU2VyaWZGb250RmFtaWx5KHNjcmlwdCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6
OnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3Jp
cHRDb2RlIHNjcmlwdCkKK3sKKyAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxp
ZXMtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOworICAgIGlmIChjaGFu
Z2VzKQorICAgICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7
Cit9CisKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OmN1cnNpdmVGb250RmFtaWx5KFVT
Y3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWls
aWVzLT5jdXJzaXZlRm9udEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRD
dXJzaXZlRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUg
c2NyaXB0KQoreworICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0
Q3Vyc2l2ZUZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOworICAgIGlmIChjaGFuZ2VzKQorICAg
ICAgICBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Cit9CisKK2Nv
bnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3M6OmZhbnRhc3lGb250RmFtaWx5KFVTY3JpcHRDb2Rl
IHNjcmlwdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5mYW50
YXN5Rm9udEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRGYW50YXN5Rm9u
dEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQor
eworICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0RmFudGFzeUZv
bnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOworICAgIGlmIChjaGFuZ2VzKQorICAgICAgICBpbnZh
bGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Cit9CisKK2NvbnN0IEF0b21p
Y1N0cmluZyYgU2V0dGluZ3M6OnBpY3RvZ3JhcGhGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlw
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5waWN0b2dyYXBo
Rm9udEZhbWlseShzY3JpcHQpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRQaWN0b2dyYXBoRm9u
dEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQor
eworICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0UGljdG9ncmFw
aEZvbnRGYW1pbHkoZmFtaWx5LCBzY3JpcHQpOworICAgIGlmIChjaGFuZ2VzKQorICAgICAgICBp
bnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKG1fcGFnZSk7Cit9CisKK2Jvb2wgU2V0
dGluZ3M6OmRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKQoreworICAgIHJldHVybiBXZWJD
b3JlOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Cit9CisKK2Zsb2F0IFNldHRpbmdz
OjpkZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpCit7CisgICAgcmV0dXJuIFdlYkNvcmU6OmRl
ZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXplOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRNZWRpYVR5
cGVPdmVycmlkZShjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRlKQoreworICAgIGlmICht
X21lZGlhVHlwZU92ZXJyaWRlID09IG1lZGlhVHlwZU92ZXJyaWRlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX21lZGlhVHlwZU92ZXJyaWRlID0gbWVkaWFUeXBlT3ZlcnJpZGU7CisKKyAgICBp
ZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgQVNTRVJUKHZpZXcpOworCisgICAgdmlldy0+
c2V0TWVkaWFUeXBlKG1lZGlhVHlwZU92ZXJyaWRlKTsKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRMb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkoYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkpCit7CisgICAgbV9s
b2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk7CisgICAg
CisgICAgLy8gQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIHRvIHRydWUgbWlnaHQgaW1tZWRpYXRlbHkg
c3RhcnQgbmV3IGxvYWRzIGZvciBpbWFnZXMgdGhhdCBoYWQgcHJldmlvdXNseSBoYWQgbG9hZGlu
ZyBkaXNhYmxlZC4KKyAgICAvLyBJZiB0aGlzIGhhcHBlbnMgd2hpbGUgYSBXZWJWaWV3IGlzIGJl
aW5nIGRlYWxsb2MnZWQsIGFuZCB3ZSBkb24ndCBrbm93IHRoZSBXZWJWaWV3IGlzIGJlaW5nIGRl
YWxsb2MnZWQsIHRoZXNlIG5ldyBsb2FkcworICAgIC8vIGNhbiBjYXVzZSBjcmFzaGVzIGRvd25z
dHJlYW0gd2hlbiB0aGUgV2ViVmlldyBtZW1vcnkgaGFzIGFjdHVhbGx5IGJlZW4gZnJlZSdkLgor
ICAgIC8vIE9uZSBleGFtcGxlIHdoZXJlIHRoaXMgY2FuIGhhcHBlbiBpcyBpbiBNYWMgYXBwcyB0
aGF0IHN1YmNsYXNzIFdlYlZpZXcgdGhlbiBkbyB3b3JrIGluIHRoZWlyIG92ZXJyaWRkZW4gZGVh
bGxvYyBtZXRob2RzLgorICAgIC8vIFN0YXJ0aW5nIHRoZXNlIGxvYWRzIHN5bmNocm9ub3VzbHkg
aXMgbm90IGltcG9ydGFudC4gIEJ5IHB1dHRpbmcgaXQgb24gYSAwLWRlbGF5LCBwcm9wZXJseSBj
bG9zaW5nIHRoZSBQYWdlIGNhbmNlbHMgdGhlbQorICAgIC8vIGJlZm9yZSB0aGV5IGhhdmUgYSBj
aGFuY2UgdG8gcmVhbGx5IHN0YXJ0LgorICAgIC8vIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzYw
NTcyIGZvciBtb3JlIGRpc2N1c3Npb24uCisgICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1Rp
bWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIFNldHRpbmdzOjppbWFnZUxvYWRpbmdT
ZXR0aW5nc1RpbWVyRmlyZWQoKQoreworICAgIHNldEltYWdlTG9hZGluZ1NldHRpbmdzKG1fcGFn
ZSk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldFNjcmlwdEVuYWJsZWQoYm9vbCBpc1NjcmlwdEVu
YWJsZWQpCit7CisgICAgaWYgKG1faXNTY3JpcHRFbmFibGVkID09IGlzU2NyaXB0RW5hYmxlZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1NjcmlwdEVuYWJsZWQgPSBpc1NjcmlwdEVuYWJs
ZWQ7CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisjaWYgUExBVEZPUk0o
SU9TKQorICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CisjZW5k
aWYKK30KKwordm9pZCBTZXR0aW5nczo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUltYWdlc0Vu
YWJsZWQpCit7CisgICAgbV9hcmVJbWFnZXNFbmFibGVkID0gYXJlSW1hZ2VzRW5hYmxlZDsKKwor
ICAgIC8vIFNlZSBjb21tZW50IGluIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseS4KKyAgICBt
X3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Cit9CisKK3Zv
aWQgU2V0dGluZ3M6OnNldFBsdWdpbnNFbmFibGVkKGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQpCit7
CisgICAgaWYgKG1fYXJlUGx1Z2luc0VuYWJsZWQgPT0gYXJlUGx1Z2luc0VuYWJsZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fYXJlUGx1Z2luc0VuYWJsZWQgPSBhcmVQbHVnaW5zRW5hYmxl
ZDsKKyAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhmYWxzZSk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6
OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgVVJMJiB1c2VyU3R5bGVTaGVldExvY2F0
aW9uKQoreworICAgIGlmIChtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPT0gdXNlclN0eWxlU2hl
ZXRMb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV91c2VyU3R5bGVTaGVldExvY2F0
aW9uID0gdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKKworICAgIGlmIChtX3BhZ2UpCisgICAgICAg
IG1fcGFnZS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKK3sKKyAg
ICBhdXRvIG9sZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWluaW11bURPTVRpbWVy
SW50ZXJ2YWwsIGludGVydmFsKTsKKworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChmcmFt
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5hZGp1c3RNaW5p
bXVtRE9NVGltZXJJbnRlcnZhbChvbGRUaW1lckludGVydmFsKTsKKyAgICB9Cit9CisKK3ZvaWQg
U2V0dGluZ3M6OnNldExheW91dEludGVydmFsKFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwpCit7Cisg
ICAgLy8gRklYTUU6IEl0IHNlZW1zIHdlaXJkIHRoYXQgdGhpcyBmdW5jdGlvbiBtYXkgZGlzcmVn
YXJkIHRoZSBzcGVjaWZpZWQgbGF5b3V0IGludGVydmFsLgorICAgIC8vIFdlIHNob3VsZCBlaXRo
ZXIgZXhwb3NlIGxheW91dFNjaGVkdWxlVGhyZXNob2xkIG9yIGJldHRlciBjb21tdW5pY2F0ZSB0
aGlzIGludmFyaWFudC4KKyAgICBtX2xheW91dEludGVydmFsID0gc3RkOjptYXgobGF5b3V0SW50
ZXJ2YWwsIGxheW91dFNjaGVkdWxlVGhyZXNob2xkKTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0
VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCit7CisgICAgaWYgKG1fdXNlc1BhZ2VD
YWNoZSA9PSB1c2VzUGFnZUNhY2hlKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1f
dXNlc1BhZ2VDYWNoZSA9IHVzZXNQYWdlQ2FjaGU7CisKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCisgICAgICAgIFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7Cit9
CisKK3ZvaWQgU2V0dGluZ3M6OnNldEROU1ByZWZldGNoaW5nRW5hYmxlZChib29sIGRuc1ByZWZl
dGNoaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAobV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgPT0gZG5z
UHJlZmV0Y2hpbmdFbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Ruc1ByZWZldGNo
aW5nRW5hYmxlZCA9IGRuc1ByZWZldGNoaW5nRW5hYmxlZDsKKyAgICBpZiAobV9wYWdlKQorICAg
ICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKKyNpZiBFTkFC
TEUoUkVTT1VSQ0VfVVNBR0UpCit2b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZVVzYWdlT3Zlcmxh
eVZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIGlmIChtX3Jlc291cmNlVXNhZ2VPdmVybGF5
VmlzaWJsZSA9PSB2aXNpYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jlc291cmNlVXNh
Z2VPdmVybGF5VmlzaWJsZSA9IHZpc2libGU7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9w
YWdlLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUodmlzaWJsZSk7Cit9CisjZW5kaWYK
KworI2lmIFBMQVRGT1JNKFdJTikKK3ZvaWQgU2V0dGluZ3M6OnNldFNob3VsZFVzZUhpZ2hSZXNv
bHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMpCit7CisgICAg
Z1Nob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gc2hvdWxkVXNlSGlnaFJlc29sdXRpb25U
aW1lcnM7Cit9CisjZW5kaWYKKwordm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9s
aWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgZW5hYmxlZCkKK3sKKyAg
ICBpZiAobV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBlbmFibGVkOworICAgIGlmIChtX3Bh
Z2UpCisgICAgICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisK
K3ZvaWQgU2V0dGluZ3M6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wg
c2hvdWxkRXh0ZW5kKQoreworICAgIGlmIChtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQ
YWdlID09IHNob3VsZEV4dGVuZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9iYWNrZ3JvdW5k
U2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKKworICAgIGlmIChtX3BhZ2Up
CisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRCYWNrZ3Jv
dW5kSWZOZWNlc3NhcnkoKTsKK30KKworI2lmIFVTRShBVkZPVU5EQVRJT04pCit2b2lkIFNldHRp
bmdzOjpzZXRBVkZvdW5kYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAoZ0FW
Rm91bmRhdGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ0FW
Rm91bmRhdGlvbkVuYWJsZWQgPSBlbmFibGVkOworICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0
TWVkaWFFbmdpbmVzKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbk5TVVJM
U2Vzc2lvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIGlmIChnQVZGb3VuZGF0aW9uTlNV
UkxTZXNzaW9uRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBnQVZG
b3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9IGVuYWJsZWQ7Cit9CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKENPQ09BKQordm9pZCBTZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5h
YmxlZCkKK3sKKyAgICBpZiAoZ1FUS2l0RW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBnUVRLaXRFbmFibGVkID0gZW5hYmxlZDsKKyAgICBIVE1MTWVkaWFFbGVtZW50
OjpyZXNldE1lZGlhRW5naW5lcygpOworfQorI2VuZGlmCisKKyNpZiBVU0UoR1NUUkVBTUVSKQor
dm9pZCBTZXR0aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAg
aWYgKGdHU3RyZWFtZXJFbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IGdHU3RyZWFtZXJFbmFibGVkID0gZW5hYmxlZDsKKyAgICBIVE1MTWVkaWFFbGVtZW50OjpyZXNl
dE1lZGlhRW5naW5lcygpOworfQorI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQor
Ym9vbCBTZXR0aW5nczo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCit7CisgICAgcmV0dXJu
IGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBnTW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgTW9ja1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChlbmFibGVkKTsKK30K
KworYm9vbCBTZXR0aW5nczo6bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZ01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlv
bjsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25u
ZWN0aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKQoreworICAg
IGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1cmVSZXF1
aXJlc1NlY3VyZUNvbm5lY3Rpb247Cit9CisjZW5kaWYKKwordm9pZCBTZXR0aW5nczo6c2V0U2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCit7CisgICAgbV9z
Y3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKKworICAgIGlmICht
X3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCisgICAgICAgIG1fcGFnZS0+bWFp
bkZyYW1lKCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGVu
YWJsZWQpOworfQorCisvLyBJdCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0aW5nIGRv
ZXNuJ3QgY2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1lLgorLy8g
VGhlIE1hYyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVnaXN0
ZXJpbmcgcGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgorLy8gb2JqZWN0cy4gVGhlcmVmb3Jl
LCBpZiB0aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlvbiBt
YXkgbm90IGhhcHBlbgorLy8gY29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBsYXRmb3Jt
IHRvIGZvbGxvdyBkYW5nbGluZyBwb2ludGVycy4KK3ZvaWQgU2V0dGluZ3M6OnNldE1vY2tTY3Jv
bGxiYXJzRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZ01vY2tTY3JvbGxiYXJzRW5hYmxlZCA9
IGZsYWc7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVwZGF0ZSBzY3JvbGwgYmFycyBpbiBl
eGlzdGluZyBwYWdlcy4KK30KKworYm9vbCBTZXR0aW5nczo6bW9ja1Njcm9sbGJhcnNFbmFibGVk
KCkKK3sKKyAgICByZXR1cm4gZ01vY2tTY3JvbGxiYXJzRW5hYmxlZDsKK30KKwordm9pZCBTZXR0
aW5nczo6c2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZykKK3sKKyAgICBnVXNlc092
ZXJsYXlTY3JvbGxiYXJzID0gZmxhZzsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRl
IHNjcm9sbCBiYXJzIGluIGV4aXN0aW5nIHBhZ2VzLgorfQorCitib29sIFNldHRpbmdzOjp1c2Vz
T3ZlcmxheVNjcm9sbGJhcnMoKQoreworICAgIHJldHVybiBnVXNlc092ZXJsYXlTY3JvbGxiYXJz
OworfQorCit2b2lkIFNldHRpbmdzOjpzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wgZmxh
ZykKK3sKKyAgICBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZCA9IGZsYWc7Cit9CisKK2Jvb2wg
U2V0dGluZ3M6OnVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKQoreworICAgIHJldHVybiBnTW9ja1Nj
cm9sbEFuaW1hdG9yRW5hYmxlZDsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0U2hvdWxkUmVzcGVj
dFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKGJvb2wgZmxhZykKK3sKKyAgICBnU2hvdWxk
UmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzID0gZmxhZzsKK30KKworYm9vbCBT
ZXR0aW5nczo6c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkKK3sK
KyAgICByZXR1cm4gZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVyczsK
K30KKwordm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJs
ZWQoYm9vbCBmbGFnKQoreworICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdF
bmFibGVkID09IGZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdFbmFibGVkID0gZmxhZzsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3Bh
Z2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9p
ZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMo
Ym9vbCBmbGFnKQoreworICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRv
SW5jcmVhc2VzID09IGZsYWcpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hpZGRlblBhZ2VET01U
aW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsKKyAgICBpZiAobV9wYWdlKQorICAg
ICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsK
K30KKwordm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25F
bmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBpZiAobV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvbkVuYWJsZWQgPT0gZmxhZykKKyAgICAgICAgcmV0dXJuOworICAgIG1faGlkZGVuUGFn
ZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID0gZmxhZzsKKyAgICBpZiAobV9wYWdlKQor
ICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNp
emVFbmFibGVkKGJvb2wgZmxhZykKK3sKKyAgICBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6
ZUVuYWJsZWQgPSBmbGFnOworfQorCit2b2lkIFNldHRpbmdzOjpzZXRSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzRW5hYmxlZChib29sIGZsYWcpCit7CisgICAgZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NF
bmFibGVkRW5hYmxlZCA9IGZsYWc7Cit9CisKKyNpZiBQTEFURk9STShJT1MpCit2b2lkIFNldHRp
bmdzOjpzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKHVuc2lnbmVkIHNlc3Npb25DYXRl
Z29yeSkKK3sKKyAgICBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5zZXRDYXRlZ29yeU92
ZXJyaWRlKHN0YXRpY19jYXN0PEF1ZGlvU2Vzc2lvbjo6Q2F0ZWdvcnlUeXBlPihzZXNzaW9uQ2F0
ZWdvcnkpKTsKK30KKwordW5zaWduZWQgU2V0dGluZ3M6OmF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3Zl
cnJpZGUoKQoreworICAgIHJldHVybiBBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5jYXRl
Z29yeU92ZXJyaWRlKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OnNldE5ldHdvcmtEYXRhVXNhZ2VU
cmFja2luZ0VuYWJsZWQoYm9vbCB0cmFja2luZ0VuYWJsZWQpCit7CisgICAgZ05ldHdvcmtEYXRh
VXNhZ2VUcmFja2luZ0VuYWJsZWQgPSB0cmFja2luZ0VuYWJsZWQ7Cit9CisKK2Jvb2wgU2V0dGlu
Z3M6Om5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoKQoreworICAgIHJldHVybiBnTmV0
d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZDsKK30KKworc3RhdGljIFN0cmluZyYgc2hhcmVk
TmV0d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IG5ldHdvcmtJbnRlcmZhY2VOYW1lOworICAgIHJldHVybiBuZXR3b3JrSW50ZXJm
YWNlTmFtZTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0TmV0d29ya0ludGVyZmFjZU5hbWUoY29u
c3QgU3RyaW5nJiBuZXR3b3JrSW50ZXJmYWNlTmFtZSkKK3sKKyAgICBzaGFyZWROZXR3b3JrSW50
ZXJmYWNlTmFtZUdsb2JhbCgpID0gbmV0d29ya0ludGVyZmFjZU5hbWU7Cit9CisKK2NvbnN0IFN0
cmluZyYgU2V0dGluZ3M6Om5ldHdvcmtJbnRlcmZhY2VOYW1lKCkKK3sKKyAgICByZXR1cm4gc2hh
cmVkTmV0d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKTsKK30KKyNlbmRpZgorCitib29sIFNldHRp
bmdzOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJvdygpCit7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIHJldHVybiAhTWFjQXBwbGljYXRpb246OmlzSUJvb2tzKCk7CisjZWxpZiBQ
TEFURk9STShJT1MpCisgICAgcmV0dXJuICFJT1NBcHBsaWNhdGlvbjo6aXNJQm9va3MoKTsKKyNl
bHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30KKwordm9pZCBTZXR0aW5nczo6c2V0QWxs
b3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd0FueVNTTENlcnRpZmljYXRlKQoreworICAg
IGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93QW55U1NMQ2VydGlmaWNhdGU7Cit9CisK
K2Jvb2wgU2V0dGluZ3M6OmFsbG93c0FueVNTTENlcnRpZmljYXRlKCkKK3sKKyAgICByZXR1cm4g
Z0FsbG93c0FueVNTTENlcnRpZmljYXRlOworfQorCisjaWYgIVBMQVRGT1JNKENPQ09BKQorY29u
c3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFy
ZHdhcmVTdXBwb3J0KCkKK3sKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKK30KKyNlbmRpZgor
Cit2b2lkIFNldHRpbmdzOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3Vw
cG9ydChjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlcykKK3sKKyAgICBtX21lZGlhQ29udGVudFR5
cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0LnNocmluaygwKTsKKyAgICBmb3IgKGF1dG8gdHlw
ZSA6IFN0cmluZ1ZpZXcoY29udGVudFR5cGVzKS5zcGxpdCgnOicpKQorICAgICAgICBtX21lZGlh
Q29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0LmFwcGVuZChDb250ZW50VHlwZSB7
IHR5cGUudG9TdHJpbmcoKSB9KTsKK30KKwordm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDb250ZW50
VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgVmVjdG9yPENvbnRlbnRUeXBlPiYg
Y29udGVudFR5cGVzKQoreworICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2Fy
ZVN1cHBvcnQgPSBjb250ZW50VHlwZXM7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCituYXRpdmUKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5nc0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NC
YXNlLmNwcAkocmV2aXNpb24gMjIyNzY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
c0Jhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiU2V0dGluZ3NC
YXNlLmgiCiAKICNpbmNsdWRlICJBdWRpb1Nlc3Npb24uaCIKICNpbmNsdWRlICJCYWNrRm9yd2Fy
ZENvbnRyb2xsZXIuaCIKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5j
bHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgi
CisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgpAQCAtNjEs
MTkgKzYyLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9pZCBzZXRJbWFn
ZUxvYWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQotewotICAgIGlmICghcGFnZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYg
KCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFt
ZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJbWFnZXNFbmFibGVkKHBh
Z2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKLSAgICAgICAgZnJhbWUtPmRvY3Vt
ZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0QXV0b0xvYWRJbWFnZXMocGFnZS0+c2V0
dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7Ci0gICAgfQotfQotCiBzdGF0aWMg
dm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKFBhZ2UqIHBhZ2UpCiB7CiAg
ICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKQEAgLTgyLDQ1ICs3MCw0NSBAQCBzdGF0
aWMgdm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5CiB9CiAKICNpZiBVU0UoQVZGT1VO
REFUSU9OKQotYm9vbCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbkVuYWJsZWQgPSB0cnVlOwotYm9v
bCBTZXR0aW5nczo6Z0FWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQgPSB0cnVlOworYm9v
bCBTZXR0aW5nc0Jhc2U6OmdBVkZvdW5kYXRpb25FbmFibGVkID0gdHJ1ZTsKK2Jvb2wgU2V0dGlu
Z3NCYXNlOjpnQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxlZCA9IHRydWU7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQotYm9vbCBTZXR0aW5nczo6Z1FUS2l0RW5hYmxlZCA9IGZh
bHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdRVEtpdEVuYWJsZWQgPSBmYWxzZTsKICNlbmRpZgog
CiAjaWYgVVNFKEdTVFJFQU1FUikKLWJvb2wgU2V0dGluZ3M6OmdHU3RyZWFtZXJFbmFibGVkID0g
dHJ1ZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnR1N0cmVhbWVyRW5hYmxlZCA9IHRydWU7CiAjZW5k
aWYKIAotYm9vbCBTZXR0aW5nczo6Z01vY2tTY3JvbGxiYXJzRW5hYmxlZCA9IGZhbHNlOwotYm9v
bCBTZXR0aW5nczo6Z1VzZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOwotYm9vbCBTZXR0aW5n
czo6Z01vY2tTY3JvbGxBbmltYXRvckVuYWJsZWQgPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNl
OjpnTW9ja1Njcm9sbGJhcnNFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z1Vz
ZXNPdmVybGF5U2Nyb2xsYmFycyA9IGZhbHNlOworYm9vbCBTZXR0aW5nc0Jhc2U6OmdNb2NrU2Ny
b2xsQW5pbWF0b3JFbmFibGVkID0gZmFsc2U7CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQot
Ym9vbCBTZXR0aW5nczo6Z01vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQgPSBmYWxzZTsKLWJvb2wg
U2V0dGluZ3M6OmdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSB0cnVlOwor
Ym9vbCBTZXR0aW5nc0Jhc2U6OmdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkID0gZmFsc2U7Citi
b29sIFNldHRpbmdzQmFzZTo6Z01lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbiA9
IHRydWU7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKLWJvb2wgU2V0dGluZ3M6OmdTaG91
bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyA9IHRydWU7Citib29sIFNldHRpbmdzQmFzZTo6Z1No
b3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzID0gdHJ1ZTsKICNlbmRpZgogICAgIAotYm9vbCBT
ZXR0aW5nczo6Z1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyA9IGZh
bHNlOwotYm9vbCBTZXR0aW5nczo6Z0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVk
ID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnUmVzb3VyY2VMb2FkU3RhdGlzdGljc0VuYWJsZWRF
bmFibGVkID0gZmFsc2U7Ci1ib29sIFNldHRpbmdzOjpnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGUg
PSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNlOjpnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NB
dHRyaWJ1dGVTZXR0ZXJzID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z0xvd1Bvd2VyVmlk
ZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdzQmFzZTo6Z1Jl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0aW5n
c0Jhc2U6OmdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGZhbHNlOwogCiAjaWYgUExBVEZPUk0o
SU9TKQotYm9vbCBTZXR0aW5nczo6Z05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQgPSBm
YWxzZTsKLWJvb2wgU2V0dGluZ3M6OmdBVktpdEVuYWJsZWQgPSBmYWxzZTsKLWJvb2wgU2V0dGlu
Z3M6OmdTaG91bGRPcHRPdXRPZk5ldHdvcmtTdGF0ZU9ic2VydmF0aW9uID0gZmFsc2U7Citib29s
IFNldHRpbmdzQmFzZTo6Z05ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQgPSBmYWxzZTsK
K2Jvb2wgU2V0dGluZ3NCYXNlOjpnQVZLaXRFbmFibGVkID0gZmFsc2U7Citib29sIFNldHRpbmdz
QmFzZTo6Z1Nob3VsZE9wdE91dE9mTmV0d29ya1N0YXRlT2JzZXJ2YXRpb24gPSBmYWxzZTsKICNl
bmRpZgotYm9vbCBTZXR0aW5nczo6Z01hbmFnZUF1ZGlvU2Vzc2lvbiA9IGZhbHNlOwotYm9vbCBT
ZXR0aW5nczo6Z0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCA9IGZhbHNlOworYm9vbCBTZXR0
aW5nc0Jhc2U6OmdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmYWxzZTsKK2Jvb2wgU2V0dGluZ3NCYXNl
OjpnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkID0gZmFsc2U7CiAKLWJvb2wgU2V0dGluZ3M6
OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpCitib29sIFNldHRpbmdzQmFzZTo6Y3VzdG9t
UGFzdGVib2FyZERhdGFFbmFibGVkKCkKIHsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5p
dGlhbGl6ZUN1c3RvbVBhc3RlYm9hcmREYXRhVG9EZWZhdWx0VmFsdWU7CiAgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZUN1c3RvbVBhc3RlYm9hcmREYXRhVG9EZWZhdWx0VmFsdWUsIFtdIHsK
QEAgLTE0MSwyMyArMTI5LDEyIEBAIGJvb2wgU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRh
RW5hYmwKIC8vIGZvciBkdWFsIEc1cy4gOikKIHN0YXRpYyBjb25zdCBTZWNvbmRzIGxheW91dFNj
aGVkdWxlVGhyZXNob2xkID0gMjUwX21zOwogCi1TZXR0aW5nczo6U2V0dGluZ3MoUGFnZSogcGFn
ZSkKLSAgICA6IG1fbWVkaWFUeXBlT3ZlcnJpZGUoInNjcmVlbiIpCitTZXR0aW5nc0Jhc2U6OlNl
dHRpbmdzQmFzZShQYWdlKiBwYWdlKQorICAgIDogbV9wYWdlKG51bGxwdHIpCiAgICAgLCBtX2Zv
bnRHZW5lcmljRmFtaWxpZXMoc3RkOjptYWtlX3VuaXF1ZTxGb250R2VuZXJpY0ZhbWlsaWVzPigp
KQotICAgICwgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OkFsbG93QWxs
U3RvcmFnZSkKICAgICAsIG1fbGF5b3V0SW50ZXJ2YWwobGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQp
CiAgICAgLCBtX21pbmltdW1ET01UaW1lckludGVydmFsKERPTVRpbWVyOjpkZWZhdWx0TWluaW11
bUludGVydmFsKCkpCi0gICAgLCBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseShmYWxzZSkKLSAg
ICAsIG1fYXJlSW1hZ2VzRW5hYmxlZCh0cnVlKQotICAgICwgbV9hcmVQbHVnaW5zRW5hYmxlZChm
YWxzZSkKLSAgICAsIG1faXNTY3JpcHRFbmFibGVkKGZhbHNlKQotICAgICwgbV91c2VzUGFnZUNh
Y2hlKGZhbHNlKQotICAgICwgbV9iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShmYWxz
ZSkKLSAgICAsIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV9zY3JvbGxp
bmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV9zZXRJbWFnZUxvYWRp
bmdTZXR0aW5nc1RpbWVyKCp0aGlzLCAmU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGlt
ZXJGaXJlZCkKLSAgICAsIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoZmFs
c2UpCi0gICAgLCBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChmYWxz
ZSkKKyAgICAsIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lcigqdGhpcywgJlNldHRpbmdz
QmFzZTo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKQogewogICAgIC8vIEEgRnJhbWUg
bWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQsIHNvIHdlIGluaXRpYWxpemUgdGhlIEF0b21p
Y1N0cmluZwogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWluZyB0byB1c2UgaXQuCkBAIC0xNjksMTk2
ICsxNDYsMTAyIEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgIG1fcGFnZSA9
IHBhZ2U7CiB9CiAKLVNldHRpbmdzOjp+U2V0dGluZ3MoKQorU2V0dGluZ3NCYXNlOjp+U2V0dGlu
Z3NCYXNlKCkKIHsKIH0KIAotUmVmPFNldHRpbmdzPiBTZXR0aW5nczo6Y3JlYXRlKFBhZ2UqIHBh
Z2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0dGluZ3MocGFnZSkpOwotfQotCiAj
aWYgIVBMQVRGT1JNKENPQ09BKQotdm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250
RmFtaWxpZXMoKQordm9pZCBTZXR0aW5nc0Jhc2U6OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWls
aWVzKCkKIHsKICAgICAvLyBPdGhlciBwbGF0Zm9ybXMgY2FuIHNldCB1cCBmb250cyBmcm9tIGEg
Y2xpZW50LCBidXQgb24gTWFjLCB3ZSB3YW50IGl0IGluIFdlYkNvcmUgdG8gc2hhcmUgY29kZSBi
ZXR3ZWVuIFdlYktpdDEgYW5kIFdlYktpdDIuCiB9CiAjZW5kaWYKIAotY29uc3QgQXRvbWljU3Ry
aW5nJiBTZXR0aW5nczo6c3RhbmRhcmRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29u
c3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3NCYXNlOjpzdGFuZGFyZEZvbnRGYW1pbHko
VVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFt
aWxpZXMtPnN0YW5kYXJkRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpz
ZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRD
b2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTdGFuZGFyZEZvbnRGYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKIHsKICAgICBib29s
IGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFN0YW5kYXJkRm9udEZhbWlseShm
YW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRl
ckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBT
ZXR0aW5nczo6Zml4ZWRGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK2NvbnN0
IEF0b21pY1N0cmluZyYgU2V0dGluZ3NCYXNlOjpmaXhlZEZvbnRGYW1pbHkoVVNjcmlwdENvZGUg
c2NyaXB0KSBjb25zdAogewogICAgIHJldHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPmZpeGVk
Rm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRGaXhlZEZvbnRGYW1p
bHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3ZvaWQg
U2V0dGluZ3NCYXNlOjpzZXRGaXhlZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1p
bHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKIHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5l
cmljRmFtaWxpZXMtPnNldEZpeGVkRm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYg
KGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9w
YWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6c2VyaWZGb250RmFtaWx5
KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgU2V0dGluZ3NC
YXNlOjpzZXJpZkZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAogewogICAgIHJl
dHVybiBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNlcmlmRm9udEZhbWlseShzY3JpcHQpOwogfQog
Ci12b2lkIFNldHRpbmdzOjpzZXRTZXJpZkZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBm
YW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTZXJpZkZv
bnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHksIFVTY3JpcHRDb2RlIHNjcmlwdCkK
IHsKICAgICBib29sIGNoYW5nZXMgPSBtX2ZvbnRHZW5lcmljRmFtaWxpZXMtPnNldFNlcmlmRm9u
dEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFs
aWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBTZXR0aW5nczo6c2Fuc1NlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSBzY3JpcHQp
IGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIFNldHRpbmdzQmFzZTo6c2Fuc1NlcmlmRm9udEZh
bWlseShVU2NyaXB0Q29kZSBzY3JpcHQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZm9udEdlbmVy
aWNGYW1pbGllcy0+c2Fuc1NlcmlmRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRp
bmdzOjpzZXRTYW5zU2VyaWZGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5LCBV
U2NyaXB0Q29kZSBzY3JpcHQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0U2Fuc1NlcmlmRm9udEZh
bWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQogewog
ICAgIGJvb2wgY2hhbmdlcyA9IG1fZm9udEdlbmVyaWNGYW1pbGllcy0+c2V0U2Fuc1NlcmlmRm9u
dEZhbWlseShmYW1pbHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFs
aWRhdGVBZnRlckdlbmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWlj
U3RyaW5nJiBTZXR0aW5nczo6Y3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBj
b25zdAorY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OmN1cnNpdmVGb250RmFtaWx5
KFVTY3JpcHRDb2RlIHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2VuZXJpY0Zh
bWlsaWVzLT5jdXJzaXZlRm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpz
ZXRDdXJzaXZlRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENv
ZGUgc2NyaXB0KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAgYm9vbCBj
aGFuZ2VzID0gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRDdXJzaXZlRm9udEZhbWlseShmYW1p
bHksIHNjcmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdl
bmVyaWNGYW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0
aW5nczo6ZmFudGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAorY29uc3Qg
QXRvbWljU3RyaW5nJiBTZXR0aW5nc0Jhc2U6OmZhbnRhc3lGb250RmFtaWx5KFVTY3JpcHRDb2Rl
IHNjcmlwdCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5mYW50
YXN5Rm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRGYW50YXN5Rm9u
dEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQor
dm9pZCBTZXR0aW5nc0Jhc2U6OnNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAgYm9vbCBjaGFuZ2VzID0gbV9m
b250R2VuZXJpY0ZhbWlsaWVzLT5zZXRGYW50YXN5Rm9udEZhbWlseShmYW1pbHksIHNjcmlwdCk7
CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNGYW1pbHlD
aGFuZ2UobV9wYWdlKTsKIH0KIAotY29uc3QgQXRvbWljU3RyaW5nJiBTZXR0aW5nczo6cGljdG9n
cmFwaEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgc2NyaXB0KSBjb25zdAorY29uc3QgQXRvbWljU3Ry
aW5nJiBTZXR0aW5nc0Jhc2U6OnBpY3RvZ3JhcGhGb250RmFtaWx5KFVTY3JpcHRDb2RlIHNjcmlw
dCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9mb250R2VuZXJpY0ZhbWlsaWVzLT5waWN0b2dyYXBo
Rm9udEZhbWlseShzY3JpcHQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRQaWN0b2dyYXBoRm9u
dEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSwgVVNjcmlwdENvZGUgc2NyaXB0KQor
dm9pZCBTZXR0aW5nc0Jhc2U6OnNldFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0
cmluZyYgZmFtaWx5LCBVU2NyaXB0Q29kZSBzY3JpcHQpCiB7CiAgICAgYm9vbCBjaGFuZ2VzID0g
bV9mb250R2VuZXJpY0ZhbWlsaWVzLT5zZXRQaWN0b2dyYXBoRm9udEZhbWlseShmYW1pbHksIHNj
cmlwdCk7CiAgICAgaWYgKGNoYW5nZXMpCiAgICAgICAgIGludmFsaWRhdGVBZnRlckdlbmVyaWNG
YW1pbHlDaGFuZ2UobV9wYWdlKTsKIH0KIAotYm9vbCBTZXR0aW5nczo6ZGVmYXVsdFRleHRBdXRv
c2l6aW5nRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OmRlZmF1bHRUZXh0QXV0b3Np
emluZ0VuYWJsZWQoKTsKLX0KLQotZmxvYXQgU2V0dGluZ3M6OmRlZmF1bHRNaW5pbXVtWm9vbUZv
bnRTaXplKCkKLXsKLSAgICByZXR1cm4gV2ViQ29yZTo6ZGVmYXVsdE1pbmltdW1ab29tRm9udFNp
emU7Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmlu
ZyYgbWVkaWFUeXBlT3ZlcnJpZGUpCi17Ci0gICAgaWYgKG1fbWVkaWFUeXBlT3ZlcnJpZGUgPT0g
bWVkaWFUeXBlT3ZlcnJpZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWVkaWFUeXBlT3Zl
cnJpZGUgPSBtZWRpYVR5cGVPdmVycmlkZTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXco
KTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICB2aWV3LT5zZXRNZWRpYVR5cGUobWVkaWFUeXBl
T3ZlcnJpZGUpOwotICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7
Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sIGxv
YWRzSW1hZ2VzQXV0b21hdGljYWxseSkKLXsKLSAgICBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eSA9IGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseTsKLSAgICAKLSAgICAvLyBDaGFuZ2luZyB0aGlz
IHNldHRpbmcgdG8gdHJ1ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFydCBuZXcgbG9hZHMgZm9yIGlt
YWdlcyB0aGF0IGhhZCBwcmV2aW91c2x5IGhhZCBsb2FkaW5nIGRpc2FibGVkLgotICAgIC8vIElm
IHRoaXMgaGFwcGVucyB3aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgYW5kIHdl
IGRvbid0IGtub3cgdGhlIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgdGhlc2UgbmV3IGxv
YWRzCi0gICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMgZG93bnN0cmVhbSB3aGVuIHRoZSBXZWJWaWV3
IG1lbW9yeSBoYXMgYWN0dWFsbHkgYmVlbiBmcmVlJ2QuCi0gICAgLy8gT25lIGV4YW1wbGUgd2hl
cmUgdGhpcyBjYW4gaGFwcGVuIGlzIGluIE1hYyBhcHBzIHRoYXQgc3ViY2xhc3MgV2ViVmlldyB0
aGVuIGRvIHdvcmsgaW4gdGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9jIG1ldGhvZHMuCi0gICAgLy8g
U3RhcnRpbmcgdGhlc2UgbG9hZHMgc3luY2hyb25vdXNseSBpcyBub3QgaW1wb3J0YW50LiAgQnkg
cHV0dGluZyBpdCBvbiBhIDAtZGVsYXksIHByb3Blcmx5IGNsb3NpbmcgdGhlIFBhZ2UgY2FuY2Vs
cyB0aGVtCi0gICAgLy8gYmVmb3JlIHRoZXkgaGF2ZSBhIGNoYW5jZSB0byByZWFsbHkgc3RhcnQu
Ci0gICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2IvNjA1NzIgZm9yIG1vcmUgZGlzY3Vzc2lv
bi4KLSAgICBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7
Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCgpCi17
Ci0gICAgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MobV9wYWdlKTsKLX0KLQotdm9pZCBTZXR0aW5n
czo6c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKLXsKLSAgICBpZiAobV9p
c1NjcmlwdEVuYWJsZWQgPT0gaXNTY3JpcHRFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2lzU2NyaXB0RW5hYmxlZCA9IGlzU2NyaXB0RW5hYmxlZDsKLQotICAgIGlmICghbV9wYWdl
KQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9wYWdlLT5zZXRO
ZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLSNlbmRpZgotfQotCi12b2lkIFNldHRpbmdz
OjpzZXRJbWFnZXNFbmFibGVkKGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCkKLXsKLSAgICBtX2FyZUlt
YWdlc0VuYWJsZWQgPSBhcmVJbWFnZXNFbmFibGVkOwotCi0gICAgLy8gU2VlIGNvbW1lbnQgaW4g
c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LgotICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGlu
Z3NUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0UGx1Z2lu
c0VuYWJsZWQoYm9vbCBhcmVQbHVnaW5zRW5hYmxlZCkKLXsKLSAgICBpZiAobV9hcmVQbHVnaW5z
RW5hYmxlZCA9PSBhcmVQbHVnaW5zRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9h
cmVQbHVnaW5zRW5hYmxlZCA9IGFyZVBsdWdpbnNFbmFibGVkOwotICAgIFBhZ2U6OnJlZnJlc2hQ
bHVnaW5zKGZhbHNlKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6c2V0VXNlclN0eWxlU2hlZXRMb2Nh
dGlvbihjb25zdCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCi17Ci0gICAgaWYgKG1fdXNl
clN0eWxlU2hlZXRMb2NhdGlvbiA9PSB1c2VyU3R5bGVTaGVldExvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1c2VyU3R5bGVTaGVldExv
Y2F0aW9uOwotCi0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT51c2VyU3R5bGVTaGVl
dExvY2F0aW9uQ2hhbmdlZCgpOwotfQotCi12b2lkIFNldHRpbmdzOjpzZXRNaW5pbXVtRE9NVGlt
ZXJJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE1pbmlt
dW1ET01UaW1lckludGVydmFsKFNlY29uZHMgaW50ZXJ2YWwpCiB7CiAgICAgYXV0byBvbGRUaW1l
ckludGVydmFsID0gc3RkOjpleGNoYW5nZShtX21pbmltdW1ET01UaW1lckludGVydmFsLCBpbnRl
cnZhbCk7CiAKQEAgLTM3MSw3OSArMjU0LDU2IEBAIHZvaWQgU2V0dGluZ3M6OnNldE1pbmltdW1E
T01UaW1lckludGVydmEKICAgICB9CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldExheW91dEludGVy
dmFsKFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TGF5b3V0
SW50ZXJ2YWwoU2Vjb25kcyBsYXlvdXRJbnRlcnZhbCkKIHsKICAgICAvLyBGSVhNRTogSXQgc2Vl
bXMgd2VpcmQgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSBkaXNyZWdhcmQgdGhlIHNwZWNpZmllZCBs
YXlvdXQgaW50ZXJ2YWwuCiAgICAgLy8gV2Ugc2hvdWxkIGVpdGhlciBleHBvc2UgbGF5b3V0U2No
ZWR1bGVUaHJlc2hvbGQgb3IgYmV0dGVyIGNvbW11bmljYXRlIHRoaXMgaW52YXJpYW50LgogICAg
IG1fbGF5b3V0SW50ZXJ2YWwgPSBzdGQ6Om1heChsYXlvdXRJbnRlcnZhbCwgbGF5b3V0U2NoZWR1
bGVUaHJlc2hvbGQpOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRVc2VzUGFnZUNhY2hlKGJvb2wg
dXNlc1BhZ2VDYWNoZSkKKyNpZiAhUExBVEZPUk0oQ09DT0EpCitjb25zdCBTdHJpbmcmIFNldHRp
bmdzQmFzZTo6ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0
KCkKIHsKLSAgICBpZiAobV91c2VzUGFnZUNhY2hlID09IHVzZXNQYWdlQ2FjaGUpCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgbV91c2VzUGFnZUNhY2hlID0gdXNlc1BhZ2VDYWNoZTsK
LQotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fdXNlc1Bh
Z2VDYWNoZSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6ZU5vdygw
LCBQcnVuaW5nUmVhc29uOjpOb25lKTsKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KKyNl
bmRpZgogCi12b2lkIFNldHRpbmdzOjpzZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoYm9vbCBkbnNQ
cmVmZXRjaGluZ0VuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TWVkaWFDb250ZW50VHlw
ZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZXMpCiB7
Ci0gICAgaWYgKG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkID09IGRuc1ByZWZldGNoaW5nRW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgPSBkbnNQ
cmVmZXRjaGluZ0VuYWJsZWQ7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5kbnNQ
cmVmZXRjaGluZ1N0YXRlQ2hhbmdlZCgpOworICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJp
bmdIYXJkd2FyZVN1cHBvcnQuc2hyaW5rKDApOworICAgIGZvciAoYXV0byB0eXBlIDogU3RyaW5n
Vmlldyhjb250ZW50VHlwZXMpLnNwbGl0KCc6JykpCisgICAgICAgIG1fbWVkaWFDb250ZW50VHlw
ZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQuYXBwZW5kKENvbnRlbnRUeXBlIHsgdHlwZS50b1N0
cmluZygpIH0pOwogfQogCi0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBTZXR0aW5n
czo6c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3ZvaWQgU2V0
dGluZ3NCYXNlOjpzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChj
b25zdCBWZWN0b3I8Q29udGVudFR5cGU+JiBjb250ZW50VHlwZXMpCiB7Ci0gICAgaWYgKG1fcmVz
b3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID0gdmlzaWJsZTsKLSAgICBpZiAobV9w
YWdlKQotICAgICAgICBtX3BhZ2UtPnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSh2aXNp
YmxlKTsKKyAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0ID0g
Y29udGVudFR5cGVzOwogfQotI2VuZGlmCiAKLSNpZiBQTEFURk9STShXSU4pCi12b2lkIFNldHRp
bmdzOjpzZXRTaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycyhib29sIHNob3VsZFVzZUhpZ2hS
ZXNvbHV0aW9uVGltZXJzKQorLy8gTUFSSyAtIERlZmF1bHRzIHRvIG1vdmUKKworYm9vbCBTZXR0
aW5nc0Jhc2U6OmRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKQogewotICAgIGdTaG91bGRV
c2VIaWdoUmVzb2x1dGlvblRpbWVycyA9IHNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzOwor
ICAgIHJldHVybiBXZWJDb3JlOjpkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCk7CiB9Ci0j
ZW5kaWYKIAotdm9pZCBTZXR0aW5nczo6c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5
T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgZW5hYmxlZCkKK2Zsb2F0IFNldHRpbmdzQmFz
ZTo6ZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKQogewotICAgIGlmIChtX3N0b3JhZ2VCbG9j
a2luZ1BvbGljeSA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VC
bG9ja2luZ1BvbGljeSA9IGVuYWJsZWQ7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdl
LT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZGVm
YXVsdE1pbmltdW1ab29tRm9udFNpemU7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNldEJhY2tncm91
bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wgc2hvdWxkRXh0ZW5kKQotewotICAgIGlmICht
X2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlID09IHNob3VsZEV4dGVuZCkKLSAgICAg
ICAgcmV0dXJuOwogCi0gICAgbV9iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9IHNo
b3VsZEV4dGVuZDsKKy8vIE1BUksgLSBHbG9iYWwgc2V0dGluZ3MKIAotICAgIGlmIChtX3BhZ2Up
Ci0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRCYWNrZ3Jv
dW5kSWZOZWNlc3NhcnkoKTsKKyNpZiBQTEFURk9STShXSU4pCit2b2lkIFNldHRpbmdzQmFzZTo6
c2V0U2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCBzaG91bGRVc2VIaWdoUmVzb2x1
dGlvblRpbWVycykKK3sKKyAgICBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMgPSBzaG91
bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVyczsKIH0KKyNlbmRpZgogCiAjaWYgVVNFKEFWRk9VTkRB
VElPTikKLXZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVk
KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVk
KQogewogICAgIGlmIChnQVZGb3VuZGF0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQogICAgICAgICBy
ZXR1cm47CkBAIC00NTIsNyArMzEyLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0QVZGb3VuZGF0aW9u
RW5hYmxlZChibwogICAgIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc2V0TWVkaWFFbmdpbmVzKCk7CiB9
CiAKLXZvaWQgU2V0dGluZ3M6OnNldEFWRm91bmRhdGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQoYm9v
bCBlbmFibGVkKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEFWRm91bmRhdGlvbk5TVVJMU2Vzc2lv
bkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIGlmIChnQVZGb3VuZGF0aW9uTlNVUkxTZXNz
aW9uRW5hYmxlZCA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC00NjIsNyArMzIyLDcg
QEAgdm9pZCBTZXR0aW5nczo6c2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaQogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShDT0NPQSkKLXZvaWQgU2V0dGluZ3M6OnNldFFUS2l0RW5hYmxlZChib29sIGVu
YWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5hYmxlZCkK
IHsKICAgICBpZiAoZ1FUS2l0RW5hYmxlZCA9PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CkBA
IC00NzMsNyArMzMzLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0UVRLaXRFbmFibGVkKGJvb2wgZW5h
YgogI2VuZGlmCiAKICNpZiBVU0UoR1NUUkVBTUVSKQotdm9pZCBTZXR0aW5nczo6c2V0R1N0cmVh
bWVyRW5hYmxlZChib29sIGVuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0R1N0cmVhbWVy
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKGdHU3RyZWFtZXJFbmFibGVkID09IGVu
YWJsZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4NCwxMzYgKzM0NCwxMDEgQEAgdm9pZCBTZXR0
aW5nczo6c2V0R1N0cmVhbWVyRW5hYmxlZChib29sIAogI2VuZGlmCiAKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotYm9vbCBTZXR0aW5nczo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCiti
b29sIFNldHRpbmdzQmFzZTo6bW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCgpCiB7CiAgICAgcmV0
dXJuIGdNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRN
b2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgU2V0dGluZ3NCYXNl
OjpzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBnTW9j
a0NhcHR1cmVEZXZpY2VzRW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgTW9ja1JlYWx0aW1lTWVkaWFT
b3VyY2VDZW50ZXI6OnNldE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyRW5hYmxlZChlbmFi
bGVkKTsKIH0KIAotYm9vbCBTZXR0aW5nczo6bWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25u
ZWN0aW9uKCkgY29uc3QKK2Jvb2wgU2V0dGluZ3NCYXNlOjptZWRpYUNhcHR1cmVSZXF1aXJlc1Nl
Y3VyZUNvbm5lY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiBnTWVkaWFDYXB0dXJlUmVxdWly
ZXNTZWN1cmVDb25uZWN0aW9uOwogfQogCi12b2lkIFNldHRpbmdzOjpzZXRNZWRpYUNhcHR1cmVS
ZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oYm9vbCBtZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNv
bm5lY3Rpb24pCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uKGJvb2wgbWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uKQog
ewogICAgIGdNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24gPSBtZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb247CiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0aW5nczo6
c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKLQotICAg
IGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCi0gICAgICAgIG1fcGFn
ZS0+bWFpbkZyYW1lKCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFi
bGVkKGVuYWJsZWQpOwotfQotCiAvLyBJdCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0
aW5nIGRvZXNuJ3QgY2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1l
LgogLy8gVGhlIE1hYyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRl
cmVnaXN0ZXJpbmcgcGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgogLy8gb2JqZWN0cy4gVGhl
cmVmb3JlLCBpZiB0aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJh
dGlvbiBtYXkgbm90IGhhcHBlbgogLy8gY29ycmVjdGx5LCB3aGljaCBtYXkgY2F1c2UgdGhlIHBs
YXRmb3JtIHRvIGZvbGxvdyBkYW5nbGluZyBwb2ludGVycy4KLXZvaWQgU2V0dGluZ3M6OnNldE1v
Y2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TW9j
a1Njcm9sbGJhcnNFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBnTW9ja1Njcm9sbGJhcnNFbmFi
bGVkID0gZmxhZzsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIHNjcm9sbCBiYXJz
IGluIGV4aXN0aW5nIHBhZ2VzLgogfQogCi1ib29sIFNldHRpbmdzOjptb2NrU2Nyb2xsYmFyc0Vu
YWJsZWQoKQorYm9vbCBTZXR0aW5nc0Jhc2U6Om1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpCiB7CiAg
ICAgcmV0dXJuIGdNb2NrU2Nyb2xsYmFyc0VuYWJsZWQ7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OnNl
dFVzZXNPdmVybGF5U2Nyb2xsYmFycyhib29sIGZsYWcpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0
VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wgZmxhZykKIHsKICAgICBnVXNlc092ZXJsYXlTY3Jv
bGxiYXJzID0gZmxhZzsKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXBkYXRlIHNjcm9sbCBi
YXJzIGluIGV4aXN0aW5nIHBhZ2VzLgogfQogCi1ib29sIFNldHRpbmdzOjp1c2VzT3ZlcmxheVNj
cm9sbGJhcnMoKQorYm9vbCBTZXR0aW5nc0Jhc2U6OnVzZXNPdmVybGF5U2Nyb2xsYmFycygpCiB7
CiAgICAgcmV0dXJuIGdVc2VzT3ZlcmxheVNjcm9sbGJhcnM7CiB9CiAKLXZvaWQgU2V0dGluZ3M6
OnNldFVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5nc0Jhc2U6
OnNldFVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoYm9vbCBmbGFnKQogewogICAgIGdNb2NrU2Nyb2xs
QW5pbWF0b3JFbmFibGVkID0gZmxhZzsKIH0KIAotYm9vbCBTZXR0aW5nczo6dXNlc01vY2tTY3Jv
bGxBbmltYXRvcigpCitib29sIFNldHRpbmdzQmFzZTo6dXNlc01vY2tTY3JvbGxBbmltYXRvcigp
CiB7CiAgICAgcmV0dXJuIGdNb2NrU2Nyb2xsQW5pbWF0b3JFbmFibGVkOwogfQogCi12b2lkIFNl
dHRpbmdzOjpzZXRTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoYm9v
bCBmbGFnKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NT
QXR0cmlidXRlU2V0dGVycyhib29sIGZsYWcpCiB7CiAgICAgZ1Nob3VsZFJlc3BlY3RQcmlvcml0
eUluQ1NTQXR0cmlidXRlU2V0dGVycyA9IGZsYWc7CiB9CiAKLWJvb2wgU2V0dGluZ3M6OnNob3Vs
ZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycygpCitib29sIFNldHRpbmdzQmFz
ZTo6c2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCkKIHsKICAgICBy
ZXR1cm4gZ1Nob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVyczsKIH0KIAot
dm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9v
bCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVk
ID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdFbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPmhp
ZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0
aW5nczo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoYm9vbCBm
bGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVh
c2VzID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VET01UaW1lclRo
cm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBt
X3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQot
dm9pZCBTZXR0aW5nczo6c2V0SGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVk
KGJvb2wgZmxhZykKLXsKLSAgICBpZiAobV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lv
bkVuYWJsZWQgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25FbmFibGVkID0gZmxhZzsKLSAgICBpZiAobV9wYWdlKQotICAgICAg
ICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFuZ2VkKCk7
Ci19Ci0KLXZvaWQgU2V0dGluZ3M6OnNldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFi
bGVkKGJvb2wgZmxhZykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRMb3dQb3dlclZpZGVvQXVkaW9C
dWZmZXJTaXplRW5hYmxlZChib29sIGZsYWcpCiB7CiAgICAgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1
ZmZlclNpemVFbmFibGVkID0gZmxhZzsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0UmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWQoYm9vbCBmbGFnKQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldFJl
c291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZmxhZykKIHsKICAgICBnUmVzb3VyY2VM
b2FkU3RhdGlzdGljc0VuYWJsZWRFbmFibGVkID0gZmxhZzsKIH0KIAogI2lmIFBMQVRGT1JNKElP
UykKLXZvaWQgU2V0dGluZ3M6OnNldEF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUodW5zaWdu
ZWQgc2Vzc2lvbkNhdGVnb3J5KQordm9pZCBTZXR0aW5nc0Jhc2U6OnNldEF1ZGlvU2Vzc2lvbkNh
dGVnb3J5T3ZlcnJpZGUodW5zaWduZWQgc2Vzc2lvbkNhdGVnb3J5KQogewogICAgIEF1ZGlvU2Vz
c2lvbjo6c2hhcmVkU2Vzc2lvbigpLnNldENhdGVnb3J5T3ZlcnJpZGUoc3RhdGljX2Nhc3Q8QXVk
aW9TZXNzaW9uOjpDYXRlZ29yeVR5cGU+KHNlc3Npb25DYXRlZ29yeSkpOwogfQogCi11bnNpZ25l
ZCBTZXR0aW5nczo6YXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlkZSgpCit1bnNpZ25lZCBTZXR0
aW5nc0Jhc2U6OmF1ZGlvU2Vzc2lvbkNhdGVnb3J5T3ZlcnJpZGUoKQogewogICAgIHJldHVybiBB
dWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24oKS5jYXRlZ29yeU92ZXJyaWRlKCk7CiB9CiAKLXZv
aWQgU2V0dGluZ3M6OnNldE5ldHdvcmtEYXRhVXNhZ2VUcmFja2luZ0VuYWJsZWQoYm9vbCB0cmFj
a2luZ0VuYWJsZWQpCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TmV0d29ya0RhdGFVc2FnZVRyYWNr
aW5nRW5hYmxlZChib29sIHRyYWNraW5nRW5hYmxlZCkKIHsKICAgICBnTmV0d29ya0RhdGFVc2Fn
ZVRyYWNraW5nRW5hYmxlZCA9IHRyYWNraW5nRW5hYmxlZDsKIH0KIAotYm9vbCBTZXR0aW5nczo6
bmV0d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZCgpCitib29sIFNldHRpbmdzQmFzZTo6bmV0
d29ya0RhdGFVc2FnZVRyYWNraW5nRW5hYmxlZCgpCiB7CiAgICAgcmV0dXJuIGdOZXR3b3JrRGF0
YVVzYWdlVHJhY2tpbmdFbmFibGVkOwogfQpAQCAtNjI0LDE4ICs0NDksMTggQEAgc3RhdGljIFN0
cmluZyYgc2hhcmVkTmV0d29ya0ludGVyZmFjZU5hbQogICAgIHJldHVybiBuZXR3b3JrSW50ZXJm
YWNlTmFtZTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0TmV0d29ya0ludGVyZmFjZU5hbWUoY29u
c3QgU3RyaW5nJiBuZXR3b3JrSW50ZXJmYWNlTmFtZSkKK3ZvaWQgU2V0dGluZ3NCYXNlOjpzZXRO
ZXR3b3JrSW50ZXJmYWNlTmFtZShjb25zdCBTdHJpbmcmIG5ldHdvcmtJbnRlcmZhY2VOYW1lKQog
ewogICAgIHNoYXJlZE5ldHdvcmtJbnRlcmZhY2VOYW1lR2xvYmFsKCkgPSBuZXR3b3JrSW50ZXJm
YWNlTmFtZTsKIH0KIAotY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6bmV0d29ya0ludGVyZmFjZU5h
bWUoKQorY29uc3QgU3RyaW5nJiBTZXR0aW5nc0Jhc2U6Om5ldHdvcmtJbnRlcmZhY2VOYW1lKCkK
IHsKICAgICByZXR1cm4gc2hhcmVkTmV0d29ya0ludGVyZmFjZU5hbWVHbG9iYWwoKTsKIH0KICNl
bmRpZgogCi1ib29sIFNldHRpbmdzOjpnbG9iYWxDb25zdFJlZGVjbGFyYXRpb25TaG91bGRUaHJv
dygpCitib29sIFNldHRpbmdzQmFzZTo6Z2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhy
b3coKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICByZXR1cm4gIU1hY0FwcGxpY2F0aW9uOjpp
c0lCb29rcygpOwpAQCAtNjQ2LDM0ICs0NzEsMTMxIEBAIGJvb2wgU2V0dGluZ3M6Omdsb2JhbENv
bnN0UmVkZWNsYXJhdGlvblMKICNlbmRpZgogfQogCi12b2lkIFNldHRpbmdzOjpzZXRBbGxvd3NB
bnlTU0xDZXJ0aWZpY2F0ZShib29sIGFsbG93QW55U1NMQ2VydGlmaWNhdGUpCit2b2lkIFNldHRp
bmdzQmFzZTo6c2V0QWxsb3dzQW55U1NMQ2VydGlmaWNhdGUoYm9vbCBhbGxvd0FueVNTTENlcnRp
ZmljYXRlKQogewogICAgIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSA9IGFsbG93QW55U1NMQ2Vy
dGlmaWNhdGU7CiB9CiAKLWJvb2wgU2V0dGluZ3M6OmFsbG93c0FueVNTTENlcnRpZmljYXRlKCkK
K2Jvb2wgU2V0dGluZ3NCYXNlOjphbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpCiB7CiAgICAgcmV0
dXJuIGdBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZTsKIH0KIAotI2lmICFQTEFURk9STShDT0NPQSkK
LWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6OmRlZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmlu
Z0hhcmR3YXJlU3VwcG9ydCgpCisKKy8vIE1BUksgLSBvbkNoYW5nZSBoYW5kbGVycworCit2b2lk
IFNldHRpbmdzQmFzZTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCkKIHsKLSAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6
bWVkaWFUeXBlT3ZlcnJpZGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3
KCk7CisgICAgaWYgKHZpZXcpCisgICAgICAgIHZpZXctPnNldE1lZGlhVHlwZShtX3BhZ2UtPnNl
dHRpbmdzKCkubWVkaWFUeXBlT3ZlcnJpZGUoKSk7CisKKyAgICBtX3BhZ2UtPnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6aW1hZ2VzRW5h
YmxlZENoYW5nZWQoKQoreworICAgIC8vIENoYW5naW5nIHRoaXMgc2V0dGluZyB0byB0cnVlIG1p
Z2h0IGltbWVkaWF0ZWx5IHN0YXJ0IG5ldyBsb2FkcyBmb3IgaW1hZ2VzIHRoYXQgaGFkIHByZXZp
b3VzbHkgaGFkIGxvYWRpbmcgZGlzYWJsZWQuCisgICAgLy8gSWYgdGhpcyBoYXBwZW5zIHdoaWxl
IGEgV2ViVmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCBhbmQgd2UgZG9uJ3Qga25vdyB0aGUgV2Vi
VmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCB0aGVzZSBuZXcgbG9hZHMKKyAgICAvLyBjYW4gY2F1
c2UgY3Jhc2hlcyBkb3duc3RyZWFtIHdoZW4gdGhlIFdlYlZpZXcgbWVtb3J5IGhhcyBhY3R1YWxs
eSBiZWVuIGZyZWUnZC4KKyAgICAvLyBPbmUgZXhhbXBsZSB3aGVyZSB0aGlzIGNhbiBoYXBwZW4g
aXMgaW4gTWFjIGFwcHMgdGhhdCBzdWJjbGFzcyBXZWJWaWV3IHRoZW4gZG8gd29yayBpbiB0aGVp
ciBvdmVycmlkZGVuIGRlYWxsb2MgbWV0aG9kcy4KKyAgICAvLyBTdGFydGluZyB0aGVzZSBsb2Fk
cyBzeW5jaHJvbm91c2x5IGlzIG5vdCBpbXBvcnRhbnQuIEJ5IHB1dHRpbmcgaXQgb24gYSAwLWRl
bGF5LCBwcm9wZXJseSBjbG9zaW5nIHRoZSBQYWdlIGNhbmNlbHMgdGhlbQorICAgIC8vIGJlZm9y
ZSB0aGV5IGhhdmUgYSBjaGFuY2UgdG8gcmVhbGx5IHN0YXJ0LgorICAgIC8vIFNlZSBodHRwOi8v
d2Via2l0Lm9yZy9iLzYwNTcyIGZvciBtb3JlIGRpc2N1c3Npb24uCisgICAgbV9zZXRJbWFnZUxv
YWRpbmdTZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lkIFNldHRpbmdz
QmFzZTo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCkKK3sKKyAgICBpZiAoIW1fcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9wYWdlLT5t
YWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkg
eworICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnNldElt
YWdlc0VuYWJsZWQobV9wYWdlLT5zZXR0aW5ncygpLmFyZUltYWdlc0VuYWJsZWQoKSk7CisgICAg
ICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnNldEF1dG9Mb2Fk
SW1hZ2VzKG1fcGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7Cisg
ICAgfQogfQorCit2b2lkIFNldHRpbmdzQmFzZTo6c2NyaXB0RW5hYmxlZENoYW5nZWQoKQorewor
I2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG9ubHkgZG8gdGhpcyBv
biBpT1M/CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0
eWxlSW5BbGxGcmFtZXMoKTsKICNlbmRpZgorfQogCi12b2lkIFNldHRpbmdzOjpzZXRNZWRpYUNv
bnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlcykKK3ZvaWQgU2V0dGluZ3NCYXNlOjpwbHVnaW5zRW5hYmxlZENoYW5nZWQoKQogewotICAg
IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQuc2hyaW5rKDApOwot
ICAgIGZvciAoYXV0byB0eXBlIDogU3RyaW5nVmlldyhjb250ZW50VHlwZXMpLnNwbGl0KCc6Jykp
Ci0gICAgICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQuYXBw
ZW5kKENvbnRlbnRUeXBlIHsgdHlwZS50b1N0cmluZygpIH0pOworICAgIFBhZ2U6OnJlZnJlc2hQ
bHVnaW5zKGZhbHNlKTsKIH0KIAotdm9pZCBTZXR0aW5nczo6c2V0TWVkaWFDb250ZW50VHlwZXNS
ZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoY29uc3QgVmVjdG9yPENvbnRlbnRUeXBlPiYgY29udGVu
dFR5cGVzKQordm9pZCBTZXR0aW5nc0Jhc2U6OnVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2Vk
KCkKIHsKLSAgICBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0ID0g
Y29udGVudFR5cGVzOworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+dXNlclN0eWxl
U2hlZXRMb2NhdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OnVzZXNQYWdl
Q2FjaGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFtX3BhZ2UtPnNldHRpbmdzKCkudXNlc1BhZ2VDYWNoZSgpKQorICAgICAgICBQYWdl
Q2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUp
OworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6ZG5zUHJlZmV0Y2hpbmdFbmFibGVkQ2hhbmdlZCgp
Cit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5kbnNQcmVmZXRjaGluZ1N0YXRl
Q2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6cmVzb3VyY2VVc2FnZU92ZXJsYXlW
aXNpYmxlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZXRS
ZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUobV9wYWdlLT5zZXR0aW5ncygpLnJlc291cmNlVXNh
Z2VPdmVybGF5VmlzaWJsZSgpKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OnN0b3JhZ2VCbG9j
a2luZ1BvbGljeUNoYW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+
c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpi
YWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZUNoYW5nZWQoKQoreworICAgIGlmIChtX3Bh
Z2UpCisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRCYWNr
Z3JvdW5kSWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OnNjcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9wYWdlICYmIG1f
cGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQorICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZp
ZXcoKS0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChtX3BhZ2UtPnNldHRp
bmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKTsKK30KKwordm9pZCBT
ZXR0aW5nc0Jhc2U6OmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKQor
eworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ1N0YXRlQ2hhbmdlZCgpOwogfQogCit2b2lkIFNldHRpbmdzQmFzZTo6aGlkZGVuUGFn
ZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFn
ZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvblN0YXRl
Q2hhbmdlZCgpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3NCYXNlLmgJKHJldmlzaW9uIDIyMjc2NikJKGZyb20gU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5oOjIyMjc2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NC
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDMtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgKEMpIDIwMDYgR3JhaGFtIERlbm5pcyAoZ3JhaGFtLmRlbm5pc0BnbWFpbC5jb20pCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNvbnRlbnRUeXBlLmgiCisjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNp
bmNsdWRlICJTZXR0aW5nc0RlZmF1bHRWYWx1ZXMuaCIKKyNpbmNsdWRlICJTZXR0aW5nc0dlbmVy
YXRlZC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAiVVJMLmgiCisjaW5jbHVkZSA8
dW5pY29kZS91c2NyaXB0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdI
YXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udEdlbmVyaWNGYW1pbGll
czsKKworY2xhc3MgU2V0dGluZ3MgOiBwdWJsaWMgU2V0dGluZ3NHZW5lcmF0ZWQgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8U2V0dGluZ3M+IGNyZWF0ZShQYWdlKik7CisgICAgflNldHRpbmdz
KCk7CisKKyAgICB2b2lkIHBhZ2VEZXN0cm95ZWQoKSB7IG1fcGFnZSA9IG51bGxwdHI7IH0KKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RhbmRhcmRGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOworICAgIFdFQkNPUkVfRVhQ
T1JUIGNvbnN0IEF0b21pY1N0cmluZyYgc3RhbmRhcmRGb250RmFtaWx5KFVTY3JpcHRDb2RlID0g
VVNDUklQVF9DT01NT04pIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRGaXhl
ZEZvbnRGYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NP
TU1PTik7CisgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBmaXhlZEZvbnRG
YW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFNlcmlmRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBVU2Ny
aXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBBdG9t
aWNTdHJpbmcmIHNlcmlmRm9udEZhbWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBj
b25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Fuc1NlcmlmRm9udEZhbWlseShj
b25zdCBBdG9taWNTdHJpbmcmLCBVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBjb25zdCBBdG9taWNTdHJpbmcmIHNhbnNTZXJpZkZvbnRGYW1pbHkoVVNj
cmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEN1cnNpdmVGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2Rl
ID0gVVNDUklQVF9DT01NT04pOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmlu
ZyYgY3Vyc2l2ZUZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7
CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEZhbnRhc3lGb250RmFtaWx5KGNvbnN0IEF0
b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01NT04pOworICAgIFdFQkNPUkVf
RVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgZmFudGFzeUZvbnRGYW1pbHkoVVNjcmlwdENvZGUg
PSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBp
Y3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVND
UklQVF9DT01NT04pOworICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgcGlj
dG9ncmFwaEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFi
bGVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IGRlZmF1bHRNaW5pbXVtWm9v
bUZvbnRTaXplKCk7CisKKyAgICAvLyBPbmx5IHNldCBieSBMYXlvdXQgVGVzdHMuCisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmKTsKKyAg
ICBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRp
YVR5cGVPdmVycmlkZTsgfQorCisgICAgLy8gVW5saWtlIGFyZUltYWdlc0VuYWJsZWQsIHRoaXMg
b25seSBzdXBwcmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQgb2YKKyAgICAvLyB0aGUgaW1hZ2UgVVJM
LiAgQSBjYWNoZWQgaW1hZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBpZiByZXF1ZXN0ZWQuCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCk7
CisgICAgYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSBjb25zdCB7IHJldHVybiBtX2xv
YWRzSW1hZ2VzQXV0b21hdGljYWxseTsgfQorCisgICAgLy8gQ2xpZW50cyB0aGF0IGV4ZWN1dGUg
c2NyaXB0IHNob3VsZCBjYWxsIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4ZWN1dGVTY3JpcHRzKCkK
KyAgICAvLyBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24uIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4
ZWN1dGVTY3JpcHRzKCkgY2hlY2tzIHRoZQorICAgIC8vIEhUTUwgc2FuZGJveCwgcGx1Zy1pbiBz
YW5kYm94aW5nLCBhbmQgb3RoZXIgaW1wb3J0YW50IGRldGFpbHMuCisgICAgYm9vbCBpc1Njcmlw
dEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2NyaXB0RW5hYmxlZDsgfQorICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U2NyaXB0RW5hYmxlZChib29sKTsKKworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0SW1hZ2VzRW5hYmxlZChib29sKTsKKyAgICBib29sIGFyZUltYWdlc0VuYWJs
ZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZUltYWdlc0VuYWJsZWQ7IH0KKworICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0UGx1Z2luc0VuYWJsZWQoYm9vbCk7CisgICAgYm9vbCBhcmVQbHVnaW5z
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlUGx1Z2luc0VuYWJsZWQ7IH0KKworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGJvb2wpOworICAgIGJv
b2wgZG5zUHJlZmV0Y2hpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kbnNQcmVmZXRjaGlu
Z0VuYWJsZWQ7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlclN0eWxlU2hlZXRM
b2NhdGlvbihjb25zdCBVUkwmKTsKKyAgICBjb25zdCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247IH0KKworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyk7IC8v
IEluaXRpYWxpemVkIHRvIERPTVRpbWVyOjpkZWZhdWx0TWluaW11bUludGVydmFsKCkuCisgICAg
U2Vjb25kcyBtaW5pbXVtRE9NVGltZXJJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11
bURPTVRpbWVySW50ZXJ2YWw7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TGF5b3V0
SW50ZXJ2YWwoU2Vjb25kcyk7CisgICAgU2Vjb25kcyBsYXlvdXRJbnRlcnZhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbGF5b3V0SW50ZXJ2YWw7IH0KKworICAgIGJvb2wgaGlkZGVuUGFnZURPTVRpbWVy
VGhyb3R0bGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VET01UaW1lclRo
cm90dGxpbmdFbmFibGVkOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIaWRkZW5QYWdl
RE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChib29sKTsKKyAgICBib29sIGhpZGRlblBhZ2VET01U
aW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5QYWdl
RE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlczsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoYm9vbCk7CisK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFVzZXNQYWdlQ2FjaGUoYm9vbCk7CisgICAgYm9v
bCB1c2VzUGFnZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV91c2VzUGFnZUNhY2hlOyB9CisKKyNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCisgICAgYm9vbCByZXNvdXJjZVVzYWdlT3ZlcmxheVZp
c2libGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZTsgfQor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJv
b2wpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisgICAgc3RhdGljIHZvaWQgc2V0U2hv
dWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7CisgICAgc3RhdGljIGJvb2wgc2hvdWxk
VXNlSGlnaFJlc29sdXRpb25UaW1lcnMoKSB7IHJldHVybiBnU2hvdWxkVXNlSGlnaFJlc29sdXRp
b25UaW1lcnM7IH0KKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgaXNQb3N0TG9hZENQVVVzYWdl
TWVhc3VyZW1lbnRFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNQb3N0QmFja2dyb3VuZGlu
Z0NQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCk7CisgICAgc3RhdGljIGJvb2wgaXNQZXJBY3Rp
dml0eVN0YXRlQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKTsKKworICAgIHN0YXRpYyBib29s
IGlzUG9zdExvYWRNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOworICAgIHN0YXRpYyBi
b29sIGlzUG9zdEJhY2tncm91bmRpbmdNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpOwor
CisgICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9u
ZFBhZ2UoYm9vbCk7CisgICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2U7IH0KKwor
I2lmIFVTRShBVkZPVU5EQVRJT04pCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0
QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzQVZGb3Vu
ZGF0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25FbmFibGVkOyB9CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9uRW5hYmxl
ZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9uTlNVUkxTZXNzaW9u
RW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFibGVkOyB9Cisj
ZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2
b2lkIHNldFFUS2l0RW5hYmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzUVRLaXRF
bmFibGVkKCkgeyByZXR1cm4gZ1FUS2l0RW5hYmxlZDsgfQorI2Vsc2UKKyAgICBzdGF0aWMgYm9v
bCBpc1FUS2l0RW5hYmxlZCgpIHsgcmV0dXJuIGZhbHNlOyB9CisjZW5kaWYKKworI2lmIFVTRShH
U1RSRUFNRVIpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0R1N0cmVhbWVyRW5h
YmxlZChib29sIGZsYWcpOworICAgIHN0YXRpYyBib29sIGlzR1N0cmVhbWVyRW5hYmxlZCgpIHsg
cmV0dXJuIGdHU3RyZWFtZXJFbmFibGVkOyB9CisjZW5kaWYKKworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHNldE1vY2tTY3JvbGxiYXJzRW5hYmxlZChib29sIGZsYWcpOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIG1vY2tTY3JvbGxiYXJzRW5hYmxlZCgpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0VXNlc092ZXJsYXlTY3JvbGxiYXJzKGJvb2wg
ZmxhZyk7CisgICAgc3RhdGljIGJvb2wgdXNlc092ZXJsYXlTY3JvbGxiYXJzKCk7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wp
OworICAgIHN0YXRpYyBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKKworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpT
dG9yYWdlQmxvY2tpbmdQb2xpY3kpOworICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tp
bmdQb2xpY3kgc3RvcmFnZUJsb2NraW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
QmxvY2tpbmdQb2xpY3k7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sKTsKKyAgICBib29sIHNjcm9sbGluZ1BlcmZv
cm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSB7IHJldHVybiBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9n
Z2luZ0VuYWJsZWQ7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3Vs
ZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyhib29sKTsKKyAgICBzdGF0aWMg
Ym9vbCBzaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoKTsKKworICAg
IGJvb2wgaGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQ7IH0KKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5h
YmxlZChib29sKTsKKworICAgIHN0YXRpYyBib29sIGxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNp
emVFbmFibGVkKCkgeyByZXR1cm4gZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVk
OyB9CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TG93UG93ZXJWaWRlb0F1ZGlv
QnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCk7CisKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZUxvYWRT
dGF0aXN0aWNzRW5hYmxlZCgpIHsgcmV0dXJuIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxl
ZEVuYWJsZWQ7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRSZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRW5hYmxlZChib29sKTsKKworI2lmIFBMQVRGT1JNKElPUykKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBdWRpb1Nlc3Npb25DYXRlZ29yeU92ZXJyaWRlKHVu
c2lnbmVkKTsKKyAgICBzdGF0aWMgdW5zaWduZWQgYXVkaW9TZXNzaW9uQ2F0ZWdvcnlPdmVycmlk
ZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TmV0d29ya0RhdGFVc2Fn
ZVRyYWNraW5nRW5hYmxlZChib29sKTsKKyAgICBzdGF0aWMgYm9vbCBuZXR3b3JrRGF0YVVzYWdl
VHJhY2tpbmdFbmFibGVkKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRO
ZXR3b3JrSW50ZXJmYWNlTmFtZShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgY29uc3QgU3Ry
aW5nJiBuZXR3b3JrSW50ZXJmYWNlTmFtZSgpOworCisjaWYgSEFWRShBVktJVCkKKyAgICBzdGF0
aWMgdm9pZCBzZXRBVktpdEVuYWJsZWQoYm9vbCBmbGFnKSB7IGdBVktpdEVuYWJsZWQgPSBmbGFn
OyB9CisjZW5kaWYKKyAgICBzdGF0aWMgYm9vbCBhdktpdEVuYWJsZWQoKSB7IHJldHVybiBnQVZL
aXRFbmFibGVkOyB9CisKKyAgICBzdGF0aWMgdm9pZCBzZXRTaG91bGRPcHRPdXRPZk5ldHdvcmtT
dGF0ZU9ic2VydmF0aW9uKGJvb2wgZmxhZykgeyBnU2hvdWxkT3B0T3V0T2ZOZXR3b3JrU3RhdGVP
YnNlcnZhdGlvbiA9IGZsYWc7IH0KKyAgICBzdGF0aWMgYm9vbCBzaG91bGRPcHRPdXRPZk5ldHdv
cmtTdGF0ZU9ic2VydmF0aW9uKCkgeyByZXR1cm4gZ1Nob3VsZE9wdE91dE9mTmV0d29ya1N0YXRl
T2JzZXJ2YXRpb247IH0KKyNlbmRpZgorCisjaWYgVVNFKEFVRElPX1NFU1NJT04pCisgICAgc3Rh
dGljIHZvaWQgc2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoYm9vbCBmbGFnKSB7
IGdNYW5hZ2VBdWRpb1Nlc3Npb24gPSBmbGFnOyB9CisgICAgc3RhdGljIGJvb2wgc2hvdWxkTWFu
YWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoKSB7IHJldHVybiBnTWFuYWdlQXVkaW9TZXNzaW9uOyB9
CisjZW5kaWYKKworICAgIHN0YXRpYyB2b2lkIHNldEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxl
ZChib29sIGVuYWJsZWQpIHsgZ0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCA9IGVuYWJsZWQ7
IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBjdXN0b21QYXN0ZWJvYXJkRGF0YUVu
YWJsZWQoKTsKKyAgICAKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIHN0YXRpYyBib29s
IG1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBzZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkKGJvb2wpOworCisgICAgYm9vbCBtZWRp
YUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgdm9pZCBzZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb24o
Ym9vbCk7CisjZW5kaWYKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEFsbG93
c0FueVNTTENlcnRpZmljYXRlKGJvb2wpOworICAgIHN0YXRpYyBib29sIGFsbG93c0FueVNTTENl
cnRpZmljYXRlKCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgU3RyaW5nJiBk
ZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVT
dXBwb3J0KGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KGNvbnN0IFN0
cmluZyYpOworICAgIGNvbnN0IFZlY3RvcjxDb250ZW50VHlwZT4mIG1lZGlhQ29udGVudFR5cGVz
UmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IFNldHRpbmdzKFBhZ2UqKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxp
ZXMoKTsKKworICAgIFN0cmluZyBtX21lZGlhVHlwZU92ZXJyaWRlOworICAgIFVSTCBtX3VzZXJT
dHlsZVNoZWV0TG9jYXRpb247CisgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZvbnRHZW5lcmlj
RmFtaWxpZXM+IG1fZm9udEdlbmVyaWNGYW1pbGllczsKKyAgICBTZWN1cml0eU9yaWdpbjo6U3Rv
cmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5OworICAgIFNlY29uZHMg
bV9sYXlvdXRJbnRlcnZhbDsKKyAgICBTZWNvbmRzIG1fbWluaW11bURPTVRpbWVySW50ZXJ2YWw7
CisKKyAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5IDogMTsKKyAgICBib29sIG1f
YXJlSW1hZ2VzRW5hYmxlZCA6IDE7CisgICAgYm9vbCBtX2FyZVBsdWdpbnNFbmFibGVkIDogMTsK
KyAgICBib29sIG1faXNTY3JpcHRFbmFibGVkIDogMTsKKyAgICBib29sIG1fdXNlc1BhZ2VDYWNo
ZSA6IDE7CisgICAgYm9vbCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlIDogMTsK
KyAgICBib29sIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkIDogMTsKKworICAgIGJvb2wgbV9zY3Jv
bGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkIDogMTsKKworICAgIFRpbWVyIG1fc2V0SW1h
Z2VMb2FkaW5nU2V0dGluZ3NUaW1lcjsKKyAgICB2b2lkIGltYWdlTG9hZGluZ1NldHRpbmdzVGlt
ZXJGaXJlZCgpOworCisgICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFi
bGVkIDogMTsKKyAgICBib29sIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFi
bGVkIDogMTsKKworI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKKyAgICBib29sIG1fcmVzb3Vy
Y2VVc2FnZU92ZXJsYXlWaXNpYmxlIHsgZmFsc2UgfTsKKyNlbmRpZgorCisgICAgYm9vbCBtX2hp
ZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzIHsgZmFsc2UgfTsKKworI2lm
IFVTRShBVkZPVU5EQVRJT04pCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ0FWRm91
bmRhdGlvbkVuYWJsZWQ7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ0FWRm91bmRh
dGlvbk5TVVJMU2Vzc2lvbkVuYWJsZWQ7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdRVEtpdEVuYWJsZWQ7CisjZW5kaWYKKwor
I2lmIFVTRShHU1RSRUFNRVIpCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZ0dTdHJl
YW1lckVuYWJsZWQ7CisjZW5kaWYKKworICAgIHN0YXRpYyBib29sIGdNb2NrU2Nyb2xsYmFyc0Vu
YWJsZWQ7CisgICAgc3RhdGljIGJvb2wgZ1VzZXNPdmVybGF5U2Nyb2xsYmFyczsKKyAgICBzdGF0
aWMgYm9vbCBnTW9ja1Njcm9sbEFuaW1hdG9yRW5hYmxlZDsKKworI2lmIFBMQVRGT1JNKFdJTikK
KyAgICBzdGF0aWMgYm9vbCBnU2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnM7CisjZW5kaWYK
KyAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0
ZXJzOworI2lmIFBMQVRGT1JNKElPUykKKyAgICBzdGF0aWMgYm9vbCBnTmV0d29ya0RhdGFVc2Fn
ZVRyYWNraW5nRW5hYmxlZDsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnQVZLaXRF
bmFibGVkOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdTaG91bGRPcHRPdXRPZk5l
dHdvcmtTdGF0ZU9ic2VydmF0aW9uOworI2VuZGlmCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IGJvb2wgZ01hbmFnZUF1ZGlvU2Vzc2lvbjsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9v
bCBnQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkOworCisjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKKyAgICBzdGF0aWMgYm9vbCBnTW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDsKKyAgICBzdGF0
aWMgYm9vbCBnTWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOworI2VuZGlmCisK
KyAgICBzdGF0aWMgYm9vbCBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7Cisg
ICAgc3RhdGljIGJvb2wgZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsKKyAg
ICBzdGF0aWMgYm9vbCBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGU7CisKKyAgICBWZWN0b3I8Q29u
dGVudFR5cGU+IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7Cit9
OworCitpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0TG9hZENQVVVzYWdlTWVhc3VyZW1lbnRF
bmFibGVkKCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNl
CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKK2lubGluZSBib29sIFNldHRpbmdzOjpp
c1Bvc3RCYWNrZ3JvdW5kaW5nQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQoreworI2lmIFBM
QVRGT1JNKE1BQykKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOwor
I2VuZGlmCit9CisKK2lubGluZSBib29sIFNldHRpbmdzOjppc1BlckFjdGl2aXR5U3RhdGVDUFVV
c2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVy
biB0cnVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworaW5saW5lIGJv
b2wgU2V0dGluZ3M6OmlzUG9zdExvYWRNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCit7
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVy
biBmYWxzZTsKKyNlbmRpZgorfQorCitpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQb3N0QmFja2dy
b3VuZGluZ01lbW9yeVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkKK3sKKyNpZiBQTEFURk9STShN
QUMpCisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQoj
IyAtMCwwICsxICMjCituYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCShyZXZpc2lvbiAyMjI3NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwyMiAr
MjksMjIgQEAKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3Jp
Z2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3NEZWZhdWx0VmFsdWVzLmgiCi0jaW5jbHVkZSAiU2V0
dGluZ3NHZW5lcmF0ZWQuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgIlVSTC5oIgog
I2luY2x1ZGUgPHVuaWNvZGUvdXNjcmlwdC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udEdlbmVyaWNGYW1pbGllczsKK2NsYXNzIFBhZ2U7CiAK
LWNsYXNzIFNldHRpbmdzIDogcHVibGljIFNldHRpbmdzR2VuZXJhdGVkIHsKK2NsYXNzIFNldHRp
bmdzQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPFNldHRpbmdzQmFzZT4gewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U2V0dGluZ3M+IGNyZWF0ZShQYWdlKik7Ci0gICAgflNldHRpbmdzKCk7Cisg
ICAgflNldHRpbmdzQmFzZSgpOwogCiAgICAgdm9pZCBwYWdlRGVzdHJveWVkKCkgeyBtX3BhZ2Ug
PSBudWxscHRyOyB9CiAKQEAgLTY5LDU0ICs2OSwyOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRQaWN0b2dyYXBoRm9udEZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBV
U2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKTsKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBB
dG9taWNTdHJpbmcmIHBpY3RvZ3JhcGhGb250RmFtaWx5KFVTY3JpcHRDb2RlID0gVVNDUklQVF9D
T01NT04pIGNvbnN0OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVmYXVsdFRl
eHRBdXRvc2l6aW5nRW5hYmxlZCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCBk
ZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyk7CisgICAgU2Vjb25kcyBtaW5pbXVtRE9N
VGltZXJJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluaW11bURPTVRpbWVySW50ZXJ2YWw7
IH0KIAotICAgIC8vIE9ubHkgc2V0IGJ5IExheW91dCBUZXN0cy4KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFN0
cmluZyYgbWVkaWFUeXBlT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92ZXJy
aWRlOyB9Ci0KLSAgICAvLyBVbmxpa2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1cHBy
ZXNzZXMgdGhlIG5ldHdvcmsgbG9hZCBvZgotICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNhY2hl
ZCBpbWFnZSB3aWxsIHN0aWxsIGJlIHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKLSAgICBib29s
IGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5OyB9Ci0KLSAgICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQgc2hv
dWxkIGNhbGwgU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQotICAgIC8vIGlu
c3RlYWQgb2YgdGhpcyBmdW5jdGlvbi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlw
dHMoKSBjaGVja3MgdGhlCi0gICAgLy8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hpbmcs
IGFuZCBvdGhlciBpbXBvcnRhbnQgZGV0YWlscy4KLSAgICBib29sIGlzU2NyaXB0RW5hYmxlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNTY3JpcHRFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRTY3JpcHRFbmFibGVkKGJvb2wpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRJbWFnZXNFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYXJlSW1hZ2VzRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsKLSAgICBib29sIGFyZVBsdWdpbnNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5zRW5hYmxlZDsgfQorICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0TGF5b3V0SW50ZXJ2YWwoU2Vjb25kcyk7CisgICAgU2Vjb25kcyBsYXlvdXRJbnRl
cnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0SW50ZXJ2YWw7IH0KIAotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgZG5z
UHJlZmV0Y2hpbmdFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9kbnNQcmVmZXRjaGluZ0VuYWJs
ZWQ7IH0KKyAgICAvLyBGSVhNRTogTW92ZSB0aGlzIHRvIFNldHRpbmdzRGVmYXVsdFZhbHVlcy5o
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdE1lZGlhQ29u
dGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgVVJMJik7Ci0gICAgY29uc3Qg
VVJMJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU3R5bGVT
aGVldExvY2F0aW9uOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUNvbnRlbnRU
eXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBWZWN0b3I8Q29udGVudFR5cGU+Jik7
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hh
cmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBWZWN0b3I8Q29udGVudFR5
cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7IH0KIAot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25k
cyk7IC8vIEluaXRpYWxpemVkIHRvIERPTVRpbWVyOjpkZWZhdWx0TWluaW11bUludGVydmFsKCku
Ci0gICAgU2Vjb25kcyBtaW5pbXVtRE9NVGltZXJJbnRlcnZhbCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWluaW11bURPTVRpbWVySW50ZXJ2YWw7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0
TGF5b3V0SW50ZXJ2YWwoU2Vjb25kcyk7Ci0gICAgU2Vjb25kcyBsYXlvdXRJbnRlcnZhbCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGF5b3V0SW50ZXJ2YWw7IH0KKyAgICAvLyBGSVhNRTogTW92ZSB0aGVz
ZSB0byBTZXR0aW5nc0RlZmF1bHRWYWx1ZXMuaAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBi
b29sIGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKTsKIAotICAgIGJvb2wgaGlk
ZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2hpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChib29sKTsKLSAgICBib29s
IGhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKCkgY29uc3QgeyByZXR1
cm4gbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlczsgfQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNy
ZWFzZXMoYm9vbCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFVzZXNQYWdlQ2FjaGUo
Ym9vbCk7Ci0gICAgYm9vbCB1c2VzUGFnZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV91c2VzUGFn
ZUNhY2hlOyB9Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgYm9vbCByZXNvdXJj
ZVVzYWdlT3ZlcmxheVZpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVXNhZ2VPdmVy
bGF5VmlzaWJsZTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92
ZXJsYXlWaXNpYmxlKGJvb2wpOwotI2VuZGlmCisKKworICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93
aW5nIGFyZSBhbGwgZ2xvYmFscyBhbmQgc2hvdWxkIGJlIG1vdmVkIGVsc2V3aGVyZSBvciBtYWRl
IHBlci1TZXR0aW5ncy4KKyAgICAvLyAgICAgICAgSGF2aW5nIHRoZSBTZXR0aW5ncyBjbGFzcyBj
b250YWluIGJvdGggcGVyLVNldHRpbmdzIGFuZCBnbG9iYWwgc2V0dGluZ3MgaXMgbW9yZQorICAg
IC8vICAgICAgICBjb25mdXNpbmcgdGhhbiBpdHMgd29ydGguCiAKICNpZiBQTEFURk9STShXSU4p
CiAgICAgc3RhdGljIHZvaWQgc2V0U2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7
CkBAIC0xMzIsOSArMTA3LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29u
c3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhyb3coKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0QmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbCk7Ci0gICAgYm9vbCBiYWNr
Z3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3Vu
ZFNob3VsZEV4dGVuZEJleW9uZFBhZ2U7IH0KLQogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGZs
YWcpOwogICAgIHN0YXRpYyBib29sIGlzQVZGb3VuZGF0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdB
VkZvdW5kYXRpb25FbmFibGVkOyB9CkBAIC0xNjMsMTggKzEzNSw5IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wp
OwogICAgIHN0YXRpYyBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpT
dG9yYWdlQmxvY2tpbmdQb2xpY3kpOwotICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tp
bmdQb2xpY3kgc3RvcmFnZUJsb2NraW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdl
QmxvY2tpbmdQb2xpY3k7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sKTsKLSAgICBib29sIHNjcm9sbGluZ1BlcmZv
cm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSB7IHJldHVybiBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9n
Z2luZ0VuYWJsZWQ7IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3Vs
ZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyhib29sKTsKICAgICBzdGF0aWMg
Ym9vbCBzaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoKTsKIAotICAg
IGJvb2wgaGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQ7IH0KLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5h
YmxlZChib29sKTsKLQogICAgIHN0YXRpYyBib29sIGxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNp
emVFbmFibGVkKCkgeyByZXR1cm4gZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVk
OyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TG93UG93ZXJWaWRlb0F1ZGlv
QnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCk7CiAKQEAgLTIxOSw0NSArMTgyLDM3IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0
ZShib29sKTsKICAgICBzdGF0aWMgYm9vbCBhbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZSgpOwogCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFN0cmluZyYgZGVmYXVsdE1lZGlhQ29udGVu
dFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBWZWN0
b3I8Q29udGVudFR5cGU+Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYUNvbnRl
bnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydChjb25zdCBTdHJpbmcmKTsKLSAgICBjb25z
dCBWZWN0b3I8Q29udGVudFR5cGU+JiBtZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJl
U3VwcG9ydCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJk
d2FyZVN1cHBvcnQ7IH0KK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBTZXR0aW5nc0Jhc2UoUGFn
ZSopOwogCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IFNldHRpbmdzKFBhZ2UqKTsKKyAgICAvLyBI
ZWxwZXJzIHVzZWQgYnkgZ2VuZXJhdGVkIFNldHRpbmdzLmNwcC4KKyAgICB2b2lkIHNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworICAgIHZvaWQgbWVkaWFUeXBlT3ZlcnJpZGVDaGFu
Z2VkKCk7CisgICAgdm9pZCBpbWFnZXNFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc2NyaXB0
RW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIHBsdWdpbnNFbmFibGVkQ2hhbmdlZCgpOworICAg
IHZvaWQgdXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKTsKKyAgICB2b2lkIHVzZXNQYWdl
Q2FjaGVDaGFuZ2VkKCk7CisgICAgdm9pZCBkbnNQcmVmZXRjaGluZ0VuYWJsZWRDaGFuZ2VkKCk7
CisgICAgdm9pZCByZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGVDaGFuZ2VkKCk7CisgICAgdm9p
ZCBzdG9yYWdlQmxvY2tpbmdQb2xpY3lDaGFuZ2VkKCk7CisgICAgdm9pZCBiYWNrZ3JvdW5kU2hv
dWxkRXh0ZW5kQmV5b25kUGFnZUNoYW5nZWQoKTsKKyAgICB2b2lkIHNjcm9sbGluZ1BlcmZvcm1h
bmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2VkKCk7CisgICAgdm9pZCBoaWRkZW5QYWdlRE9NVGltZXJU
aHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgdm9pZCBoaWRkZW5QYWdlQ1NTQW5pbWF0aW9u
U3VzcGVuc2lvbkVuYWJsZWRDaGFuZ2VkKCk7CisgICAgCiAKICAgICB2b2lkIGluaXRpYWxpemVE
ZWZhdWx0Rm9udEZhbWlsaWVzKCk7CiAKLSAgICBTdHJpbmcgbV9tZWRpYVR5cGVPdmVycmlkZTsK
LSAgICBVUkwgbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOworICAgIFBhZ2UqIG1fcGFnZTsKKwog
ICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxGb250R2VuZXJpY0ZhbWlsaWVzPiBtX2ZvbnRHZW5l
cmljRmFtaWxpZXM7Ci0gICAgU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBt
X3N0b3JhZ2VCbG9ja2luZ1BvbGljeTsKICAgICBTZWNvbmRzIG1fbGF5b3V0SW50ZXJ2YWw7CiAg
ICAgU2Vjb25kcyBtX21pbmltdW1ET01UaW1lckludGVydmFsOwogCi0gICAgYm9vbCBtX2xvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSA6IDE7Ci0gICAgYm9vbCBtX2FyZUltYWdlc0VuYWJsZWQgOiAx
OwotICAgIGJvb2wgbV9hcmVQbHVnaW5zRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX2lzU2NyaXB0
RW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX3VzZXNQYWdlQ2FjaGUgOiAxOwotICAgIGJvb2wgbV9i
YWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA6IDE7Ci0gICAgYm9vbCBtX2Ruc1ByZWZl
dGNoaW5nRW5hYmxlZCA6IDE7Ci0KLSAgICBib29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dn
aW5nRW5hYmxlZCA6IDE7Ci0KICAgICBUaW1lciBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGlt
ZXI7CiAgICAgdm9pZCBpbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQoKTsKIAotICAgIGJv
b2wgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBt
X2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA6IDE7Ci0KLSNpZiBFTkFC
TEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgYm9vbCBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJs
ZSB7IGZhbHNlIH07Ci0jZW5kaWYKLQotICAgIGJvb2wgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJv
dHRsaW5nQXV0b0luY3JlYXNlcyB7IGZhbHNlIH07Ci0KICNpZiBVU0UoQVZGT1VOREFUSU9OKQog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdBVkZvdW5kYXRpb25FbmFibGVkOwogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdBVkZvdW5kYXRpb25OU1VSTFNlc3Npb25FbmFi
bGVkOwpAQCAtMjk5LDcgKzI1NCw3IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPENvbnRlbnRUeXBl
PiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0OwogfTsKIAotaW5s
aW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdExvYWRDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgp
CitpbmxpbmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9zdExvYWRDUFVVc2FnZU1lYXN1cmVtZW50
RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0z
MDgsNyArMjYzLDcgQEAgaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdExvYWRDUFVVc2FnZQog
I2VuZGlmCiB9CiAKLWlubGluZSBib29sIFNldHRpbmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW5nQ1BV
VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQoraW5saW5lIGJvb2wgU2V0dGluZ3NCYXNlOjppc1Bv
c3RCYWNrZ3JvdW5kaW5nQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQogewogI2lmIFBMQVRG
T1JNKE1BQykKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMxNyw3ICsyNzIsNyBAQCBpbmxpbmUgYm9v
bCBTZXR0aW5nczo6aXNQb3N0QmFja2dyb3VuZGluCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wg
U2V0dGluZ3M6OmlzUGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlTWVhc3VyZW1lbnRFbmFibGVkKCkK
K2lubGluZSBib29sIFNldHRpbmdzQmFzZTo6aXNQZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VNZWFz
dXJlbWVudEVuYWJsZWQoKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTMyNiw3ICsyODEsNyBAQCBpbmxpbmUgYm9vbCBTZXR0aW5nczo6aXNQZXJBY3Rpdml0eVN0
YXRlCiAjZW5kaWYKIH0KIAotaW5saW5lIGJvb2wgU2V0dGluZ3M6OmlzUG9zdExvYWRNZW1vcnlV
c2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCitpbmxpbmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9z
dExvYWRNZW1vcnlVc2FnZU1lYXN1cmVtZW50RW5hYmxlZCgpCiB7CiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAgICAgcmV0dXJuIHRydWU7CkBAIC0zMzUsNyArMjkwLDcgQEAgaW5saW5lIGJvb2wgU2V0
dGluZ3M6OmlzUG9zdExvYWRNZW1vcnlVcwogI2VuZGlmCiB9CiAKLWlubGluZSBib29sIFNldHRp
bmdzOjppc1Bvc3RCYWNrZ3JvdW5kaW5nTWVtb3J5VXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQor
aW5saW5lIGJvb2wgU2V0dGluZ3NCYXNlOjppc1Bvc3RCYWNrZ3JvdW5kaW5nTWVtb3J5VXNhZ2VN
ZWFzdXJlbWVudEVuYWJsZWQoKQogewogI2lmIFBMQVRGT1JNKE1BQykKICAgICByZXR1cm4gdHJ1
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3RvcmFnZUJsb2NraW5nUG9saWN5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TdG9yYWdlQmxvY2tpbmdQb2xpY3kuaAko
cmV2aXNpb24gMjIyNzAzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2lu
Lmg6MjIyNzAzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TdG9yYWdlQmxvY2tpbmdQb2xpY3ku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNy0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVVJMOworCitjbGFzcyBTZWN1cml0
eU9yaWdpbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTZWN1cml0eU9yaWdpbj4gewor
cHVibGljOgorICAgIGVudW0gUG9saWN5IHsKKyAgICAgICAgQWx3YXlzRGVueSA9IDAsCisgICAg
ICAgIEFsd2F5c0FsbG93LAorICAgICAgICBBc2sKKyAgICB9OworCisgICAgZW51bSBTdG9yYWdl
QmxvY2tpbmdQb2xpY3kgeworICAgICAgICBBbGxvd0FsbFN0b3JhZ2UgPSAwLAorICAgICAgICBC
bG9ja1RoaXJkUGFydHlTdG9yYWdlLAorICAgICAgICBCbG9ja0FsbFN0b3JhZ2UKKyAgICB9Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZWN1cml0eU9yaWdpbj4gY3JlYXRlKGNv
bnN0IFVSTCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2VjdXJpdHlPcmlnaW4+
IGNyZWF0ZVVuaXF1ZSgpOworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxTZWN1cml0
eU9yaWdpbj4gY3JlYXRlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPFNlY3VyaXR5T3JpZ2luPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBwcm90
b2NvbCwgY29uc3QgU3RyaW5nJiBob3N0LCBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBwb3J0KTsK
KworICAgIC8vIFNvbWUgVVJMIHNjaGVtZXMgdXNlIG5lc3RlZCBVUkxzIGZvciB0aGVpciBzZWN1
cml0eSBjb250ZXh0LiBGb3IgZXhhbXBsZSwKKyAgICAvLyBmaWxlc3lzdGVtIFVSTHMgbG9vayBs
aWtlIHRoZSBmb2xsb3dpbmc6CisgICAgLy8KKyAgICAvLyAgIGZpbGVzeXN0ZW06aHR0cDovL2V4
YW1wbGUuY29tL3RlbXBvcmFyeS9wYXRoL3RvL2ZpbGUucG5nCisgICAgLy8KKyAgICAvLyBXZSdy
ZSBzdXBwb3NlZCB0byB1c2UgImh0dHA6Ly9leGFtcGxlLmNvbSIgYXMgdGhlIG9yaWdpbi4KKyAg
ICAvLworICAgIC8vIEdlbmVyYWxseSwgd2UgYWRkIFVSTCBzY2hlbWVzIHRvIHRoaXMgbGlzdCB3
aGVuIFdlYktpdCBzdXBwb3J0IHRoZW0uIEZvcgorICAgIC8vIGV4YW1wbGUsIHdlIGRvbid0IGlu
Y2x1ZGUgdGhlICJqYXIiIHNjaGVtZSwgZXZlbiB0aG91Z2ggRmlyZWZveAorICAgIC8vIHVuZGVy
c3RhbmRzIHRoYXQgImphciIgdXNlcyBhbiBpbm5lciBVUkwgZm9yIGl0J3Mgc2VjdXJpdHkgb3Jp
Z2luLgorICAgIHN0YXRpYyBib29sIHNob3VsZFVzZUlubmVyVVJMKGNvbnN0IFVSTCYpOworICAg
IHN0YXRpYyBVUkwgZXh0cmFjdElubmVyVVJMKGNvbnN0IFVSTCYpOworCisgICAgLy8gQ3JlYXRl
IGEgZGVlcCBjb3B5IG9mIHRoaXMgU2VjdXJpdHlPcmlnaW4uIFRoaXMgbWV0aG9kIGlzIHVzZWZ1
bAorICAgIC8vIHdoZW4gbWFyc2hhbGxpbmcgYSBTZWN1cml0eU9yaWdpbiB0byBhbm90aGVyIHRo
cmVhZC4KKyAgICBXRUJDT1JFX0VYUE9SVCBSZWY8U2VjdXJpdHlPcmlnaW4+IGlzb2xhdGVkQ29w
eSgpIGNvbnN0OworCisgICAgLy8gU2V0IHRoZSBkb21haW4gcHJvcGVydHkgb2YgdGhpcyBzZWN1
cml0eSBvcmlnaW4gdG8gbmV3RG9tYWluLiBUaGlzCisgICAgLy8gZnVuY3Rpb24gZG9lcyBub3Qg
Y2hlY2sgd2hldGhlciBuZXdEb21haW4gaXMgYSBzdWZmaXggb2YgdGhlIGN1cnJlbnQKKyAgICAv
LyBkb21haW4uIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHZhbGlkYXRpbmcgbmV3RG9t
YWluLgorICAgIHZvaWQgc2V0RG9tYWluRnJvbURPTShjb25zdCBTdHJpbmcmIG5ld0RvbWFpbik7
CisgICAgYm9vbCBkb21haW5XYXNTZXRJbkRPTSgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tYWluV2Fz
U2V0SW5ET007IH0KKworICAgIGNvbnN0IFN0cmluZyYgcHJvdG9jb2woKSBjb25zdCB7IHJldHVy
biBtX3Byb3RvY29sOyB9CisgICAgY29uc3QgU3RyaW5nJiBob3N0KCkgY29uc3QgeyByZXR1cm4g
bV9ob3N0OyB9CisgICAgY29uc3QgU3RyaW5nJiBkb21haW4oKSBjb25zdCB7IHJldHVybiBtX2Rv
bWFpbjsgfQorICAgIHN0ZDo6b3B0aW9uYWw8dWludDE2X3Q+IHBvcnQoKSBjb25zdCB7IHJldHVy
biBtX3BvcnQ7IH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBhIGdpdmVuIFVSTCBpcyBzZWN1
cmUsIGJhc2VkIGVpdGhlciBkaXJlY3RseSBvbiBpdHMKKyAgICAvLyBvd24gcHJvdG9jb2wsIG9y
LCB3aGVuIHJlbGV2YW50LCBvbiB0aGUgcHJvdG9jb2wgb2YgaXRzICJpbm5lciBVUkwiCisgICAg
Ly8gUHJvdG9jb2xzIGxpa2UgYmxvYjogYW5kIGZpbGVzeXN0ZW06IGZhbGwgaW50byB0aGlzIGxh
dHRlciBjYXRlZ29yeS4KKyAgICBzdGF0aWMgYm9vbCBpc1NlY3VyZShjb25zdCBVUkwmKTsKKwor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFNlY3VyaXR5T3JpZ2luIGNhbiBzY3JpcHQgb2Jq
ZWN0cyBpbiB0aGUgZ2l2ZW4KKyAgICAvLyBTZWN1cml0eU9yaWdpbi4gRm9yIGV4YW1wbGUsIGNh
bGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgYWxsb3dpbmcKKyAgICAvLyBzY3JpcHQgZnJvbSBvbmUg
c2VjdXJpdHkgb3JpZ2luIHRvIHJlYWQgb3Igd3JpdGUgb2JqZWN0cyBmcm9tCisgICAgLy8gYW5v
dGhlciBTZWN1cml0eU9yaWdpbi4KKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGNhbkFjY2Vzcyhj
b25zdCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
aXMgU2VjdXJpdHlPcmlnaW4gY2FuIHJlYWQgY29udGVudCByZXRyaWV2ZWQgZnJvbQorICAgIC8v
IHRoZSBnaXZlbiBVUkwuIEZvciBleGFtcGxlLCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIGlz
c3VpbmcKKyAgICAvLyBYTUxIdHRwUmVxdWVzdHMuCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBj
YW5SZXF1ZXN0KGNvbnN0IFVSTCYpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
aXMgU2VjdXJpdHlPcmlnaW4gY2FuIHJlY2VpdmUgZHJhZyBjb250ZW50IGZyb20gdGhlCisgICAg
Ly8gaW5pdGlhdG9yLiBGb3IgZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhbGxv
d2luZyBjb250ZW50IHRvIGJlCisgICAgLy8gZHJvcHBlZCBvbnRvIGEgdGFyZ2V0LgorICAgIGJv
b2wgY2FuUmVjZWl2ZURyYWdEYXRhKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBkcmFnSW5pdGlhdG9y
KSBjb25zdDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB8ZG9jdW1lbnR8IGNhbiBkaXNwbGF5
IGNvbnRlbnQgZnJvbSB0aGUgZ2l2ZW4gVVJMIChlLmcuLAorICAgIC8vIGluIGFuIGlmcmFtZSBv
ciBhcyBhbiBpbWFnZSkuIEZvciBleGFtcGxlLCB3ZWIgc2l0ZXMgZ2VuZXJhbGx5IGNhbm5vdAor
ICAgIC8vIGRpc3BsYXkgY29udGVudCBmcm9tIHRoZSB1c2VyJ3MgZmlsZXMgc3lzdGVtLgorICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgY2FuRGlzcGxheShjb25zdCBVUkwmKSBjb25zdDsKKworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFNlY3VyaXR5T3JpZ2luIGNhbiBsb2FkIGxvY2FsIHJl
c291cmNlcywgc3VjaAorICAgIC8vIGFzIGltYWdlcywgaWZyYW1lcywgYW5kIHN0eWxlIHNoZWV0
cywgYW5kIGNhbiBsaW5rIHRvIGxvY2FsIFVSTHMuCisgICAgLy8gRm9yIGV4YW1wbGUsIGNhbGwg
dGhpcyBmdW5jdGlvbiBiZWZvcmUgY3JlYXRpbmcgYW4gaWZyYW1lIHRvIGEKKyAgICAvLyBmaWxl
Oi8vIFVSTC4KKyAgICAvLworICAgIC8vIE5vdGU6IEEgU2VjdXJpdHlPcmlnaW4gbWlnaHQgYmUg
YWxsb3dlZCB0byBsb2FkIGxvY2FsIHJlc291cmNlcworICAgIC8vICAgICAgIHdpdGhvdXQgYmVp
bmcgYWJsZSB0byBpc3N1ZSBhbiBYTUxIdHRwUmVxdWVzdCBmb3IgYSBsb2NhbCBVUkwuCisgICAg
Ly8gICAgICAgVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFNlY3VyaXR5T3JpZ2luIGNhbiBpc3N1
ZSBhbgorICAgIC8vICAgICAgIFhNTEh0dHBSZXF1ZXN0IGZvciBhIFVSTCwgY2FsbCBjYW5SZXF1
ZXN0KHVybCkuCisgICAgYm9vbCBjYW5Mb2FkTG9jYWxSZXNvdXJjZXMoKSBjb25zdCB7IHJldHVy
biBtX2NhbkxvYWRMb2NhbFJlc291cmNlczsgfQorCisgICAgLy8gRXhwbGljaXRseSBncmFudCB0
aGUgYWJpbGl0eSB0byBsb2FkIGxvY2FsIHJlc291cmNlcyB0byB0aGlzCisgICAgLy8gU2VjdXJp
dHlPcmlnaW4uCisgICAgLy8KKyAgICAvLyBOb3RlOiBUaGlzIG1ldGhvZCBleGlzdHMgb25seSB0
byBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICAgLy8gICAgICAgd2l0aCBvbGRl
ciB2ZXJzaW9ucyBvZiBXZWJLaXQuCisgICAgdm9pZCBncmFudExvYWRMb2NhbFJlc291cmNlcygp
OworCisgICAgLy8gRXhwbGljaXRseSBncmFudCB0aGUgYWJpbGl0eSB0byBhY2Nlc3MgdmVyeSBv
dGhlciBTZWN1cml0eU9yaWdpbi4KKyAgICAvLworICAgIC8vIFdBUk5JTkc6IFRoaXMgaXMgYW4g
ZXh0cmVtZWx5IHBvd2VyZnVsIGFiaWxpdHkuIFVzZSB3aXRoIGNhdXRpb24hCisgICAgdm9pZCBn
cmFudFVuaXZlcnNhbEFjY2VzcygpOworICAgIGJvb2wgaGFzVW5pdmVyc2FsQWNjZXNzKCkgY29u
c3QgeyByZXR1cm4gbV91bml2ZXJzYWxBY2Nlc3M7IH0KKworICAgIHZvaWQgc2V0U3RvcmFnZUJs
b2NraW5nUG9saWN5KFN0b3JhZ2VCbG9ja2luZ1BvbGljeSBwb2xpY3kpIHsgbV9zdG9yYWdlQmxv
Y2tpbmdQb2xpY3kgPSBwb2xpY3k7IH0KKworICAgIHZvaWQgZ3JhbnRTdG9yYWdlQWNjZXNzRnJv
bUZpbGVVUkxzUXVpcmsoKTsKKyAgICBib29sIG5lZWRzU3RvcmFnZUFjY2Vzc0Zyb21GaWxlVVJM
c1F1aXJrKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNR
dWlyazsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGRvbWFpbkZvckNhY2hlUGFydGl0
aW9uKCkgY29uc3Q7CisKKyAgICBib29sIGNhbkFjY2Vzc0RhdGFiYXNlKGNvbnN0IFNlY3VyaXR5
T3JpZ2luJiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0dXJuIGNhbkFjY2Vzc1N0b3JhZ2UoJnRvcE9y
aWdpbik7IH07CisgICAgYm9vbCBjYW5BY2Nlc3NTZXNzaW9uU3RvcmFnZShjb25zdCBTZWN1cml0
eU9yaWdpbiYgdG9wT3JpZ2luKSBjb25zdCB7IHJldHVybiBjYW5BY2Nlc3NTdG9yYWdlKCZ0b3BP
cmlnaW4sIEFsd2F5c0FsbG93RnJvbVRoaXJkUGFydHkpOyB9CisgICAgYm9vbCBjYW5BY2Nlc3NM
b2NhbFN0b3JhZ2UoY29uc3QgU2VjdXJpdHlPcmlnaW4qIHRvcE9yaWdpbikgY29uc3QgeyByZXR1
cm4gY2FuQWNjZXNzU3RvcmFnZSh0b3BPcmlnaW4pOyB9OworICAgIGJvb2wgY2FuQWNjZXNzUGx1
Z2luU3RvcmFnZShjb25zdCBTZWN1cml0eU9yaWdpbiYgdG9wT3JpZ2luKSBjb25zdCB7IHJldHVy
biBjYW5BY2Nlc3NTdG9yYWdlKCZ0b3BPcmlnaW4pOyB9CisgICAgYm9vbCBjYW5BY2Nlc3NBcHBs
aWNhdGlvbkNhY2hlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0
dXJuIGNhbkFjY2Vzc1N0b3JhZ2UoJnRvcE9yaWdpbik7IH0KKyAgICBib29sIGNhbkFjY2Vzc0Nv
b2tpZXMoKSBjb25zdCB7IHJldHVybiAhaXNVbmlxdWUoKTsgfQorICAgIGJvb2wgY2FuUmVxdWVz
dEdlb2xvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gIWlzVW5pcXVlKCk7IH0KKyAgICBQb2xpY3kg
Y2FuU2hvd05vdGlmaWNhdGlvbnMoKSBjb25zdDsKKworICAgIC8vIFRoZSBsb2NhbCBTZWN1cml0
eU9yaWdpbiBpcyB0aGUgbW9zdCBwcml2aWxlZ2VkIFNlY3VyaXR5T3JpZ2luLgorICAgIC8vIFRo
ZSBsb2NhbCBTZWN1cml0eU9yaWdpbiBjYW4gc2NyaXB0IGFueSBkb2N1bWVudCwgbmF2aWdhdGUg
dG8gbG9jYWwKKyAgICAvLyByZXNvdXJjZXMsIGFuZCBjYW4gc2V0IGFyYml0cmFyeSBoZWFkZXJz
IG9uIFhNTEh0dHBSZXF1ZXN0cy4KKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzTG9jYWwoKSBj
b25zdDsKKworICAgIC8vIFRoZSBvcmlnaW4gaXMgYSBnbG9iYWxseSB1bmlxdWUgaWRlbnRpZmll
ciBhc3NpZ25lZCB3aGVuIHRoZSBEb2N1bWVudCBpcworICAgIC8vIGNyZWF0ZWQuIGh0dHA6Ly93
d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvI3NhbmRib3hPcmlnaW4K
KyAgICAvLworICAgIC8vIFRoZXJlJ3MgYSBzdWJ0bGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgdW5p
cXVlIG9yaWdpbiBhbmQgYW4gb3JpZ2luIHRoYXQKKyAgICAvLyBoYXMgdGhlIFNhbmRib3hPcmln
aW4gZmxhZyBzZXQuIFRoZSBsYXR0ZXIgaW1wbGllcyB0aGUgZm9ybWVyLCBhbmQsIGluCisgICAg
Ly8gYWRkaXRpb24sIHRoZSBTYW5kYm94T3JpZ2luIGZsYWcgaXMgaW5oZXJpdGVkIGJ5IGlmcmFt
ZXMuCisgICAgYm9vbCBpc1VuaXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNVbmlxdWU7IH0KKwor
ICAgIC8vIE1hcmtzIGEgZmlsZTovLyBvcmlnaW4gYXMgYmVpbmcgaW4gYSBkb21haW4gZGVmaW5l
ZCBieSBpdHMgcGF0aC4KKyAgICAvLyBGSVhNRSA4MTU3ODogVGhlIG5hbWluZyBvZiB0aGlzIGlz
IGNvbmZ1c2luZy4gRmlsZXMgd2l0aCByZXN0cmljdGVkIGFjY2VzcyB0byBvdGhlciBsb2NhbCBm
aWxlcworICAgIC8vIHN0aWxsIGNhbiBoYXZlIG90aGVyIHByaXZpbGVnZXMgdGhhdCBjYW4gYmUg
cmVtZW1iZXJlZCwgdGhlcmVieSBub3QgbWFraW5nIHRoZW0gdW5pcXVlLgorICAgIHZvaWQgZW5m
b3JjZUZpbGVQYXRoU2VwYXJhdGlvbigpOworCisgICAgLy8gQ29udmVydCB0aGlzIFNlY3VyaXR5
T3JpZ2luIGludG8gYSBzdHJpbmcuIFRoZSBzdHJpbmcKKyAgICAvLyByZXByZXNlbnRhdGlvbiBv
ZiBhIFNlY3VyaXR5T3JpZ2luIGlzIHNpbWlsYXIgdG8gYSBVUkwsIGV4Y2VwdCBpdAorICAgIC8v
IGxhY2tzIGEgcGF0aCBjb21wb25lbnQuIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZG9lcyBu
b3QgZW5jb2RlCisgICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBTZWN1cml0eU9yaWdpbidzIGRvbWFp
biBwcm9wZXJ0eS4KKyAgICAvLworICAgIC8vIFdoZW4gdXNpbmcgdGhlIHN0cmluZyB2YWx1ZSwg
aXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBpdCBtaWdodCBiZQorICAgIC8vICJudWxs
Ii4gVGhpcyBoYXBwZW5zIHdoZW4gdGhpcyBTZWN1cml0eU9yaWdpbiBpcyB1bmlxdWUuIEZvciBl
eGFtcGxlLAorICAgIC8vIHRoaXMgU2VjdXJpdHlPcmlnaW4gbWlnaHQgaGF2ZSBjb21lIGZyb20g
YSBzYW5kYm94ZWQgaWZyYW1lLCB0aGUKKyAgICAvLyBTZWN1cml0eU9yaWdpbiBtaWdodCBiZSBl
bXB0eSwgb3Igd2UgbWlnaHQgaGF2ZSBleHBsaWNpdGx5IGRlY2lkZWQgdGhhdAorICAgIC8vIHdl
IHNob3VsZFRyZWF0VVJMU2NoZW1lQXNOb0FjY2Vzcy4KKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdG9TdHJpbmcoKSBjb25zdDsKKworICAgIC8vIFNpbWlsYXIgdG8gdG9TdHJpbmcoKSwgYnV0
IGRvZXMgbm90IHRha2UgaW50byBhY2NvdW50IGFueSBmYWN0b3JzIHRoYXQKKyAgICAvLyBjb3Vs
ZCBtYWtlIHRoZSBzdHJpbmcgcmV0dXJuICJudWxsIi4KKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgdG9SYXdTdHJpbmcoKSBjb25zdDsKKworICAgIC8vIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3Ig
ZXF1YWxpdHkgYmV0d2VlbiBTZWN1cml0eU9yaWdpbnMsIG5vdCB3aGV0aGVyCisgICAgLy8gb25l
IG9yaWdpbiBjYW4gYWNjZXNzIGFub3RoZXIuIEl0IGlzIHVzZWQgZm9yIGhhc2ggdGFibGUga2V5
cy4KKyAgICAvLyBGb3IgYWNjZXNzIGNoZWNrcywgdXNlIGNhbkFjY2VzcygpLgorICAgIC8vIEZJ
WE1FOiBJZiB0aGlzIG1ldGhvZCBpcyByZWFsbHkgb25seSB1c2VmdWwgZm9yIGhhc2ggdGFibGUg
a2V5cywgaXQKKyAgICAvLyBzaG91bGQgYmUgcmVmYWN0b3JlZCBpbnRvIFNlY3VyaXR5T3JpZ2lu
SGFzaC4KKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIGVxdWFsKGNvbnN0IFNlY3VyaXR5T3JpZ2lu
KikgY29uc3Q7CisKKyAgICAvLyBUaGlzIG1ldGhvZCBjaGVja3MgZm9yIGVxdWFsaXR5LCBpZ25v
cmluZyB0aGUgdmFsdWUgb2YgZG9jdW1lbnQuZG9tYWluCisgICAgLy8gKGFuZCB3aGV0aGVyIGl0
IHdhcyBzZXQpIGJ1dCBjb25zaWRlcmluZyB0aGUgaG9zdC4gSXQgaXMgdXNlZCBmb3IgcG9zdE1l
c3NhZ2UuCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1NhbWVTY2hlbWVIb3N0UG9ydChjb25z
dCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0OworCisgICAgLy8gVGhpcyBtZXRob2QgaW1wbGVtZW50
cyB0aGUgInNhbWUgb3JpZ2luIiBhbGdvcml0aG0gZnJvbSB0aGUgSFRNTCBTdGFuZGFyZDoKKyAg
ICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9icm93c2Vycy5odG1s
I3NhbWUtb3JpZ2luCisgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1NhbWVPcmlnaW5Bcyhjb25z
dCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0OworCisgICAgc3RhdGljIFVSTCB1cmxXaXRoVW5pcXVl
U2VjdXJpdHlPcmlnaW4oKTsKKworICAgIGJvb2wgaXNQb3RlbnRpYWxseVRydXN0d29ydGh5KCkg
Y29uc3QgeyByZXR1cm4gbV9pc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHk7IH0KKworICAgIHN0YXRp
YyBib29sIGlzTG9jYWxIb3N0T3JMb29wYmFja0lQQWRkcmVzcyhjb25zdCBVUkwmKTsKKworcHJp
dmF0ZToKKyAgICBTZWN1cml0eU9yaWdpbigpOworICAgIGV4cGxpY2l0IFNlY3VyaXR5T3JpZ2lu
KGNvbnN0IFVSTCYpOworICAgIGV4cGxpY2l0IFNlY3VyaXR5T3JpZ2luKGNvbnN0IFNlY3VyaXR5
T3JpZ2luKik7CisKKyAgICAvLyBGSVhNRTogUmVuYW1lIHRoaXMgZnVuY3Rpb24gdG8gc29tZXRo
aW5nIG1vcmUgc2VtYW50aWMuCisgICAgYm9vbCBwYXNzZXNGaWxlQ2hlY2soY29uc3QgU2VjdXJp
dHlPcmlnaW4mKSBjb25zdDsKKworICAgIC8vIFRoaXMgbWV0aG9kIGNoZWNrcyB0aGF0IHRoZSBz
Y2hlbWUgZm9yIHRoaXMgb3JpZ2luIGlzIGFuIEhUVFAtZmFtaWx5CisgICAgLy8gc2NoZW1lLCBl
LmcuIEhUVFAgYW5kIEhUVFBTLgorICAgIGJvb2wgaXNIVFRQRmFtaWx5KCkgY29uc3QgeyByZXR1
cm4gbV9wcm90b2NvbCA9PSAiaHR0cCIgfHwgbV9wcm90b2NvbCA9PSAiaHR0cHMiOyB9CisgICAg
CisgICAgZW51bSBTaG91bGRBbGxvd0Zyb21UaGlyZFBhcnR5IHsgQWx3YXlzQWxsb3dGcm9tVGhp
cmRQYXJ0eSwgTWF5YmVBbGxvd0Zyb21UaGlyZFBhcnR5IH07CisgICAgV0VCQ09SRV9FWFBPUlQg
Ym9vbCBjYW5BY2Nlc3NTdG9yYWdlKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiwgU2hvdWxkQWxsb3dG
cm9tVGhpcmRQYXJ0eSA9IE1heWJlQWxsb3dGcm9tVGhpcmRQYXJ0eSkgY29uc3Q7CisKKyAgICBT
dHJpbmcgbV9wcm90b2NvbDsKKyAgICBTdHJpbmcgbV9ob3N0OworICAgIFN0cmluZyBtX2RvbWFp
bjsKKyAgICBTdHJpbmcgbV9maWxlUGF0aDsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQxNl90PiBt
X3BvcnQ7CisgICAgYm9vbCBtX2lzVW5pcXVlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fdW5pdmVy
c2FsQWNjZXNzIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZG9tYWluV2FzU2V0SW5ET00geyBmYWxz
ZSB9OworICAgIGJvb2wgbV9jYW5Mb2FkTG9jYWxSZXNvdXJjZXMgeyBmYWxzZSB9OworICAgIFN0
b3JhZ2VCbG9ja2luZ1BvbGljeSBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSB7IEFsbG93QWxsU3Rv
cmFnZSB9OworICAgIGJvb2wgbV9lbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fbmVlZHNTdG9yYWdlQWNjZXNzRnJvbUZpbGVVUkxzUXVpcmsgeyBmYWxzZSB9
OworICAgIGJvb2wgbV9pc1BvdGVudGlhbGx5VHJ1c3R3b3J0aHkgeyBmYWxzZSB9OworfTsKKwor
Ym9vbCBzaG91bGRUcmVhdEFzUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjb25zdCBVUkwmKTsKKwor
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBPcmlnaW4gaGVhZGVyIHZhbHVlcyBzZXJpYWxpemVkIGZy
b20gdGhlc2UgdHdvIG9yaWdpbnMgd291bGQgYmUgdGhlIHNhbWUuCitib29sIG9yaWdpbnNNYXRj
aChjb25zdCBTZWN1cml0eU9yaWdpbiYsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJik7Citib29sIG9y
aWdpbnNNYXRjaChjb25zdCBTZWN1cml0eU9yaWdpbiosIGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1N0b3JhZ2VCbG9ja2luZ1BvbGljeS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3RvcmFnZUJsb2NraW5nUG9saWN5LmgJKHJl
dmlzaW9uIDIyMjcwMykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU3RvcmFnZUJsb2NraW5nUG9s
aWN5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDIxNiArMjgsMTIgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBVUkw7Ci0K
LWNsYXNzIFNlY3VyaXR5T3JpZ2luIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNlY3Vy
aXR5T3JpZ2luPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBQb2xpY3kgewotICAgICAgICBBbHdheXNE
ZW55ID0gMCwKLSAgICAgICAgQWx3YXlzQWxsb3csCi0gICAgICAgIEFzawotICAgIH07Ci0KLSAg
ICBlbnVtIFN0b3JhZ2VCbG9ja2luZ1BvbGljeSB7Ci0gICAgICAgIEFsbG93QWxsU3RvcmFnZSA9
IDAsCi0gICAgICAgIEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UsCi0gICAgICAgIEJsb2NrQWxsU3Rv
cmFnZQotICAgIH07Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFNlY3VyaXR5T3Jp
Z2luPiBjcmVhdGUoY29uc3QgVVJMJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxT
ZWN1cml0eU9yaWdpbj4gY3JlYXRlVW5pcXVlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgUmVmPFNlY3VyaXR5T3JpZ2luPiBjcmVhdGVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8U2VjdXJpdHlPcmlnaW4+IGNyZWF0ZShjb25z
dCBTdHJpbmcmIHByb3RvY29sLCBjb25zdCBTdHJpbmcmIGhvc3QsIHN0ZDo6b3B0aW9uYWw8dWlu
dDE2X3Q+IHBvcnQpOwotCi0gICAgLy8gU29tZSBVUkwgc2NoZW1lcyB1c2UgbmVzdGVkIFVSTHMg
Zm9yIHRoZWlyIHNlY3VyaXR5IGNvbnRleHQuIEZvciBleGFtcGxlLAotICAgIC8vIGZpbGVzeXN0
ZW0gVVJMcyBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKLSAgICAvLwotICAgIC8vICAgZmlsZXN5
c3RlbTpodHRwOi8vZXhhbXBsZS5jb20vdGVtcG9yYXJ5L3BhdGgvdG8vZmlsZS5wbmcKLSAgICAv
LwotICAgIC8vIFdlJ3JlIHN1cHBvc2VkIHRvIHVzZSAiaHR0cDovL2V4YW1wbGUuY29tIiBhcyB0
aGUgb3JpZ2luLgotICAgIC8vCi0gICAgLy8gR2VuZXJhbGx5LCB3ZSBhZGQgVVJMIHNjaGVtZXMg
dG8gdGhpcyBsaXN0IHdoZW4gV2ViS2l0IHN1cHBvcnQgdGhlbS4gRm9yCi0gICAgLy8gZXhhbXBs
ZSwgd2UgZG9uJ3QgaW5jbHVkZSB0aGUgImphciIgc2NoZW1lLCBldmVuIHRob3VnaCBGaXJlZm94
Ci0gICAgLy8gdW5kZXJzdGFuZHMgdGhhdCAiamFyIiB1c2VzIGFuIGlubmVyIFVSTCBmb3IgaXQn
cyBzZWN1cml0eSBvcmlnaW4uCi0gICAgc3RhdGljIGJvb2wgc2hvdWxkVXNlSW5uZXJVUkwoY29u
c3QgVVJMJik7Ci0gICAgc3RhdGljIFVSTCBleHRyYWN0SW5uZXJVUkwoY29uc3QgVVJMJik7Ci0K
LSAgICAvLyBDcmVhdGUgYSBkZWVwIGNvcHkgb2YgdGhpcyBTZWN1cml0eU9yaWdpbi4gVGhpcyBt
ZXRob2QgaXMgdXNlZnVsCi0gICAgLy8gd2hlbiBtYXJzaGFsbGluZyBhIFNlY3VyaXR5T3JpZ2lu
IHRvIGFub3RoZXIgdGhyZWFkLgotICAgIFdFQkNPUkVfRVhQT1JUIFJlZjxTZWN1cml0eU9yaWdp
bj4gaXNvbGF0ZWRDb3B5KCkgY29uc3Q7Ci0KLSAgICAvLyBTZXQgdGhlIGRvbWFpbiBwcm9wZXJ0
eSBvZiB0aGlzIHNlY3VyaXR5IG9yaWdpbiB0byBuZXdEb21haW4uIFRoaXMKLSAgICAvLyBmdW5j
dGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIG5ld0RvbWFpbiBpcyBhIHN1ZmZpeCBvZiB0aGUg
Y3VycmVudAotICAgIC8vIGRvbWFpbi4gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdmFs
aWRhdGluZyBuZXdEb21haW4uCi0gICAgdm9pZCBzZXREb21haW5Gcm9tRE9NKGNvbnN0IFN0cmlu
ZyYgbmV3RG9tYWluKTsKLSAgICBib29sIGRvbWFpbldhc1NldEluRE9NKCkgY29uc3QgeyByZXR1
cm4gbV9kb21haW5XYXNTZXRJbkRPTTsgfQotCi0gICAgY29uc3QgU3RyaW5nJiBwcm90b2NvbCgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvdG9jb2w7IH0KLSAgICBjb25zdCBTdHJpbmcmIGhvc3QoKSBj
b25zdCB7IHJldHVybiBtX2hvc3Q7IH0KLSAgICBjb25zdCBTdHJpbmcmIGRvbWFpbigpIGNvbnN0
IHsgcmV0dXJuIG1fZG9tYWluOyB9Ci0gICAgc3RkOjpvcHRpb25hbDx1aW50MTZfdD4gcG9ydCgp
IGNvbnN0IHsgcmV0dXJuIG1fcG9ydDsgfQotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIGEgZ2l2
ZW4gVVJMIGlzIHNlY3VyZSwgYmFzZWQgZWl0aGVyIGRpcmVjdGx5IG9uIGl0cwotICAgIC8vIG93
biBwcm90b2NvbCwgb3IsIHdoZW4gcmVsZXZhbnQsIG9uIHRoZSBwcm90b2NvbCBvZiBpdHMgImlu
bmVyIFVSTCIKLSAgICAvLyBQcm90b2NvbHMgbGlrZSBibG9iOiBhbmQgZmlsZXN5c3RlbTogZmFs
bCBpbnRvIHRoaXMgbGF0dGVyIGNhdGVnb3J5LgotICAgIHN0YXRpYyBib29sIGlzU2VjdXJlKGNv
bnN0IFVSTCYpOwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgU2VjdXJpdHlPcmlnaW4g
Y2FuIHNjcmlwdCBvYmplY3RzIGluIHRoZSBnaXZlbgotICAgIC8vIFNlY3VyaXR5T3JpZ2luLiBG
b3IgZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhbGxvd2luZwotICAgIC8vIHNj
cmlwdCBmcm9tIG9uZSBzZWN1cml0eSBvcmlnaW4gdG8gcmVhZCBvciB3cml0ZSBvYmplY3RzIGZy
b20KLSAgICAvLyBhbm90aGVyIFNlY3VyaXR5T3JpZ2luLgotICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgY2FuQWNjZXNzKGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Q7Ci0KLSAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhpcyBTZWN1cml0eU9yaWdpbiBjYW4gcmVhZCBjb250ZW50IHJldHJpZXZl
ZCBmcm9tCi0gICAgLy8gdGhlIGdpdmVuIFVSTC4gRm9yIGV4YW1wbGUsIGNhbGwgdGhpcyBmdW5j
dGlvbiBiZWZvcmUgaXNzdWluZwotICAgIC8vIFhNTEh0dHBSZXF1ZXN0cy4KLSAgICBXRUJDT1JF
X0VYUE9SVCBib29sIGNhblJlcXVlc3QoY29uc3QgVVJMJikgY29uc3Q7Ci0KLSAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhpcyBTZWN1cml0eU9yaWdpbiBjYW4gcmVjZWl2ZSBkcmFnIGNvbnRlbnQg
ZnJvbSB0aGUKLSAgICAvLyBpbml0aWF0b3IuIEZvciBleGFtcGxlLCBjYWxsIHRoaXMgZnVuY3Rp
b24gYmVmb3JlIGFsbG93aW5nIGNvbnRlbnQgdG8gYmUKLSAgICAvLyBkcm9wcGVkIG9udG8gYSB0
YXJnZXQuCi0gICAgYm9vbCBjYW5SZWNlaXZlRHJhZ0RhdGEoY29uc3QgU2VjdXJpdHlPcmlnaW4m
IGRyYWdJbml0aWF0b3IpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHxkb2N1bWVu
dHwgY2FuIGRpc3BsYXkgY29udGVudCBmcm9tIHRoZSBnaXZlbiBVUkwgKGUuZy4sCi0gICAgLy8g
aW4gYW4gaWZyYW1lIG9yIGFzIGFuIGltYWdlKS4gRm9yIGV4YW1wbGUsIHdlYiBzaXRlcyBnZW5l
cmFsbHkgY2Fubm90Ci0gICAgLy8gZGlzcGxheSBjb250ZW50IGZyb20gdGhlIHVzZXIncyBmaWxl
cyBzeXN0ZW0uCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBjYW5EaXNwbGF5KGNvbnN0IFVSTCYp
IGNvbnN0OwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgU2VjdXJpdHlPcmlnaW4gY2Fu
IGxvYWQgbG9jYWwgcmVzb3VyY2VzLCBzdWNoCi0gICAgLy8gYXMgaW1hZ2VzLCBpZnJhbWVzLCBh
bmQgc3R5bGUgc2hlZXRzLCBhbmQgY2FuIGxpbmsgdG8gbG9jYWwgVVJMcy4KLSAgICAvLyBGb3Ig
ZXhhbXBsZSwgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjcmVhdGluZyBhbiBpZnJhbWUgdG8g
YQotICAgIC8vIGZpbGU6Ly8gVVJMLgotICAgIC8vCi0gICAgLy8gTm90ZTogQSBTZWN1cml0eU9y
aWdpbiBtaWdodCBiZSBhbGxvd2VkIHRvIGxvYWQgbG9jYWwgcmVzb3VyY2VzCi0gICAgLy8gICAg
ICAgd2l0aG91dCBiZWluZyBhYmxlIHRvIGlzc3VlIGFuIFhNTEh0dHBSZXF1ZXN0IGZvciBhIGxv
Y2FsIFVSTC4KLSAgICAvLyAgICAgICBUbyBkZXRlcm1pbmUgd2hldGhlciB0aGUgU2VjdXJpdHlP
cmlnaW4gY2FuIGlzc3VlIGFuCi0gICAgLy8gICAgICAgWE1MSHR0cFJlcXVlc3QgZm9yIGEgVVJM
LCBjYWxsIGNhblJlcXVlc3QodXJsKS4KLSAgICBib29sIGNhbkxvYWRMb2NhbFJlc291cmNlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY2FuTG9hZExvY2FsUmVzb3VyY2VzOyB9Ci0KLSAgICAvLyBFeHBs
aWNpdGx5IGdyYW50IHRoZSBhYmlsaXR5IHRvIGxvYWQgbG9jYWwgcmVzb3VyY2VzIHRvIHRoaXMK
LSAgICAvLyBTZWN1cml0eU9yaWdpbi4KLSAgICAvLwotICAgIC8vIE5vdGU6IFRoaXMgbWV0aG9k
IGV4aXN0cyBvbmx5IHRvIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKLSAgICAvLyAg
ICAgICB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFdlYktpdC4KLSAgICB2b2lkIGdyYW50TG9hZExv
Y2FsUmVzb3VyY2VzKCk7Ci0KLSAgICAvLyBFeHBsaWNpdGx5IGdyYW50IHRoZSBhYmlsaXR5IHRv
IGFjY2VzcyB2ZXJ5IG90aGVyIFNlY3VyaXR5T3JpZ2luLgotICAgIC8vCi0gICAgLy8gV0FSTklO
RzogVGhpcyBpcyBhbiBleHRyZW1lbHkgcG93ZXJmdWwgYWJpbGl0eS4gVXNlIHdpdGggY2F1dGlv
biEKLSAgICB2b2lkIGdyYW50VW5pdmVyc2FsQWNjZXNzKCk7Ci0gICAgYm9vbCBoYXNVbml2ZXJz
YWxBY2Nlc3MoKSBjb25zdCB7IHJldHVybiBtX3VuaXZlcnNhbEFjY2VzczsgfQotCi0gICAgdm9p
ZCBzZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koU3RvcmFnZUJsb2NraW5nUG9saWN5IHBvbGljeSkg
eyBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9IHBvbGljeTsgfQotCi0gICAgdm9pZCBncmFudFN0
b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNRdWlyaygpOwotICAgIGJvb2wgbmVlZHNTdG9yYWdlQWNj
ZXNzRnJvbUZpbGVVUkxzUXVpcmsoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU3RvcmFnZUFjY2Vz
c0Zyb21GaWxlVVJMc1F1aXJrOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZG9tYWlu
Rm9yQ2FjaGVQYXJ0aXRpb24oKSBjb25zdDsKLQotICAgIGJvb2wgY2FuQWNjZXNzRGF0YWJhc2Uo
Y29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdpbikgY29uc3QgeyByZXR1cm4gY2FuQWNjZXNz
U3RvcmFnZSgmdG9wT3JpZ2luKTsgfTsKLSAgICBib29sIGNhbkFjY2Vzc1Nlc3Npb25TdG9yYWdl
KGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4pIGNvbnN0IHsgcmV0dXJuIGNhbkFjY2Vz
c1N0b3JhZ2UoJnRvcE9yaWdpbiwgQWx3YXlzQWxsb3dGcm9tVGhpcmRQYXJ0eSk7IH0KLSAgICBi
b29sIGNhbkFjY2Vzc0xvY2FsU3RvcmFnZShjb25zdCBTZWN1cml0eU9yaWdpbiogdG9wT3JpZ2lu
KSBjb25zdCB7IHJldHVybiBjYW5BY2Nlc3NTdG9yYWdlKHRvcE9yaWdpbik7IH07Ci0gICAgYm9v
bCBjYW5BY2Nlc3NQbHVnaW5TdG9yYWdlKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiB0b3BPcmlnaW4p
IGNvbnN0IHsgcmV0dXJuIGNhbkFjY2Vzc1N0b3JhZ2UoJnRvcE9yaWdpbik7IH0KLSAgICBib29s
IGNhbkFjY2Vzc0FwcGxpY2F0aW9uQ2FjaGUoY29uc3QgU2VjdXJpdHlPcmlnaW4mIHRvcE9yaWdp
bikgY29uc3QgeyByZXR1cm4gY2FuQWNjZXNzU3RvcmFnZSgmdG9wT3JpZ2luKTsgfQotICAgIGJv
b2wgY2FuQWNjZXNzQ29va2llcygpIGNvbnN0IHsgcmV0dXJuICFpc1VuaXF1ZSgpOyB9Ci0gICAg
Ym9vbCBjYW5SZXF1ZXN0R2VvbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiAhaXNVbmlxdWUoKTsg
fQotICAgIFBvbGljeSBjYW5TaG93Tm90aWZpY2F0aW9ucygpIGNvbnN0OwotCi0gICAgLy8gVGhl
IGxvY2FsIFNlY3VyaXR5T3JpZ2luIGlzIHRoZSBtb3N0IHByaXZpbGVnZWQgU2VjdXJpdHlPcmln
aW4uCi0gICAgLy8gVGhlIGxvY2FsIFNlY3VyaXR5T3JpZ2luIGNhbiBzY3JpcHQgYW55IGRvY3Vt
ZW50LCBuYXZpZ2F0ZSB0byBsb2NhbAotICAgIC8vIHJlc291cmNlcywgYW5kIGNhbiBzZXQgYXJi
aXRyYXJ5IGhlYWRlcnMgb24gWE1MSHR0cFJlcXVlc3RzLgotICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgaXNMb2NhbCgpIGNvbnN0OwotCi0gICAgLy8gVGhlIG9yaWdpbiBpcyBhIGdsb2JhbGx5IHVu
aXF1ZSBpZGVudGlmaWVyIGFzc2lnbmVkIHdoZW4gdGhlIERvY3VtZW50IGlzCi0gICAgLy8gY3Jl
YXRlZC4gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay8j
c2FuZGJveE9yaWdpbgotICAgIC8vCi0gICAgLy8gVGhlcmUncyBhIHN1YnRsZSBkaWZmZXJlbmNl
IGJldHdlZW4gYSB1bmlxdWUgb3JpZ2luIGFuZCBhbiBvcmlnaW4gdGhhdAotICAgIC8vIGhhcyB0
aGUgU2FuZGJveE9yaWdpbiBmbGFnIHNldC4gVGhlIGxhdHRlciBpbXBsaWVzIHRoZSBmb3JtZXIs
IGFuZCwgaW4KLSAgICAvLyBhZGRpdGlvbiwgdGhlIFNhbmRib3hPcmlnaW4gZmxhZyBpcyBpbmhl
cml0ZWQgYnkgaWZyYW1lcy4KLSAgICBib29sIGlzVW5pcXVlKCkgY29uc3QgeyByZXR1cm4gbV9p
c1VuaXF1ZTsgfQotCi0gICAgLy8gTWFya3MgYSBmaWxlOi8vIG9yaWdpbiBhcyBiZWluZyBpbiBh
IGRvbWFpbiBkZWZpbmVkIGJ5IGl0cyBwYXRoLgotICAgIC8vIEZJWE1FIDgxNTc4OiBUaGUgbmFt
aW5nIG9mIHRoaXMgaXMgY29uZnVzaW5nLiBGaWxlcyB3aXRoIHJlc3RyaWN0ZWQgYWNjZXNzIHRv
IG90aGVyIGxvY2FsIGZpbGVzCi0gICAgLy8gc3RpbGwgY2FuIGhhdmUgb3RoZXIgcHJpdmlsZWdl
cyB0aGF0IGNhbiBiZSByZW1lbWJlcmVkLCB0aGVyZWJ5IG5vdCBtYWtpbmcgdGhlbSB1bmlxdWUu
Ci0gICAgdm9pZCBlbmZvcmNlRmlsZVBhdGhTZXBhcmF0aW9uKCk7Ci0KLSAgICAvLyBDb252ZXJ0
IHRoaXMgU2VjdXJpdHlPcmlnaW4gaW50byBhIHN0cmluZy4gVGhlIHN0cmluZwotICAgIC8vIHJl
cHJlc2VudGF0aW9uIG9mIGEgU2VjdXJpdHlPcmlnaW4gaXMgc2ltaWxhciB0byBhIFVSTCwgZXhj
ZXB0IGl0Ci0gICAgLy8gbGFja3MgYSBwYXRoIGNvbXBvbmVudC4gVGhlIHN0cmluZyByZXByZXNl
bnRhdGlvbiBkb2VzIG5vdCBlbmNvZGUKLSAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIFNlY3VyaXR5
T3JpZ2luJ3MgZG9tYWluIHByb3BlcnR5LgotICAgIC8vCi0gICAgLy8gV2hlbiB1c2luZyB0aGUg
c3RyaW5nIHZhbHVlLCBpdCdzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IGl0IG1pZ2h0IGJl
Ci0gICAgLy8gIm51bGwiLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGlzIFNlY3VyaXR5T3JpZ2luIGlz
IHVuaXF1ZS4gRm9yIGV4YW1wbGUsCi0gICAgLy8gdGhpcyBTZWN1cml0eU9yaWdpbiBtaWdodCBo
YXZlIGNvbWUgZnJvbSBhIHNhbmRib3hlZCBpZnJhbWUsIHRoZQotICAgIC8vIFNlY3VyaXR5T3Jp
Z2luIG1pZ2h0IGJlIGVtcHR5LCBvciB3ZSBtaWdodCBoYXZlIGV4cGxpY2l0bHkgZGVjaWRlZCB0
aGF0Ci0gICAgLy8gd2Ugc2hvdWxkVHJlYXRVUkxTY2hlbWVBc05vQWNjZXNzLgotICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwotCi0gICAgLy8gU2ltaWxhciB0byB0
b1N0cmluZygpLCBidXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgYW55IGZhY3RvcnMgdGhh
dAotICAgIC8vIGNvdWxkIG1ha2UgdGhlIHN0cmluZyByZXR1cm4gIm51bGwiLgotICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyB0b1Jhd1N0cmluZygpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBtZXRo
b2QgY2hlY2tzIGZvciBlcXVhbGl0eSBiZXR3ZWVuIFNlY3VyaXR5T3JpZ2lucywgbm90IHdoZXRo
ZXIKLSAgICAvLyBvbmUgb3JpZ2luIGNhbiBhY2Nlc3MgYW5vdGhlci4gSXQgaXMgdXNlZCBmb3Ig
aGFzaCB0YWJsZSBrZXlzLgotICAgIC8vIEZvciBhY2Nlc3MgY2hlY2tzLCB1c2UgY2FuQWNjZXNz
KCkuCi0gICAgLy8gRklYTUU6IElmIHRoaXMgbWV0aG9kIGlzIHJlYWxseSBvbmx5IHVzZWZ1bCBm
b3IgaGFzaCB0YWJsZSBrZXlzLCBpdAotICAgIC8vIHNob3VsZCBiZSByZWZhY3RvcmVkIGludG8g
U2VjdXJpdHlPcmlnaW5IYXNoLgotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgZXF1YWwoY29uc3Qg
U2VjdXJpdHlPcmlnaW4qKSBjb25zdDsKLQotICAgIC8vIFRoaXMgbWV0aG9kIGNoZWNrcyBmb3Ig
ZXF1YWxpdHksIGlnbm9yaW5nIHRoZSB2YWx1ZSBvZiBkb2N1bWVudC5kb21haW4KLSAgICAvLyAo
YW5kIHdoZXRoZXIgaXQgd2FzIHNldCkgYnV0IGNvbnNpZGVyaW5nIHRoZSBob3N0LiBJdCBpcyB1
c2VkIGZvciBwb3N0TWVzc2FnZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzU2FtZVNjaGVt
ZUhvc3RQb3J0KGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIG1l
dGhvZCBpbXBsZW1lbnRzIHRoZSAic2FtZSBvcmlnaW4iIGFsZ29yaXRobSBmcm9tIHRoZSBIVE1M
IFN0YW5kYXJkOgotICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdl
L2Jyb3dzZXJzLmh0bWwjc2FtZS1vcmlnaW4KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzU2Ft
ZU9yaWdpbkFzKGNvbnN0IFNlY3VyaXR5T3JpZ2luJikgY29uc3Q7Ci0KLSAgICBzdGF0aWMgVVJM
IHVybFdpdGhVbmlxdWVTZWN1cml0eU9yaWdpbigpOwotCi0gICAgYm9vbCBpc1BvdGVudGlhbGx5
VHJ1c3R3b3J0aHkoKSBjb25zdCB7IHJldHVybiBtX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeTsg
fQotCi0gICAgc3RhdGljIGJvb2wgaXNMb2NhbEhvc3RPckxvb3BiYWNrSVBBZGRyZXNzKGNvbnN0
IFVSTCYpOwotCi1wcml2YXRlOgotICAgIFNlY3VyaXR5T3JpZ2luKCk7Ci0gICAgZXhwbGljaXQg
U2VjdXJpdHlPcmlnaW4oY29uc3QgVVJMJik7Ci0gICAgZXhwbGljaXQgU2VjdXJpdHlPcmlnaW4o
Y29uc3QgU2VjdXJpdHlPcmlnaW4qKTsKLQotICAgIC8vIEZJWE1FOiBSZW5hbWUgdGhpcyBmdW5j
dGlvbiB0byBzb21ldGhpbmcgbW9yZSBzZW1hbnRpYy4KLSAgICBib29sIHBhc3Nlc0ZpbGVDaGVj
ayhjb25zdCBTZWN1cml0eU9yaWdpbiYpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBtZXRob2QgY2hl
Y2tzIHRoYXQgdGhlIHNjaGVtZSBmb3IgdGhpcyBvcmlnaW4gaXMgYW4gSFRUUC1mYW1pbHkKLSAg
ICAvLyBzY2hlbWUsIGUuZy4gSFRUUCBhbmQgSFRUUFMuCi0gICAgYm9vbCBpc0hUVFBGYW1pbHko
KSBjb25zdCB7IHJldHVybiBtX3Byb3RvY29sID09ICJodHRwIiB8fCBtX3Byb3RvY29sID09ICJo
dHRwcyI7IH0KLSAgICAKLSAgICBlbnVtIFNob3VsZEFsbG93RnJvbVRoaXJkUGFydHkgeyBBbHdh
eXNBbGxvd0Zyb21UaGlyZFBhcnR5LCBNYXliZUFsbG93RnJvbVRoaXJkUGFydHkgfTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoY29uc3QgU2VjdXJpdHlPcmlnaW4q
LCBTaG91bGRBbGxvd0Zyb21UaGlyZFBhcnR5ID0gTWF5YmVBbGxvd0Zyb21UaGlyZFBhcnR5KSBj
b25zdDsKLQotICAgIFN0cmluZyBtX3Byb3RvY29sOwotICAgIFN0cmluZyBtX2hvc3Q7Ci0gICAg
U3RyaW5nIG1fZG9tYWluOwotICAgIFN0cmluZyBtX2ZpbGVQYXRoOwotICAgIHN0ZDo6b3B0aW9u
YWw8dWludDE2X3Q+IG1fcG9ydDsKLSAgICBib29sIG1faXNVbmlxdWUgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV91bml2ZXJzYWxBY2Nlc3MgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9kb21haW5XYXNT
ZXRJbkRPTSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2NhbkxvYWRMb2NhbFJlc291cmNlcyB7IGZh
bHNlIH07Ci0gICAgU3RvcmFnZUJsb2NraW5nUG9saWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5
IHsgQWxsb3dBbGxTdG9yYWdlIH07Ci0gICAgYm9vbCBtX2VuZm9yY2VGaWxlUGF0aFNlcGFyYXRp
b24geyBmYWxzZSB9OwotICAgIGJvb2wgbV9uZWVkc1N0b3JhZ2VBY2Nlc3NGcm9tRmlsZVVSTHNR
dWlyayB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2lzUG90ZW50aWFsbHlUcnVzdHdvcnRoeSB7IGZh
bHNlIH07CitlbnVtIFN0b3JhZ2VCbG9ja2luZ1BvbGljeSB7CisgICAgQWxsb3dBbGxTdG9yYWdl
LAorICAgIEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UsCisgICAgQmxvY2tBbGxTdG9yYWdlCiB9Owog
Ci1ib29sIHNob3VsZFRyZWF0QXNQb3RlbnRpYWxseVRydXN0d29ydGh5KGNvbnN0IFVSTCYpOwot
Ci0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIE9yaWdpbiBoZWFkZXIgdmFsdWVzIHNlcmlhbGl6ZWQg
ZnJvbSB0aGVzZSB0d28gb3JpZ2lucyB3b3VsZCBiZSB0aGUgc2FtZS4KLWJvb2wgb3JpZ2luc01h
dGNoKGNvbnN0IFNlY3VyaXR5T3JpZ2luJiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mKTsKLWJvb2wg
b3JpZ2luc01hdGNoKGNvbnN0IFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU2VjdXJpdHlPcmlnaW4q
KTsKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9j
b2NvYS9TZXR0aW5nc0Jhc2VDb2NvYS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1tCShyZXZpc2lvbiAyMjI3NjYpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NDb2NvYS5tbToyMjI3NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisKKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHNhbnNTZXJp
ZlRyYWRpdGlvbmFsSGFuRm9udEZhbWlseSgpCit7CisgICAgcmV0dXJuICJQaW5nRmFuZyBUQyI7
Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZv
bnRGYW1pbHkoKQoreworICAgIHJldHVybiAiUGluZ0ZhbmcgU0MiOworfQorCisjaWYgUExBVEZP
Uk0oTUFDKQorCitzdGF0aWMgYm9vbCBvc2FrYU1vbm9Jc0luc3RhbGxlZCgpCit7CisgICAgaW50
IG9uZSA9IDE7CisgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiB5ZXMgPSBhZG9wdENGKENGTnVt
YmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckludFR5cGUsICZvbmUpKTsK
KyAgICBDRlR5cGVSZWYga2V5c1tdID0geyBrQ1RGb250RW5hYmxlZEF0dHJpYnV0ZSwga0NURm9u
dE5hbWVBdHRyaWJ1dGUgfTsKKyAgICBDRlR5cGVSZWYgdmFsdWVzW10gPSB7IHllcy5nZXQoKSwg
Q0ZTVFIoIk9zYWthLU1vbm8iKSB9OworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGF0
dHJpYnV0ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCBrZXlzLCB2YWx1ZXMsIFdURl9BUlJBWV9MRU5HVEgodmFsdWVzKSwgJmtDRlR5cGVEaWN0aW9u
YXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAg
IFJldGFpblB0cjxDVEZvbnREZXNjcmlwdG9yUmVmPiBkZXNjcmlwdG9yID0gYWRvcHRDRihDVEZv
bnREZXNjcmlwdG9yQ3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcy5nZXQoKSkpOworICAg
IFJldGFpblB0cjxDRlNldFJlZj4gbWFuZGF0b3J5QXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZTZXRD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgV1RGX0FSUkFZX0xFTkdUSChrZXlzKSwg
JmtDRlR5cGVTZXRDYWxsQmFja3MpKTsKKyAgICByZXR1cm4gYWRvcHRDRihDVEZvbnREZXNjcmlw
dG9yQ3JlYXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcihkZXNjcmlwdG9yLmdldCgpLCBtYW5kYXRv
cnlBdHRyaWJ1dGVzLmdldCgpKSk7Cit9CisKK3ZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZh
dWx0Rm9udEZhbWlsaWVzKCkKK3sKKyAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIlNvbmd0aSBU
QyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIlNv
bmd0aSBUQyIsIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1p
bHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9O
QUxfSEFOKTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlvbmFs
SGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisgICAgc2V0Q3Vyc2l2
ZUZvbnRGYW1pbHkoIkthaXRpIFRDIiwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOworCisgICAg
c2V0U3RhbmRhcmRGb250RmFtaWx5KCJTb25ndGkgU0MiLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFO
KTsKKyAgICBzZXRTZXJpZkZvbnRGYW1pbHkoIlNvbmd0aSBTQyIsIFVTQ1JJUFRfU0lNUExJRklF
RF9IQU4pOworICAgIHNldEZpeGVkRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9u
dEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJRURfSEFOKTsKKyAgICBzZXRTYW5zU2VyaWZGb250
RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJ
RklFRF9IQU4pOworICAgIHNldEN1cnNpdmVGb250RmFtaWx5KCJLYWl0aSBTQyIsIFVTQ1JJUFRf
U0lNUExJRklFRF9IQU4pOworCisgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJIaXJhZ2lubyBN
aW5jaG8gUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOworICAgIHNldEZpeGVk
Rm9udEZhbWlseShvc2FrYU1vbm9Jc0luc3RhbGxlZCgpID8gIk9zYWthLU1vbm8iIDogIkhpcmFn
aW5vIFNhbnMiLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKKyAgICBzZXRTZXJpZkZv
bnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJB
R0FOQSk7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiSGlyYWdpbm8gS2FrdSBHb3RoaWMg
UHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOworCisgICAgc2V0U3RhbmRhcmRG
b250RmFtaWx5KCJBcHBsZU15dW5nam8iLCBVU0NSSVBUX0hBTkdVTCk7CisgICAgc2V0U2VyaWZG
b250RmFtaWx5KCJBcHBsZU15dW5nam8iLCBVU0NSSVBUX0hBTkdVTCk7CisgICAgc2V0Rml4ZWRG
b250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOworICAgIHNl
dFNhbnNTZXJpZkZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdV
TCk7CisKKyAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIlRpbWVzIiwgVVNDUklQVF9DT01NT04p
OworICAgIHNldEZpeGVkRm9udEZhbWlseSgiQ291cmllciIsIFVTQ1JJUFRfQ09NTU9OKTsKKyAg
ICBzZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIiwgVVNDUklQVF9DT01NT04pOworICAgIHNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoIkhlbHZldGljYSIsIFVTQ1JJUFRfQ09NTU9OKTsKK30KKworI2Vs
c2UKKwordm9pZCBTZXR0aW5nczo6aW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQorewor
ICAgIC8vIFRoZXJlIGlzIG5vIHNlcmlmIENoaW5lc2UgZm9udCBpbiBkZWZhdWx0IGlPUyBpbnN0
YWxsYXRpb24uCisgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlvbmFs
SGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisgICAgc2V0U2VyaWZG
b250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlvbmFsSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RS
QURJVElPTkFMX0hBTik7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlv
bmFsSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7CisgICAgc2V0U2Fu
c1NlcmlmRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVND
UklQVF9UUkFESVRJT05BTF9IQU4pOworCisgICAgLy8gVGhlcmUgaXMgbm8gc2VyaWYgQ2hpbmVz
ZSBmb250IGluIGRlZmF1bHQgaU9TIGluc3RhbGxhdGlvbi4KKyAgICBzZXRTdGFuZGFyZEZvbnRG
YW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElG
SUVEX0hBTik7CisgICAgc2V0U2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5G
b250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOworICAgIHNldEZpeGVkRm9udEZh
bWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NSSVBUX1NJTVBMSUZJ
RURfSEFOKTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRI
YW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOworCisgICAgc2V0U3RhbmRh
cmRGb250RmFtaWx5KCJIaXJhZ2lubyBNaW5jaG8gUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1Jf
SElSQUdBTkEpOworICAgIHNldEZpeGVkRm9udEZhbWlseSgiSGlyYWdpbm8gS2FrdSBHb3RoaWMg
UHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOworICAgIHNldFNlcmlmRm9udEZh
bWlseSgiSGlyYWdpbm8gTWluY2hvIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5B
KTsKKyAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBLYWt1IEdvdGhpYyBQcm9O
IiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7CisKKyAgICAvLyBUaGVyZSBpcyBubyBz
ZXJpZiBLb3JlYW4gZm9udCBpbiBkZWZhdWx0IGlPUyBpbnN0YWxsYXRpb24uCisgICAgc2V0U3Rh
bmRhcmRGb250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOwor
ICAgIHNldFNlcmlmRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVTQ1JJUFRfSEFO
R1VMKTsKKyAgICBzZXRGaXhlZEZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NS
SVBUX0hBTkdVTCk7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGlj
IE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKKworICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiVGlt
ZXMiLCBVU0NSSVBUX0NPTU1PTik7CisgICAgc2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIiwg
VVNDUklQVF9DT01NT04pOworICAgIHNldFNlcmlmRm9udEZhbWlseSgiVGltZXMiLCBVU0NSSVBU
X0NPTU1PTik7CisgICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiSGVsdmV0aWNhIiwgVVNDUklQ
VF9DT01NT04pOworfQorCisjZW5kaWYKKworY29uc3QgU3RyaW5nJiBTZXR0aW5nczo6ZGVmYXVs
dE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBwb3J0KCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXMgeyAidmlk
ZW8vbXA0O2NvZGVjcz1odmMxOnZpZGVvL21wNDtjb2RlY3M9aGV2MSIgfTsKKyAgICByZXR1cm4g
ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wYWdlL2NvY29hL1NldHRpbmdzQ29j
b2EubW0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMCwwICsxICMjCitMRgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L2NvY29hL1NldHRpbmdzQmFzZUNvY29hLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0JKHJldmlzaW9uIDIyMjc2NikKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NCYXNlQ29jb2EubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJTZXR0aW5nc0Jhc2UuaCIKIAogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogCkBAIC01NCw3ICs1NCw3IEBAIHN0YXRpYyBib29sIG9zYWth
TW9ub0lzSW5zdGFsbGVkKCkKICAgICByZXR1cm4gYWRvcHRDRihDVEZvbnREZXNjcmlwdG9yQ3Jl
YXRlTWF0Y2hpbmdGb250RGVzY3JpcHRvcihkZXNjcmlwdG9yLmdldCgpLCBtYW5kYXRvcnlBdHRy
aWJ1dGVzLmdldCgpKSk7CiB9CiAKLXZvaWQgU2V0dGluZ3M6OmluaXRpYWxpemVEZWZhdWx0Rm9u
dEZhbWlsaWVzKCkKK3ZvaWQgU2V0dGluZ3NCYXNlOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1p
bGllcygpCiB7CiAgICAgc2V0U3RhbmRhcmRGb250RmFtaWx5KCJTb25ndGkgVEMiLCBVU0NSSVBU
X1RSQURJVElPTkFMX0hBTik7CiAgICAgc2V0U2VyaWZGb250RmFtaWx5KCJTb25ndGkgVEMiLCBV
U0NSSVBUX1RSQURJVElPTkFMX0hBTik7CkBAIC04Niw3ICs4Niw3IEBAIHZvaWQgU2V0dGluZ3M6
OmluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWkKIAogI2Vsc2UKIAotdm9pZCBTZXR0aW5nczo6aW5p
dGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQordm9pZCBTZXR0aW5nc0Jhc2U6OmluaXRpYWxp
emVEZWZhdWx0Rm9udEZhbWlsaWVzKCkKIHsKICAgICAvLyBUaGVyZSBpcyBubyBzZXJpZiBDaGlu
ZXNlIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgogICAgIHNldFN0YW5kYXJkRm9u
dEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9UUkFE
SVRJT05BTF9IQU4pOwpAQCAtMTE5LDcgKzExOSw3IEBAIHZvaWQgU2V0dGluZ3M6OmluaXRpYWxp
emVEZWZhdWx0Rm9udEZhbWkKIAogI2VuZGlmCiAKLWNvbnN0IFN0cmluZyYgU2V0dGluZ3M6OmRl
ZmF1bHRNZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCgpCitjb25zdCBT
dHJpbmcmIFNldHRpbmdzQmFzZTo6ZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFy
ZHdhcmVTdXBwb3J0KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBkZWZh
dWx0TWVkaWFDb250ZW50VHlwZXMgeyAidmlkZW8vbXA0O2NvZGVjcz1odmMxOnZpZGVvL21wNDtj
b2RlY3M9aGV2MSIgfTsKICAgICByZXR1cm4gZGVmYXVsdE1lZGlhQ29udGVudFR5cGVzOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2EvU2V0dGluZ3NDb2NvYS5tbQkocmV2aXNpb24g
MjIyNzY2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9jb2NvYS9TZXR0aW5nc0NvY29hLm1tCShu
b25leGlzdGVudCkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLQotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgY2hh
ciogc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCkKLXsKLSAgICByZXR1cm4gIlBp
bmdGYW5nIFRDIjsKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiBzYW5zU2VyaWZTaW1w
bGlmaWVkSGFuRm9udEZhbWlseSgpCi17Ci0gICAgcmV0dXJuICJQaW5nRmFuZyBTQyI7Ci19Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0KLXN0YXRpYyBib29sIG9zYWthTW9ub0lzSW5zdGFsbGVkKCkK
LXsKLSAgICBpbnQgb25lID0gMTsKLSAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IHllcyA9IGFk
b3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVySW50VHlw
ZSwgJm9uZSkpOwotICAgIENGVHlwZVJlZiBrZXlzW10gPSB7IGtDVEZvbnRFbmFibGVkQXR0cmli
dXRlLCBrQ1RGb250TmFtZUF0dHJpYnV0ZSB9OwotICAgIENGVHlwZVJlZiB2YWx1ZXNbXSA9IHsg
eWVzLmdldCgpLCBDRlNUUigiT3Nha2EtTW9ubyIpIH07Ci0gICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gYXR0cmlidXRlcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtleXMsIHZhbHVlcywgV1RGX0FSUkFZX0xFTkdUSCh2YWx1ZXMpLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7Ci0gICAgUmV0YWluUHRyPENURm9udERlc2NyaXB0b3JSZWY+IGRlc2NyaXB0b3IgPSBh
ZG9wdENGKENURm9udERlc2NyaXB0b3JDcmVhdGVXaXRoQXR0cmlidXRlcyhhdHRyaWJ1dGVzLmdl
dCgpKSk7Ci0gICAgUmV0YWluUHRyPENGU2V0UmVmPiBtYW5kYXRvcnlBdHRyaWJ1dGVzID0gYWRv
cHRDRihDRlNldENyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrZXlzLCBXVEZfQVJSQVlfTEVO
R1RIKGtleXMpLCAma0NGVHlwZVNldENhbGxCYWNrcykpOwotICAgIHJldHVybiBhZG9wdENGKENU
Rm9udERlc2NyaXB0b3JDcmVhdGVNYXRjaGluZ0ZvbnREZXNjcmlwdG9yKGRlc2NyaXB0b3IuZ2V0
KCksIG1hbmRhdG9yeUF0dHJpYnV0ZXMuZ2V0KCkpKTsKLX0KLQotdm9pZCBTZXR0aW5nczo6aW5p
dGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKQotewotICAgIHNldFN0YW5kYXJkRm9udEZhbWls
eSgiU29uZ3RpIFRDIiwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldFNlcmlmRm9u
dEZhbWlseSgiU29uZ3RpIFRDIiwgVVNDUklQVF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldEZp
eGVkRm9udEZhbWlseShzYW5zU2VyaWZUcmFkaXRpb25hbEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQ
VF9UUkFESVRJT05BTF9IQU4pOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1Nlcmlm
VHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLSAg
ICBzZXRDdXJzaXZlRm9udEZhbWlseSgiS2FpdGkgVEMiLCBVU0NSSVBUX1RSQURJVElPTkFMX0hB
Tik7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIlNvbmd0aSBTQyIsIFVTQ1JJUFRfU0lN
UExJRklFRF9IQU4pOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiU29uZ3RpIFNDIiwgVVNDUklQ
VF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBs
aWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNldFNh
bnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmU2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVND
UklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoIkthaXRpIFND
IiwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHko
IkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0g
ICAgc2V0Rml4ZWRGb250RmFtaWx5KG9zYWthTW9ub0lzSW5zdGFsbGVkKCkgPyAiT3Nha2EtTW9u
byIgOiAiSGlyYWdpbm8gU2FucyIsIFVTQ1JJUFRfS0FUQUtBTkFfT1JfSElSQUdBTkEpOwotICAg
IHNldFNlcmlmRm9udEZhbWlseSgiSGlyYWdpbm8gTWluY2hvIFByb04iLCBVU0NSSVBUX0tBVEFL
QU5BX09SX0hJUkFHQU5BKTsKLSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBL
YWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0KLSAgICBz
ZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFwcGxlTXl1bmdqbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAg
ICBzZXRTZXJpZkZvbnRGYW1pbHkoIkFwcGxlTXl1bmdqbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAg
ICBzZXRGaXhlZEZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBUX0hBTkdV
TCk7Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGljIE5lbyIsIFVT
Q1JJUFRfSEFOR1VMKTsKLQotICAgIHNldFN0YW5kYXJkRm9udEZhbWlseSgiVGltZXMiLCBVU0NS
SVBUX0NPTU1PTik7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIiwgVVNDUklQVF9D
T01NT04pOwotICAgIHNldFNlcmlmRm9udEZhbWlseSgiVGltZXMiLCBVU0NSSVBUX0NPTU1PTik7
Ci0gICAgc2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiSGVsdmV0aWNhIiwgVVNDUklQVF9DT01NT04p
OwotfQotCi0jZWxzZQotCi12b2lkIFNldHRpbmdzOjppbml0aWFsaXplRGVmYXVsdEZvbnRGYW1p
bGllcygpCi17Ci0gICAgLy8gVGhlcmUgaXMgbm8gc2VyaWYgQ2hpbmVzZSBmb250IGluIGRlZmF1
bHQgaU9TIGluc3RhbGxhdGlvbi4KLSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoc2Fuc1Nlcmlm
VHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLSAg
ICBzZXRTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCks
IFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsKLSAgICBzZXRGaXhlZEZvbnRGYW1pbHkoc2Fuc1Nl
cmlmVHJhZGl0aW9uYWxIYW5Gb250RmFtaWx5KCksIFVTQ1JJUFRfVFJBRElUSU9OQUxfSEFOKTsK
LSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KHNhbnNTZXJpZlRyYWRpdGlvbmFsSGFuRm9udEZh
bWlseSgpLCBVU0NSSVBUX1RSQURJVElPTkFMX0hBTik7Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBz
ZXJpZiBDaGluZXNlIGZvbnQgaW4gZGVmYXVsdCBpT1MgaW5zdGFsbGF0aW9uLgotICAgIHNldFN0
YW5kYXJkRm9udEZhbWlseShzYW5zU2VyaWZTaW1wbGlmaWVkSGFuRm9udEZhbWlseSgpLCBVU0NS
SVBUX1NJTVBMSUZJRURfSEFOKTsKLSAgICBzZXRTZXJpZkZvbnRGYW1pbHkoc2Fuc1NlcmlmU2lt
cGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0gICAgc2V0
Rml4ZWRGb250RmFtaWx5KHNhbnNTZXJpZlNpbXBsaWZpZWRIYW5Gb250RmFtaWx5KCksIFVTQ1JJ
UFRfU0lNUExJRklFRF9IQU4pOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoc2Fuc1Nlcmlm
U2ltcGxpZmllZEhhbkZvbnRGYW1pbHkoKSwgVVNDUklQVF9TSU1QTElGSUVEX0hBTik7Ci0KLSAg
ICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkhpcmFnaW5vIE1pbmNobyBQcm9OIiwgVVNDUklQVF9L
QVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0Rml4ZWRGb250RmFtaWx5KCJIaXJhZ2lubyBL
YWt1IEdvdGhpYyBQcm9OIiwgVVNDUklQVF9LQVRBS0FOQV9PUl9ISVJBR0FOQSk7Ci0gICAgc2V0
U2VyaWZGb250RmFtaWx5KCJIaXJhZ2lubyBNaW5jaG8gUHJvTiIsIFVTQ1JJUFRfS0FUQUtBTkFf
T1JfSElSQUdBTkEpOwotICAgIHNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkhpcmFnaW5vIEtha3Ug
R290aGljIFByb04iLCBVU0NSSVBUX0tBVEFLQU5BX09SX0hJUkFHQU5BKTsKLQotICAgIC8vIFRo
ZXJlIGlzIG5vIHNlcmlmIEtvcmVhbiBmb250IGluIGRlZmF1bHQgaU9TIGluc3RhbGxhdGlvbi4K
LSAgICBzZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFwcGxlIFNEIEdvdGhpYyBOZW8iLCBVU0NSSVBU
X0hBTkdVTCk7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJBcHBsZSBTRCBHb3RoaWMgTmVvIiwg
VVNDUklQVF9IQU5HVUwpOwotICAgIHNldEZpeGVkRm9udEZhbWlseSgiQXBwbGUgU0QgR290aGlj
IE5lbyIsIFVTQ1JJUFRfSEFOR1VMKTsKLSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcHBs
ZSBTRCBHb3RoaWMgTmVvIiwgVVNDUklQVF9IQU5HVUwpOwotCi0gICAgc2V0U3RhbmRhcmRGb250
RmFtaWx5KCJUaW1lcyIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBzZXRGaXhlZEZvbnRGYW1pbHko
IkNvdXJpZXIiLCBVU0NSSVBUX0NPTU1PTik7Ci0gICAgc2V0U2VyaWZGb250RmFtaWx5KCJUaW1l
cyIsIFVTQ1JJUFRfQ09NTU9OKTsKLSAgICBzZXRTYW5zU2VyaWZGb250RmFtaWx5KCJIZWx2ZXRp
Y2EiLCBVU0NSSVBUX0NPTU1PTik7Ci19Ci0KLSNlbmRpZgotCi1jb25zdCBTdHJpbmcmIFNldHRp
bmdzOjpkZWZhdWx0TWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQoKQot
ewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGRlZmF1bHRNZWRpYUNvbnRlbnRU
eXBlcyB7ICJ2aWRlby9tcDQ7Y29kZWNzPWh2YzE6dmlkZW8vbXA0O2NvZGVjcz1oZXYxIiB9Owot
ICAgIHJldHVybiBkZWZhdWx0TWVkaWFDb250ZW50VHlwZXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BhZ2UvY29jb2Ev
U2V0dGluZ3NDb2NvYS5tbQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTEg
KzAsMCAjIwotTEYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCShyZXZpc2lvbiAyMjI3NjYp
CisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MTMsMTEgKzUxMywxMSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbFNl
dHRpbmdzOjpzZXRTCiAgICAgaWYgKCFtX3BhZ2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKICAgICBpZiAobW9kZSA9PSAiQWxsb3dBbGwiKQotICAg
ICAgICBzZXR0aW5ncygpLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6
QWxsb3dBbGxTdG9yYWdlKTsKKyAgICAgICAgc2V0dGluZ3MoKS5zZXRTdG9yYWdlQmxvY2tpbmdQ
b2xpY3koQWxsb3dBbGxTdG9yYWdlKTsKICAgICBlbHNlIGlmIChtb2RlID09ICJCbG9ja1RoaXJk
UGFydHkiKQotICAgICAgICBzZXR0aW5ncygpLnNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1
cml0eU9yaWdpbjo6QmxvY2tUaGlyZFBhcnR5U3RvcmFnZSk7CisgICAgICAgIHNldHRpbmdzKCku
c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpOwogICAgIGVs
c2UgaWYgKG1vZGUgPT0gIkJsb2NrQWxsIikKLSAgICAgICAgc2V0dGluZ3MoKS5zZXRTdG9yYWdl
QmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OkJsb2NrQWxsU3RvcmFnZSk7CisgICAgICAg
IHNldHRpbmdzKCkuc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KEJsb2NrQWxsU3RvcmFnZSk7CiAg
ICAgZWxzZQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IgfTsKICAgICBy
ZXR1cm4geyB9OwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTctMTAtMDIg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbU2V0dGluZ3NdIENvbnZl
cnQgbW9yZSBzZXR0aW5ncyB0byBiZSBnZW5lcmF0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzc2NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmaW5pdGlv
bnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0Lmg6CisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQcmVmZXJlbmNlcy5jcHA6CisKKyAgICAgICAgICAgIFVwZGF0ZSBmb3IgcmVuYW1lIG9m
IFN0b3JhZ2VCbG9ja2luZ1BvbGljeS4KKwogMjAxNy0xMC0wMiAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIG1vcmUgY29kZSBpbnRvIFBhc3RlYm9hcmRD
dXN0b21EYXRhCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmlu
aXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5j
ZXNEZWZpbml0aW9ucy5oCShyZXZpc2lvbiAyMjI3NjYpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJQcmVmZXJlbmNlc0RlZmluaXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOCw3ICsz
MjgsNyBAQAogICAgIG1hY3JvKEluc3BlY3RvckF0dGFjaGVkSGVpZ2h0LCBpbnNwZWN0b3JBdHRh
Y2hlZEhlaWdodCwgVUludDMyLCB1aW50MzJfdCwgMzAwLCAiIiwgIiIpIFwKICAgICBtYWNybyhJ
bnNwZWN0b3JBdHRhY2hlZFdpZHRoLCBpbnNwZWN0b3JBdHRhY2hlZFdpZHRoLCBVSW50MzIsIHVp
bnQzMl90LCA3NTAsICIiLCAiIikgXAogICAgIG1hY3JvKEluc3BlY3RvckF0dGFjaG1lbnRTaWRl
LCBpbnNwZWN0b3JBdHRhY2htZW50U2lkZSwgVUludDMyLCB1aW50MzJfdCwgMCwgIiIsICIiKSBc
Ci0gICAgbWFjcm8oU3RvcmFnZUJsb2NraW5nUG9saWN5LCBzdG9yYWdlQmxvY2tpbmdQb2xpY3ks
IFVJbnQzMiwgdWludDMyX3QsIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpCbG9ja1RoaXJkUGFy
dHlTdG9yYWdlLCAiIiwgIiIpIFwKKyAgICBtYWNybyhTdG9yYWdlQmxvY2tpbmdQb2xpY3ksIHN0
b3JhZ2VCbG9ja2luZ1BvbGljeSwgVUludDMyLCB1aW50MzJfdCwgV2ViQ29yZTo6QmxvY2tUaGly
ZFBhcnR5U3RvcmFnZSwgIiIsICIiKSBcCiAgICAgbWFjcm8oSmF2YVNjcmlwdFJ1bnRpbWVGbGFn
cywgamF2YVNjcmlwdFJ1bnRpbWVGbGFncywgVUludDMyLCB1aW50MzJfdCwgMCwgIiIsICIiKSBc
CiAgICAgbWFjcm8oRGF0YURldGVjdG9yVHlwZXMsIGRhdGFEZXRlY3RvclR5cGVzLCBVSW50MzIs
IHVpbnQzMl90LCAwLCAiIiwgIiIpIFwKICAgICBtYWNybyhVc2VySW50ZXJmYWNlRGlyZWN0aW9u
UG9saWN5LCB1c2VySW50ZXJmYWNlRGlyZWN0aW9uUG9saWN5LCBVSW50MzIsIHVpbnQzMl90LCAw
LCAiIiwgIiIpIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByZWZlcmVuY2Vz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcmVmZXJlbmNl
cy5jcHAJKHJldmlzaW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
ZWZlcmVuY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBSZWY8V2ViUHJl
ZmVyZW5jZXM+IFdlYlByZWZlcmVuY2VzOjpjcmVhCiAgICAgcHJlZmVyZW5jZXMtPnJlZ2lzdGVy
RGVmYXVsdEJvb2xWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6amF2YUVuYWJsZWRLZXko
KSwgdHJ1ZSk7CiAgICAgcHJlZmVyZW5jZXMtPnJlZ2lzdGVyRGVmYXVsdEJvb2xWYWx1ZUZvcktl
eShXZWJQcmVmZXJlbmNlc0tleTo6amF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzS2V5KCksIHRydWUp
OwogICAgIHByZWZlcmVuY2VzLT5yZWdpc3RlckRlZmF1bHRCb29sVmFsdWVGb3JLZXkoV2ViUHJl
ZmVyZW5jZXNLZXk6OnBsdWdpbnNFbmFibGVkS2V5KCksIHRydWUpOwotICAgIHByZWZlcmVuY2Vz
LT5yZWdpc3RlckRlZmF1bHRVSW50MzJWYWx1ZUZvcktleShXZWJQcmVmZXJlbmNlc0tleTo6c3Rv
cmFnZUJsb2NraW5nUG9saWN5S2V5KCksIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpBbGxvd0Fs
bFN0b3JhZ2UpOworICAgIHByZWZlcmVuY2VzLT5yZWdpc3RlckRlZmF1bHRVSW50MzJWYWx1ZUZv
cktleShXZWJQcmVmZXJlbmNlc0tleTo6c3RvcmFnZUJsb2NraW5nUG9saWN5S2V5KCksIFdlYkNv
cmU6OkFsbG93QWxsU3RvcmFnZSk7CiAgICAgcmV0dXJuIHByZWZlcmVuY2VzOwogfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0FQSUNhc3QuaAkocmV2aXNpb24gMjIy
NzY2KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tBUElDYXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyNywyOSArNDI3LDI5IEBAIGlubGluZSBXS0hUVFBDb29raWVBY2NlcHRQ
b2xpY3kgdG9BUEkoSFQKICAgICByZXR1cm4ga1dLSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5
czsKIH0KIAotaW5saW5lIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQ
b2xpY3kgdG9TdG9yYWdlQmxvY2tpbmdQb2xpY3koV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgcG9s
aWN5KQoraW5saW5lIFdlYkNvcmU6OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b1N0b3JhZ2VCbG9j
a2luZ1BvbGljeShXS1N0b3JhZ2VCbG9ja2luZ1BvbGljeSBwb2xpY3kpCiB7CiAgICAgc3dpdGNo
IChwb2xpY3kpIHsKICAgICBjYXNlIGtXS0FsbG93QWxsU3RvcmFnZToKLSAgICAgICAgcmV0dXJu
IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2U7CisgICAgICAgIHJldHVy
biBXZWJDb3JlOjpBbGxvd0FsbFN0b3JhZ2U7CiAgICAgY2FzZSBrV0tCbG9ja1RoaXJkUGFydHlT
dG9yYWdlOgotICAgICAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrVGhp
cmRQYXJ0eVN0b3JhZ2U7CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpCbG9ja1RoaXJkUGFydHlT
dG9yYWdlOwogICAgIGNhc2Uga1dLQmxvY2tBbGxTdG9yYWdlOgotICAgICAgICByZXR1cm4gV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrQWxsU3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIFdl
YkNvcmU6OkJsb2NrQWxsU3RvcmFnZTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3RvcmFnZTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6QWxsb3dBbGxTdG9yYWdlOwogfQogCi1pbmxpbmUgV0tTdG9y
YWdlQmxvY2tpbmdQb2xpY3kgdG9BUEkoV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VC
bG9ja2luZ1BvbGljeSBwb2xpY3kpCitpbmxpbmUgV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgdG9B
UEkoV2ViQ29yZTo6U3RvcmFnZUJsb2NraW5nUG9saWN5IHBvbGljeSkKIHsKICAgICBzd2l0Y2gg
KHBvbGljeSkgewotICAgIGNhc2UgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3Rv
cmFnZToKKyAgICBjYXNlIFdlYkNvcmU6OkFsbG93QWxsU3RvcmFnZToKICAgICAgICAgcmV0dXJu
IGtXS0FsbG93QWxsU3RvcmFnZTsKLSAgICBjYXNlIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpC
bG9ja1RoaXJkUGFydHlTdG9yYWdlOgorICAgIGNhc2UgV2ViQ29yZTo6QmxvY2tUaGlyZFBhcnR5
U3RvcmFnZToKICAgICAgICAgcmV0dXJuIGtXS0Jsb2NrVGhpcmRQYXJ0eVN0b3JhZ2U7Ci0gICAg
Y2FzZSBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6QmxvY2tBbGxTdG9yYWdlOgorICAgIGNhc2Ug
V2ViQ29yZTo6QmxvY2tBbGxTdG9yYWdlOgogICAgICAgICByZXR1cm4ga1dLQmxvY2tBbGxTdG9y
YWdlOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJlZmVyZW5jZXMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXMubW0JKHJldmlzaW9uIDIyMjc2NikKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xODAsMjkgKzE4MCwyOSBAQCAtICh2b2lkKV9zZXRUZWxlcGhvbmVOdW1iZXJEZXRlY3Rpb25J
c0VuCiAgICAgX3ByZWZlcmVuY2VzLT5zZXRUZWxlcGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZCh0
ZWxlcGhvbmVOdW1iZXJEZXRlY3Rpb25Jc0VuYWJsZWQpOwogfQogCi1zdGF0aWMgV2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b1N0b3JhZ2VCbG9ja2luZ1Bv
bGljeShfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kgcG9saWN5KQorc3RhdGljIFdlYkNvcmU6OlN0
b3JhZ2VCbG9ja2luZ1BvbGljeSB0b1N0b3JhZ2VCbG9ja2luZ1BvbGljeShfV0tTdG9yYWdlQmxv
Y2tpbmdQb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRjaCAocG9saWN5KSB7CiAgICAgY2FzZSBf
V0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lBbGxvd0FsbDoKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luOjpBbGxvd0FsbFN0b3JhZ2U7CisgICAgICAgIHJldHVybiBXZWJDb3Jl
OjpBbGxvd0FsbFN0b3JhZ2U7CiAgICAgY2FzZSBfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lCbG9j
a1RoaXJkUGFydHk6Ci0gICAgICAgIHJldHVybiBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6Qmxv
Y2tUaGlyZFBhcnR5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkJsb2NrVGhpcmRQ
YXJ0eVN0b3JhZ2U7CiAgICAgY2FzZSBfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3lCbG9ja0FsbDoK
LSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luOjpCbG9ja0FsbFN0b3JhZ2U7
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpCbG9ja0FsbFN0b3JhZ2U7CiAgICAgfQogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
OjpBbGxvd0FsbFN0b3JhZ2U7CisgICAgcmV0dXJuIFdlYkNvcmU6OkFsbG93QWxsU3RvcmFnZTsK
IH0KIAotc3RhdGljIF9XS1N0b3JhZ2VCbG9ja2luZ1BvbGljeSB0b0FQSShXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbjo6U3RvcmFnZUJsb2NraW5nUG9saWN5IHBvbGljeSkKK3N0YXRpYyBfV0tTdG9y
YWdlQmxvY2tpbmdQb2xpY3kgdG9BUEkoV2ViQ29yZTo6U3RvcmFnZUJsb2NraW5nUG9saWN5IHBv
bGljeSkKIHsKICAgICBzd2l0Y2ggKHBvbGljeSkgewotICAgIGNhc2UgV2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW46OkFsbG93QWxsU3RvcmFnZToKKyAgICBjYXNlIFdlYkNvcmU6OkFsbG93QWxsU3Rv
cmFnZToKICAgICAgICAgcmV0dXJuIF9XS1N0b3JhZ2VCbG9ja2luZ1BvbGljeUFsbG93QWxsOwot
ICAgIGNhc2UgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2U6
CisgICAgY2FzZSBXZWJDb3JlOjpCbG9ja1RoaXJkUGFydHlTdG9yYWdlOgogICAgICAgICByZXR1
cm4gX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5QmxvY2tUaGlyZFBhcnR5OwotICAgIGNhc2UgV2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW46OkJsb2NrQWxsU3RvcmFnZToKKyAgICBjYXNlIFdlYkNvcmU6
OkJsb2NrQWxsU3RvcmFnZToKICAgICAgICAgcmV0dXJuIF9XS1N0b3JhZ2VCbG9ja2luZ1BvbGlj
eUJsb2NrQWxsOwogICAgIH0KIApAQCAtMjEyLDcgKzIxMiw3IEBAIHN0YXRpYyBfV0tTdG9yYWdl
QmxvY2tpbmdQb2xpY3kgdG9BUEkoV2UKIAogLSAoX1dLU3RvcmFnZUJsb2NraW5nUG9saWN5KV9z
dG9yYWdlQmxvY2tpbmdQb2xpY3kKIHsKLSAgICByZXR1cm4gdG9BUEkoc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeT4oX3ByZWZlcmVuY2Vz
LT5zdG9yYWdlQmxvY2tpbmdQb2xpY3koKSkpOworICAgIHJldHVybiB0b0FQSShzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3k+KF9wcmVmZXJlbmNlcy0+c3RvcmFnZUJs
b2NraW5nUG9saWN5KCkpKTsKIH0KIAogLSAodm9pZClfc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5
OihfV0tTdG9yYWdlQmxvY2tpbmdQb2xpY3kpcG9saWN5CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMjI3NjYpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNy0xMC0wMiAgU2Ft
IFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIFtTZXR0aW5nc10gQ29udmVydCBt
b3JlIHNldHRpbmdzIHRvIGJlIGdlbmVyYXRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3NzY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAgICAgICgtW1dl
YlZpZXcgX3ByZWZlcmVuY2VzQ2hhbmdlZDpdKToKKworICAgICAgICAgICAgVXBkYXRlIGZvciBy
ZW5hbWVkIFN0b3JhZ2VCbG9ja2luZ1BvbGljeS4KKwogMjAxNy0wOS0yOSAgQWxleGV5IFByb3Nr
dXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3ctdXAgdG8gaHR0cHM6Ly90
cmFjLndlYmtpdC5vcmcvcjIyMjIzOSB0byBmaXggY3Jhc2hlcy4KSW5kZXg6IFNvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDIyMjc2NikKKysrIFNv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjg2NSwxMyArMjg2NSwxMyBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlBy
ZWZlcmVuCiAKICAgICBzd2l0Y2ggKFtwcmVmZXJlbmNlcyBzdG9yYWdlQmxvY2tpbmdQb2xpY3ld
KSB7CiAgICAgY2FzZSBXZWJBbGxvd0FsbFN0b3JhZ2U6Ci0gICAgICAgIHNldHRpbmdzLnNldFN0
b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9yYWdlKTsKKyAg
ICAgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KEFsbG93QWxsU3RvcmFnZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgV2ViQmxvY2tUaGlyZFBhcnR5U3RvcmFnZToKLSAg
ICAgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpC
bG9ja1RoaXJkUGFydHlTdG9yYWdlKTsKKyAgICAgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2Nr
aW5nUG9saWN5KEJsb2NrVGhpcmRQYXJ0eVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFdlYkJsb2NrQWxsU3RvcmFnZToKLSAgICAgICAgc2V0dGluZ3Muc2V0U3RvcmFnZUJsb2Nr
aW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpCbG9ja0FsbFN0b3JhZ2UpOworICAgICAgICBzZXR0
aW5ncy5zZXRTdG9yYWdlQmxvY2tpbmdQb2xpY3koQmxvY2tBbGxTdG9yYWdlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324165</attachid>
            <date>2017-10-18 14:16:06 -0700</date>
            <delta_ts>2017-10-18 14:43:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177766-20171018141605.patch</filename>
            <type>text/plain</type>
            <size>30682</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzYyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTEwLTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBDb252ZXJ0IG1vcmUg
c2V0dGluZ3MgdG8gYmUgZ2VuZXJhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIFJlcGxhY2VzIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1l
cyBvcHRpb24gaW4gU2V0dGluZ3MuaW4KKyAgICAgICAgICB3aXRoIGEgbW9yZSBnZW5lcmljLCBv
bkNoYW5nZSwgd2hpY2ggYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgZnVuY3Rpb24KKyAgICAgICAg
ICBpbiBTZXR0aW5nc0Jhc2UgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzZXR0aW5nIGNo
YW5nZXMuIAorICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyBpcyB0aGVu
IHJlaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YKKyAgICAgICAgICBvbkNoYW5nZS4KKyAgICAgICAg
LSBNb3ZlcyBtb3N0IChhbGwgYnV0IHR3bykgb2YgdGhlIHJlbWFpbmluZyBub24tc3RhdGljIHNl
dHRpbmdzIGZyb20KKyAgICAgICAgICBTZXR0aW5nc0Jhc2UgdG8gU2V0dGluZ3MuaW4KKworICAg
ICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50
YXRpb25GaWxlLnB5OgorICAgICAgICAocHJpbnRTZXR0ZXJCb2R5KToKKyAgICAgICAgKiBTY3Jp
cHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0dGluZ3MucHk6CisgICAgICAgIChTZXR0aW5nLl9faW5p
dF9fKToKKyAgICAgICAgKFNldHRpbmcuX19zdHJfXyk6CisgICAgICAgIChTZXR0aW5nLnR5cGVJ
c1ZhbHVlVHlwZSk6CisgICAgICAgIChTZXR0aW5nLnNldHRlckZ1bmN0aW9uTmFtZSk6CisgICAg
ICAgIChTZXR0aW5nLnNldHRlckNoYW5nZUZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChTZXR0aW5n
Lmhhc0NvbXBsZXhTZXR0ZXIpOgorICAgICAgICAocGFyc2VJbnB1dCk6CisgICAgICAgIAorICAg
ICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBvbkNoYW5nZSBvcHRpb24uCisgICAgICAgIAor
ICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisKKyAgICAgICAgICAgIE1pZ3JhdGUgbW9zdCBv
ZiB0aGUgcmVtYWluaW5nIG5vbi1zdGF0aWMgc2V0dGluZ3MgdG8gU2V0dGluZ3MuaW4uCisgICAg
ICAgICAgICBBZG9wdCBvbkNoYW5nZSBvcHRpb24uCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdz
QmFzZS5jcHA6CisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jhc2UuaDoKKworICAgICAgICAgICAg
QWRkIGhlbHBlciBmdW5jdGlvbnMgZm9yIHVzZSBieSB0aGUgb25DaGFuZ2Ugb3B0aW9uLgorCiAy
MDE3LTEwLTE4ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIEtleSBldmVudHMgc2hvdWxkIG5vdCB1cGRhdGUgRG9jdW1lbnQubGFzdEhhbmRsZWRVc2Vy
R2VzdHVyZVRpbWVzdGFtcCB1bmxlc3Mga2V5IGV2ZW50IGlzIGhhbmRsZWQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVt
ZW50YXRpb25GaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvR2Vu
ZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50YXRpb25GaWxlLnB5CShyZXZp
c2lvbiAyMjM2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3Mv
R2VuZXJhdGVTZXR0aW5nc0ltcGxlbWVudGF0aW9uRmlsZS5weQkod29ya2luZyBjb3B5KQpAQCAt
MTUxLDYgKzE1MSw3IEBAIGRlZiBwcmludFNldHRlckJvZHkob3V0cHV0RmlsZSwgc2V0dGluZykK
ICAgICAgICAgcmV0dXJuCiAKICAgICBzZXR0ZXJGdW5jdGlvbk5hbWUgPSBzZXR0aW5nLnNldHRl
ckZ1bmN0aW9uTmFtZSgpCisgICAgY2hhbmdlRnVuY3Rpb25OYW1lID0gc2V0dGluZy5zZXR0ZXJD
aGFuZ2VGdW5jdGlvbk5hbWUoKQogCiAgICAgaWYgc2V0dGluZy50eXBlSXNWYWx1ZVR5cGUoKToK
ICAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgidm9pZCBTZXR0aW5nczo6IiArIHNldHRlckZ1bmN0
aW9uTmFtZSArICIoIiArIHNldHRpbmcudHlwZSArICIgIiArIHNldHRpbmcubmFtZSArICIpXG4i
KQpAQCAtMTYxLDcgKzE2Miw3IEBAIGRlZiBwcmludFNldHRlckJvZHkob3V0cHV0RmlsZSwgc2V0
dGluZykKICAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgaWYgKG1fIiArIHNldHRpbmcubmFtZSAr
ICIgPT0gIiArIHNldHRpbmcubmFtZSArICIpXG4iKQogICAgIG91dHB1dEZpbGUud3JpdGUoIiAg
ICAgICAgcmV0dXJuO1xuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgbV8iICsgc2V0dGlu
Zy5uYW1lICsgIiA9ICIgKyBzZXR0aW5nLm5hbWUgKyAiO1xuIikKLSAgICBvdXRwdXRGaWxlLndy
aXRlKCIgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTtcbiIpCisg
ICAgb3V0cHV0RmlsZS53cml0ZSgiICAgICIgKyBjaGFuZ2VGdW5jdGlvbk5hbWUgKyAiKCk7XG4i
KQogICAgIG91dHB1dEZpbGUud3JpdGUoIn1cblxuIikKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0dGluZ3MucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL1NldHRpbmdzLnB5CShyZXZpc2lv
biAyMjM2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0
dGluZ3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgU2V0dGluZzoK
ICAgICAgICAgc2VsZi50eXBlID0gJ2Jvb2wnCiAgICAgICAgIHNlbGYuaW5pdGlhbCA9IE5vbmUK
ICAgICAgICAgc2VsZi5jb25kaXRpb25hbCA9IE5vbmUKLSAgICAgICAgc2VsZi5zZXROZWVkc1N0
eWxlUmVjYWxjSW5BbGxGcmFtZXMgPSBOb25lCisgICAgICAgIHNlbGYub25DaGFuZ2UgPSBOb25l
CiAgICAgICAgIHNlbGYuZ2V0dGVyID0gTm9uZQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CkBA
IC03MywyMCArNzMsMjEgQEAgY2xhc3MgU2V0dGluZzoKICAgICAgICAgICAgIHJlc3VsdCArPSAn
IElOSVQ6JyArIHNlbGYuaW5pdGlhbAogICAgICAgICBpZiAoc2VsZi5jb25kaXRpb25hbCk6CiAg
ICAgICAgICAgICByZXN1bHQgKz0gJyBDT05EOicgKyBzZWxmLmNvbmRpdGlvbmFsCi0gICAgICAg
IGlmIChzZWxmLnNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyk6Ci0gICAgICAgICAgICBy
ZXN1bHQgKz0gJyBSRUNBTEM6JyArIHNlbGYuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVz
CisgICAgICAgIGlmIChzZWxmLm9uQ2hhbmdlKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIENI
QU5HRTonICsgc2VsZi5vbkNoYW5nZQogICAgICAgICBpZiAoc2VsZi5nZXR0ZXIpOgogICAgICAg
ICAgICAgcmVzdWx0ICs9ICcgR0VUVEVSOicgKyBzZWxmLmdldHRlcgogICAgICAgICByZXR1cm4g
cmVzdWx0CiAKLSAgICBkZWYgaGFzQ29tcGxleFNldHRlcihzZWxmKToKLSAgICAgICAgcmV0dXJu
IHNlbGYuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzCi0KICAgICBkZWYgdHlwZUlzVmFs
dWVUeXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlICE9ICdTdHJpbmcnCisgICAg
ICAgIGlmIHNlbGYudHlwZSA9PSAnU3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ1VSTCc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBzZXR0ZXJGdW5jdGlvbk5hbWUoc2VsZik6
Ci0gICAgICAgIGZvciBwcmVmaXggaW4gWydjc3MnLCAneHNzJywgJ2Z0cCcsICdkb20nXToKKyAg
ICAgICAgZm9yIHByZWZpeCBpbiBbJ2NzcycsICd4c3MnLCAnZnRwJywgJ2RvbScsICdkbnMnXToK
ICAgICAgICAgICAgIGlmIHNlbGYubmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICdzZXQnICsgdXBwZXJjYXNlRmlyc3ROKHNlbGYubmFtZSwgbGVuKHByZWZp
eCkpCiAgICAgICAgIHJldHVybiAnc2V0JyArIHVwcGVyY2FzZUZpcnN0TihzZWxmLm5hbWUsIDEp
CkBAIC05NCw2ICs5NSwxMiBAQCBjbGFzcyBTZXR0aW5nOgogICAgIGRlZiBnZXR0ZXJGdW5jdGlv
bk5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmdldHRlciBvciBzZWxmLm5hbWUKIAor
ICAgIGRlZiBzZXR0ZXJDaGFuZ2VGdW5jdGlvbk5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLm9uQ2hhbmdlCisKKyAgICBkZWYgaGFzQ29tcGxleFNldHRlcihzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYub25DaGFuZ2UgIT0gTm9uZQorCiAgICAgZGVmIGlkbFR5cGUoc2VsZik6CiAg
ICAgICAgICMgRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtb3JlIHR5cGVzIGluY2x1ZGluZyBlbnVt
ZXJhdGUgdHlwZXMuCiAgICAgICAgIGlmIHNlbGYudHlwZSA9PSAnaW50JzoKQEAgLTE0NCw4ICsx
NTEsOCBAQCBkZWYgcGFyc2VJbnB1dChpbnB1dCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXR0aW5nLmluaXRpYWwgPSB2YWx1ZQogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAn
Y29uZGl0aW9uYWwnKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuY29uZGl0aW9u
YWwgPSB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnc2V0TmVlZHNTdHls
ZVJlY2FsY0luQWxsRnJhbWVzJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNl
dE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAg
IGlmIChuYW1lID09ICdvbkNoYW5nZScpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGlu
Zy5vbkNoYW5nZSA9IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICdnZXR0
ZXInKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuZ2V0dGVyID0gdmFsdWUKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZpc2lvbiAyMjM2MjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTAg
QEAgZGV2aWNlSGVpZ2h0IHR5cGU9aW50LCBpbml0aWFsPTAKICMgc2luY2UgdGhlIG1lbW9yeSB1
c2VkIHdvbid0IGJlIHJlbGVhc2VkIHVudGlsIHRoZSBQYWdlIGlzIGRlc3Ryb3llZC4KIHNlc3Np
b25TdG9yYWdlUXVvdGEgdHlwZT11bnNpZ25lZCwgaW5pdGlhbD1TdG9yYWdlTWFwOjpub1F1b3Rh
CiAKLW1pbmltdW1Gb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0wLCBzZXROZWVkc1N0eWxlUmVj
YWxjSW5BbGxGcmFtZXM9MQotbWluaW11bUxvZ2ljYWxGb250U2l6ZSB0eXBlPWludCwgaW5pdGlh
bD0wLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotZGVmYXVsdEZvbnRTaXplIHR5
cGU9aW50LCBpbml0aWFsPTE2LCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotZGVm
YXVsdEZpeGVkRm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgc2V0TmVlZHNTdHlsZVJlY2Fs
Y0luQWxsRnJhbWVzPTEKK21pbmltdW1Gb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0wLCBvbkNo
YW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK21pbmltdW1Mb2dpY2FsRm9udFNp
emUgdHlwZT1pbnQsIGluaXRpYWw9MCwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzCitkZWZhdWx0Rm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MTYsIG9uQ2hhbmdlPXNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcworZGVmYXVsdEZpeGVkRm9udFNpemUgdHlwZT1p
bnQsIGluaXRpYWw9MCwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAK
IGVkaXRpbmdCZWhhdmlvclR5cGUgdHlwZT1FZGl0aW5nQmVoYXZpb3JUeXBlLCBpbml0aWFsPWVk
aXRpbmdCZWhhdmlvclR5cGVGb3JQbGF0Zm9ybSgpCiBtYXhpbXVtSFRNTFBhcnNlckRPTVRyZWVE
ZXB0aCB0eXBlPXVuc2lnbmVkLCBpbml0aWFsPWRlZmF1bHRNYXhpbXVtSFRNTFBhcnNlckRPTVRy
ZWVEZXB0aApAQCAtNTksMTQgKzU5LDE2IEBAIHNob3VsZFByaW50QmFja2dyb3VuZHMgaW5pdGlh
bD1mYWxzZQogdXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUgaW5pdGlhbD1m
YWxzZSwgY29uZGl0aW9uYWw9REFTSEJPQVJEX1NVUFBPUlQKIGNsaXBib2FyZEFjY2Vzc1BvbGlj
eSB0eXBlPUNsaXBib2FyZEFjY2Vzc1BvbGljeSwgaW5pdGlhbD1DbGlwYm9hcmRBY2Nlc3NQb2xp
Y3k6OlJlcXVpcmVzVXNlckdlc3R1cmUKIAotdGV4dEFyZWFzQXJlUmVzaXphYmxlIGluaXRpYWw9
ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1hdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZCBpbml0aWFsPXRydWUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0x
Ci1hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCBpbml0aWFsPXRydWUsIHNldE5lZWRzU3R5
bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1hY2NlbGVyYXRlZENvbXBvc2l0ZWRBbmltYXRpb25zRW5h
YmxlZCBpbml0aWFsPXRydWUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1zaG93
RGVidWdCb3JkZXJzIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1l
cz0xCi1zaG93UmVwYWludENvdW50ZXIgaW5pdGlhbD1mYWxzZSwgc2V0TmVlZHNTdHlsZVJlY2Fs
Y0luQWxsRnJhbWVzPTEKK3RleHRBcmVhc0FyZVJlc2l6YWJsZSBpbml0aWFsPWZhbHNlLCBvbkNo
YW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK2F1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJh
bWVzCit1c2VyU3R5bGVTaGVldExvY2F0aW9uIHR5cGU9VVJMLCBvbkNoYW5nZT11c2VyU3R5bGVT
aGVldExvY2F0aW9uQ2hhbmdlZAorYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgaW5pdGlh
bD10cnVlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK2FjY2VsZXJh
dGVkQ29tcG9zaXRlZEFuaW1hdGlvbnNFbmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFuZ2U9c2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaG93RGVidWdCb3JkZXJzIGluaXRpYWw9ZmFs
c2UsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcworc2hvd1JlcGFpbnRD
b3VudGVyIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZy
YW1lcwogdmlzaWJsZURlYnVnT3ZlcmxheVJlZ2lvbnMgdHlwZT1EZWJ1Z092ZXJsYXlSZWdpb25z
LCBpbml0aWFsPTAKIHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvciBpbml0aWFsPWZhbHNlCis3
MXJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1yZXNv
dXJjZVVzYWdlT3ZlcmxheVZpc2libGVDaGFuZ2VkLCBjb25kaXRpb249UkVTT1VSQ0VfVVNBR0UK
IAogIyBUaGlzIGlzIGEgcXVpcmsgd2UgYXJlIHByby1hY3RpdmVseSBhcHBseWluZyB0byBvbGQg
YXBwbGljYXRpb25zLiBJdCBjaGFuZ2VzIGtleWJvYXJkIGV2ZW50IGRpc3BhdGNoaW5nLAogIyBt
YWtpbmcga2V5SWRlbnRpZmllciBhdmFpbGFibGUgb24ga2V5cHJlc3MgZXZlbnRzLCBtYWtpbmcg
Y2hhckNvZGUgYXZhaWxhYmxlIG9uIGtleWRvd24va2V5dXAgZXZlbnRzLApAQCAtMTk5LDEzICsy
MDEsMTMgQEAgc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCBpbml0aWFsPQogdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciBpbml0aWFsPWZhbHNlCiBmaXhlZEJh
Y2tncm91bmRzUGFpbnRSZWxhdGl2ZVRvRG9jdW1lbnQgaW5pdGlhbD1kZWZhdWx0Rml4ZWRCYWNr
Z3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50CiAKLXRleHRBdXRvc2l6aW5nRW5hYmxlZCBp
bml0aWFsPWRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKSwgc2V0TmVlZHNTdHlsZVJlY2Fs
Y0luQWxsRnJhbWVzPTEsIGNvbmRpdGlvbmFsPVRFWFRfQVVUT1NJWklORwotdGV4dEF1dG9zaXpp
bmdXaW5kb3dTaXplT3ZlcnJpZGUgdHlwZT1JbnRTaXplLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5B
bGxGcmFtZXM9MSwgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0laSU5HCit0ZXh0QXV0b3NpemluZ0Vu
YWJsZWQgaW5pdGlhbD1kZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCksIG9uQ2hhbmdlPXNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcywgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0laSU5H
Cit0ZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVycmlkZSB0eXBlPUludFNpemUsIG9uQ2hhbmdl
PXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcywgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0la
SU5HCiBtaW5pbXVtWm9vbUZvbnRTaXplIHR5cGU9ZmxvYXQsIGluaXRpYWw9ZGVmYXVsdE1pbmlt
dW1ab29tRm9udFNpemUoKSwgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0laSU5HCiAKLXN1YnBpeGVs
QW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVS
ZWNhbGNJbkFsbEZyYW1lcz0xCi1zaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCBpbml0aWFsPXRydWUs
IHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1zaW1wbGVMaW5lTGF5b3V0RGVidWdC
b3JkZXJzRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFt
ZXM9MQorc3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQgaW5pdGlhbD1mYWxzZSwg
b25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaW1wbGVMaW5lTGF5b3V0
RW5hYmxlZCBpbml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZy
YW1lcworc2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWQgaW5pdGlhbD1mYWxzZSwg
b25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAKIHN1YnBpeGVsQ1NTT01F
bGVtZW50TWV0cmljc0VuYWJsZWQgaW5pdGlhbD1mYWxzZQogCkBAIC0yNzEsNyArMjczLDcgQEAg
dHJlYXRJUEFkZHJlc3NBc0RvbWFpbiBpbml0aWFsPWZhbHNlCiBtZWRpYVByZWxvYWRpbmdFbmFi
bGVkIGluaXRpYWw9ZmFsc2UKIAogIyBSdW50aW1lLWVuYWJsZWQgZmVhdHVyZXMKLXZpc3VhbFZp
ZXdwb3J0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFt
ZXM9MQordmlzdWFsVmlld3BvcnRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNldE5l
ZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBpbnB1dEV2ZW50c0VuYWJsZWQgaW5pdGlhbD10
cnVlCiAKQEAgLTMwOCw3ICszMTAsNyBAQCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCBpbml0aWFs
PWZhbHNlCiAKIHRpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzIHR5
cGU9U2Vjb25kcywgaW5pdGlhbD0zX3MgCiAKLWZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBo
cyBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQorZm9udEZh
bGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBmb250TG9hZFRpbWluZ092ZXJyaWRlIHR5cGU9Rm9u
dExvYWRUaW1pbmdPdmVycmlkZSwgaW5pdGlhbD1Gb250TG9hZFRpbWluZ092ZXJyaWRlOjpOb25l
CiBzaG91bGRJZ25vcmVGb250TG9hZENvbXBsZXRpb25zIGluaXRpYWw9ZmFsc2UKQEAgLTMyMCw2
ICszMjIsMzEgQEAgYXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xvc3VyZUFsbG93ZWQgaW5pdAogamF2
YUVuYWJsZWQgaW5pdGlhbD1mYWxzZSwgZ2V0dGVyPWlzSmF2YUVuYWJsZWQKIGphdmFFbmFibGVk
Rm9yTG9jYWxGaWxlcyBpbml0aWFsPXRydWUsIGdldHRlcj1pc0phdmFFbmFibGVkRm9yTG9jYWxG
aWxlcwogCisjIFVubGlrZSB0aGUgaW1hZ2VzRW5hYmxlZCBzZXR0aW5nLCB0aGlzIG9ubHkgc3Vw
cHJlc3NlcyB0aGUgbmV0d29yayBsb2FkIG9mCisjIHRoZSBpbWFnZSBVUkwuIEEgY2FjaGVkIGlt
YWdlIHdpbGwgc3RpbGwgYmUgcmVuZGVyZWQgaWYgcmVxdWVzdGVkLgorbG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5IGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWltYWdlc0VuYWJsZWRDaGFuZ2VkCitp
bWFnZXNFbmFibGVkIGluaXRpYWw9dHJ1ZSwgZ2V0dGVyPWFyZUltYWdlc0VuYWJsZWQsIG9uQ2hh
bmdlPWltYWdlc0VuYWJsZWRDaGFuZ2VkCitzY3JpcHRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIGdl
dHRlcj1pc1NjcmlwdEVuYWJsZWQsIG9uQ2hhbmdlPXNjcmlwdEVuYWJsZWRDaGFuZ2VkCitwbHVn
aW5zRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBnZXR0ZXI9YXJlUGx1Z2luc0VuYWJsZWQsIG9uQ2hh
bmdlPXBsdWdpbnNFbmFibGVkQ2hhbmdlZAorCit1c2VzUGFnZUNhY2hlIGluaXRpYWw9ZmFsc2Us
IG9uQ2hhbmdlPXVzZXNQYWdlQ2FjaGVDaGFuZ2VkCisKK2Ruc1ByZWZldGNoaW5nRW5hYmxlZCBp
bml0aWFsPWZhbHNlLCBvbkNoYW5nZT1kbnNQcmVmZXRjaGluZ0VuYWJsZWRDaGFuZ2VkCisKK2Jh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlQ2hhbmdlZAorCitzY3JvbGxpbmdQZXJmb3Jt
YW5jZUxvZ2dpbmdFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNjcm9sbGluZ1BlcmZv
cm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2VkCisKK2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWhpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdTdGF0ZUNoYW5nZWQKK2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVh
c2VzIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdT
dGF0ZUNoYW5nZWQKK2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCBpbml0
aWFsPWZhbHNlLCBvbkNoYW5nZT1oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJs
ZWRDaGFuZ2VkCisKK3N0b3JhZ2VCbG9ja2luZ1BvbGljeSB0eXBlPVN0b3JhZ2VCbG9ja2luZ1Bv
bGljeSwgaW5pdGlhbD1BbGxvd0FsbFN0b3JhZ2UsIG9uQ2hhbmdlPXN0b3JhZ2VCbG9ja2luZ1Bv
bGljeUNoYW5nZWQKKworIyBPbmx5IHNldCBieSBMYXlvdXQgVGVzdHMuCittZWRpYVR5cGVPdmVy
cmlkZSB0eXBlPVN0cmluZywgaW5pdGlhbD0ic2NyZWVuIiwgb25DaGFuZ2U9bWVkaWFUeXBlT3Zl
cnJpZGVDaGFuZ2VkCisKKwogZm9udFJlbmRlcmluZ01vZGUgdHlwZT1Gb250UmVuZGVyaW5nTW9k
ZSwgaW5pdGlhbD1Gb250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsCiAKIHByZWZlck1JTUVUeXBlRm9y
SW1hZ2VzIGluaXRpYWw9ZmFsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NC
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5j
cHAJKHJldmlzaW9uIDIyMzYyNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTkgKzYzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgdm9pZCBzZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQot
ewotICAgIGlmICghcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChGcmFtZSogZnJh
bWUgPSAmcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJh
dmVyc2VOZXh0KCkpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VM
b2FkZXIoKS5zZXRJbWFnZXNFbmFibGVkKHBhZ2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxl
ZCgpKTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCku
c2V0QXV0b0xvYWRJbWFnZXMocGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoKSk7Ci0gICAgfQotfQotCiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFt
aWx5Q2hhbmdlKFBhZ2UqIHBhZ2UpCiB7CiAgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUo
KTsKQEAgLTE0NiwxNyArMTMzLDcgQEAgU2V0dGluZ3NCYXNlOjpTZXR0aW5nc0Jhc2UoUGFnZSog
cGFnZSkKICAgICAsIG1fZm9udEdlbmVyaWNGYW1pbGllcyhzdGQ6Om1ha2VfdW5pcXVlPEZvbnRH
ZW5lcmljRmFtaWxpZXM+KCkpCiAgICAgLCBtX2xheW91dEludGVydmFsKGxheW91dFNjaGVkdWxl
VGhyZXNob2xkKQogICAgICwgbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbChET01UaW1lcjo6ZGVm
YXVsdE1pbmltdW1JbnRlcnZhbCgpKQotICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHko
ZmFsc2UpCi0gICAgLCBtX2FyZUltYWdlc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1fYXJlUGx1Z2lu
c0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxzZSkKLSAgICAsIG1f
dXNlc1BhZ2VDYWNoZShmYWxzZSkKLSAgICAsIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9u
ZFBhZ2UoZmFsc2UpCi0gICAgLCBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZChmYWxzZSkKLSAgICAs
IG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc2V0
SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lcigqdGhpcywgJlNldHRpbmdzQmFzZTo6aW1hZ2VMb2Fk
aW5nU2V0dGluZ3NUaW1lckZpcmVkKQotICAgICwgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nRW5hYmxlZChmYWxzZSkKLSAgICAsIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNp
b25FbmFibGVkKGZhbHNlKQogewogICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4gY3Jl
YXRlZCB5ZXQsIHNvIHdlIGluaXRpYWxpemUgdGhlIEF0b21pY1N0cmluZwogICAgIC8vIGhhc2gg
YmVmb3JlIHRyeWluZyB0byB1c2UgaXQuCkBAIC0yNzIsODUgKzI0OSw2IEBAIGJvb2wgU2V0dGlu
Z3NCYXNlOjpkZWZhdWx0VGV4dEF1dG9zaXppbmcKIH0KICNlbmRpZgogCi12b2lkIFNldHRpbmdz
QmFzZTo6c2V0TWVkaWFUeXBlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVPdmVycmlk
ZSkKLXsKLSAgICBpZiAobV9tZWRpYVR5cGVPdmVycmlkZSA9PSBtZWRpYVR5cGVPdmVycmlkZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9tZWRpYVR5cGVPdmVycmlkZSA9IG1lZGlhVHlwZU92
ZXJyaWRlOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1l
VmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOwotICAgIEFTU0VSVCh2aWV3
KTsKLQotICAgIHZpZXctPnNldE1lZGlhVHlwZShtZWRpYVR5cGVPdmVycmlkZSk7Ci0gICAgbV9w
YWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLX0KLQotdm9pZCBTZXR0aW5n
c0Jhc2U6OnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sIGxvYWRzSW1hZ2VzQXV0b21h
dGljYWxseSkKLXsKLSAgICBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA9IGxvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseTsKLSAgICAKLSAgICAvLyBDaGFuZ2luZyB0aGlzIHNldHRpbmcgdG8gdHJ1
ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFydCBuZXcgbG9hZHMgZm9yIGltYWdlcyB0aGF0IGhhZCBw
cmV2aW91c2x5IGhhZCBsb2FkaW5nIGRpc2FibGVkLgotICAgIC8vIElmIHRoaXMgaGFwcGVucyB3
aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgYW5kIHdlIGRvbid0IGtub3cgdGhl
IFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgdGhlc2UgbmV3IGxvYWRzCi0gICAgLy8gY2Fu
IGNhdXNlIGNyYXNoZXMgZG93bnN0cmVhbSB3aGVuIHRoZSBXZWJWaWV3IG1lbW9yeSBoYXMgYWN0
dWFsbHkgYmVlbiBmcmVlJ2QuCi0gICAgLy8gT25lIGV4YW1wbGUgd2hlcmUgdGhpcyBjYW4gaGFw
cGVuIGlzIGluIE1hYyBhcHBzIHRoYXQgc3ViY2xhc3MgV2ViVmlldyB0aGVuIGRvIHdvcmsgaW4g
dGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9jIG1ldGhvZHMuCi0gICAgLy8gU3RhcnRpbmcgdGhlc2Ug
bG9hZHMgc3luY2hyb25vdXNseSBpcyBub3QgaW1wb3J0YW50LiAgQnkgcHV0dGluZyBpdCBvbiBh
IDAtZGVsYXksIHByb3Blcmx5IGNsb3NpbmcgdGhlIFBhZ2UgY2FuY2VscyB0aGVtCi0gICAgLy8g
YmVmb3JlIHRoZXkgaGF2ZSBhIGNoYW5jZSB0byByZWFsbHkgc3RhcnQuCi0gICAgLy8gU2VlIGh0
dHA6Ly93ZWJraXQub3JnL2IvNjA1NzIgZm9yIG1vcmUgZGlzY3Vzc2lvbi4KLSAgICBtX3NldElt
YWdlTG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgU2V0
dGluZ3NCYXNlOjppbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQoKQotewotICAgIHNldElt
YWdlTG9hZGluZ1NldHRpbmdzKG1fcGFnZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRT
Y3JpcHRFbmFibGVkKGJvb2wgaXNTY3JpcHRFbmFibGVkKQotewotICAgIGlmIChtX2lzU2NyaXB0
RW5hYmxlZCA9PSBpc1NjcmlwdEVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNT
Y3JpcHRFbmFibGVkID0gaXNTY3JpcHRFbmFibGVkOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX3BhZ2UtPnNldE5lZWRzUmVj
YWxjU3R5bGVJbkFsbEZyYW1lcygpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpz
ZXRJbWFnZXNFbmFibGVkKGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCkKLXsKLSAgICBtX2FyZUltYWdl
c0VuYWJsZWQgPSBhcmVJbWFnZXNFbmFibGVkOwotCi0gICAgLy8gU2VlIGNvbW1lbnQgaW4gc2V0
TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5LgotICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NU
aW1lci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldFBsdWdp
bnNFbmFibGVkKGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQpCi17Ci0gICAgaWYgKG1fYXJlUGx1Z2lu
c0VuYWJsZWQgPT0gYXJlUGx1Z2luc0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
YXJlUGx1Z2luc0VuYWJsZWQgPSBhcmVQbHVnaW5zRW5hYmxlZDsKLSAgICBQYWdlOjpyZWZyZXNo
UGx1Z2lucyhmYWxzZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKLXsKLSAgICBpZiAo
bV91c2VyU3R5bGVTaGVldExvY2F0aW9uID09IHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHVzZXJTdHlsZVNo
ZWV0TG9jYXRpb247Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnVzZXJTdHls
ZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCk7Ci19Ci0KIHZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNaW5p
bXVtRE9NVGltZXJJbnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAgIGF1dG8gb2xkVGlt
ZXJJbnRlcnZhbCA9IHN0ZDo6ZXhjaGFuZ2UobV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbCwgaW50
ZXJ2YWwpOwpAQCAtMzcxLDQyICsyNjksNiBAQCB2b2lkIFNldHRpbmdzQmFzZTo6c2V0TGF5b3V0
SW50ZXJ2YWwoU2VjCiAgICAgbV9sYXlvdXRJbnRlcnZhbCA9IHN0ZDo6bWF4KGxheW91dEludGVy
dmFsLCBsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCk7CiB9CiAKLXZvaWQgU2V0dGluZ3NCYXNlOjpz
ZXRVc2VzUGFnZUNhY2hlKGJvb2wgdXNlc1BhZ2VDYWNoZSkKLXsKLSAgICBpZiAobV91c2VzUGFn
ZUNhY2hlID09IHVzZXNQYWdlQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAg
bV91c2VzUGFnZUNhY2hlID0gdXNlc1BhZ2VDYWNoZTsKLQotICAgIGlmICghbV9wYWdlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fdXNlc1BhZ2VDYWNoZSkKLSAgICAgICAgUGFnZUNh
Y2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpOb25lKTsK
LX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEROU1ByZWZldGNoaW5nRW5hYmxlZChib29sIGRu
c1ByZWZldGNoaW5nRW5hYmxlZCkKLXsKLSAgICBpZiAobV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQg
PT0gZG5zUHJlZmV0Y2hpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Ruc1By
ZWZldGNoaW5nRW5hYmxlZCA9IGRuc1ByZWZldGNoaW5nRW5hYmxlZDsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLSNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0UmVzb3VyY2VV
c2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAobV9yZXNvdXJjZVVz
YWdlT3ZlcmxheVZpc2libGUgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9y
ZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUgPSB2aXNpYmxlOwotICAgIGlmIChtX3BhZ2UpCi0g
ICAgICAgIG1fcGFnZS0+c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKHZpc2libGUpOwot
fQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiB2b2lkIFNldHRpbmdzQmFzZTo6c2V0U2hv
dWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCBzaG91bGRVc2VIaWdoUmVzb2x1dGlvblRp
bWVycykKIHsKQEAgLTQxNCwyNyArMjc2LDYgQEAgdm9pZCBTZXR0aW5nc0Jhc2U6OnNldFNob3Vs
ZFVzZUhpZ2hSZXNvbAogfQogI2VuZGlmCiAKLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTdG9yYWdl
QmxvY2tpbmdQb2xpY3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBlbmFi
bGVkKQotewotICAgIGlmIChtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9PSBlbmFibGVkKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9IGVuYWJsZWQ7Ci0g
ICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5n
ZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRC
ZXlvbmRQYWdlKGJvb2wgc2hvdWxkRXh0ZW5kKQotewotICAgIGlmIChtX2JhY2tncm91bmRTaG91
bGRFeHRlbmRCZXlvbmRQYWdlID09IHNob3VsZEV4dGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKLQot
ICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRh
dGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsKLX0KLQogI2lmIFVTRShBVkZPVU5EQVRJ
T04pCiB2b2lkIFNldHRpbmdzQmFzZTo6c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CkBAIC00OTksMTQgKzM0MCw2IEBAIHZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNZWRpYUNh
cHR1cmVSZXF1aXIKIH0KICNlbmRpZgogCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0U2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9zY3JvbGxp
bmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKLQotICAgIGlmIChtX3BhZ2Ug
JiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCi0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1l
KCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGVuYWJsZWQp
OwotfQotCiAvLyBJdCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0aW5nIGRvZXNuJ3Qg
Y2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1lLgogLy8gVGhlIE1h
YyBwb3J0IHVzZXMgdGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVnaXN0ZXJpbmcg
cGxhdGZvcm0tZGVwZW5kZW50IHNjcm9sbGJhcgogLy8gb2JqZWN0cy4gVGhlcmVmb3JlLCBpZiB0
aGlzIGNoYW5nZXMgYXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlvbiBtYXkgbm90
IGhhcHBlbgpAQCAtNTUzLDMzICszODYsNiBAQCBib29sIFNldHRpbmdzQmFzZTo6c2hvdWxkUmVz
cGVjdFByaW9yaXR5CiAgICAgcmV0dXJuIGdTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJp
YnV0ZVNldHRlcnM7CiB9CiAKLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRIaWRkZW5QYWdlRE9NVGlt
ZXJUaHJvdHRsaW5nRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgaWYgKG1faGlkZGVuUGFnZURP
TVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1f
aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBmbGFnOwotICAgIGlmIChtX3Bh
Z2UpCi0gICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hh
bmdlZCgpOwotfQotCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0F1dG9JbmNyZWFzZXMoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VE
T01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzID09IGZsYWcpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsK
LSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEhpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgaWYgKG1f
aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID09IGZsYWcpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9
IGZsYWc7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlQ1NTQW5p
bWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCgpOwotfQotCiB2b2lkIFNldHRpbmdzQmFzZTo6
c2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCBmbGFnKQogewogICAg
IGdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZsYWc7CkBAIC02NjgsNCAr
NDc0LDEyMiBAQCB2b2lkIFNldHRpbmdzQmFzZTo6c2V0TWVkaWFDb250ZW50VHlwZXNSCiAgICAg
bV9tZWRpYUNvbnRlbnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCA9IGNvbnRlbnRUeXBl
czsKIH0KIAorCisKKy8vIE1BUksgLSBvbkNoYW5nZSBoYW5kbGVycworCit2b2lkIFNldHRpbmdz
QmFzZTo6c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCkKK3sKKyAgICBpZiAobV9wYWdl
KQorICAgICAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQor
Cit2b2lkIFNldHRpbmdzQmFzZTo6bWVkaWFUeXBlT3ZlcnJpZGVDaGFuZ2VkKCkKK3sKKyAgICBp
ZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9w
YWdlLT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgaWYgKHZpZXcpCisgICAgICAgIHZpZXctPnNl
dE1lZGlhVHlwZShtX3BhZ2UtPnNldHRpbmdzKCkubWVkaWFUeXBlT3ZlcnJpZGUoKSk7CisKKyAg
ICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCit2b2lkIFNl
dHRpbmdzQmFzZTo6aW1hZ2VzRW5hYmxlZENoYW5nZWQoKQoreworICAgIC8vIENoYW5naW5nIHRo
aXMgc2V0dGluZyB0byB0cnVlIG1pZ2h0IGltbWVkaWF0ZWx5IHN0YXJ0IG5ldyBsb2FkcyBmb3Ig
aW1hZ2VzIHRoYXQgaGFkIHByZXZpb3VzbHkgaGFkIGxvYWRpbmcgZGlzYWJsZWQuCisgICAgLy8g
SWYgdGhpcyBoYXBwZW5zIHdoaWxlIGEgV2ViVmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCBhbmQg
d2UgZG9uJ3Qga25vdyB0aGUgV2ViVmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCB0aGVzZSBuZXcg
bG9hZHMKKyAgICAvLyBjYW4gY2F1c2UgY3Jhc2hlcyBkb3duc3RyZWFtIHdoZW4gdGhlIFdlYlZp
ZXcgbWVtb3J5IGhhcyBhY3R1YWxseSBiZWVuIGZyZWUnZC4KKyAgICAvLyBPbmUgZXhhbXBsZSB3
aGVyZSB0aGlzIGNhbiBoYXBwZW4gaXMgaW4gTWFjIGFwcHMgdGhhdCBzdWJjbGFzcyBXZWJWaWV3
IHRoZW4gZG8gd29yayBpbiB0aGVpciBvdmVycmlkZGVuIGRlYWxsb2MgbWV0aG9kcy4KKyAgICAv
LyBTdGFydGluZyB0aGVzZSBsb2FkcyBzeW5jaHJvbm91c2x5IGlzIG5vdCBpbXBvcnRhbnQuIEJ5
IHB1dHRpbmcgaXQgb24gYSAwLWRlbGF5LCBwcm9wZXJseSBjbG9zaW5nIHRoZSBQYWdlIGNhbmNl
bHMgdGhlbQorICAgIC8vIGJlZm9yZSB0aGV5IGhhdmUgYSBjaGFuY2UgdG8gcmVhbGx5IHN0YXJ0
LgorICAgIC8vIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzYwNTcyIGZvciBtb3JlIGRpc2N1c3Np
b24uCisgICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3Mp
OworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVk
KCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSAmbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpLnNldEltYWdlc0VuYWJsZWQobV9wYWdlLT5zZXR0aW5ncygpLmFyZUlt
YWdlc0VuYWJsZWQoKSk7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJj
ZUxvYWRlcigpLnNldEF1dG9Mb2FkSW1hZ2VzKG1fcGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkoKSk7CisgICAgfQorfQorCit2b2lkIFNldHRpbmdzQmFzZTo6c2NyaXB0
RW5hYmxlZENoYW5nZWQoKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2h5
IGRvIHdlIG9ubHkgZG8gdGhpcyBvbiBpT1M/CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9w
YWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKKyNlbmRpZgorfQorCit2b2lk
IFNldHRpbmdzQmFzZTo6cGx1Z2luc0VuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBQYWdlOjpyZWZy
ZXNoUGx1Z2lucyhmYWxzZSk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjp1c2VyU3R5bGVTaGVl
dExvY2F0aW9uQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT51
c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6
dXNlc1BhZ2VDYWNoZUNoYW5nZWQoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fcGFnZS0+c2V0dGluZ3MoKS51c2VzUGFnZUNhY2hlKCkpCisgICAg
ICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNv
bjo6Tm9uZSk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpkbnNQcmVmZXRjaGluZ0VuYWJsZWRD
aGFuZ2VkKCkKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNo
aW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpyZXNvdXJjZVVzYWdl
T3ZlcmxheVZpc2libGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3Bh
Z2UtPnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShtX3BhZ2UtPnNldHRpbmdzKCkucmVz
b3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKCkpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6c3Rv
cmFnZUJsb2NraW5nUG9saWN5Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAg
bV9wYWdlLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0aW5n
c0Jhc2U6OmJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlQ2hhbmdlZCgpCit7CisgICAg
aWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnVwZGF0ZUV4
dGVuZEJhY2tncm91bmRJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6c2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZENoYW5nZWQoKQoreworICAgIGlmIChtX3Bh
Z2UgJiYgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCkpCisgICAgICAgIG1fcGFnZS0+bWFpbkZy
YW1lKCkudmlldygpLT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKG1fcGFn
ZS0+c2V0dGluZ3MoKS5zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpOworfQor
Cit2b2lkIFNldHRpbmdzQmFzZTo6aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hh
bmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlRE9N
VGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpo
aWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBp
ZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5z
aW9uU3RhdGVDaGFuZ2VkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkocmV2aXNpb24gMjIzNjI3KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDU1ICsxMzEs
MTUgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGljdG9ncmFwaEZvbnRG
YW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBwaWN0b2dyYXBoRm9udEZh
bWlseShVU2NyaXB0Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKIAotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBib29sIGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKTsK
LQotICAgIC8vIE9ubHkgc2V0IGJ5IExheW91dCBUZXN0cy4KLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFN0cmlu
ZyYgbWVkaWFUeXBlT3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92ZXJyaWRl
OyB9Ci0KLSAgICAvLyBVbmxpa2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1cHByZXNz
ZXMgdGhlIG5ldHdvcmsgbG9hZCBvZgotICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNhY2hlZCBp
bWFnZSB3aWxsIHN0aWxsIGJlIHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKLSAgICBib29sIGxv
YWRzSW1hZ2VzQXV0b21hdGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5OyB9Ci0KLSAgICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQgc2hvdWxk
IGNhbGwgU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQotICAgIC8vIGluc3Rl
YWQgb2YgdGhpcyBmdW5jdGlvbi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMo
KSBjaGVja3MgdGhlCi0gICAgLy8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hpbmcsIGFu
ZCBvdGhlciBpbXBvcnRhbnQgZGV0YWlscy4KLSAgICBib29sIGlzU2NyaXB0RW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNTY3JpcHRFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRTY3JpcHRFbmFibGVkKGJvb2wpOwotCi0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dEltYWdlc0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBhcmVJbWFnZXNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmVJbWFnZXNFbmFibGVkOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHNldFBsdWdpbnNFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2FyZVBsdWdpbnNFbmFibGVkOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEROU1ByZWZldGNoaW5nRW5hYmxlZChib29sKTsKLSAgICBib29sIGRuc1ByZWZl
dGNoaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkOyB9
Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29u
c3QgVVJMJik7Ci0gICAgY29uc3QgVVJMJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldE1pbmltdW1ET01UaW1lckludGVydmFsKFNlY29uZHMpOyAvLyBJbml0aWFsaXpl
ZCB0byBET01UaW1lcjo6ZGVmYXVsdE1pbmltdW1JbnRlcnZhbCgpLgogICAgIFNlY29uZHMgbWlu
aW11bURPTVRpbWVySW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1ET01UaW1lcklu
dGVydmFsOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExheW91dEludGVydmFsKFNl
Y29uZHMpOwogICAgIFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xh
eW91dEludGVydmFsOyB9CiAKLSAgICBib29sIGhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5h
YmxlZDsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nQXV0b0luY3JlYXNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0F1dG9JbmNyZWFzZXM7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKGJvb2wpOwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRVc2VzUGFnZUNhY2hlKGJvb2wpOwotICAgIGJvb2wgdXNlc1BhZ2VD
YWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1BhZ2VDYWNoZTsgfQotICAgICAgICAKLSNpZiBF
TkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgYm9vbCByZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2li
bGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZTsgfQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wp
OwotI2VuZGlmCisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0VGV4dEF1
dG9zaXppbmdFbmFibGVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IGRlZmF1
bHRNaW5pbXVtWm9vbUZvbnRTaXplKCk7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgc3RhdGlj
IHZvaWQgc2V0U2hvdWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7CkBAIC0xOTUsOSAr
MTU1LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0
aW9uU2hvdWxkVGhyb3coKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3Vu
ZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoYm9vbCk7Ci0gICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxk
RXh0ZW5kQmV5b25kUGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVu
ZEJleW9uZFBhZ2U7IH0KLQogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHZvaWQgc2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGZsYWcpOwogICAgIHN0
YXRpYyBib29sIGlzQVZGb3VuZGF0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25F
bmFibGVkOyB9CkBAIC0yMjksMTggKzE4Niw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgdm9pZCBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wpOwogICAgIHN0YXRp
YyBib29sIHVzZXNNb2NrU2Nyb2xsQW5pbWF0b3IoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tp
bmdQb2xpY3kpOwotICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgc3Rv
cmFnZUJsb2NraW5nUG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQmxvY2tpbmdQb2xp
Y3k7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZChib29sKTsKLSAgICBib29sIHNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2lu
Z0VuYWJsZWQoKSB7IHJldHVybiBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQ7
IH0KLQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFJlc3BlY3RQcmlv
cml0eUluQ1NTQXR0cmlidXRlU2V0dGVycyhib29sKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRS
ZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoKTsKIAotICAgIGJvb2wgaGlkZGVu
UGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9oaWRk
ZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldEhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChib29sKTsK
LQogICAgIHN0YXRpYyBib29sIGxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKCkg
eyByZXR1cm4gZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOyB9CiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVu
YWJsZWQoYm9vbCk7CiAKQEAgLTI5NiwzNiArMjQ0LDMzIEBAIHByb3RlY3RlZDoKIAogICAgIHZv
aWQgaW5pdGlhbGl6ZURlZmF1bHRGb250RmFtaWxpZXMoKTsKIAorICAgIHZvaWQgaW1hZ2VMb2Fk
aW5nU2V0dGluZ3NUaW1lckZpcmVkKCk7CisKKyAgICAvLyBIZWxwZXJzIHVzZWQgYnkgZ2VuZXJh
dGVkIFNldHRpbmdzLmNwcC4KKyAgICB2b2lkIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cygpOworICAgIHZvaWQgbWVkaWFUeXBlT3ZlcnJpZGVDaGFuZ2VkKCk7CisgICAgdm9pZCBpbWFn
ZXNFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc2NyaXB0RW5hYmxlZENoYW5nZWQoKTsKKyAg
ICB2b2lkIHBsdWdpbnNFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgdXNlclN0eWxlU2hlZXRM
b2NhdGlvbkNoYW5nZWQoKTsKKyAgICB2b2lkIHVzZXNQYWdlQ2FjaGVDaGFuZ2VkKCk7CisgICAg
dm9pZCBkbnNQcmVmZXRjaGluZ0VuYWJsZWRDaGFuZ2VkKCk7CisgICAgdm9pZCByZXNvdXJjZVVz
YWdlT3ZlcmxheVZpc2libGVDaGFuZ2VkKCk7CisgICAgdm9pZCBzdG9yYWdlQmxvY2tpbmdQb2xp
Y3lDaGFuZ2VkKCk7CisgICAgdm9pZCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZUNo
YW5nZWQoKTsKKyAgICB2b2lkIHNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFu
Z2VkKCk7CisgICAgdm9pZCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2Vk
KCk7CisgICAgdm9pZCBoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWRDaGFu
Z2VkKCk7CisKICAgICBQYWdlKiBtX3BhZ2U7CiAKLSAgICBTdHJpbmcgbV9tZWRpYVR5cGVPdmVy
cmlkZSB7ICJzY3JlZW4iIH07Ci0gICAgVVJMIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKICAg
ICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Rm9udEdlbmVyaWNGYW1pbGllcz4gbV9mb250R2VuZXJp
Y0ZhbWlsaWVzOwotICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgbV9z
dG9yYWdlQmxvY2tpbmdQb2xpY3kgeyBTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9yYWdlIH07
CiAgICAgU2Vjb25kcyBtX2xheW91dEludGVydmFsOwogICAgIFNlY29uZHMgbV9taW5pbXVtRE9N
VGltZXJJbnRlcnZhbDsKIAotICAgIGJvb2wgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgOiAx
OwotICAgIGJvb2wgbV9hcmVJbWFnZXNFbmFibGVkIDogMTsKLSAgICBib29sIG1fYXJlUGx1Z2lu
c0VuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9pc1NjcmlwdEVuYWJsZWQgOiAxOwotICAgIGJvb2wg
bV91c2VzUGFnZUNhY2hlIDogMTsKLSAgICBib29sIG1fc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yIDogMTsKLSAgICBib29sIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgOiAx
OwotICAgIGJvb2wgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9zY3Jv
bGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkIDogMTsKLQogICAgIFRpbWVyIG1fc2V0SW1h
Z2VMb2FkaW5nU2V0dGluZ3NUaW1lcjsKLSAgICB2b2lkIGltYWdlTG9hZGluZ1NldHRpbmdzVGlt
ZXJGaXJlZCgpOwotCi0gICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFi
bGVkIDogMTsKLSAgICBib29sIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFi
bGVkIDogMTsKLQotI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLSAgICBib29sIG1fcmVzb3Vy
Y2VVc2FnZU92ZXJsYXlWaXNpYmxlIHsgZmFsc2UgfTsKLSNlbmRpZgogCi0gICAgYm9vbCBtX2hp
ZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzIHsgZmFsc2UgfTsKKyAgICBW
ZWN0b3I8Q29udGVudFR5cGU+IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1
cHBvcnQ7CiAKICNpZiBVU0UoQVZGT1VOREFUSU9OKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBib29sIGdBVkZvdW5kYXRpb25FbmFibGVkOwpAQCAtMzY0LDggKzMwOSw2IEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgYm9vbCBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7
CiAgICAgc3RhdGljIGJvb2wgZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsK
ICAgICBzdGF0aWMgYm9vbCBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGU7Ci0KLSAgICBWZWN0b3I8
Q29udGVudFR5cGU+IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7
CiB9OwogCiBpbmxpbmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9zdExvYWRDUFVVc2FnZU1lYXN1
cmVtZW50RW5hYmxlZCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324168</attachid>
            <date>2017-10-18 14:43:41 -0700</date>
            <delta_ts>2017-10-18 18:11:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177766-20171018144340.patch</filename>
            <type>text/plain</type>
            <size>30698</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzYyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTEwLTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBDb252ZXJ0IG1vcmUg
c2V0dGluZ3MgdG8gYmUgZ2VuZXJhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIFJlcGxhY2VzIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1l
cyBvcHRpb24gaW4gU2V0dGluZ3MuaW4KKyAgICAgICAgICB3aXRoIGEgbW9yZSBnZW5lcmljLCBv
bkNoYW5nZSwgd2hpY2ggYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgZnVuY3Rpb24KKyAgICAgICAg
ICBpbiBTZXR0aW5nc0Jhc2UgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzZXR0aW5nIGNo
YW5nZXMuIAorICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyBpcyB0aGVu
IHJlaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YKKyAgICAgICAgICBvbkNoYW5nZS4KKyAgICAgICAg
LSBNb3ZlcyBtb3N0IChhbGwgYnV0IHR3bykgb2YgdGhlIHJlbWFpbmluZyBub24tc3RhdGljIHNl
dHRpbmdzIGZyb20KKyAgICAgICAgICBTZXR0aW5nc0Jhc2UgdG8gU2V0dGluZ3MuaW4KKworICAg
ICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50
YXRpb25GaWxlLnB5OgorICAgICAgICAocHJpbnRTZXR0ZXJCb2R5KToKKyAgICAgICAgKiBTY3Jp
cHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0dGluZ3MucHk6CisgICAgICAgIChTZXR0aW5nLl9faW5p
dF9fKToKKyAgICAgICAgKFNldHRpbmcuX19zdHJfXyk6CisgICAgICAgIChTZXR0aW5nLnR5cGVJ
c1ZhbHVlVHlwZSk6CisgICAgICAgIChTZXR0aW5nLnNldHRlckZ1bmN0aW9uTmFtZSk6CisgICAg
ICAgIChTZXR0aW5nLnNldHRlckNoYW5nZUZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChTZXR0aW5n
Lmhhc0NvbXBsZXhTZXR0ZXIpOgorICAgICAgICAocGFyc2VJbnB1dCk6CisgICAgICAgIAorICAg
ICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBvbkNoYW5nZSBvcHRpb24uCisgICAgICAgIAor
ICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisKKyAgICAgICAgICAgIE1pZ3JhdGUgbW9zdCBv
ZiB0aGUgcmVtYWluaW5nIG5vbi1zdGF0aWMgc2V0dGluZ3MgdG8gU2V0dGluZ3MuaW4uCisgICAg
ICAgICAgICBBZG9wdCBvbkNoYW5nZSBvcHRpb24uCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdz
QmFzZS5jcHA6CisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jhc2UuaDoKKworICAgICAgICAgICAg
QWRkIGhlbHBlciBmdW5jdGlvbnMgZm9yIHVzZSBieSB0aGUgb25DaGFuZ2Ugb3B0aW9uLgorCiAy
MDE3LTEwLTE4ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIEtleSBldmVudHMgc2hvdWxkIG5vdCB1cGRhdGUgRG9jdW1lbnQubGFzdEhhbmRsZWRVc2Vy
R2VzdHVyZVRpbWVzdGFtcCB1bmxlc3Mga2V5IGV2ZW50IGlzIGhhbmRsZWQKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVt
ZW50YXRpb25GaWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvR2Vu
ZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50YXRpb25GaWxlLnB5CShyZXZp
c2lvbiAyMjM2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3Mv
R2VuZXJhdGVTZXR0aW5nc0ltcGxlbWVudGF0aW9uRmlsZS5weQkod29ya2luZyBjb3B5KQpAQCAt
MTUxLDYgKzE1MSw3IEBAIGRlZiBwcmludFNldHRlckJvZHkob3V0cHV0RmlsZSwgc2V0dGluZykK
ICAgICAgICAgcmV0dXJuCiAKICAgICBzZXR0ZXJGdW5jdGlvbk5hbWUgPSBzZXR0aW5nLnNldHRl
ckZ1bmN0aW9uTmFtZSgpCisgICAgY2hhbmdlRnVuY3Rpb25OYW1lID0gc2V0dGluZy5zZXR0ZXJD
aGFuZ2VGdW5jdGlvbk5hbWUoKQogCiAgICAgaWYgc2V0dGluZy50eXBlSXNWYWx1ZVR5cGUoKToK
ICAgICAgICAgb3V0cHV0RmlsZS53cml0ZSgidm9pZCBTZXR0aW5nczo6IiArIHNldHRlckZ1bmN0
aW9uTmFtZSArICIoIiArIHNldHRpbmcudHlwZSArICIgIiArIHNldHRpbmcubmFtZSArICIpXG4i
KQpAQCAtMTYxLDcgKzE2Miw3IEBAIGRlZiBwcmludFNldHRlckJvZHkob3V0cHV0RmlsZSwgc2V0
dGluZykKICAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgaWYgKG1fIiArIHNldHRpbmcubmFtZSAr
ICIgPT0gIiArIHNldHRpbmcubmFtZSArICIpXG4iKQogICAgIG91dHB1dEZpbGUud3JpdGUoIiAg
ICAgICAgcmV0dXJuO1xuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgbV8iICsgc2V0dGlu
Zy5uYW1lICsgIiA9ICIgKyBzZXR0aW5nLm5hbWUgKyAiO1xuIikKLSAgICBvdXRwdXRGaWxlLndy
aXRlKCIgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTtcbiIpCisg
ICAgb3V0cHV0RmlsZS53cml0ZSgiICAgICIgKyBjaGFuZ2VGdW5jdGlvbk5hbWUgKyAiKCk7XG4i
KQogICAgIG91dHB1dEZpbGUud3JpdGUoIn1cblxuIikKIAogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0dGluZ3MucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL1NldHRpbmdzLnB5CShyZXZpc2lv
biAyMjM2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0
dGluZ3MucHkJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgU2V0dGluZzoK
ICAgICAgICAgc2VsZi50eXBlID0gJ2Jvb2wnCiAgICAgICAgIHNlbGYuaW5pdGlhbCA9IE5vbmUK
ICAgICAgICAgc2VsZi5jb25kaXRpb25hbCA9IE5vbmUKLSAgICAgICAgc2VsZi5zZXROZWVkc1N0
eWxlUmVjYWxjSW5BbGxGcmFtZXMgPSBOb25lCisgICAgICAgIHNlbGYub25DaGFuZ2UgPSBOb25l
CiAgICAgICAgIHNlbGYuZ2V0dGVyID0gTm9uZQogCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CkBA
IC03MywyMCArNzMsMjEgQEAgY2xhc3MgU2V0dGluZzoKICAgICAgICAgICAgIHJlc3VsdCArPSAn
IElOSVQ6JyArIHNlbGYuaW5pdGlhbAogICAgICAgICBpZiAoc2VsZi5jb25kaXRpb25hbCk6CiAg
ICAgICAgICAgICByZXN1bHQgKz0gJyBDT05EOicgKyBzZWxmLmNvbmRpdGlvbmFsCi0gICAgICAg
IGlmIChzZWxmLnNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyk6Ci0gICAgICAgICAgICBy
ZXN1bHQgKz0gJyBSRUNBTEM6JyArIHNlbGYuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVz
CisgICAgICAgIGlmIChzZWxmLm9uQ2hhbmdlKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAnIENI
QU5HRTonICsgc2VsZi5vbkNoYW5nZQogICAgICAgICBpZiAoc2VsZi5nZXR0ZXIpOgogICAgICAg
ICAgICAgcmVzdWx0ICs9ICcgR0VUVEVSOicgKyBzZWxmLmdldHRlcgogICAgICAgICByZXR1cm4g
cmVzdWx0CiAKLSAgICBkZWYgaGFzQ29tcGxleFNldHRlcihzZWxmKToKLSAgICAgICAgcmV0dXJu
IHNlbGYuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzCi0KICAgICBkZWYgdHlwZUlzVmFs
dWVUeXBlKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi50eXBlICE9ICdTdHJpbmcnCisgICAg
ICAgIGlmIHNlbGYudHlwZSA9PSAnU3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQor
ICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ1VSTCc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UK
KyAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIGRlZiBzZXR0ZXJGdW5jdGlvbk5hbWUoc2VsZik6
Ci0gICAgICAgIGZvciBwcmVmaXggaW4gWydjc3MnLCAneHNzJywgJ2Z0cCcsICdkb20nXToKKyAg
ICAgICAgZm9yIHByZWZpeCBpbiBbJ2NzcycsICd4c3MnLCAnZnRwJywgJ2RvbScsICdkbnMnXToK
ICAgICAgICAgICAgIGlmIHNlbGYubmFtZS5zdGFydHN3aXRoKHByZWZpeCk6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuICdzZXQnICsgdXBwZXJjYXNlRmlyc3ROKHNlbGYubmFtZSwgbGVuKHByZWZp
eCkpCiAgICAgICAgIHJldHVybiAnc2V0JyArIHVwcGVyY2FzZUZpcnN0TihzZWxmLm5hbWUsIDEp
CkBAIC05NCw2ICs5NSwxMiBAQCBjbGFzcyBTZXR0aW5nOgogICAgIGRlZiBnZXR0ZXJGdW5jdGlv
bk5hbWUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmdldHRlciBvciBzZWxmLm5hbWUKIAor
ICAgIGRlZiBzZXR0ZXJDaGFuZ2VGdW5jdGlvbk5hbWUoc2VsZik6CisgICAgICAgIHJldHVybiBz
ZWxmLm9uQ2hhbmdlCisKKyAgICBkZWYgaGFzQ29tcGxleFNldHRlcihzZWxmKToKKyAgICAgICAg
cmV0dXJuIHNlbGYub25DaGFuZ2UgIT0gTm9uZQorCiAgICAgZGVmIGlkbFR5cGUoc2VsZik6CiAg
ICAgICAgICMgRklYTUU6IEFkZCBzdXBwb3J0IGZvciBtb3JlIHR5cGVzIGluY2x1ZGluZyBlbnVt
ZXJhdGUgdHlwZXMuCiAgICAgICAgIGlmIHNlbGYudHlwZSA9PSAnaW50JzoKQEAgLTE0NCw4ICsx
NTEsOCBAQCBkZWYgcGFyc2VJbnB1dChpbnB1dCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXR0aW5nLmluaXRpYWwgPSB2YWx1ZQogICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAn
Y29uZGl0aW9uYWwnKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuY29uZGl0aW9u
YWwgPSB2YWx1ZQotICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnc2V0TmVlZHNTdHls
ZVJlY2FsY0luQWxsRnJhbWVzJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNl
dE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyA9IHZhbHVlCisgICAgICAgICAgICAgICAgICAg
IGlmIChuYW1lID09ICdvbkNoYW5nZScpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGlu
Zy5vbkNoYW5nZSA9IHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09ICdnZXR0
ZXInKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcuZ2V0dGVyID0gdmFsdWUKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCShyZXZpc2lvbiAyMjM2MjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMCArMzUsMTAg
QEAgZGV2aWNlSGVpZ2h0IHR5cGU9aW50LCBpbml0aWFsPTAKICMgc2luY2UgdGhlIG1lbW9yeSB1
c2VkIHdvbid0IGJlIHJlbGVhc2VkIHVudGlsIHRoZSBQYWdlIGlzIGRlc3Ryb3llZC4KIHNlc3Np
b25TdG9yYWdlUXVvdGEgdHlwZT11bnNpZ25lZCwgaW5pdGlhbD1TdG9yYWdlTWFwOjpub1F1b3Rh
CiAKLW1pbmltdW1Gb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0wLCBzZXROZWVkc1N0eWxlUmVj
YWxjSW5BbGxGcmFtZXM9MQotbWluaW11bUxvZ2ljYWxGb250U2l6ZSB0eXBlPWludCwgaW5pdGlh
bD0wLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotZGVmYXVsdEZvbnRTaXplIHR5
cGU9aW50LCBpbml0aWFsPTE2LCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotZGVm
YXVsdEZpeGVkRm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgc2V0TmVlZHNTdHlsZVJlY2Fs
Y0luQWxsRnJhbWVzPTEKK21pbmltdW1Gb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0wLCBvbkNo
YW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK21pbmltdW1Mb2dpY2FsRm9udFNp
emUgdHlwZT1pbnQsIGluaXRpYWw9MCwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxs
RnJhbWVzCitkZWZhdWx0Rm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MTYsIG9uQ2hhbmdlPXNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcworZGVmYXVsdEZpeGVkRm9udFNpemUgdHlwZT1p
bnQsIGluaXRpYWw9MCwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAK
IGVkaXRpbmdCZWhhdmlvclR5cGUgdHlwZT1FZGl0aW5nQmVoYXZpb3JUeXBlLCBpbml0aWFsPWVk
aXRpbmdCZWhhdmlvclR5cGVGb3JQbGF0Zm9ybSgpCiBtYXhpbXVtSFRNTFBhcnNlckRPTVRyZWVE
ZXB0aCB0eXBlPXVuc2lnbmVkLCBpbml0aWFsPWRlZmF1bHRNYXhpbXVtSFRNTFBhcnNlckRPTVRy
ZWVEZXB0aApAQCAtNTksMTQgKzU5LDE2IEBAIHNob3VsZFByaW50QmFja2dyb3VuZHMgaW5pdGlh
bD1mYWxzZQogdXNlc0Rhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUgaW5pdGlhbD1m
YWxzZSwgY29uZGl0aW9uYWw9REFTSEJPQVJEX1NVUFBPUlQKIGNsaXBib2FyZEFjY2Vzc1BvbGlj
eSB0eXBlPUNsaXBib2FyZEFjY2Vzc1BvbGljeSwgaW5pdGlhbD1DbGlwYm9hcmRBY2Nlc3NQb2xp
Y3k6OlJlcXVpcmVzVXNlckdlc3R1cmUKIAotdGV4dEFyZWFzQXJlUmVzaXphYmxlIGluaXRpYWw9
ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1hdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZCBpbml0aWFsPXRydWUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0x
Ci1hY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCBpbml0aWFsPXRydWUsIHNldE5lZWRzU3R5
bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1hY2NlbGVyYXRlZENvbXBvc2l0ZWRBbmltYXRpb25zRW5h
YmxlZCBpbml0aWFsPXRydWUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1zaG93
RGVidWdCb3JkZXJzIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1l
cz0xCi1zaG93UmVwYWludENvdW50ZXIgaW5pdGlhbD1mYWxzZSwgc2V0TmVlZHNTdHlsZVJlY2Fs
Y0luQWxsRnJhbWVzPTEKK3RleHRBcmVhc0FyZVJlc2l6YWJsZSBpbml0aWFsPWZhbHNlLCBvbkNo
YW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK2F1dGhvckFuZFVzZXJTdHlsZXNF
bmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJh
bWVzCit1c2VyU3R5bGVTaGVldExvY2F0aW9uIHR5cGU9VVJMLCBvbkNoYW5nZT11c2VyU3R5bGVT
aGVldExvY2F0aW9uQ2hhbmdlZAorYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgaW5pdGlh
bD10cnVlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKK2FjY2VsZXJh
dGVkQ29tcG9zaXRlZEFuaW1hdGlvbnNFbmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFuZ2U9c2V0
TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaG93RGVidWdCb3JkZXJzIGluaXRpYWw9ZmFs
c2UsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcworc2hvd1JlcGFpbnRD
b3VudGVyIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZy
YW1lcwogdmlzaWJsZURlYnVnT3ZlcmxheVJlZ2lvbnMgdHlwZT1EZWJ1Z092ZXJsYXlSZWdpb25z
LCBpbml0aWFsPTAKIHNob3dUaWxlZFNjcm9sbGluZ0luZGljYXRvciBpbml0aWFsPWZhbHNlCis3
MXJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1yZXNv
dXJjZVVzYWdlT3ZlcmxheVZpc2libGVDaGFuZ2VkLCBjb25kaXRpb249UkVTT1VSQ0VfVVNBR0UK
IAogIyBUaGlzIGlzIGEgcXVpcmsgd2UgYXJlIHByby1hY3RpdmVseSBhcHBseWluZyB0byBvbGQg
YXBwbGljYXRpb25zLiBJdCBjaGFuZ2VzIGtleWJvYXJkIGV2ZW50IGRpc3BhdGNoaW5nLAogIyBt
YWtpbmcga2V5SWRlbnRpZmllciBhdmFpbGFibGUgb24ga2V5cHJlc3MgZXZlbnRzLCBtYWtpbmcg
Y2hhckNvZGUgYXZhaWxhYmxlIG9uIGtleWRvd24va2V5dXAgZXZlbnRzLApAQCAtMTk5LDEzICsy
MDEsMTMgQEAgc2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCBpbml0aWFsPQogdXNlTGVn
YWN5QmFja2dyb3VuZFNpemVTaG9ydGhhbmRCZWhhdmlvciBpbml0aWFsPWZhbHNlCiBmaXhlZEJh
Y2tncm91bmRzUGFpbnRSZWxhdGl2ZVRvRG9jdW1lbnQgaW5pdGlhbD1kZWZhdWx0Rml4ZWRCYWNr
Z3JvdW5kc1BhaW50UmVsYXRpdmVUb0RvY3VtZW50CiAKLXRleHRBdXRvc2l6aW5nRW5hYmxlZCBp
bml0aWFsPWRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKSwgc2V0TmVlZHNTdHlsZVJlY2Fs
Y0luQWxsRnJhbWVzPTEsIGNvbmRpdGlvbmFsPVRFWFRfQVVUT1NJWklORwotdGV4dEF1dG9zaXpp
bmdXaW5kb3dTaXplT3ZlcnJpZGUgdHlwZT1JbnRTaXplLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5B
bGxGcmFtZXM9MSwgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0laSU5HCit0ZXh0QXV0b3NpemluZ0Vu
YWJsZWQgaW5pdGlhbD1kZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCksIG9uQ2hhbmdlPXNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcywgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0laSU5H
Cit0ZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVycmlkZSB0eXBlPUludFNpemUsIG9uQ2hhbmdl
PXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcywgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0la
SU5HCiBtaW5pbXVtWm9vbUZvbnRTaXplIHR5cGU9ZmxvYXQsIGluaXRpYWw9ZGVmYXVsdE1pbmlt
dW1ab29tRm9udFNpemUoKSwgY29uZGl0aW9uYWw9VEVYVF9BVVRPU0laSU5HCiAKLXN1YnBpeGVs
QW50aWFsaWFzZWRMYXllclRleHRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVS
ZWNhbGNJbkFsbEZyYW1lcz0xCi1zaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCBpbml0aWFsPXRydWUs
IHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCi1zaW1wbGVMaW5lTGF5b3V0RGVidWdC
b3JkZXJzRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFt
ZXM9MQorc3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQgaW5pdGlhbD1mYWxzZSwg
b25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaW1wbGVMaW5lTGF5b3V0
RW5hYmxlZCBpbml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZy
YW1lcworc2ltcGxlTGluZUxheW91dERlYnVnQm9yZGVyc0VuYWJsZWQgaW5pdGlhbD1mYWxzZSwg
b25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAKIHN1YnBpeGVsQ1NTT01F
bGVtZW50TWV0cmljc0VuYWJsZWQgaW5pdGlhbD1mYWxzZQogCkBAIC0yNzEsNyArMjczLDcgQEAg
dHJlYXRJUEFkZHJlc3NBc0RvbWFpbiBpbml0aWFsPWZhbHNlCiBtZWRpYVByZWxvYWRpbmdFbmFi
bGVkIGluaXRpYWw9ZmFsc2UKIAogIyBSdW50aW1lLWVuYWJsZWQgZmVhdHVyZXMKLXZpc3VhbFZp
ZXdwb3J0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFt
ZXM9MQordmlzdWFsVmlld3BvcnRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNldE5l
ZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBpbnB1dEV2ZW50c0VuYWJsZWQgaW5pdGlhbD10
cnVlCiAKQEAgLTMwOCw3ICszMTAsNyBAQCBzdG9yYWdlQWNjZXNzQVBJRW5hYmxlZCBpbml0aWFs
PWZhbHNlCiAKIHRpbWVXaXRob3V0TW91c2VNb3ZlbWVudEJlZm9yZUhpZGluZ0NvbnRyb2xzIHR5
cGU9U2Vjb25kcywgaW5pdGlhbD0zX3MgCiAKLWZvbnRGYWxsYmFja1ByZWZlcnNQaWN0b2dyYXBo
cyBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQorZm9udEZh
bGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNldE5lZWRz
UmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBmb250TG9hZFRpbWluZ092ZXJyaWRlIHR5cGU9Rm9u
dExvYWRUaW1pbmdPdmVycmlkZSwgaW5pdGlhbD1Gb250TG9hZFRpbWluZ092ZXJyaWRlOjpOb25l
CiBzaG91bGRJZ25vcmVGb250TG9hZENvbXBsZXRpb25zIGluaXRpYWw9ZmFsc2UKQEAgLTMyMCw2
ICszMjIsMzEgQEAgYXBwbGVQYXlDYXBhYmlsaXR5RGlzY2xvc3VyZUFsbG93ZWQgaW5pdAogamF2
YUVuYWJsZWQgaW5pdGlhbD1mYWxzZSwgZ2V0dGVyPWlzSmF2YUVuYWJsZWQKIGphdmFFbmFibGVk
Rm9yTG9jYWxGaWxlcyBpbml0aWFsPXRydWUsIGdldHRlcj1pc0phdmFFbmFibGVkRm9yTG9jYWxG
aWxlcwogCisjIFVubGlrZSB0aGUgaW1hZ2VzRW5hYmxlZCBzZXR0aW5nLCB0aGlzIG9ubHkgc3Vw
cHJlc3NlcyB0aGUgbmV0d29yayBsb2FkIG9mCisjIHRoZSBpbWFnZSBVUkwuIEEgY2FjaGVkIGlt
YWdlIHdpbGwgc3RpbGwgYmUgcmVuZGVyZWQgaWYgcmVxdWVzdGVkLgorbG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5IGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWltYWdlc0VuYWJsZWRDaGFuZ2VkCitp
bWFnZXNFbmFibGVkIGluaXRpYWw9dHJ1ZSwgZ2V0dGVyPWFyZUltYWdlc0VuYWJsZWQsIG9uQ2hh
bmdlPWltYWdlc0VuYWJsZWRDaGFuZ2VkCitzY3JpcHRFbmFibGVkIGluaXRpYWw9ZmFsc2UsIGdl
dHRlcj1pc1NjcmlwdEVuYWJsZWQsIG9uQ2hhbmdlPXNjcmlwdEVuYWJsZWRDaGFuZ2VkCitwbHVn
aW5zRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBnZXR0ZXI9YXJlUGx1Z2luc0VuYWJsZWQsIG9uQ2hh
bmdlPXBsdWdpbnNFbmFibGVkQ2hhbmdlZAorCit1c2VzUGFnZUNhY2hlIGluaXRpYWw9ZmFsc2Us
IG9uQ2hhbmdlPXVzZXNQYWdlQ2FjaGVDaGFuZ2VkCisKK2Ruc1ByZWZldGNoaW5nRW5hYmxlZCBp
bml0aWFsPWZhbHNlLCBvbkNoYW5nZT1kbnNQcmVmZXRjaGluZ0VuYWJsZWRDaGFuZ2VkCisKK2Jh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWJh
Y2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlQ2hhbmdlZAorCitzY3JvbGxpbmdQZXJmb3Jt
YW5jZUxvZ2dpbmdFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXNjcm9sbGluZ1BlcmZv
cm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2VkCisKK2hpZGRlblBhZ2VET01UaW1lclRocm90dGxp
bmdFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWhpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdTdGF0ZUNoYW5nZWQKK2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVh
c2VzIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdT
dGF0ZUNoYW5nZWQKK2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCBpbml0
aWFsPWZhbHNlLCBvbkNoYW5nZT1oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJs
ZWRDaGFuZ2VkCisKK3N0b3JhZ2VCbG9ja2luZ1BvbGljeSB0eXBlPVNlY3VyaXR5T3JpZ2luOjpT
dG9yYWdlQmxvY2tpbmdQb2xpY3ksIGluaXRpYWw9QWxsb3dBbGxTdG9yYWdlLCBvbkNoYW5nZT1z
dG9yYWdlQmxvY2tpbmdQb2xpY3lDaGFuZ2VkCisKKyMgT25seSBzZXQgYnkgTGF5b3V0IFRlc3Rz
LgorbWVkaWFUeXBlT3ZlcnJpZGUgdHlwZT1TdHJpbmcsIGluaXRpYWw9InNjcmVlbiIsIG9uQ2hh
bmdlPW1lZGlhVHlwZU92ZXJyaWRlQ2hhbmdlZAorCisKIGZvbnRSZW5kZXJpbmdNb2RlIHR5cGU9
Rm9udFJlbmRlcmluZ01vZGUsIGluaXRpYWw9Rm9udFJlbmRlcmluZ01vZGU6Ok5vcm1hbAogCiBw
cmVmZXJNSU1FVHlwZUZvckltYWdlcyBpbml0aWFsPWZhbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9TZXR0aW5nc0Jhc2UuY3BwCShyZXZpc2lvbiAyMjM2MjcpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL1NldHRpbmdzQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE5ICs2Myw2IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgc2V0SW1hZ2VMb2FkaW5nU2V0dGlu
Z3MoUGFnZSogcGFnZSkKLXsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCkt
PmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0SW1hZ2VzRW5hYmxlZChwYWdlLT5zZXR0aW5ncygp
LmFyZUltYWdlc0VuYWJsZWQoKSk7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRS
ZXNvdXJjZUxvYWRlcigpLnNldEF1dG9Mb2FkSW1hZ2VzKHBhZ2UtPnNldHRpbmdzKCkubG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5KCkpOwotICAgIH0KLX0KLQogc3RhdGljIHZvaWQgaW52YWxpZGF0
ZUFmdGVyR2VuZXJpY0ZhbWlseUNoYW5nZShQYWdlKiBwYWdlKQogewogICAgIGludmFsaWRhdGVG
b250Q2FzY2FkZUNhY2hlKCk7CkBAIC0xNDYsMTcgKzEzMyw3IEBAIFNldHRpbmdzQmFzZTo6U2V0
dGluZ3NCYXNlKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2ZvbnRHZW5lcmljRmFtaWxpZXMoc3RkOjpt
YWtlX3VuaXF1ZTxGb250R2VuZXJpY0ZhbWlsaWVzPigpKQogICAgICwgbV9sYXlvdXRJbnRlcnZh
bChsYXlvdXRTY2hlZHVsZVRocmVzaG9sZCkKICAgICAsIG1fbWluaW11bURPTVRpbWVySW50ZXJ2
YWwoRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKSkKLSAgICAsIG1fbG9hZHNJbWFn
ZXNBdXRvbWF0aWNhbGx5KGZhbHNlKQotICAgICwgbV9hcmVJbWFnZXNFbmFibGVkKHRydWUpCi0g
ICAgLCBtX2FyZVBsdWdpbnNFbmFibGVkKGZhbHNlKQotICAgICwgbV9pc1NjcmlwdEVuYWJsZWQo
ZmFsc2UpCi0gICAgLCBtX3VzZXNQYWdlQ2FjaGUoZmFsc2UpCi0gICAgLCBtX2JhY2tncm91bmRT
aG91bGRFeHRlbmRCZXlvbmRQYWdlKGZhbHNlKQotICAgICwgbV9kbnNQcmVmZXRjaGluZ0VuYWJs
ZWQoZmFsc2UpCi0gICAgLCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZmFs
c2UpCiAgICAgLCBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIoKnRoaXMsICZTZXR0aW5n
c0Jhc2U6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCkKLSAgICAsIG1faGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2hpZGRlblBhZ2VDU1NB
bmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChmYWxzZSkKIHsKICAgICAvLyBBIEZyYW1lIG1heSBu
b3QgaGF2ZSBiZWVuIGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBBdG9taWNTdHJp
bmcKICAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgpAQCAtMjcyLDg1ICsyNDks
NiBAQCBib29sIFNldHRpbmdzQmFzZTo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nCiB9CiAjZW5kaWYK
IAotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlT3ZlcnJpZGUpCi17Ci0gICAgaWYgKG1fbWVkaWFUeXBlT3ZlcnJpZGUgPT0gbWVk
aWFUeXBlT3ZlcnJpZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWVkaWFUeXBlT3ZlcnJp
ZGUgPSBtZWRpYVR5cGVPdmVycmlkZTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsK
LSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICB2aWV3LT5zZXRNZWRpYVR5cGUobWVkaWFUeXBlT3Zl
cnJpZGUpOwotICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci19
Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCBs
b2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkpCi17Ci0gICAgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkgPSBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHk7Ci0gICAgCi0gICAgLy8gQ2hhbmdpbmcgdGhp
cyBzZXR0aW5nIHRvIHRydWUgbWlnaHQgaW1tZWRpYXRlbHkgc3RhcnQgbmV3IGxvYWRzIGZvciBp
bWFnZXMgdGhhdCBoYWQgcHJldmlvdXNseSBoYWQgbG9hZGluZyBkaXNhYmxlZC4KLSAgICAvLyBJ
ZiB0aGlzIGhhcHBlbnMgd2hpbGUgYSBXZWJWaWV3IGlzIGJlaW5nIGRlYWxsb2MnZWQsIGFuZCB3
ZSBkb24ndCBrbm93IHRoZSBXZWJWaWV3IGlzIGJlaW5nIGRlYWxsb2MnZWQsIHRoZXNlIG5ldyBs
b2FkcwotICAgIC8vIGNhbiBjYXVzZSBjcmFzaGVzIGRvd25zdHJlYW0gd2hlbiB0aGUgV2ViVmll
dyBtZW1vcnkgaGFzIGFjdHVhbGx5IGJlZW4gZnJlZSdkLgotICAgIC8vIE9uZSBleGFtcGxlIHdo
ZXJlIHRoaXMgY2FuIGhhcHBlbiBpcyBpbiBNYWMgYXBwcyB0aGF0IHN1YmNsYXNzIFdlYlZpZXcg
dGhlbiBkbyB3b3JrIGluIHRoZWlyIG92ZXJyaWRkZW4gZGVhbGxvYyBtZXRob2RzLgotICAgIC8v
IFN0YXJ0aW5nIHRoZXNlIGxvYWRzIHN5bmNocm9ub3VzbHkgaXMgbm90IGltcG9ydGFudC4gIEJ5
IHB1dHRpbmcgaXQgb24gYSAwLWRlbGF5LCBwcm9wZXJseSBjbG9zaW5nIHRoZSBQYWdlIGNhbmNl
bHMgdGhlbQotICAgIC8vIGJlZm9yZSB0aGV5IGhhdmUgYSBjaGFuY2UgdG8gcmVhbGx5IHN0YXJ0
LgotICAgIC8vIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzYwNTcyIGZvciBtb3JlIGRpc2N1c3Np
b24uCi0gICAgbV9zZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3Mp
OwotfQotCi12b2lkIFNldHRpbmdzQmFzZTo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVk
KCkKLXsKLSAgICBzZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhtX3BhZ2UpOwotfQotCi12b2lkIFNl
dHRpbmdzQmFzZTo6c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKLXsKLSAg
ICBpZiAobV9pc1NjcmlwdEVuYWJsZWQgPT0gaXNTY3JpcHRFbmFibGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2lzU2NyaXB0RW5hYmxlZCA9IGlzU2NyaXB0RW5hYmxlZDsKLQotICAgIGlm
ICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9w
YWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLSNlbmRpZgotfQotCi12b2lk
IFNldHRpbmdzQmFzZTo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUltYWdlc0VuYWJsZWQpCi17
Ci0gICAgbV9hcmVJbWFnZXNFbmFibGVkID0gYXJlSW1hZ2VzRW5hYmxlZDsKLQotICAgIC8vIFNl
ZSBjb21tZW50IGluIHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseS4KLSAgICBtX3NldEltYWdl
TG9hZGluZ1NldHRpbmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGFyZVBsdWdpbnNFbmFibGVkKQotewotICAg
IGlmIChtX2FyZVBsdWdpbnNFbmFibGVkID09IGFyZVBsdWdpbnNFbmFibGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2FyZVBsdWdpbnNFbmFibGVkID0gYXJlUGx1Z2luc0VuYWJsZWQ7Ci0g
ICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMoZmFsc2UpOwotfQotCi12b2lkIFNldHRpbmdzQmFzZTo6
c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihjb25zdCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRp
b24pCi17Ci0gICAgaWYgKG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9PSB1c2VyU3R5bGVTaGVl
dExvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRp
b24gPSB1c2VyU3R5bGVTaGVldExvY2F0aW9uOwotCi0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAg
bV9wYWdlLT51c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpOwotfQotCiB2b2lkIFNldHRp
bmdzQmFzZTo6c2V0TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsK
ICAgICBhdXRvIG9sZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWluaW11bURPTVRp
bWVySW50ZXJ2YWwsIGludGVydmFsKTsKQEAgLTM3MSw0MiArMjY5LDYgQEAgdm9pZCBTZXR0aW5n
c0Jhc2U6OnNldExheW91dEludGVydmFsKFNlYwogICAgIG1fbGF5b3V0SW50ZXJ2YWwgPSBzdGQ6
Om1heChsYXlvdXRJbnRlcnZhbCwgbGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQpOwogfQogCi12b2lk
IFNldHRpbmdzQmFzZTo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCi17Ci0g
ICAgaWYgKG1fdXNlc1BhZ2VDYWNoZSA9PSB1c2VzUGFnZUNhY2hlKQotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIG1fdXNlc1BhZ2VDYWNoZSA9IHVzZXNQYWdlQ2FjaGU7Ci0KLSAgICBp
ZiAoIW1fcGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUp
Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmlu
Z1JlYXNvbjo6Tm9uZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRETlNQcmVmZXRjaGlu
Z0VuYWJsZWQoYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQpCi17Ci0gICAgaWYgKG1fZG5zUHJl
ZmV0Y2hpbmdFbmFibGVkID09IGRuc1ByZWZldGNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgPSBkbnNQcmVmZXRjaGluZ0VuYWJsZWQ7
Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5kbnNQcmVmZXRjaGluZ1N0YXRlQ2hh
bmdlZCgpOwotfQotCi0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBTZXR0aW5nc0Jh
c2U6OnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAg
aWYgKG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID09IHZpc2libGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID0gdmlzaWJsZTsKLSAg
ICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnNldFJlc291cmNlVXNhZ2VPdmVybGF5Vmlz
aWJsZSh2aXNpYmxlKTsKLX0KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogdm9pZCBTZXR0
aW5nc0Jhc2U6OnNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNl
SGlnaFJlc29sdXRpb25UaW1lcnMpCiB7CkBAIC00MTQsMjcgKzI3Niw2IEBAIHZvaWQgU2V0dGlu
Z3NCYXNlOjpzZXRTaG91bGRVc2VIaWdoUmVzb2wKIH0KICNlbmRpZgogCi12b2lkIFNldHRpbmdz
QmFzZTo6c2V0U3RvcmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxv
Y2tpbmdQb2xpY3kgZW5hYmxlZCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kg
PT0gZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdG9yYWdlQmxvY2tpbmdQb2xp
Y3kgPSBlbmFibGVkOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c3RvcmFnZUJs
b2NraW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRCYWNrZ3Jv
dW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZShib29sIHNob3VsZEV4dGVuZCkKLXsKLSAgICBpZiAo
bV9iYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9PSBzaG91bGRFeHRlbmQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgPSBz
aG91bGRFeHRlbmQ7Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLnZpZXcoKS0+dXBkYXRlRXh0ZW5kQmFja2dyb3VuZElmTmVjZXNzYXJ5KCk7Ci19Ci0KICNp
ZiBVU0UoQVZGT1VOREFUSU9OKQogdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEFWRm91bmRhdGlvbkVu
YWJsZWQoYm9vbCBlbmFibGVkKQogewpAQCAtNDk5LDE0ICszNDAsNiBAQCB2b2lkIFNldHRpbmdz
QmFzZTo6c2V0TWVkaWFDYXB0dXJlUmVxdWlyCiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0aW5nc0Jh
c2U6OnNldFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQot
ewotICAgIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci0K
LSAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQotICAgICAgICBt
X3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5n
RW5hYmxlZChlbmFibGVkKTsKLX0KLQogLy8gSXQncyB2ZXJ5IGltcG9ydGFudCB0aGF0IHRoaXMg
c2V0dGluZyBkb2Vzbid0IGNoYW5nZSBpbiB0aGUgbWlkZGxlIG9mIGEgZG9jdW1lbnQncyBsaWZl
dGltZS4KIC8vIFRoZSBNYWMgcG9ydCB1c2VzIHRoaXMgZmxhZyB3aGVuIHJlZ2lzdGVyaW5nIGFu
ZCBkZXJlZ2lzdGVyaW5nIHBsYXRmb3JtLWRlcGVuZGVudCBzY3JvbGxiYXIKIC8vIG9iamVjdHMu
IFRoZXJlZm9yZSwgaWYgdGhpcyBjaGFuZ2VzIGF0IGFuIHVuZXhwZWN0ZWQgdGltZSwgZGVyZWdp
c3RyYXRpb24gbWF5IG5vdCBoYXBwZW4KQEAgLTU1MywzMyArMzg2LDYgQEAgYm9vbCBTZXR0aW5n
c0Jhc2U6OnNob3VsZFJlc3BlY3RQcmlvcml0eQogICAgIHJldHVybiBnU2hvdWxkUmVzcGVjdFBy
aW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzOwogfQogCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0
SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGlm
IChtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID09IGZsYWcpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID0gZmxh
ZzsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRo
cm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEhpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzKGJvb2wgZmxhZykKLXsKLSAgICBp
ZiAobV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyA9PSBmbGFnKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0lu
Y3JlYXNlcyA9IGZsYWc7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5oaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NC
YXNlOjpzZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoYm9vbCBmbGFn
KQotewotICAgIGlmIChtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9
PSBmbGFnKQotICAgICAgICByZXR1cm47Ci0gICAgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvbkVuYWJsZWQgPSBmbGFnOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+
aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKTsKLX0KLQogdm9p
ZCBTZXR0aW5nc0Jhc2U6OnNldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKGJv
b2wgZmxhZykKIHsKICAgICBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgPSBm
bGFnOwpAQCAtNjY4LDQgKzQ3NCwxMjIgQEAgdm9pZCBTZXR0aW5nc0Jhc2U6OnNldE1lZGlhQ29u
dGVudFR5cGVzUgogICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBv
cnQgPSBjb250ZW50VHlwZXM7CiB9CiAKKworCisvLyBNQVJLIC0gb25DaGFuZ2UgaGFuZGxlcnMK
Kwordm9pZCBTZXR0aW5nc0Jhc2U6OnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpCit7
CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5B
bGxGcmFtZXMoKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6Om1lZGlhVHlwZU92ZXJyaWRlQ2hh
bmdlZCgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1l
VmlldyogdmlldyA9IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIGlmICh2aWV3KQor
ICAgICAgICB2aWV3LT5zZXRNZWRpYVR5cGUobV9wYWdlLT5zZXR0aW5ncygpLm1lZGlhVHlwZU92
ZXJyaWRlKCkpOworCisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMo
KTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OmltYWdlc0VuYWJsZWRDaGFuZ2VkKCkKK3sKKyAg
ICAvLyBDaGFuZ2luZyB0aGlzIHNldHRpbmcgdG8gdHJ1ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFy
dCBuZXcgbG9hZHMgZm9yIGltYWdlcyB0aGF0IGhhZCBwcmV2aW91c2x5IGhhZCBsb2FkaW5nIGRp
c2FibGVkLgorICAgIC8vIElmIHRoaXMgaGFwcGVucyB3aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcg
ZGVhbGxvYydlZCwgYW5kIHdlIGRvbid0IGtub3cgdGhlIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxv
YydlZCwgdGhlc2UgbmV3IGxvYWRzCisgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMgZG93bnN0cmVh
bSB3aGVuIHRoZSBXZWJWaWV3IG1lbW9yeSBoYXMgYWN0dWFsbHkgYmVlbiBmcmVlJ2QuCisgICAg
Ly8gT25lIGV4YW1wbGUgd2hlcmUgdGhpcyBjYW4gaGFwcGVuIGlzIGluIE1hYyBhcHBzIHRoYXQg
c3ViY2xhc3MgV2ViVmlldyB0aGVuIGRvIHdvcmsgaW4gdGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9j
IG1ldGhvZHMuCisgICAgLy8gU3RhcnRpbmcgdGhlc2UgbG9hZHMgc3luY2hyb25vdXNseSBpcyBu
b3QgaW1wb3J0YW50LiBCeSBwdXR0aW5nIGl0IG9uIGEgMC1kZWxheSwgcHJvcGVybHkgY2xvc2lu
ZyB0aGUgUGFnZSBjYW5jZWxzIHRoZW0KKyAgICAvLyBiZWZvcmUgdGhleSBoYXZlIGEgY2hhbmNl
IHRvIHJlYWxseSBzdGFydC4KKyAgICAvLyBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82MDU3MiBm
b3IgbW9yZSBkaXNjdXNzaW9uLgorICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OmltYWdlTG9hZGluZ1Nl
dHRpbmdzVGltZXJGaXJlZCgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKCFmcmFt
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmcmFtZS0+ZG9j
dW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJbWFnZXNFbmFibGVkKG1fcGFnZS0+
c2V0dGluZ3MoKS5hcmVJbWFnZXNFbmFibGVkKCkpOworICAgICAgICBmcmFtZS0+ZG9jdW1lbnQo
KS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRBdXRvTG9hZEltYWdlcyhtX3BhZ2UtPnNldHRp
bmdzKCkubG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCkpOworICAgIH0KK30KKwordm9pZCBTZXR0
aW5nc0Jhc2U6OnNjcmlwdEVuYWJsZWRDaGFuZ2VkKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBvbmx5IGRvIHRoaXMgb24gaU9TPworICAgIGlmIChtX3Bh
Z2UpCisgICAgICAgIG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OnBsdWdpbnNFbmFibGVkQ2hhbmdlZCgpCit7
CisgICAgUGFnZTo6cmVmcmVzaFBsdWdpbnMoZmFsc2UpOworfQorCit2b2lkIFNldHRpbmdzQmFz
ZTo6dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UpCisg
ICAgICAgIG1fcGFnZS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKTsKK30KKwordm9p
ZCBTZXR0aW5nc0Jhc2U6OnVzZXNQYWdlQ2FjaGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX3BhZ2UtPnNldHRpbmdzKCkudXNlc1Bh
Z2VDYWNoZSgpKQorICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93
KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6ZG5zUHJl
ZmV0Y2hpbmdFbmFibGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9w
YWdlLT5kbnNQcmVmZXRjaGluZ1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzQmFz
ZTo6cmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFn
ZSkKKyAgICAgICAgbV9wYWdlLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUobV9wYWdl
LT5zZXR0aW5ncygpLnJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSgpKTsKK30KKwordm9pZCBT
ZXR0aW5nc0Jhc2U6OnN0b3JhZ2VCbG9ja2luZ1BvbGljeUNoYW5nZWQoKQoreworICAgIGlmICht
X3BhZ2UpCisgICAgICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZUNo
YW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCku
dmlldygpLT51cGRhdGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBT
ZXR0aW5nc0Jhc2U6OnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2VkKCkK
K3sKKyAgICBpZiAobV9wYWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQorICAgICAg
ICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dn
aW5nRW5hYmxlZChtX3BhZ2UtPnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5n
RW5hYmxlZCgpKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OmhpZGRlblBhZ2VET01UaW1lclRo
cm90dGxpbmdTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFn
ZS0+aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lk
IFNldHRpbmdzQmFzZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkQ2hh
bmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlQ1NT
QW5pbWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgJKHJldmlzaW9uIDIyMzYy
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzMSw1NSArMTMxLDE1IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dFBpY3RvZ3JhcGhGb250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0g
VVNDUklQVF9DT01NT04pOwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYg
cGljdG9ncmFwaEZvbnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0VGV4dEF1dG9zaXppbmdF
bmFibGVkKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IGRlZmF1bHRNaW5pbXVt
Wm9vbUZvbnRTaXplKCk7Ci0KLSAgICAvLyBPbmx5IHNldCBieSBMYXlvdXQgVGVzdHMuCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmKTsK
LSAgICBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9t
ZWRpYVR5cGVPdmVycmlkZTsgfQotCi0gICAgLy8gVW5saWtlIGFyZUltYWdlc0VuYWJsZWQsIHRo
aXMgb25seSBzdXBwcmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQgb2YKLSAgICAvLyB0aGUgaW1hZ2Ug
VVJMLiAgQSBjYWNoZWQgaW1hZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBpZiByZXF1ZXN0ZWQu
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9v
bCk7Ci0gICAgYm9vbCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSBjb25zdCB7IHJldHVybiBt
X2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseTsgfQotCi0gICAgLy8gQ2xpZW50cyB0aGF0IGV4ZWN1
dGUgc2NyaXB0IHNob3VsZCBjYWxsIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4ZWN1dGVTY3JpcHRz
KCkKLSAgICAvLyBpbnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24uIFNjcmlwdENvbnRyb2xsZXI6OmNh
bkV4ZWN1dGVTY3JpcHRzKCkgY2hlY2tzIHRoZQotICAgIC8vIEhUTUwgc2FuZGJveCwgcGx1Zy1p
biBzYW5kYm94aW5nLCBhbmQgb3RoZXIgaW1wb3J0YW50IGRldGFpbHMuCi0gICAgYm9vbCBpc1Nj
cmlwdEVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU2NyaXB0RW5hYmxlZDsgfQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0U2NyaXB0RW5hYmxlZChib29sKTsKLQotCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgYXJlSW1hZ2Vz
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlSW1hZ2VzRW5hYmxlZDsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsKLSAgICBib29sIGFyZVBs
dWdpbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5zRW5hYmxlZDsgfQotCi0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoYm9vbCk7Ci0g
ICAgYm9vbCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Ruc1ByZWZl
dGNoaW5nRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKGNvbnN0IFVSTCYpOwotICAgIGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRM
b2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQotCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChTZWNvbmRz
KTsgLy8gSW5pdGlhbGl6ZWQgdG8gRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKS4K
ICAgICBTZWNvbmRzIG1pbmltdW1ET01UaW1lckludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9t
aW5pbXVtRE9NVGltZXJJbnRlcnZhbDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRM
YXlvdXRJbnRlcnZhbChTZWNvbmRzKTsKICAgICBTZWNvbmRzIGxheW91dEludGVydmFsKCkgY29u
c3QgeyByZXR1cm4gbV9sYXlvdXRJbnRlcnZhbDsgfQogCi0gICAgYm9vbCBoaWRkZW5QYWdlRE9N
VGltZXJUaHJvdHRsaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRp
bWVyVGhyb3R0bGluZ0VuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgaGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoKSBjb25zdCB7IHJldHVybiBtX2hpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzOyB9Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyhib29s
KTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlc1BhZ2VDYWNoZShib29sKTsKLSAg
ICBib29sIHVzZXNQYWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3VzZXNQYWdlQ2FjaGU7IH0K
LSAgICAgICAgCi0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotICAgIGJvb2wgcmVzb3VyY2VV
c2FnZU92ZXJsYXlWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVVzYWdlT3Zlcmxh
eVZpc2libGU7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlc291cmNlVXNhZ2VPdmVy
bGF5VmlzaWJsZShib29sKTsKLSNlbmRpZgorCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJv
b2wgZGVmYXVsdFRleHRBdXRvc2l6aW5nRW5hYmxlZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBmbG9hdCBkZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpOwogCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIHN0YXRpYyB2b2lkIHNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKGJv
b2wpOwpAQCAtMTk1LDkgKzE1NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdsb2Jh
bENvbnN0UmVkZWNsYXJhdGlvblNob3VsZFRocm93KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wpOwotICAgIGJvb2wg
YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tn
cm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlOyB9Ci0KICNpZiBVU0UoQVZGT1VOREFUSU9OKQog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9v
bCBmbGFnKTsKICAgICBzdGF0aWMgYm9vbCBpc0FWRm91bmRhdGlvbkVuYWJsZWQoKSB7IHJldHVy
biBnQVZGb3VuZGF0aW9uRW5hYmxlZDsgfQpAQCAtMjI5LDE4ICsxODYsOSBAQCBwdWJsaWM6CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgc2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcihi
b29sKTsKICAgICBzdGF0aWMgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdp
bjo6U3RvcmFnZUJsb2NraW5nUG9saWN5KTsKLSAgICBTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJs
b2NraW5nUG9saWN5IHN0b3JhZ2VCbG9ja2luZ1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rv
cmFnZUJsb2NraW5nUG9saWN5OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNjcm9s
bGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBzY3JvbGxpbmdQ
ZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkgeyByZXR1cm4gbV9zY3JvbGxpbmdQZXJmb3JtYW5j
ZUxvZ2dpbmdFbmFibGVkOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRT
aG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoYm9vbCk7CiAgICAgc3Rh
dGljIGJvb2wgc2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCk7CiAK
LSAgICBib29sIGhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkOyB9Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lv
bkVuYWJsZWQoYm9vbCk7Ci0KICAgICBzdGF0aWMgYm9vbCBsb3dQb3dlclZpZGVvQXVkaW9CdWZm
ZXJTaXplRW5hYmxlZCgpIHsgcmV0dXJuIGdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5h
YmxlZDsgfQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldExvd1Bvd2VyVmlkZW9B
dWRpb0J1ZmZlclNpemVFbmFibGVkKGJvb2wpOwogCkBAIC0yOTYsMzYgKzI0NCwzMyBAQCBwcm90
ZWN0ZWQ6CiAKICAgICB2b2lkIGluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCk7CiAKKyAg
ICB2b2lkIGltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCgpOworCisgICAgLy8gSGVscGVy
cyB1c2VkIGJ5IGdlbmVyYXRlZCBTZXR0aW5ncy5jcHAuCisgICAgdm9pZCBzZXROZWVkc1JlY2Fs
Y1N0eWxlSW5BbGxGcmFtZXMoKTsKKyAgICB2b2lkIG1lZGlhVHlwZU92ZXJyaWRlQ2hhbmdlZCgp
OworICAgIHZvaWQgaW1hZ2VzRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIHNjcmlwdEVuYWJs
ZWRDaGFuZ2VkKCk7CisgICAgdm9pZCBwbHVnaW5zRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lk
IHVzZXJTdHlsZVNoZWV0TG9jYXRpb25DaGFuZ2VkKCk7CisgICAgdm9pZCB1c2VzUGFnZUNhY2hl
Q2hhbmdlZCgpOworICAgIHZvaWQgZG5zUHJlZmV0Y2hpbmdFbmFibGVkQ2hhbmdlZCgpOworICAg
IHZvaWQgcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlQ2hhbmdlZCgpOworICAgIHZvaWQgc3Rv
cmFnZUJsb2NraW5nUG9saWN5Q2hhbmdlZCgpOworICAgIHZvaWQgYmFja2dyb3VuZFNob3VsZEV4
dGVuZEJleW9uZFBhZ2VDaGFuZ2VkKCk7CisgICAgdm9pZCBzY3JvbGxpbmdQZXJmb3JtYW5jZUxv
Z2dpbmdFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0
bGluZ1N0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgaGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3Bl
bnNpb25FbmFibGVkQ2hhbmdlZCgpOworCiAgICAgUGFnZSogbV9wYWdlOwogCi0gICAgU3RyaW5n
IG1fbWVkaWFUeXBlT3ZlcnJpZGUgeyAic2NyZWVuIiB9OwotICAgIFVSTCBtX3VzZXJTdHlsZVNo
ZWV0TG9jYXRpb247CiAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZvbnRHZW5lcmljRmFtaWxp
ZXM+IG1fZm9udEdlbmVyaWNGYW1pbGllczsKLSAgICBTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJs
b2NraW5nUG9saWN5IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5IHsgU2VjdXJpdHlPcmlnaW46OkFs
bG93QWxsU3RvcmFnZSB9OwogICAgIFNlY29uZHMgbV9sYXlvdXRJbnRlcnZhbDsKICAgICBTZWNv
bmRzIG1fbWluaW11bURPTVRpbWVySW50ZXJ2YWw7CiAKLSAgICBib29sIG1fbG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5IDogMTsKLSAgICBib29sIG1fYXJlSW1hZ2VzRW5hYmxlZCA6IDE7Ci0gICAg
Ym9vbCBtX2FyZVBsdWdpbnNFbmFibGVkIDogMTsKLSAgICBib29sIG1faXNTY3JpcHRFbmFibGVk
IDogMTsKLSAgICBib29sIG1fdXNlc1BhZ2VDYWNoZSA6IDE7Ci0gICAgYm9vbCBtX3Nob3dUaWxl
ZFNjcm9sbGluZ0luZGljYXRvciA6IDE7Ci0gICAgYm9vbCBtX2JhY2tncm91bmRTaG91bGRFeHRl
bmRCZXlvbmRQYWdlIDogMTsKLSAgICBib29sIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkIDogMTsK
LSAgICBib29sIG1fc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCA6IDE7Ci0KICAg
ICBUaW1lciBtX3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXI7Ci0gICAgdm9pZCBpbWFnZUxv
YWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgbV9oaWRkZW5QYWdlRE9NVGlt
ZXJUaHJvdHRsaW5nRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX2hpZGRlblBhZ2VDU1NBbmltYXRp
b25TdXNwZW5zaW9uRW5hYmxlZCA6IDE7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0g
ICAgYm9vbCBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYK
IAotICAgIGJvb2wgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyB7
IGZhbHNlIH07CisgICAgVmVjdG9yPENvbnRlbnRUeXBlPiBtX21lZGlhQ29udGVudFR5cGVzUmVx
dWlyaW5nSGFyZHdhcmVTdXBwb3J0OwogCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBnQVZGb3VuZGF0aW9uRW5hYmxlZDsKQEAgLTM2NCw4ICsz
MDksNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1
ZmZlclNpemVFbmFibGVkOwogICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RW5hYmxlZEVuYWJsZWQ7CiAgICAgc3RhdGljIGJvb2wgZ0FsbG93c0FueVNTTENlcnRpZmljYXRl
OwotCi0gICAgVmVjdG9yPENvbnRlbnRUeXBlPiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5n
SGFyZHdhcmVTdXBwb3J0OwogfTsKIAogaW5saW5lIGJvb2wgU2V0dGluZ3NCYXNlOjppc1Bvc3RM
b2FkQ1BVVXNhZ2VNZWFzdXJlbWVudEVuYWJsZWQoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324190</attachid>
            <date>2017-10-18 18:11:06 -0700</date>
            <delta_ts>2017-10-18 18:18:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177766-20171018181105.patch</filename>
            <type>text/plain</type>
            <size>30670</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzY0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTEwLTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBDb252ZXJ0IG1vcmUg
c2V0dGluZ3MgdG8gYmUgZ2VuZXJhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIFJlcGxhY2VzIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1l
cyBvcHRpb24gaW4gU2V0dGluZ3MuaW4KKyAgICAgICAgICB3aXRoIGEgbW9yZSBnZW5lcmljLCBv
bkNoYW5nZSwgd2hpY2ggYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgZnVuY3Rpb24KKyAgICAgICAg
ICBpbiBTZXR0aW5nc0Jhc2UgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzZXR0aW5nIGNo
YW5nZXMuIAorICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyBpcyB0aGVu
IHJlaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YKKyAgICAgICAgICBvbkNoYW5nZS4KKyAgICAgICAg
LSBNb3ZlcyBtb3N0IChhbGwgYnV0IHR3bykgb2YgdGhlIHJlbWFpbmluZyBub24tc3RhdGljIHNl
dHRpbmdzIGZyb20KKyAgICAgICAgICBTZXR0aW5nc0Jhc2UgdG8gU2V0dGluZ3MuaW4KKworICAg
ICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50
YXRpb25GaWxlLnB5OgorICAgICAgICAocHJpbnRTZXR0ZXJCb2R5KToKKyAgICAgICAgKiBTY3Jp
cHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0dGluZ3MucHk6CisgICAgICAgIChTZXR0aW5nLl9faW5p
dF9fKToKKyAgICAgICAgKFNldHRpbmcuX19zdHJfXyk6CisgICAgICAgIChTZXR0aW5nLnR5cGVJ
c1ZhbHVlVHlwZSk6CisgICAgICAgIChTZXR0aW5nLnNldHRlckZ1bmN0aW9uTmFtZSk6CisgICAg
ICAgIChTZXR0aW5nLnNldHRlckNoYW5nZUZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChTZXR0aW5n
Lmhhc0NvbXBsZXhTZXR0ZXIpOgorICAgICAgICAocGFyc2VJbnB1dCk6CisgICAgICAgIAorICAg
ICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBvbkNoYW5nZSBvcHRpb24uCisgICAgICAgIAor
ICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisKKyAgICAgICAgICAgIE1pZ3JhdGUgbW9zdCBv
ZiB0aGUgcmVtYWluaW5nIG5vbi1zdGF0aWMgc2V0dGluZ3MgdG8gU2V0dGluZ3MuaW4uCisgICAg
ICAgICAgICBBZG9wdCBvbkNoYW5nZSBvcHRpb24uCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdz
QmFzZS5jcHA6CisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jhc2UuaDoKKworICAgICAgICAgICAg
QWRkIGhlbHBlciBmdW5jdGlvbnMgZm9yIHVzZSBieSB0aGUgb25DaGFuZ2Ugb3B0aW9uLgorCiAy
MDE3LTEwLTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21l
IG9sZGVyIGhhcmR3YXJlIGNhbid0IGFjdHVhbGx5IHVzZSByZW5kZXJidWZmZXJzIGF0IHRoZSBz
aXplIHRoZXkgYWR2ZXJ0aXNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRl
U2V0dGluZ3MvR2VuZXJhdGVTZXR0aW5nc0ltcGxlbWVudGF0aW9uRmlsZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3MvR2VuZXJhdGVTZXR0
aW5nc0ltcGxlbWVudGF0aW9uRmlsZS5weQkocmV2aXNpb24gMjIzNjQwKQorKysgU291cmNlL1dl
YkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRlU2V0dGluZ3NJbXBsZW1lbnRh
dGlvbkZpbGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsNyBAQCBkZWYgcHJpbnRT
ZXR0ZXJCb2R5KG91dHB1dEZpbGUsIHNldHRpbmcpCiAgICAgICAgIHJldHVybgogCiAgICAgc2V0
dGVyRnVuY3Rpb25OYW1lID0gc2V0dGluZy5zZXR0ZXJGdW5jdGlvbk5hbWUoKQorICAgIGNoYW5n
ZUZ1bmN0aW9uTmFtZSA9IHNldHRpbmcuc2V0dGVyQ2hhbmdlRnVuY3Rpb25OYW1lKCkKIAogICAg
IGlmIHNldHRpbmcudHlwZUlzVmFsdWVUeXBlKCk6CiAgICAgICAgIG91dHB1dEZpbGUud3JpdGUo
InZvaWQgU2V0dGluZ3M6OiIgKyBzZXR0ZXJGdW5jdGlvbk5hbWUgKyAiKCIgKyBzZXR0aW5nLnR5
cGUgKyAiICIgKyBzZXR0aW5nLm5hbWUgKyAiKVxuIikKQEAgLTE2MSw3ICsxNjIsNyBAQCBkZWYg
cHJpbnRTZXR0ZXJCb2R5KG91dHB1dEZpbGUsIHNldHRpbmcpCiAgICAgb3V0cHV0RmlsZS53cml0
ZSgiICAgIGlmIChtXyIgKyBzZXR0aW5nLm5hbWUgKyAiID09ICIgKyBzZXR0aW5nLm5hbWUgKyAi
KVxuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgICAgIHJldHVybjtcbiIpCiAgICAgb3V0
cHV0RmlsZS53cml0ZSgiICAgIG1fIiArIHNldHRpbmcubmFtZSArICIgPSAiICsgc2V0dGluZy5u
YW1lICsgIjtcbiIpCi0gICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIG1fcGFnZS0+c2V0TmVlZHNS
ZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7XG4iKQorICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICAi
ICsgY2hhbmdlRnVuY3Rpb25OYW1lICsgIigpO1xuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCJ9
XG5cbiIpCiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdz
L1NldHRpbmdzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJh
dGVTZXR0aW5ncy9TZXR0aW5ncy5weQkocmV2aXNpb24gMjIzNjQwKQorKysgU291cmNlL1dlYkNv
cmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL1NldHRpbmdzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3ICs2NCw3IEBAIGNsYXNzIFNldHRpbmc6CiAgICAgICAgIHNlbGYudHlwZSA9ICdib29s
JwogICAgICAgICBzZWxmLmluaXRpYWwgPSBOb25lCiAgICAgICAgIHNlbGYuY29uZGl0aW9uYWwg
PSBOb25lCi0gICAgICAgIHNlbGYuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzID0gTm9u
ZQorICAgICAgICBzZWxmLm9uQ2hhbmdlID0gTm9uZQogICAgICAgICBzZWxmLmdldHRlciA9IE5v
bmUKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgpAQCAtNzMsMjAgKzczLDIxIEBAIGNsYXNzIFNl
dHRpbmc6CiAgICAgICAgICAgICByZXN1bHQgKz0gJyBJTklUOicgKyBzZWxmLmluaXRpYWwKICAg
ICAgICAgaWYgKHNlbGYuY29uZGl0aW9uYWwpOgogICAgICAgICAgICAgcmVzdWx0ICs9ICcgQ09O
RDonICsgc2VsZi5jb25kaXRpb25hbAotICAgICAgICBpZiAoc2VsZi5zZXROZWVkc1N0eWxlUmVj
YWxjSW5BbGxGcmFtZXMpOgotICAgICAgICAgICAgcmVzdWx0ICs9ICcgUkVDQUxDOicgKyBzZWxm
LnNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcworICAgICAgICBpZiAoc2VsZi5vbkNoYW5n
ZSk6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBDSEFOR0U6JyArIHNlbGYub25DaGFuZ2UKICAg
ICAgICAgaWYgKHNlbGYuZ2V0dGVyKToKICAgICAgICAgICAgIHJlc3VsdCArPSAnIEdFVFRFUjon
ICsgc2VsZi5nZXR0ZXIKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIGhhc0NvbXBs
ZXhTZXR0ZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnNldE5lZWRzU3R5bGVSZWNhbGNJ
bkFsbEZyYW1lcwotCiAgICAgZGVmIHR5cGVJc1ZhbHVlVHlwZShzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYudHlwZSAhPSAnU3RyaW5nJworICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ1N0cmlu
Zyc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICdV
UkwnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCiAKICAg
ICBkZWYgc2V0dGVyRnVuY3Rpb25OYW1lKHNlbGYpOgotICAgICAgICBmb3IgcHJlZml4IGluIFsn
Y3NzJywgJ3hzcycsICdmdHAnLCAnZG9tJ106CisgICAgICAgIGZvciBwcmVmaXggaW4gWydjc3Mn
LCAneHNzJywgJ2Z0cCcsICdkb20nLCAnZG5zJ106CiAgICAgICAgICAgICBpZiBzZWxmLm5hbWUu
c3RhcnRzd2l0aChwcmVmaXgpOgogICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVwcGVy
Y2FzZUZpcnN0TihzZWxmLm5hbWUsIGxlbihwcmVmaXgpKQogICAgICAgICByZXR1cm4gJ3NldCcg
KyB1cHBlcmNhc2VGaXJzdE4oc2VsZi5uYW1lLCAxKQpAQCAtOTQsNiArOTUsMTIgQEAgY2xhc3Mg
U2V0dGluZzoKICAgICBkZWYgZ2V0dGVyRnVuY3Rpb25OYW1lKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5nZXR0ZXIgb3Igc2VsZi5uYW1lCiAKKyAgICBkZWYgc2V0dGVyQ2hhbmdlRnVuY3Rp
b25OYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vbkNoYW5nZQorCisgICAgZGVmIGhh
c0NvbXBsZXhTZXR0ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9uQ2hhbmdlICE9IE5v
bmUKKwogICAgIGRlZiBpZGxUeXBlKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3IgbW9yZSB0eXBlcyBpbmNsdWRpbmcgZW51bWVyYXRlIHR5cGVzLgogICAgICAgICBpZiBz
ZWxmLnR5cGUgPT0gJ2ludCc6CkBAIC0xNDQsOCArMTUxLDggQEAgZGVmIHBhcnNlSW5wdXQoaW5w
dXQpOgogICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5pbml0aWFsID0gdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ2NvbmRpdGlvbmFsJyk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXR0aW5nLmNvbmRpdGlvbmFsID0gdmFsdWUKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gJ3NldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcycpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5zZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFt
ZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnb25DaGFuZ2UnKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcub25DaGFuZ2UgPSB2YWx1ZQogICAgICAg
ICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnZ2V0dGVyJyk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXR0aW5nLmdldHRlciA9IHZhbHVlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5p
bgkocmV2aXNpb24gMjIzNjQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBAIGRldmljZUhlaWdodCB0eXBlPWludCwg
aW5pdGlhbD0wCiAjIHNpbmNlIHRoZSBtZW1vcnkgdXNlZCB3b24ndCBiZSByZWxlYXNlZCB1bnRp
bCB0aGUgUGFnZSBpcyBkZXN0cm95ZWQuCiBzZXNzaW9uU3RvcmFnZVF1b3RhIHR5cGU9dW5zaWdu
ZWQsIGluaXRpYWw9U3RvcmFnZU1hcDo6bm9RdW90YQogCi1taW5pbXVtRm9udFNpemUgdHlwZT1p
bnQsIGluaXRpYWw9MCwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLW1pbmltdW1M
b2dpY2FsRm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgc2V0TmVlZHNTdHlsZVJlY2FsY0lu
QWxsRnJhbWVzPTEKLWRlZmF1bHRGb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0xNiwgc2V0TmVl
ZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLWRlZmF1bHRGaXhlZEZvbnRTaXplIHR5cGU9aW50
LCBpbml0aWFsPTAsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCittaW5pbXVtRm9u
dFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzCittaW5pbXVtTG9naWNhbEZvbnRTaXplIHR5cGU9aW50LCBpbml0aWFsPTAsIG9u
Q2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcworZGVmYXVsdEZvbnRTaXplIHR5
cGU9aW50LCBpbml0aWFsPTE2LCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFt
ZXMKK2RlZmF1bHRGaXhlZEZvbnRTaXplIHR5cGU9aW50LCBpbml0aWFsPTAsIG9uQ2hhbmdlPXNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBlZGl0aW5nQmVoYXZpb3JUeXBlIHR5cGU9
RWRpdGluZ0JlaGF2aW9yVHlwZSwgaW5pdGlhbD1lZGl0aW5nQmVoYXZpb3JUeXBlRm9yUGxhdGZv
cm0oKQogbWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGggdHlwZT11bnNpZ25lZCwgaW5pdGlh
bD1kZWZhdWx0TWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGgKQEAgLTU5LDE0ICs1OSwxNiBA
QCBzaG91bGRQcmludEJhY2tncm91bmRzIGluaXRpYWw9ZmFsc2UKIHVzZXNEYXNoYm9hcmRCYWNr
d2FyZENvbXBhdGliaWxpdHlNb2RlIGluaXRpYWw9ZmFsc2UsIGNvbmRpdGlvbmFsPURBU0hCT0FS
RF9TVVBQT1JUCiBjbGlwYm9hcmRBY2Nlc3NQb2xpY3kgdHlwZT1DbGlwYm9hcmRBY2Nlc3NQb2xp
Y3ksIGluaXRpYWw9Q2xpcGJvYXJkQWNjZXNzUG9saWN5OjpSZXF1aXJlc1VzZXJHZXN0dXJlCiAK
LXRleHRBcmVhc0FyZVJlc2l6YWJsZSBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxj
SW5BbGxGcmFtZXM9MQotYXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBz
ZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQgaW5pdGlhbD10cnVlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotYWNj
ZWxlcmF0ZWRDb21wb3NpdGVkQW5pbWF0aW9uc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBzZXROZWVk
c1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotc2hvd0RlYnVnQm9yZGVycyBpbml0aWFsPWZhbHNl
LCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotc2hvd1JlcGFpbnRDb3VudGVyIGlu
aXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCit0ZXh0QXJlYXNB
cmVSZXNpemFibGUgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzCithdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCBpbml0aWFsPXRydWUsIG9uQ2hh
bmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwordXNlclN0eWxlU2hlZXRMb2NhdGlv
biB0eXBlPVVSTCwgb25DaGFuZ2U9dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQKK2FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFuZ2U9c2V0TmVlZHNS
ZWNhbGNTdHlsZUluQWxsRnJhbWVzCithY2NlbGVyYXRlZENvbXBvc2l0ZWRBbmltYXRpb25zRW5h
YmxlZCBpbml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cworc2hvd0RlYnVnQm9yZGVycyBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2Fs
Y1N0eWxlSW5BbGxGcmFtZXMKK3Nob3dSZXBhaW50Q291bnRlciBpbml0aWFsPWZhbHNlLCBvbkNo
YW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKIHZpc2libGVEZWJ1Z092ZXJsYXlS
ZWdpb25zIHR5cGU9RGVidWdPdmVybGF5UmVnaW9ucywgaW5pdGlhbD0wCiBzaG93VGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3IgaW5pdGlhbD1mYWxzZQorcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxl
IGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZUNoYW5n
ZWQsIGNvbmRpdGlvbj1SRVNPVVJDRV9VU0FHRQogCiAjIFRoaXMgaXMgYSBxdWlyayB3ZSBhcmUg
cHJvLWFjdGl2ZWx5IGFwcGx5aW5nIHRvIG9sZCBhcHBsaWNhdGlvbnMuIEl0IGNoYW5nZXMga2V5
Ym9hcmQgZXZlbnQgZGlzcGF0Y2hpbmcsCiAjIG1ha2luZyBrZXlJZGVudGlmaWVyIGF2YWlsYWJs
ZSBvbiBrZXlwcmVzcyBldmVudHMsIG1ha2luZyBjaGFyQ29kZSBhdmFpbGFibGUgb24ga2V5ZG93
bi9rZXl1cCBldmVudHMsCkBAIC0xOTksMTMgKzIwMSwxMyBAQCBzZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkIGluaXRpYWw9CiB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJl
aGF2aW9yIGluaXRpYWw9ZmFsc2UKIGZpeGVkQmFja2dyb3VuZHNQYWludFJlbGF0aXZlVG9Eb2N1
bWVudCBpbml0aWFsPWRlZmF1bHRGaXhlZEJhY2tncm91bmRzUGFpbnRSZWxhdGl2ZVRvRG9jdW1l
bnQKIAotdGV4dEF1dG9zaXppbmdFbmFibGVkIGluaXRpYWw9ZGVmYXVsdFRleHRBdXRvc2l6aW5n
RW5hYmxlZCgpLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MSwgY29uZGl0aW9uYWw9
VEVYVF9BVVRPU0laSU5HCi10ZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVycmlkZSB0eXBlPUlu
dFNpemUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xLCBjb25kaXRpb25hbD1URVhU
X0FVVE9TSVpJTkcKK3RleHRBdXRvc2l6aW5nRW5hYmxlZCBpbml0aWFsPWRlZmF1bHRUZXh0QXV0
b3NpemluZ0VuYWJsZWQoKSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVz
LCBjb25kaXRpb25hbD1URVhUX0FVVE9TSVpJTkcKK3RleHRBdXRvc2l6aW5nV2luZG93U2l6ZU92
ZXJyaWRlIHR5cGU9SW50U2l6ZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJh
bWVzLCBjb25kaXRpb25hbD1URVhUX0FVVE9TSVpJTkcKIG1pbmltdW1ab29tRm9udFNpemUgdHlw
ZT1mbG9hdCwgaW5pdGlhbD1kZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpLCBjb25kaXRpb25h
bD1URVhUX0FVVE9TSVpJTkcKIAotc3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQg
aW5pdGlhbD1mYWxzZSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLXNpbXBsZUxp
bmVMYXlvdXRFbmFibGVkIGluaXRpYWw9dHJ1ZSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJh
bWVzPTEKLXNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkIGluaXRpYWw9ZmFsc2Us
IHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCitzdWJwaXhlbEFudGlhbGlhc2VkTGF5
ZXJUZXh0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMKK3NpbXBsZUxpbmVMYXlvdXRFbmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFu
Z2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaW1wbGVMaW5lTGF5b3V0RGVidWdC
b3JkZXJzRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMKIAogc3VicGl4ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZCBpbml0aWFs
PWZhbHNlCiAKQEAgLTI3MSw3ICsyNzMsNyBAQCB0cmVhdElQQWRkcmVzc0FzRG9tYWluIGluaXRp
YWw9ZmFsc2UKIG1lZGlhUHJlbG9hZGluZ0VuYWJsZWQgaW5pdGlhbD1mYWxzZQogCiAjIFJ1bnRp
bWUtZW5hYmxlZCBmZWF0dXJlcwotdmlzdWFsVmlld3BvcnRFbmFibGVkIGluaXRpYWw9ZmFsc2Us
IHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCit2aXN1YWxWaWV3cG9ydEVuYWJsZWQg
aW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAK
IGlucHV0RXZlbnRzRW5hYmxlZCBpbml0aWFsPXRydWUKIApAQCAtMzA4LDcgKzMxMCw3IEBAIHN0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkIGluaXRpYWw9ZmFsc2UKIAogdGltZVdpdGhvdXRNb3VzZU1v
dmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMgdHlwZT1TZWNvbmRzLCBpbml0aWFsPTNfcyAKIAot
Zm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5
bGVSZWNhbGNJbkFsbEZyYW1lcz0xCitmb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgaW5p
dGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAKIGZv
bnRMb2FkVGltaW5nT3ZlcnJpZGUgdHlwZT1Gb250TG9hZFRpbWluZ092ZXJyaWRlLCBpbml0aWFs
PUZvbnRMb2FkVGltaW5nT3ZlcnJpZGU6Ok5vbmUKIHNob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxl
dGlvbnMgaW5pdGlhbD1mYWxzZQpAQCAtMzIwLDYgKzMyMiwzMSBAQCBhcHBsZVBheUNhcGFiaWxp
dHlEaXNjbG9zdXJlQWxsb3dlZCBpbml0CiBqYXZhRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBnZXR0
ZXI9aXNKYXZhRW5hYmxlZAogamF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzIGluaXRpYWw9dHJ1ZSwg
Z2V0dGVyPWlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzCiAKKyMgVW5saWtlIHRoZSBpbWFnZXNF
bmFibGVkIHNldHRpbmcsIHRoaXMgb25seSBzdXBwcmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQgb2YK
KyMgdGhlIGltYWdlIFVSTC4gQSBjYWNoZWQgaW1hZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBp
ZiByZXF1ZXN0ZWQuCitsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgaW5pdGlhbD1mYWxzZSwgb25D
aGFuZ2U9aW1hZ2VzRW5hYmxlZENoYW5nZWQKK2ltYWdlc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBn
ZXR0ZXI9YXJlSW1hZ2VzRW5hYmxlZCwgb25DaGFuZ2U9aW1hZ2VzRW5hYmxlZENoYW5nZWQKK3Nj
cmlwdEVuYWJsZWQgaW5pdGlhbD1mYWxzZSwgZ2V0dGVyPWlzU2NyaXB0RW5hYmxlZCwgb25DaGFu
Z2U9c2NyaXB0RW5hYmxlZENoYW5nZWQKK3BsdWdpbnNFbmFibGVkIGluaXRpYWw9ZmFsc2UsIGdl
dHRlcj1hcmVQbHVnaW5zRW5hYmxlZCwgb25DaGFuZ2U9cGx1Z2luc0VuYWJsZWRDaGFuZ2VkCisK
K3VzZXNQYWdlQ2FjaGUgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9dXNlc1BhZ2VDYWNoZUNoYW5n
ZWQKKworZG5zUHJlZmV0Y2hpbmdFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWRuc1By
ZWZldGNoaW5nRW5hYmxlZENoYW5nZWQKKworYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2UgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2VDaGFuZ2VkCisKK3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQgaW5pdGlhbD1m
YWxzZSwgb25DaGFuZ2U9c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZENoYW5nZWQK
KworaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgaW5pdGlhbD1mYWxzZSwgb25D
aGFuZ2U9aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZAoraGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9
aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZAoraGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25FbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWhpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZENoYW5nZWQKKworc3RvcmFnZUJsb2NraW5n
UG9saWN5IHR5cGU9U2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSwgaW5pdGlh
bD1BbGxvd0FsbFN0b3JhZ2UsIG9uQ2hhbmdlPXN0b3JhZ2VCbG9ja2luZ1BvbGljeUNoYW5nZWQK
KworIyBPbmx5IHNldCBieSBMYXlvdXQgVGVzdHMuCittZWRpYVR5cGVPdmVycmlkZSB0eXBlPVN0
cmluZywgaW5pdGlhbD0ic2NyZWVuIiwgb25DaGFuZ2U9bWVkaWFUeXBlT3ZlcnJpZGVDaGFuZ2Vk
CisKKwogZm9udFJlbmRlcmluZ01vZGUgdHlwZT1Gb250UmVuZGVyaW5nTW9kZSwgaW5pdGlhbD1G
b250UmVuZGVyaW5nTW9kZTo6Tm9ybWFsCiAKIHByZWZlck1JTUVUeXBlRm9ySW1hZ2VzIGluaXRp
YWw9ZmFsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5jcHAJKHJldmlzaW9u
IDIyMzY0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsMTkgKzYzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgdm9pZCBzZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhQYWdlKiBwYWdlKQotewotICAgIGlmICgh
cGFnZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChGcmFtZSogZnJhbWUgPSAmcGFnZS0+
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKLSAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJ
bWFnZXNFbmFibGVkKHBhZ2UtPnNldHRpbmdzKCkuYXJlSW1hZ2VzRW5hYmxlZCgpKTsKLSAgICAg
ICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291cmNlTG9hZGVyKCkuc2V0QXV0b0xvYWRJ
bWFnZXMocGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSk7Ci0gICAg
fQotfQotCiBzdGF0aWMgdm9pZCBpbnZhbGlkYXRlQWZ0ZXJHZW5lcmljRmFtaWx5Q2hhbmdlKFBh
Z2UqIHBhZ2UpCiB7CiAgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKQEAgLTE0Niwx
NyArMTMzLDcgQEAgU2V0dGluZ3NCYXNlOjpTZXR0aW5nc0Jhc2UoUGFnZSogcGFnZSkKICAgICAs
IG1fZm9udEdlbmVyaWNGYW1pbGllcyhzdGQ6Om1ha2VfdW5pcXVlPEZvbnRHZW5lcmljRmFtaWxp
ZXM+KCkpCiAgICAgLCBtX2xheW91dEludGVydmFsKGxheW91dFNjaGVkdWxlVGhyZXNob2xkKQog
ICAgICwgbV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbChET01UaW1lcjo6ZGVmYXVsdE1pbmltdW1J
bnRlcnZhbCgpKQotICAgICwgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoZmFsc2UpCi0gICAg
LCBtX2FyZUltYWdlc0VuYWJsZWQodHJ1ZSkKLSAgICAsIG1fYXJlUGx1Z2luc0VuYWJsZWQoZmFs
c2UpCi0gICAgLCBtX2lzU2NyaXB0RW5hYmxlZChmYWxzZSkKLSAgICAsIG1fdXNlc1BhZ2VDYWNo
ZShmYWxzZSkKLSAgICAsIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UoZmFsc2Up
Ci0gICAgLCBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fc2Nyb2xsaW5n
UGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChmYWxzZSkKICAgICAsIG1fc2V0SW1hZ2VMb2FkaW5n
U2V0dGluZ3NUaW1lcigqdGhpcywgJlNldHRpbmdzQmFzZTo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NU
aW1lckZpcmVkKQotICAgICwgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZChm
YWxzZSkKLSAgICAsIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKGZh
bHNlKQogewogICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQsIHNv
IHdlIGluaXRpYWxpemUgdGhlIEF0b21pY1N0cmluZwogICAgIC8vIGhhc2ggYmVmb3JlIHRyeWlu
ZyB0byB1c2UgaXQuCkBAIC0yNzIsODUgKzI0OSw2IEBAIGJvb2wgU2V0dGluZ3NCYXNlOjpkZWZh
dWx0VGV4dEF1dG9zaXppbmcKIH0KICNlbmRpZgogCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0TWVk
aWFUeXBlT3ZlcnJpZGUoY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVPdmVycmlkZSkKLXsKLSAgICBp
ZiAobV9tZWRpYVR5cGVPdmVycmlkZSA9PSBtZWRpYVR5cGVPdmVycmlkZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9tZWRpYVR5cGVPdmVycmlkZSA9IG1lZGlhVHlwZU92ZXJyaWRlOwotCi0g
ICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogdmlldyA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOwotICAgIEFTU0VSVCh2aWV3KTsKLQotICAgIHZp
ZXctPnNldE1lZGlhVHlwZShtZWRpYVR5cGVPdmVycmlkZSk7Ci0gICAgbV9wYWdlLT5zZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldExv
YWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sIGxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSkKLXsK
LSAgICBtX2xvYWRzSW1hZ2VzQXV0b21hdGljYWxseSA9IGxvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eTsKLSAgICAKLSAgICAvLyBDaGFuZ2luZyB0aGlzIHNldHRpbmcgdG8gdHJ1ZSBtaWdodCBpbW1l
ZGlhdGVseSBzdGFydCBuZXcgbG9hZHMgZm9yIGltYWdlcyB0aGF0IGhhZCBwcmV2aW91c2x5IGhh
ZCBsb2FkaW5nIGRpc2FibGVkLgotICAgIC8vIElmIHRoaXMgaGFwcGVucyB3aGlsZSBhIFdlYlZp
ZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgYW5kIHdlIGRvbid0IGtub3cgdGhlIFdlYlZpZXcgaXMg
YmVpbmcgZGVhbGxvYydlZCwgdGhlc2UgbmV3IGxvYWRzCi0gICAgLy8gY2FuIGNhdXNlIGNyYXNo
ZXMgZG93bnN0cmVhbSB3aGVuIHRoZSBXZWJWaWV3IG1lbW9yeSBoYXMgYWN0dWFsbHkgYmVlbiBm
cmVlJ2QuCi0gICAgLy8gT25lIGV4YW1wbGUgd2hlcmUgdGhpcyBjYW4gaGFwcGVuIGlzIGluIE1h
YyBhcHBzIHRoYXQgc3ViY2xhc3MgV2ViVmlldyB0aGVuIGRvIHdvcmsgaW4gdGhlaXIgb3ZlcnJp
ZGRlbiBkZWFsbG9jIG1ldGhvZHMuCi0gICAgLy8gU3RhcnRpbmcgdGhlc2UgbG9hZHMgc3luY2hy
b25vdXNseSBpcyBub3QgaW1wb3J0YW50LiAgQnkgcHV0dGluZyBpdCBvbiBhIDAtZGVsYXksIHBy
b3Blcmx5IGNsb3NpbmcgdGhlIFBhZ2UgY2FuY2VscyB0aGVtCi0gICAgLy8gYmVmb3JlIHRoZXkg
aGF2ZSBhIGNoYW5jZSB0byByZWFsbHkgc3RhcnQuCi0gICAgLy8gU2VlIGh0dHA6Ly93ZWJraXQu
b3JnL2IvNjA1NzIgZm9yIG1vcmUgZGlzY3Vzc2lvbi4KLSAgICBtX3NldEltYWdlTG9hZGluZ1Nl
dHRpbmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpp
bWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyRmlyZWQoKQotewotICAgIHNldEltYWdlTG9hZGluZ1Nl
dHRpbmdzKG1fcGFnZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTY3JpcHRFbmFibGVk
KGJvb2wgaXNTY3JpcHRFbmFibGVkKQotewotICAgIGlmIChtX2lzU2NyaXB0RW5hYmxlZCA9PSBp
c1NjcmlwdEVuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faXNTY3JpcHRFbmFibGVk
ID0gaXNTY3JpcHRFbmFibGVkOwotCi0gICAgaWYgKCFtX3BhZ2UpCi0gICAgICAgIHJldHVybjsK
LQotI2lmIFBMQVRGT1JNKElPUykKLSAgICBtX3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFs
bEZyYW1lcygpOwotI2VuZGlmCi19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRJbWFnZXNFbmFi
bGVkKGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCkKLXsKLSAgICBtX2FyZUltYWdlc0VuYWJsZWQgPSBh
cmVJbWFnZXNFbmFibGVkOwotCi0gICAgLy8gU2VlIGNvbW1lbnQgaW4gc2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5LgotICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5zdGFydE9u
ZVNob3QoMF9zKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldFBsdWdpbnNFbmFibGVkKGJv
b2wgYXJlUGx1Z2luc0VuYWJsZWQpCi17Ci0gICAgaWYgKG1fYXJlUGx1Z2luc0VuYWJsZWQgPT0g
YXJlUGx1Z2luc0VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYXJlUGx1Z2luc0Vu
YWJsZWQgPSBhcmVQbHVnaW5zRW5hYmxlZDsKLSAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhmYWxz
ZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGNv
bnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbikKLXsKLSAgICBpZiAobV91c2VyU3R5bGVT
aGVldExvY2F0aW9uID09IHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9IHVzZXJTdHlsZVNoZWV0TG9jYXRpb247
Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPnVzZXJTdHlsZVNoZWV0TG9jYXRp
b25DaGFuZ2VkKCk7Ci19Ci0KIHZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNaW5pbXVtRE9NVGltZXJJ
bnRlcnZhbChTZWNvbmRzIGludGVydmFsKQogewogICAgIGF1dG8gb2xkVGltZXJJbnRlcnZhbCA9
IHN0ZDo6ZXhjaGFuZ2UobV9taW5pbXVtRE9NVGltZXJJbnRlcnZhbCwgaW50ZXJ2YWwpOwpAQCAt
MzcxLDQyICsyNjksNiBAQCB2b2lkIFNldHRpbmdzQmFzZTo6c2V0TGF5b3V0SW50ZXJ2YWwoU2Vj
CiAgICAgbV9sYXlvdXRJbnRlcnZhbCA9IHN0ZDo6bWF4KGxheW91dEludGVydmFsLCBsYXlvdXRT
Y2hlZHVsZVRocmVzaG9sZCk7CiB9CiAKLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRVc2VzUGFnZUNh
Y2hlKGJvb2wgdXNlc1BhZ2VDYWNoZSkKLXsKLSAgICBpZiAobV91c2VzUGFnZUNhY2hlID09IHVz
ZXNQYWdlQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgbV91c2VzUGFnZUNh
Y2hlID0gdXNlc1BhZ2VDYWNoZTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoIW1fdXNlc1BhZ2VDYWNoZSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0
b24oKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpOb25lKTsKLX0KLQotdm9pZCBT
ZXR0aW5nc0Jhc2U6OnNldEROU1ByZWZldGNoaW5nRW5hYmxlZChib29sIGRuc1ByZWZldGNoaW5n
RW5hYmxlZCkKLXsKLSAgICBpZiAobV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgPT0gZG5zUHJlZmV0
Y2hpbmdFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Ruc1ByZWZldGNoaW5nRW5h
YmxlZCA9IGRuc1ByZWZldGNoaW5nRW5hYmxlZDsKLSAgICBpZiAobV9wYWdlKQotICAgICAgICBt
X3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLSNpZiBFTkFCTEUoUkVT
T1VSQ0VfVVNBR0UpCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKLXsKLSAgICBpZiAobV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZp
c2libGUgPT0gdmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9yZXNvdXJjZVVzYWdl
T3ZlcmxheVZpc2libGUgPSB2aXNpYmxlOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFn
ZS0+c2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKHZpc2libGUpOwotfQotI2VuZGlmCi0K
ICNpZiBQTEFURk9STShXSU4pCiB2b2lkIFNldHRpbmdzQmFzZTo6c2V0U2hvdWxkVXNlSGlnaFJl
c29sdXRpb25UaW1lcnMoYm9vbCBzaG91bGRVc2VIaWdoUmVzb2x1dGlvblRpbWVycykKIHsKQEAg
LTQxNCwyNyArMjc2LDYgQEAgdm9pZCBTZXR0aW5nc0Jhc2U6OnNldFNob3VsZFVzZUhpZ2hSZXNv
bAogfQogI2VuZGlmCiAKLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRTdG9yYWdlQmxvY2tpbmdQb2xp
Y3koU2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSBlbmFibGVkKQotewotICAg
IGlmIChtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3N0b3JhZ2VCbG9ja2luZ1BvbGljeSA9IGVuYWJsZWQ7Ci0gICAgaWYgKG1fcGFn
ZSkKLSAgICAgICAgbV9wYWdlLT5zdG9yYWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKTsKLX0KLQot
dm9pZCBTZXR0aW5nc0Jhc2U6OnNldEJhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJv
b2wgc2hvdWxkRXh0ZW5kKQotewotICAgIGlmIChtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlv
bmRQYWdlID09IHNob3VsZEV4dGVuZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZ3Jv
dW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9IHNob3VsZEV4dGVuZDsKLQotICAgIGlmIChtX3Bh
Z2UpCi0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRhdGVFeHRlbmRCYWNr
Z3JvdW5kSWZOZWNlc3NhcnkoKTsKLX0KLQogI2lmIFVTRShBVkZPVU5EQVRJT04pCiB2b2lkIFNl
dHRpbmdzQmFzZTo6c2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CkBAIC00
OTksMTQgKzM0MCw2IEBAIHZvaWQgU2V0dGluZ3NCYXNlOjpzZXRNZWRpYUNhcHR1cmVSZXF1aXIK
IH0KICNlbmRpZgogCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VM
b2dnaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgbV9zY3JvbGxpbmdQZXJmb3JtYW5j
ZUxvZ2dpbmdFbmFibGVkID0gZW5hYmxlZDsKLQotICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdlLT5t
YWluRnJhbWUoKS52aWV3KCkpCi0gICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT5z
ZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKGVuYWJsZWQpOwotfQotCiAvLyBJ
dCdzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBzZXR0aW5nIGRvZXNuJ3QgY2hhbmdlIGluIHRo
ZSBtaWRkbGUgb2YgYSBkb2N1bWVudCdzIGxpZmV0aW1lLgogLy8gVGhlIE1hYyBwb3J0IHVzZXMg
dGhpcyBmbGFnIHdoZW4gcmVnaXN0ZXJpbmcgYW5kIGRlcmVnaXN0ZXJpbmcgcGxhdGZvcm0tZGVw
ZW5kZW50IHNjcm9sbGJhcgogLy8gb2JqZWN0cy4gVGhlcmVmb3JlLCBpZiB0aGlzIGNoYW5nZXMg
YXQgYW4gdW5leHBlY3RlZCB0aW1lLCBkZXJlZ2lzdHJhdGlvbiBtYXkgbm90IGhhcHBlbgpAQCAt
NTUzLDMzICszODYsNiBAQCBib29sIFNldHRpbmdzQmFzZTo6c2hvdWxkUmVzcGVjdFByaW9yaXR5
CiAgICAgcmV0dXJuIGdTaG91bGRSZXNwZWN0UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnM7
CiB9CiAKLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRIaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5n
RW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgaWYgKG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0
bGluZ0VuYWJsZWQgPT0gZmxhZykKLSAgICAgICAgcmV0dXJuOwotICAgIG1faGlkZGVuUGFnZURP
TVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgPSBmbGFnOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAg
IG1fcGFnZS0+aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpOwotfQot
Ci12b2lkIFNldHRpbmdzQmFzZTo6c2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9J
bmNyZWFzZXMoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBhZ2VET01UaW1lclRocm90
dGxpbmdBdXRvSW5jcmVhc2VzID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hpZGRl
blBhZ2VET01UaW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzID0gZmxhZzsKLSAgICBpZiAobV9w
YWdlKQotICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0ZUNo
YW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEhpZGRlblBhZ2VDU1NBbmltYXRp
b25TdXNwZW5zaW9uRW5hYmxlZChib29sIGZsYWcpCi17Ci0gICAgaWYgKG1faGlkZGVuUGFnZUNT
U0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9IGZsYWc7Ci0gICAg
aWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVu
c2lvblN0YXRlQ2hhbmdlZCgpOwotfQotCiB2b2lkIFNldHRpbmdzQmFzZTo6c2V0TG93UG93ZXJW
aWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCBmbGFnKQogewogICAgIGdMb3dQb3dlclZp
ZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCA9IGZsYWc7CkBAIC02NjgsNCArNDc0LDEyMiBAQCB2
b2lkIFNldHRpbmdzQmFzZTo6c2V0TWVkaWFDb250ZW50VHlwZXNSCiAgICAgbV9tZWRpYUNvbnRl
bnRUeXBlc1JlcXVpcmluZ0hhcmR3YXJlU3VwcG9ydCA9IGNvbnRlbnRUeXBlczsKIH0KIAorCisK
Ky8vIE1BUksgLSBvbkNoYW5nZSBoYW5kbGVycworCit2b2lkIFNldHRpbmdzQmFzZTo6c2V0TmVl
ZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCkKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBt
X3BhZ2UtPnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCit2b2lkIFNldHRp
bmdzQmFzZTo6bWVkaWFUeXBlT3ZlcnJpZGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fcGFnZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9wYWdlLT5tYWluRnJh
bWUoKS52aWV3KCk7CisgICAgaWYgKHZpZXcpCisgICAgICAgIHZpZXctPnNldE1lZGlhVHlwZSht
X3BhZ2UtPnNldHRpbmdzKCkubWVkaWFUeXBlT3ZlcnJpZGUoKSk7CisKKyAgICBtX3BhZ2UtPnNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6
aW1hZ2VzRW5hYmxlZENoYW5nZWQoKQoreworICAgIC8vIENoYW5naW5nIHRoaXMgc2V0dGluZyB0
byB0cnVlIG1pZ2h0IGltbWVkaWF0ZWx5IHN0YXJ0IG5ldyBsb2FkcyBmb3IgaW1hZ2VzIHRoYXQg
aGFkIHByZXZpb3VzbHkgaGFkIGxvYWRpbmcgZGlzYWJsZWQuCisgICAgLy8gSWYgdGhpcyBoYXBw
ZW5zIHdoaWxlIGEgV2ViVmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCBhbmQgd2UgZG9uJ3Qga25v
dyB0aGUgV2ViVmlldyBpcyBiZWluZyBkZWFsbG9jJ2VkLCB0aGVzZSBuZXcgbG9hZHMKKyAgICAv
LyBjYW4gY2F1c2UgY3Jhc2hlcyBkb3duc3RyZWFtIHdoZW4gdGhlIFdlYlZpZXcgbWVtb3J5IGhh
cyBhY3R1YWxseSBiZWVuIGZyZWUnZC4KKyAgICAvLyBPbmUgZXhhbXBsZSB3aGVyZSB0aGlzIGNh
biBoYXBwZW4gaXMgaW4gTWFjIGFwcHMgdGhhdCBzdWJjbGFzcyBXZWJWaWV3IHRoZW4gZG8gd29y
ayBpbiB0aGVpciBvdmVycmlkZGVuIGRlYWxsb2MgbWV0aG9kcy4KKyAgICAvLyBTdGFydGluZyB0
aGVzZSBsb2FkcyBzeW5jaHJvbm91c2x5IGlzIG5vdCBpbXBvcnRhbnQuIEJ5IHB1dHRpbmcgaXQg
b24gYSAwLWRlbGF5LCBwcm9wZXJseSBjbG9zaW5nIHRoZSBQYWdlIGNhbmNlbHMgdGhlbQorICAg
IC8vIGJlZm9yZSB0aGV5IGhhdmUgYSBjaGFuY2UgdG8gcmVhbGx5IHN0YXJ0LgorICAgIC8vIFNl
ZSBodHRwOi8vd2Via2l0Lm9yZy9iLzYwNTcyIGZvciBtb3JlIGRpc2N1c3Npb24uCisgICAgbV9z
ZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOworfQorCit2b2lk
IFNldHRpbmdzQmFzZTo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCkKK3sKKyAgICBp
ZiAoIW1fcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChGcmFtZSogZnJhbWUgPSAm
bV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJz
ZU5leHQoKSkgeworICAgICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLnNldEltYWdlc0VuYWJsZWQobV9wYWdlLT5zZXR0aW5ncygpLmFyZUltYWdlc0VuYWJsZWQo
KSk7CisgICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLnNl
dEF1dG9Mb2FkSW1hZ2VzKG1fcGFnZS0+c2V0dGluZ3MoKS5sb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoKSk7CisgICAgfQorfQorCit2b2lkIFNldHRpbmdzQmFzZTo6c2NyaXB0RW5hYmxlZENoYW5n
ZWQoKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG9ubHkg
ZG8gdGhpcyBvbiBpT1M/CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKKyNlbmRpZgorfQorCit2b2lkIFNldHRpbmdzQmFz
ZTo6cGx1Z2luc0VuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBQYWdlOjpyZWZyZXNoUGx1Z2lucyhm
YWxzZSk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjp1c2VyU3R5bGVTaGVldExvY2F0aW9uQ2hh
bmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT51c2VyU3R5bGVTaGVl
dExvY2F0aW9uQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6dXNlc1BhZ2VDYWNo
ZUNoYW5nZWQoKQoreworICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fcGFnZS0+c2V0dGluZ3MoKS51c2VzUGFnZUNhY2hlKCkpCisgICAgICAgIFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7Cit9
CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpkbnNQcmVmZXRjaGluZ0VuYWJsZWRDaGFuZ2VkKCkKK3sK
KyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPmRuc1ByZWZldGNoaW5nU3RhdGVDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpyZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2li
bGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPnNldFJlc291
cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShtX3BhZ2UtPnNldHRpbmdzKCkucmVzb3VyY2VVc2FnZU92
ZXJsYXlWaXNpYmxlKCkpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6c3RvcmFnZUJsb2NraW5n
UG9saWN5Q2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5zdG9y
YWdlQmxvY2tpbmdTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OmJhY2tn
cm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkK
KyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnVwZGF0ZUV4dGVuZEJhY2tncm91
bmRJZk5lY2Vzc2FyeSgpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6c2Nyb2xsaW5nUGVyZm9y
bWFuY2VMb2dnaW5nRW5hYmxlZENoYW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UgJiYgbV9wYWdl
LT5tYWluRnJhbWUoKS52aWV3KCkpCisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygp
LT5zZXRTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKG1fcGFnZS0+c2V0dGluZ3Mo
KS5zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpOworfQorCit2b2lkIFNldHRp
bmdzQmFzZTo6aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0dGluZ3NCYXNlOjpoaWRkZW5QYWdlQ1NT
QW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9wYWdlKQor
ICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFu
Z2VkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3NCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5nc0Jhc2UuaAkocmV2aXNpb24gMjIzNjQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5nc0Jhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDU1ICsxMzEsMTUgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0UGljdG9ncmFwaEZvbnRGYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiwgVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBwaWN0b2dyYXBoRm9udEZhbWlseShVU2NyaXB0
Q29kZSA9IFVTQ1JJUFRfQ09NTU9OKSBjb25zdDsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBib29sIGRlZmF1bHRUZXh0QXV0b3NpemluZ0VuYWJsZWQoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgZmxvYXQgZGVmYXVsdE1pbmltdW1ab29tRm9udFNpemUoKTsKLQotICAgIC8vIE9u
bHkgc2V0IGJ5IExheW91dCBUZXN0cy4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1lZGlh
VHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYpOwotICAgIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBl
T3ZlcnJpZGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZU92ZXJyaWRlOyB9Ci0KLSAgICAv
LyBVbmxpa2UgYXJlSW1hZ2VzRW5hYmxlZCwgdGhpcyBvbmx5IHN1cHByZXNzZXMgdGhlIG5ldHdv
cmsgbG9hZCBvZgotICAgIC8vIHRoZSBpbWFnZSBVUkwuICBBIGNhY2hlZCBpbWFnZSB3aWxsIHN0
aWxsIGJlIHJlbmRlcmVkIGlmIHJlcXVlc3RlZC4KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNl
dExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShib29sKTsKLSAgICBib29sIGxvYWRzSW1hZ2VzQXV0
b21hdGljYWxseSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5OyB9
Ci0KLSAgICAvLyBDbGllbnRzIHRoYXQgZXhlY3V0ZSBzY3JpcHQgc2hvdWxkIGNhbGwgU2NyaXB0
Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKQotICAgIC8vIGluc3RlYWQgb2YgdGhpcyBm
dW5jdGlvbi4gU2NyaXB0Q29udHJvbGxlcjo6Y2FuRXhlY3V0ZVNjcmlwdHMoKSBjaGVja3MgdGhl
Ci0gICAgLy8gSFRNTCBzYW5kYm94LCBwbHVnLWluIHNhbmRib3hpbmcsIGFuZCBvdGhlciBpbXBv
cnRhbnQgZGV0YWlscy4KLSAgICBib29sIGlzU2NyaXB0RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNTY3JpcHRFbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRTY3JpcHRF
bmFibGVkKGJvb2wpOwotCi0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEltYWdlc0VuYWJs
ZWQoYm9vbCk7Ci0gICAgYm9vbCBhcmVJbWFnZXNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9h
cmVJbWFnZXNFbmFibGVkOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBsdWdpbnNF
bmFibGVkKGJvb2wpOwotICAgIGJvb2wgYXJlUGx1Z2luc0VuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2FyZVBsdWdpbnNFbmFibGVkOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERO
U1ByZWZldGNoaW5nRW5hYmxlZChib29sKTsKLSAgICBib29sIGRuc1ByZWZldGNoaW5nRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkOyB9Ci0KLSAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oY29uc3QgVVJMJik7Ci0g
ICAgY29uc3QgVVJMJiB1c2VyU3R5bGVTaGVldExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV91
c2VyU3R5bGVTaGVldExvY2F0aW9uOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldE1p
bmltdW1ET01UaW1lckludGVydmFsKFNlY29uZHMpOyAvLyBJbml0aWFsaXplZCB0byBET01UaW1l
cjo6ZGVmYXVsdE1pbmltdW1JbnRlcnZhbCgpLgogICAgIFNlY29uZHMgbWluaW11bURPTVRpbWVy
SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX21pbmltdW1ET01UaW1lckludGVydmFsOyB9CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldExheW91dEludGVydmFsKFNlY29uZHMpOwogICAg
IFNlY29uZHMgbGF5b3V0SW50ZXJ2YWwoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEludGVydmFs
OyB9CiAKLSAgICBib29sIGhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nRW5hYmxlZDsgfQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJs
ZWQoYm9vbCk7Ci0gICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3Jl
YXNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9J
bmNyZWFzZXM7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdBdXRvSW5jcmVhc2VzKGJvb2wpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRVc2VzUGFnZUNhY2hlKGJvb2wpOwotICAgIGJvb2wgdXNlc1BhZ2VDYWNoZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlc1BhZ2VDYWNoZTsgfQotICAgICAgICAKLSNpZiBFTkFCTEUoUkVTT1VS
Q0VfVVNBR0UpCi0gICAgYm9vbCByZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUoKSBjb25zdCB7
IHJldHVybiBtX3Jlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZTsgfQotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0UmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlKGJvb2wpOwotI2VuZGlmCisK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFi
bGVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IGRlZmF1bHRNaW5pbXVtWm9v
bUZvbnRTaXplKCk7CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgc3RhdGljIHZvaWQgc2V0U2hv
dWxkVXNlSGlnaFJlc29sdXRpb25UaW1lcnMoYm9vbCk7CkBAIC0xOTUsOSArMTU1LDYgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2xvYmFsQ29uc3RSZWRlY2xhcmF0aW9uU2hvdWxkVGhy
b3coKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0QmFja2dyb3VuZFNob3VsZEV4dGVu
ZEJleW9uZFBhZ2UoYm9vbCk7Ci0gICAgYm9vbCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25k
UGFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2U7
IH0KLQogI2lmIFVTRShBVkZPVU5EQVRJT04pCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZv
aWQgc2V0QVZGb3VuZGF0aW9uRW5hYmxlZChib29sIGZsYWcpOwogICAgIHN0YXRpYyBib29sIGlz
QVZGb3VuZGF0aW9uRW5hYmxlZCgpIHsgcmV0dXJuIGdBVkZvdW5kYXRpb25FbmFibGVkOyB9CkBA
IC0yMjksMTggKzE4Niw5IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9p
ZCBzZXRVc2VzTW9ja1Njcm9sbEFuaW1hdG9yKGJvb2wpOwogICAgIHN0YXRpYyBib29sIHVzZXNN
b2NrU2Nyb2xsQW5pbWF0b3IoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U3RvcmFn
ZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kpOwot
ICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgc3RvcmFnZUJsb2NraW5n
UG9saWN5KCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3k7IH0KLQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxl
ZChib29sKTsKLSAgICBib29sIHNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSB7
IHJldHVybiBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQ7IH0KLQogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNob3VsZFJlc3BlY3RQcmlvcml0eUluQ1NTQXR0
cmlidXRlU2V0dGVycyhib29sKTsKICAgICBzdGF0aWMgYm9vbCBzaG91bGRSZXNwZWN0UHJpb3Jp
dHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoKTsKIAotICAgIGJvb2wgaGlkZGVuUGFnZUNTU0FuaW1h
dGlvblN1c3BlbnNpb25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9oaWRkZW5QYWdlQ1NTQW5p
bWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhp
ZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZChib29sKTsKLQogICAgIHN0YXRp
YyBib29sIGxvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKCkgeyByZXR1cm4gZ0xv
d1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgc2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQoYm9vbCk7
CiAKQEAgLTI5NiwzNiArMjQ0LDMzIEBAIHByb3RlY3RlZDoKIAogICAgIHZvaWQgaW5pdGlhbGl6
ZURlZmF1bHRGb250RmFtaWxpZXMoKTsKIAorICAgIHZvaWQgaW1hZ2VMb2FkaW5nU2V0dGluZ3NU
aW1lckZpcmVkKCk7CisKKyAgICAvLyBIZWxwZXJzIHVzZWQgYnkgZ2VuZXJhdGVkIFNldHRpbmdz
LmNwcC4KKyAgICB2b2lkIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOworICAgIHZv
aWQgbWVkaWFUeXBlT3ZlcnJpZGVDaGFuZ2VkKCk7CisgICAgdm9pZCBpbWFnZXNFbmFibGVkQ2hh
bmdlZCgpOworICAgIHZvaWQgc2NyaXB0RW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIHBsdWdp
bnNFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgdXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5n
ZWQoKTsKKyAgICB2b2lkIHVzZXNQYWdlQ2FjaGVDaGFuZ2VkKCk7CisgICAgdm9pZCBkbnNQcmVm
ZXRjaGluZ0VuYWJsZWRDaGFuZ2VkKCk7CisgICAgdm9pZCByZXNvdXJjZVVzYWdlT3ZlcmxheVZp
c2libGVDaGFuZ2VkKCk7CisgICAgdm9pZCBzdG9yYWdlQmxvY2tpbmdQb2xpY3lDaGFuZ2VkKCk7
CisgICAgdm9pZCBiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZUNoYW5nZWQoKTsKKyAg
ICB2b2lkIHNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2VkKCk7CisgICAg
dm9pZCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgdm9p
ZCBoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWRDaGFuZ2VkKCk7CisKICAg
ICBQYWdlKiBtX3BhZ2U7CiAKLSAgICBTdHJpbmcgbV9tZWRpYVR5cGVPdmVycmlkZSB7ICJzY3Jl
ZW4iIH07Ci0gICAgVVJMIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsKICAgICBjb25zdCBzdGQ6
OnVuaXF1ZV9wdHI8Rm9udEdlbmVyaWNGYW1pbGllcz4gbV9mb250R2VuZXJpY0ZhbWlsaWVzOwot
ICAgIFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kgbV9zdG9yYWdlQmxvY2tp
bmdQb2xpY3kgeyBTZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9yYWdlIH07CiAgICAgU2Vjb25k
cyBtX2xheW91dEludGVydmFsOwogICAgIFNlY29uZHMgbV9taW5pbXVtRE9NVGltZXJJbnRlcnZh
bDsKIAotICAgIGJvb2wgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgOiAxOwotICAgIGJvb2wg
bV9hcmVJbWFnZXNFbmFibGVkIDogMTsKLSAgICBib29sIG1fYXJlUGx1Z2luc0VuYWJsZWQgOiAx
OwotICAgIGJvb2wgbV9pc1NjcmlwdEVuYWJsZWQgOiAxOwotICAgIGJvb2wgbV91c2VzUGFnZUNh
Y2hlIDogMTsKLSAgICBib29sIG1fc2hvd1RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yIDogMTsKLSAg
ICBib29sIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgOiAxOwotICAgIGJvb2wg
bV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQgOiAxOwotICAgIGJvb2wgbV9zY3JvbGxpbmdQZXJmb3Jt
YW5jZUxvZ2dpbmdFbmFibGVkIDogMTsKLQogICAgIFRpbWVyIG1fc2V0SW1hZ2VMb2FkaW5nU2V0
dGluZ3NUaW1lcjsKLSAgICB2b2lkIGltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCgpOwot
Ci0gICAgYm9vbCBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkIDogMTsKLSAg
ICBib29sIG1faGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkIDogMTsKLQot
I2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKLSAgICBib29sIG1fcmVzb3VyY2VVc2FnZU92ZXJs
YXlWaXNpYmxlIHsgZmFsc2UgfTsKLSNlbmRpZgogCi0gICAgYm9vbCBtX2hpZGRlblBhZ2VET01U
aW1lclRocm90dGxpbmdBdXRvSW5jcmVhc2VzIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8Q29udGVu
dFR5cGU+IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7CiAKICNp
ZiBVU0UoQVZGT1VOREFUSU9OKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGdBVkZv
dW5kYXRpb25FbmFibGVkOwpAQCAtMzY0LDggKzMwOSw2IEBAIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgYm9vbCBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ7CiAgICAgc3RhdGlj
IGJvb2wgZ1Jlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkRW5hYmxlZDsKICAgICBzdGF0aWMg
Ym9vbCBnQWxsb3dzQW55U1NMQ2VydGlmaWNhdGU7Ci0KLSAgICBWZWN0b3I8Q29udGVudFR5cGU+
IG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQ7CiB9OwogCiBpbmxp
bmUgYm9vbCBTZXR0aW5nc0Jhc2U6OmlzUG9zdExvYWRDUFVVc2FnZU1lYXN1cmVtZW50RW5hYmxl
ZCgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324191</attachid>
            <date>2017-10-18 18:18:03 -0700</date>
            <delta_ts>2017-10-18 21:08:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177766-20171018181802.patch</filename>
            <type>text/plain</type>
            <size>30686</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzY0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE3LTEwLTE4ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1NldHRpbmdzXSBDb252ZXJ0IG1vcmUg
c2V0dGluZ3MgdG8gYmUgZ2VuZXJhdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNzc3NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAtIFJlcGxhY2VzIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1l
cyBvcHRpb24gaW4gU2V0dGluZ3MuaW4KKyAgICAgICAgICB3aXRoIGEgbW9yZSBnZW5lcmljLCBv
bkNoYW5nZSwgd2hpY2ggYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgZnVuY3Rpb24KKyAgICAgICAg
ICBpbiBTZXR0aW5nc0Jhc2UgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzZXR0aW5nIGNo
YW5nZXMuIAorICAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcyBpcyB0aGVu
IHJlaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YKKyAgICAgICAgICBvbkNoYW5nZS4KKyAgICAgICAg
LSBNb3ZlcyBtb3N0IChhbGwgYnV0IHR3bykgb2YgdGhlIHJlbWFpbmluZyBub24tc3RhdGljIHNl
dHRpbmdzIGZyb20KKyAgICAgICAgICBTZXR0aW5nc0Jhc2UgdG8gU2V0dGluZ3MuaW4KKworICAg
ICAgICAqIFNjcmlwdHMvR2VuZXJhdGVTZXR0aW5ncy9HZW5lcmF0ZVNldHRpbmdzSW1wbGVtZW50
YXRpb25GaWxlLnB5OgorICAgICAgICAocHJpbnRTZXR0ZXJCb2R5KToKKyAgICAgICAgKiBTY3Jp
cHRzL0dlbmVyYXRlU2V0dGluZ3MvU2V0dGluZ3MucHk6CisgICAgICAgIChTZXR0aW5nLl9faW5p
dF9fKToKKyAgICAgICAgKFNldHRpbmcuX19zdHJfXyk6CisgICAgICAgIChTZXR0aW5nLnR5cGVJ
c1ZhbHVlVHlwZSk6CisgICAgICAgIChTZXR0aW5nLnNldHRlckZ1bmN0aW9uTmFtZSk6CisgICAg
ICAgIChTZXR0aW5nLnNldHRlckNoYW5nZUZ1bmN0aW9uTmFtZSk6CisgICAgICAgIChTZXR0aW5n
Lmhhc0NvbXBsZXhTZXR0ZXIpOgorICAgICAgICAocGFyc2VJbnB1dCk6CisgICAgICAgIAorICAg
ICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRoZSBvbkNoYW5nZSBvcHRpb24uCisgICAgICAgIAor
ICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuaW46CisKKyAgICAgICAgICAgIE1pZ3JhdGUgbW9zdCBv
ZiB0aGUgcmVtYWluaW5nIG5vbi1zdGF0aWMgc2V0dGluZ3MgdG8gU2V0dGluZ3MuaW4uCisgICAg
ICAgICAgICBBZG9wdCBvbkNoYW5nZSBvcHRpb24uCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdz
QmFzZS5jcHA6CisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jhc2UuaDoKKworICAgICAgICAgICAg
QWRkIGhlbHBlciBmdW5jdGlvbnMgZm9yIHVzZSBieSB0aGUgb25DaGFuZ2Ugb3B0aW9uLgorCiAy
MDE3LTEwLTE4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBTb21l
IG9sZGVyIGhhcmR3YXJlIGNhbid0IGFjdHVhbGx5IHVzZSByZW5kZXJidWZmZXJzIGF0IHRoZSBz
aXplIHRoZXkgYWR2ZXJ0aXNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRl
U2V0dGluZ3MvR2VuZXJhdGVTZXR0aW5nc0ltcGxlbWVudGF0aW9uRmlsZS5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9TY3JpcHRzL0dlbmVyYXRlU2V0dGluZ3MvR2VuZXJhdGVTZXR0
aW5nc0ltcGxlbWVudGF0aW9uRmlsZS5weQkocmV2aXNpb24gMjIzNjQwKQorKysgU291cmNlL1dl
YkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL0dlbmVyYXRlU2V0dGluZ3NJbXBsZW1lbnRh
dGlvbkZpbGUucHkJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsNyBAQCBkZWYgcHJpbnRT
ZXR0ZXJCb2R5KG91dHB1dEZpbGUsIHNldHRpbmcpCiAgICAgICAgIHJldHVybgogCiAgICAgc2V0
dGVyRnVuY3Rpb25OYW1lID0gc2V0dGluZy5zZXR0ZXJGdW5jdGlvbk5hbWUoKQorICAgIGNoYW5n
ZUZ1bmN0aW9uTmFtZSA9IHNldHRpbmcuc2V0dGVyQ2hhbmdlRnVuY3Rpb25OYW1lKCkKIAogICAg
IGlmIHNldHRpbmcudHlwZUlzVmFsdWVUeXBlKCk6CiAgICAgICAgIG91dHB1dEZpbGUud3JpdGUo
InZvaWQgU2V0dGluZ3M6OiIgKyBzZXR0ZXJGdW5jdGlvbk5hbWUgKyAiKCIgKyBzZXR0aW5nLnR5
cGUgKyAiICIgKyBzZXR0aW5nLm5hbWUgKyAiKVxuIikKQEAgLTE2MSw3ICsxNjIsNyBAQCBkZWYg
cHJpbnRTZXR0ZXJCb2R5KG91dHB1dEZpbGUsIHNldHRpbmcpCiAgICAgb3V0cHV0RmlsZS53cml0
ZSgiICAgIGlmIChtXyIgKyBzZXR0aW5nLm5hbWUgKyAiID09ICIgKyBzZXR0aW5nLm5hbWUgKyAi
KVxuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCIgICAgICAgIHJldHVybjtcbiIpCiAgICAgb3V0
cHV0RmlsZS53cml0ZSgiICAgIG1fIiArIHNldHRpbmcubmFtZSArICIgPSAiICsgc2V0dGluZy5u
YW1lICsgIjtcbiIpCi0gICAgb3V0cHV0RmlsZS53cml0ZSgiICAgIG1fcGFnZS0+c2V0TmVlZHNS
ZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7XG4iKQorICAgIG91dHB1dEZpbGUud3JpdGUoIiAgICAi
ICsgY2hhbmdlRnVuY3Rpb25OYW1lICsgIigpO1xuIikKICAgICBvdXRwdXRGaWxlLndyaXRlKCJ9
XG5cbiIpCiAKIApJbmRleDogU291cmNlL1dlYkNvcmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdz
L1NldHRpbmdzLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NjcmlwdHMvR2VuZXJh
dGVTZXR0aW5ncy9TZXR0aW5ncy5weQkocmV2aXNpb24gMjIzNjQwKQorKysgU291cmNlL1dlYkNv
cmUvU2NyaXB0cy9HZW5lcmF0ZVNldHRpbmdzL1NldHRpbmdzLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC02NCw3ICs2NCw3IEBAIGNsYXNzIFNldHRpbmc6CiAgICAgICAgIHNlbGYudHlwZSA9ICdib29s
JwogICAgICAgICBzZWxmLmluaXRpYWwgPSBOb25lCiAgICAgICAgIHNlbGYuY29uZGl0aW9uYWwg
PSBOb25lCi0gICAgICAgIHNlbGYuc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzID0gTm9u
ZQorICAgICAgICBzZWxmLm9uQ2hhbmdlID0gTm9uZQogICAgICAgICBzZWxmLmdldHRlciA9IE5v
bmUKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgpAQCAtNzMsMjAgKzczLDIxIEBAIGNsYXNzIFNl
dHRpbmc6CiAgICAgICAgICAgICByZXN1bHQgKz0gJyBJTklUOicgKyBzZWxmLmluaXRpYWwKICAg
ICAgICAgaWYgKHNlbGYuY29uZGl0aW9uYWwpOgogICAgICAgICAgICAgcmVzdWx0ICs9ICcgQ09O
RDonICsgc2VsZi5jb25kaXRpb25hbAotICAgICAgICBpZiAoc2VsZi5zZXROZWVkc1N0eWxlUmVj
YWxjSW5BbGxGcmFtZXMpOgotICAgICAgICAgICAgcmVzdWx0ICs9ICcgUkVDQUxDOicgKyBzZWxm
LnNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcworICAgICAgICBpZiAoc2VsZi5vbkNoYW5n
ZSk6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBDSEFOR0U6JyArIHNlbGYub25DaGFuZ2UKICAg
ICAgICAgaWYgKHNlbGYuZ2V0dGVyKToKICAgICAgICAgICAgIHJlc3VsdCArPSAnIEdFVFRFUjon
ICsgc2VsZi5nZXR0ZXIKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIGhhc0NvbXBs
ZXhTZXR0ZXIoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLnNldE5lZWRzU3R5bGVSZWNhbGNJ
bkFsbEZyYW1lcwotCiAgICAgZGVmIHR5cGVJc1ZhbHVlVHlwZShzZWxmKToKLSAgICAgICAgcmV0
dXJuIHNlbGYudHlwZSAhPSAnU3RyaW5nJworICAgICAgICBpZiBzZWxmLnR5cGUgPT0gJ1N0cmlu
Zyc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICdV
UkwnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCiAKICAg
ICBkZWYgc2V0dGVyRnVuY3Rpb25OYW1lKHNlbGYpOgotICAgICAgICBmb3IgcHJlZml4IGluIFsn
Y3NzJywgJ3hzcycsICdmdHAnLCAnZG9tJ106CisgICAgICAgIGZvciBwcmVmaXggaW4gWydjc3Mn
LCAneHNzJywgJ2Z0cCcsICdkb20nLCAnZG5zJ106CiAgICAgICAgICAgICBpZiBzZWxmLm5hbWUu
c3RhcnRzd2l0aChwcmVmaXgpOgogICAgICAgICAgICAgICAgIHJldHVybiAnc2V0JyArIHVwcGVy
Y2FzZUZpcnN0TihzZWxmLm5hbWUsIGxlbihwcmVmaXgpKQogICAgICAgICByZXR1cm4gJ3NldCcg
KyB1cHBlcmNhc2VGaXJzdE4oc2VsZi5uYW1lLCAxKQpAQCAtOTQsNiArOTUsMTIgQEAgY2xhc3Mg
U2V0dGluZzoKICAgICBkZWYgZ2V0dGVyRnVuY3Rpb25OYW1lKHNlbGYpOgogICAgICAgICByZXR1
cm4gc2VsZi5nZXR0ZXIgb3Igc2VsZi5uYW1lCiAKKyAgICBkZWYgc2V0dGVyQ2hhbmdlRnVuY3Rp
b25OYW1lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5vbkNoYW5nZQorCisgICAgZGVmIGhh
c0NvbXBsZXhTZXR0ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9uQ2hhbmdlICE9IE5v
bmUKKwogICAgIGRlZiBpZGxUeXBlKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3IgbW9yZSB0eXBlcyBpbmNsdWRpbmcgZW51bWVyYXRlIHR5cGVzLgogICAgICAgICBpZiBz
ZWxmLnR5cGUgPT0gJ2ludCc6CkBAIC0xNDQsOCArMTUxLDggQEAgZGVmIHBhcnNlSW5wdXQoaW5w
dXQpOgogICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5pbml0aWFsID0gdmFsdWUKICAg
ICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT0gJ2NvbmRpdGlvbmFsJyk6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXR0aW5nLmNvbmRpdGlvbmFsID0gdmFsdWUKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG5hbWUgPT0gJ3NldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcycpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5zZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFt
ZXMgPSB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnb25DaGFuZ2UnKToK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmcub25DaGFuZ2UgPSB2YWx1ZQogICAgICAg
ICAgICAgICAgICAgICBpZiAobmFtZSA9PSAnZ2V0dGVyJyk6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXR0aW5nLmdldHRlciA9IHZhbHVlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5p
bgkocmV2aXNpb24gMjIzNjQwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMzUsMTAgKzM1LDEwIEBAIGRldmljZUhlaWdodCB0eXBlPWludCwg
aW5pdGlhbD0wCiAjIHNpbmNlIHRoZSBtZW1vcnkgdXNlZCB3b24ndCBiZSByZWxlYXNlZCB1bnRp
bCB0aGUgUGFnZSBpcyBkZXN0cm95ZWQuCiBzZXNzaW9uU3RvcmFnZVF1b3RhIHR5cGU9dW5zaWdu
ZWQsIGluaXRpYWw9U3RvcmFnZU1hcDo6bm9RdW90YQogCi1taW5pbXVtRm9udFNpemUgdHlwZT1p
bnQsIGluaXRpYWw9MCwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLW1pbmltdW1M
b2dpY2FsRm9udFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgc2V0TmVlZHNTdHlsZVJlY2FsY0lu
QWxsRnJhbWVzPTEKLWRlZmF1bHRGb250U2l6ZSB0eXBlPWludCwgaW5pdGlhbD0xNiwgc2V0TmVl
ZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLWRlZmF1bHRGaXhlZEZvbnRTaXplIHR5cGU9aW50
LCBpbml0aWFsPTAsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCittaW5pbXVtRm9u
dFNpemUgdHlwZT1pbnQsIGluaXRpYWw9MCwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzCittaW5pbXVtTG9naWNhbEZvbnRTaXplIHR5cGU9aW50LCBpbml0aWFsPTAsIG9u
Q2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcworZGVmYXVsdEZvbnRTaXplIHR5
cGU9aW50LCBpbml0aWFsPTE2LCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFt
ZXMKK2RlZmF1bHRGaXhlZEZvbnRTaXplIHR5cGU9aW50LCBpbml0aWFsPTAsIG9uQ2hhbmdlPXNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwogCiBlZGl0aW5nQmVoYXZpb3JUeXBlIHR5cGU9
RWRpdGluZ0JlaGF2aW9yVHlwZSwgaW5pdGlhbD1lZGl0aW5nQmVoYXZpb3JUeXBlRm9yUGxhdGZv
cm0oKQogbWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGggdHlwZT11bnNpZ25lZCwgaW5pdGlh
bD1kZWZhdWx0TWF4aW11bUhUTUxQYXJzZXJET01UcmVlRGVwdGgKQEAgLTU5LDE0ICs1OSwxNiBA
QCBzaG91bGRQcmludEJhY2tncm91bmRzIGluaXRpYWw9ZmFsc2UKIHVzZXNEYXNoYm9hcmRCYWNr
d2FyZENvbXBhdGliaWxpdHlNb2RlIGluaXRpYWw9ZmFsc2UsIGNvbmRpdGlvbmFsPURBU0hCT0FS
RF9TVVBQT1JUCiBjbGlwYm9hcmRBY2Nlc3NQb2xpY3kgdHlwZT1DbGlwYm9hcmRBY2Nlc3NQb2xp
Y3ksIGluaXRpYWw9Q2xpcGJvYXJkQWNjZXNzUG9saWN5OjpSZXF1aXJlc1VzZXJHZXN0dXJlCiAK
LXRleHRBcmVhc0FyZVJlc2l6YWJsZSBpbml0aWFsPWZhbHNlLCBzZXROZWVkc1N0eWxlUmVjYWxj
SW5BbGxGcmFtZXM9MQotYXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBz
ZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Vu
YWJsZWQgaW5pdGlhbD10cnVlLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotYWNj
ZWxlcmF0ZWRDb21wb3NpdGVkQW5pbWF0aW9uc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBzZXROZWVk
c1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotc2hvd0RlYnVnQm9yZGVycyBpbml0aWFsPWZhbHNl
LCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MQotc2hvd1JlcGFpbnRDb3VudGVyIGlu
aXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCit0ZXh0QXJlYXNB
cmVSZXNpemFibGUgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUlu
QWxsRnJhbWVzCithdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCBpbml0aWFsPXRydWUsIG9uQ2hh
bmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcwordXNlclN0eWxlU2hlZXRMb2NhdGlv
biB0eXBlPVVSTCwgb25DaGFuZ2U9dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQKK2FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFuZ2U9c2V0TmVlZHNS
ZWNhbGNTdHlsZUluQWxsRnJhbWVzCithY2NlbGVyYXRlZENvbXBvc2l0ZWRBbmltYXRpb25zRW5h
YmxlZCBpbml0aWFsPXRydWUsIG9uQ2hhbmdlPXNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1l
cworc2hvd0RlYnVnQm9yZGVycyBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2Fs
Y1N0eWxlSW5BbGxGcmFtZXMKK3Nob3dSZXBhaW50Q291bnRlciBpbml0aWFsPWZhbHNlLCBvbkNo
YW5nZT1zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMKIHZpc2libGVEZWJ1Z092ZXJsYXlS
ZWdpb25zIHR5cGU9RGVidWdPdmVybGF5UmVnaW9ucywgaW5pdGlhbD0wCiBzaG93VGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3IgaW5pdGlhbD1mYWxzZQorcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxl
IGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPXJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZUNoYW5n
ZWQsIGNvbmRpdGlvbj1SRVNPVVJDRV9VU0FHRQogCiAjIFRoaXMgaXMgYSBxdWlyayB3ZSBhcmUg
cHJvLWFjdGl2ZWx5IGFwcGx5aW5nIHRvIG9sZCBhcHBsaWNhdGlvbnMuIEl0IGNoYW5nZXMga2V5
Ym9hcmQgZXZlbnQgZGlzcGF0Y2hpbmcsCiAjIG1ha2luZyBrZXlJZGVudGlmaWVyIGF2YWlsYWJs
ZSBvbiBrZXlwcmVzcyBldmVudHMsIG1ha2luZyBjaGFyQ29kZSBhdmFpbGFibGUgb24ga2V5ZG93
bi9rZXl1cCBldmVudHMsCkBAIC0xOTksMTMgKzIwMSwxMyBAQCBzZWxlY3RUcmFpbGluZ1doaXRl
c3BhY2VFbmFibGVkIGluaXRpYWw9CiB1c2VMZWdhY3lCYWNrZ3JvdW5kU2l6ZVNob3J0aGFuZEJl
aGF2aW9yIGluaXRpYWw9ZmFsc2UKIGZpeGVkQmFja2dyb3VuZHNQYWludFJlbGF0aXZlVG9Eb2N1
bWVudCBpbml0aWFsPWRlZmF1bHRGaXhlZEJhY2tncm91bmRzUGFpbnRSZWxhdGl2ZVRvRG9jdW1l
bnQKIAotdGV4dEF1dG9zaXppbmdFbmFibGVkIGluaXRpYWw9ZGVmYXVsdFRleHRBdXRvc2l6aW5n
RW5hYmxlZCgpLCBzZXROZWVkc1N0eWxlUmVjYWxjSW5BbGxGcmFtZXM9MSwgY29uZGl0aW9uYWw9
VEVYVF9BVVRPU0laSU5HCi10ZXh0QXV0b3NpemluZ1dpbmRvd1NpemVPdmVycmlkZSB0eXBlPUlu
dFNpemUsIHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xLCBjb25kaXRpb25hbD1URVhU
X0FVVE9TSVpJTkcKK3RleHRBdXRvc2l6aW5nRW5hYmxlZCBpbml0aWFsPWRlZmF1bHRUZXh0QXV0
b3NpemluZ0VuYWJsZWQoKSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVz
LCBjb25kaXRpb25hbD1URVhUX0FVVE9TSVpJTkcKK3RleHRBdXRvc2l6aW5nV2luZG93U2l6ZU92
ZXJyaWRlIHR5cGU9SW50U2l6ZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJh
bWVzLCBjb25kaXRpb25hbD1URVhUX0FVVE9TSVpJTkcKIG1pbmltdW1ab29tRm9udFNpemUgdHlw
ZT1mbG9hdCwgaW5pdGlhbD1kZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpLCBjb25kaXRpb25h
bD1URVhUX0FVVE9TSVpJTkcKIAotc3VicGl4ZWxBbnRpYWxpYXNlZExheWVyVGV4dEVuYWJsZWQg
aW5pdGlhbD1mYWxzZSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJhbWVzPTEKLXNpbXBsZUxp
bmVMYXlvdXRFbmFibGVkIGluaXRpYWw9dHJ1ZSwgc2V0TmVlZHNTdHlsZVJlY2FsY0luQWxsRnJh
bWVzPTEKLXNpbXBsZUxpbmVMYXlvdXREZWJ1Z0JvcmRlcnNFbmFibGVkIGluaXRpYWw9ZmFsc2Us
IHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCitzdWJwaXhlbEFudGlhbGlhc2VkTGF5
ZXJUZXh0RW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMKK3NpbXBsZUxpbmVMYXlvdXRFbmFibGVkIGluaXRpYWw9dHJ1ZSwgb25DaGFu
Z2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCitzaW1wbGVMaW5lTGF5b3V0RGVidWdC
b3JkZXJzRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBvbkNoYW5nZT1zZXROZWVkc1JlY2FsY1N0eWxl
SW5BbGxGcmFtZXMKIAogc3VicGl4ZWxDU1NPTUVsZW1lbnRNZXRyaWNzRW5hYmxlZCBpbml0aWFs
PWZhbHNlCiAKQEAgLTI3MSw3ICsyNzMsNyBAQCB0cmVhdElQQWRkcmVzc0FzRG9tYWluIGluaXRp
YWw9ZmFsc2UKIG1lZGlhUHJlbG9hZGluZ0VuYWJsZWQgaW5pdGlhbD1mYWxzZQogCiAjIFJ1bnRp
bWUtZW5hYmxlZCBmZWF0dXJlcwotdmlzdWFsVmlld3BvcnRFbmFibGVkIGluaXRpYWw9ZmFsc2Us
IHNldE5lZWRzU3R5bGVSZWNhbGNJbkFsbEZyYW1lcz0xCit2aXN1YWxWaWV3cG9ydEVuYWJsZWQg
aW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAK
IGlucHV0RXZlbnRzRW5hYmxlZCBpbml0aWFsPXRydWUKIApAQCAtMzA4LDcgKzMxMCw3IEBAIHN0
b3JhZ2VBY2Nlc3NBUElFbmFibGVkIGluaXRpYWw9ZmFsc2UKIAogdGltZVdpdGhvdXRNb3VzZU1v
dmVtZW50QmVmb3JlSGlkaW5nQ29udHJvbHMgdHlwZT1TZWNvbmRzLCBpbml0aWFsPTNfcyAKIAot
Zm9udEZhbGxiYWNrUHJlZmVyc1BpY3RvZ3JhcGhzIGluaXRpYWw9ZmFsc2UsIHNldE5lZWRzU3R5
bGVSZWNhbGNJbkFsbEZyYW1lcz0xCitmb250RmFsbGJhY2tQcmVmZXJzUGljdG9ncmFwaHMgaW5p
dGlhbD1mYWxzZSwgb25DaGFuZ2U9c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzCiAKIGZv
bnRMb2FkVGltaW5nT3ZlcnJpZGUgdHlwZT1Gb250TG9hZFRpbWluZ092ZXJyaWRlLCBpbml0aWFs
PUZvbnRMb2FkVGltaW5nT3ZlcnJpZGU6Ok5vbmUKIHNob3VsZElnbm9yZUZvbnRMb2FkQ29tcGxl
dGlvbnMgaW5pdGlhbD1mYWxzZQpAQCAtMzIwLDYgKzMyMiwzMSBAQCBhcHBsZVBheUNhcGFiaWxp
dHlEaXNjbG9zdXJlQWxsb3dlZCBpbml0CiBqYXZhRW5hYmxlZCBpbml0aWFsPWZhbHNlLCBnZXR0
ZXI9aXNKYXZhRW5hYmxlZAogamF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzIGluaXRpYWw9dHJ1ZSwg
Z2V0dGVyPWlzSmF2YUVuYWJsZWRGb3JMb2NhbEZpbGVzCiAKKyMgVW5saWtlIHRoZSBpbWFnZXNF
bmFibGVkIHNldHRpbmcsIHRoaXMgb25seSBzdXBwcmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQgb2YK
KyMgdGhlIGltYWdlIFVSTC4gQSBjYWNoZWQgaW1hZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBp
ZiByZXF1ZXN0ZWQuCitsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgaW5pdGlhbD1mYWxzZSwgb25D
aGFuZ2U9aW1hZ2VzRW5hYmxlZENoYW5nZWQKK2ltYWdlc0VuYWJsZWQgaW5pdGlhbD10cnVlLCBn
ZXR0ZXI9YXJlSW1hZ2VzRW5hYmxlZCwgb25DaGFuZ2U9aW1hZ2VzRW5hYmxlZENoYW5nZWQKK3Nj
cmlwdEVuYWJsZWQgaW5pdGlhbD1mYWxzZSwgZ2V0dGVyPWlzU2NyaXB0RW5hYmxlZCwgb25DaGFu
Z2U9c2NyaXB0RW5hYmxlZENoYW5nZWQKK3BsdWdpbnNFbmFibGVkIGluaXRpYWw9ZmFsc2UsIGdl
dHRlcj1hcmVQbHVnaW5zRW5hYmxlZCwgb25DaGFuZ2U9cGx1Z2luc0VuYWJsZWRDaGFuZ2VkCisK
K3VzZXNQYWdlQ2FjaGUgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9dXNlc1BhZ2VDYWNoZUNoYW5n
ZWQKKworZG5zUHJlZmV0Y2hpbmdFbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWRuc1By
ZWZldGNoaW5nRW5hYmxlZENoYW5nZWQKKworYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2UgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9YmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2VDaGFuZ2VkCisKK3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQgaW5pdGlhbD1m
YWxzZSwgb25DaGFuZ2U9c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZENoYW5nZWQK
KworaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQgaW5pdGlhbD1mYWxzZSwgb25D
aGFuZ2U9aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZAoraGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMgaW5pdGlhbD1mYWxzZSwgb25DaGFuZ2U9
aGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZAoraGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25FbmFibGVkIGluaXRpYWw9ZmFsc2UsIG9uQ2hhbmdlPWhpZGRlblBh
Z2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZENoYW5nZWQKKworc3RvcmFnZUJsb2NraW5n
UG9saWN5IHR5cGU9U2VjdXJpdHlPcmlnaW46OlN0b3JhZ2VCbG9ja2luZ1BvbGljeSwgaW5pdGlh
bD1TZWN1cml0eU9yaWdpbjo6QWxsb3dBbGxTdG9yYWdlLCBvbkNoYW5nZT1zdG9yYWdlQmxvY2tp
bmdQb2xpY3lDaGFuZ2VkCisKKyMgT25seSBzZXQgYnkgTGF5b3V0IFRlc3RzLgorbWVkaWFUeXBl
T3ZlcnJpZGUgdHlwZT1TdHJpbmcsIGluaXRpYWw9InNjcmVlbiIsIG9uQ2hhbmdlPW1lZGlhVHlw
ZU92ZXJyaWRlQ2hhbmdlZAorCisKIGZvbnRSZW5kZXJpbmdNb2RlIHR5cGU9Rm9udFJlbmRlcmlu
Z01vZGUsIGluaXRpYWw9Rm9udFJlbmRlcmluZ01vZGU6Ok5vcm1hbAogCiBwcmVmZXJNSU1FVHlw
ZUZvckltYWdlcyBpbml0aWFsPWZhbHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jh
c2UuY3BwCShyZXZpc2lvbiAyMjM2NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdz
QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDE5ICs2Myw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIHZvaWQgc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3MoUGFnZSogcGFn
ZSkKLXsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoRnJhbWUq
IGZyYW1lID0gJnBhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgIGlmICghZnJhbWUtPmRvY3VtZW50KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZnJhbWUtPmRvY3VtZW50KCktPmNhY2hlZFJlc291
cmNlTG9hZGVyKCkuc2V0SW1hZ2VzRW5hYmxlZChwYWdlLT5zZXR0aW5ncygpLmFyZUltYWdlc0Vu
YWJsZWQoKSk7Ci0gICAgICAgIGZyYW1lLT5kb2N1bWVudCgpLT5jYWNoZWRSZXNvdXJjZUxvYWRl
cigpLnNldEF1dG9Mb2FkSW1hZ2VzKHBhZ2UtPnNldHRpbmdzKCkubG9hZHNJbWFnZXNBdXRvbWF0
aWNhbGx5KCkpOwotICAgIH0KLX0KLQogc3RhdGljIHZvaWQgaW52YWxpZGF0ZUFmdGVyR2VuZXJp
Y0ZhbWlseUNoYW5nZShQYWdlKiBwYWdlKQogewogICAgIGludmFsaWRhdGVGb250Q2FzY2FkZUNh
Y2hlKCk7CkBAIC0xNDYsMTcgKzEzMyw3IEBAIFNldHRpbmdzQmFzZTo6U2V0dGluZ3NCYXNlKFBh
Z2UqIHBhZ2UpCiAgICAgLCBtX2ZvbnRHZW5lcmljRmFtaWxpZXMoc3RkOjptYWtlX3VuaXF1ZTxG
b250R2VuZXJpY0ZhbWlsaWVzPigpKQogICAgICwgbV9sYXlvdXRJbnRlcnZhbChsYXlvdXRTY2hl
ZHVsZVRocmVzaG9sZCkKICAgICAsIG1fbWluaW11bURPTVRpbWVySW50ZXJ2YWwoRE9NVGltZXI6
OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKSkKLSAgICAsIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KGZhbHNlKQotICAgICwgbV9hcmVJbWFnZXNFbmFibGVkKHRydWUpCi0gICAgLCBtX2FyZVBs
dWdpbnNFbmFibGVkKGZhbHNlKQotICAgICwgbV9pc1NjcmlwdEVuYWJsZWQoZmFsc2UpCi0gICAg
LCBtX3VzZXNQYWdlQ2FjaGUoZmFsc2UpCi0gICAgLCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRC
ZXlvbmRQYWdlKGZhbHNlKQotICAgICwgbV9kbnNQcmVmZXRjaGluZ0VuYWJsZWQoZmFsc2UpCi0g
ICAgLCBtX3Njcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X3NldEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXIoKnRoaXMsICZTZXR0aW5nc0Jhc2U6OmltYWdl
TG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCkKLSAgICAsIG1faGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0VuYWJsZWQoZmFsc2UpCi0gICAgLCBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNw
ZW5zaW9uRW5hYmxlZChmYWxzZSkKIHsKICAgICAvLyBBIEZyYW1lIG1heSBub3QgaGF2ZSBiZWVu
IGNyZWF0ZWQgeWV0LCBzbyB3ZSBpbml0aWFsaXplIHRoZSBBdG9taWNTdHJpbmcKICAgICAvLyBo
YXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgpAQCAtMjcyLDg1ICsyNDksNiBAQCBib29sIFNl
dHRpbmdzQmFzZTo6ZGVmYXVsdFRleHRBdXRvc2l6aW5nCiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0
aW5nc0Jhc2U6OnNldE1lZGlhVHlwZU92ZXJyaWRlKGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlT3Zl
cnJpZGUpCi17Ci0gICAgaWYgKG1fbWVkaWFUeXBlT3ZlcnJpZGUgPT0gbWVkaWFUeXBlT3ZlcnJp
ZGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbWVkaWFUeXBlT3ZlcnJpZGUgPSBtZWRpYVR5
cGVPdmVycmlkZTsKLQotICAgIGlmICghbV9wYWdlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBG
cmFtZVZpZXcqIHZpZXcgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKTsKLSAgICBBU1NFUlQo
dmlldyk7Ci0KLSAgICB2aWV3LT5zZXRNZWRpYVR5cGUobWVkaWFUeXBlT3ZlcnJpZGUpOwotICAg
IG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci19Ci0KLXZvaWQgU2V0
dGluZ3NCYXNlOjpzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCBsb2Fkc0ltYWdlc0F1
dG9tYXRpY2FsbHkpCi17Ci0gICAgbV9sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkgPSBsb2Fkc0lt
YWdlc0F1dG9tYXRpY2FsbHk7Ci0gICAgCi0gICAgLy8gQ2hhbmdpbmcgdGhpcyBzZXR0aW5nIHRv
IHRydWUgbWlnaHQgaW1tZWRpYXRlbHkgc3RhcnQgbmV3IGxvYWRzIGZvciBpbWFnZXMgdGhhdCBo
YWQgcHJldmlvdXNseSBoYWQgbG9hZGluZyBkaXNhYmxlZC4KLSAgICAvLyBJZiB0aGlzIGhhcHBl
bnMgd2hpbGUgYSBXZWJWaWV3IGlzIGJlaW5nIGRlYWxsb2MnZWQsIGFuZCB3ZSBkb24ndCBrbm93
IHRoZSBXZWJWaWV3IGlzIGJlaW5nIGRlYWxsb2MnZWQsIHRoZXNlIG5ldyBsb2FkcwotICAgIC8v
IGNhbiBjYXVzZSBjcmFzaGVzIGRvd25zdHJlYW0gd2hlbiB0aGUgV2ViVmlldyBtZW1vcnkgaGFz
IGFjdHVhbGx5IGJlZW4gZnJlZSdkLgotICAgIC8vIE9uZSBleGFtcGxlIHdoZXJlIHRoaXMgY2Fu
IGhhcHBlbiBpcyBpbiBNYWMgYXBwcyB0aGF0IHN1YmNsYXNzIFdlYlZpZXcgdGhlbiBkbyB3b3Jr
IGluIHRoZWlyIG92ZXJyaWRkZW4gZGVhbGxvYyBtZXRob2RzLgotICAgIC8vIFN0YXJ0aW5nIHRo
ZXNlIGxvYWRzIHN5bmNocm9ub3VzbHkgaXMgbm90IGltcG9ydGFudC4gIEJ5IHB1dHRpbmcgaXQg
b24gYSAwLWRlbGF5LCBwcm9wZXJseSBjbG9zaW5nIHRoZSBQYWdlIGNhbmNlbHMgdGhlbQotICAg
IC8vIGJlZm9yZSB0aGV5IGhhdmUgYSBjaGFuY2UgdG8gcmVhbGx5IHN0YXJ0LgotICAgIC8vIFNl
ZSBodHRwOi8vd2Via2l0Lm9yZy9iLzYwNTcyIGZvciBtb3JlIGRpc2N1c3Npb24uCi0gICAgbV9z
ZXRJbWFnZUxvYWRpbmdTZXR0aW5nc1RpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwotfQotCi12b2lk
IFNldHRpbmdzQmFzZTo6aW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lckZpcmVkKCkKLXsKLSAgICBz
ZXRJbWFnZUxvYWRpbmdTZXR0aW5ncyhtX3BhZ2UpOwotfQotCi12b2lkIFNldHRpbmdzQmFzZTo6
c2V0U2NyaXB0RW5hYmxlZChib29sIGlzU2NyaXB0RW5hYmxlZCkKLXsKLSAgICBpZiAobV9pc1Nj
cmlwdEVuYWJsZWQgPT0gaXNTY3JpcHRFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2lzU2NyaXB0RW5hYmxlZCA9IGlzU2NyaXB0RW5hYmxlZDsKLQotICAgIGlmICghbV9wYWdlKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgbV9wYWdlLT5zZXROZWVk
c1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLSNlbmRpZgotfQotCi12b2lkIFNldHRpbmdzQmFz
ZTo6c2V0SW1hZ2VzRW5hYmxlZChib29sIGFyZUltYWdlc0VuYWJsZWQpCi17Ci0gICAgbV9hcmVJ
bWFnZXNFbmFibGVkID0gYXJlSW1hZ2VzRW5hYmxlZDsKLQotICAgIC8vIFNlZSBjb21tZW50IGlu
IHNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseS4KLSAgICBtX3NldEltYWdlTG9hZGluZ1NldHRp
bmdzVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRQ
bHVnaW5zRW5hYmxlZChib29sIGFyZVBsdWdpbnNFbmFibGVkKQotewotICAgIGlmIChtX2FyZVBs
dWdpbnNFbmFibGVkID09IGFyZVBsdWdpbnNFbmFibGVkKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2FyZVBsdWdpbnNFbmFibGVkID0gYXJlUGx1Z2luc0VuYWJsZWQ7Ci0gICAgUGFnZTo6cmVm
cmVzaFBsdWdpbnMoZmFsc2UpOwotfQotCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0VXNlclN0eWxl
U2hlZXRMb2NhdGlvbihjb25zdCBVUkwmIHVzZXJTdHlsZVNoZWV0TG9jYXRpb24pCi17Ci0gICAg
aWYgKG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbiA9PSB1c2VyU3R5bGVTaGVldExvY2F0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24gPSB1c2VyU3R5
bGVTaGVldExvY2F0aW9uOwotCi0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT51c2Vy
U3R5bGVTaGVldExvY2F0aW9uQ2hhbmdlZCgpOwotfQotCiB2b2lkIFNldHRpbmdzQmFzZTo6c2V0
TWluaW11bURPTVRpbWVySW50ZXJ2YWwoU2Vjb25kcyBpbnRlcnZhbCkKIHsKICAgICBhdXRvIG9s
ZFRpbWVySW50ZXJ2YWwgPSBzdGQ6OmV4Y2hhbmdlKG1fbWluaW11bURPTVRpbWVySW50ZXJ2YWws
IGludGVydmFsKTsKQEAgLTM3MSw0MiArMjY5LDYgQEAgdm9pZCBTZXR0aW5nc0Jhc2U6OnNldExh
eW91dEludGVydmFsKFNlYwogICAgIG1fbGF5b3V0SW50ZXJ2YWwgPSBzdGQ6Om1heChsYXlvdXRJ
bnRlcnZhbCwgbGF5b3V0U2NoZWR1bGVUaHJlc2hvbGQpOwogfQogCi12b2lkIFNldHRpbmdzQmFz
ZTo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCi17Ci0gICAgaWYgKG1fdXNl
c1BhZ2VDYWNoZSA9PSB1c2VzUGFnZUNhY2hlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIG1fdXNlc1BhZ2VDYWNoZSA9IHVzZXNQYWdlQ2FjaGU7Ci0KLSAgICBpZiAoIW1fcGFnZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCi0gICAgICAgIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9u
ZSk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoYm9v
bCBkbnNQcmVmZXRjaGluZ0VuYWJsZWQpCi17Ci0gICAgaWYgKG1fZG5zUHJlZmV0Y2hpbmdFbmFi
bGVkID09IGRuc1ByZWZldGNoaW5nRW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9k
bnNQcmVmZXRjaGluZ0VuYWJsZWQgPSBkbnNQcmVmZXRjaGluZ0VuYWJsZWQ7Ci0gICAgaWYgKG1f
cGFnZSkKLSAgICAgICAgbV9wYWdlLT5kbnNQcmVmZXRjaGluZ1N0YXRlQ2hhbmdlZCgpOwotfQot
Ci0jaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldFJlc291
cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShib29sIHZpc2libGUpCi17Ci0gICAgaWYgKG1fcmVzb3Vy
Y2VVc2FnZU92ZXJsYXlWaXNpYmxlID09IHZpc2libGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fcmVzb3VyY2VVc2FnZU92ZXJsYXlWaXNpYmxlID0gdmlzaWJsZTsKLSAgICBpZiAobV9wYWdl
KQotICAgICAgICBtX3BhZ2UtPnNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSh2aXNpYmxl
KTsKLX0KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogdm9pZCBTZXR0aW5nc0Jhc2U6OnNl
dFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKGJvb2wgc2hvdWxkVXNlSGlnaFJlc29sdXRp
b25UaW1lcnMpCiB7CkBAIC00MTQsMjcgKzI3Niw2IEBAIHZvaWQgU2V0dGluZ3NCYXNlOjpzZXRT
aG91bGRVc2VIaWdoUmVzb2wKIH0KICNlbmRpZgogCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0U3Rv
cmFnZUJsb2NraW5nUG9saWN5KFNlY3VyaXR5T3JpZ2luOjpTdG9yYWdlQmxvY2tpbmdQb2xpY3kg
ZW5hYmxlZCkKLXsKLSAgICBpZiAobV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPT0gZW5hYmxlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdG9yYWdlQmxvY2tpbmdQb2xpY3kgPSBlbmFibGVk
OwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVD
aGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRCYWNrZ3JvdW5kU2hvdWxkRXh0
ZW5kQmV5b25kUGFnZShib29sIHNob3VsZEV4dGVuZCkKLXsKLSAgICBpZiAobV9iYWNrZ3JvdW5k
U2hvdWxkRXh0ZW5kQmV5b25kUGFnZSA9PSBzaG91bGRFeHRlbmQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBhZ2UgPSBzaG91bGRFeHRlbmQ7
Ci0KLSAgICBpZiAobV9wYWdlKQotICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+
dXBkYXRlRXh0ZW5kQmFja2dyb3VuZElmTmVjZXNzYXJ5KCk7Ci19Ci0KICNpZiBVU0UoQVZGT1VO
REFUSU9OKQogdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCBl
bmFibGVkKQogewpAQCAtNDk5LDE0ICszNDAsNiBAQCB2b2lkIFNldHRpbmdzQmFzZTo6c2V0TWVk
aWFDYXB0dXJlUmVxdWlyCiB9CiAjZW5kaWYKIAotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldFNjcm9s
bGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQotewotICAgIG1fc2Ny
b2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCA9IGVuYWJsZWQ7Ci0KLSAgICBpZiAobV9w
YWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQotICAgICAgICBtX3BhZ2UtPm1haW5G
cmFtZSgpLnZpZXcoKS0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZChlbmFi
bGVkKTsKLX0KLQogLy8gSXQncyB2ZXJ5IGltcG9ydGFudCB0aGF0IHRoaXMgc2V0dGluZyBkb2Vz
bid0IGNoYW5nZSBpbiB0aGUgbWlkZGxlIG9mIGEgZG9jdW1lbnQncyBsaWZldGltZS4KIC8vIFRo
ZSBNYWMgcG9ydCB1c2VzIHRoaXMgZmxhZyB3aGVuIHJlZ2lzdGVyaW5nIGFuZCBkZXJlZ2lzdGVy
aW5nIHBsYXRmb3JtLWRlcGVuZGVudCBzY3JvbGxiYXIKIC8vIG9iamVjdHMuIFRoZXJlZm9yZSwg
aWYgdGhpcyBjaGFuZ2VzIGF0IGFuIHVuZXhwZWN0ZWQgdGltZSwgZGVyZWdpc3RyYXRpb24gbWF5
IG5vdCBoYXBwZW4KQEAgLTU1MywzMyArMzg2LDYgQEAgYm9vbCBTZXR0aW5nc0Jhc2U6OnNob3Vs
ZFJlc3BlY3RQcmlvcml0eQogICAgIHJldHVybiBnU2hvdWxkUmVzcGVjdFByaW9yaXR5SW5DU1NB
dHRyaWJ1dGVTZXR0ZXJzOwogfQogCi12b2lkIFNldHRpbmdzQmFzZTo6c2V0SGlkZGVuUGFnZURP
TVRpbWVyVGhyb3R0bGluZ0VuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGlmIChtX2hpZGRlblBh
Z2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID09IGZsYWcpCi0gICAgICAgIHJldHVybjsKLSAg
ICBtX2hpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdFbmFibGVkID0gZmxhZzsKLSAgICBpZiAo
bV9wYWdlKQotICAgICAgICBtX3BhZ2UtPmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0
ZUNoYW5nZWQoKTsKLX0KLQotdm9pZCBTZXR0aW5nc0Jhc2U6OnNldEhpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdBdXRvSW5jcmVhc2VzKGJvb2wgZmxhZykKLXsKLSAgICBpZiAobV9oaWRkZW5Q
YWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyA9PSBmbGFnKQotICAgICAgICByZXR1
cm47Ci0gICAgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyA9IGZs
YWc7Ci0gICAgaWYgKG1fcGFnZSkKLSAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlRE9NVGltZXJU
aHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgU2V0dGluZ3NCYXNlOjpzZXRIaWRk
ZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoYm9vbCBmbGFnKQotewotICAgIGlm
IChtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCA9PSBmbGFnKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJs
ZWQgPSBmbGFnOwotICAgIGlmIChtX3BhZ2UpCi0gICAgICAgIG1fcGFnZS0+aGlkZGVuUGFnZUNT
U0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKTsKLX0KLQogdm9pZCBTZXR0aW5nc0Jh
c2U6OnNldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkKGJvb2wgZmxhZykKIHsK
ICAgICBnTG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgPSBmbGFnOwpAQCAtNjY4
LDQgKzQ3NCwxMjIgQEAgdm9pZCBTZXR0aW5nc0Jhc2U6OnNldE1lZGlhQ29udGVudFR5cGVzUgog
ICAgIG1fbWVkaWFDb250ZW50VHlwZXNSZXF1aXJpbmdIYXJkd2FyZVN1cHBvcnQgPSBjb250ZW50
VHlwZXM7CiB9CiAKKworCisvLyBNQVJLIC0gb25DaGFuZ2UgaGFuZGxlcnMKKwordm9pZCBTZXR0
aW5nc0Jhc2U6OnNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpCit7CisgICAgaWYgKG1f
cGFnZSkKKyAgICAgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsK
K30KKwordm9pZCBTZXR0aW5nc0Jhc2U6Om1lZGlhVHlwZU92ZXJyaWRlQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmlldyogdmlldyA9
IG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpOworICAgIGlmICh2aWV3KQorICAgICAgICB2aWV3
LT5zZXRNZWRpYVR5cGUobV9wYWdlLT5zZXR0aW5ncygpLm1lZGlhVHlwZU92ZXJyaWRlKCkpOwor
CisgICAgbV9wYWdlLT5zZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKK30KKwordm9p
ZCBTZXR0aW5nc0Jhc2U6OmltYWdlc0VuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICAvLyBDaGFuZ2lu
ZyB0aGlzIHNldHRpbmcgdG8gdHJ1ZSBtaWdodCBpbW1lZGlhdGVseSBzdGFydCBuZXcgbG9hZHMg
Zm9yIGltYWdlcyB0aGF0IGhhZCBwcmV2aW91c2x5IGhhZCBsb2FkaW5nIGRpc2FibGVkLgorICAg
IC8vIElmIHRoaXMgaGFwcGVucyB3aGlsZSBhIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwg
YW5kIHdlIGRvbid0IGtub3cgdGhlIFdlYlZpZXcgaXMgYmVpbmcgZGVhbGxvYydlZCwgdGhlc2Ug
bmV3IGxvYWRzCisgICAgLy8gY2FuIGNhdXNlIGNyYXNoZXMgZG93bnN0cmVhbSB3aGVuIHRoZSBX
ZWJWaWV3IG1lbW9yeSBoYXMgYWN0dWFsbHkgYmVlbiBmcmVlJ2QuCisgICAgLy8gT25lIGV4YW1w
bGUgd2hlcmUgdGhpcyBjYW4gaGFwcGVuIGlzIGluIE1hYyBhcHBzIHRoYXQgc3ViY2xhc3MgV2Vi
VmlldyB0aGVuIGRvIHdvcmsgaW4gdGhlaXIgb3ZlcnJpZGRlbiBkZWFsbG9jIG1ldGhvZHMuCisg
ICAgLy8gU3RhcnRpbmcgdGhlc2UgbG9hZHMgc3luY2hyb25vdXNseSBpcyBub3QgaW1wb3J0YW50
LiBCeSBwdXR0aW5nIGl0IG9uIGEgMC1kZWxheSwgcHJvcGVybHkgY2xvc2luZyB0aGUgUGFnZSBj
YW5jZWxzIHRoZW0KKyAgICAvLyBiZWZvcmUgdGhleSBoYXZlIGEgY2hhbmNlIHRvIHJlYWxseSBz
dGFydC4KKyAgICAvLyBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi82MDU3MiBmb3IgbW9yZSBkaXNj
dXNzaW9uLgorICAgIG1fc2V0SW1hZ2VMb2FkaW5nU2V0dGluZ3NUaW1lci5zdGFydE9uZVNob3Qo
MF9zKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OmltYWdlTG9hZGluZ1NldHRpbmdzVGltZXJG
aXJlZCgpCit7CisgICAgaWYgKCFtX3BhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gJm1fcGFnZS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKCFmcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2Fj
aGVkUmVzb3VyY2VMb2FkZXIoKS5zZXRJbWFnZXNFbmFibGVkKG1fcGFnZS0+c2V0dGluZ3MoKS5h
cmVJbWFnZXNFbmFibGVkKCkpOworICAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+Y2FjaGVkUmVz
b3VyY2VMb2FkZXIoKS5zZXRBdXRvTG9hZEltYWdlcyhtX3BhZ2UtPnNldHRpbmdzKCkubG9hZHNJ
bWFnZXNBdXRvbWF0aWNhbGx5KCkpOworICAgIH0KK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OnNj
cmlwdEVuYWJsZWRDaGFuZ2VkKCkKK3sKKyNpZiBQTEFURk9STShJT1MpCisgICAgLy8gRklYTUU6
IFdoeSBkbyB3ZSBvbmx5IGRvIHRoaXMgb24gaU9TPworICAgIGlmIChtX3BhZ2UpCisgICAgICAg
IG1fcGFnZS0+c2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CisjZW5kaWYKK30KKwor
dm9pZCBTZXR0aW5nc0Jhc2U6OnBsdWdpbnNFbmFibGVkQ2hhbmdlZCgpCit7CisgICAgUGFnZTo6
cmVmcmVzaFBsdWdpbnMoZmFsc2UpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6dXNlclN0eWxl
U2hlZXRMb2NhdGlvbkNoYW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFn
ZS0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbkNoYW5nZWQoKTsKK30KKwordm9pZCBTZXR0aW5nc0Jh
c2U6OnVzZXNQYWdlQ2FjaGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fcGFnZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX3BhZ2UtPnNldHRpbmdzKCkudXNlc1BhZ2VDYWNoZSgpKQor
ICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdS
ZWFzb246Ok5vbmUpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6ZG5zUHJlZmV0Y2hpbmdFbmFi
bGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5kbnNQcmVm
ZXRjaGluZ1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzQmFzZTo6cmVzb3VyY2VV
c2FnZU92ZXJsYXlWaXNpYmxlQ2hhbmdlZCgpCit7CisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAg
bV9wYWdlLT5zZXRSZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGUobV9wYWdlLT5zZXR0aW5ncygp
LnJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSgpKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6
OnN0b3JhZ2VCbG9ja2luZ1BvbGljeUNoYW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UpCisgICAg
ICAgIG1fcGFnZS0+c3RvcmFnZUJsb2NraW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2V0
dGluZ3NCYXNlOjpiYWNrZ3JvdW5kU2hvdWxkRXh0ZW5kQmV5b25kUGFnZUNoYW5nZWQoKQorewor
ICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpLT51cGRh
dGVFeHRlbmRCYWNrZ3JvdW5kSWZOZWNlc3NhcnkoKTsKK30KKwordm9pZCBTZXR0aW5nc0Jhc2U6
OnNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
bV9wYWdlICYmIG1fcGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQorICAgICAgICBtX3BhZ2UtPm1h
aW5GcmFtZSgpLnZpZXcoKS0+c2V0U2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCht
X3BhZ2UtPnNldHRpbmdzKCkuc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKTsK
K30KKwordm9pZCBTZXR0aW5nc0Jhc2U6OmhpZGRlblBhZ2VET01UaW1lclRocm90dGxpbmdTdGF0
ZUNoYW5nZWQoKQoreworICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+aGlkZGVuUGFn
ZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFNldHRpbmdzQmFz
ZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvblN0YXRlQ2hhbmdlZCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgJKHJldmlzaW9uIDIyMzY0MCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw1NSAr
MTMxLDE1IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBpY3RvZ3JhcGhG
b250RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFVTY3JpcHRDb2RlID0gVVNDUklQVF9DT01N
T04pOwogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgcGljdG9ncmFwaEZv
bnRGYW1pbHkoVVNjcmlwdENvZGUgPSBVU0NSSVBUX0NPTU1PTikgY29uc3Q7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBkZWZhdWx0VGV4dEF1dG9zaXppbmdFbmFibGVkKCk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGZsb2F0IGRlZmF1bHRNaW5pbXVtWm9vbUZvbnRTaXpl
KCk7Ci0KLSAgICAvLyBPbmx5IHNldCBieSBMYXlvdXQgVGVzdHMuCi0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRNZWRpYVR5cGVPdmVycmlkZShjb25zdCBTdHJpbmcmKTsKLSAgICBjb25zdCBT
dHJpbmcmIG1lZGlhVHlwZU92ZXJyaWRlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGVPdmVy
cmlkZTsgfQotCi0gICAgLy8gVW5saWtlIGFyZUltYWdlc0VuYWJsZWQsIHRoaXMgb25seSBzdXBw
cmVzc2VzIHRoZSBuZXR3b3JrIGxvYWQgb2YKLSAgICAvLyB0aGUgaW1hZ2UgVVJMLiAgQSBjYWNo
ZWQgaW1hZ2Ugd2lsbCBzdGlsbCBiZSByZW5kZXJlZCBpZiByZXF1ZXN0ZWQuCi0gICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYm9vbCk7Ci0gICAgYm9v
bCBsb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKSBjb25zdCB7IHJldHVybiBtX2xvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseTsgfQotCi0gICAgLy8gQ2xpZW50cyB0aGF0IGV4ZWN1dGUgc2NyaXB0IHNo
b3VsZCBjYWxsIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4ZWN1dGVTY3JpcHRzKCkKLSAgICAvLyBp
bnN0ZWFkIG9mIHRoaXMgZnVuY3Rpb24uIFNjcmlwdENvbnRyb2xsZXI6OmNhbkV4ZWN1dGVTY3Jp
cHRzKCkgY2hlY2tzIHRoZQotICAgIC8vIEhUTUwgc2FuZGJveCwgcGx1Zy1pbiBzYW5kYm94aW5n
LCBhbmQgb3RoZXIgaW1wb3J0YW50IGRldGFpbHMuCi0gICAgYm9vbCBpc1NjcmlwdEVuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2lzU2NyaXB0RW5hYmxlZDsgfQotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0U2NyaXB0RW5hYmxlZChib29sKTsKLQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRJbWFnZXNFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgYXJlSW1hZ2VzRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJlSW1hZ2VzRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRQbHVnaW5zRW5hYmxlZChib29sKTsKLSAgICBib29sIGFyZVBsdWdpbnNFbmFibGVk
KCkgY29uc3QgeyByZXR1cm4gbV9hcmVQbHVnaW5zRW5hYmxlZDsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRETlNQcmVmZXRjaGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBkbnNQ
cmVmZXRjaGluZ0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2Ruc1ByZWZldGNoaW5nRW5hYmxl
ZDsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KGNvbnN0IFVSTCYpOwotICAgIGNvbnN0IFVSTCYgdXNlclN0eWxlU2hlZXRMb2NhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fdXNlclN0eWxlU2hlZXRMb2NhdGlvbjsgfQotCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRNaW5pbXVtRE9NVGltZXJJbnRlcnZhbChTZWNvbmRzKTsgLy8gSW5pdGlh
bGl6ZWQgdG8gRE9NVGltZXI6OmRlZmF1bHRNaW5pbXVtSW50ZXJ2YWwoKS4KICAgICBTZWNvbmRz
IG1pbmltdW1ET01UaW1lckludGVydmFsKCkgY29uc3QgeyByZXR1cm4gbV9taW5pbXVtRE9NVGlt
ZXJJbnRlcnZhbDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRMYXlvdXRJbnRlcnZh
bChTZWNvbmRzKTsKICAgICBTZWNvbmRzIGxheW91dEludGVydmFsKCkgY29uc3QgeyByZXR1cm4g
bV9sYXlvdXRJbnRlcnZhbDsgfQogCi0gICAgYm9vbCBoaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRs
aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGlu
Z0VuYWJsZWQ7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEhpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdFbmFibGVkKGJvb2wpOwotICAgIGJvb2wgaGlkZGVuUGFnZURPTVRpbWVyVGhy
b3R0bGluZ0F1dG9JbmNyZWFzZXMoKSBjb25zdCB7IHJldHVybiBtX2hpZGRlblBhZ2VET01UaW1l
clRocm90dGxpbmdBdXRvSW5jcmVhc2VzOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRI
aWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyhib29sKTsKLQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0VXNlc1BhZ2VDYWNoZShib29sKTsKLSAgICBib29sIHVzZXNQ
YWdlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3VzZXNQYWdlQ2FjaGU7IH0KLSAgICAgICAgCi0j
aWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQotICAgIGJvb2wgcmVzb3VyY2VVc2FnZU92ZXJsYXlW
aXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvdXJjZVVzYWdlT3ZlcmxheVZpc2libGU7IH0K
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFJlc291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZShi
b29sKTsKLSNlbmRpZgorCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJvb2wgZGVmYXVsdFRl
eHRBdXRvc2l6aW5nRW5hYmxlZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBmbG9hdCBk
ZWZhdWx0TWluaW11bVpvb21Gb250U2l6ZSgpOwogCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHN0
YXRpYyB2b2lkIHNldFNob3VsZFVzZUhpZ2hSZXNvbHV0aW9uVGltZXJzKGJvb2wpOwpAQCAtMTk1
LDkgKzE1NSw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGdsb2JhbENvbnN0UmVkZWNs
YXJhdGlvblNob3VsZFRocm93KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldEJhY2tn
cm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdlKGJvb2wpOwotICAgIGJvb2wgYmFja2dyb3VuZFNo
b3VsZEV4dGVuZEJleW9uZFBhZ2UoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRTaG91bGRF
eHRlbmRCZXlvbmRQYWdlOyB9Ci0KICNpZiBVU0UoQVZGT1VOREFUSU9OKQogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyB2b2lkIHNldEFWRm91bmRhdGlvbkVuYWJsZWQoYm9vbCBmbGFnKTsKICAg
ICBzdGF0aWMgYm9vbCBpc0FWRm91bmRhdGlvbkVuYWJsZWQoKSB7IHJldHVybiBnQVZGb3VuZGF0
aW9uRW5hYmxlZDsgfQpAQCAtMjI5LDE4ICsxODYsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHZvaWQgc2V0VXNlc01vY2tTY3JvbGxBbmltYXRvcihib29sKTsKICAgICBz
dGF0aWMgYm9vbCB1c2VzTW9ja1Njcm9sbEFuaW1hdG9yKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFN0b3JhZ2VCbG9ja2luZ1BvbGljeShTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJs
b2NraW5nUG9saWN5KTsKLSAgICBTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJsb2NraW5nUG9saWN5
IHN0b3JhZ2VCbG9ja2luZ1BvbGljeSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUJsb2NraW5n
UG9saWN5OyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFNjcm9sbGluZ1BlcmZvcm1h
bmNlTG9nZ2luZ0VuYWJsZWQoYm9vbCk7Ci0gICAgYm9vbCBzY3JvbGxpbmdQZXJmb3JtYW5jZUxv
Z2dpbmdFbmFibGVkKCkgeyByZXR1cm4gbV9zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFi
bGVkOyB9Ci0KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaG91bGRSZXNwZWN0
UHJpb3JpdHlJbkNTU0F0dHJpYnV0ZVNldHRlcnMoYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgc2hv
dWxkUmVzcGVjdFByaW9yaXR5SW5DU1NBdHRyaWJ1dGVTZXR0ZXJzKCk7CiAKLSAgICBib29sIGhp
ZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkOyB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRIaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoYm9v
bCk7Ci0KICAgICBzdGF0aWMgYm9vbCBsb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxl
ZCgpIHsgcmV0dXJuIGdMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZDsgfQogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNp
emVFbmFibGVkKGJvb2wpOwogCkBAIC0yOTYsMzYgKzI0NCwzMyBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB2b2lkIGluaXRpYWxpemVEZWZhdWx0Rm9udEZhbWlsaWVzKCk7CiAKKyAgICB2b2lkIGltYWdl
TG9hZGluZ1NldHRpbmdzVGltZXJGaXJlZCgpOworCisgICAgLy8gSGVscGVycyB1c2VkIGJ5IGdl
bmVyYXRlZCBTZXR0aW5ncy5jcHAuCisgICAgdm9pZCBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxG
cmFtZXMoKTsKKyAgICB2b2lkIG1lZGlhVHlwZU92ZXJyaWRlQ2hhbmdlZCgpOworICAgIHZvaWQg
aW1hZ2VzRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIHNjcmlwdEVuYWJsZWRDaGFuZ2VkKCk7
CisgICAgdm9pZCBwbHVnaW5zRW5hYmxlZENoYW5nZWQoKTsKKyAgICB2b2lkIHVzZXJTdHlsZVNo
ZWV0TG9jYXRpb25DaGFuZ2VkKCk7CisgICAgdm9pZCB1c2VzUGFnZUNhY2hlQ2hhbmdlZCgpOwor
ICAgIHZvaWQgZG5zUHJlZmV0Y2hpbmdFbmFibGVkQ2hhbmdlZCgpOworICAgIHZvaWQgcmVzb3Vy
Y2VVc2FnZU92ZXJsYXlWaXNpYmxlQ2hhbmdlZCgpOworICAgIHZvaWQgc3RvcmFnZUJsb2NraW5n
UG9saWN5Q2hhbmdlZCgpOworICAgIHZvaWQgYmFja2dyb3VuZFNob3VsZEV4dGVuZEJleW9uZFBh
Z2VDaGFuZ2VkKCk7CisgICAgdm9pZCBzY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVk
Q2hhbmdlZCgpOworICAgIHZvaWQgaGlkZGVuUGFnZURPTVRpbWVyVGhyb3R0bGluZ1N0YXRlQ2hh
bmdlZCgpOworICAgIHZvaWQgaGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVk
Q2hhbmdlZCgpOworCiAgICAgUGFnZSogbV9wYWdlOwogCi0gICAgU3RyaW5nIG1fbWVkaWFUeXBl
T3ZlcnJpZGUgeyAic2NyZWVuIiB9OwotICAgIFVSTCBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb247
CiAgICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEZvbnRHZW5lcmljRmFtaWxpZXM+IG1fZm9udEdl
bmVyaWNGYW1pbGllczsKLSAgICBTZWN1cml0eU9yaWdpbjo6U3RvcmFnZUJsb2NraW5nUG9saWN5
IG1fc3RvcmFnZUJsb2NraW5nUG9saWN5IHsgU2VjdXJpdHlPcmlnaW46OkFsbG93QWxsU3RvcmFn
ZSB9OwogICAgIFNlY29uZHMgbV9sYXlvdXRJbnRlcnZhbDsKICAgICBTZWNvbmRzIG1fbWluaW11
bURPTVRpbWVySW50ZXJ2YWw7CiAKLSAgICBib29sIG1fbG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5
IDogMTsKLSAgICBib29sIG1fYXJlSW1hZ2VzRW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX2FyZVBs
dWdpbnNFbmFibGVkIDogMTsKLSAgICBib29sIG1faXNTY3JpcHRFbmFibGVkIDogMTsKLSAgICBi
b29sIG1fdXNlc1BhZ2VDYWNoZSA6IDE7Ci0gICAgYm9vbCBtX3Nob3dUaWxlZFNjcm9sbGluZ0lu
ZGljYXRvciA6IDE7Ci0gICAgYm9vbCBtX2JhY2tncm91bmRTaG91bGRFeHRlbmRCZXlvbmRQYWdl
IDogMTsKLSAgICBib29sIG1fZG5zUHJlZmV0Y2hpbmdFbmFibGVkIDogMTsKLSAgICBib29sIG1f
c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCA6IDE7Ci0KICAgICBUaW1lciBtX3Nl
dEltYWdlTG9hZGluZ1NldHRpbmdzVGltZXI7Ci0gICAgdm9pZCBpbWFnZUxvYWRpbmdTZXR0aW5n
c1RpbWVyRmlyZWQoKTsKLQotICAgIGJvb2wgbV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5n
RW5hYmxlZCA6IDE7Ci0gICAgYm9vbCBtX2hpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9u
RW5hYmxlZCA6IDE7Ci0KLSNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgYm9vbCBtX3Jl
c291cmNlVXNhZ2VPdmVybGF5VmlzaWJsZSB7IGZhbHNlIH07Ci0jZW5kaWYKIAotICAgIGJvb2wg
bV9oaWRkZW5QYWdlRE9NVGltZXJUaHJvdHRsaW5nQXV0b0luY3JlYXNlcyB7IGZhbHNlIH07Cisg
ICAgVmVjdG9yPENvbnRlbnRUeXBlPiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdh
cmVTdXBwb3J0OwogCiAjaWYgVVNFKEFWRk9VTkRBVElPTikKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgYm9vbCBnQVZGb3VuZGF0aW9uRW5hYmxlZDsKQEAgLTM2NCw4ICszMDksNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgc3RhdGljIGJvb2wgZ0xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFi
bGVkOwogICAgIHN0YXRpYyBib29sIGdSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZEVuYWJs
ZWQ7CiAgICAgc3RhdGljIGJvb2wgZ0FsbG93c0FueVNTTENlcnRpZmljYXRlOwotCi0gICAgVmVj
dG9yPENvbnRlbnRUeXBlPiBtX21lZGlhQ29udGVudFR5cGVzUmVxdWlyaW5nSGFyZHdhcmVTdXBw
b3J0OwogfTsKIAogaW5saW5lIGJvb2wgU2V0dGluZ3NCYXNlOjppc1Bvc3RMb2FkQ1BVVXNhZ2VN
ZWFzdXJlbWVudEVuYWJsZWQoKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>