<?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>154040</bug_id>
          
          <creation_ts>2016-02-09 11:11:31 -0800</creation_ts>
          <short_desc>CSP: Extract helper classes into their own files</short_desc>
          <delta_ts>2016-02-09 17:21:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>aestes</cc>
    
    <cc>bfulgham</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1163235</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-09 11:11:31 -0800</bug_when>
    <thetext>Currently ContentSecurityPolicy.cpp contains class definitions for various helper classes. We should extract these helper classes into their own files to better organize and compartmentalize the Content Security Policy code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163236</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-02-09 11:11:50 -0800</bug_when>
    <thetext>&lt;rdar://problem/24571189&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163248</commentid>
    <comment_count>2</comment_count>
      <attachid>270941</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-09 11:52:03 -0800</bug_when>
    <thetext>Created attachment 270941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163335</commentid>
    <comment_count>3</comment_count>
      <attachid>270941</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-02-09 16:22:13 -0800</bug_when>
    <thetext>Comment on attachment 270941
Patch

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

r=me. Please clean up the ChangeLog a bit so it&apos;s not so large -- most of that auto-generated information is not useful.

&gt; Source/WebCore/ChangeLog:16
&gt; +        (WebCore::ContentSecurityPolicy::didReceiveHeader): Ditto.

You should shrink this ChangeLog by just indicating:

WebCore::ContentSecurityPolicy implementation moved to page/csp/ContentSecurityPolicy.{h, cpp}:
WebCore::CSPSource implementation moved to page/csp/ContentSecurityPolicySource.{h, cpp}
... etc ...

&gt; Source/WebCore/ChangeLog:35
&gt; +        (WebCore::isSourceListNone): Deleted.

.... and mention which files these bare functions moved to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163359</commentid>
    <comment_count>4</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-09 17:20:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; [...]
&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        (WebCore::ContentSecurityPolicy::didReceiveHeader): Ditto.
&gt; 
&gt; You should shrink this ChangeLog by just indicating:
&gt; 
&gt; WebCore::ContentSecurityPolicy implementation moved to
&gt; page/csp/ContentSecurityPolicy.{h, cpp}:
&gt; WebCore::CSPSource implementation moved to
&gt; page/csp/ContentSecurityPolicySource.{h, cpp}
&gt; ... etc ...
&gt; 

Will fix before landing.

&gt; &gt; Source/WebCore/ChangeLog:35
&gt; &gt; +        (WebCore::isSourceListNone): Deleted.
&gt; 
&gt; .... and mention which files these bare functions moved to.

Will fix before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163360</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2016-02-09 17:21:21 -0800</bug_when>
    <thetext>Committed r196350: &lt;http://trac.webkit.org/changeset/196350&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270941</attachid>
            <date>2016-02-09 11:52:03 -0800</date>
            <delta_ts>2016-02-09 16:22:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154040-20160209115141.patch</filename>
            <type>text/plain</type>
            <size>165289</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk2MzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzcyMjZiZmU2YTBlNzc1
MDFhYzRmODJlZGEzNmUxNzcwNTM3M2RmYy4uYWYzMjY1YjM1MmZlNjc5OGRiNDIzZDhlZjkwOWY0
OWExZTM2YzlmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwNyBAQAorMjAxNi0wMi0wOSAgRGFu
aWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgQ1NQOiBFeHRyYWN0IGhl
bHBlciBjbGFzc2VzIGludG8gdGhlaXIgb3duIGZpbGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwNDAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzI0NTcxMTg5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5vIGJlaGF2aW9yIGNoYW5nZWQuIFNvLCBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDogQWRkIGZpbGVzIENvbnRlbnRTZWN1cml0eVBvbGljeXtEaXJlY3RpdmVM
aXN0LCBNZWRpYUxpc3REaXJlY3RpdmUsIFNvdXJjZSwgU291cmNlTGlzdCwgU291cmNlTGlzdERp
cmVjdGl2ZX0uY3BwLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajogRGl0dG8uCisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcDog
Q2xlYW4gdXAgI2luY2x1ZGVzLiBJbmNsdWRlIGhlYWRlciBQYXJzaW5nVXRpbGl0aWVzLmggc28g
dGhhdCB3ZSBjYW4gcmVtb3ZlIG91ciBvd24KKyAgICAgICAgdmFyaWFudHMgb2Ygc2tpcHtFeGFj
dGx5LCBVbnRpbCwgV2hpbGV9KCkuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OkNvbnRlbnRTZWN1cml0eVBvbGljeSk6IFVwZGF0ZSBhcyBuZWNlc3NhcnkgZHVlIHRv
IGNsYXNzIHJlbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6
ZGlkUmVjZWl2ZUhlYWRlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3Vy
aXR5UG9saWN5OjphbGxvd0phdmFTY3JpcHRVUkxzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW5saW5lRXZlbnRIYW5kbGVycyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0lubGluZVNj
cmlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5Ojph
bGxvd0lubGluZVN0eWxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3k6OmFsbG93RXZhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNl
Y3VyaXR5UG9saWN5OjphbGxvd1NjcmlwdEZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dPYmplY3RGcm9tU291cmNlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93Q2hpbGRG
cmFtZUZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeTo6YWxsb3dJbWFnZUZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dTdHlsZUZyb21Tb3VyY2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dGb250RnJvbVNvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxv
d01lZGlhRnJvbVNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3Vy
aXR5UG9saWN5OjphbGxvd0Nvbm5lY3RUb1NvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0Zvcm1BY3Rpb24pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dCYXNlVVJJKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpza2lwRXhhY3RseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpza2lwVW50aWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6c2tpcFdoaWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmlzU291cmNlTGlzdE5vbmUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlOjpDU1BTb3VyY2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Q1NQU291cmNlOjptYXRjaGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTUFNvdXJjZTo6c2NoZW1lTWF0Y2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDU1BTb3VyY2U6Omhvc3RNYXRjaGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
UFNvdXJjZTo6cGF0aE1hdGNoZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291
cmNlOjpwb3J0TWF0Y2hlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2U6
OmlzU2NoZW1lT25seSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0
OjphbGxvd0lubGluZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0
OjphbGxvd0V2YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6
YWxsb3dTZWxmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OkNT
UFNvdXJjZUxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6
cGFyc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6bWF0Y2hl
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjpwYXJzZVNvdXJj
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjpwYXJzZVNjaGVt
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BTb3VyY2VMaXN0OjpwYXJzZUhvc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQU291cmNlTGlzdDo6cGFyc2VQYXRoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUFNvdXJjZUxpc3Q6OnBhcnNlUG9ydCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmU6OkNTUERpcmVjdGl2ZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmU6OnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlOjpwb2xpY3kpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFMaXN0RGlyZWN0aXZlOjpNZWRpYUxpc3REaXJlY3RpdmUpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0RGlyZWN0aXZlOjphbGxvd3MpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0RGlyZWN0aXZlOjpwYXJzZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VMaXN0RGlyZWN0aXZlOjpTb3VyY2VMaXN0RGly
ZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUxpc3REaXJlY3RpdmU6
OmFsbG93cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VMaXN0RGlyZWN0aXZl
OjphbGxvd0lubGluZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VMaXN0RGly
ZWN0aXZlOjphbGxvd0V2YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0
aXZlTGlzdDo6aGVhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2
ZUxpc3Q6OmhlYWRlclR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0
aXZlTGlzdDo6ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmlzUmVwb3J0T25seSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpyZXBvcnRVUklzKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnNldEV2YWxEaXNh
YmxlZEVycm9yTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3Rp
dmVMaXN0OjpkZW55SWZFbmZvcmNpbmdQb2xpY3kpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NQRGlyZWN0aXZlTGlzdDo6Q1NQRGlyZWN0aXZlTGlzdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6cmVwb3J0VmlvbGF0aW9uKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmNoZWNrRXZhbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpjaGVja0lubGluZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpjaGVja1NvdXJjZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpjaGVja01lZGlhVHlwZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjpvcGVyYXRpdmVE
aXJlY3RpdmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6
Y2hlY2tFdmFsQW5kUmVwb3J0VmlvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTUERpcmVjdGl2ZUxpc3Q6OmNoZWNrTWVkaWFUeXBlQW5kUmVwb3J0VmlvbGF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmNoZWNrSW5saW5lQW5k
UmVwb3J0VmlvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2
ZUxpc3Q6OmNoZWNrU291cmNlQW5kUmVwb3J0VmlvbGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmFsbG93SmF2YVNjcmlwdFVSTHMpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVFdmVudEhh
bmRsZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmFs
bG93SW5saW5lU2NyaXB0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2
ZUxpc3Q6OmFsbG93SW5saW5lU3R5bGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQ
RGlyZWN0aXZlTGlzdDo6YWxsb3dFdmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNT
UERpcmVjdGl2ZUxpc3Q6OmFsbG93UGx1Z2luVHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDU1BEaXJlY3RpdmVMaXN0OjphbGxvd1NjcmlwdEZyb21Tb3VyY2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dPYmplY3RGcm9tU291cmNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OmFsbG93Q2hp
bGRGcmFtZUZyb21Tb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0
aXZlTGlzdDo6YWxsb3dJbWFnZUZyb21Tb3VyY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dTdHlsZUZyb21Tb3VyY2UpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dGb250RnJvbVNvdXJjZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjphbGxvd01lZGlhRnJv
bVNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0Ojph
bGxvd0Nvbm5lY3RUb1NvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJl
Y3RpdmVMaXN0OjphbGxvd0Zvcm1BY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dCYXNlVVJJKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNTUERpcmVjdGl2ZUxpc3Q6OnNldENTUERpcmVjdGl2ZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpDU1BEaXJlY3RpdmVMaXN0OjphcHBseVNhbmRib3hQb2xpY3kp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6cGFyc2VSZWZs
ZWN0ZWRYU1MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NQRGlyZWN0aXZlTGlzdDo6
YWRkRGlyZWN0aXZlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuaDoKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmU6OnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlOjpwb2xpY3kpOgorICAgICAgICAq
IHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmlzRXhwZXJpbWVudGFsRGlyZWN0aXZlTmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjppc0NTUERpcmVjdGl2ZU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6aXNEaXJl
Y3RpdmVOYW1lQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzRGlyZWN0aXZlVmFsdWVD
aGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OkNvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnJlcG9ydFZpb2xhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjaGVja0V2YWwp
OgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
Y2hlY2tJbmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdDo6Y2hlY2tTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y2hlY2tNZWRpYVR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6b3BlcmF0aXZlRGlyZWN0aXZl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6
OmNoZWNrRXZhbEFuZFJlcG9ydFZpb2xhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjaGVja01lZGlhVHlwZUFuZFJlcG9ydFZpb2xh
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVM
aXN0OjpjaGVja0lubGluZUFuZFJlcG9ydFZpb2xhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjaGVja1NvdXJjZUFuZFJlcG9ydFZp
b2xhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjphbGxvd0phdmFTY3JpcHRVUkxzKTogV3JpdGUgdXNpbmcgaWYtc3RhdGVtZW50IGlu
c3RlYWQgb2YgdGVybmFyeSBvcGVyYXRvciB0bworICAgICAgICBpbXByb3ZlIHJlYWRhYmlsaXR5
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
YWxsb3dJbmxpbmVFdmVudEhhbmRsZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0lubGluZVNjcmlwdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
YWxsb3dJbmxpbmVTdHlsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3Vy
aXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dFdmFsKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd1BsdWdpblR5cGUp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OmFsbG93U2NyaXB0RnJvbVNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dPYmplY3RGcm9tU291cmNl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmVMaXN0OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0ltYWdlRnJvbVNv
dXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdDo6YWxsb3dTdHlsZUZyb21Tb3VyY2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93Rm9udEZyb21Tb3Vy
Y2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OmFsbG93TWVkaWFGcm9tU291cmNlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0Nvbm5lY3RUb1NvdXJj
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6YWxsb3dGb3JtQWN0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250
ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0Jhc2VVUkkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNl
KTogV3JpdGUgaW4gdGVybXMgb2YgdGhlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIFBhcnNpbmdVdGls
aXRpZXMuaC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlcG9ydFVSSSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6c2V0Q1NQ
RGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpwYXJzZVJlZmxlY3RlZFhTUyk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWRk
RGlyZWN0aXZlKToKKyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJl
Y3RpdmVMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6aGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmhlYWRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6ZXZhbERpc2FibGVkRXJyb3JNZXNz
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3Q6OnJlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmlzUmVwb3J0T25seSk6CisgICAgICAgIChXZWJD
b3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpyZXBvcnRVUklzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnNldEV2
YWxEaXNhYmxlZEVycm9yTWVzc2FnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpkZW55SWZFbmZvcmNpbmdQb2xpY3kpOgorICAgICAgICAq
IHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6aXNNZWRpYVR5cGVDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6aXNOb3RBU0NJSVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFM
aXN0RGlyZWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeU1l
ZGlhTGlzdERpcmVjdGl2ZTo6YWxsb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1
cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UpOiBXcml0ZSBpbiB0ZXJtcyBvZiB0
aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gUGFyc2luZ1V0aWxpdGllcy5oLgorICAgICAgICAqIHBh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5oOiBBZGRlZC4K
KyAgICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0
eVBvbGljeVNvdXJjZTo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2U6OnNjaGVtZU1hdGNoZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlOjpob3N0TWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OnBhdGhNYXRjaGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZTo6cG9ydE1hdGNoZXMpOgorICAgICAgICAo
V2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlOjppc1NjaGVtZU9ubHkpOgorICAg
ICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjppc1NvdXJjZUNoYXJhY3Rlcik6CisgICAgICAgIChXZWJD
b3JlOjppc0hvc3RDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNQYXRoQ29tcG9uZW50
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTm90Q29sb25PclNsYXNoKToKKyAgICAgICAgKFdl
YkNvcmU6OmlzU291cmNlTGlzdE5vbmUpOiBXcml0ZSBpbiB0ZXJtcyBvZiB0aGUgZnVuY3Rpb25z
IGRlZmluZWQgaW4gUGFyc2luZ1V0aWxpdGllcy5oLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpw
YXJzZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291
cmNlTGlzdDo6bWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VTY2hlbWUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OnBhcnNlSG9zdCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2VQYXRoKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0OjpwYXJzZVBvcnQpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6YWxsb3dJbmxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6YWxsb3dFdmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Q6OmFsbG93
U2VsZik6CisgICAgICAgICogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dERpcmVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0RGlyZWN0aXZlOjphbGxvd3MpOgorICAgICAgICAqIHBhZ2UvY3NwL0NvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlOjphbGxvd0lubGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0
aXZlOjphbGxvd0V2YWwpOgorCiAyMDE2LTAyLTA5ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTk2Mjg2
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCBjM2IwN2VhYTUxNThhZTNlYWEyM2UwM2MyYzIxNDhm
MTE0YjIzZTE2Li42MTQ1MTQ2Njg1YzE3YTMxNjljY2RlMjJlNTY1MmZiYjMxMGU1Mzc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dApAQCAtMjA3Miw3ICsyMDcyLDEyIEBAIHNldChXZWJDb3JlX1NPVVJD
RVMKICAgICBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKIAogICAgIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5jcHAKKyAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcAorICAgIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwCisgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlLmNwcAorICAgIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3QuY3BwCisgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVj
dGl2ZS5jcHAKIAogICAgIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5jcHAK
ICAgICBwYWdlL3Njcm9sbGluZy9TY3JvbGxMYXRjaGluZ1N0YXRlLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFjOTYyMDUx
NDk3ZWQ5NzE3ZDU3OTEyYmUxMTg0MDNjZDBhODkxMzAuLmNmZWNjNmE0ZjE5YWE5OTIwNWNiMWUw
YjI0OGY5OGJkYzhiMTIzYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYxNzksNiArNjE3OSwxNyBAQAogCQlDRTEyNTI1QjFB
MUMwMTgyMDA4NjQ0ODAgLyogQ0ZOZXR3b3JrU1BJLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTEyNTI1QTFBMUMwMTgyMDA4NjQ0ODAgLyogQ0ZOZXR3
b3JrU1BJLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQ0U2REFERjkxQzU5MUU2QTAwM0Y2QTg4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3Bv
bnNlSGVhZGVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRTZEQURGNzFDNTkxRTZBMDAzRjZBODggLyogQ29udGVudFNlY3VyaXR5UG9saWN5UmVz
cG9uc2VIZWFkZXJzLmNwcCAqLzsgfTsKIAkJQ0U2REFERkExQzU5MUU2QTAwM0Y2QTg4IC8qIENv
bnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U2REFERjgxQzU5MUU2QTAwM0Y2QTg4IC8qIENv
bnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5oICovOyB9OworCQlDRTc5OUY5NzFD
NkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTc5OUY5NTFDNkE0
NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAgKi87IH07
CisJCUNFNzk5Rjk4MUM2QTQ2QkMwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBD
RTc5OUY5NjFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dC5oICovOyB9OworCQlDRTc5OUY5QjFDNkE0QkNEMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRTc5OUY5OTFDNkE0QkNEMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAgKi87IH07CisJCUNFNzk5RjlDMUM2QTRCQ0QwMDk3QjUx
OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTc5OUY5QTFDNkE0QkNEMDA5N0I1MTgg
LyogQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oICovOyB9OworCQlDRTc5OUY5
RjFDNkE0QzE2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNzk5RjlEMUM2QTRD
MTYwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwICovOyB9OworCQlD
RTc5OUZBMDFDNkE0QzE2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTc5OUY5RTFD
NkE0QzE2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmggKi87IH07CisJ
CUNFNzk5RkE0MUM2QTUwM0EwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3Rp
dmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFNzk5
RkEyMUM2QTUwM0EwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuaCAq
LzsgfTsKKwkJQ0U3OTlGQTcxQzZBNTA1NzAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGlj
eU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRTc5OUZBNTFDNkE1MDU3MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5
UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNwcCAqLzsgfTsKKwkJQ0U3OTlGQTgxQzZBNTA1NzAw
OTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0U3OTlGQTYxQzZBNTA1
NzAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5oICov
OyB9OworCQlDRTc5OUZBQjFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRTc5OUZBOTFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5jcHAgKi87IH07CisJCUNFNzk5RkFDMUM2QTUwNjYw
MDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRTc5OUZBQTFDNkE1
MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5o
ICovOyB9OwogCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBDRTdCMkRBRjE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0U3
QjJEQjQxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0IyREIwMTU4
NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIubW0gKi87IH07CiAJ
CUNFN0IyREI1MTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENFN0IyREIxMTU4
NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTQxMjgsNiArMTQxMzksMTcg
QEAKIAkJQ0U2RDg5Mjk0QzdBQUNFMEFEODlCM0REIC8qIE1hdGhNTE1lbmNsb3NlRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYXRoTUxNZW5jbG9zZUVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0U2REFERjcxQzU5MUU2QTAwM0Y2QTg4
IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVycy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhl
YWRlcnMuY3BwOyBwYXRoID0gY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVJlc3BvbnNlSGVhZGVy
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNFNkRBREY4MUM1OTFFNkEwMDNG
NkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFk
ZXJzLmg7IHBhdGggPSBjc3AvQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VIZWFkZXJzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFNzk5Rjk1MUM2QTQ2QkMwMDk3QjUxOCAv
KiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwOyBw
YXRoID0gY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlDRTc5OUY5NjFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmg7IHBhdGggPSBjc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlD
RTc5OUY5OTFDNkE0QkNEMDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZl
TGlzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcDsgcGF0aCA9IGNzcC9Db250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0U3
OTlGOUExQzZBNEJDRDAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdC5oOyBwYXRoID0gY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVj
dGl2ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0U3OTlGOUQxQzZBNEMx
NjAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3Bw
OyBwYXRoID0gY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNFNzk5RjlFMUM2QTRDMTYwMDk3QjUxOCAvKiBDb250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlLmg7IHBhdGggPSBjc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNFNzk5RkEyMUM2QTUw
M0EwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlLmg7
IHBhdGggPSBjc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUNFNzk5RkE1MUM2QTUwNTcwMDk3QjUxOCAvKiBDb250ZW50U2Vj
dXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmNw
cDsgcGF0aCA9IGNzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTc5OUZBNjFDNkE1MDU3MDA5N0I1MTgg
LyogQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVj
dGl2ZS5oOyBwYXRoID0gY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlDRTc5OUZBOTFDNkE1MDY2MDA5N0I1
MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0RGlyZWN0aXZlLmNwcDsgcGF0aCA9IGNzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0RGlyZWN0aXZlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0U3OTlG
QUExQzZBNTA2NjAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5oOyBwYXRoID0gY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3REaXJlY3RpdmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0U3QjJEQUYxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHRlcm5hdGl2ZVRleHRVSUNvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0U3QjJEQjAxNTg2QUJBRDAw
OThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0U3QjJEQjExNTg2QUJBRDAwOThCM0ZBIC8q
IFRleHRBbHRlcm5hdGl2ZVdpdGhSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0QWx0ZXJuYXRpdmVXaXRoUmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTIzMDE3LDYgKzIzMDM5LDE3IEBACiAJCQkJOTdDNDcxREExMkY5MjVCRDAwODYzNTRC
IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeS5oICovLAogCQkJCUNFNkRBREY3MUM1OTFFNkEwMDNG
NkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhlYWRlcnMuY3BwICovLAogCQkJ
CUNFNkRBREY4MUM1OTFFNkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnMuaCAqLywKKwkJCQlDRTc5OUZBMjFDNkE1MDNBMDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlLmggKi8sCisJCQkJQ0U3OTlGOTkxQzZBNEJDRDAwOTdCNTE4
IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3BwICovLAorCQkJCUNFNzk5
RjlBMUM2QTRCQ0QwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
LmggKi8sCisJCQkJQ0U3OTlGQTUxQzZBNTA1NzAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBv
bGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAgKi8sCisJCQkJQ0U3OTlGQTYxQzZBNTA1NzAwOTdC
NTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5oICovLAorCQkJ
CUNFNzk5RjlEMUM2QTRDMTYwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2Uu
Y3BwICovLAorCQkJCUNFNzk5RjlFMUM2QTRDMTYwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2UuaCAqLywKKwkJCQlDRTc5OUY5NTFDNkE0NkJDMDA5N0I1MTggLyogQ29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5jcHAgKi8sCisJCQkJQ0U3OTlGOTYxQzZBNDZCQzAw
OTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaCAqLywKKwkJCQlDRTc5
OUZBOTFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZS5jcHAgKi8sCisJCQkJQ0U3OTlGQUExQzZBNTA2NjAwOTdCNTE4IC8qIENvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuaCAqLywKIAkJCSk7CiAJCQluYW1lID0g
Y3NwOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1MDU4LDcgKzI1MDkxLDYgQEAK
IAkJCQk1Q0RGQTZDODFBQTRGMkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVuc2lvbkFjdGlvbnMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDOTNGMzRFMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50
RXh0ZW5zaW9uQ29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRkRDNTdEMUFDMUQ4MDUw
MEUyNEE1NyAvKiBDb250ZW50RXh0ZW5zaW9uRXJyb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCUNF
NkRBREZBMUM1OTFFNkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25zZUhl
YWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2RjBDODk4MUEyRTcyNEIwMDI3OTRGOCAvKiBD
b250ZW50RXh0ZW5zaW9uUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNkYwQzg5QzFBMkVD
MTEwMDAyNzk0RjggLyogQ29udGVudEV4dGVuc2lvblJ1bGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTI2RjBDOEEwMUEyRUMzQkUwMDI3OTRGOCAvKiBDb250ZW50RXh0ZW5zaW9uc0JhY2tlbmQuaCBp
biBIZWFkZXJzICovLApAQCAtMjUwNjcsNiArMjUwOTksMTMgQEAKIAkJCQlBMTQ5Nzg2RjFBQkFG
MzM4MDBDRUY3RTQgLyogQ29udGVudEZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0MDkw
RkQxQUE1MUU0ODAwOTExOTFBIC8qIENvbnRlbnRGaWx0ZXJVbmJsb2NrSGFuZGxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTdDNDcxREMxMkY5MjVCRDAwODYzNTRCIC8qIENvbnRlbnRTZWN1cml0
eVBvbGljeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0U3OTlGQTQxQzZBNTAzQTAwOTdCNTE4IC8q
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0U3
OTlGOUMxQzZBNEJDRDAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3QuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFNzk5RkE4MUM2QTUwNTcwMDk3QjUxOCAvKiBDb250
ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUNFNkRBREZBMUM1OTFFNkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lSZXNwb25z
ZUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFNzk5RkEwMUM2QTRDMTYwMDk3QjUxOCAv
KiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCUNFNzk5
Rjk4MUM2QTQ2QkMwMDk3QjUxOCAvKiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQlDRTc5OUZBQzFDNkE1MDY2MDA5N0I1MTggLyogQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFE
MDE1Q0EwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzYyN0I4RTE0RkIzQ0VFMDAyQ0RDQTEgLyogQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzQjZBMEU2MEIwQkNBNUMwMEY1MDI3QSAvKiBDb250ZXh0
TWVudS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODk3Niw2ICsyOTAxNSwxMiBAQAogCQkJCUExNDk3
ODZFMUFCQUYzMzgwMENFRjdFNCAvKiBDb250ZW50RmlsdGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUExNDA5MEZCMUFBNTFFMUQwMDkxMTkxQSAvKiBDb250ZW50RmlsdGVyVW5ibG9ja0hhbmRs
ZXJDb2NvYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3QzQ3MURCMTJGOTI1QkQwMDg2MzU0QiAv
KiBDb250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0U3OTlGOUIx
QzZBNEJDRDAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQ0U3OTlGQTcxQzZBNTA1NzAwOTdCNTE4IC8qIENvbnRlbnRT
ZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlD
RTZEQURGOTFDNTkxRTZBMDAzRjZBODggLyogQ29udGVudFNlY3VyaXR5UG9saWN5UmVzcG9uc2VI
ZWFkZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUNFNzk5RjlGMUM2QTRDMTYwMDk3QjUxOCAv
KiBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0U3
OTlGOTcxQzZBNDZCQzAwOTdCNTE4IC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQ0U3OTlGQUIxQzZBNTA2NjAwOTdCNTE4IC8qIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDFEMDE1Q0IwRjRCNUM3MTAwNEE2NjJGIC8qIENvbnRlbnRUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk3NjI3QjhEMTRGQjNDRUUwMDJDRENBMSAvKiBDb250ZXh0RGVzdHJ1Y3Rpb25P
YnNlcnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUI0MEVFMjFCRjQyN0RCMDBCQTgxQkUg
LyogQ29udGV4dE1lbnUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMTc2OSw3ICszMTgxNCw2IEBA
CiAJCQkJN0M0OEE2RDAxOTFDOUQ2NTAwMDI2Njc0IC8qIFdlYktpdE5hbWVzcGFjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNURFQkRBMzE2RkI5MDg3MDA4MzZGRTAgLyogV2ViS2l0UGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzMUMwRkYy
NDBFNENFQjZFMDA3RDZGRTUgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCUNFNkRBREY5MUM1OTFFNkEwMDNGNkE4OCAvKiBDb250ZW50U2VjdXJpdHlQb2xp
Y3lSZXNwb25zZUhlYWRlcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMzMkUwRjJCOUEy
NTAwNEI2Nzk1IC8qIFdlYkxheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMDcwOUQ3OEUxQUU1
NTU1NDAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMDcwOUQ3OTIxQUU1NTU3RTAwNEU0MkY4IC8qIFdlYk1lZGlhU2Vzc2lvbk1hbmFnZXJN
YWMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29u
dGVudFNlY3VyaXR5UG9saWN5LmNwcAppbmRleCA0OGVjMTM1NGE0NjE4OGRlMDFjNjQ5Y2E3NDI3
MjVmZWY1YzQzYmFhLi40ZjE1OWRmYmJkZjIxMzk4ZDUyNTZhM2RkZDAxYzBjMTFiNTczMjk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5j
cHAKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ29u
dGVudFNlY3VyaXR5UG9saWN5LmgiCiAKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmUuaCIKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0
LmgiCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmgiCisjaW5jbHVkZSAi
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oIgogI2luY2x1ZGUgIkRPTVN0cmluZ0xp
c3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCkBAIC0z
NCwxMjg5ICszOCwyMSBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSlNNYWluVGhyZWFkRXhlY1N0YXRlLmgiCisj
aW5jbHVkZSAiUGFyc2luZ1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIlBpbmdMb2FkZXIuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZW1lUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmgiCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9T
Y3JpcHRDYWxsU3RhY2suaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrRmFj
dG9yeS5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFBvc2l0aW9uLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gTm9ybWFsbHkg
V2ViS2l0IHVzZXMgInN0YXRpYyIgZm9yIGludGVybmFsIGxpbmthZ2UsIGJ1dCB1c2luZyAic3Rh
dGljIiBmb3IKLS8vIHRoZXNlIGZ1bmN0aW9ucyBjYXVzZXMgYSBjb21waWxlIGVycm9yIGJlY2F1
c2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIGFzCi0vLyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLgot
bmFtZXNwYWNlIHsKLQotYm9vbCBpc0RpcmVjdGl2ZU5hbWVDaGFyYWN0ZXIoVUNoYXIgYykKLXsK
LSAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8fCBjID09ICctJzsKLX0KLQotYm9v
bCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIGlzQVND
SUlTcGFjZShjKSB8fCAoYyA+PSAweDIxICYmIGMgPD0gMHg3ZSk7IC8vIFdoaXRlc3BhY2UgKyBW
Q0hBUgotfQotCi1ib29sIGlzU291cmNlQ2hhcmFjdGVyKFVDaGFyIGMpCi17Ci0gICAgcmV0dXJu
ICFpc0FTQ0lJU3BhY2UoYyk7Ci19Ci0KLWJvb2wgaXNQYXRoQ29tcG9uZW50Q2hhcmFjdGVyKFVD
aGFyIGMpCi17Ci0gICAgcmV0dXJuIGMgIT0gJz8nICYmIGMgIT0gJyMnOwotfQotCi1ib29sIGlz
SG9zdENoYXJhY3RlcihVQ2hhciBjKQotewotICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmlj
KGMpIHx8IGMgPT0gJy0nOwotfQotCi1ib29sIGlzU2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVy
KFVDaGFyIGMpCi17Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAn
KycgfHwgYyA9PSAnLScgfHwgYyA9PSAnLic7Ci19Ci0KLWJvb2wgaXNOb3RBU0NJSVNwYWNlKFVD
aGFyIGMpCi17Ci0gICAgcmV0dXJuICFpc0FTQ0lJU3BhY2UoYyk7Ci19Ci0KLWJvb2wgaXNOb3RD
b2xvbk9yU2xhc2goVUNoYXIgYykKLXsKLSAgICByZXR1cm4gYyAhPSAnOicgJiYgYyAhPSAnLyc7
Ci19Ci0KLWJvb2wgaXNNZWRpYVR5cGVDaGFyYWN0ZXIoVUNoYXIgYykKLXsKLSAgICByZXR1cm4g
IWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsKLX0KLQotLy8gQ1NQIDEuMCBEaXJlY3RpdmVz
Ci1zdGF0aWMgY29uc3QgY2hhciBjb25uZWN0U3JjW10gPSAiY29ubmVjdC1zcmMiOwotc3RhdGlj
IGNvbnN0IGNoYXIgZGVmYXVsdFNyY1tdID0gImRlZmF1bHQtc3JjIjsKLXN0YXRpYyBjb25zdCBj
aGFyIGZvbnRTcmNbXSA9ICJmb250LXNyYyI7Ci1zdGF0aWMgY29uc3QgY2hhciBmcmFtZVNyY1td
ID0gImZyYW1lLXNyYyI7Ci1zdGF0aWMgY29uc3QgY2hhciBpbWdTcmNbXSA9ICJpbWctc3JjIjsK
LXN0YXRpYyBjb25zdCBjaGFyIG1lZGlhU3JjW10gPSAibWVkaWEtc3JjIjsKLXN0YXRpYyBjb25z
dCBjaGFyIG9iamVjdFNyY1tdID0gIm9iamVjdC1zcmMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmVw
b3J0VVJJW10gPSAicmVwb3J0LXVyaSI7Ci1zdGF0aWMgY29uc3QgY2hhciBzYW5kYm94W10gPSAi
c2FuZGJveCI7Ci1zdGF0aWMgY29uc3QgY2hhciBzY3JpcHRTcmNbXSA9ICJzY3JpcHQtc3JjIjsK
LXN0YXRpYyBjb25zdCBjaGFyIHN0eWxlU3JjW10gPSAic3R5bGUtc3JjIjsKLQotLy8gQ1NQIDEu
MSBEaXJlY3RpdmVzCi1zdGF0aWMgY29uc3QgY2hhciBiYXNlVVJJW10gPSAiYmFzZS11cmkiOwot
c3RhdGljIGNvbnN0IGNoYXIgZm9ybUFjdGlvbltdID0gImZvcm0tYWN0aW9uIjsKLXN0YXRpYyBj
b25zdCBjaGFyIHBsdWdpblR5cGVzW10gPSAicGx1Z2luLXR5cGVzIjsKLSNpZiBFTkFCTEUoQ1NQ
X05FWFQpCi1zdGF0aWMgY29uc3QgY2hhciByZWZsZWN0ZWRYU1NbXSA9ICJyZWZsZWN0ZWQteHNz
IjsKLSNlbmRpZgotCi0jaWYgRU5BQkxFKENTUF9ORVhUKQotCi1zdGF0aWMgaW5saW5lIGJvb2wg
aXNFeHBlcmltZW50YWxEaXJlY3RpdmVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBy
ZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgYmFzZVVSSSkKLSAgICAg
ICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgZm9ybUFjdGlvbikKLSAg
ICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgcGx1Z2luVHlwZXMp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIHJlZmxlY3Rl
ZFhTUyk7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0V4cGVyaW1lbnRhbERp
cmVjdGl2ZU5hbWUoY29uc3QgU3RyaW5nJikKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLSNl
bmRpZgotCi1ib29sIGlzRGlyZWN0aXZlTmFtZShjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAg
cmV0dXJuIGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGNvbm5lY3RTcmMpCi0g
ICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGRlZmF1bHRTcmMp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGZvbnRTcmMp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGZyYW1lU3Jj
KQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBpbWdTcmMp
Ci0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIG1lZGlhU3Jj
KQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBvYmplY3RT
cmMpCi0gICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIHJlcG9y
dFVSSSkKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgc2Fu
ZGJveCkKLSAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgc2Ny
aXB0U3JjKQotICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBz
dHlsZVNyYykKLSAgICAgICAgfHwgaXNFeHBlcmltZW50YWxEaXJlY3RpdmVOYW1lKG5hbWUpOwot
fQotCi19IC8vIG5hbWVzcGFjZQotCi1zdGF0aWMgYm9vbCBza2lwRXhhY3RseShjb25zdCBVQ2hh
ciomIHBvc2l0aW9uLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciBkZWxpbWl0ZXIpCi17Ci0gICAg
aWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSBkZWxpbWl0ZXIpIHsKLSAgICAgICAg
Kytwb3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdGVtcGxhdGU8Ym9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNoYXIpPgotc3RhdGlj
IGJvb2wgc2tpcEV4YWN0bHkoY29uc3QgVUNoYXIqJiBwb3NpdGlvbiwgY29uc3QgVUNoYXIqIGVu
ZCkKLXsKLSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgY2hhcmFjdGVyUHJlZGljYXRlKCpwb3Np
dGlvbikpIHsKLSAgICAgICAgKytwb3NpdGlvbjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgc2tpcFVudGlsKGNvbnN0IFVD
aGFyKiYgcG9zaXRpb24sIGNvbnN0IFVDaGFyKiBlbmQsIFVDaGFyIGRlbGltaXRlcikKLXsKLSAg
ICB3aGlsZSAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uICE9IGRlbGltaXRlcikKLSAgICAg
ICAgKytwb3NpdGlvbjsKLX0KLQotdGVtcGxhdGU8Ym9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNo
YXIpPgotc3RhdGljIHZvaWQgc2tpcFdoaWxlKGNvbnN0IFVDaGFyKiYgcG9zaXRpb24sIGNvbnN0
IFVDaGFyKiBlbmQpCi17Ci0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kICYmIGNoYXJhY3RlclBy
ZWRpY2F0ZSgqcG9zaXRpb24pKQotICAgICAgICArK3Bvc2l0aW9uOwotfQotCi1zdGF0aWMgYm9v
bCBpc1NvdXJjZUxpc3ROb25lKGNvbnN0IFN0cmluZyYgdmFsdWUpCi17Ci0gICAgYXV0byBjaGFy
YWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGJlZ2luID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0g
Y2hhcmFjdGVycyArIHZhbHVlLmxlbmd0aCgpOwotICAgIHNraXBXaGlsZTxpc0FTQ0lJU3BhY2U+
KGJlZ2luLCBlbmQpOwotCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAg
c2tpcFdoaWxlPGlzU291cmNlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLSAgICBpZiAoIWVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luLCAiJ25v
bmUnIikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNraXBXaGlsZTxpc0FTQ0lJU3Bh
Y2U+KHBvc2l0aW9uLCBlbmQpOwotICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1jbGFzcyBDU1BTb3VyY2Ugewot
cHVibGljOgotICAgIENTUFNvdXJjZShjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGlj
eSwgY29uc3QgU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFN0cmluZyYgaG9zdCwgaW50IHBvcnQsIGNv
bnN0IFN0cmluZyYgcGF0aCwgYm9vbCBob3N0SGFzV2lsZGNhcmQsIGJvb2wgcG9ydEhhc1dpbGRj
YXJkKQotICAgICAgICA6IG1fcG9saWN5KHBvbGljeSkKLSAgICAgICAgLCBtX3NjaGVtZShzY2hl
bWUpCi0gICAgICAgICwgbV9ob3N0KGhvc3QpCi0gICAgICAgICwgbV9wb3J0KHBvcnQpCi0gICAg
ICAgICwgbV9wYXRoKHBhdGgpCi0gICAgICAgICwgbV9ob3N0SGFzV2lsZGNhcmQoaG9zdEhhc1dp
bGRjYXJkKQotICAgICAgICAsIG1fcG9ydEhhc1dpbGRjYXJkKHBvcnRIYXNXaWxkY2FyZCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgYm9vbCBtYXRjaGVzKGNvbnN0IFVSTCYgdXJsKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKCFzY2hlbWVNYXRjaGVzKHVybCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChpc1NjaGVtZU9ubHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICByZXR1cm4gaG9zdE1hdGNoZXModXJsKSAmJiBwb3J0TWF0Y2hlcyh1cmwp
ICYmIHBhdGhNYXRjaGVzKHVybCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIGJvb2wgc2NoZW1l
TWF0Y2hlcyhjb25zdCBVUkwmIHVybCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3NjaGVt
ZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9wb2xpY3kucHJvdG9jb2xNYXRjaGVz
U2VsZih1cmwpOwotICAgICAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJv
dG9jb2woKSwgbV9zY2hlbWUpOwotICAgIH0KLQotICAgIGJvb2wgaG9zdE1hdGNoZXMoY29uc3Qg
VVJMJiB1cmwpIGNvbnN0Ci0gICAgewotICAgICAgICBjb25zdCBTdHJpbmcmIGhvc3QgPSB1cmwu
aG9zdCgpOwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShob3N0LCBtX2hvc3Qp
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBtX2hvc3RIYXNXaWxk
Y2FyZCAmJiBob3N0LmVuZHNXaXRoKCIuIiArIG1faG9zdCwgZmFsc2UpOwotCi0gICAgfQotCi0g
ICAgYm9vbCBwYXRoTWF0Y2hlcyhjb25zdCBVUkwmIHVybCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmIChtX3BhdGguaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAg
ICAgU3RyaW5nIHBhdGggPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModXJsLnBhdGgoKSk7Ci0K
LSAgICAgICAgaWYgKG1fcGF0aC5lbmRzV2l0aCgiLyIpKQotICAgICAgICAgICAgcmV0dXJuIHBh
dGguc3RhcnRzV2l0aChtX3BhdGgsIGZhbHNlKTsKLQotICAgICAgICByZXR1cm4gcGF0aCA9PSBt
X3BhdGg7Ci0gICAgfQotCi0gICAgYm9vbCBwb3J0TWF0Y2hlcyhjb25zdCBVUkwmIHVybCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChtX3BvcnRIYXNXaWxkY2FyZCkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgIGludCBwb3J0ID0gdXJsLnBvcnQoKTsKLQotICAgICAgICBp
ZiAocG9ydCA9PSBtX3BvcnQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBp
ZiAoIXBvcnQpCi0gICAgICAgICAgICByZXR1cm4gaXNEZWZhdWx0UG9ydEZvclByb3RvY29sKG1f
cG9ydCwgdXJsLnByb3RvY29sKCkpOwotCi0gICAgICAgIGlmICghbV9wb3J0KQotICAgICAgICAg
ICAgcmV0dXJuIGlzRGVmYXVsdFBvcnRGb3JQcm90b2NvbChwb3J0LCB1cmwucHJvdG9jb2woKSk7
Ci0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNTY2hlbWVPbmx5
KCkgY29uc3QgeyByZXR1cm4gbV9ob3N0LmlzRW1wdHkoKTsgfQotCi0gICAgY29uc3QgQ29udGVu
dFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKLSAgICBTdHJpbmcgbV9zY2hlbWU7Ci0gICAgU3Ry
aW5nIG1faG9zdDsKLSAgICBpbnQgbV9wb3J0OwotICAgIFN0cmluZyBtX3BhdGg7Ci0KLSAgICBi
b29sIG1faG9zdEhhc1dpbGRjYXJkOwotICAgIGJvb2wgbV9wb3J0SGFzV2lsZGNhcmQ7Ci19Owot
Ci1jbGFzcyBDU1BTb3VyY2VMaXN0IHsKLXB1YmxpYzoKLSAgICBDU1BTb3VyY2VMaXN0KGNvbnN0
IENvbnRlbnRTZWN1cml0eVBvbGljeSYsIGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlTmFtZSk7Ci0K
LSAgICB2b2lkIHBhcnNlKGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgbWF0Y2hlcyhjb25zdCBV
UkwmKTsKLSAgICBib29sIGFsbG93SW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0lubGlu
ZTsgfQotICAgIGJvb2wgYWxsb3dFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd0V2YWw7IH0K
LSAgICBib29sIGFsbG93U2VsZigpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dTZWxmOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBwYXJzZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQpOwotCi0gICAgYm9vbCBwYXJzZVNvdXJjZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVD
aGFyKiBlbmQsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3QsIGludCYgcG9ydCwgU3RyaW5n
JiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7Ci0g
ICAgYm9vbCBwYXJzZVNjaGVtZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IFN0cmluZyYgc2NoZW1lKTsKLSAgICBib29sIHBhcnNlSG9zdChjb25zdCBVQ2hhciogYmVnaW4s
IGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgaG9zdCwgYm9vbCYgaG9zdEhhc1dpbGRjYXJkKTsK
LSAgICBib29sIHBhcnNlUG9ydChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQs
IGludCYgcG9ydCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKTsKLSAgICBib29sIHBhcnNlUGF0aChj
b25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgcGF0aCk7Ci0KLSAg
ICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwotICAgIFZlY3RvcjxDU1BT
b3VyY2U+IG1fbGlzdDsKLSAgICBTdHJpbmcgbV9kaXJlY3RpdmVOYW1lOwotICAgIGJvb2wgbV9h
bGxvd1NlbGYgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9hbGxvd1N0YXIgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9hbGxvd0lubGluZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2FsbG93RXZhbCB7IGZh
bHNlIH07Ci19OwotCi1DU1BTb3VyY2VMaXN0OjpDU1BTb3VyY2VMaXN0KGNvbnN0IENvbnRlbnRT
ZWN1cml0eVBvbGljeSYgcG9saWN5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUpCi0gICAg
OiBtX3BvbGljeShwb2xpY3kpCi0gICAgLCBtX2RpcmVjdGl2ZU5hbWUoZGlyZWN0aXZlTmFtZSkK
LXsKLX0KLQotdm9pZCBDU1BTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcmIHZhbHVlKQot
ewotICAgIC8vIFdlIHJlcHJlc2VudCAnbm9uZScgYXMgYW4gZW1wdHkgbV9saXN0LgotICAgIGlm
IChpc1NvdXJjZUxpc3ROb25lKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gY2hh
cmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotICAg
IHBhcnNlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSk7Ci19Ci0KLWJv
b2wgQ1NQU291cmNlTGlzdDo6bWF0Y2hlcyhjb25zdCBVUkwmIHVybCkKLXsKLSAgICBpZiAobV9h
bGxvd1N0YXIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgVVJMIGVmZmVjdGl2ZVVSTCA9
IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRVc2VJbm5lclVSTCh1cmwpID8gU2VjdXJpdHlPcmlnaW46
OmV4dHJhY3RJbm5lclVSTCh1cmwpIDogdXJsOwotCi0gICAgaWYgKG1fYWxsb3dTZWxmICYmIG1f
cG9saWN5LnVybE1hdGNoZXNTZWxmKGVmZmVjdGl2ZVVSTCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fbGlzdCkgewotICAgICAgICBpZiAoZW50cnku
bWF0Y2hlcyhlZmZlY3RpdmVVUkwpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0vLyBzb3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBz
b3VyY2UgKiggMSpXU1Agc291cmNlICkgKldTUCBdCi0vLyAgICAgICAgICAgICAgICAgICAvICpX
U1AgIidub25lJyIgKldTUAotLy8KLXZvaWQgQ1NQU291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNo
YXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKQotewotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlv
biA9IGJlZ2luOwotCi0gICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBX
aGlsZTxpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBpZiAocG9zaXRpb24g
PT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGNvbnN0IFVDaGFyKiBiZWdp
blNvdXJjZSA9IHBvc2l0aW9uOwotICAgICAgICBza2lwV2hpbGU8aXNTb3VyY2VDaGFyYWN0ZXI+
KHBvc2l0aW9uLCBlbmQpOwotCi0gICAgICAgIFN0cmluZyBzY2hlbWUsIGhvc3QsIHBhdGg7Ci0g
ICAgICAgIGludCBwb3J0ID0gMDsKLSAgICAgICAgYm9vbCBob3N0SGFzV2lsZGNhcmQgPSBmYWxz
ZTsKLSAgICAgICAgYm9vbCBwb3J0SGFzV2lsZGNhcmQgPSBmYWxzZTsKLQotICAgICAgICBpZiAo
cGFyc2VTb3VyY2UoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uLCBzY2hlbWUsIGhvc3QsIHBvcnQsIHBh
dGgsIGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSkgewotICAgICAgICAgICAgLy8g
V2lsZGNhcmQgaG9zdHMgYW5kIGtleXdvcmQgc291cmNlcyAoJ3NlbGYnLCAndW5zYWZlLWlubGlu
ZScsCi0gICAgICAgICAgICAvLyBldGMuKSBhcmVuJ3Qgc3RvcmVkIGluIG1fbGlzdCwgYnV0IGFz
IGF0dHJpYnV0ZXMgb24gdGhlIHNvdXJjZQotICAgICAgICAgICAgLy8gbGlzdCBpdHNlbGYuCi0g
ICAgICAgICAgICBpZiAoc2NoZW1lLmlzRW1wdHkoKSAmJiBob3N0LmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChpc0RpcmVjdGl2ZU5hbWUoaG9z
dCkpCi0gICAgICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0RGlyZWN0aXZlQXNTb3VyY2VFeHBy
ZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgaG9zdCk7Ci0gICAgICAgICAgICBtX2xpc3QuYXBwZW5k
KENTUFNvdXJjZShtX3BvbGljeSwgc2NoZW1lLCBob3N0LCBwb3J0LCBwYXRoLCBob3N0SGFzV2ls
ZGNhcmQsIHBvcnRIYXNXaWxkY2FyZCkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1f
cG9saWN5LnJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKG1fZGlyZWN0aXZlTmFtZSwgU3Ry
aW5nKGJlZ2luU291cmNlLCBwb3NpdGlvbiAtIGJlZ2luU291cmNlKSk7Ci0KLSAgICAgICAgQVNT
RVJUKHBvc2l0aW9uID09IGVuZCB8fCBpc0FTQ0lJU3BhY2UoKnBvc2l0aW9uKSk7Ci0gICAgIH0K
LX0KLQotLy8gc291cmNlICAgICAgICAgICAgPSBzY2hlbWUgIjoiCi0vLyAgICAgICAgICAgICAg
ICAgICAvICggWyBzY2hlbWUgIjovLyIgXSBob3N0IFsgcG9ydCBdIFsgcGF0aCBdICkKLS8vICAg
ICAgICAgICAgICAgICAgIC8gIidzZWxmJyIKLS8vCi1ib29sIENTUFNvdXJjZUxpc3Q6OnBhcnNl
U291cmNlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBzY2hl
bWUsIFN0cmluZyYgaG9zdCwgaW50JiBwb3J0LCBTdHJpbmcmIHBhdGgsIGJvb2wmIGhvc3RIYXNX
aWxkY2FyZCwgYm9vbCYgcG9ydEhhc1dpbGRjYXJkKQotewotICAgIGlmIChiZWdpbiA9PSBlbmQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICInbm9uZSciKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKGVuZCAtIGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgewotICAg
ICAgICBtX2FsbG93U3RhciA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4s
ICInc2VsZiciKSkgewotICAgICAgICBtX2FsbG93U2VsZiA9IHRydWU7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShi
ZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWlubGluZSciKSkgewotICAgICAgICBtX2FsbG93
SW5saW5lID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBlbmQgLSBiZWdpbiwgIid1bnNhZmUt
ZXZhbCciKSkgewotICAgICAgICBtX2FsbG93RXZhbCA9IHRydWU7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAgIGNv
bnN0IFVDaGFyKiBiZWdpbkhvc3QgPSBiZWdpbjsKLSAgICBjb25zdCBVQ2hhciogYmVnaW5QYXRo
ID0gZW5kOwotICAgIGNvbnN0IFVDaGFyKiBiZWdpblBvcnQgPSBudWxscHRyOwotCi0gICAgc2tp
cFdoaWxlPGlzTm90Q29sb25PclNsYXNoPihwb3NpdGlvbiwgZW5kKTsKLQotICAgIGlmIChwb3Np
dGlvbiA9PSBlbmQpIHsKLSAgICAgICAgLy8gaG9zdAotICAgICAgICAvLyAgICAgXgotICAgICAg
ICByZXR1cm4gcGFyc2VIb3N0KGJlZ2luSG9zdCwgcG9zaXRpb24sIGhvc3QsIGhvc3RIYXNXaWxk
Y2FyZCk7Ci0gICAgfQotCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAn
LycpIHsKLSAgICAgICAgLy8gaG9zdC9wYXRoIHx8IGhvc3QvIHx8IC8KLSAgICAgICAgLy8gICAg
IF4gICAgICAgICAgICBeICAgIF4KLSAgICAgICAgaWYgKCFwYXJzZUhvc3QoYmVnaW5Ib3N0LCBw
b3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKQotICAgICAgICAgICAgfHwgIXBhcnNlUGF0
aChwb3NpdGlvbiwgZW5kLCBwYXRoKQotICAgICAgICAgICAgfHwgcG9zaXRpb24gIT0gZW5kKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICc6JykgewotICAgICAgICBp
ZiAoZW5kIC0gcG9zaXRpb24gPT0gMSkgewotICAgICAgICAgICAgLy8gc2NoZW1lOgotICAgICAg
ICAgICAgLy8gICAgICAgXgotICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2NoZW1lKGJlZ2luLCBw
b3NpdGlvbiwgc2NoZW1lKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb3NpdGlvblsxXSA9
PSAnLycpIHsKLSAgICAgICAgICAgIC8vIHNjaGVtZTovL2hvc3QgfHwgc2NoZW1lOi8vCi0gICAg
ICAgICAgICAvLyAgICAgICBeICAgICAgICAgICAgICAgIF4KLSAgICAgICAgICAgIGlmICghcGFy
c2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBzY2hlbWUpCi0gICAgICAgICAgICAgICAgfHwgIXNr
aXBFeGFjdGx5KHBvc2l0aW9uLCBlbmQsICc6JykKLSAgICAgICAgICAgICAgICB8fCAhc2tpcEV4
YWN0bHkocG9zaXRpb24sIGVuZCwgJy8nKQotICAgICAgICAgICAgICAgIHx8ICFza2lwRXhhY3Rs
eShwb3NpdGlvbiwgZW5kLCAnLycpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICBiZWdpbkhvc3QgPSBwb3NpdGlvbjsKLSAgICAgICAgICAgIHNraXBX
aGlsZTxpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICc6JykgewotICAgICAgICAg
ICAgLy8gaG9zdDpwb3J0IHx8IHNjaGVtZTovL2hvc3Q6cG9ydAotICAgICAgICAgICAgLy8gICAg
IF4gICAgICAgICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBiZWdpblBvcnQgPSBwb3NpdGlv
bjsKLSAgICAgICAgICAgIHNraXBVbnRpbChwb3NpdGlvbiwgZW5kLCAnLycpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICpwb3NpdGlvbiA9PSAnLycpIHsK
LSAgICAgICAgLy8gc2NoZW1lOi8vaG9zdC9wYXRoIHx8IHNjaGVtZTovL2hvc3Q6cG9ydC9wYXRo
Ci0gICAgICAgIC8vICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0g
ICAgICAgIGlmIChwb3NpdGlvbiA9PSBiZWdpbkhvc3QpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgYmVnaW5QYXRoID0gcG9zaXRpb247Ci0gICAgfQotCi0gICAgaWYgKCFw
YXJzZUhvc3QoYmVnaW5Ib3N0LCBiZWdpblBvcnQgPyBiZWdpblBvcnQgOiBiZWdpblBhdGgsIGhv
c3QsIGhvc3RIYXNXaWxkY2FyZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChi
ZWdpblBvcnQpIHsKLSAgICAgICAgaWYgKCFwYXJzZVBvcnQoYmVnaW5Qb3J0LCBiZWdpblBhdGgs
IHBvcnQsIHBvcnRIYXNXaWxkY2FyZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgcG9ydCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGJlZ2luUGF0aCAh
PSBlbmQpIHsKLSAgICAgICAgaWYgKCFwYXJzZVBhdGgoYmVnaW5QYXRoLCBlbmQsIHBhdGgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci0vLyAgICAgICAgICAgICAgICAgICAgIDsgPHNjaGVtZT4gcHJvZHVjdGlvbiBmcm9tIFJGQyAz
OTg2Ci0vLyBzY2hlbWUgICAgICA9IEFMUEhBICooIEFMUEhBIC8gRElHSVQgLyAiKyIgLyAiLSIg
LyAiLiIgKQotLy8KLWJvb2wgQ1NQU291cmNlTGlzdDo6cGFyc2VTY2hlbWUoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNjaGVtZSkKLXsKLSAgICBBU1NFUlQo
YmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoc2NoZW1lLmlzRW1wdHkoKSk7Ci0KLSAgICBpZiAo
YmVnaW4gPT0gZW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBVQ2hhciog
cG9zaXRpb24gPSBiZWdpbjsKLQotICAgIGlmICghc2tpcEV4YWN0bHk8aXNBU0NJSUFscGhhPihw
b3NpdGlvbiwgZW5kKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc2tpcFdoaWxlPGlz
U2NoZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLQotICAgIGlmIChw
b3NpdGlvbiAhPSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHNjaGVtZSA9IFN0
cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBob3N0
ICAgICAgICAgICAgICA9IFsgIiouIiBdIDEqaG9zdC1jaGFyICooICIuIiAxKmhvc3QtY2hhciAp
Ci0vLyAgICAgICAgICAgICAgICAgICAvICIqIgotLy8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBI
QSAvIERJR0lUIC8gIi0iCi0vLwotYm9vbCBDU1BTb3VyY2VMaXN0OjpwYXJzZUhvc3QoY29uc3Qg
VUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RI
YXNXaWxkY2FyZCkKLXsKLSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQoaG9z
dC5pc0VtcHR5KCkpOwotICAgIEFTU0VSVCghaG9zdEhhc1dpbGRjYXJkKTsKLQotICAgIGlmIChi
ZWdpbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IFVDaGFyKiBw
b3NpdGlvbiA9IGJlZ2luOwotCi0gICAgaWYgKHNraXBFeGFjdGx5KHBvc2l0aW9uLCBlbmQsICcq
JykpIHsKLSAgICAgICAgaG9zdEhhc1dpbGRjYXJkID0gdHJ1ZTsKLQotICAgICAgICBpZiAocG9z
aXRpb24gPT0gZW5kKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKCFz
a2lwRXhhY3RseShwb3NpdGlvbiwgZW5kLCAnLicpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGNvbnN0IFVDaGFyKiBob3N0QmVnaW4gPSBwb3NpdGlvbjsKLQotICAg
IHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIXNraXBFeGFjdGx5PGlzSG9z
dENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgc2tpcFdoaWxlPGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0KLSAg
ICAgICAgaWYgKHBvc2l0aW9uIDwgZW5kICYmICFza2lwRXhhY3RseShwb3NpdGlvbiwgZW5kLCAn
LicpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEFTU0VSVChwb3Np
dGlvbiA9PSBlbmQpOwotICAgIGhvc3QgPSBTdHJpbmcoaG9zdEJlZ2luLCBlbmQgLSBob3N0QmVn
aW4pOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTUFNvdXJjZUxpc3Q6OnBhcnNlUGF0
aChjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgcGF0aCkKLXsK
LSAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsKLSAgICBBU1NFUlQocGF0aC5pc0VtcHR5KCkpOwot
Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPGlzUGF0
aENvbXBvbmVudENoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0gICAgLy8gcGF0aC90by9maWxl
LmpzP3F1ZXJ5PXN0cmluZyB8fCBwYXRoL3RvL2ZpbGUuanMjYW5jaG9yCi0gICAgLy8gICAgICAg
ICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCi0gICAgaWYgKHBvc2l0
aW9uIDwgZW5kKQotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUGF0aENoYXJhY3Rlciht
X2RpcmVjdGl2ZU5hbWUsIFN0cmluZyhiZWdpbiwgZW5kIC0gYmVnaW4pLCAqcG9zaXRpb24pOwot
Ci0gICAgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhTdHJpbmcoYmVnaW4sIHBvc2l0
aW9uIC0gYmVnaW4pKTsKLQotICAgIEFTU0VSVChwb3NpdGlvbiA8PSBlbmQpOwotICAgIEFTU0VS
VChwb3NpdGlvbiA9PSBlbmQgfHwgKCpwb3NpdGlvbiA9PSAnIycgfHwgKnBvc2l0aW9uID09ICc/
JykpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBwb3J0ICAgICAgICAgICAgICA9ICI6IiAo
IDEqRElHSVQgLyAiKiIgKQotLy8KLWJvb2wgQ1NQU291cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0
IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgaW50JiBwb3J0LCBib29sJiBwb3J0SGFz
V2lsZGNhcmQpCi17Ci0gICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Ci0gICAgQVNTRVJUKCFwb3J0
KTsKLSAgICBBU1NFUlQoIXBvcnRIYXNXaWxkY2FyZCk7Ci0KLSAgICBpZiAoIXNraXBFeGFjdGx5
KGJlZ2luLCBlbmQsICc6JykpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAg
aWYgKGJlZ2luID09IGVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGVuZCAt
IGJlZ2luID09IDEgJiYgKmJlZ2luID09ICcqJykgewotICAgICAgICBwb3J0ID0gMDsKLSAgICAg
ICAgcG9ydEhhc1dpbGRjYXJkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPGlzQVND
SUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICBpZiAocG9zaXRpb24gIT0gZW5kKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG9rOwotICAgIHBvcnQgPSBjaGFyYWN0ZXJz
VG9JbnRTdHJpY3QoYmVnaW4sIGVuZCAtIGJlZ2luLCAmb2spOwotICAgIHJldHVybiBvazsKLX0K
LQotY2xhc3MgQ1NQRGlyZWN0aXZlIHsKLXB1YmxpYzoKLSAgICBDU1BEaXJlY3RpdmUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQ
b2xpY3kmIHBvbGljeSkKLSAgICAgICAgOiBtX25hbWUobmFtZSkKLSAgICAgICAgLCBtX3RleHQo
bmFtZSArICcgJyArIHZhbHVlKQotICAgICAgICAsIG1fcG9saWN5KHBvbGljeSkKLSAgICB7Ci0g
ICAgfQotCi0gICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9
Ci0KLXByb3RlY3RlZDoKLSAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSgp
IGNvbnN0IHsgcmV0dXJuIG1fcG9saWN5OyB9Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fbmFt
ZTsKLSAgICBTdHJpbmcgbV90ZXh0OwotICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYg
bV9wb2xpY3k7Ci19OwotCi1jbGFzcyBNZWRpYUxpc3REaXJlY3RpdmUgOiBwdWJsaWMgQ1NQRGly
ZWN0aXZlIHsKLXB1YmxpYzoKLSAgICBNZWRpYUxpc3REaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBv
bGljeSkKLSAgICAgICAgOiBDU1BEaXJlY3RpdmUobmFtZSwgdmFsdWUsIHBvbGljeSkKLSAgICB7
Ci0gICAgICAgIHBhcnNlKHZhbHVlKTsKLSAgICB9Ci0KLSAgICBib29sIGFsbG93cyhjb25zdCBT
dHJpbmcmIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wbHVnaW5UeXBlcy5jb250YWlu
cyh0eXBlKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBwYXJzZShjb25zdCBTdHJpbmcm
IHZhbHVlKQotICAgIHsKLSAgICAgICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBiZWdpbiA9
IGNoYXJhY3RlcnM7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwotICAg
ICAgICBjb25zdCBVQ2hhciogZW5kID0gYmVnaW4gKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgICAg
ICAvLyAncGx1Z2luLXR5cGVzIF9fX187JyBPUiAncGx1Z2luLXR5cGVzOycKLSAgICAgICAgaWYg
KHZhbHVlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcG9saWN5KCkucmVwb3J0SW52YWxpZFBs
dWdpblR5cGVzKHZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICAgICAgLy8gX19fX18gT1IgX19f
X19taW1lMS9taW1lMQotICAgICAgICAgICAgLy8gXiAgICAgICAgXgotICAgICAgICAgICAgc2tp
cFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICBpZiAocG9z
aXRpb24gPT0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgLy8g
bWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAgICAgICAgICAgIC8vIF4KLSAgICAgICAgICAgIGJl
Z2luID0gcG9zaXRpb247Ci0gICAgICAgICAgICBpZiAoIXNraXBFeGFjdGx5PGlzTWVkaWFUeXBl
Q2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKSkgewotICAgICAgICAgICAgICAgIHNraXBXaGlsZTxp
c05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICAgICAgICAgIHBvbGljeSgp
LnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4p
KTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHNraXBXaGlsZTxpc01lZGlhVHlwZUNoYXJhY3Rlcj4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAg
ICAgICAgIC8vIG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCi0gICAgICAgICAgICAvLyAgICAgIF4K
LSAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHkocG9zaXRpb24sIGVuZCwgJy8nKSkgewotICAg
ICAgICAgICAgICAgIHNraXBXaGlsZTxpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwot
ICAgICAgICAgICAgICAgIHBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmco
YmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIKLSAg
ICAgICAgICAgIC8vICAgICAgIF4KLSAgICAgICAgICAgIGlmICghc2tpcEV4YWN0bHk8aXNNZWRp
YVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAgICAgICAgICAgc2tpcFdo
aWxlPGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAgICAgICAgICAgICAgcG9s
aWN5KCkucmVwb3J0SW52YWxpZFBsdWdpblR5cGVzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBi
ZWdpbikpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc2tpcFdoaWxlPGlzTWVkaWFUeXBlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLQot
ICAgICAgICAgICAgLy8gbWltZTEvbWltZTEgbWltZTIvbWltZTIgT1IgbWltZTEvbWltZTEgIE9S
IG1pbWUxL21pbWUxL2Vycm9yCi0gICAgICAgICAgICAvLyAgICAgICAgICAgIF4gICAgICAgICAg
ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICBeCi0gICAgICAgICAgICBpZiAocG9zaXRp
b24gPCBlbmQgJiYgaXNOb3RBU0NJSVNwYWNlKCpwb3NpdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICBza2lwV2hpbGU8aXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKLSAgICAgICAgICAg
ICAgICBwb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3Np
dGlvbiAtIGJlZ2luKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX3BsdWdpblR5cGVzLmFkZChTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0g
YmVnaW4pKTsKLQotICAgICAgICAgICAgQVNTRVJUKHBvc2l0aW9uID09IGVuZCB8fCBpc0FTQ0lJ
U3BhY2UoKnBvc2l0aW9uKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBIYXNoU2V0PFN0cmlu
Zz4gbV9wbHVnaW5UeXBlczsKLX07Ci0KLWNsYXNzIFNvdXJjZUxpc3REaXJlY3RpdmUgOiBwdWJs
aWMgQ1NQRGlyZWN0aXZlIHsKLXB1YmxpYzoKLSAgICBTb3VyY2VMaXN0RGlyZWN0aXZlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5
UG9saWN5JiBwb2xpY3kpCi0gICAgICAgIDogQ1NQRGlyZWN0aXZlKG5hbWUsIHZhbHVlLCBwb2xp
Y3kpCi0gICAgICAgICwgbV9zb3VyY2VMaXN0KHBvbGljeSwgbmFtZSkKLSAgICB7Ci0gICAgICAg
IG1fc291cmNlTGlzdC5wYXJzZSh2YWx1ZSk7Ci0gICAgfQotCi0gICAgYm9vbCBhbGxvd3MoY29u
c3QgVVJMJiB1cmwpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGludmVzdGln
YXRlIHJldHVybmluZyBmYWxzZSBmb3IgYW4gZW1wdHkgVVJMLgotICAgICAgICBpZiAodXJsLmlz
RW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3NvdXJjZUxpc3QuYWxsb3dTZWxmKCk7Ci0g
ICAgICAgIHJldHVybiBtX3NvdXJjZUxpc3QubWF0Y2hlcyh1cmwpOwotICAgIH0KLQotICAgIGJv
b2wgYWxsb3dJbmxpbmUoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUxpc3QuYWxsb3dJbmxpbmUo
KTsgfQotICAgIGJvb2wgYWxsb3dFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMaXN0LmFs
bG93RXZhbCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NQU291cmNlTGlzdCBtX3NvdXJjZUxpc3Q7
Ci19OwotCi1jbGFzcyBDU1BEaXJlY3RpdmVMaXN0IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZUxp
c3Q+IGNyZWF0ZShDb250ZW50U2VjdXJpdHlQb2xpY3kmLCBjb25zdCBTdHJpbmcmLCBDb250ZW50
U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlKTsKLSAgICBDU1BEaXJlY3RpdmVMaXN0KENvbnRlbnRT
ZWN1cml0eVBvbGljeSYsIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUpOwotCi0gICAg
Y29uc3QgU3RyaW5nJiBoZWFkZXIoKSBjb25zdCB7IHJldHVybiBtX2hlYWRlcjsgfQotICAgIENv
bnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgaGVhZGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1faGVhZGVyVHlwZTsgfQotCi0gICAgYm9vbCBhbGxvd0phdmFTY3JpcHRVUkxzKGNvbnN0IFN0
cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OwotICAgIGJvb2wg
YWxsb3dJbmxpbmVFdmVudEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3Qg
V1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpS
ZXBvcnRpbmdTdGF0dXMpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dJbmxpbmVTY3JpcHQoY29uc3Qg
U3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5l
LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7Ci0gICAgYm9v
bCBhbGxvd0lubGluZVN0eWxlKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpP
cmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXMpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dFdmFsKEpTQzo6RXhlY1N0YXRlKiwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OwotICAgIGJvb2wgYWxs
b3dQbHVnaW5UeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmli
dXRlLCBjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykg
Y29uc3Q7Ci0KLSAgICBib29sIGFsbG93U2NyaXB0RnJvbVNvdXJjZShjb25zdCBVUkwmLCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7Ci0gICAgYm9vbCBhbGxv
d09iamVjdEZyb21Tb3VyY2UoY29uc3QgVVJMJiwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBv
cnRpbmdTdGF0dXMpIGNvbnN0OwotICAgIGJvb2wgYWxsb3dDaGlsZEZyYW1lRnJvbVNvdXJjZShj
b25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7
Ci0gICAgYm9vbCBhbGxvd0ltYWdlRnJvbVNvdXJjZShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd1N0eWxlRnJv
bVNvdXJjZShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1
cykgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYsIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdDsKLSAgICBib29sIGFsbG93
TWVkaWFGcm9tU291cmNlKGNvbnN0IFVSTCYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzKSBjb25zdDsKLSAgICBib29sIGFsbG93Q29ubmVjdFRvU291cmNlKGNvbnN0IFVS
TCYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdDsKLSAgICBi
b29sIGFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJl
cG9ydGluZ1N0YXR1cykgY29uc3Q7Ci0gICAgYm9vbCBhbGxvd0Jhc2VVUkkoY29uc3QgVVJMJiwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OwotCi0gICAgY29u
c3QgU3RyaW5nJiBldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2V2
YWxEaXNhYmxlZEVycm9yTWVzc2FnZTsgfQotICAgIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVm
bGVjdGVkWFNTRGlzcG9zaXRpb24gcmVmbGVjdGVkWFNTRGlzcG9zaXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uOyB9Ci0gICAgYm9vbCBpc1JlcG9ydE9ubHko
KSBjb25zdCB7IHJldHVybiBtX3JlcG9ydE9ubHk7IH0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcmVwb3J0VVJJcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwb3J0VVJJczsgfQotCi1wcml2YXRl
OgotICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBib29sIHBhcnNlRGlyZWN0
aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBT
dHJpbmcmIHZhbHVlKTsKLSAgICB2b2lkIHBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVBsdWdpblR5cGVzKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBwYXJzZVJlZmxl
Y3RlZFhTUyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpOwotICAgIHZv
aWQgYWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
Ci0gICAgdm9pZCBhcHBseVNhbmRib3hQb2xpY3koY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHNhbmRib3hQb2xpY3kpOwotCi0gICAgdGVtcGxhdGUgPGNsYXNzIENTUERpcmVjdGl2
ZVR5cGU+Ci0gICAgdm9pZCBzZXRDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mKTsKLQot
ICAgIFNvdXJjZUxpc3REaXJlY3RpdmUqIG9wZXJhdGl2ZURpcmVjdGl2ZShTb3VyY2VMaXN0RGly
ZWN0aXZlKikgY29uc3Q7Ci0gICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3RyaW5nJiBk
aXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29uc3QgU3Ry
aW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMID0gVVJMKCksIGNvbnN0
IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXIm
IGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBKU0M6OkV4
ZWNTdGF0ZSogPSBudWxscHRyKSBjb25zdDsKLQotICAgIGJvb2wgY2hlY2tFdmFsKFNvdXJjZUxp
c3REaXJlY3RpdmUqKSBjb25zdDsKLSAgICBib29sIGNoZWNrSW5saW5lKFNvdXJjZUxpc3REaXJl
Y3RpdmUqKSBjb25zdDsKLSAgICBib29sIGNoZWNrU291cmNlKFNvdXJjZUxpc3REaXJlY3RpdmUq
LCBjb25zdCBVUkwmKSBjb25zdDsKLSAgICBib29sIGNoZWNrTWVkaWFUeXBlKE1lZGlhTGlzdERp
cmVjdGl2ZSosIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRl
KSBjb25zdDsKLQotICAgIHZvaWQgc2V0RXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKSB7IG1fZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlID0gZXJyb3JN
ZXNzYWdlOyB9Ci0KLSAgICBib29sIGNoZWNrRXZhbEFuZFJlcG9ydFZpb2xhdGlvbihTb3VyY2VM
aXN0RGlyZWN0aXZlKiwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBjb250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4
dExpbmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIEpTQzo6RXhlY1N0YXRl
KiA9IG51bGxwdHIpIGNvbnN0OwotICAgIGJvb2wgY2hlY2tJbmxpbmVBbmRSZXBvcnRWaW9sYXRp
b24oU291cmNlTGlzdERpcmVjdGl2ZSosIGNvbnN0IFN0cmluZyYgY29uc29sZU1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0
TGluZSwgYm9vbCBpc1NjcmlwdCkgY29uc3Q7Ci0KLSAgICBib29sIGNoZWNrU291cmNlQW5kUmVw
b3J0VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUqLCBjb25zdCBVUkwmLCBjb25zdCBTdHJp
bmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSkgY29uc3Q7Ci0gICAgYm9vbCBjaGVja01lZGlhVHlwZUFu
ZFJlcG9ydFZpb2xhdGlvbihNZWRpYUxpc3REaXJlY3RpdmUqLCBjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgdHlwZUF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2Fn
ZSkgY29uc3Q7Ci0KLSAgICBib29sIGRlbnlJZkVuZm9yY2luZ1BvbGljeSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwb3J0T25seTsgfQotCi0gICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhIGNvbnN0IHJl
ZmVyZW5jZSBvbmNlIHdlIHRlYWNoIGFwcGx5U2FuZGJveFBvbGljeSgpIHRvIHN0b3JlIGl0cyBw
b2xpY3kgYXMgb3Bwb3NlZCB0byBhcHBseWluZyBpdCBkaXJlY3RseSBvbnRvIENvbnRlbnRTZWN1
cml0eVBvbGljeS4KLSAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OwotCi0gICAg
U3RyaW5nIG1faGVhZGVyOwotICAgIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgbV9o
ZWFkZXJUeXBlOwotCi0gICAgYm9vbCBtX3JlcG9ydE9ubHk7Ci0gICAgYm9vbCBtX2hhdmVTYW5k
Ym94UG9saWN5OwotICAgIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTRGlzcG9z
aXRpb24gbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbjsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYUxpc3REaXJlY3RpdmU+IG1fcGx1Z2luVHlwZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNv
dXJjZUxpc3REaXJlY3RpdmU+IG1fYmFzZVVSSTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNl
TGlzdERpcmVjdGl2ZT4gbV9jb25uZWN0U3JjOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VM
aXN0RGlyZWN0aXZlPiBtX2RlZmF1bHRTcmM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUxp
c3REaXJlY3RpdmU+IG1fZm9udFNyYzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlTGlzdERp
cmVjdGl2ZT4gbV9mb3JtQWN0aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VMaXN0RGly
ZWN0aXZlPiBtX2ZyYW1lU3JjOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VMaXN0RGlyZWN0
aXZlPiBtX2ltZ1NyYzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlTGlzdERpcmVjdGl2ZT4g
bV9tZWRpYVNyYzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U291cmNlTGlzdERpcmVjdGl2ZT4gbV9v
YmplY3RTcmM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNvdXJjZUxpc3REaXJlY3RpdmU+IG1fc2Ny
aXB0U3JjOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxTb3VyY2VMaXN0RGlyZWN0aXZlPiBtX3N0eWxl
U3JjOwotCi0gICAgVmVjdG9yPFN0cmluZz4gbV9yZXBvcnRVUklzOwotCi0gICAgU3RyaW5nIG1f
ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlOwotfTsKLQotQ1NQRGlyZWN0aXZlTGlzdDo6Q1NQRGly
ZWN0aXZlTGlzdChDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSwgQ29udGVudFNlY3VyaXR5
UG9saWN5SGVhZGVyVHlwZSB0eXBlKQotICAgIDogbV9wb2xpY3kocG9saWN5KQotICAgICwgbV9o
ZWFkZXJUeXBlKHR5cGUpCi0gICAgLCBtX3JlcG9ydE9ubHkoZmFsc2UpCi0gICAgLCBtX2hhdmVT
YW5kYm94UG9saWN5KGZhbHNlKQotICAgICwgbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbihDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU1Vuc2V0KQotewotICAgIG1fcmVwb3J0T25s
eSA9ICh0eXBlID09IENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGU6OlJlcG9ydCB8fCB0
eXBlID09IENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGU6OlByZWZpeGVkUmVwb3J0KTsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZUxpc3Q+IENTUERpcmVjdGl2ZUxpc3Q6
OmNyZWF0ZShDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSwgY29uc3QgU3RyaW5nJiBoZWFk
ZXIsIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgdHlwZSkKLXsKLSAgICBhdXRvIGRp
cmVjdGl2ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENTUERpcmVjdGl2ZUxpc3Q+KHBvbGljeSwgdHlw
ZSk7Ci0gICAgZGlyZWN0aXZlcy0+cGFyc2UoaGVhZGVyKTsKLQotICAgIGlmICghZGlyZWN0aXZl
cy0+Y2hlY2tFdmFsKGRpcmVjdGl2ZXMtPm9wZXJhdGl2ZURpcmVjdGl2ZShkaXJlY3RpdmVzLT5t
X3NjcmlwdFNyYy5nZXQoKSkpKSB7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmlu
ZygiUmVmdXNlZCB0byBldmFsdWF0ZSBhIHN0cmluZyBhcyBKYXZhU2NyaXB0IGJlY2F1c2UgJ3Vu
c2FmZS1ldmFsJyBpcyBub3QgYW4gYWxsb3dlZCBzb3VyY2Ugb2Ygc2NyaXB0IGluIHRoZSBmb2xs
b3dpbmcgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgZGlyZWN0aXZlOiBcIiIsIGRpcmVjdGl2ZXMt
Pm9wZXJhdGl2ZURpcmVjdGl2ZShkaXJlY3RpdmVzLT5tX3NjcmlwdFNyYy5nZXQoKSktPnRleHQo
KSwgIlwiLlxuIik7Ci0gICAgICAgIGRpcmVjdGl2ZXMtPnNldEV2YWxEaXNhYmxlZEVycm9yTWVz
c2FnZShtZXNzYWdlKTsKLSAgICB9Ci0KLSAgICBpZiAoZGlyZWN0aXZlcy0+aXNSZXBvcnRPbmx5
KCkgJiYgZGlyZWN0aXZlcy0+cmVwb3J0VVJJcygpLmlzRW1wdHkoKSkKLSAgICAgICAgcG9saWN5
LnJlcG9ydE1pc3NpbmdSZXBvcnRVUkkoaGVhZGVyKTsKLQotICAgIHJldHVybiBkaXJlY3RpdmVz
OwotfQotCi12b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnJlcG9ydFZpb2xhdGlvbihjb25zdCBTdHJp
bmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZlLCBjb25z
dCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNvbnN0IFN0
cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwg
SlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAotewotICAgIFN0cmluZyBtZXNzYWdlID0gbV9y
ZXBvcnRPbmx5ID8gIltSZXBvcnQgT25seV0gIiArIGNvbnNvbGVNZXNzYWdlIDogY29uc29sZU1l
c3NhZ2U7Ci0gICAgbV9wb2xpY3kucmVwb3J0VmlvbGF0aW9uKGRpcmVjdGl2ZVRleHQsIGVmZmVj
dGl2ZURpcmVjdGl2ZSwgbWVzc2FnZSwgYmxvY2tlZFVSTCwgbV9yZXBvcnRVUklzLCBtX2hlYWRl
ciwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHN0YXRlKTsKLX0KLQotYm9vbCBDU1BEaXJlY3Rp
dmVMaXN0OjpjaGVja0V2YWwoU291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlKSBjb25zdAot
ewotICAgIHJldHVybiAhZGlyZWN0aXZlIHx8IGRpcmVjdGl2ZS0+YWxsb3dFdmFsKCk7Ci19Ci0K
LWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tJbmxpbmUoU291cmNlTGlzdERpcmVjdGl2ZSog
ZGlyZWN0aXZlKSBjb25zdAotewotICAgIHJldHVybiAhZGlyZWN0aXZlIHx8IGRpcmVjdGl2ZS0+
YWxsb3dJbmxpbmUoKTsKLX0KLQotYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjpjaGVja1NvdXJjZShT
b3VyY2VMaXN0RGlyZWN0aXZlKiBkaXJlY3RpdmUsIGNvbnN0IFVSTCYgdXJsKSBjb25zdAotewot
ICAgIHJldHVybiAhZGlyZWN0aXZlIHx8IGRpcmVjdGl2ZS0+YWxsb3dzKHVybCk7Ci19Ci0KLWJv
b2wgQ1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tNZWRpYVR5cGUoTWVkaWFMaXN0RGlyZWN0aXZlKiBk
aXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRl
KSBjb25zdAotewotICAgIGlmICghZGlyZWN0aXZlKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBpZiAodHlwZUF0dHJpYnV0ZS5pc0VtcHR5KCkgfHwgdHlwZUF0dHJpYnV0ZS5zdHJpcFdoaXRl
U3BhY2UoKSAhPSB0eXBlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRpcmVj
dGl2ZS0+YWxsb3dzKHR5cGUpOwotfQotCi1Tb3VyY2VMaXN0RGlyZWN0aXZlKiBDU1BEaXJlY3Rp
dmVMaXN0OjpvcGVyYXRpdmVEaXJlY3RpdmUoU291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZl
KSBjb25zdAotewotICAgIHJldHVybiBkaXJlY3RpdmUgPyBkaXJlY3RpdmUgOiBtX2RlZmF1bHRT
cmMuZ2V0KCk7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tFdmFsQW5kUmVwb3J0
VmlvbGF0aW9uKFNvdXJjZUxpc3REaXJlY3RpdmUqIGRpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBj
b25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGlu
YWxOdW1iZXImIGNvbnRleHRMaW5lLCBKU0M6OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0Ci17Ci0g
ICAgaWYgKGNoZWNrRXZhbChkaXJlY3RpdmUpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IFN0cmluZyBzdWZmaXggPSBTdHJpbmcoKTsKLSAgICBpZiAoZGlyZWN0aXZlID09IG1fZGVmYXVs
dFNyYy5nZXQoKSkKLSAgICAgICAgc3VmZml4ID0gIiBOb3RlIHRoYXQgJ3NjcmlwdC1zcmMnIHdh
cyBub3QgZXhwbGljaXRseSBzZXQsIHNvICdkZWZhdWx0LXNyYycgaXMgdXNlZCBhcyBhIGZhbGxi
YWNrLiI7Ci0KLSAgICByZXBvcnRWaW9sYXRpb24oZGlyZWN0aXZlLT50ZXh0KCksIHNjcmlwdFNy
YywgY29uc29sZU1lc3NhZ2UgKyAiXCIiICsgZGlyZWN0aXZlLT50ZXh0KCkgKyAiXCIuIiArIHN1
ZmZpeCArICJcbiIsIFVSTCgpLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZSwgc3RhdGUpOwotICAg
IGlmICghbV9yZXBvcnRPbmx5KSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydEJsb2NrZWRTY3Jp
cHRFeGVjdXRpb25Ub0luc3BlY3RvcihkaXJlY3RpdmUtPnRleHQoKSk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZl
TGlzdDo6Y2hlY2tNZWRpYVR5cGVBbmRSZXBvcnRWaW9sYXRpb24oTWVkaWFMaXN0RGlyZWN0aXZl
KiBkaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmli
dXRlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlKSBjb25zdAotewotICAgIGlmIChjaGVj
a01lZGlhVHlwZShkaXJlY3RpdmUsIHR5cGUsIHR5cGVBdHRyaWJ1dGUpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyhjb25zb2xlTWVzc2Fn
ZSwgJ1wnJywgZGlyZWN0aXZlLT50ZXh0KCksICJcJy4iKTsKLSAgICBpZiAodHlwZUF0dHJpYnV0
ZS5pc0VtcHR5KCkpCi0gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIiBXaGVuIGVuZm9yY2lu
ZyB0aGUgJ3BsdWdpbi10eXBlcycgZGlyZWN0aXZlLCB0aGUgcGx1Z2luJ3MgbWVkaWEgdHlwZSBt
dXN0IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgd2l0aCBhICd0eXBlJyBhdHRyaWJ1dGUgb24gdGhl
IGNvbnRhaW5pbmcgZWxlbWVudCAoZS5nLiAnPG9iamVjdCB0eXBlPVwiW1RZUEUgR09FUyBIRVJF
XVwiIC4uLj4nKS4iOwotCi0gICAgcmVwb3J0VmlvbGF0aW9uKGRpcmVjdGl2ZS0+dGV4dCgpLCBw
bHVnaW5UeXBlcywgbWVzc2FnZSArICJcbiIsIFVSTCgpKTsKLSAgICByZXR1cm4gZGVueUlmRW5m
b3JjaW5nUG9saWN5KCk7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6Y2hlY2tJbmxpbmVB
bmRSZXBvcnRWaW9sYXRpb24oU291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlLCBjb25zdCBT
dHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdU
Rjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGJvb2wgaXNTY3JpcHQpIGNvbnN0Ci17Ci0g
ICAgaWYgKGNoZWNrSW5saW5lKGRpcmVjdGl2ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgU3RyaW5nIHN1ZmZpeCA9IFN0cmluZygpOwotICAgIGlmIChkaXJlY3RpdmUgPT0gbV9kZWZh
dWx0U3JjLmdldCgpKQotICAgICAgICBzdWZmaXggPSBtYWtlU3RyaW5nKCIgTm90ZSB0aGF0ICci
LCAoaXNTY3JpcHQgPyAic2NyaXB0IiA6ICJzdHlsZSIpLCAiLXNyYycgd2FzIG5vdCBleHBsaWNp
dGx5IHNldCwgc28gJ2RlZmF1bHQtc3JjJyBpcyB1c2VkIGFzIGEgZmFsbGJhY2suIik7Ci0KLSAg
ICByZXBvcnRWaW9sYXRpb24oZGlyZWN0aXZlLT50ZXh0KCksIGlzU2NyaXB0ID8gc2NyaXB0U3Jj
IDogc3R5bGVTcmMsIGNvbnNvbGVNZXNzYWdlICsgIlwiIiArIGRpcmVjdGl2ZS0+dGV4dCgpICsg
IlwiLiIgKyBzdWZmaXggKyAiXG4iLCBVUkwoKSwgY29udGV4dFVSTCwgY29udGV4dExpbmUpOwot
Ci0gICAgaWYgKCFtX3JlcG9ydE9ubHkpIHsKLSAgICAgICAgaWYgKGlzU2NyaXB0KQotICAgICAg
ICAgICAgbV9wb2xpY3kucmVwb3J0QmxvY2tlZFNjcmlwdEV4ZWN1dGlvblRvSW5zcGVjdG9yKGRp
cmVjdGl2ZS0+dGV4dCgpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjpjaGVja1NvdXJjZUFuZFJlcG9y
dFZpb2xhdGlvbihTb3VyY2VMaXN0RGlyZWN0aXZlKiBkaXJlY3RpdmUsIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSkgY29uc3QKLXsKLSAgICBpZiAoY2hl
Y2tTb3VyY2UoZGlyZWN0aXZlLCB1cmwpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNv
bnN0IGNoYXIqIHByZWZpeDsKLSAgICBpZiAoYmFzZVVSSSA9PSBlZmZlY3RpdmVEaXJlY3RpdmUp
Ci0gICAgICAgIHByZWZpeCA9ICJSZWZ1c2VkIHRvIHNldCB0aGUgZG9jdW1lbnQncyBiYXNlIFVS
SSB0byAnIjsKLSAgICBlbHNlIGlmIChjb25uZWN0U3JjID09IGVmZmVjdGl2ZURpcmVjdGl2ZSkK
LSAgICAgICAgcHJlZml4ID0gIlJlZnVzZWQgdG8gY29ubmVjdCB0byAnIjsKLSAgICBlbHNlIGlm
IChmb250U3JjID09IGVmZmVjdGl2ZURpcmVjdGl2ZSkKLSAgICAgICAgcHJlZml4ID0gIlJlZnVz
ZWQgdG8gbG9hZCB0aGUgZm9udCAnIjsKLSAgICBlbHNlIGlmIChmb3JtQWN0aW9uID09IGVmZmVj
dGl2ZURpcmVjdGl2ZSkKLSAgICAgICAgcHJlZml4ID0gIlJlZnVzZWQgdG8gc2VuZCBmb3JtIGRh
dGEgdG8gJyI7Ci0gICAgZWxzZSBpZiAoZnJhbWVTcmMgPT0gZWZmZWN0aXZlRGlyZWN0aXZlKQot
ICAgICAgICBwcmVmaXggPSAiUmVmdXNlZCB0byBsb2FkIGZyYW1lICciOwotICAgIGVsc2UgaWYg
KGltZ1NyYyA9PSBlZmZlY3RpdmVEaXJlY3RpdmUpCi0gICAgICAgIHByZWZpeCA9ICJSZWZ1c2Vk
IHRvIGxvYWQgdGhlIGltYWdlICciOwotICAgIGVsc2UgaWYgKG1lZGlhU3JjID09IGVmZmVjdGl2
ZURpcmVjdGl2ZSkKLSAgICAgICAgcHJlZml4ID0gIlJlZnVzZWQgdG8gbG9hZCBtZWRpYSBmcm9t
ICciOwotICAgIGVsc2UgaWYgKG9iamVjdFNyYyA9PSBlZmZlY3RpdmVEaXJlY3RpdmUpCi0gICAg
ICAgIHByZWZpeCA9ICJSZWZ1c2VkIHRvIGxvYWQgcGx1Z2luIGRhdGEgZnJvbSAnIjsKLSAgICBl
bHNlIGlmIChzY3JpcHRTcmMgPT0gZWZmZWN0aXZlRGlyZWN0aXZlKQotICAgICAgICBwcmVmaXgg
PSAiUmVmdXNlZCB0byBsb2FkIHRoZSBzY3JpcHQgJyI7Ci0gICAgZWxzZSBpZiAoc3R5bGVTcmMg
PT0gZWZmZWN0aXZlRGlyZWN0aXZlKQotICAgICAgICBwcmVmaXggPSAiUmVmdXNlZCB0byBsb2Fk
IHRoZSBzdHlsZXNoZWV0ICciOwotICAgIGVsc2UKLSAgICAgICAgcHJlZml4ID0gIiI7Ci0KLSAg
ICBTdHJpbmcgc3VmZml4OwotICAgIGlmIChkaXJlY3RpdmUgPT0gbV9kZWZhdWx0U3JjLmdldCgp
KQotICAgICAgICBzdWZmaXggPSAiIE5vdGUgdGhhdCAnIiArIGVmZmVjdGl2ZURpcmVjdGl2ZSAr
ICInIHdhcyBub3QgZXhwbGljaXRseSBzZXQsIHNvICdkZWZhdWx0LXNyYycgaXMgdXNlZCBhcyBh
IGZhbGxiYWNrLiI7Ci0KLSAgICByZXBvcnRWaW9sYXRpb24oZGlyZWN0aXZlLT50ZXh0KCksIGVm
ZmVjdGl2ZURpcmVjdGl2ZSwgbWFrZVN0cmluZyhwcmVmaXgsIHVybC5zdHJpbmdDZW50ZXJFbGxp
cHNpemVkVG9MZW5ndGgoKSwgIicgYmVjYXVzZSBpdCB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIENv
bnRlbnQgU2VjdXJpdHkgUG9saWN5IGRpcmVjdGl2ZTogXCIiLCBkaXJlY3RpdmUtPnRleHQoKSwg
IlwiLiIsIHN1ZmZpeCwgJ1xuJyksIHVybCk7Ci0gICAgcmV0dXJuIGRlbnlJZkVuZm9yY2luZ1Bv
bGljeSgpOwotfQotCi1ib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93SmF2YVNjcmlwdFVSTHMo
Y29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRl
eHRMaW5lLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdT
dGF0dXMpIGNvbnN0Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29s
ZU1lc3NhZ2UoQVNDSUlMaXRlcmFsKCJSZWZ1c2VkIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBVUkwg
YmVjYXVzZSBpdCB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5
IGRpcmVjdGl2ZTogIikpOwotICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwotICAgICAgICBjaGVj
a0lubGluZUFuZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJlY3RpdmUobV9zY3JpcHRTcmMu
Z2V0KCkpLCBjb25zb2xlTWVzc2FnZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHRydWUpCi0g
ICAgICAgIDogKG1fcmVwb3J0T25seSB8fCBjaGVja0lubGluZShvcGVyYXRpdmVEaXJlY3RpdmUo
bV9zY3JpcHRTcmMuZ2V0KCkpKSk7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dJ
bmxpbmVFdmVudEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpP
cmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKEFTQ0lJTGl0ZXJhbCgiUmVmdXNlZCB0byBleGVj
dXRlIGlubGluZSBldmVudCBoYW5kbGVyIGJlY2F1c2UgaXQgdmlvbGF0ZXMgdGhlIGZvbGxvd2lu
ZyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBkaXJlY3RpdmU6ICIpKTsKLSAgICByZXR1cm4gcmVw
b3J0aW5nU3RhdHVzID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpT
ZW5kUmVwb3J0ID8KLSAgICAgICAgY2hlY2tJbmxpbmVBbmRSZXBvcnRWaW9sYXRpb24ob3BlcmF0
aXZlRGlyZWN0aXZlKG1fc2NyaXB0U3JjLmdldCgpKSwgY29uc29sZU1lc3NhZ2UsIGNvbnRleHRV
UkwsIGNvbnRleHRMaW5lLCB0cnVlKQotICAgICAgICA6IChtX3JlcG9ydE9ubHkgfHwgY2hlY2tJ
bmxpbmUob3BlcmF0aXZlRGlyZWN0aXZlKG1fc2NyaXB0U3JjLmdldCgpKSkpOwotfQotCi1ib29s
IENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93SW5saW5lU2NyaXB0KGNvbnN0IFN0cmluZyYgY29udGV4
dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKEFTQ0lJTGl0ZXJh
bCgiUmVmdXNlZCB0byBleGVjdXRlIGlubGluZSBzY3JpcHQgYmVjYXVzZSBpdCB2aW9sYXRlcyB0
aGUgZm9sbG93aW5nIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGRpcmVjdGl2ZTogIikpOwotICAg
IHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXM6OlNlbmRSZXBvcnQgPwotICAgICAgICBjaGVja0lubGluZUFuZFJlcG9ydFZpb2xh
dGlvbihvcGVyYXRpdmVEaXJlY3RpdmUobV9zY3JpcHRTcmMuZ2V0KCkpLCBjb25zb2xlTWVzc2Fn
ZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHRydWUpIDoKLSAgICAgICAgKG1fcmVwb3J0T25s
eSB8fCBjaGVja0lubGluZShvcGVyYXRpdmVEaXJlY3RpdmUobV9zY3JpcHRTcmMuZ2V0KCkpKSk7
Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVTdHlsZShjb25zdCBTdHJp
bmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29u
c3QKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShB
U0NJSUxpdGVyYWwoIlJlZnVzZWQgdG8gYXBwbHkgaW5saW5lIHN0eWxlIGJlY2F1c2UgaXQgdmlv
bGF0ZXMgdGhlIGZvbGxvd2luZyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBkaXJlY3RpdmU6ICIp
KTsKLSAgICByZXR1cm4gcmVwb3J0aW5nU3RhdHVzID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6
UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0ID8KLSAgICAgICAgY2hlY2tJbmxpbmVBbmRSZXBv
cnRWaW9sYXRpb24ob3BlcmF0aXZlRGlyZWN0aXZlKG1fc3R5bGVTcmMuZ2V0KCkpLCBjb25zb2xl
TWVzc2FnZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIGZhbHNlKSA6Ci0gICAgICAgIChtX3Jl
cG9ydE9ubHkgfHwgY2hlY2tJbmxpbmUob3BlcmF0aXZlRGlyZWN0aXZlKG1fc3R5bGVTcmMuZ2V0
KCkpKSk7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dFdmFsKEpTQzo6RXhlY1N0
YXRlKiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0
aW5nU3RhdHVzKSBjb25zdAotewotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNv
bnNvbGVNZXNzYWdlKEFTQ0lJTGl0ZXJhbCgiUmVmdXNlZCB0byBldmFsdWF0ZSBzY3JpcHQgYmVj
YXVzZSBpdCB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGRp
cmVjdGl2ZTogIikpOwotICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwotICAgICAgICBjaGVja0V2
YWxBbmRSZXBvcnRWaW9sYXRpb24ob3BlcmF0aXZlRGlyZWN0aXZlKG1fc2NyaXB0U3JjLmdldCgp
KSwgY29uc29sZU1lc3NhZ2UsIFN0cmluZygpLCBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZp
cnN0KCksIHN0YXRlKSA6Ci0gICAgICAgIChtX3JlcG9ydE9ubHkgfHwgY2hlY2tFdmFsKG9wZXJh
dGl2ZURpcmVjdGl2ZShtX3NjcmlwdFNyYy5nZXQoKSkpKTsKLX0KLQotYm9vbCBDU1BEaXJlY3Rp
dmVMaXN0OjphbGxvd1BsdWdpblR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcm
IHR5cGVBdHRyaWJ1dGUsIGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJl
cG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlcG9y
dGluZ1N0YXR1cyA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2Vu
ZFJlcG9ydCA/Ci0gICAgICAgIGNoZWNrTWVkaWFUeXBlQW5kUmVwb3J0VmlvbGF0aW9uKG1fcGx1
Z2luVHlwZXMuZ2V0KCksIHR5cGUsIHR5cGVBdHRyaWJ1dGUsICJSZWZ1c2VkIHRvIGxvYWQgJyIg
KyB1cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAiJyAoTUlNRSB0eXBlICci
ICsgdHlwZUF0dHJpYnV0ZSArICInKSBiZWNhdXNlIGl0IHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcg
Q29udGVudCBTZWN1cml0eSBQb2xpY3kgRGlyZWN0aXZlOiAiKSA6Ci0gICAgICAgIChtX3JlcG9y
dE9ubHkgfHwgY2hlY2tNZWRpYVR5cGUobV9wbHVnaW5UeXBlcy5nZXQoKSwgdHlwZSwgdHlwZUF0
dHJpYnV0ZSkpOwotfQotCi1ib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93U2NyaXB0RnJvbVNv
dXJjZShjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0
dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAotewotICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMg
PT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwot
ICAgICAgICBjaGVja1NvdXJjZUFuZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJlY3RpdmUo
bV9zY3JpcHRTcmMuZ2V0KCkpLCB1cmwsIHNjcmlwdFNyYykgOgotICAgICAgICAobV9yZXBvcnRP
bmx5IHx8IGNoZWNrU291cmNlKG9wZXJhdGl2ZURpcmVjdGl2ZShtX3NjcmlwdFNyYy5nZXQoKSks
IHVybCkpOwotfQotCi1ib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93T2JqZWN0RnJvbVNvdXJj
ZShjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMg
cmVwb3J0aW5nU3RhdHVzKSBjb25zdAotewotICAgIGlmICh1cmwuaXNCbGFua1VSTCgpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4gcmVwb3J0aW5nU3RhdHVzID09IENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0ID8KLSAgICAgICAgY2hl
Y2tTb3VyY2VBbmRSZXBvcnRWaW9sYXRpb24ob3BlcmF0aXZlRGlyZWN0aXZlKG1fb2JqZWN0U3Jj
LmdldCgpKSwgdXJsLCBvYmplY3RTcmMpIDoKLSAgICAgICAgKG1fcmVwb3J0T25seSB8fCBjaGVj
a1NvdXJjZShvcGVyYXRpdmVEaXJlY3RpdmUobV9vYmplY3RTcmMuZ2V0KCkpLCB1cmwpKTsKLX0K
LQotYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKGNvbnN0
IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRp
bmdTdGF0dXMpIGNvbnN0Ci17Ci0gICAgaWYgKHVybC5pc0JsYW5rVVJMKCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3VyaXR5
UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwotICAgICAgICBjaGVja1NvdXJj
ZUFuZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJlY3RpdmUobV9mcmFtZVNyYy5nZXQoKSks
IHVybCwgZnJhbWVTcmMpIDoKLSAgICAgICAgKG1fcmVwb3J0T25seSB8fCBjaGVja1NvdXJjZShv
cGVyYXRpdmVEaXJlY3RpdmUobV9mcmFtZVNyYy5nZXQoKSksIHVybCkpOwotfQotCi1ib29sIENT
UERpcmVjdGl2ZUxpc3Q6OmFsbG93SW1hZ2VGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIHJlcG9ydGluZ1N0YXR1cyA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCA/Ci0gICAgICAgIGNoZWNrU291cmNlQW5kUmVw
b3J0VmlvbGF0aW9uKG9wZXJhdGl2ZURpcmVjdGl2ZShtX2ltZ1NyYy5nZXQoKSksIHVybCwgaW1n
U3JjKSA6Ci0gICAgICAgIChtX3JlcG9ydE9ubHkgfHwgY2hlY2tTb3VyY2Uob3BlcmF0aXZlRGly
ZWN0aXZlKG1faW1nU3JjLmdldCgpKSwgdXJsKSk7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlz
dDo6YWxsb3dTdHlsZUZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKLXsKLSAgICByZXR1
cm4gcmVwb3J0aW5nU3RhdHVzID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3Rh
dHVzOjpTZW5kUmVwb3J0ID8KLSAgICAgICAgY2hlY2tTb3VyY2VBbmRSZXBvcnRWaW9sYXRpb24o
b3BlcmF0aXZlRGlyZWN0aXZlKG1fc3R5bGVTcmMuZ2V0KCkpLCB1cmwsIHN0eWxlU3JjKSA6Ci0g
ICAgICAgIChtX3JlcG9ydE9ubHkgfHwgY2hlY2tTb3VyY2Uob3BlcmF0aXZlRGlyZWN0aXZlKG1f
c3R5bGVTcmMuZ2V0KCkpLCB1cmwpKTsKLX0KLQotYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjphbGxv
d0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJl
cG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlcG9y
dGluZ1N0YXR1cyA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2Vu
ZFJlcG9ydCA/Ci0gICAgICAgIGNoZWNrU291cmNlQW5kUmVwb3J0VmlvbGF0aW9uKG9wZXJhdGl2
ZURpcmVjdGl2ZShtX2ZvbnRTcmMuZ2V0KCkpLCB1cmwsIGZvbnRTcmMpIDoKLSAgICAgICAgKG1f
cmVwb3J0T25seSB8fCBjaGVja1NvdXJjZShvcGVyYXRpdmVEaXJlY3RpdmUobV9mb250U3JjLmdl
dCgpKSwgdXJsKSk7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dNZWRpYUZyb21T
b3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3Rh
dHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKLXsKLSAgICByZXR1cm4gcmVwb3J0aW5nU3RhdHVz
ID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0ID8K
LSAgICAgICAgY2hlY2tTb3VyY2VBbmRSZXBvcnRWaW9sYXRpb24ob3BlcmF0aXZlRGlyZWN0aXZl
KG1fbWVkaWFTcmMuZ2V0KCkpLCB1cmwsIG1lZGlhU3JjKSA6Ci0gICAgICAgIChtX3JlcG9ydE9u
bHkgfHwgY2hlY2tTb3VyY2Uob3BlcmF0aXZlRGlyZWN0aXZlKG1fbWVkaWFTcmMuZ2V0KCkpLCB1
cmwpKTsKLX0KLQotYm9vbCBDU1BEaXJlY3RpdmVMaXN0OjphbGxvd0Nvbm5lY3RUb1NvdXJjZShj
b25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVw
b3J0aW5nU3RhdHVzKSBjb25zdAotewotICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwotICAgICAg
ICBjaGVja1NvdXJjZUFuZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJlY3RpdmUobV9jb25u
ZWN0U3JjLmdldCgpKSwgdXJsLCBjb25uZWN0U3JjKSA6Ci0gICAgICAgIChtX3JlcG9ydE9ubHkg
fHwgY2hlY2tTb3VyY2Uob3BlcmF0aXZlRGlyZWN0aXZlKG1fY29ubmVjdFNyYy5nZXQoKSksIHVy
bCkpOwotfQotCi1ib29sIENTUERpcmVjdGl2ZUxpc3Q6OmFsbG93Rm9ybUFjdGlvbihjb25zdCBV
UkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5n
U3RhdHVzKSBjb25zdAotewotICAgIHJldHVybiByZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQgPwotICAgICAgICBjaGVj
a1NvdXJjZUFuZFJlcG9ydFZpb2xhdGlvbihtX2Zvcm1BY3Rpb24uZ2V0KCksIHVybCwgZm9ybUFj
dGlvbikgOgotICAgICAgICAobV9yZXBvcnRPbmx5IHx8IGNoZWNrU291cmNlKG1fZm9ybUFjdGlv
bi5nZXQoKSwgdXJsKSk7Ci19Ci0KLWJvb2wgQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dCYXNlVVJJ
KGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyBy
ZXBvcnRpbmdTdGF0dXMpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHJlcG9ydGluZ1N0YXR1cyA9PSBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCA/Ci0gICAg
ICAgIGNoZWNrU291cmNlQW5kUmVwb3J0VmlvbGF0aW9uKG1fYmFzZVVSSS5nZXQoKSwgdXJsLCBi
YXNlVVJJKSA6Ci0gICAgICAgIChtX3JlcG9ydE9ubHkgfHwgY2hlY2tTb3VyY2UobV9iYXNlVVJJ
LmdldCgpLCB1cmwpKTsKLX0KLQotLy8gcG9saWN5ICAgICAgICAgICAgPSBkaXJlY3RpdmUtbGlz
dAotLy8gZGlyZWN0aXZlLWxpc3QgICAgPSBbIGRpcmVjdGl2ZSAqKCAiOyIgWyBkaXJlY3RpdmUg
XSApIF0KLS8vCi12b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgcG9s
aWN5KQotewotICAgIG1faGVhZGVyID0gcG9saWN5OwotICAgIGlmIChwb2xpY3kuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHBv
bGljeSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9u
ID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyBwb2xpY3ku
bGVuZ3RoKCk7Ci0KLSAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAgICAgICAgY29uc3Qg
VUNoYXIqIGRpcmVjdGl2ZUJlZ2luID0gcG9zaXRpb247Ci0gICAgICAgIHNraXBVbnRpbChwb3Np
dGlvbiwgZW5kLCAnOycpOwotCi0gICAgICAgIFN0cmluZyBuYW1lLCB2YWx1ZTsKLSAgICAgICAg
aWYgKHBhcnNlRGlyZWN0aXZlKGRpcmVjdGl2ZUJlZ2luLCBwb3NpdGlvbiwgbmFtZSwgdmFsdWUp
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIGFk
ZERpcmVjdGl2ZShuYW1lLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQocG9z
aXRpb24gPT0gZW5kIHx8ICpwb3NpdGlvbiA9PSAnOycpOwotICAgICAgICBza2lwRXhhY3RseShw
b3NpdGlvbiwgZW5kLCAnOycpOwotICAgIH0KLX0KLQotLy8gZGlyZWN0aXZlICAgICAgICAgPSAq
V1NQIFsgZGlyZWN0aXZlLW5hbWUgWyBXU1AgZGlyZWN0aXZlLXZhbHVlIF0gXQotLy8gZGlyZWN0
aXZlLW5hbWUgICAgPSAxKiggQUxQSEEgLyBESUdJVCAvICItIiApCi0vLyBkaXJlY3RpdmUtdmFs
dWUgICA9ICooIFdTUCAvIDxWQ0hBUiBleGNlcHQgIjsiPiApCi0vLwotYm9vbCBDU1BEaXJlY3Rp
dmVMaXN0OjpwYXJzZURpcmVjdGl2ZShjb25zdCBVQ2hhciogYmVnaW4sIGNvbnN0IFVDaGFyKiBl
bmQsIFN0cmluZyYgbmFtZSwgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQobmFtZS5pc0Vt
cHR5KCkpOwotICAgIEFTU0VSVCh2YWx1ZS5pc0VtcHR5KCkpOwotCi0gICAgY29uc3QgVUNoYXIq
IHBvc2l0aW9uID0gYmVnaW47Ci0gICAgc2tpcFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24s
IGVuZCk7Ci0KLSAgICAvLyBFbXB0eSBkaXJlY3RpdmUgKGUuZy4gIjs7OyIpLiBFeGl0IGVhcmx5
LgotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3NpdGlvbjsKLSAgICBza2lwV2hpbGU8aXNEaXJl
Y3RpdmVOYW1lQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLQotICAgIC8vIFRoZSBkaXJlY3Rp
dmUtbmFtZSBtdXN0IGJlIG5vbi1lbXB0eS4KLSAgICBpZiAobmFtZUJlZ2luID09IHBvc2l0aW9u
KSB7Ci0gICAgICAgIHNraXBXaGlsZTxpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwot
ICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJl
Z2luLCBwb3NpdGlvbiAtIG5hbWVCZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgbmFtZSA9IFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0gbmFtZUJlZ2luKTsK
LQotICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKCFza2lwRXhhY3RseTxpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpKSB7Ci0gICAgICAg
IHNraXBXaGlsZTxpc05vdEFTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpOwotICAgICAgICBtX3Bv
bGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShTdHJpbmcobmFtZUJlZ2luLCBwb3NpdGlv
biAtIG5hbWVCZWdpbikpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc2tp
cFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICBjb25zdCBVQ2hhciog
dmFsdWVCZWdpbiA9IHBvc2l0aW9uOwotICAgIHNraXBXaGlsZTxpc0RpcmVjdGl2ZVZhbHVlQ2hh
cmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKLQotICAgIGlmIChwb3NpdGlvbiAhPSBlbmQpIHsKLSAg
ICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKG5hbWUs
IFN0cmluZyh2YWx1ZUJlZ2luLCBlbmQgLSB2YWx1ZUJlZ2luKSk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgZGlyZWN0aXZlLXZhbHVlIG1heSBiZSBlbXB0eS4K
LSAgICBpZiAodmFsdWVCZWdpbiA9PSBwb3NpdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwb3NpdGlvbiAtIHZhbHVlQmVnaW4pOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0
VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
IW1fcmVwb3J0VVJJcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGlj
YXRlRGlyZWN0aXZlKG5hbWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBj
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0g
ICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gY2hhcmFjdGVyczsKLSAgICBjb25zdCBVQ2hhciog
ZW5kID0gcG9zaXRpb24gKyB2YWx1ZS5sZW5ndGgoKTsKLQotICAgIHdoaWxlIChwb3NpdGlvbiA8
IGVuZCkgewotICAgICAgICBza2lwV2hpbGU8aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsK
LQotICAgICAgICBjb25zdCBVQ2hhciogdXJsQmVnaW4gPSBwb3NpdGlvbjsKLSAgICAgICAgc2tp
cFdoaWxlPGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAgICAgaWYgKHVy
bEJlZ2luIDwgcG9zaXRpb24pCi0gICAgICAgICAgICBtX3JlcG9ydFVSSXMuYXBwZW5kKHZhbHVl
LnN1YnN0cmluZyh1cmxCZWdpbiAtIGNoYXJhY3RlcnMsIHBvc2l0aW9uIC0gdXJsQmVnaW4pKTsK
LSAgICB9Ci19Ci0KLQotdGVtcGxhdGU8Y2xhc3MgQ1NQRGlyZWN0aXZlVHlwZT4KLXZvaWQgQ1NQ
RGlyZWN0aXZlTGlzdDo6c2V0Q1NQRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgc3RkOjp1bmlxdWVfcHRyPENTUERpcmVjdGl2ZVR5cGU+JiBkaXJlY3Rp
dmUpCi17Ci0gICAgaWYgKGRpcmVjdGl2ZSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBs
aWNhdGVEaXJlY3RpdmUobmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZGlyZWN0
aXZlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1BEaXJlY3RpdmVUeXBlPihuYW1lLCB2YWx1ZSwgbV9w
b2xpY3kpOwotfQotCi12b2lkIENTUERpcmVjdGl2ZUxpc3Q6OmFwcGx5U2FuZGJveFBvbGljeShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2FuZGJveFBvbGljeSkKLXsKLSAgICBp
ZiAobV9oYXZlU2FuZGJveFBvbGljeSkgewotICAgICAgICBtX3BvbGljeS5yZXBvcnREdXBsaWNh
dGVEaXJlY3RpdmUobmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9oYXZlU2Fu
ZGJveFBvbGljeSA9IHRydWU7Ci0gICAgU3RyaW5nIGludmFsaWRUb2tlbnM7Ci0gICAgbV9wb2xp
Y3kuZW5mb3JjZVNhbmRib3hGbGFncyhTZWN1cml0eUNvbnRleHQ6OnBhcnNlU2FuZGJveFBvbGlj
eShzYW5kYm94UG9saWN5LCBpbnZhbGlkVG9rZW5zKSk7Ci0gICAgaWYgKCFpbnZhbGlkVG9rZW5z
LmlzTnVsbCgpKQotICAgICAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkU2FuZGJveEZsYWdzKGlu
dmFsaWRUb2tlbnMpOwotfQotCi12b2lkIENTUERpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVmbGVjdGVk
WFNTKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBpZiAo
bV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiAhPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxl
Y3RlZFhTU1Vuc2V0KSB7Ci0gICAgICAgIG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2
ZShuYW1lKTsKLSAgICAgICAgbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiA9IENvbnRlbnRTZWN1
cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTSW52YWxpZDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9yZWZsZWN0ZWRYU1NEaXNw
b3NpdGlvbiA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTSW52YWxpZDsKLSAg
ICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFJlZmxlY3RlZFhTUyh2YWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVl
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBj
aGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIHZhbHVlLmxlbmd0
aCgpOwotCi0gICAgc2tpcFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGJlZ2luID0gcG9zaXRpb247Ci0gICAgc2tpcFdoaWxlPGlzTm90QVNDSUlT
cGFjZT4ocG9zaXRpb24sIGVuZCk7Ci0KLSAgICAvLyB2YWx1ZTEKLSAgICAvLyAgICAgICBeCi0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAtIGJl
Z2luLCAiYWxsb3ciKSkKLSAgICAgICAgbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiA9IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6QWxsb3dSZWZsZWN0ZWRYU1M7Ci0gICAgZWxzZSBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4sICJmaWx0ZXIi
KSkKLSAgICAgICAgbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiA9IENvbnRlbnRTZWN1cml0eVBv
bGljeTo6RmlsdGVyUmVmbGVjdGVkWFNTOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luLCAiYmxvY2siKSkKLSAgICAgICAg
bV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6QmxvY2tS
ZWZsZWN0ZWRYU1M7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1fcmVmbGVjdGVkWFNTRGlzcG9zaXRp
b24gPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0ludmFsaWQ7Ci0gICAgICAg
IG1fcG9saWN5LnJlcG9ydEludmFsaWRSZWZsZWN0ZWRYU1ModmFsdWUpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgc2tpcFdoaWxlPGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7
Ci0gICAgaWYgKHBvc2l0aW9uID09IGVuZCAmJiBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uICE9
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTVW5zZXQpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIHZhbHVlMSB2YWx1ZTIKLSAgICAvLyAgICAgICAgXgotICAgIG1fcmVmbGVj
dGVkWFNTRGlzcG9zaXRpb24gPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlZmxlY3RlZFhTU0lu
dmFsaWQ7Ci0gICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFJlZmxlY3RlZFhTUyh2YWx1ZSk7Ci19
Ci0KLXZvaWQgQ1NQRGlyZWN0aXZlTGlzdDo6YWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIW5hbWUuaXNFbXB0eSgpKTsK
LQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBkZWZhdWx0U3Jj
KSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPFNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZh
bHVlLCBtX2RlZmF1bHRTcmMpOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKG5hbWUsIHNjcmlwdFNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxTb3VyY2VM
aXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9zY3JpcHRTcmMpOwotICAgIGVsc2UgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIG9iamVjdFNyYykpCi0gICAgICAgIHNl
dENTUERpcmVjdGl2ZTxTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9vYmplY3RT
cmMpOwotICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGZy
YW1lU3JjKSkKLSAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPFNvdXJjZUxpc3REaXJlY3RpdmU+KG5h
bWUsIHZhbHVlLCBtX2ZyYW1lU3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShuYW1lLCBpbWdTcmMpKQotICAgICAgICBzZXRDU1BEaXJlY3RpdmU8U291cmNl
TGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1faW1nU3JjKTsKLSAgICBlbHNlIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBzdHlsZVNyYykpCi0gICAgICAgIHNldENT
UERpcmVjdGl2ZTxTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9zdHlsZVNyYyk7
Ci0gICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgZm9udFNy
YykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2
YWx1ZSwgbV9mb250U3JjKTsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCBtZWRpYVNyYykpCi0gICAgICAgIHNldENTUERpcmVjdGl2ZTxTb3VyY2VMaXN0
RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9tZWRpYVNyYyk7Ci0gICAgZWxzZSBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgY29ubmVjdFNyYykpCi0gICAgICAgIHNldENT
UERpcmVjdGl2ZTxTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9jb25uZWN0U3Jj
KTsKLSAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBzYW5k
Ym94KSkKLSAgICAgICAgYXBwbHlTYW5kYm94UG9saWN5KG5hbWUsIHZhbHVlKTsKLSAgICBlbHNl
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCByZXBvcnRVUkkpKQotICAg
ICAgICBwYXJzZVJlcG9ydFVSSShuYW1lLCB2YWx1ZSk7Ci0jaWYgRU5BQkxFKENTUF9ORVhUKQot
ICAgIGVsc2UgaWYgKG1fcG9saWN5LmV4cGVyaW1lbnRhbEZlYXR1cmVzRW5hYmxlZCgpKSB7Ci0g
ICAgICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBiYXNlVVJJKSkK
LSAgICAgICAgICAgIHNldENTUERpcmVjdGl2ZTxTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2
YWx1ZSwgbV9iYXNlVVJJKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UobmFtZSwgZm9ybUFjdGlvbikpCi0gICAgICAgICAgICBzZXRDU1BEaXJlY3RpdmU8
U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZm9ybUFjdGlvbik7Ci0gICAgICAg
IGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIHBsdWdpblR5cGVz
KSkKLSAgICAgICAgICAgIHNldENTUERpcmVjdGl2ZTxNZWRpYUxpc3REaXJlY3RpdmU+KG5hbWUs
IHZhbHVlLCBtX3BsdWdpblR5cGVzKTsKLSAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobmFtZSwgcmVmbGVjdGVkWFNTKSkKLSAgICAgICAgICAgIHBhcnNlUmVm
bGVjdGVkWFNTKG5hbWUsIHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9wb2xp
Y3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUobmFtZSk7Ci0gICAgfQotI2VuZGlmCi0gICAg
ZWxzZQotICAgICAgICBtX3BvbGljeS5yZXBvcnRVbnN1cHBvcnRlZERpcmVjdGl2ZShuYW1lKTsK
LX0KLQogQ29udGVudFNlY3VyaXR5UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICA6IG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgmc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAsIG1fc2FuZGJv
eEZsYWdzKFNhbmRib3hOb25lKQpAQCAtMTMyNCwxNCArNjAsMTQgQEAgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpDb250ZW50U2VjdXJpdHlQb2xpY3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2Ny
aXB0RXhlY3UKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5zZWN1cml0eU9yaWdp
bigpKTsKICAgICBhdXRvJiBzZWN1cml0eU9yaWdpbiA9ICpzY3JpcHRFeGVjdXRpb25Db250ZXh0
LnNlY3VyaXR5T3JpZ2luKCk7CiAgICAgbV9zZWxmU291cmNlUHJvdG9jb2wgPSBzZWN1cml0eU9y
aWdpbi5wcm90b2NvbCgpOwotICAgIG1fc2VsZlNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q1NQ
U291cmNlPigqdGhpcywgbV9zZWxmU291cmNlUHJvdG9jb2wsIHNlY3VyaXR5T3JpZ2luLmhvc3Qo
KSwgc2VjdXJpdHlPcmlnaW4ucG9ydCgpLCBlbXB0eVN0cmluZygpLCBmYWxzZSwgZmFsc2UpOwor
ICAgIG1fc2VsZlNvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlPigqdGhpcywgbV9zZWxmU291cmNlUHJvdG9jb2wsIHNlY3VyaXR5T3JpZ2luLmhvc3Qo
KSwgc2VjdXJpdHlPcmlnaW4ucG9ydCgpLCBlbXB0eVN0cmluZygpLCBmYWxzZSwgZmFsc2UpOwog
fQogCiBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkNvbnRlbnRTZWN1cml0eVBvbGljeShjb25zdCBT
ZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4pCiAgICAgOiBtX3NhbmRib3hGbGFncyhTYW5k
Ym94Tm9uZSkKIHsKICAgICBtX3NlbGZTb3VyY2VQcm90b2NvbCA9IHNlY3VyaXR5T3JpZ2luLnBy
b3RvY29sKCk7Ci0gICAgbV9zZWxmU291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDU1BTb3VyY2U+
KCp0aGlzLCBtX3NlbGZTb3VyY2VQcm90b2NvbCwgc2VjdXJpdHlPcmlnaW4uaG9zdCgpLCBzZWN1
cml0eU9yaWdpbi5wb3J0KCksIGVtcHR5U3RyaW5nKCksIGZhbHNlLCBmYWxzZSk7CisgICAgbV9z
ZWxmU291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U+
KCp0aGlzLCBtX3NlbGZTb3VyY2VQcm90b2NvbCwgc2VjdXJpdHlPcmlnaW4uaG9zdCgpLCBzZWN1
cml0eU9yaWdpbi5wb3J0KCksIGVtcHR5U3RyaW5nKCksIGZhbHNlLCBmYWxzZSk7CiB9CiAKIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6fkNvbnRlbnRTZWN1cml0eVBvbGljeSgpCkBAIC0xMzcwLDEx
ICsxMDYsMTEgQEAgdm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmRpZFJlY2VpdmVIZWFkZXIo
Y29uc3QgU3RyaW5nJiBoZWFkZXIsIENvbnRlbnRTZWN1cmkKICAgICBjb25zdCBVQ2hhciogcG9z
aXRpb24gPSBiZWdpbjsKICAgICBjb25zdCBVQ2hhciogZW5kID0gYmVnaW4gKyBoZWFkZXIubGVu
Z3RoKCk7CiAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIHNraXBVbnRpbChw
b3NpdGlvbiwgZW5kLCAnLCcpOworICAgICAgICBza2lwVW50aWw8VUNoYXI+KHBvc2l0aW9uLCBl
bmQsICcsJyk7CiAKICAgICAgICAgLy8gaGVhZGVyMSxoZWFkZXIyIE9SIGhlYWRlcjEKICAgICAg
ICAgLy8gICAgICAgIF4gICAgICAgICAgICAgICAgICBeCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxDU1BEaXJlY3RpdmVMaXN0PiBwb2xpY3kgPSBDU1BEaXJlY3RpdmVMaXN0OjpjcmVhdGUoKnRo
aXMsIFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiksIHR5cGUpOworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdD4gcG9saWN5ID0g
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y3JlYXRlKCp0aGlzLCBTdHJpbmco
YmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pLCB0eXBlKTsKICAgICAgICAgaWYgKCFwb2xpY3ktPmFs
bG93RXZhbCgwLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U3VwcHJl
c3NSZXBvcnQpKQogICAgICAgICAgICAgbV9sYXN0UG9saWN5RXZhbERpc2FibGVkRXJyb3JNZXNz
YWdlID0gcG9saWN5LT5ldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2UoKTsKIApAQCAtMTM4Miw3ICsx
MTgsNyBAQCB2b2lkIENvbnRlbnRTZWN1cml0eVBvbGljeTo6ZGlkUmVjZWl2ZUhlYWRlcihjb25z
dCBTdHJpbmcmIGhlYWRlciwgQ29udGVudFNlY3VyaQogCiAgICAgICAgIC8vIFNraXAgdGhlIGNv
bW1hLCBhbmQgYmVnaW4gdGhlIG5leHQgaGVhZGVyIGZyb20gdGhlIGN1cnJlbnQgcG9zaXRpb24u
CiAgICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKnBvc2l0aW9uID09ICcsJyk7Ci0g
ICAgICAgIHNraXBFeGFjdGx5KHBvc2l0aW9uLCBlbmQsICcsJyk7CisgICAgICAgIHNraXBFeGFj
dGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLCcpOwogICAgICAgICBiZWdpbiA9IHBvc2l0aW9u
OwogICAgIH0KIApAQCAtMTQxOCw3ICsxNTQsNyBAQCBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6cHJvdG9jb2xNYXRjaGVzU2VsZihjb25zdCBVUkwmIHVybCkgY29uc3QKICAgICByZXR1cm4g
ZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZSh1cmwucHJvdG9jb2woKSwgbV9zZWxmU291cmNlUHJvdG9j
b2wpOwogfQogCi10ZW1wbGF0ZTxib29sIChDU1BEaXJlY3RpdmVMaXN0OjoqYWxsb3dlZCkoQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0PgordGVtcGxhdGU8Ym9v
bCAoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6KmFsbG93ZWQpKENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdD4KIGJvb2wgaXNBbGxvd2VkQnlB
bGwoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIENvbnRlbnRTZWN1cml0
eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykKIHsKICAgICBmb3IgKGF1
dG8mIHBvbGljeSA6IHBvbGljaWVzKSB7CkBAIC0xNDI4LDcgKzE2NCw3IEBAIGJvb2wgaXNBbGxv
d2VkQnlBbGwoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIENvbnRlbnRT
ZWN1cml0eVBvbGljCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXRlbXBsYXRlPGJvb2wgKENTUERp
cmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsIENvbnRlbnRTZWN1
cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdD4KK3RlbXBsYXRlPGJvb2wgKENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShKU0M6OkV4ZWNTdGF0ZSog
c3RhdGUsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdD4KIGJv
b2wgaXNBbGxvd2VkQnlBbGxXaXRoU3RhdGUoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYg
cG9saWNpZXMsIEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpS
ZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKQogewogICAgIGZvciAoYXV0byYgcG9saWN5
IDogcG9saWNpZXMpIHsKQEAgLTE0MzgsNyArMTc0LDcgQEAgYm9vbCBpc0FsbG93ZWRCeUFsbFdp
dGhTdGF0ZShjb25zdCBDU1BEaXJlY3RpdmVMaXN0VmVjdG9yJiBwb2xpY2llcywgSlNDOjpFeGVj
U3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8Ym9vbCAoQ1NQRGlyZWN0aXZlTGlz
dDo6KmFsbG93ZWQpKGNvbnN0IFN0cmluZyYsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdD4KK3RlbXBsYXRlPGJv
b2wgKENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OiphbGxvd2VkKShjb25zdCBT
dHJpbmcmLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6
OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q+CiBib29sIGlzQWxsb3dlZEJ5QWxsV2l0aENvbnRleHQo
Y29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMsIGNvbnN0IFN0cmluZyYgY29u
dGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKQogewogICAgIGZv
ciAoYXV0byYgcG9saWN5IDogcG9saWNpZXMpIHsKQEAgLTE0NDgsNyArMTg0LDcgQEAgYm9vbCBp
c0FsbG93ZWRCeUFsbFdpdGhDb250ZXh0KGNvbnN0IENTUERpcmVjdGl2ZUxpc3RWZWN0b3ImIHBv
bGljaWVzLCBjb25zdCBTdHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGU8Ym9vbCAo
Q1NQRGlyZWN0aXZlTGlzdDo6KmFsbG93RnJvbVVSTCkoY29uc3QgVVJMJiwgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0PgordGVtcGxhdGU8Ym9vbCAoQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6KmFsbG93RnJvbVVSTCkoY29uc3QgVVJMJiwg
Q29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0PgogYm9vbCBpc0Fs
bG93ZWRCeUFsbFdpdGhVUkwoY29uc3QgQ1NQRGlyZWN0aXZlTGlzdFZlY3RvciYgcG9saWNpZXMs
IGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyBy
ZXBvcnRpbmdTdGF0dXMpCiB7CiAgICAgaWYgKFNjaGVtZVJlZ2lzdHJ5OjpzY2hlbWVTaG91bGRC
eXBhc3NDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsLnByb3RvY29sKCkpKQpAQCAtMTQ2MywyNyAr
MTk5LDI3IEBAIGJvb2wgaXNBbGxvd2VkQnlBbGxXaXRoVVJMKGNvbnN0IENTUERpcmVjdGl2ZUxp
c3RWZWN0b3ImIHBvbGljaWVzLCBjb25zdCBVUkwmIHVyCiAKIGJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5OjphbGxvd0phdmFTY3JpcHRVUkxzKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29u
c3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVw
b3J0aW5nU3RhdHVzKSBjb25zdAogewotICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0
eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhDb250ZXh0PCZDU1BEaXJlY3RpdmVMaXN0Ojph
bGxvd0phdmFTY3JpcHRVUkxzPihtX3BvbGljaWVzLCBjb250ZXh0VVJMLCBjb250ZXh0TGluZSwg
cmVwb3J0aW5nU3RhdHVzKTsKKyAgICByZXR1cm4gb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xp
Y3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoQ29udGV4dDwmQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdDo6YWxsb3dKYXZhU2NyaXB0VVJMcz4obV9wb2xpY2llcywgY29udGV4dFVSTCwg
Y29udGV4dExpbmUsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5OjphbGxvd0lubGluZUV2ZW50SGFuZGxlcnMoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJM
LCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBib29sIG92ZXJyaWRlQ29u
dGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1
cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNl
Y3VyaXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxsV2l0aENvbnRleHQ8JkNTUERpcmVjdGl2ZUxp
c3Q6OmFsbG93SW5saW5lRXZlbnRIYW5kbGVycz4obV9wb2xpY2llcywgY29udGV4dFVSTCwgY29u
dGV4dExpbmUsIHJlcG9ydGluZ1N0YXR1cyk7CisgICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNl
Y3VyaXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxsV2l0aENvbnRleHQ8JkNvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93SW5saW5lRXZlbnRIYW5kbGVycz4obV9wb2xpY2ll
cywgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CiAKIGJvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0lubGluZVNjcmlwdChjb25zdCBTdHJpbmcmIGNv
bnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIGJvb2wgb3Zl
cnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKIHsKLSAgICByZXR1cm4gb3ZlcnJpZGVD
b250ZW50U2VjdXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoQ29udGV4dDwmQ1NQRGly
ZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVTY3JpcHQ+KG1fcG9saWNpZXMsIGNvbnRleHRVUkwsIGNv
bnRleHRMaW5lLCByZXBvcnRpbmdTdGF0dXMpOworICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhDb250ZXh0PCZDb250ZW50U2VjdXJp
dHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0lubGluZVNjcmlwdD4obV9wb2xpY2llcywgY29u
dGV4dFVSTCwgY29udGV4dExpbmUsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CiAKIGJvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjphbGxvd0lubGluZVN0eWxlKGNvbnN0IFN0cmluZyYgY29udGV4dFVS
TCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBvdmVycmlkZUNv
bnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0
dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAogewotICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRT
ZWN1cml0eVBvbGljeSB8fCBtX292ZXJyaWRlSW5saW5lU3R5bGVBbGxvd2VkIHx8IGlzQWxsb3dl
ZEJ5QWxsV2l0aENvbnRleHQ8JkNTUERpcmVjdGl2ZUxpc3Q6OmFsbG93SW5saW5lU3R5bGU+KG1f
cG9saWNpZXMsIGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCByZXBvcnRpbmdTdGF0dXMpOworICAg
IHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBtX292ZXJyaWRlSW5saW5l
U3R5bGVBbGxvd2VkIHx8IGlzQWxsb3dlZEJ5QWxsV2l0aENvbnRleHQ8JkNvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93SW5saW5lU3R5bGU+KG1fcG9saWNpZXMsIGNvbnRl
eHRVUkwsIGNvbnRleHRMaW5lLCByZXBvcnRpbmdTdGF0dXMpOwogfQogCiBib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6YWxsb3dFdmFsKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgYm9vbCBvdmVy
cmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAogewotICAgIHJldHVybiBvdmVycmlkZUNv
bnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhTdGF0ZTwmQ1NQRGlyZWN0
aXZlTGlzdDo6YWxsb3dFdmFsPihtX3BvbGljaWVzLCBzdGF0ZSwgcmVwb3J0aW5nU3RhdHVzKTsK
KyAgICByZXR1cm4gb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlB
bGxXaXRoU3RhdGU8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93RXZh
bD4obV9wb2xpY2llcywgc3RhdGUsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CiAKIFN0cmluZyBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OmV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZSgpIGNvbnN0CkBAIC0x
NTA4LDUyICsyNDQsNTIgQEAgYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93UGx1Z2lu
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdHkKIAogYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OmFsbG93U2NyaXB0RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgYm9v
bCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpS
ZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAogewotICAgIHJldHVybiBvdmVy
cmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNTUERp
cmVjdGl2ZUxpc3Q6OmFsbG93U2NyaXB0RnJvbVNvdXJjZT4obV9wb2xpY2llcywgdXJsLCByZXBv
cnRpbmdTdGF0dXMpOworICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8
fCBpc0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3Q6OmFsbG93U2NyaXB0RnJvbVNvdXJjZT4obV9wb2xpY2llcywgdXJsLCByZXBvcnRpbmdTdGF0
dXMpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGljeTo6YWxsb3dPYmplY3RGcm9tU291
cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxs
b3dlZEJ5QWxsV2l0aFVSTDwmQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dPYmplY3RGcm9tU291cmNl
PihtX3BvbGljaWVzLCB1cmwsIHJlcG9ydGluZ1N0YXR1cyk7CisgICAgcmV0dXJuIG92ZXJyaWRl
Q29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxsV2l0aFVSTDwmQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dPYmplY3RGcm9tU291cmNlPihtX3BvbGlj
aWVzLCB1cmwsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CiAKIGJvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJy
aWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGlu
Z1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29u
dGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxsV2l0aFVSTDwmQ1NQRGlyZWN0aXZl
TGlzdDo6YWxsb3dDaGlsZEZyYW1lRnJvbVNvdXJjZT4obV9wb2xpY2llcywgdXJsLCByZXBvcnRp
bmdTdGF0dXMpOworICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBp
c0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6
OmFsbG93Q2hpbGRGcmFtZUZyb21Tb3VyY2U+KG1fcG9saWNpZXMsIHVybCwgcmVwb3J0aW5nU3Rh
dHVzKTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93SW1hZ2VGcm9tU291
cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxs
b3dlZEJ5QWxsV2l0aFVSTDwmQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dJbWFnZUZyb21Tb3VyY2U+
KG1fcG9saWNpZXMsIHVybCwgcmVwb3J0aW5nU3RhdHVzKTsKKyAgICByZXR1cm4gb3ZlcnJpZGVD
b250ZW50U2VjdXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0ltYWdlRnJvbVNvdXJjZT4obV9wb2xpY2ll
cywgdXJsLCByZXBvcnRpbmdTdGF0dXMpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsb3dTdHlsZUZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250
ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVz
IHJlcG9ydGluZ1N0YXR1cykgY29uc3QKIHsKLSAgICByZXR1cm4gb3ZlcnJpZGVDb250ZW50U2Vj
dXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDU1BEaXJlY3RpdmVMaXN0Ojph
bGxvd1N0eWxlRnJvbVNvdXJjZT4obV9wb2xpY2llcywgdXJsLCByZXBvcnRpbmdTdGF0dXMpOwor
ICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFs
bFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93U3R5bGVG
cm9tU291cmNlPihtX3BvbGljaWVzLCB1cmwsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CiAKIGJvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0ZvbnRGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJs
LCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxsb3dlZEJ5QWxsV2l0aFVSTDwm
Q1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dGb250RnJvbVNvdXJjZT4obV9wb2xpY2llcywgdXJsLCBy
ZXBvcnRpbmdTdGF0dXMpOworICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGlj
eSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OmFsbG93Rm9udEZyb21Tb3VyY2U+KG1fcG9saWNpZXMsIHVybCwgcmVwb3J0aW5nU3Rh
dHVzKTsKIH0KIAogYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93TWVkaWFGcm9tU291
cmNlKGNvbnN0IFVSTCYgdXJsLCBib29sIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5LCBD
b250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG92ZXJyaWRlQ29udGVudFNlY3VyaXR5UG9saWN5IHx8IGlzQWxs
b3dlZEJ5QWxsV2l0aFVSTDwmQ1NQRGlyZWN0aXZlTGlzdDo6YWxsb3dNZWRpYUZyb21Tb3VyY2U+
KG1fcG9saWNpZXMsIHVybCwgcmVwb3J0aW5nU3RhdHVzKTsKKyAgICByZXR1cm4gb3ZlcnJpZGVD
b250ZW50U2VjdXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd01lZGlhRnJvbVNvdXJjZT4obV9wb2xpY2ll
cywgdXJsLCByZXBvcnRpbmdTdGF0dXMpOwogfQogCiBib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eTo6YWxsb3dDb25uZWN0VG9Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIGJvb2wgb3ZlcnJpZGVDb250
ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVz
IHJlcG9ydGluZ1N0YXR1cykgY29uc3QKIHsKLSAgICByZXR1cm4gb3ZlcnJpZGVDb250ZW50U2Vj
dXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDU1BEaXJlY3RpdmVMaXN0Ojph
bGxvd0Nvbm5lY3RUb1NvdXJjZT4obV9wb2xpY2llcywgdXJsLCByZXBvcnRpbmdTdGF0dXMpOwor
ICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFs
bFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93Q29ubmVj
dFRvU291cmNlPihtX3BvbGljaWVzLCB1cmwsIHJlcG9ydGluZ1N0YXR1cyk7CiB9CiAKIGJvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5OjphbGxvd0Zvcm1BY3Rpb24oY29uc3QgVVJMJiB1cmwsIGJv
b2wgb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3ksIENvbnRlbnRTZWN1cml0eVBvbGljeTo6
UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKIHsKLSAgICByZXR1cm4gb3Zl
cnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgfHwgaXNBbGxvd2VkQnlBbGxXaXRoVVJMPCZDU1BE
aXJlY3RpdmVMaXN0OjphbGxvd0Zvcm1BY3Rpb24+KG1fcG9saWNpZXMsIHVybCwgcmVwb3J0aW5n
U3RhdHVzKTsKKyAgICByZXR1cm4gb3ZlcnJpZGVDb250ZW50U2VjdXJpdHlQb2xpY3kgfHwgaXNB
bGxvd2VkQnlBbGxXaXRoVVJMPCZDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0Ojph
bGxvd0Zvcm1BY3Rpb24+KG1fcG9saWNpZXMsIHVybCwgcmVwb3J0aW5nU3RhdHVzKTsKIH0KIAog
Ym9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OmFsbG93QmFzZVVSSShjb25zdCBVUkwmIHVybCwg
Ym9vbCBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5
OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAogewotICAgIHJldHVybiBv
dmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0FsbG93ZWRCeUFsbFdpdGhVUkw8JkNT
UERpcmVjdGl2ZUxpc3Q6OmFsbG93QmFzZVVSST4obV9wb2xpY2llcywgdXJsLCByZXBvcnRpbmdT
dGF0dXMpOworICAgIHJldHVybiBvdmVycmlkZUNvbnRlbnRTZWN1cml0eVBvbGljeSB8fCBpc0Fs
bG93ZWRCeUFsbFdpdGhVUkw8JkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFs
bG93QmFzZVVSST4obV9wb2xpY2llcywgdXJsLCByZXBvcnRpbmdTdGF0dXMpOwogfQogCiBib29s
IENvbnRlbnRTZWN1cml0eVBvbGljeTo6aXNBY3RpdmUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3kuaAppbmRleCA5ODE3YTQ5YTM2ZTY5
NjE5ODg0ZThhMzViYTA5YmY0NDJhZDY5YzAwLi42MzczYTAyZTkxZDQ2OTkxMTNiNGNiMzU2M2Iz
Yjc3YWMyNzk2YTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuaApAQCAtMzgsMTQgKzM4LDE0IEBAIGNsYXNzIE9yZGluYWxOdW1iZXI7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NQRGlyZWN0aXZlTGlzdDsKLWNsYXNzIENT
UFNvdXJjZTsKK2NsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q7CitjbGFz
cyBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U7CiBjbGFzcyBET01TdHJpbmdMaXN0OwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3Mg
VVJMOwogCi10eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlTGlzdD4+
IENTUERpcmVjdGl2ZUxpc3RWZWN0b3I7Cit0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdD4+IENTUERpcmVjdGl2ZUxpc3RWZWN0
b3I7CiB0eXBlZGVmIGludCBTYW5kYm94RmxhZ3M7CiAKIGNsYXNzIENvbnRlbnRTZWN1cml0eVBv
bGljeSB7CkBAIC0xMDcsMTYgKzEwNywxNiBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCBtYWtlIHRoZSB2YXJpb3VzIGRpcmVjdGl2ZXMgc2VydmUgb25seSBhcyBzdGF0ZSBzdG9y
ZXMgZm9yIHRoZSBwYXJzZWQgcG9saWN5IGFuZCByZW1vdmUgdGhlc2UgZnVuY3Rpb25zLgogICAg
IC8vIFRoaXMgY2xhc3Mgc2hvdWxkIHRyYXZlcnNlIHRoZSBkaXJlY3RpdmVzLCB2YWxpZGF0aW5n
IHRoZSBwb2xpY3ksIGFuZCBhcHBseWluZyBpdCB0byB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBjb250
ZXh0LgogCi0gICAgLy8gVXNlZCBieSBNZWRpYUxpc3REaXJlY3RpdmUKKyAgICAvLyBVc2VkIGJ5
IENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZQogICAgIHZvaWQgcmVwb3J0
SW52YWxpZFBsdWdpblR5cGVzKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCi0gICAgLy8gVXNlZCBi
eSBDU1BTb3VyY2VMaXN0CisgICAgLy8gVXNlZCBieSBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3Vy
Y2VMaXN0CiAgICAgdm9pZCByZXBvcnREaXJlY3RpdmVBc1NvdXJjZUV4cHJlc3Npb24oY29uc3Qg
U3RyaW5nJiBkaXJlY3RpdmVOYW1lLCBjb25zdCBTdHJpbmcmIHNvdXJjZUV4cHJlc3Npb24pIGNv
bnN0OwogICAgIHZvaWQgcmVwb3J0SW52YWxpZFBhdGhDaGFyYWN0ZXIoY29uc3QgU3RyaW5nJiBk
aXJlY3RpdmVOYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBjaGFyKSBjb25zdDsKICAg
ICB2b2lkIHJlcG9ydEludmFsaWRTb3VyY2VFeHByZXNzaW9uKGNvbnN0IFN0cmluZyYgZGlyZWN0
aXZlTmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIGNvbnN0OwogICAgIGJvb2wgdXJsTWF0Y2hl
c1NlbGYoY29uc3QgVVJMJikgY29uc3Q7CiAKLSAgICAvLyBVc2VkIGJ5IENTUERpcmVjdGl2ZUxp
c3QKKyAgICAvLyBVc2VkIGJ5IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QKICAg
ICB2b2lkIHJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAg
ICB2b2lkIHJlcG9ydEludmFsaWREaXJlY3RpdmVWYWx1ZUNoYXJhY3Rlcihjb25zdCBTdHJpbmcm
IGRpcmVjdGl2ZU5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0OwogICAgIHZvaWQgcmVw
b3J0SW52YWxpZFNhbmRib3hGbGFncyhjb25zdCBTdHJpbmcmKSBjb25zdDsKQEAgLTEyNyw3ICsx
MjcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXBvcnRCbG9ja2VkU2NyaXB0RXhlY3V0aW9uVG9J
bnNwZWN0b3IoY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KSBjb25zdDsKICAgICB2b2lkIGVu
Zm9yY2VTYW5kYm94RmxhZ3MoU2FuZGJveEZsYWdzIHNhbmRib3hGbGFncykgeyBtX3NhbmRib3hG
bGFncyB8PSBzYW5kYm94RmxhZ3M7IH0KIAotICAgIC8vIFVzZWQgYnkgQ1NQU291cmNlCisgICAg
Ly8gVXNlZCBieSBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UKICAgICBib29sIHByb3RvY29s
TWF0Y2hlc1NlbGYoY29uc3QgVVJMJikgY29uc3Q7CiAKIHByaXZhdGU6CkBAIC0xMzUsNyArMTM1
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGx5UG9saWN5VG9TY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CiAKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgeyBudWxscHRyIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENTUFNvdXJjZT4gbV9zZWxm
U291cmNlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U+
IG1fc2VsZlNvdXJjZTsKICAgICBTdHJpbmcgbV9zZWxmU291cmNlUHJvdG9jb2w7CiAgICAgQ1NQ
RGlyZWN0aXZlTGlzdFZlY3RvciBtX3BvbGljaWVzOwogICAgIFN0cmluZyBtX2xhc3RQb2xpY3lF
dmFsRGlzYWJsZWRFcnJvck1lc3NhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ0YWEx
M2YwMWYwMzBiNzUxMGZlZGU4NmEyMmM2OGM2ZmIyNDA5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuaApA
QCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEdPT0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlX2gKKyNkZWZpbmUg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRlbnRTZWN1cml0
eVBvbGljeTsKKworY2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlIHsKK3B1Ymxp
YzoKKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGlj
eSkKKyAgICAgICAgOiBtX25hbWUobmFtZSkKKyAgICAgICAgLCBtX3RleHQobmFtZSArICcgJyAr
IHZhbHVlKQorICAgICAgICAsIG1fcG9saWN5KHBvbGljeSkKKyAgICB7CisgICAgfQorCisgICAg
Y29uc3QgU3RyaW5nJiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSgpIGNvbnN0IHsgcmV0
dXJuIG1fcG9saWN5OyB9CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJp
bmcgbV90ZXh0OworICAgIGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYgbV9wb2xpY3k7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvKiBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zMmM0YTIwYzAwODIwN2RhMDVjNjQ0YWNlZDBkMzM5NTVmYWI5MzI5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdC5jcHAKQEAgLTAsMCArMSw1OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3QuaCIKKworI2luY2x1ZGUgIlBhcnNpbmdVdGls
aXRpZXMuaCIKKyNpbmNsdWRlICJTZWN1cml0eUNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDU1AgMS4wIERpcmVj
dGl2ZXMKK3N0YXRpYyBjb25zdCBjaGFyIGNvbm5lY3RTcmNbXSA9ICJjb25uZWN0LXNyYyI7Citz
dGF0aWMgY29uc3QgY2hhciBkZWZhdWx0U3JjW10gPSAiZGVmYXVsdC1zcmMiOworc3RhdGljIGNv
bnN0IGNoYXIgZm9udFNyY1tdID0gImZvbnQtc3JjIjsKK3N0YXRpYyBjb25zdCBjaGFyIGZyYW1l
U3JjW10gPSAiZnJhbWUtc3JjIjsKK3N0YXRpYyBjb25zdCBjaGFyIGltZ1NyY1tdID0gImltZy1z
cmMiOworc3RhdGljIGNvbnN0IGNoYXIgbWVkaWFTcmNbXSA9ICJtZWRpYS1zcmMiOworc3RhdGlj
IGNvbnN0IGNoYXIgb2JqZWN0U3JjW10gPSAib2JqZWN0LXNyYyI7CitzdGF0aWMgY29uc3QgY2hh
ciByZXBvcnRVUklbXSA9ICJyZXBvcnQtdXJpIjsKK3N0YXRpYyBjb25zdCBjaGFyIHNhbmRib3hb
XSA9ICJzYW5kYm94IjsKK3N0YXRpYyBjb25zdCBjaGFyIHNjcmlwdFNyY1tdID0gInNjcmlwdC1z
cmMiOworc3RhdGljIGNvbnN0IGNoYXIgc3R5bGVTcmNbXSA9ICJzdHlsZS1zcmMiOworCisvLyBD
U1AgMS4xIERpcmVjdGl2ZXMKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2VVUklbXSA9ICJiYXNlLXVy
aSI7CitzdGF0aWMgY29uc3QgY2hhciBmb3JtQWN0aW9uW10gPSAiZm9ybS1hY3Rpb24iOworc3Rh
dGljIGNvbnN0IGNoYXIgcGx1Z2luVHlwZXNbXSA9ICJwbHVnaW4tdHlwZXMiOworI2lmIEVOQUJM
RShDU1BfTkVYVCkKK3N0YXRpYyBjb25zdCBjaGFyIHJlZmxlY3RlZFhTU1tdID0gInJlZmxlY3Rl
ZC14c3MiOworI2VuZGlmCisKKyNpZiBFTkFCTEUoQ1NQX05FWFQpCisKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpc0V4cGVyaW1lbnRhbERpcmVjdGl2ZU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIHJldHVybiBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBiYXNlVVJJKQor
ICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBmb3JtQWN0aW9u
KQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBwbHVnaW5U
eXBlcykKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgcmVm
bGVjdGVkWFNTKTsKK30KKworI2Vsc2UKKworc3RhdGljIGlubGluZSBib29sIGlzRXhwZXJpbWVu
dGFsRGlyZWN0aXZlTmFtZShjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworI2VuZGlmCisKK2Jvb2wgaXNDU1BEaXJlY3RpdmVOYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICByZXR1cm4gZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgY29ubmVj
dFNyYykKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgZGVm
YXVsdFNyYykKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
Zm9udFNyYykKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
ZnJhbWVTcmMpCisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUs
IGltZ1NyYykKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
bWVkaWFTcmMpCisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUs
IG9iamVjdFNyYykKKyAgICAgICAgfHwgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFt
ZSwgcmVwb3J0VVJJKQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBzYW5kYm94KQorICAgICAgICB8fCBlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShu
YW1lLCBzY3JpcHRTcmMpCisgICAgICAgIHx8IGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG5hbWUsIHN0eWxlU3JjKQorICAgICAgICB8fCBpc0V4cGVyaW1lbnRhbERpcmVjdGl2ZU5hbWUo
bmFtZSk7Cit9CisKK3N0YXRpYyBib29sIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3RlcihVQ2hhciBj
KQoreworICAgIHJldHVybiBpc0FTQ0lJQWxwaGFudW1lcmljKGMpIHx8IGMgPT0gJy0nOworfQor
CitzdGF0aWMgYm9vbCBpc0RpcmVjdGl2ZVZhbHVlQ2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAg
cmV0dXJuIGlzQVNDSUlTcGFjZShjKSB8fCAoYyA+PSAweDIxICYmIGMgPD0gMHg3ZSk7IC8vIFdo
aXRlc3BhY2UgKyBWQ0hBUgorfQorCitzdGF0aWMgYm9vbCBpc05vdEFTQ0lJU3BhY2UoVUNoYXIg
YykKK3sKKyAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKTsKK30KKworQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlTGlzdDo6Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdChD
b250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSwgQ29udGVudFNlY3VyaXR5UG9saWN5SGVhZGVy
VHlwZSB0eXBlKQorICAgIDogbV9wb2xpY3kocG9saWN5KQorICAgICwgbV9oZWFkZXJUeXBlKHR5
cGUpCisgICAgLCBtX3JlcG9ydE9ubHkoZmFsc2UpCisgICAgLCBtX2hhdmVTYW5kYm94UG9saWN5
KGZhbHNlKQorICAgICwgbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbihDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlJlZmxlY3RlZFhTU1Vuc2V0KQoreworICAgIG1fcmVwb3J0T25seSA9ICh0eXBlID09
IENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGU6OlJlcG9ydCB8fCB0eXBlID09IENvbnRl
bnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGU6OlByZWZpeGVkUmVwb3J0KTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q+IENvbnRlbnRTZWN1
cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmNyZWF0ZShDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBv
bGljeSwgY29uc3QgU3RyaW5nJiBoZWFkZXIsIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5
cGUgdHlwZSkKK3sKKyAgICBhdXRvIGRpcmVjdGl2ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q+KHBvbGljeSwgdHlwZSk7CisgICAgZGlyZWN0
aXZlcy0+cGFyc2UoaGVhZGVyKTsKKworICAgIGlmICghZGlyZWN0aXZlcy0+Y2hlY2tFdmFsKGRp
cmVjdGl2ZXMtPm9wZXJhdGl2ZURpcmVjdGl2ZShkaXJlY3RpdmVzLT5tX3NjcmlwdFNyYy5nZXQo
KSkpKSB7CisgICAgICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZygiUmVmdXNlZCB0byBl
dmFsdWF0ZSBhIHN0cmluZyBhcyBKYXZhU2NyaXB0IGJlY2F1c2UgJ3Vuc2FmZS1ldmFsJyBpcyBu
b3QgYW4gYWxsb3dlZCBzb3VyY2Ugb2Ygc2NyaXB0IGluIHRoZSBmb2xsb3dpbmcgQ29udGVudCBT
ZWN1cml0eSBQb2xpY3kgZGlyZWN0aXZlOiBcIiIsIGRpcmVjdGl2ZXMtPm9wZXJhdGl2ZURpcmVj
dGl2ZShkaXJlY3RpdmVzLT5tX3NjcmlwdFNyYy5nZXQoKSktPnRleHQoKSwgIlwiLlxuIik7Cisg
ICAgICAgIGRpcmVjdGl2ZXMtPnNldEV2YWxEaXNhYmxlZEVycm9yTWVzc2FnZShtZXNzYWdlKTsK
KyAgICB9CisKKyAgICBpZiAoZGlyZWN0aXZlcy0+aXNSZXBvcnRPbmx5KCkgJiYgZGlyZWN0aXZl
cy0+cmVwb3J0VVJJcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcG9saWN5LnJlcG9ydE1pc3NpbmdS
ZXBvcnRVUkkoaGVhZGVyKTsKKworICAgIHJldHVybiBkaXJlY3RpdmVzOworfQorCit2b2lkIENv
bnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnJlcG9ydFZpb2xhdGlvbihjb25zdCBT
dHJpbmcmIGRpcmVjdGl2ZVRleHQsIGNvbnN0IFN0cmluZyYgZWZmZWN0aXZlRGlyZWN0aXZlLCBj
b25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlLCBjb25zdCBVUkwmIGJsb2NrZWRVUkwsIGNvbnN0
IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGlu
ZSwgSlNDOjpFeGVjU3RhdGUqIHN0YXRlKSBjb25zdAoreworICAgIFN0cmluZyBtZXNzYWdlID0g
bV9yZXBvcnRPbmx5ID8gIltSZXBvcnQgT25seV0gIiArIGNvbnNvbGVNZXNzYWdlIDogY29uc29s
ZU1lc3NhZ2U7CisgICAgbV9wb2xpY3kucmVwb3J0VmlvbGF0aW9uKGRpcmVjdGl2ZVRleHQsIGVm
ZmVjdGl2ZURpcmVjdGl2ZSwgbWVzc2FnZSwgYmxvY2tlZFVSTCwgbV9yZXBvcnRVUklzLCBtX2hl
YWRlciwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHN0YXRlKTsKK30KKworYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjaGVja0V2YWwoQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlKSBjb25zdAoreworICAgIHJldHVybiAh
ZGlyZWN0aXZlIHx8IGRpcmVjdGl2ZS0+YWxsb3dFdmFsKCk7Cit9CisKK2Jvb2wgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y2hlY2tJbmxpbmUoQ29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlKSBjb25zdAoreworICAgIHJldHVybiAh
ZGlyZWN0aXZlIHx8IGRpcmVjdGl2ZS0+YWxsb3dJbmxpbmUoKTsKK30KKworYm9vbCBDb250ZW50
U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjaGVja1NvdXJjZShDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlKiBkaXJlY3RpdmUsIGNvbnN0IFVSTCYgdXJsKSBjb25z
dAoreworICAgIHJldHVybiAhZGlyZWN0aXZlIHx8IGRpcmVjdGl2ZS0+YWxsb3dzKHVybCk7Cit9
CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y2hlY2tNZWRpYVR5
cGUoQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlKiBkaXJlY3RpdmUsIGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRlKSBjb25zdAorewor
ICAgIGlmICghZGlyZWN0aXZlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodHlwZUF0
dHJpYnV0ZS5pc0VtcHR5KCkgfHwgdHlwZUF0dHJpYnV0ZS5zdHJpcFdoaXRlU3BhY2UoKSAhPSB0
eXBlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRpcmVjdGl2ZS0+YWxsb3dz
KHR5cGUpOworfQorCitDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlKiBD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpvcGVyYXRpdmVEaXJlY3RpdmUoQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlKSBjb25zdAor
eworICAgIHJldHVybiBkaXJlY3RpdmUgPyBkaXJlY3RpdmUgOiBtX2RlZmF1bHRTcmMuZ2V0KCk7
Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y2hlY2tFdmFs
QW5kUmVwb3J0VmlvbGF0aW9uKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3Rp
dmUqIGRpcmVjdGl2ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5lLCBKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUpIGNvbnN0Cit7CisgICAgaWYgKGNoZWNrRXZhbChkaXJlY3RpdmUp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0cmluZyBzdWZmaXggPSBTdHJpbmcoKTsK
KyAgICBpZiAoZGlyZWN0aXZlID09IG1fZGVmYXVsdFNyYy5nZXQoKSkKKyAgICAgICAgc3VmZml4
ID0gIiBOb3RlIHRoYXQgJ3NjcmlwdC1zcmMnIHdhcyBub3QgZXhwbGljaXRseSBzZXQsIHNvICdk
ZWZhdWx0LXNyYycgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLiI7CisKKyAgICByZXBvcnRWaW9sYXRp
b24oZGlyZWN0aXZlLT50ZXh0KCksIHNjcmlwdFNyYywgY29uc29sZU1lc3NhZ2UgKyAiXCIiICsg
ZGlyZWN0aXZlLT50ZXh0KCkgKyAiXCIuIiArIHN1ZmZpeCArICJcbiIsIFVSTCgpLCBjb250ZXh0
VVJMLCBjb250ZXh0TGluZSwgc3RhdGUpOworICAgIGlmICghbV9yZXBvcnRPbmx5KSB7CisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydEJsb2NrZWRTY3JpcHRFeGVjdXRpb25Ub0luc3BlY3RvcihkaXJl
Y3RpdmUtPnRleHQoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6Y2hl
Y2tNZWRpYVR5cGVBbmRSZXBvcnRWaW9sYXRpb24oQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFM
aXN0RGlyZWN0aXZlKiBkaXJlY3RpdmUsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiB0eXBlQXR0cmlidXRlLCBjb25zdCBTdHJpbmcmIGNvbnNvbGVNZXNzYWdlKSBjb25zdAorewor
ICAgIGlmIChjaGVja01lZGlhVHlwZShkaXJlY3RpdmUsIHR5cGUsIHR5cGVBdHRyaWJ1dGUpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0cmluZyBtZXNzYWdlID0gbWFrZVN0cmluZyhj
b25zb2xlTWVzc2FnZSwgJ1wnJywgZGlyZWN0aXZlLT50ZXh0KCksICJcJy4iKTsKKyAgICBpZiAo
dHlwZUF0dHJpYnV0ZS5pc0VtcHR5KCkpCisgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlICsgIiBX
aGVuIGVuZm9yY2luZyB0aGUgJ3BsdWdpbi10eXBlcycgZGlyZWN0aXZlLCB0aGUgcGx1Z2luJ3Mg
bWVkaWEgdHlwZSBtdXN0IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQgd2l0aCBhICd0eXBlJyBhdHRy
aWJ1dGUgb24gdGhlIGNvbnRhaW5pbmcgZWxlbWVudCAoZS5nLiAnPG9iamVjdCB0eXBlPVwiW1RZ
UEUgR09FUyBIRVJFXVwiIC4uLj4nKS4iOworCisgICAgcmVwb3J0VmlvbGF0aW9uKGRpcmVjdGl2
ZS0+dGV4dCgpLCBwbHVnaW5UeXBlcywgbWVzc2FnZSArICJcbiIsIFVSTCgpKTsKKyAgICByZXR1
cm4gZGVueUlmRW5mb3JjaW5nUG9saWN5KCk7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9s
aWN5RGlyZWN0aXZlTGlzdDo6Y2hlY2tJbmxpbmVBbmRSZXBvcnRWaW9sYXRpb24oQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZSogZGlyZWN0aXZlLCBjb25zdCBTdHJpbmcm
IGNvbnNvbGVNZXNzYWdlLCBjb25zdCBTdHJpbmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3Jk
aW5hbE51bWJlciYgY29udGV4dExpbmUsIGJvb2wgaXNTY3JpcHQpIGNvbnN0Cit7CisgICAgaWYg
KGNoZWNrSW5saW5lKGRpcmVjdGl2ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgU3Ry
aW5nIHN1ZmZpeCA9IFN0cmluZygpOworICAgIGlmIChkaXJlY3RpdmUgPT0gbV9kZWZhdWx0U3Jj
LmdldCgpKQorICAgICAgICBzdWZmaXggPSBtYWtlU3RyaW5nKCIgTm90ZSB0aGF0ICciLCAoaXNT
Y3JpcHQgPyAic2NyaXB0IiA6ICJzdHlsZSIpLCAiLXNyYycgd2FzIG5vdCBleHBsaWNpdGx5IHNl
dCwgc28gJ2RlZmF1bHQtc3JjJyBpcyB1c2VkIGFzIGEgZmFsbGJhY2suIik7CisKKyAgICByZXBv
cnRWaW9sYXRpb24oZGlyZWN0aXZlLT50ZXh0KCksIGlzU2NyaXB0ID8gc2NyaXB0U3JjIDogc3R5
bGVTcmMsIGNvbnNvbGVNZXNzYWdlICsgIlwiIiArIGRpcmVjdGl2ZS0+dGV4dCgpICsgIlwiLiIg
KyBzdWZmaXggKyAiXG4iLCBVUkwoKSwgY29udGV4dFVSTCwgY29udGV4dExpbmUpOworCisgICAg
aWYgKCFtX3JlcG9ydE9ubHkpIHsKKyAgICAgICAgaWYgKGlzU2NyaXB0KQorICAgICAgICAgICAg
bV9wb2xpY3kucmVwb3J0QmxvY2tlZFNjcmlwdEV4ZWN1dGlvblRvSW5zcGVjdG9yKGRpcmVjdGl2
ZS0+dGV4dCgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjpjaGVja1Nv
dXJjZUFuZFJlcG9ydFZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGly
ZWN0aXZlKiBkaXJlY3RpdmUsIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2
ZURpcmVjdGl2ZSkgY29uc3QKK3sKKyAgICBpZiAoY2hlY2tTb3VyY2UoZGlyZWN0aXZlLCB1cmwp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNvbnN0IGNoYXIqIHByZWZpeDsKKyAgICBp
ZiAoYmFzZVVSSSA9PSBlZmZlY3RpdmVEaXJlY3RpdmUpCisgICAgICAgIHByZWZpeCA9ICJSZWZ1
c2VkIHRvIHNldCB0aGUgZG9jdW1lbnQncyBiYXNlIFVSSSB0byAnIjsKKyAgICBlbHNlIGlmIChj
b25uZWN0U3JjID09IGVmZmVjdGl2ZURpcmVjdGl2ZSkKKyAgICAgICAgcHJlZml4ID0gIlJlZnVz
ZWQgdG8gY29ubmVjdCB0byAnIjsKKyAgICBlbHNlIGlmIChmb250U3JjID09IGVmZmVjdGl2ZURp
cmVjdGl2ZSkKKyAgICAgICAgcHJlZml4ID0gIlJlZnVzZWQgdG8gbG9hZCB0aGUgZm9udCAnIjsK
KyAgICBlbHNlIGlmIChmb3JtQWN0aW9uID09IGVmZmVjdGl2ZURpcmVjdGl2ZSkKKyAgICAgICAg
cHJlZml4ID0gIlJlZnVzZWQgdG8gc2VuZCBmb3JtIGRhdGEgdG8gJyI7CisgICAgZWxzZSBpZiAo
ZnJhbWVTcmMgPT0gZWZmZWN0aXZlRGlyZWN0aXZlKQorICAgICAgICBwcmVmaXggPSAiUmVmdXNl
ZCB0byBsb2FkIGZyYW1lICciOworICAgIGVsc2UgaWYgKGltZ1NyYyA9PSBlZmZlY3RpdmVEaXJl
Y3RpdmUpCisgICAgICAgIHByZWZpeCA9ICJSZWZ1c2VkIHRvIGxvYWQgdGhlIGltYWdlICciOwor
ICAgIGVsc2UgaWYgKG1lZGlhU3JjID09IGVmZmVjdGl2ZURpcmVjdGl2ZSkKKyAgICAgICAgcHJl
Zml4ID0gIlJlZnVzZWQgdG8gbG9hZCBtZWRpYSBmcm9tICciOworICAgIGVsc2UgaWYgKG9iamVj
dFNyYyA9PSBlZmZlY3RpdmVEaXJlY3RpdmUpCisgICAgICAgIHByZWZpeCA9ICJSZWZ1c2VkIHRv
IGxvYWQgcGx1Z2luIGRhdGEgZnJvbSAnIjsKKyAgICBlbHNlIGlmIChzY3JpcHRTcmMgPT0gZWZm
ZWN0aXZlRGlyZWN0aXZlKQorICAgICAgICBwcmVmaXggPSAiUmVmdXNlZCB0byBsb2FkIHRoZSBz
Y3JpcHQgJyI7CisgICAgZWxzZSBpZiAoc3R5bGVTcmMgPT0gZWZmZWN0aXZlRGlyZWN0aXZlKQor
ICAgICAgICBwcmVmaXggPSAiUmVmdXNlZCB0byBsb2FkIHRoZSBzdHlsZXNoZWV0ICciOworICAg
IGVsc2UKKyAgICAgICAgcHJlZml4ID0gIiI7CisKKyAgICBTdHJpbmcgc3VmZml4OworICAgIGlm
IChkaXJlY3RpdmUgPT0gbV9kZWZhdWx0U3JjLmdldCgpKQorICAgICAgICBzdWZmaXggPSAiIE5v
dGUgdGhhdCAnIiArIGVmZmVjdGl2ZURpcmVjdGl2ZSArICInIHdhcyBub3QgZXhwbGljaXRseSBz
ZXQsIHNvICdkZWZhdWx0LXNyYycgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLiI7CisKKyAgICByZXBv
cnRWaW9sYXRpb24oZGlyZWN0aXZlLT50ZXh0KCksIGVmZmVjdGl2ZURpcmVjdGl2ZSwgbWFrZVN0
cmluZyhwcmVmaXgsIHVybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSwgIicgYmVj
YXVzZSBpdCB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGRp
cmVjdGl2ZTogXCIiLCBkaXJlY3RpdmUtPnRleHQoKSwgIlwiLiIsIHN1ZmZpeCwgJ1xuJyksIHVy
bCk7CisgICAgcmV0dXJuIGRlbnlJZkVuZm9yY2luZ1BvbGljeSgpOworfQorCitib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93SmF2YVNjcmlwdFVSTHMoY29uc3Qg
U3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGluYWxOdW1iZXImIGNvbnRleHRMaW5l
LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMp
IGNvbnN0Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3Nh
Z2UoQVNDSUlMaXRlcmFsKCJSZWZ1c2VkIHRvIGV4ZWN1dGUgSmF2YVNjcmlwdCBVUkwgYmVjYXVz
ZSBpdCB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGRpcmVj
dGl2ZTogIikpOworICAgIGlmIChyZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3VyaXR5UG9s
aWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpCisgICAgICAgIHJldHVybiBjaGVja0lu
bGluZUFuZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJlY3RpdmUobV9zY3JpcHRTcmMuZ2V0
KCkpLCBjb25zb2xlTWVzc2FnZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIHRydWUpOworICAg
IHJldHVybiBtX3JlcG9ydE9ubHkgfHwgY2hlY2tJbmxpbmUob3BlcmF0aXZlRGlyZWN0aXZlKG1f
c2NyaXB0U3JjLmdldCgpKSk7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0
aXZlTGlzdDo6YWxsb3dJbmxpbmVFdmVudEhhbmRsZXJzKGNvbnN0IFN0cmluZyYgY29udGV4dFVS
TCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5
UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKEFTQ0lJTGl0ZXJhbCgi
UmVmdXNlZCB0byBleGVjdXRlIGlubGluZSBldmVudCBoYW5kbGVyIGJlY2F1c2UgaXQgdmlvbGF0
ZXMgdGhlIGZvbGxvd2luZyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBkaXJlY3RpdmU6ICIpKTsK
KyAgICBpZiAocmVwb3J0aW5nU3RhdHVzID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0
aW5nU3RhdHVzOjpTZW5kUmVwb3J0KQorICAgICAgICByZXR1cm4gY2hlY2tJbmxpbmVBbmRSZXBv
cnRWaW9sYXRpb24ob3BlcmF0aXZlRGlyZWN0aXZlKG1fc2NyaXB0U3JjLmdldCgpKSwgY29uc29s
ZU1lc3NhZ2UsIGNvbnRleHRVUkwsIGNvbnRleHRMaW5lLCB0cnVlKTsKKyAgICByZXR1cm4gbV9y
ZXBvcnRPbmx5IHx8IGNoZWNrSW5saW5lKG9wZXJhdGl2ZURpcmVjdGl2ZShtX3NjcmlwdFNyYy5n
ZXQoKSkpOworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFs
bG93SW5saW5lU2NyaXB0KGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRp
bmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdT
dGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKEFTQ0lJTGl0ZXJhbCgiUmVmdXNlZCB0byBleGVjdXRl
IGlubGluZSBzY3JpcHQgYmVjYXVzZSBpdCB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIENvbnRlbnQg
U2VjdXJpdHkgUG9saWN5IGRpcmVjdGl2ZTogIikpOworICAgIGlmIChyZXBvcnRpbmdTdGF0dXMg
PT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpCisg
ICAgICAgIHJldHVybiBjaGVja0lubGluZUFuZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJl
Y3RpdmUobV9zY3JpcHRTcmMuZ2V0KCkpLCBjb25zb2xlTWVzc2FnZSwgY29udGV4dFVSTCwgY29u
dGV4dExpbmUsIHRydWUpOworICAgIHJldHVybiBtX3JlcG9ydE9ubHkgfHwgY2hlY2tJbmxpbmUo
b3BlcmF0aXZlRGlyZWN0aXZlKG1fc2NyaXB0U3JjLmdldCgpKSk7Cit9CisKK2Jvb2wgQ29udGVu
dFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dJbmxpbmVTdHlsZShjb25zdCBTdHJp
bmcmIGNvbnRleHRVUkwsIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExpbmUsIENv
bnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29u
c3QKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShB
U0NJSUxpdGVyYWwoIlJlZnVzZWQgdG8gYXBwbHkgaW5saW5lIHN0eWxlIGJlY2F1c2UgaXQgdmlv
bGF0ZXMgdGhlIGZvbGxvd2luZyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBkaXJlY3RpdmU6ICIp
KTsKKyAgICBpZiAocmVwb3J0aW5nU3RhdHVzID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVw
b3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KQorICAgICAgICByZXR1cm4gY2hlY2tJbmxpbmVBbmRS
ZXBvcnRWaW9sYXRpb24ob3BlcmF0aXZlRGlyZWN0aXZlKG1fc3R5bGVTcmMuZ2V0KCkpLCBjb25z
b2xlTWVzc2FnZSwgY29udGV4dFVSTCwgY29udGV4dExpbmUsIGZhbHNlKTsKKyAgICByZXR1cm4g
bV9yZXBvcnRPbmx5IHx8IGNoZWNrSW5saW5lKG9wZXJhdGl2ZURpcmVjdGl2ZShtX3N0eWxlU3Jj
LmdldCgpKSk7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6
YWxsb3dFdmFsKEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpS
ZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKEFTQ0lJTGl0ZXJhbCgiUmVmdXNlZCB0
byBldmFsdWF0ZSBzY3JpcHQgYmVjYXVzZSBpdCB2aW9sYXRlcyB0aGUgZm9sbG93aW5nIENvbnRl
bnQgU2VjdXJpdHkgUG9saWN5IGRpcmVjdGl2ZTogIikpOworICAgIGlmIChyZXBvcnRpbmdTdGF0
dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQp
CisgICAgICAgIHJldHVybiBjaGVja0V2YWxBbmRSZXBvcnRWaW9sYXRpb24ob3BlcmF0aXZlRGly
ZWN0aXZlKG1fc2NyaXB0U3JjLmdldCgpKSwgY29uc29sZU1lc3NhZ2UsIFN0cmluZygpLCBXVEY6
Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIHN0YXRlKTsKKyAgICByZXR1cm4gbV9yZXBv
cnRPbmx5IHx8IGNoZWNrRXZhbChvcGVyYXRpdmVEaXJlY3RpdmUobV9zY3JpcHRTcmMuZ2V0KCkp
KTsKK30KKworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd1Bs
dWdpblR5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHR5cGVBdHRyaWJ1dGUs
IGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyBy
ZXBvcnRpbmdTdGF0dXMpIGNvbnN0Cit7CisgICAgaWYgKHJlcG9ydGluZ1N0YXR1cyA9PSBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkKKyAgICAgICAg
cmV0dXJuIGNoZWNrTWVkaWFUeXBlQW5kUmVwb3J0VmlvbGF0aW9uKG1fcGx1Z2luVHlwZXMuZ2V0
KCksIHR5cGUsIHR5cGVBdHRyaWJ1dGUsICJSZWZ1c2VkIHRvIGxvYWQgJyIgKyB1cmwuc3RyaW5n
Q2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkgKyAiJyAoTUlNRSB0eXBlICciICsgdHlwZUF0dHJp
YnV0ZSArICInKSBiZWNhdXNlIGl0IHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgQ29udGVudCBTZWN1
cml0eSBQb2xpY3kgRGlyZWN0aXZlOiAiKTsKKyAgICByZXR1cm4gbV9yZXBvcnRPbmx5IHx8IGNo
ZWNrTWVkaWFUeXBlKG1fcGx1Z2luVHlwZXMuZ2V0KCksIHR5cGUsIHR5cGVBdHRyaWJ1dGUpOwor
fQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93U2NyaXB0
RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRp
bmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAoreworICAgIGlmIChyZXBvcnRpbmdTdGF0
dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQp
CisgICAgICAgIHJldHVybiBjaGVja1NvdXJjZUFuZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVE
aXJlY3RpdmUobV9zY3JpcHRTcmMuZ2V0KCkpLCB1cmwsIHNjcmlwdFNyYyk7CisgICAgcmV0dXJu
IG1fcmVwb3J0T25seSB8fCBjaGVja1NvdXJjZShvcGVyYXRpdmVEaXJlY3RpdmUobV9zY3JpcHRT
cmMuZ2V0KCkpLCB1cmwpOworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q6OmFsbG93T2JqZWN0RnJvbVNvdXJjZShjb25zdCBVUkwmIHVybCwgQ29udGVudFNlY3Vy
aXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25zdAoreworICAg
IGlmICh1cmwuaXNCbGFua1VSTCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmVw
b3J0aW5nU3RhdHVzID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpT
ZW5kUmVwb3J0KQorICAgICAgICByZXR1cm4gY2hlY2tTb3VyY2VBbmRSZXBvcnRWaW9sYXRpb24o
b3BlcmF0aXZlRGlyZWN0aXZlKG1fb2JqZWN0U3JjLmdldCgpKSwgdXJsLCBvYmplY3RTcmMpOwor
ICAgIHJldHVybiBtX3JlcG9ydE9ubHkgfHwgY2hlY2tTb3VyY2Uob3BlcmF0aXZlRGlyZWN0aXZl
KG1fb2JqZWN0U3JjLmdldCgpKSwgdXJsKTsKK30KKworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVMaXN0OjphbGxvd0NoaWxkRnJhbWVGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJs
LCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMp
IGNvbnN0Cit7CisgICAgaWYgKHVybC5pc0JsYW5rVVJMKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmIChyZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBv
cnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpCisgICAgICAgIHJldHVybiBjaGVja1NvdXJjZUFuZFJl
cG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJlY3RpdmUobV9mcmFtZVNyYy5nZXQoKSksIHVybCwg
ZnJhbWVTcmMpOworICAgIHJldHVybiBtX3JlcG9ydE9ubHkgfHwgY2hlY2tTb3VyY2Uob3BlcmF0
aXZlRGlyZWN0aXZlKG1fZnJhbWVTcmMuZ2V0KCkpLCB1cmwpOworfQorCitib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93SW1hZ2VGcm9tU291cmNlKGNvbnN0IFVS
TCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdT
dGF0dXMpIGNvbnN0Cit7CisgICAgaWYgKHJlcG9ydGluZ1N0YXR1cyA9PSBDb250ZW50U2VjdXJp
dHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9ydCkKKyAgICAgICAgcmV0dXJuIGNo
ZWNrU291cmNlQW5kUmVwb3J0VmlvbGF0aW9uKG9wZXJhdGl2ZURpcmVjdGl2ZShtX2ltZ1NyYy5n
ZXQoKSksIHVybCwgaW1nU3JjKTsKKyAgICByZXR1cm4gbV9yZXBvcnRPbmx5IHx8IGNoZWNrU291
cmNlKG9wZXJhdGl2ZURpcmVjdGl2ZShtX2ltZ1NyYy5nZXQoKSksIHVybCk7Cit9CisKK2Jvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6YWxsb3dTdHlsZUZyb21Tb3VyY2Uo
Y29uc3QgVVJMJiB1cmwsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzIHJl
cG9ydGluZ1N0YXR1cykgY29uc3QKK3sKKyAgICBpZiAocmVwb3J0aW5nU3RhdHVzID09IENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzOjpTZW5kUmVwb3J0KQorICAgICAgICBy
ZXR1cm4gY2hlY2tTb3VyY2VBbmRSZXBvcnRWaW9sYXRpb24ob3BlcmF0aXZlRGlyZWN0aXZlKG1f
c3R5bGVTcmMuZ2V0KCkpLCB1cmwsIHN0eWxlU3JjKTsKKyAgICByZXR1cm4gbV9yZXBvcnRPbmx5
IHx8IGNoZWNrU291cmNlKG9wZXJhdGl2ZURpcmVjdGl2ZShtX3N0eWxlU3JjLmdldCgpKSwgdXJs
KTsKK30KKworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphbGxvd0Zv
bnRGcm9tU291cmNlKGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9y
dGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0Cit7CisgICAgaWYgKHJlcG9ydGluZ1N0
YXR1cyA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1czo6U2VuZFJlcG9y
dCkKKyAgICAgICAgcmV0dXJuIGNoZWNrU291cmNlQW5kUmVwb3J0VmlvbGF0aW9uKG9wZXJhdGl2
ZURpcmVjdGl2ZShtX2ZvbnRTcmMuZ2V0KCkpLCB1cmwsIGZvbnRTcmMpOworICAgIHJldHVybiBt
X3JlcG9ydE9ubHkgfHwgY2hlY2tTb3VyY2Uob3BlcmF0aXZlRGlyZWN0aXZlKG1fZm9udFNyYy5n
ZXQoKSksIHVybCk7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6YWxsb3dNZWRpYUZyb21Tb3VyY2UoY29uc3QgVVJMJiB1cmwsIENvbnRlbnRTZWN1cml0eVBv
bGljeTo6UmVwb3J0aW5nU3RhdHVzIHJlcG9ydGluZ1N0YXR1cykgY29uc3QKK3sKKyAgICBpZiAo
cmVwb3J0aW5nU3RhdHVzID09IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVz
OjpTZW5kUmVwb3J0KQorICAgICAgICByZXR1cm4gY2hlY2tTb3VyY2VBbmRSZXBvcnRWaW9sYXRp
b24ob3BlcmF0aXZlRGlyZWN0aXZlKG1fbWVkaWFTcmMuZ2V0KCkpLCB1cmwsIG1lZGlhU3JjKTsK
KyAgICByZXR1cm4gbV9yZXBvcnRPbmx5IHx8IGNoZWNrU291cmNlKG9wZXJhdGl2ZURpcmVjdGl2
ZShtX21lZGlhU3JjLmdldCgpKSwgdXJsKTsKK30KKworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmVMaXN0OjphbGxvd0Nvbm5lY3RUb1NvdXJjZShjb25zdCBVUkwmIHVybCwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0aW5nU3RhdHVzKSBjb25z
dAoreworICAgIGlmIChyZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpS
ZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpCisgICAgICAgIHJldHVybiBjaGVja1NvdXJjZUFu
ZFJlcG9ydFZpb2xhdGlvbihvcGVyYXRpdmVEaXJlY3RpdmUobV9jb25uZWN0U3JjLmdldCgpKSwg
dXJsLCBjb25uZWN0U3JjKTsKKyAgICByZXR1cm4gbV9yZXBvcnRPbmx5IHx8IGNoZWNrU291cmNl
KG9wZXJhdGl2ZURpcmVjdGl2ZShtX2Nvbm5lY3RTcmMuZ2V0KCkpLCB1cmwpOworfQorCitib29s
IENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OmFsbG93Rm9ybUFjdGlvbihjb25z
dCBVUkwmIHVybCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMgcmVwb3J0
aW5nU3RhdHVzKSBjb25zdAoreworICAgIGlmIChyZXBvcnRpbmdTdGF0dXMgPT0gQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXM6OlNlbmRSZXBvcnQpCisgICAgICAgIHJldHVy
biBjaGVja1NvdXJjZUFuZFJlcG9ydFZpb2xhdGlvbihtX2Zvcm1BY3Rpb24uZ2V0KCksIHVybCwg
Zm9ybUFjdGlvbik7CisgICAgcmV0dXJuIG1fcmVwb3J0T25seSB8fCBjaGVja1NvdXJjZShtX2Zv
cm1BY3Rpb24uZ2V0KCksIHVybCk7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdDo6YWxsb3dCYXNlVVJJKGNvbnN0IFVSTCYgdXJsLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlJlcG9ydGluZ1N0YXR1cyByZXBvcnRpbmdTdGF0dXMpIGNvbnN0Cit7CisgICAgaWYg
KHJlcG9ydGluZ1N0YXR1cyA9PSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1
czo6U2VuZFJlcG9ydCkKKyAgICAgICAgcmV0dXJuIGNoZWNrU291cmNlQW5kUmVwb3J0VmlvbGF0
aW9uKG1fYmFzZVVSSS5nZXQoKSwgdXJsLCBiYXNlVVJJKTsKKyAgICByZXR1cm4gbV9yZXBvcnRP
bmx5IHx8IGNoZWNrU291cmNlKG1fYmFzZVVSSS5nZXQoKSwgdXJsKTsKK30KKworLy8gcG9saWN5
ICAgICAgICAgICAgPSBkaXJlY3RpdmUtbGlzdAorLy8gZGlyZWN0aXZlLWxpc3QgICAgPSBbIGRp
cmVjdGl2ZSAqKCAiOyIgWyBkaXJlY3RpdmUgXSApIF0KKy8vCit2b2lkIENvbnRlbnRTZWN1cml0
eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlKGNvbnN0IFN0cmluZyYgcG9saWN5KQoreworICAg
IG1faGVhZGVyID0gcG9saWN5OworICAgIGlmIChwb2xpY3kuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHBvbGljeSkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gY2hhcmFjdGVy
czsKKyAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyBwb2xpY3kubGVuZ3RoKCk7CisK
KyAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKKyAgICAgICAgY29uc3QgVUNoYXIqIGRpcmVj
dGl2ZUJlZ2luID0gcG9zaXRpb247CisgICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRpb24s
IGVuZCwgJzsnKTsKKworICAgICAgICBTdHJpbmcgbmFtZSwgdmFsdWU7CisgICAgICAgIGlmIChw
YXJzZURpcmVjdGl2ZShkaXJlY3RpdmVCZWdpbiwgcG9zaXRpb24sIG5hbWUsIHZhbHVlKSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFuYW1lLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBhZGREaXJl
Y3RpdmUobmFtZSwgdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKHBvc2l0aW9u
ID09IGVuZCB8fCAqcG9zaXRpb24gPT0gJzsnKTsKKyAgICAgICAgc2tpcEV4YWN0bHk8VUNoYXI+
KHBvc2l0aW9uLCBlbmQsICc7Jyk7CisgICAgfQorfQorCisvLyBkaXJlY3RpdmUgICAgICAgICA9
ICpXU1AgWyBkaXJlY3RpdmUtbmFtZSBbIFdTUCBkaXJlY3RpdmUtdmFsdWUgXSBdCisvLyBkaXJl
Y3RpdmUtbmFtZSAgICA9IDEqKCBBTFBIQSAvIERJR0lUIC8gIi0iICkKKy8vIGRpcmVjdGl2ZS12
YWx1ZSAgID0gKiggV1NQIC8gPFZDSEFSIGV4Y2VwdCAiOyI+ICkKKy8vCitib29sIENvbnRlbnRT
ZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKQorewor
ICAgIEFTU0VSVChuYW1lLmlzRW1wdHkoKSk7CisgICAgQVNTRVJUKHZhbHVlLmlzRW1wdHkoKSk7
CisKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBza2lwV2hpbGU8VUNo
YXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisKKyAgICAvLyBFbXB0eSBkaXJlY3Rp
dmUgKGUuZy4gIjs7OyIpLiBFeGl0IGVhcmx5LgorICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IFVDaGFyKiBuYW1lQmVnaW4gPSBwb3Np
dGlvbjsKKyAgICBza2lwV2hpbGU8VUNoYXIsIGlzRGlyZWN0aXZlTmFtZUNoYXJhY3Rlcj4ocG9z
aXRpb24sIGVuZCk7CisKKyAgICAvLyBUaGUgZGlyZWN0aXZlLW5hbWUgbXVzdCBiZSBub24tZW1w
dHkuCisgICAgaWYgKG5hbWVCZWdpbiA9PSBwb3NpdGlvbikgeworICAgICAgICBza2lwV2hpbGU8
VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgIG1fcG9saWN5
LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKFN0cmluZyhuYW1lQmVnaW4sIHBvc2l0aW9uIC0g
bmFtZUJlZ2luKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBuYW1lID0g
U3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRpb24gLSBuYW1lQmVnaW4pOworCisgICAgaWYgKHBvc2l0
aW9uID09IGVuZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIXNraXBFeGFjdGx5
PFVDaGFyLCBpc0FTQ0lJU3BhY2U+KHBvc2l0aW9uLCBlbmQpKSB7CisgICAgICAgIHNraXBXaGls
ZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgbV9wb2xp
Y3kucmVwb3J0VW5zdXBwb3J0ZWREaXJlY3RpdmUoU3RyaW5nKG5hbWVCZWdpbiwgcG9zaXRpb24g
LSBuYW1lQmVnaW4pKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNraXBX
aGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKworICAgIGNvbnN0IFVD
aGFyKiB2YWx1ZUJlZ2luID0gcG9zaXRpb247CisgICAgc2tpcFdoaWxlPFVDaGFyLCBpc0RpcmVj
dGl2ZVZhbHVlQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKworICAgIGlmIChwb3NpdGlvbiAh
PSBlbmQpIHsKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZERpcmVjdGl2ZVZhbHVlQ2hh
cmFjdGVyKG5hbWUsIFN0cmluZyh2YWx1ZUJlZ2luLCBlbmQgLSB2YWx1ZUJlZ2luKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgZGlyZWN0aXZlLXZhbHVlIG1h
eSBiZSBlbXB0eS4KKyAgICBpZiAodmFsdWVCZWdpbiA9PSBwb3NpdGlvbikKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZUJlZ2luLCBwb3NpdGlvbiAtIHZh
bHVlQmVnaW4pOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIENvbnRlbnRTZWN1cml0eVBv
bGljeURpcmVjdGl2ZUxpc3Q6OnBhcnNlUmVwb3J0VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoIW1fcmVwb3J0VVJJcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyh2YWx1
ZSkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0g
Y2hhcmFjdGVyczsKKyAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyB2YWx1ZS5sZW5n
dGgoKTsKKworICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgeworICAgICAgICBza2lwV2hpbGU8
VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisKKyAgICAgICAgY29uc3QgVUNo
YXIqIHVybEJlZ2luID0gcG9zaXRpb247CisgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RB
U0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKworICAgICAgICBpZiAodXJsQmVnaW4gPCBwb3Np
dGlvbikKKyAgICAgICAgICAgIG1fcmVwb3J0VVJJcy5hcHBlbmQodmFsdWUuc3Vic3RyaW5nKHVy
bEJlZ2luIC0gY2hhcmFjdGVycywgcG9zaXRpb24gLSB1cmxCZWdpbikpOworICAgIH0KK30KKwor
Cit0ZW1wbGF0ZTxjbGFzcyBDU1BEaXJlY3RpdmVUeXBlPgordm9pZCBDb250ZW50U2VjdXJpdHlQ
b2xpY3lEaXJlY3RpdmVMaXN0OjpzZXRDU1BEaXJlY3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQRGlyZWN0aXZlVHlwZT4mIGRp
cmVjdGl2ZSkKK3sKKyAgICBpZiAoZGlyZWN0aXZlKSB7CisgICAgICAgIG1fcG9saWN5LnJlcG9y
dER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBk
aXJlY3RpdmUgPSBzdGQ6Om1ha2VfdW5pcXVlPENTUERpcmVjdGl2ZVR5cGU+KG5hbWUsIHZhbHVl
LCBtX3BvbGljeSk7Cit9CisKK3ZvaWQgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlz
dDo6YXBwbHlTYW5kYm94UG9saWN5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
YW5kYm94UG9saWN5KQoreworICAgIGlmIChtX2hhdmVTYW5kYm94UG9saWN5KSB7CisgICAgICAg
IG1fcG9saWN5LnJlcG9ydER1cGxpY2F0ZURpcmVjdGl2ZShuYW1lKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX2hhdmVTYW5kYm94UG9saWN5ID0gdHJ1ZTsKKyAgICBTdHJpbmcgaW52
YWxpZFRva2VuczsKKyAgICBtX3BvbGljeS5lbmZvcmNlU2FuZGJveEZsYWdzKFNlY3VyaXR5Q29u
dGV4dDo6cGFyc2VTYW5kYm94UG9saWN5KHNhbmRib3hQb2xpY3ksIGludmFsaWRUb2tlbnMpKTsK
KyAgICBpZiAoIWludmFsaWRUb2tlbnMuaXNOdWxsKCkpCisgICAgICAgIG1fcG9saWN5LnJlcG9y
dEludmFsaWRTYW5kYm94RmxhZ3MoaW52YWxpZFRva2Vucyk7Cit9CisKK3ZvaWQgQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdDo6cGFyc2VSZWZsZWN0ZWRYU1MoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIGlmIChtX3JlZmxlY3RlZFhTU0Rp
c3Bvc2l0aW9uICE9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTVW5zZXQpIHsK
KyAgICAgICAgbV9wb2xpY3kucmVwb3J0RHVwbGljYXRlRGlyZWN0aXZlKG5hbWUpOworICAgICAg
ICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZs
ZWN0ZWRYU1NJbnZhbGlkOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHZhbHVl
LmlzRW1wdHkoKSkgeworICAgICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uID0gQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NJbnZhbGlkOworICAgICAgICBtX3BvbGljeS5y
ZXBvcnRJbnZhbGlkUmVmbGVjdGVkWFNTKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hh
cmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGNoYXJhY3RlcnM7CisgICAg
Y29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgdmFsdWUubGVuZ3RoKCk7CisKKyAgICBza2lw
V2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgY29uc3QgVUNo
YXIqIGJlZ2luID0gcG9zaXRpb247CisgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdEFTQ0lJU3Bh
Y2U+KHBvc2l0aW9uLCBlbmQpOworCisgICAgLy8gdmFsdWUxCisgICAgLy8gICAgICAgXgorICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShiZWdpbiwgcG9zaXRpb24gLSBiZWdp
biwgImFsbG93IikpCisgICAgICAgIG1fcmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gPSBDb250ZW50
U2VjdXJpdHlQb2xpY3k6OkFsbG93UmVmbGVjdGVkWFNTOworICAgIGVsc2UgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luLCAiZmlsdGVyIikp
CisgICAgICAgIG1fcmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gPSBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OkZpbHRlclJlZmxlY3RlZFhTUzsKKyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiwgImJsb2NrIikpCisgICAgICAgIG1f
cmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gPSBDb250ZW50U2VjdXJpdHlQb2xpY3k6OkJsb2NrUmVm
bGVjdGVkWFNTOworICAgIGVsc2UgeworICAgICAgICBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9u
ID0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NJbnZhbGlkOworICAgICAgICBt
X3BvbGljeS5yZXBvcnRJbnZhbGlkUmVmbGVjdGVkWFNTKHZhbHVlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHNraXBXaGlsZTxVQ2hhciwgaXNBU0NJSVNwYWNlPihwb3NpdGlvbiwg
ZW5kKTsKKyAgICBpZiAocG9zaXRpb24gPT0gZW5kICYmIG1fcmVmbGVjdGVkWFNTRGlzcG9zaXRp
b24gIT0gQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZWZsZWN0ZWRYU1NVbnNldCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gdmFsdWUxIHZhbHVlMgorICAgIC8vICAgICAgICBeCisgICAgbV9y
ZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbiA9IENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVk
WFNTSW52YWxpZDsKKyAgICBtX3BvbGljeS5yZXBvcnRJbnZhbGlkUmVmbGVjdGVkWFNTKHZhbHVl
KTsKK30KKwordm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0OjphZGREaXJl
Y3RpdmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIEFT
U0VSVCghbmFtZS5pc0VtcHR5KCkpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKG5hbWUsIGRlZmF1bHRTcmMpKQorICAgICAgICBzZXRDU1BEaXJlY3RpdmU8Q29udGVu
dFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1fZGVmYXVs
dFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwg
c2NyaXB0U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3NjcmlwdFNyYyk7CisgICAgZWxz
ZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgb2JqZWN0U3JjKSkKKyAg
ICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+KG5hbWUsIHZhbHVlLCBtX29iamVjdFNyYyk7CisgICAgZWxzZSBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobmFtZSwgZnJhbWVTcmMpKQorICAgICAgICBzZXRDU1BEaXJl
Y3RpdmU8Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFs
dWUsIG1fZnJhbWVTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG5hbWUsIGltZ1NyYykpCisgICAgICAgIHNldENTUERpcmVjdGl2ZTxDb250ZW50U2VjdXJp
dHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1ZSwgbV9pbWdTcmMpOworICAg
IGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIHN0eWxlU3JjKSkK
KyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX3N0eWxlU3JjKTsKKyAgICBlbHNlIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBmb250U3JjKSkKKyAgICAgICAgc2V0Q1NQRGly
ZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZh
bHVlLCBtX2ZvbnRTcmMpOworICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG5hbWUsIG1lZGlhU3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX21lZGlhU3JjKTsK
KyAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShuYW1lLCBjb25uZWN0
U3JjKSkKKyAgICAgICAgc2V0Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmU+KG5hbWUsIHZhbHVlLCBtX2Nvbm5lY3RTcmMpOworICAgIGVsc2UgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIHNhbmRib3gpKQorICAgICAgICBh
cHBseVNhbmRib3hQb2xpY3kobmFtZSwgdmFsdWUpOworICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIHJlcG9ydFVSSSkpCisgICAgICAgIHBhcnNlUmVwb3J0
VVJJKG5hbWUsIHZhbHVlKTsKKyNpZiBFTkFCTEUoQ1NQX05FWFQpCisgICAgZWxzZSBpZiAobV9w
b2xpY3kuZXhwZXJpbWVudGFsRmVhdHVyZXNFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG5hbWUsIGJhc2VVUkkpKQorICAgICAgICAgICAgc2V0
Q1NQRGlyZWN0aXZlPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+KG5h
bWUsIHZhbHVlLCBtX2Jhc2VVUkkpOworICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShuYW1lLCBmb3JtQWN0aW9uKSkKKyAgICAgICAgICAgIHNldENTUERpcmVj
dGl2ZTxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPihuYW1lLCB2YWx1
ZSwgbV9mb3JtQWN0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UobmFtZSwgcGx1Z2luVHlwZXMpKQorICAgICAgICAgICAgc2V0Q1NQRGlyZWN0aXZl
PENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZT4obmFtZSwgdmFsdWUsIG1f
cGx1Z2luVHlwZXMpOworICAgICAgICBlbHNlIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShuYW1lLCByZWZsZWN0ZWRYU1MpKQorICAgICAgICAgICAgcGFyc2VSZWZsZWN0ZWRYU1Mo
bmFtZSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnRV
bnN1cHBvcnRlZERpcmVjdGl2ZShuYW1lKTsKKyAgICB9CisjZW5kaWYKKyAgICBlbHNlCisgICAg
ICAgIG1fcG9saWN5LnJlcG9ydFVuc3VwcG9ydGVkRGlyZWN0aXZlKG5hbWUpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjVi
MjAyODhmYmEwZTBiNDNkNTM0Y2E2ZjBhN2EyZThiMzczNTgxYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxp
c3QuaApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBHT09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZUxpc3Rf
aAorI2RlZmluZSBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0X2gKKworI2luY2x1
ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBv
bGljeU1lZGlhTGlzdERpcmVjdGl2ZS5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZUxpc3REaXJlY3RpdmUuaCIKKyNpbmNsdWRlICJVUkwuaCIKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIGlzQ1NQRGlyZWN0
aXZlTmFtZShjb25zdCBTdHJpbmcmKTsKKworY2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5RGly
ZWN0aXZlTGlzdCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdCkKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2
ZUxpc3Q+IGNyZWF0ZShDb250ZW50U2VjdXJpdHlQb2xpY3kmLCBjb25zdCBTdHJpbmcmLCBDb250
ZW50U2VjdXJpdHlQb2xpY3lIZWFkZXJUeXBlKTsKKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lE
aXJlY3RpdmVMaXN0KENvbnRlbnRTZWN1cml0eVBvbGljeSYsIENvbnRlbnRTZWN1cml0eVBvbGlj
eUhlYWRlclR5cGUpOworCisgICAgY29uc3QgU3RyaW5nJiBoZWFkZXIoKSBjb25zdCB7IHJldHVy
biBtX2hlYWRlcjsgfQorICAgIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUgaGVhZGVy
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faGVhZGVyVHlwZTsgfQorCisgICAgYm9vbCBhbGxvd0ph
dmFTY3JpcHRVUkxzKGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFs
TnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0
dXMpIGNvbnN0OworICAgIGJvb2wgYWxsb3dJbmxpbmVFdmVudEhhbmRsZXJzKGNvbnN0IFN0cmlu
ZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29u
dGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OworICAgIGJvb2wgYWxs
b3dJbmxpbmVTY3JpcHQoY29uc3QgU3RyaW5nJiBjb250ZXh0VVJMLCBjb25zdCBXVEY6Ok9yZGlu
YWxOdW1iZXImIGNvbnRleHRMaW5lLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0
YXR1cykgY29uc3Q7CisgICAgYm9vbCBhbGxvd0lubGluZVN0eWxlKGNvbnN0IFN0cmluZyYgY29u
dGV4dFVSTCwgY29uc3QgV1RGOjpPcmRpbmFsTnVtYmVyJiBjb250ZXh0TGluZSwgQ29udGVudFNl
Y3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OworICAgIGJvb2wgYWxsb3dFdmFs
KEpTQzo6RXhlY1N0YXRlKiwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMp
IGNvbnN0OworICAgIGJvb2wgYWxsb3dQbHVnaW5UeXBlKGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgU3RyaW5nJiB0eXBlQXR0cmlidXRlLCBjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xp
Y3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CisKKyAgICBib29sIGFsbG93U2NyaXB0RnJvbVNv
dXJjZShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykg
Y29uc3Q7CisgICAgYm9vbCBhbGxvd09iamVjdEZyb21Tb3VyY2UoY29uc3QgVVJMJiwgQ29udGVu
dFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0dXMpIGNvbnN0OworICAgIGJvb2wgYWxsb3dD
aGlsZEZyYW1lRnJvbVNvdXJjZShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJl
cG9ydGluZ1N0YXR1cykgY29uc3Q7CisgICAgYm9vbCBhbGxvd0ltYWdlRnJvbVNvdXJjZShjb25z
dCBVUkwmLCBDb250ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7Cisg
ICAgYm9vbCBhbGxvd1N0eWxlRnJvbVNvdXJjZShjb25zdCBVUkwmLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CisgICAgYm9vbCBhbGxvd0ZvbnRGcm9tU291
cmNlKGNvbnN0IFVSTCYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBj
b25zdDsKKyAgICBib29sIGFsbG93TWVkaWFGcm9tU291cmNlKGNvbnN0IFVSTCYsIENvbnRlbnRT
ZWN1cml0eVBvbGljeTo6UmVwb3J0aW5nU3RhdHVzKSBjb25zdDsKKyAgICBib29sIGFsbG93Q29u
bmVjdFRvU291cmNlKGNvbnN0IFVSTCYsIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVwb3J0aW5n
U3RhdHVzKSBjb25zdDsKKyAgICBib29sIGFsbG93Rm9ybUFjdGlvbihjb25zdCBVUkwmLCBDb250
ZW50U2VjdXJpdHlQb2xpY3k6OlJlcG9ydGluZ1N0YXR1cykgY29uc3Q7CisgICAgYm9vbCBhbGxv
d0Jhc2VVUkkoY29uc3QgVVJMJiwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpSZXBvcnRpbmdTdGF0
dXMpIGNvbnN0OworCisgICAgY29uc3QgU3RyaW5nJiBldmFsRGlzYWJsZWRFcnJvck1lc3NhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2V2YWxEaXNhYmxlZEVycm9yTWVzc2FnZTsgfQorICAgIENvbnRl
bnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTRGlzcG9zaXRpb24gcmVmbGVjdGVkWFNTRGlz
cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZmxlY3RlZFhTU0Rpc3Bvc2l0aW9uOyB9Cisg
ICAgYm9vbCBpc1JlcG9ydE9ubHkoKSBjb25zdCB7IHJldHVybiBtX3JlcG9ydE9ubHk7IH0KKyAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcmVwb3J0VVJJcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
b3J0VVJJczsgfQorCitwcml2YXRlOgorICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJik7CisK
KyAgICBib29sIHBhcnNlRGlyZWN0aXZlKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIq
IGVuZCwgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHBhcnNlUmVwb3J0
VVJJKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBw
YXJzZVBsdWdpblR5cGVzKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CisgICAgdm9pZCBwYXJzZVJlZmxlY3RlZFhTUyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmFsdWUpOworICAgIHZvaWQgYWRkRGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgdm9pZCBhcHBseVNhbmRib3hQb2xpY3koY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHNhbmRib3hQb2xpY3kpOworCisgICAgdGVtcGxh
dGUgPGNsYXNzIENTUERpcmVjdGl2ZVR5cGU+CisgICAgdm9pZCBzZXRDU1BEaXJlY3RpdmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBzdGQ6OnVuaXF1ZV9wdHI8Q1NQ
RGlyZWN0aXZlVHlwZT4mKTsKKworICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3RE
aXJlY3RpdmUqIG9wZXJhdGl2ZURpcmVjdGl2ZShDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlKikgY29uc3Q7CisgICAgdm9pZCByZXBvcnRWaW9sYXRpb24oY29uc3QgU3Ry
aW5nJiBkaXJlY3RpdmVUZXh0LCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVjdGl2ZSwgY29u
c3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgVVJMJiBibG9ja2VkVVJMID0gVVJMKCks
IGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCA9IFN0cmluZygpLCBjb25zdCBXVEY6Ok9yZGluYWxO
dW1iZXImIGNvbnRleHRMaW5lID0gV1RGOjpPcmRpbmFsTnVtYmVyOjpiZWZvcmVGaXJzdCgpLCBK
U0M6OkV4ZWNTdGF0ZSogPSBudWxscHRyKSBjb25zdDsKKworICAgIGJvb2wgY2hlY2tFdmFsKENv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUqKSBjb25zdDsKKyAgICBib29s
IGNoZWNrSW5saW5lKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmUqKSBj
b25zdDsKKyAgICBib29sIGNoZWNrU291cmNlKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxp
c3REaXJlY3RpdmUqLCBjb25zdCBVUkwmKSBjb25zdDsKKyAgICBib29sIGNoZWNrTWVkaWFUeXBl
KENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZSosIGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiB0eXBlQXR0cmlidXRlKSBjb25zdDsKKworICAgIHZvaWQgc2V0
RXZhbERpc2FibGVkRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7IG1f
ZXZhbERpc2FibGVkRXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlOyB9CisKKyAgICBib29sIGNo
ZWNrRXZhbEFuZFJlcG9ydFZpb2xhdGlvbihDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
RGlyZWN0aXZlKiwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVzc2FnZSwgY29uc3QgU3RyaW5nJiBj
b250ZXh0VVJMID0gU3RyaW5nKCksIGNvbnN0IFdURjo6T3JkaW5hbE51bWJlciYgY29udGV4dExp
bmUgPSBXVEY6Ok9yZGluYWxOdW1iZXI6OmJlZm9yZUZpcnN0KCksIEpTQzo6RXhlY1N0YXRlKiA9
IG51bGxwdHIpIGNvbnN0OworICAgIGJvb2wgY2hlY2tJbmxpbmVBbmRSZXBvcnRWaW9sYXRpb24o
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZSosIGNvbnN0IFN0cmluZyYg
Y29uc29sZU1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgY29udGV4dFVSTCwgY29uc3QgV1RGOjpPcmRp
bmFsTnVtYmVyJiBjb250ZXh0TGluZSwgYm9vbCBpc1NjcmlwdCkgY29uc3Q7CisKKyAgICBib29s
IGNoZWNrU291cmNlQW5kUmVwb3J0VmlvbGF0aW9uKENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmUqLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIGVmZmVjdGl2ZURpcmVj
dGl2ZSkgY29uc3Q7CisgICAgYm9vbCBjaGVja01lZGlhVHlwZUFuZFJlcG9ydFZpb2xhdGlvbihD
b250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUqLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGNvbnN0IFN0cmluZyYgdHlwZUF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBjb25zb2xlTWVz
c2FnZSkgY29uc3Q7CisKKyAgICBib29sIGRlbnlJZkVuZm9yY2luZ1BvbGljeSgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwb3J0T25seTsgfQorCisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBhIGNvbnN0
IHJlZmVyZW5jZSBvbmNlIHdlIHRlYWNoIGFwcGx5U2FuZGJveFBvbGljeSgpIHRvIHN0b3JlIGl0
cyBwb2xpY3kgYXMgb3Bwb3NlZCB0byBhcHBseWluZyBpdCBkaXJlY3RseSBvbnRvIENvbnRlbnRT
ZWN1cml0eVBvbGljeS4KKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3kmIG1fcG9saWN5OworCisg
ICAgU3RyaW5nIG1faGVhZGVyOworICAgIENvbnRlbnRTZWN1cml0eVBvbGljeUhlYWRlclR5cGUg
bV9oZWFkZXJUeXBlOworCisgICAgYm9vbCBtX3JlcG9ydE9ubHk7CisgICAgYm9vbCBtX2hhdmVT
YW5kYm94UG9saWN5OworICAgIENvbnRlbnRTZWN1cml0eVBvbGljeTo6UmVmbGVjdGVkWFNTRGlz
cG9zaXRpb24gbV9yZWZsZWN0ZWRYU1NEaXNwb3NpdGlvbjsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmU+IG1fcGx1Z2luVHlwZXM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+IG1fYmFzZVVSSTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4gbV9jb25uZWN0U3JjOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPiBtX2RlZmF1bHRTcmM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJl
Y3RpdmU+IG1fZm9udFNyYzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudFNlY3VyaXR5UG9s
aWN5U291cmNlTGlzdERpcmVjdGl2ZT4gbV9mb3JtQWN0aW9uOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlPiBtX2ZyYW1lU3JjOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0
aXZlPiBtX2ltZ1NyYzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdERpcmVjdGl2ZT4gbV9tZWRpYVNyYzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZT4gbV9vYmplY3RTcmM7CisgICAg
c3RkOjp1bmlxdWVfcHRyPENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmU+
IG1fc2NyaXB0U3JjOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDb250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0RGlyZWN0aXZlPiBtX3N0eWxlU3JjOworICAgIAorICAgIFZlY3RvcjxTdHJpbmc+
IG1fcmVwb3J0VVJJczsKKyAgICAKKyAgICBTdHJpbmcgbV9ldmFsRGlzYWJsZWRFcnJvck1lc3Nh
Z2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvKiBDb250ZW50U2Vj
dXJpdHlQb2xpY3lEaXJlY3RpdmVMaXN0X2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJl
Y3RpdmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhZjM5MzU5ODMyYTE2YzQ4YTlkZGMxMDVmY2M3ZWZkOTlk
NjBmODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3RpdmUuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lNZWRpYUxpc3REaXJlY3Rp
dmUuaCIKKworI2luY2x1ZGUgIkNvbnRlbnRTZWN1cml0eVBvbGljeS5oIgorI2luY2x1ZGUgIlBh
cnNpbmdVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNNZWRpYVR5cGVDaGFyYWN0ZXIoVUNo
YXIgYykKK3sKKyAgICByZXR1cm4gIWlzQVNDSUlTcGFjZShjKSAmJiBjICE9ICcvJzsKK30KKwor
c3RhdGljIGJvb2wgaXNOb3RBU0NJSVNwYWNlKFVDaGFyIGMpCit7CisgICAgcmV0dXJuICFpc0FT
Q0lJU3BhY2UoYyk7Cit9CisKK0NvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2
ZTo6Q29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgQ29udGVudFNlY3VyaXR5UG9saWN5JiBw
b2xpY3kpCisgICAgOiBDb250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUobmFtZSwgdmFsdWUs
IHBvbGljeSkKK3sKKyAgICBwYXJzZSh2YWx1ZSk7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5
UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlOjphbGxvd3MoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25z
dAoreworICAgIHJldHVybiBtX3BsdWdpblR5cGVzLmNvbnRhaW5zKHR5cGUpOworfQorCit2b2lk
IENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZTo6cGFyc2UoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51
cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0
ZXJzOworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworICAgIGNvbnN0IFVDaGFy
KiBlbmQgPSBiZWdpbiArIHZhbHVlLmxlbmd0aCgpOworCisgICAgLy8gJ3BsdWdpbi10eXBlcyBf
X19fOycgT1IgJ3BsdWdpbi10eXBlczsnCisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBwb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXModmFsdWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CisgICAgICAgIC8v
IF9fX19fIE9SIF9fX19fbWltZTEvbWltZTEKKyAgICAgICAgLy8gXiAgICAgICAgXgorICAgICAg
ICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAg
IGlmIChwb3NpdGlvbiA9PSBlbmQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8g
bWltZTEvbWltZTEgbWltZTIvbWltZTIKKyAgICAgICAgLy8gXgorICAgICAgICBiZWdpbiA9IHBv
c2l0aW9uOworICAgICAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc01lZGlhVHlwZUNoYXJh
Y3Rlcj4ocG9zaXRpb24sIGVuZCkpIHsKKyAgICAgICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNO
b3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgICAgIHBvbGljeSgpLnJlcG9y
dEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVnaW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgIC8vIG1pbWUx
L21pbWUxIG1pbWUyL21pbWUyCisgICAgICAgIC8vICAgICAgXgorICAgICAgICBpZiAoIXNraXBF
eGFjdGx5PFVDaGFyPihwb3NpdGlvbiwgZW5kLCAnLycpKSB7CisgICAgICAgICAgICBza2lwV2hp
bGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRpb24sIGVuZCk7CisgICAgICAgICAgICBw
b2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMoU3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAt
IGJlZ2luKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IG1pbWUxL21pbWUxIG1pbWUyL21pbWUyCisgICAgICAgIC8vICAgICAgIF4KKyAgICAgICAgaWYg
KCFza2lwRXhhY3RseTxVQ2hhciwgaXNNZWRpYVR5cGVDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
KSB7CisgICAgICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTm90QVNDSUlTcGFjZT4ocG9zaXRp
b24sIGVuZCk7CisgICAgICAgICAgICBwb2xpY3koKS5yZXBvcnRJbnZhbGlkUGx1Z2luVHlwZXMo
U3RyaW5nKGJlZ2luLCBwb3NpdGlvbiAtIGJlZ2luKSk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorICAgICAgICBza2lwV2hpbGU8VUNoYXIsIGlzTWVkaWFUeXBlQ2hhcmFjdGVy
Pihwb3NpdGlvbiwgZW5kKTsKKworICAgICAgICAvLyBtaW1lMS9taW1lMSBtaW1lMi9taW1lMiBP
UiBtaW1lMS9taW1lMSAgT1IgbWltZTEvbWltZTEvZXJyb3IKKyAgICAgICAgLy8gICAgICAgICAg
ICBeICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgXgorICAgICAgICBp
ZiAocG9zaXRpb24gPCBlbmQgJiYgaXNOb3RBU0NJSVNwYWNlKCpwb3NpdGlvbikpIHsKKyAgICAg
ICAgICAgIHNraXBXaGlsZTxVQ2hhciwgaXNOb3RBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsK
KyAgICAgICAgICAgIHBvbGljeSgpLnJlcG9ydEludmFsaWRQbHVnaW5UeXBlcyhTdHJpbmcoYmVn
aW4sIHBvc2l0aW9uIC0gYmVnaW4pKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIG1fcGx1Z2luVHlwZXMuYWRkKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdp
bikpOworCisgICAgICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgaXNBU0NJSVNwYWNlKCpw
b3NpdGlvbikpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0
RGlyZWN0aXZlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3lNZWRpYUxpc3REaXJlY3RpdmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMWEwNTdlNzc3M2U4NDI4YTQ5NmVk
ZDA3NjI3NjhlMDE1ODA2MzMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlLmgKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBH
T09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZV9oCisjZGVmaW5l
IENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVjdGl2ZV9oCisKKyNpbmNsdWRlICJD
b250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeTsKKworY2xhc3MgQ29udGVudFNlY3VyaXR5
UG9saWN5TWVkaWFMaXN0RGlyZWN0aXZlIDogcHVibGljIENvbnRlbnRTZWN1cml0eVBvbGljeURp
cmVjdGl2ZSB7CitwdWJsaWM6CisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5TWVkaWFMaXN0RGly
ZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgQ29u
dGVudFNlY3VyaXR5UG9saWN5Jik7CisKKyAgICBib29sIGFsbG93cyhjb25zdCBTdHJpbmcmIHR5
cGUpIGNvbnN0OworCitwcml2YXRlOgorICAgIHZvaWQgcGFyc2UoY29uc3QgU3RyaW5nJik7CisK
KyAgICBIYXNoU2V0PFN0cmluZz4gbV9wbHVnaW5UeXBlczsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8qIENvbnRlbnRTZWN1cml0eVBvbGljeU1lZGlhTGlzdERpcmVj
dGl2ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3lTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2I5ZWE5YjA0N2EwY2JlOTNiMzYx
NTQ4ZmRkNzUyY2YzMzgyNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmNwcApAQCAtMCwwICsxLDEwOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmgiCisKKyNp
bmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNpbmNsdWRlICJVUkwuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OkNvbnRlbnRT
ZWN1cml0eVBvbGljeVNvdXJjZShjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3kmIHBvbGljeSwg
Y29uc3QgU3RyaW5nJiBzY2hlbWUsIGNvbnN0IFN0cmluZyYgaG9zdCwgaW50IHBvcnQsIGNvbnN0
IFN0cmluZyYgcGF0aCwgYm9vbCBob3N0SGFzV2lsZGNhcmQsIGJvb2wgcG9ydEhhc1dpbGRjYXJk
KQorICAgIDogbV9wb2xpY3kocG9saWN5KQorICAgICwgbV9zY2hlbWUoc2NoZW1lKQorICAgICwg
bV9ob3N0KGhvc3QpCisgICAgLCBtX3BvcnQocG9ydCkKKyAgICAsIG1fcGF0aChwYXRoKQorICAg
ICwgbV9ob3N0SGFzV2lsZGNhcmQoaG9zdEhhc1dpbGRjYXJkKQorICAgICwgbV9wb3J0SGFzV2ls
ZGNhcmQocG9ydEhhc1dpbGRjYXJkKQoreworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGlj
eVNvdXJjZTo6bWF0Y2hlcyhjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAoIXNjaGVt
ZU1hdGNoZXModXJsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpc1NjaGVtZU9u
bHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGhvc3RNYXRjaGVzKHVybCkg
JiYgcG9ydE1hdGNoZXModXJsKSAmJiBwYXRoTWF0Y2hlcyh1cmwpOworfQorCitib29sIENvbnRl
bnRTZWN1cml0eVBvbGljeVNvdXJjZTo6c2NoZW1lTWF0Y2hlcyhjb25zdCBVUkwmIHVybCkgY29u
c3QKK3sKKyAgICBpZiAobV9zY2hlbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbV9wb2xp
Y3kucHJvdG9jb2xNYXRjaGVzU2VsZih1cmwpOworICAgIHJldHVybiBlcXVhbElnbm9yaW5nQVND
SUlDYXNlKHVybC5wcm90b2NvbCgpLCBtX3NjaGVtZSk7Cit9CisKK2Jvb2wgQ29udGVudFNlY3Vy
aXR5UG9saWN5U291cmNlOjpob3N0TWF0Y2hlcyhjb25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAg
ICBjb25zdCBTdHJpbmcmIGhvc3QgPSB1cmwuaG9zdCgpOworICAgIGlmIChlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKGhvc3QsIG1faG9zdCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBtX2hvc3RIYXNXaWxkY2FyZCAmJiBob3N0LmVuZHNXaXRoKCIuIiArIG1faG9zdCwgZmFsc2Up
OworCit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlOjpwYXRoTWF0Y2hlcyhj
b25zdCBVUkwmIHVybCkgY29uc3QKK3sKKyAgICBpZiAobV9wYXRoLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBTdHJpbmcgcGF0aCA9IGRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyh1cmwucGF0aCgpKTsKKworICAgIGlmIChtX3BhdGguZW5kc1dpdGgoIi8iKSkKKyAgICAg
ICAgcmV0dXJuIHBhdGguc3RhcnRzV2l0aChtX3BhdGgsIGZhbHNlKTsKKworICAgIHJldHVybiBw
YXRoID09IG1fcGF0aDsKK30KKworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2U6OnBv
cnRNYXRjaGVzKGNvbnN0IFVSTCYgdXJsKSBjb25zdAoreworICAgIGlmIChtX3BvcnRIYXNXaWxk
Y2FyZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpbnQgcG9ydCA9IHVybC5wb3J0KCk7
CisKKyAgICBpZiAocG9ydCA9PSBtX3BvcnQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
aWYgKCFwb3J0KQorICAgICAgICByZXR1cm4gaXNEZWZhdWx0UG9ydEZvclByb3RvY29sKG1fcG9y
dCwgdXJsLnByb3RvY29sKCkpOworCisgICAgaWYgKCFtX3BvcnQpCisgICAgICAgIHJldHVybiBp
c0RlZmF1bHRQb3J0Rm9yUHJvdG9jb2wocG9ydCwgdXJsLnByb3RvY29sKCkpOworCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZTo6aXNTY2hl
bWVPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ob3N0LmlzRW1wdHkoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9D
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Yzc3OWQ1NDU5Y2IwZmY3
ZmM4MTZhOTcyYjcwMmYwMjI2MzkxNzJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmgKQEAgLTAsMCArMSw2MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZV9oCisjZGVmaW5lIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZV9oCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250ZW50U2VjdXJpdHlQb2xpY3k7CitjbGFzcyBVUkw7
CisKK2NsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZSB7CitwdWJsaWM6CisgICAgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlKGNvbnN0IENvbnRlbnRTZWN1cml0eVBvbGljeSYsIGNv
bnN0IFN0cmluZyYgc2NoZW1lLCBjb25zdCBTdHJpbmcmIGhvc3QsIGludCBwb3J0LCBjb25zdCBT
dHJpbmcmIHBhdGgsIGJvb2wgaG9zdEhhc1dpbGRjYXJkLCBib29sIHBvcnRIYXNXaWxkY2FyZCk7
CisKKyAgICBib29sIG1hdGNoZXMoY29uc3QgVVJMJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBzY2hlbWVNYXRjaGVzKGNvbnN0IFVSTCYpIGNvbnN0OworICAgIGJvb2wgaG9zdE1hdGNo
ZXMoY29uc3QgVVJMJikgY29uc3Q7CisgICAgYm9vbCBwYXRoTWF0Y2hlcyhjb25zdCBVUkwmKSBj
b25zdDsKKyAgICBib29sIHBvcnRNYXRjaGVzKGNvbnN0IFVSTCYpIGNvbnN0OworICAgIGJvb2wg
aXNTY2hlbWVPbmx5KCkgY29uc3Q7CisKKyAgICBjb25zdCBDb250ZW50U2VjdXJpdHlQb2xpY3km
IG1fcG9saWN5OworICAgIFN0cmluZyBtX3NjaGVtZTsKKyAgICBTdHJpbmcgbV9ob3N0OworICAg
IGludCBtX3BvcnQ7CisgICAgU3RyaW5nIG1fcGF0aDsKKworICAgIGJvb2wgbV9ob3N0SGFzV2ls
ZGNhcmQ7CisgICAgYm9vbCBtX3BvcnRIYXNXaWxkY2FyZDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8qIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZV9oICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0YzRkMTRjZTc5NTZlZjhiOTVmYzY3Nzk3
MjU5ZjMyODE5MDUzYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0LmNwcApAQCAtMCwwICsxLDM4MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdC5oIgor
CisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5LmgiCisjaW5jbHVkZSAiQ29udGVudFNl
Y3VyaXR5UG9saWN5RGlyZWN0aXZlTGlzdC5oIgorI2luY2x1ZGUgIlBhcnNpbmdVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlVSTC5oIgorI2luY2x1
ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJv
b2wgaXNTb3VyY2VDaGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gIWlzQVNDSUlTcGFj
ZShjKTsKK30KKworc3RhdGljIGJvb2wgaXNIb3N0Q2hhcmFjdGVyKFVDaGFyIGMpCit7CisgICAg
cmV0dXJuIGlzQVNDSUlBbHBoYW51bWVyaWMoYykgfHwgYyA9PSAnLSc7Cit9CisKK3N0YXRpYyBi
b29sIGlzUGF0aENvbXBvbmVudENoYXJhY3RlcihVQ2hhciBjKQoreworICAgIHJldHVybiBjICE9
ICc/JyAmJiBjICE9ICcjJzsKK30KKworc3RhdGljIGJvb2wgaXNTY2hlbWVDb250aW51YXRpb25D
aGFyYWN0ZXIoVUNoYXIgYykKK3sKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhbnVtZXJpYyhjKSB8
fCBjID09ICcrJyB8fCBjID09ICctJyB8fCBjID09ICcuJzsKK30KKworc3RhdGljIGJvb2wgaXNO
b3RDb2xvbk9yU2xhc2goVUNoYXIgYykKK3sKKyAgICByZXR1cm4gYyAhPSAnOicgJiYgYyAhPSAn
Lyc7Cit9CisKK3N0YXRpYyBib29sIGlzU291cmNlTGlzdE5vbmUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KHZhbHVlKS51cGNvbnZlcnRl
ZENoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciogYmVnaW4gPSBjaGFyYWN0ZXJzOworICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgdmFsdWUubGVuZ3RoKCk7CisgICAgc2tp
cFdoaWxlPFVDaGFyLCBpc0FTQ0lJU3BhY2U+KGJlZ2luLCBlbmQpOworCisgICAgY29uc3QgVUNo
YXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJh
Y3Rlcj4ocG9zaXRpb24sIGVuZCk7CisgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShiZWdpbiwgcG9zaXRpb24gLSBiZWdpbiwgIidub25lJyIpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBza2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlTcGFjZT4ocG9zaXRpb24sIGVu
ZCk7CisgICAgaWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
OjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0KGNvbnN0IENvbnRlbnRTZWN1cml0eVBv
bGljeSYgcG9saWN5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUpCisgICAgOiBtX3BvbGlj
eShwb2xpY3kpCisgICAgLCBtX2RpcmVjdGl2ZU5hbWUoZGlyZWN0aXZlTmFtZSkKK3sKK30KKwor
dm9pZCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZShjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIC8vIFdlIHJlcHJlc2VudCAnbm9uZScgYXMgYW4gZW1wdHkgbV9saXN0
LgorICAgIGlmIChpc1NvdXJjZUxpc3ROb25lKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcodmFsdWUpLnVwY29udmVydGVkQ2hhcmFjdGVy
cygpOworICAgIHBhcnNlKGNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyB2YWx1ZS5sZW5ndGgoKSk7
Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6bWF0Y2hlcyhjb25z
dCBVUkwmIHVybCkKK3sKKyAgICBpZiAobV9hbGxvd1N0YXIpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgVVJMIGVmZmVjdGl2ZVVSTCA9IFNlY3VyaXR5T3JpZ2luOjpzaG91bGRVc2VJbm5l
clVSTCh1cmwpID8gU2VjdXJpdHlPcmlnaW46OmV4dHJhY3RJbm5lclVSTCh1cmwpIDogdXJsOwor
CisgICAgaWYgKG1fYWxsb3dTZWxmICYmIG1fcG9saWN5LnVybE1hdGNoZXNTZWxmKGVmZmVjdGl2
ZVVSTCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
bGlzdCkgeworICAgICAgICBpZiAoZW50cnkubWF0Y2hlcyhlZmZlY3RpdmVVUkwpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBz
b3VyY2UtbGlzdCAgICAgICA9ICpXU1AgWyBzb3VyY2UgKiggMSpXU1Agc291cmNlICkgKldTUCBd
CisvLyAgICAgICAgICAgICAgICAgICAvICpXU1AgIidub25lJyIgKldTUAorLy8KK3ZvaWQgQ29u
dGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBj
b25zdCBVQ2hhciogZW5kKQoreworICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOwor
CisgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CisgICAgICAgIHNraXBXaGlsZTxVQ2hhciwg
aXNBU0NJSVNwYWNlPihwb3NpdGlvbiwgZW5kKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IGVu
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBVQ2hhciogYmVnaW5Tb3Vy
Y2UgPSBwb3NpdGlvbjsKKyAgICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc1NvdXJjZUNoYXJhY3Rl
cj4ocG9zaXRpb24sIGVuZCk7CisKKyAgICAgICAgU3RyaW5nIHNjaGVtZSwgaG9zdCwgcGF0aDsK
KyAgICAgICAgaW50IHBvcnQgPSAwOworICAgICAgICBib29sIGhvc3RIYXNXaWxkY2FyZCA9IGZh
bHNlOworICAgICAgICBib29sIHBvcnRIYXNXaWxkY2FyZCA9IGZhbHNlOworCisgICAgICAgIGlm
IChwYXJzZVNvdXJjZShiZWdpblNvdXJjZSwgcG9zaXRpb24sIHNjaGVtZSwgaG9zdCwgcG9ydCwg
cGF0aCwgaG9zdEhhc1dpbGRjYXJkLCBwb3J0SGFzV2lsZGNhcmQpKSB7CisgICAgICAgICAgICAv
LyBXaWxkY2FyZCBob3N0cyBhbmQga2V5d29yZCBzb3VyY2VzICgnc2VsZicsICd1bnNhZmUtaW5s
aW5lJywKKyAgICAgICAgICAgIC8vIGV0Yy4pIGFyZW4ndCBzdG9yZWQgaW4gbV9saXN0LCBidXQg
YXMgYXR0cmlidXRlcyBvbiB0aGUgc291cmNlCisgICAgICAgICAgICAvLyBsaXN0IGl0c2VsZi4K
KyAgICAgICAgICAgIGlmIChzY2hlbWUuaXNFbXB0eSgpICYmIGhvc3QuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKGlzQ1NQRGlyZWN0aXZlTmFt
ZShob3N0KSkKKyAgICAgICAgICAgICAgICBtX3BvbGljeS5yZXBvcnREaXJlY3RpdmVBc1NvdXJj
ZUV4cHJlc3Npb24obV9kaXJlY3RpdmVOYW1lLCBob3N0KTsKKyAgICAgICAgICAgIG1fbGlzdC5h
cHBlbmQoQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlKG1fcG9saWN5LCBzY2hlbWUsIGhvc3Qs
IHBvcnQsIHBhdGgsIGhvc3RIYXNXaWxkY2FyZCwgcG9ydEhhc1dpbGRjYXJkKSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbV9wb2xpY3kucmVwb3J0SW52YWxpZFNvdXJjZUV4cHJlc3Np
b24obV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW5Tb3VyY2UsIHBvc2l0aW9uIC0gYmVnaW5T
b3VyY2UpKTsKKworICAgICAgICBBU1NFUlQocG9zaXRpb24gPT0gZW5kIHx8IGlzQVNDSUlTcGFj
ZSgqcG9zaXRpb24pKTsKKyAgICB9Cit9CisKKy8vIHNvdXJjZSAgICAgICAgICAgID0gc2NoZW1l
ICI6IgorLy8gICAgICAgICAgICAgICAgICAgLyAoIFsgc2NoZW1lICI6Ly8iIF0gaG9zdCBbIHBv
cnQgXSBbIHBhdGggXSApCisvLyAgICAgICAgICAgICAgICAgICAvICInc2VsZiciCisvLworYm9v
bCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0OjpwYXJzZVNvdXJjZShjb25zdCBVQ2hh
ciogYmVnaW4sIGNvbnN0IFVDaGFyKiBlbmQsIFN0cmluZyYgc2NoZW1lLCBTdHJpbmcmIGhvc3Qs
IGludCYgcG9ydCwgU3RyaW5nJiBwYXRoLCBib29sJiBob3N0SGFzV2lsZGNhcmQsIGJvb2wmIHBv
cnRIYXNXaWxkY2FyZCkKK3sKKyAgICBpZiAoYmVnaW4gPT0gZW5kKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVu
ZCAtIGJlZ2luLCAiJ25vbmUnIikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChl
bmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAnKicpIHsKKyAgICAgICAgbV9hbGxvd1N0YXIg
PSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2luLCAiJ3NlbGYnIikpIHsKKyAg
ICAgICAgbV9hbGxvd1NlbGYgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoYmVnaW4sIGVuZCAtIGJlZ2lu
LCAiJ3Vuc2FmZS1pbmxpbmUnIikpIHsKKyAgICAgICAgbV9hbGxvd0lubGluZSA9IHRydWU7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShiZWdpbiwgZW5kIC0gYmVnaW4sICIndW5zYWZlLWV2YWwnIikpIHsKKyAgICAg
ICAgbV9hbGxvd0V2YWwgPSB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBjb25zdCBVQ2hhciogYmVnaW5I
b3N0ID0gYmVnaW47CisgICAgY29uc3QgVUNoYXIqIGJlZ2luUGF0aCA9IGVuZDsKKyAgICBjb25z
dCBVQ2hhciogYmVnaW5Qb3J0ID0gbnVsbHB0cjsKKworICAgIHNraXBXaGlsZTxVQ2hhciwgaXNO
b3RDb2xvbk9yU2xhc2g+KHBvc2l0aW9uLCBlbmQpOworCisgICAgaWYgKHBvc2l0aW9uID09IGVu
ZCkgeworICAgICAgICAvLyBob3N0CisgICAgICAgIC8vICAgICBeCisgICAgICAgIHJldHVybiBw
YXJzZUhvc3QoYmVnaW5Ib3N0LCBwb3NpdGlvbiwgaG9zdCwgaG9zdEhhc1dpbGRjYXJkKTsKKyAg
ICB9CisKKyAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09ICcvJykgeworICAg
ICAgICAvLyBob3N0L3BhdGggfHwgaG9zdC8gfHwgLworICAgICAgICAvLyAgICAgXiAgICAgICAg
ICAgIF4gICAgXgorICAgICAgICBpZiAoIXBhcnNlSG9zdChiZWdpbkhvc3QsIHBvc2l0aW9uLCBo
b3N0LCBob3N0SGFzV2lsZGNhcmQpCisgICAgICAgICAgICB8fCAhcGFyc2VQYXRoKHBvc2l0aW9u
LCBlbmQsIHBhdGgpCisgICAgICAgICAgICB8fCBwb3NpdGlvbiAhPSBlbmQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChw
b3NpdGlvbiA8IGVuZCAmJiAqcG9zaXRpb24gPT0gJzonKSB7CisgICAgICAgIGlmIChlbmQgLSBw
b3NpdGlvbiA9PSAxKSB7CisgICAgICAgICAgICAvLyBzY2hlbWU6CisgICAgICAgICAgICAvLyAg
ICAgICBeCisgICAgICAgICAgICByZXR1cm4gcGFyc2VTY2hlbWUoYmVnaW4sIHBvc2l0aW9uLCBz
Y2hlbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBvc2l0aW9uWzFdID09ICcvJykgewor
ICAgICAgICAgICAgLy8gc2NoZW1lOi8vaG9zdCB8fCBzY2hlbWU6Ly8KKyAgICAgICAgICAgIC8v
ICAgICAgIF4gICAgICAgICAgICAgICAgXgorICAgICAgICAgICAgaWYgKCFwYXJzZVNjaGVtZShi
ZWdpbiwgcG9zaXRpb24sIHNjaGVtZSkKKyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0bHk8
VUNoYXI+KHBvc2l0aW9uLCBlbmQsICc6JykKKyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4YWN0
bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykKKyAgICAgICAgICAgICAgICB8fCAhc2tpcEV4
YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcvJykpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGJlZ2luSG9zdCA9IHBvc2l0aW9uOworICAgICAg
ICAgICAgc2tpcFdoaWxlPFVDaGFyLCBpc05vdENvbG9uT3JTbGFzaD4ocG9zaXRpb24sIGVuZCk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAocG9zaXRpb24gPCBlbmQgJiYgKnBvc2l0aW9uID09
ICc6JykgeworICAgICAgICAgICAgLy8gaG9zdDpwb3J0IHx8IHNjaGVtZTovL2hvc3Q6cG9ydAor
ICAgICAgICAgICAgLy8gICAgIF4gICAgICAgICAgICAgICAgICAgICBeCisgICAgICAgICAgICBi
ZWdpblBvcnQgPSBwb3NpdGlvbjsKKyAgICAgICAgICAgIHNraXBVbnRpbDxVQ2hhcj4ocG9zaXRp
b24sIGVuZCwgJy8nKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChwb3NpdGlvbiA8IGVu
ZCAmJiAqcG9zaXRpb24gPT0gJy8nKSB7CisgICAgICAgIC8vIHNjaGVtZTovL2hvc3QvcGF0aCB8
fCBzY2hlbWU6Ly9ob3N0OnBvcnQvcGF0aAorICAgICAgICAvLyAgICAgICAgICAgICAgXiAgICAg
ICAgICAgICAgICAgICAgICAgICAgXgorICAgICAgICBpZiAocG9zaXRpb24gPT0gYmVnaW5Ib3N0
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGJlZ2luUGF0aCA9IHBvc2l0
aW9uOworICAgIH0KKworICAgIGlmICghcGFyc2VIb3N0KGJlZ2luSG9zdCwgYmVnaW5Qb3J0ID8g
YmVnaW5Qb3J0IDogYmVnaW5QYXRoLCBob3N0LCBob3N0SGFzV2lsZGNhcmQpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWJlZ2luUG9ydCkKKyAgICAgICAgcG9ydCA9IDA7Cisg
ICAgZWxzZSB7CisgICAgICAgIGlmICghcGFyc2VQb3J0KGJlZ2luUG9ydCwgYmVnaW5QYXRoLCBw
b3J0LCBwb3J0SGFzV2lsZGNhcmQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChiZWdpblBhdGggIT0gZW5kKSB7CisgICAgICAgIGlmICghcGFyc2VQYXRoKGJl
Z2luUGF0aCwgZW5kLCBwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gICAgICAgICAgICAgICAgICAgICA7IDxzY2hlbWU+
IHByb2R1Y3Rpb24gZnJvbSBSRkMgMzk4NgorLy8gc2NoZW1lICAgICAgPSBBTFBIQSAqKCBBTFBI
QSAvIERJR0lUIC8gIisiIC8gIi0iIC8gIi4iICkKKy8vCitib29sIENvbnRlbnRTZWN1cml0eVBv
bGljeVNvdXJjZUxpc3Q6OnBhcnNlU2NoZW1lKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNo
YXIqIGVuZCwgU3RyaW5nJiBzY2hlbWUpCit7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7Cisg
ICAgQVNTRVJUKHNjaGVtZS5pc0VtcHR5KCkpOworCisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47
CisKKyAgICBpZiAoIXNraXBFeGFjdGx5PFVDaGFyLCBpc0FTQ0lJQWxwaGE+KHBvc2l0aW9uLCBl
bmQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBza2lwV2hpbGU8VUNoYXIsIGlzU2No
ZW1lQ29udGludWF0aW9uQ2hhcmFjdGVyPihwb3NpdGlvbiwgZW5kKTsKKworICAgIGlmIChwb3Np
dGlvbiAhPSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNjaGVtZSA9IFN0cmlu
ZyhiZWdpbiwgZW5kIC0gYmVnaW4pOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBob3N0ICAg
ICAgICAgICAgICA9IFsgIiouIiBdIDEqaG9zdC1jaGFyICooICIuIiAxKmhvc3QtY2hhciApCisv
LyAgICAgICAgICAgICAgICAgICAvICIqIgorLy8gaG9zdC1jaGFyICAgICAgICAgPSBBTFBIQSAv
IERJR0lUIC8gIi0iCisvLworYm9vbCBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0Ojpw
YXJzZUhvc3QoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIGhv
c3QsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCkKK3sKKyAgICBBU1NFUlQoYmVnaW4gPD0gZW5kKTsK
KyAgICBBU1NFUlQoaG9zdC5pc0VtcHR5KCkpOworICAgIEFTU0VSVCghaG9zdEhhc1dpbGRjYXJk
KTsKKworICAgIGlmIChiZWdpbiA9PSBlbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGJlZ2luOworCisgICAgaWYgKHNraXBFeGFjdGx5PFVD
aGFyPihwb3NpdGlvbiwgZW5kLCAnKicpKSB7CisgICAgICAgIGhvc3RIYXNXaWxkY2FyZCA9IHRy
dWU7CisKKyAgICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcu
JykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgVUNoYXIq
IGhvc3RCZWdpbiA9IHBvc2l0aW9uOworCisgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7Cisg
ICAgICAgIGlmICghc2tpcEV4YWN0bHk8VUNoYXIsIGlzSG9zdENoYXJhY3Rlcj4ocG9zaXRpb24s
IGVuZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc2tpcFdoaWxlPFVD
aGFyLCBpc0hvc3RDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQpOworCisgICAgICAgIGlmIChwb3Np
dGlvbiA8IGVuZCAmJiAhc2tpcEV4YWN0bHk8VUNoYXI+KHBvc2l0aW9uLCBlbmQsICcuJykpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKHBvc2l0aW9uID09
IGVuZCk7CisgICAgaG9zdCA9IFN0cmluZyhob3N0QmVnaW4sIGVuZCAtIGhvc3RCZWdpbik7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlz
dDo6cGFyc2VQYXRoKGNvbnN0IFVDaGFyKiBiZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgU3RyaW5n
JiBwYXRoKQoreworICAgIEFTU0VSVChiZWdpbiA8PSBlbmQpOworICAgIEFTU0VSVChwYXRoLmlz
RW1wdHkoKSk7CisgICAgCisgICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gYmVnaW47CisgICAg
c2tpcFdoaWxlPFVDaGFyLCBpc1BhdGhDb21wb25lbnRDaGFyYWN0ZXI+KHBvc2l0aW9uLCBlbmQp
OworICAgIC8vIHBhdGgvdG8vZmlsZS5qcz9xdWVyeT1zdHJpbmcgfHwgcGF0aC90by9maWxlLmpz
I2FuY2hvcgorICAgIC8vICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXgorICAgIGlmIChwb3NpdGlvbiA8IGVuZCkKKyAgICAgICAgbV9wb2xpY3kucmVwb3J0
SW52YWxpZFBhdGhDaGFyYWN0ZXIobV9kaXJlY3RpdmVOYW1lLCBTdHJpbmcoYmVnaW4sIGVuZCAt
IGJlZ2luKSwgKnBvc2l0aW9uKTsKKyAgICAKKyAgICBwYXRoID0gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKFN0cmluZyhiZWdpbiwgcG9zaXRpb24gLSBiZWdpbikpOworICAgIAorICAgIEFTU0VS
VChwb3NpdGlvbiA8PSBlbmQpOworICAgIEFTU0VSVChwb3NpdGlvbiA9PSBlbmQgfHwgKCpwb3Np
dGlvbiA9PSAnIycgfHwgKnBvc2l0aW9uID09ICc/JykpOworICAgIHJldHVybiB0cnVlOworfQor
CisvLyBwb3J0ICAgICAgICAgICAgICA9ICI6IiAoIDEqRElHSVQgLyAiKiIgKQorLy8KK2Jvb2wg
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdDo6cGFyc2VQb3J0KGNvbnN0IFVDaGFyKiBi
ZWdpbiwgY29uc3QgVUNoYXIqIGVuZCwgaW50JiBwb3J0LCBib29sJiBwb3J0SGFzV2lsZGNhcmQp
Cit7CisgICAgQVNTRVJUKGJlZ2luIDw9IGVuZCk7CisgICAgQVNTRVJUKCFwb3J0KTsKKyAgICBB
U1NFUlQoIXBvcnRIYXNXaWxkY2FyZCk7CisgICAgCisgICAgaWYgKCFza2lwRXhhY3RseTxVQ2hh
cj4oYmVnaW4sIGVuZCwgJzonKSkKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
CisgICAgaWYgKGJlZ2luID09IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IGlmIChlbmQgLSBiZWdpbiA9PSAxICYmICpiZWdpbiA9PSAnKicpIHsKKyAgICAgICAgcG9ydCA9
IDA7CisgICAgICAgIHBvcnRIYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBiZWdpbjsKKyAgICBz
a2lwV2hpbGU8VUNoYXIsIGlzQVNDSUlEaWdpdD4ocG9zaXRpb24sIGVuZCk7CisgICAgCisgICAg
aWYgKHBvc2l0aW9uICE9IGVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGJv
b2wgb2s7CisgICAgcG9ydCA9IGNoYXJhY3RlcnNUb0ludFN0cmljdChiZWdpbiwgZW5kIC0gYmVn
aW4sICZvayk7CisgICAgcmV0dXJuIG9rOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lT
b3VyY2VMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3lTb3VyY2VMaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDY0NmE5ZjU5NzhhNDUyYThjM2E5NTlkN2ZiNTA1
Y2EzNzNlN2IwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0Nv
bnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3QuaApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29udGVudFNl
Y3VyaXR5UG9saWN5U291cmNlTGlzdF9oCisjZGVmaW5lIENvbnRlbnRTZWN1cml0eVBvbGljeVNv
dXJjZUxpc3RfaAorCisjaW5jbHVkZSAiQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeTsKK2Ns
YXNzIFVSTDsKKworY2xhc3MgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdCB7CitwdWJs
aWM6CisgICAgQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdChjb25zdCBDb250ZW50U2Vj
dXJpdHlQb2xpY3kmLCBjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZU5hbWUpOworCisgICAgdm9pZCBw
YXJzZShjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIG1hdGNoZXMoY29uc3QgVVJMJik7CisgICAg
Ym9vbCBhbGxvd0lubGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dJbmxpbmU7IH0KKyAgICBi
b29sIGFsbG93RXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dFdmFsOyB9CisgICAgYm9vbCBh
bGxvd1NlbGYoKSBjb25zdCB7IHJldHVybiBtX2FsbG93U2VsZjsgfQorCitwcml2YXRlOgorICAg
IHZvaWQgcGFyc2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kKTsKKworICAg
IGJvb2wgcGFyc2VTb3VyY2UoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBT
dHJpbmcmIHNjaGVtZSwgU3RyaW5nJiBob3N0LCBpbnQmIHBvcnQsIFN0cmluZyYgcGF0aCwgYm9v
bCYgaG9zdEhhc1dpbGRjYXJkLCBib29sJiBwb3J0SGFzV2lsZGNhcmQpOworICAgIGJvb2wgcGFy
c2VTY2hlbWUoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHNj
aGVtZSk7CisgICAgYm9vbCBwYXJzZUhvc3QoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hh
ciogZW5kLCBTdHJpbmcmIGhvc3QsIGJvb2wmIGhvc3RIYXNXaWxkY2FyZCk7CisgICAgYm9vbCBw
YXJzZVBvcnQoY29uc3QgVUNoYXIqIGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBpbnQmIHBvcnQs
IGJvb2wmIHBvcnRIYXNXaWxkY2FyZCk7CisgICAgYm9vbCBwYXJzZVBhdGgoY29uc3QgVUNoYXIq
IGJlZ2luLCBjb25zdCBVQ2hhciogZW5kLCBTdHJpbmcmIHBhdGgpOworCisgICAgY29uc3QgQ29u
dGVudFNlY3VyaXR5UG9saWN5JiBtX3BvbGljeTsKKyAgICBWZWN0b3I8Q29udGVudFNlY3VyaXR5
UG9saWN5U291cmNlPiBtX2xpc3Q7CisgICAgU3RyaW5nIG1fZGlyZWN0aXZlTmFtZTsKKyAgICBi
b29sIG1fYWxsb3dTZWxmIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYWxsb3dTdGFyIHsgZmFsc2Ug
fTsKKyAgICBib29sIG1fYWxsb3dJbmxpbmUgeyBmYWxzZSB9OworICAgIGJvb2wgbV9hbGxvd0V2
YWwgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLyog
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdF9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg5MTMzZDRlYmI1MWMwNDQzZTQ5OTBjZTFj
NjA4MDY0ZTRiMWIyNTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Nz
cC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlLmNwcApAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdP
T0dMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VM
aXN0RGlyZWN0aXZlLmgiCisKKyNpbmNsdWRlICJDb250ZW50U2VjdXJpdHlQb2xpY3kuaCIKKyNp
bmNsdWRlICJVUkwuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDb250ZW50U2VjdXJpdHlQ
b2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlOjpDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0
RGlyZWN0aXZlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3Qg
Q29udGVudFNlY3VyaXR5UG9saWN5JiBwb2xpY3kpCisgICAgOiBDb250ZW50U2VjdXJpdHlQb2xp
Y3lEaXJlY3RpdmUobmFtZSwgdmFsdWUsIHBvbGljeSkKKyAgICAsIG1fc291cmNlTGlzdChwb2xp
Y3ksIG5hbWUpCit7CisgICAgbV9zb3VyY2VMaXN0LnBhcnNlKHZhbHVlKTsKK30KKworYm9vbCBD
b250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlOjphbGxvd3MoY29uc3QgVVJM
JiB1cmwpCit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSByZXR1cm5pbmcg
ZmFsc2UgZm9yIGFuIGVtcHR5IFVSTC4KKyAgICBpZiAodXJsLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG1fc291cmNlTGlzdC5hbGxvd1NlbGYoKTsKKyAgICByZXR1cm4gbV9zb3VyY2VMaXN0
Lm1hdGNoZXModXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERp
cmVjdGl2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5
U291cmNlTGlzdERpcmVjdGl2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkNGUyMTE0YzllYzM5MjI0Y2Q0MDhl
MmFkMmE2NDIzZjY4ZTY0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlLmgKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBH
T09HTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3REaXJlY3RpdmVfaAorI2RlZmlu
ZSBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlX2gKKworI2luY2x1ZGUg
IkNvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZS5oIgorI2luY2x1ZGUgIkNvbnRlbnRTZWN1
cml0eVBvbGljeVNvdXJjZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
b250ZW50U2VjdXJpdHlQb2xpY3k7CisKK2NsYXNzIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJj
ZUxpc3REaXJlY3RpdmUgOiBwdWJsaWMgQ29udGVudFNlY3VyaXR5UG9saWN5RGlyZWN0aXZlIHsK
K3B1YmxpYzoKKyAgICBDb250ZW50U2VjdXJpdHlQb2xpY3lTb3VyY2VMaXN0RGlyZWN0aXZlKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgY29uc3QgQ29udGVudFNlY3Vy
aXR5UG9saWN5Jik7CisKKyAgICBib29sIGFsbG93cyhjb25zdCBVUkwmKTsKKyAgICBib29sIGFs
bG93SW5saW5lKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VMaXN0LmFsbG93SW5saW5lKCk7IH0K
KyAgICBib29sIGFsbG93RXZhbCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlTGlzdC5hbGxvd0V2
YWwoKTsgfQorCitwcml2YXRlOgorICAgIENvbnRlbnRTZWN1cml0eVBvbGljeVNvdXJjZUxpc3Qg
bV9zb3VyY2VMaXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLyog
Q29udGVudFNlY3VyaXR5UG9saWN5U291cmNlTGlzdERpcmVjdGl2ZV9oICovCg==
</data>
<flag name="review"
          id="295788"
          type_id="1"
          status="+"
          setter="bfulgham"
    />
    <flag name="commit-queue"
          id="295815"
          type_id="3"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>