<?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>199520</bug_id>
          
          <creation_ts>2019-07-05 10:54:38 -0700</creation_ts>
          <short_desc>[WHLSL] Optimize the lexer</short_desc>
          <delta_ts>2019-07-05 13:11:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1550432</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-05 10:54:38 -0700</bug_when>
    <thetext>Now that we&apos;ve fixed other bottlenecks in the rest of the compiler, the parser + lexer are once again a major time sink (25% in Myles&apos;s measurements).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550444</commentid>
    <comment_count>1</comment_count>
      <attachid>373517</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-05 11:19:58 -0700</bug_when>
    <thetext>Created attachment 373517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550447</commentid>
    <comment_count>2</comment_count>
      <attachid>373518</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-05 11:34:05 -0700</bug_when>
    <thetext>Created attachment 373518
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550448</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-05 11:35:05 -0700</bug_when>
    <thetext>Attachment 373518 did not pass style-queue:


ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1359:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1567:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1601:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1653:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1708:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1742:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1776:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:1809:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 8 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550465</commentid>
    <comment_count>4</comment_count>
      <attachid>373518</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-07-05 12:14:51 -0700</bug_when>
    <thetext>Comment on attachment 373518
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:253
&gt; +        return &quot;LEXING_ERROR&quot;;

Why not put a space in it? This is just used for error messages.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:500
&gt; +    if (isFullyConsumed())

isFullyConsumed calls peek() which I think calls this. Doesn&apos;t this have a chance of infinite looping?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:519
&gt; +//        which means we&apos;ll never see a false match. If we see a BMP code unit, we
&gt; +//        really have a BMP code point.

I know you didn&apos;t do this, but can we fix the indentation?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:670
&gt; +    while (auto result = digit(offset))

Cool.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:-759
&gt; -    if (auto result = string(&quot;operator&amp;.&quot;, offset))

I don&apos;t see where this moved to. How do we lex operator&amp;.foo now?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.h:202
&gt; +        Token ringBuffer[2];

Looks like your patch hasn&apos;t been rebased. There&apos;s now a m_offsetRingBuffer[2].

Does perf improve if we delete m_offsetRingBuffer[2]? It isn&apos;t actually used; it&apos;s just a convenience. If perf improves, perhaps we could put it behind a DEBUG preprocessor macro.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:195
&gt; +template &lt;Lexer::Token::Type... types&gt;
&gt; +Optional&lt;Lexer::Token&gt; Parser::tryTypes()

Does this cause code bloat? If so, is the performance gain worth it?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:212
&gt; +template &lt;Lexer::Token::Type... types&gt;
&gt; +auto Parser::consumeTypes() -&gt; Expected&lt;Lexer::Token, Error&gt;

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550470</commentid>
    <comment_count>5</comment_count>
      <attachid>373518</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-05 12:24:20 -0700</bug_when>
    <thetext>Comment on attachment 373518
Patch

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

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:500
&gt;&gt; +    if (isFullyConsumed())
&gt; 
&gt; isFullyConsumed calls peek() which I think calls this. Doesn&apos;t this have a chance of infinite looping?

Good catch. I will replace isFullyConsumed() here by m_offset == m_stringView.length()

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:519
&gt;&gt; +//        really have a BMP code point.
&gt; 
&gt; I know you didn&apos;t do this, but can we fix the indentation?

Sure.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.cpp:-759
&gt;&gt; -    if (auto result = string(&quot;operator&amp;.&quot;, offset))
&gt; 
&gt; I don&apos;t see where this moved to. How do we lex operator&amp;.foo now?

This is done by 
if (auto result = string(&quot;&amp;.&quot;, offset))
    return validIdentifier(*result);
on line 772/773

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLLexer.h:202
&gt;&gt; +        Token ringBuffer[2];
&gt; 
&gt; Looks like your patch hasn&apos;t been rebased. There&apos;s now a m_offsetRingBuffer[2].
&gt; 
&gt; Does perf improve if we delete m_offsetRingBuffer[2]? It isn&apos;t actually used; it&apos;s just a convenience. If perf improves, perhaps we could put it behind a DEBUG preprocessor macro.

This is super confusing: I remember deleting m_offsetRingBuffer in this patch (since all of its content is now directly in the tokens that are part of the normal m_ringBuffer), and I did rebase it just 30mn ago.. and somehow m_offsetRingBuffer is no longer in the diff.
Maybe your patch that added m_offsetRingBuffer got reverted and so the rebase removed that part?

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:195
&gt;&gt; +Optional&lt;Lexer::Token&gt; Parser::tryTypes()
&gt; 
&gt; Does this cause code bloat? If so, is the performance gain worth it?

It probably causes a small amount of code bloat. The code of this function is sufficiently tiny that I don&apos;t think it is too bad.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:212
&gt;&gt; +auto Parser::consumeTypes() -&gt; Expected&lt;Lexer::Token, Error&gt;
&gt; 
&gt; ditto

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550473</commentid>
    <comment_count>6</comment_count>
      <attachid>373524</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-05 12:28:08 -0700</bug_when>
    <thetext>Created attachment 373524
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550491</commentid>
    <comment_count>7</comment_count>
      <attachid>373524</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-05 13:10:42 -0700</bug_when>
    <thetext>Comment on attachment 373524
Patch for landing

Clearing flags on attachment: 373524

Committed r247171: &lt;https://trac.webkit.org/changeset/247171&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1550492</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-07-05 13:10:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373517</attachid>
            <date>2019-07-05 11:19:58 -0700</date>
            <delta_ts>2019-07-05 11:34:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199520-20190705111957.patch</filename>
            <type>text/plain</type>
            <size>68136</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MTMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDA2MmFhOWIxNTVkYzYz
ZDA5YTdlNzRmZDg3MTEwMWU1MThmNTkzMC4uYjY2MDY3MDc4M2U2ZTZkYzk3ZWQ0OTE4NWNhYTJl
MzcxYzUwYzRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE5LTA3LTA1ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBPcHRp
bWl6ZSB0aGUgbGV4ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5OTUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW5jbHVkZXMgYSBudW1iZXIgb2Ygc21hbGwgb3B0aW1pemF0aW9u
cyB0byB0aGUgbGV4ZXI6CisgICAgICAgIC0gQnkgY3JlYXRpbmcgdHdvIG5ldyB0eXBlcyBvZiBU
b2tlbiAoSW52YWxpZCBhbmQgRU9GKSwgd2UgY2FuIGF2b2lkIGhhdmluZyB0byBtYW5pcHVsYXRl
IE9wdGlvbmFsPFRva2VuPiBldmVyeXdoZXJlCisgICAgICAgIC0gQnkgY29tYmluaW5nIHRoZSBs
ZXhpbmcgb2YgaWRlbnRpZmllcnMsIGtleXdvcmRzIGFuZCBvcGVyYXRvciBuYW1lcywgd2UgY2Fu
IGF2b2lkIHJlLXJlYWRpbmcgdGhlbSBzZXZlcmFsIHRpbWVzCisgICAgICAgIC0gQnkgc3Rvcmlu
ZyBtZXJlIG9mZnNldHMgaW4gdGhlIHRva2VucyBpbnN0ZWFkIG9mIHN0cmluZyB2aWV3cywgd2Ug
c2F2ZSBzcGFjZSBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHN0cmluZyB2aWV3IGlzIHVu
dXNlZCAoZS5nLiBmb3Iga2V5d29yZHMpCisgICAgICAgIC0gQnkgc3RvcmluZyBtZXJlIG9mZnNl
dHMgaW4gdGhlIHRva2VucyBpbnN0ZWFkIG9mIGxpbmUgbnVtYmVycywgd2UgY2FuIHNpbXBsaWZ5
IHRoZSB3aGl0ZXNwYWNlIGFuZCBjb21tZW50IGxleGluZzsgYW5kIHdlIGNhbiBlYXNpbHkgcmVj
b21wdXRlIHRoZSBsaW5lIG51bWJlciBvbiBkZW1hbmQKKyAgICAgICAgLSBCeSB1c2luZyB0ZW1w
bGF0ZXMgd2UgY2FuIGF2b2lkIGNvbnN0cnVjdGluZyBhbmQgZGVzdHJ1Y3RpbmcgdmVjdG9ycyBh
dCBydW50aW1lIGV2ZXJ5IHRpbWUgd2UgY2FsbCB0cnlUeXBlcywgY29uc3VtZVR5cGVzIG9yIHBl
ZWtUeXBlczsgYXMgd2VsbCBhcyBhdm9pZGluZyBhIGNhbGwgdG8gZmluZCgpLgorICAgICAgICAt
IEkgYWxzbyBob2lzdGVkIHRoZSBsZW5ndGggY2hlY2sgb3V0IG9mIHRoZSBsb29wIGluIExleGVy
OjpzdHJpbmcoKQorICAgICAgICBBbGwgb2YgdGhpcyBjb21iaW5lZCBicm91Z2h0IHRoZSB0aW1l
IHNwZW50IGluIHRoZSBwYXJzZXIgd2hlbiBydW5uaW5nIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC10ZXN0LWhhcm5lc3MtdGVzdC5odG1sIDUgdGltZXMgb24gbXkgbWFjaGluZSBmcm9tIDYxMm1z
IHRvIDQ2Mm1zLgorCisgICAgICAgIEkgYWxzbyByZW1vdmVkIHRoZSAnYW55Q2hhcmFjdGVyJyBt
ZXRob2Qgc2luY2UgaXQgd2FzIGRlYWQgY29kZS4KKyAgICAgICAgSSBhbHNvIHJlbW92ZWQgTGV4
ZXI6OnBvc2l0aW9uKCksIGJ1dCBpdCBpcyBkaXJlY3RseSBlcXVpdmFsZW50IG5vdyB0byBwZWVr
KCkuc3RhcnRPZmZzZXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoZXJlIGlzIG5vIGlu
dGVuZGVkIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMZXhlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OlRva2Vu
Ojp0eXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvbnN1bWVUb2tl
bkZyb21TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpsaW5lTnVtYmVy
RnJvbU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aXNXaGl0ZXNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjppc05ld2xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkxleGVyOjpza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpMZXhlcjo6ZGlnaXRTdGFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpMZXhlcjo6Y29tcGxldGVPcGVyYXRvck5hbWUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhl
cjo6TGV4ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpUb2tlbjo6c3RyaW5n
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvbnN1bWVUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnBlZWsgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkxleGVyOjpwZWVrRnVydGhlciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TGV4ZXI6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpM
ZXhlcjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjppc0Z1bGx5
Q29uc3VtZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjplcnJvclN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnN0cmluZyBjb25zdCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBlZWtGdXJ0aGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpUeXBlczo6aW5jbHVkZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlR5cGVzOjphcHBlbmROYW1lVG8pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlR5cGVzPHQ+OjppbmNsdWRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VHlw
ZXM8dD46OmFwcGVuZE5hbWVUbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpw
ZWVrVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6dHJ5VHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjp0cnlUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpjb25zdW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UGFyc2VyOjpjb25zdW1lVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNl
cjo6Y29uc3VtZUludGVncmFsTGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZUNvbnN0YW50RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZUJ1aWx0SW5TZW1hbnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZVJlc291cmNlU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VRdWFsaWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJz
ZXI6OnBhcnNlU3RydWN0dXJlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZVN0cnVjdHVyZURlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbk1lbWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZUNvbXB1dGVGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aW9u
RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VSZWd1
bGFyRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2Vy
OjpwYXJzZUJsb2NrQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZVN3aXRjaENhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNl
U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRWZmZWN0
ZnVsQXNzaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUxp
bWl0ZWRTdWZmaXhPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpw
YXJzZVN1ZmZpeE9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNv
bXBsZXRlQXNzaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZVBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OmNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVSZWxhdGlvbmFsQmluYXJ5
T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9z
c2libGVTaGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpjb21wbGV0ZVBv
c3NpYmxlQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9z
c2libGVNdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVBv
c3NpYmxlUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQ2Fs
bEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUZXJt
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6YW5vbnltb3VzVG9rZW4pOgorCiAyMDE5LTA3
LTAzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUIGluIFdlYkNvcmU6IFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlVHJlZTo6aW5z
ZXJ0Tm9kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTExleGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTGV4ZXIuY3BwCmluZGV4IGI4MzZjNWQ2ZWJmYTBiN2ZlNzVjZjBhN2Q0MGNhZjJjODIyZDBj
NTMuLmI5ZWQ1YzAxNzYzNDllYWViYWE3ZjkwYjQ2YzhhYWYwMjFkYTc2NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCkBAIC0y
NDcsNiArMjQ3LDEwIEBAIGNvbnN0IGNoYXIqIExleGVyOjpUb2tlbjo6dHlwZU5hbWUoVHlwZSB0
eXBlKQogICAgICAgICByZXR1cm4gIiEiOwogICAgIGNhc2UgVHlwZTo6QXQ6CiAgICAgICAgIHJl
dHVybiAiQCI7CisgICAgY2FzZSBUeXBlOjpFbmRPZkZpbGU6CisgICAgICAgIHJldHVybiAiRU9G
IjsKKyAgICBjYXNlIFR5cGU6OkludmFsaWQ6CisgICAgICAgIHJldHVybiAiTEVYSU5HX0VSUk9S
IjsKICAgICB9CiB9CiAKQEAgLTM3MiwyOCArMzc2LDMxIEBAIGF1dG8gTGV4ZXI6OnJlY29nbml6
ZUtleXdvcmQodW5zaWduZWQgZW5kKSAtPiBPcHRpb25hbDxUb2tlbjo6VHlwZT4KICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogfQogCi1hdXRvIExleGVyOjpjb25zdW1lVG9rZW5Gcm9tU3RyZWFt
KCkgLT4gT3B0aW9uYWw8VG9rZW4+CithdXRvIExleGVyOjpjb25zdW1lVG9rZW5Gcm9tU3RyZWFt
KCkgLT4gVG9rZW4KIHsKLSAgICBhdXRvIHByZXBhcmUgPSBbJl0odW5zaWduZWQgbmV3T2Zmc2V0
LCBUb2tlbjo6VHlwZSB0eXBlKSAtPiBPcHRpb25hbDxUb2tlbj4geworICAgIGF1dG8gcHJlcGFy
ZSA9IFsmXSh1bnNpZ25lZCBuZXdPZmZzZXQsIFRva2VuOjpUeXBlIHR5cGUpIC0+IFRva2VuIHsK
ICAgICAgICAgYXV0byBvbGRPZmZzZXQgPSBtX29mZnNldDsKICAgICAgICAgbV9vZmZzZXQgPSBu
ZXdPZmZzZXQ7CiAgICAgICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKLSAgICAgICAg
cmV0dXJuIHt7IG1fc3RyaW5nVmlldy5zdWJzdHJpbmcob2xkT2Zmc2V0LCBuZXdPZmZzZXQgLSBv
bGRPZmZzZXQpLCBtX2xpbmVOdW1iZXIsIHR5cGUgfX07CisgICAgICAgIHJldHVybiB7IG9sZE9m
ZnNldCwgbmV3T2Zmc2V0LCB0eXBlIH07CiAgICAgfTsKIAorICAgIGlmIChhdXRvIG5ld09mZnNl
dCA9IGlkZW50aWZpZXIobV9vZmZzZXQpKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHJl
Y29nbml6ZUtleXdvcmQoKm5ld09mZnNldCkpIHsKKyAgICAgICAgICAgIGlmICgqcmVzdWx0ID09
IFRva2VuOjpUeXBlOjpPcGVyYXRvcikgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIG5ld2Vy
T2Zmc2V0ID0gY29tcGxldGVPcGVyYXRvck5hbWUoKm5ld09mZnNldCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdlck9mZnNldCwgVG9rZW46OlR5cGU6Ok9wZXJhdG9y
TmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zm
c2V0LCAqcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zm
c2V0LCBUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CisgICAgfQogICAgIGlmIChhdXRvIG5ld09m
ZnNldCA9IGZsb2F0TGl0ZXJhbChtX29mZnNldCkpCiAgICAgICAgIHJldHVybiBwcmVwYXJlKCpu
ZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpGbG9hdExpdGVyYWwpOwogICAgIGlmIChhdXRvIG5ld09m
ZnNldCA9IHVpbnRMaXRlcmFsKG1fb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5l
d09mZnNldCwgVG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsKTsKICAgICBpZiAoYXV0byBuZXdPZmZz
ZXQgPSBpbnRMaXRlcmFsKG1fb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09m
ZnNldCwgVG9rZW46OlR5cGU6OkludExpdGVyYWwpOwotICAgIGlmIChhdXRvIG5ld09mZnNldCA9
IG9wZXJhdG9yTmFtZShtX29mZnNldCkpCi0gICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZz
ZXQsIFRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWUpOwotICAgIGlmIChhdXRvIG5ld09mZnNldCA9
IGlkZW50aWZpZXIobV9vZmZzZXQpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlY29n
bml6ZUtleXdvcmQoKm5ld09mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3
T2Zmc2V0LCAqcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9r
ZW46OlR5cGU6OklkZW50aWZpZXIpOwotICAgIH0KICAgICAvLyBTb3J0ZWQgYnkgbGVuZ3RoLCBz
byBsb25nZXIgbWF0Y2hlcyBhcmUgcHJlZmVyYWJsZSB0byBzaG9ydGVyIG1hdGNoZXMuCiAgICAg
aWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCI+Pj0iLCBtX29mZnNldCkpCiAgICAgICAgIHJl
dHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpSaWdodFNoaWZ0RXF1YWxzKTsK
QEAgLTQ5MCwyMCArNDk3LDI4IEBAIGF1dG8gTGV4ZXI6OmNvbnN1bWVUb2tlbkZyb21TdHJlYW0o
KSAtPiBPcHRpb25hbDxUb2tlbj4KICAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIo
J0AnLCBtX29mZnNldCkpCiAgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2Vu
OjpUeXBlOjpBdCk7CiAKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmIChpc0Z1bGx5
Q29uc3VtZWQoKSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUobV9vZmZzZXQsIFRva2VuOjpUeXBl
OjpFbmRPZkZpbGUpOworICAgIHJldHVybiBwcmVwYXJlKG1fb2Zmc2V0LCBUb2tlbjo6VHlwZTo6
SW52YWxpZCk7CiB9CiAKLXZvaWQgTGV4ZXI6OnNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKQor
dW5zaWduZWQgTGV4ZXI6OmxpbmVOdW1iZXJGcm9tT2Zmc2V0KHVuc2lnbmVkIHRhcmdldE9mZnNl
dCkKIHsKLSAgICB1bnNpZ25lZCBzYXZlZE9mZnNldDsKLSAgICBkbyB7Ci0gICAgICAgIHNhdmVk
T2Zmc2V0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIHNr
aXBMaW5lQ29tbWVudCgpOwotICAgICAgICBza2lwTG9uZ0NvbW1lbnQoKTsKLSAgICB9IHdoaWxl
IChzYXZlZE9mZnNldCAhPSBtX29mZnNldCk7CisgICAgLy8gQ291bnRpbmcgZnJvbSAxIHRvIG1h
dGNoIG1vc3QgdGV4dCBlZGl0b3JzLgorICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIgPSAxOworICAg
IGZvciAodW5zaWduZWQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgdGFyZ2V0T2Zmc2V0OyArK29mZnNl
dCkgeworICAgICAgICBpZiAobV9zdHJpbmdWaWV3W29mZnNldF0gPT0gJ1xuJykKKyAgICAgICAg
ICAgICsrbGluZU51bWJlcjsKKyAgICB9CisgICAgcmV0dXJuIGxpbmVOdW1iZXI7CiB9CiAKKy8v
IFdlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0d28gcHJvcGVydGllcyBvZiBVbmljb2RlOgorLy8g
MS4gVGhlIGNvbnNpdHV0ZW50IFVURi0xNiBjb2RlIHVuaXRzIGZvciBhbGwgbm9uLUJNUCBjb2Rl
IHBvaW50cyBhcmUgc3Vycm9nYXRlcywKKy8vICAgICAgICB3aGljaCBtZWFucyB3ZSdsbCBuZXZl
ciBzZWUgYSBmYWxzZSBtYXRjaC4gSWYgd2Ugc2VlIGEgQk1QIGNvZGUgdW5pdCwgd2UKKy8vICAg
ICAgICByZWFsbHkgaGF2ZSBhIEJNUCBjb2RlIHBvaW50LgorLy8gMi4gRXZlcnl0aGluZyB3ZSdy
ZSBsb29raW5nIGZvciBpcyBpbiBCTVAKKwogc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVzcGFj
ZShVQ2hhciBjb2RlVW5pdCkKIHsKICAgICBzd2l0Y2ggKGNvZGVVbml0KSB7CkBAIC01MjgsNTMg
KzU0MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNvZGVVbml0KQog
ICAgIH0KIH0KIAotLy8gV2UgY2FuIHRha2UgYWR2YW50YWdlIG9mIHR3byBwcm9wZXJ0aWVzIG9m
IFVuaWNvZGU6Ci0vLyAxLiBUaGUgY29uc2l0dXRlbnQgVVRGLTE2IGNvZGUgdW5pdHMgZm9yIGFs
bCBub24tQk1QIGNvZGUgcG9pbnRzIGFyZSBzdXJyb2dhdGVzLAotLy8gICAgICAgIHdoaWNoIG1l
YW5zIHdlJ2xsIG5ldmVyIHNlZSBhIGZhbHNlIG1hdGNoLiBJZiB3ZSBzZWUgYSBCTVAgY29kZSB1
bml0LCB3ZQotLy8gICAgICAgIHJlYWxseSBoYXZlIGEgQk1QIGNvZGUgcG9pbnQuCi0vLyAyLiBF
dmVyeXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yIGlzIGluIEJNUAotCi12b2lkIExleGVyOjpza2lw
V2hpdGVzcGFjZSgpCi17Ci0gICAgZm9yICggOyBtX29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5n
dGgoKSAmJiBpc1doaXRlc3BhY2UobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSk7ICsrbV9vZmZzZXQp
IHsKLSAgICAgICAgaWYgKG1fc3RyaW5nVmlld1ttX29mZnNldF0gPT0gJ1xyJyAmJiBtX29mZnNl
dCArIDEgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W21fb2Zmc2V0ICsg
MV0gPT0gJ1xuJykgewotICAgICAgICAgICAgKyttX29mZnNldDsKLSAgICAgICAgICAgICsrbV9s
aW5lTnVtYmVyOwotICAgICAgICB9IGVsc2UgaWYgKGlzTmV3bGluZShtX3N0cmluZ1ZpZXdbbV9v
ZmZzZXRdKSkKLSAgICAgICAgICAgICsrbV9saW5lTnVtYmVyOwotICAgIH0KLX0KLQotdm9pZCBM
ZXhlcjo6c2tpcExpbmVDb21tZW50KCkKLXsKLSAgICBpZiAobV9vZmZzZXQgKyAxID49IG1fc3Ry
aW5nVmlldy5sZW5ndGgoKSB8fCBtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdICE9ICcvJyB8fCBtX3N0
cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSAhPSAnLycpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
b2Zmc2V0ICs9IDI7Ci0gICAgZm9yICggOyBtX29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgo
KSAmJiAhaXNOZXdsaW5lKG1fc3RyaW5nVmlld1ttX29mZnNldF0pOyArK21fb2Zmc2V0KSB7IH0K
LX0KLQotdm9pZCBMZXhlcjo6c2tpcExvbmdDb21tZW50KCkKK3ZvaWQgTGV4ZXI6OnNraXBXaGl0
ZXNwYWNlQW5kQ29tbWVudHMoKQogewotICAgIGlmIChtX29mZnNldCArIDEgPj0gbV9zdHJpbmdW
aWV3Lmxlbmd0aCgpIHx8IG1fc3RyaW5nVmlld1ttX29mZnNldF0gIT0gJy8nIHx8IG1fc3RyaW5n
Vmlld1ttX29mZnNldCArIDFdICE9ICcqJykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vZmZz
ZXQgKz0gMjsKLSAgICBkbyB7Ci0gICAgICAgIGZvciAoIDsgbV9vZmZzZXQgPCBtX3N0cmluZ1Zp
ZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W21fb2Zmc2V0XSAhPSAnKic7ICsrbV9vZmZzZXQp
IHsKLSAgICAgICAgICAgIGlmIChtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdID09ICdccicgJiYgbV9v
ZmZzZXQgKyAxIDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmlld1ttX29mZnNl
dCArIDFdID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICArK21fb2Zmc2V0OwotICAgICAgICAg
ICAgICAgICsrbV9saW5lTnVtYmVyOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc05ld2xpbmUo
bV9zdHJpbmdWaWV3W21fb2Zmc2V0XSkpCi0gICAgICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgp
KQotICAgICAgICAgICAgKyttX29mZnNldDsKLSAgICAgICAgaWYgKG1fb2Zmc2V0IDwgbV9zdHJp
bmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmlld1ttX29mZnNldF0gPT0gJy8nKSB7CisgICAg
d2hpbGUgKG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKSB7CisgICAgICAgIGlmIChp
c1doaXRlc3BhY2UobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSkpCiAgICAgICAgICAgICArK21fb2Zm
c2V0OworICAgICAgICBlbHNlIGlmIChtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdID09ICcvJyAmJiBt
X29mZnNldCArIDEgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIGlmICht
X3N0cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAvLyBM
aW5lIGNvbW1lbnQKKyAgICAgICAgICAgICAgICBtX29mZnNldCArPSAyOworICAgICAgICAgICAg
ICAgIC8vIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBcclxuIHRoaXMgbWFrZXMgdGhlIGNvbW1l
bnQgZW5kIG9uIHRoZSBcci4gSXQgaXMgZmluZSwgYXMgdGhlIFxuIGFmdGVyIHRoYXQgaXMgc2lt
cGxlIHdoaXRlc3BhY2UuCisgICAgICAgICAgICAgICAgZm9yICggOyBtX29mZnNldCA8IG1fc3Ry
aW5nVmlldy5sZW5ndGgoKSAmJiAhaXNOZXdsaW5lKG1fc3RyaW5nVmlld1ttX29mZnNldF0pOyAr
K21fb2Zmc2V0KSB7IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdHJpbmdWaWV3W21fb2Zm
c2V0ICsgMV0gPT0gJyonKSB7CisgICAgICAgICAgICAgICAgLy8gTG9uZyBjb21tZW50CisgICAg
ICAgICAgICAgICAgZm9yICggOyBtX29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSA7ICsr
bV9vZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3RyaW5nVmlld1ttX29mZnNl
dF0gPT0gJyonICYmIG1fb2Zmc2V0ICsgMSA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0
cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fb2Zmc2V0ICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKG1fb2Zm
c2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsKKyAgICB9CiB9CiAKIC8vIFJlZ3VsYXIgZXhw
cmVzc2lvbiBhcmUgdW5uZWNlc3Nhcnk7IHdlIHNob3VsZG4ndCBuZWVkIHRvIGNvbXBpbGUgdGhl
bS4KQEAgLTY3NiwxMiArNjY3LDkgQEAgT3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpkaWdpdCh1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAKIHVuc2lnbmVkIExleGVyOjpkaWdpdFN0YXIodW5zaWdu
ZWQgb2Zmc2V0KSBjb25zdAogewotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGF1dG8gcmVz
dWx0ID0gZGlnaXQob2Zmc2V0KTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAgICBy
ZXR1cm4gb2Zmc2V0OworICAgIHdoaWxlIChhdXRvIHJlc3VsdCA9IGRpZ2l0KG9mZnNldCkpCiAg
ICAgICAgIG9mZnNldCA9ICpyZXN1bHQ7Ci0gICAgfQorICAgIHJldHVybiBvZmZzZXQ7CiB9CiAK
IE9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6Y2hhcmFjdGVyKGNoYXIgY2hhcmFjdGVyLCB1bnNp
Z25lZCBvZmZzZXQpIGNvbnN0CkBAIC03NTQsNjggKzc0Miw2NiBAQCBPcHRpb25hbDx1bnNpZ25l
ZD4gTGV4ZXI6OmlkZW50aWZpZXIodW5zaWduZWQgb2Zmc2V0KSBjb25zdAogICAgIHJldHVybiB2
YWxpZElkZW50aWZpZXIob2Zmc2V0KTsKIH0KIAotT3B0aW9uYWw8dW5zaWduZWQ+IExleGVyOjpv
cGVyYXRvck5hbWUodW5zaWduZWQgb2Zmc2V0KSBjb25zdAorT3B0aW9uYWw8dW5zaWduZWQ+IExl
eGVyOjpjb21wbGV0ZU9wZXJhdG9yTmFtZSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7Ci0gICAg
aWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJvcGVyYXRvciYuIiwgb2Zmc2V0KSkKKyAgICAvLyBT
b3J0ZWQgYnkgbGVuZ3RoLCBzbyBsb25nZXIgbWF0Y2hlcyBhcmUgcHJlZmVyYWJsZSB0byBzaG9y
dGVyIG1hdGNoZXMuCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCImW10iLCBvZmZzZXQp
KQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygi
W109Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBzdHJpbmcoIj4+Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIjw8Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIisrIiwgb2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIi0tIiwgb2Zm
c2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJp
bmcoIiYmIiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBzdHJpbmcoInx8Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIj49Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIjw9Iiwgb2Zmc2V0KSkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIj09Iiwg
b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBz
dHJpbmcoIltdIiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0
byByZXN1bHQgPSBzdHJpbmcoIiYuIiwgb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHZhbGlkSWRl
bnRpZmllcigqcmVzdWx0KTsKLSAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIm9wZXJhdG9y
LiIsIG9mZnNldCkpIHsKLSAgICAgICAgaWYgKChyZXN1bHQgPSB2YWxpZElkZW50aWZpZXIoKnJl
c3VsdCkpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCc9Jywg
KnJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgICAgICBy
ZXR1cm4gKnJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0ZXIoJysnLCBvZmZz
ZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJh
Y3RlcignLScsIG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8g
cmVzdWx0ID0gY2hhcmFjdGVyKCcqJywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0ZXIoJy8nLCBvZmZzZXQpKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJhY3RlcignJScsIG9mZnNl
dCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hhcmFj
dGVyKCc8Jywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBjaGFyYWN0ZXIoJz4nLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJhY3RlcignIScsIG9mZnNldCkpCisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCd+Jywgb2Zmc2V0
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0
ZXIoJyYnLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJl
c3VsdCA9IGNoYXJhY3RlcignXicsIG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCd8Jywgb2Zmc2V0KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0ZXIoJy4nLCBvZmZzZXQp
KSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSB2YWxpZElkZW50aWZpZXIoKnJlc3VsdCkp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdDMgPSBjaGFyYWN0ZXIoJz0nLCAqcmVzdWx0
MikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDM7CisgICAgICAgICAgICByZXR1cm4g
KnJlc3VsdDI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5n
KCJvcGVyYXRvciIsIG9mZnNldCkpIHsKLSAgICAgICAgLy8gU29ydGVkIGJ5IGxlbmd0aCwgc28g
bG9uZ2VyIG1hdGNoZXMgYXJlIHByZWZlcmFibGUgdG8gc2hvcnRlciBtYXRjaGVzLgotICAgICAg
ICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCImW10iLCAqcmVzdWx0KSkKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCJbXT0i
LCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0
byByZXN1bHQyID0gc3RyaW5nKCI+PiIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIjw8IiwgKnJlc3VsdCkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9
IHN0cmluZygiKysiLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAg
ICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCItLSIsICpyZXN1bHQpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIiYm
IiwgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1
dG8gcmVzdWx0MiA9IHN0cmluZygifHwiLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCI+PSIsICpyZXN1bHQp
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIg
PSBzdHJpbmcoIjw9IiwgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiPT0iLCAqcmVzdWx0KSkKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCJb
XSIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChh
dXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJysnLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCctJywgKnJl
c3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVz
dWx0MiA9IGNoYXJhY3RlcignKicsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJy8nLCAqcmVzdWx0KSkK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0g
Y2hhcmFjdGVyKCclJywgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignPCcsICpyZXN1bHQpKQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0
ZXIoJz4nLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBp
ZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCchJywgKnJlc3VsdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3Rlcignfics
ICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRv
IHJlc3VsdDIgPSBjaGFyYWN0ZXIoJyYnLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCdeJywgKnJlc3Vs
dCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0
MiA9IGNoYXJhY3RlcignfCcsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7
Ci0gICAgfQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaAppbmRleCA0ZjIxM2QxOWI1MDY1
Zjc0NzhhNGI5N2NhZWI2ZGY4ZjQ3NDA0ZTVmLi5lMmUyMmFhOGYxMmJkNjE1N2I2YWFlYzUwMDhl
MmRhOWUxZTFlMjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTExleGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMZXhlci5oCkBAIC00Niw5ICs0Niw3IEBAIHB1YmxpYzoKICAgICAgICAgOiBtX3N0
cmluZ1ZpZXcoc3RyaW5nVmlldykKICAgICB7CiAgICAgICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29t
bWVudHMoKTsKLSAgICAgICAgbV9vZmZzZXRSaW5nQnVmZmVyWzBdID0gbV9vZmZzZXQ7CiAgICAg
ICAgIG1fcmluZ0J1ZmZlclswXSA9IGNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKTsKLSAgICAgICAg
bV9vZmZzZXRSaW5nQnVmZmVyWzFdID0gbV9vZmZzZXQ7CiAgICAgICAgIG1fcmluZ0J1ZmZlclsx
XSA9IGNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKTsKICAgICB9CiAKQEAgLTU5LDE1ICs1Nyw5IEBA
IHB1YmxpYzoKICAgICBMZXhlciYgb3BlcmF0b3I9KExleGVyJiYpID0gZGVmYXVsdDsKIAogICAg
IHN0cnVjdCBUb2tlbiB7Ci0gICAgICAgIFRva2VuKCkgPSBkZWxldGU7Ci0gICAgICAgIFRva2Vu
KGNvbnN0IFRva2VuJikgPSBkZWZhdWx0OwotICAgICAgICBUb2tlbihUb2tlbiYmKSA9IGRlZmF1
bHQ7Ci0gICAgICAgIFRva2VuJiBvcGVyYXRvcj0oY29uc3QgVG9rZW4mKSA9IGRlZmF1bHQ7Ci0g
ICAgICAgIFRva2VuJiBvcGVyYXRvcj0oVG9rZW4mJikgPSBkZWZhdWx0OwotCi0gICAgICAgIFN0
cmluZ1ZpZXcgc3RyaW5nVmlldzsKLSAgICAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKLSAgICAg
ICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CisgICAg
ICAgIHVuc2lnbmVkIGVuZE9mZnNldDsKKyAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhf
dCB7CiAgICAgICAgICAgICBJbnRMaXRlcmFsLAogICAgICAgICAgICAgVWludExpdGVyYWwsCiAg
ICAgICAgICAgICBGbG9hdExpdGVyYWwsCkBAIC0xNzQsNDAgKzE2Niw0MiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBUaWxkZSwKICAgICAgICAgICAgIEV4Y2xhbWF0aW9uUG9pbnQsCiAgICAgICAg
ICAgICBBdCwKLSAgICAgICAgfSB0eXBlOworICAgICAgICAgICAgRW5kT2ZGaWxlLAorICAgICAg
ICAgICAgSW52YWxpZAorICAgICAgICB9IHR5cGUge1R5cGU6OkludmFsaWR9OwogCiAgICAgICAg
IHN0YXRpYyBjb25zdCBjaGFyKiB0eXBlTmFtZShUeXBlKTsKKworICAgICAgICBjb25zdCBTdHJp
bmdWaWV3IHN0cmluZ1ZpZXcoY29uc3QgTGV4ZXImIGxleGVyKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbGV4ZXIubV9zdHJpbmdWaWV3LnN1YnN0cmluZyhzdGFydE9mZnNldCwgZW5k
T2Zmc2V0IC0gc3RhcnRPZmZzZXQpOworICAgICAgICB9CiAgICAgfTsKIAotICAgIE9wdGlvbmFs
PFRva2VuPiBjb25zdW1lVG9rZW4oKQorICAgIFRva2VuIGNvbnN1bWVUb2tlbigpCiAgICAgewog
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1fcmluZ0J1ZmZlclttX3JpbmdCdWZmZXJJbmRleF07Ci0g
ICAgICAgIG1fb2Zmc2V0UmluZ0J1ZmZlclttX3JpbmdCdWZmZXJJbmRleF0gPSBtX29mZnNldDsK
ICAgICAgICAgbV9yaW5nQnVmZmVyW21fcmluZ0J1ZmZlckluZGV4XSA9IGNvbnN1bWVUb2tlbkZy
b21TdHJlYW0oKTsKICAgICAgICAgbV9yaW5nQnVmZmVySW5kZXggPSAobV9yaW5nQnVmZmVySW5k
ZXggKyAxKSAlIDI7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgT3B0aW9u
YWw8VG9rZW4+IHBlZWsoKSBjb25zdAorICAgIFRva2VuIHBlZWsoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fcmluZ0J1ZmZlclttX3JpbmdCdWZmZXJJbmRleF07CiAgICAgfQogCi0g
ICAgT3B0aW9uYWw8VG9rZW4+IHBlZWtGdXJ0aGVyKCkgY29uc3QKKyAgICBUb2tlbiBwZWVrRnVy
dGhlcigpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9yaW5nQnVmZmVyWyhtX3JpbmdC
dWZmZXJJbmRleCArIDEpICUgMl07CiAgICAgfQogCi0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IHBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRSaW5nQnVmZmVyW21fcmluZ0J1ZmZlcklu
ZGV4XTsgfQotCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVlZCB0aGlzCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODM1NwogICAgIHN0cnVj
dCBTdGF0ZSB7Ci0gICAgICAgIE9wdGlvbmFsPFRva2VuPiByaW5nQnVmZmVyWzJdOwotICAgICAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gbV9vZmZzZXRSaW5nQnVmZmVyWzJdOworICAgICAgICBUb2tl
biByaW5nQnVmZmVyWzJdOwogICAgICAgICB1bnNpZ25lZCByaW5nQnVmZmVySW5kZXg7CiAgICAg
ICAgIHVuc2lnbmVkIG9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKICAgICB9
OwogCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdApAQCAtMjE1LDExICsyMDksOCBAQCBwdWJsaWM6
CiAgICAgICAgIFN0YXRlIHN0YXRlOwogICAgICAgICBzdGF0ZS5yaW5nQnVmZmVyWzBdID0gbV9y
aW5nQnVmZmVyWzBdOwogICAgICAgICBzdGF0ZS5yaW5nQnVmZmVyWzFdID0gbV9yaW5nQnVmZmVy
WzFdOwotICAgICAgICBzdGF0ZS5tX29mZnNldFJpbmdCdWZmZXJbMF0gPSBtX29mZnNldFJpbmdC
dWZmZXJbMF07Ci0gICAgICAgIHN0YXRlLm1fb2Zmc2V0UmluZ0J1ZmZlclsxXSA9IG1fb2Zmc2V0
UmluZ0J1ZmZlclsxXTsKICAgICAgICAgc3RhdGUucmluZ0J1ZmZlckluZGV4ID0gbV9yaW5nQnVm
ZmVySW5kZXg7CiAgICAgICAgIHN0YXRlLm9mZnNldCA9IG1fb2Zmc2V0OwotICAgICAgICBzdGF0
ZS5saW5lTnVtYmVyID0gbV9saW5lTnVtYmVyOwogICAgICAgICByZXR1cm4gc3RhdGU7CiAgICAg
fQogCkBAIC0yMjcsMTEgKzIxOCw4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcmluZ0J1
ZmZlclswXSA9IHN0YXRlLnJpbmdCdWZmZXJbMF07CiAgICAgICAgIG1fcmluZ0J1ZmZlclsxXSA9
IHN0YXRlLnJpbmdCdWZmZXJbMV07Ci0gICAgICAgIG1fb2Zmc2V0UmluZ0J1ZmZlclswXSA9IHN0
YXRlLm1fb2Zmc2V0UmluZ0J1ZmZlclswXTsKLSAgICAgICAgbV9vZmZzZXRSaW5nQnVmZmVyWzFd
ID0gc3RhdGUubV9vZmZzZXRSaW5nQnVmZmVyWzFdOwogICAgICAgICBtX3JpbmdCdWZmZXJJbmRl
eCA9IHN0YXRlLnJpbmdCdWZmZXJJbmRleDsKICAgICAgICAgbV9vZmZzZXQgPSBzdGF0ZS5vZmZz
ZXQ7Ci0gICAgICAgIG1fbGluZU51bWJlciA9IHN0YXRlLmxpbmVOdW1iZXI7CiAKICAgICB9CiAK
QEAgLTIzOSwzMCArMjI3LDI2IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcmluZ0J1ZmZl
clswXSA9IFdURk1vdmUoc3RhdGUucmluZ0J1ZmZlclswXSk7CiAgICAgICAgIG1fcmluZ0J1ZmZl
clsxXSA9IFdURk1vdmUoc3RhdGUucmluZ0J1ZmZlclsxXSk7Ci0gICAgICAgIG1fb2Zmc2V0Umlu
Z0J1ZmZlclswXSA9IFdURk1vdmUoc3RhdGUubV9vZmZzZXRSaW5nQnVmZmVyWzBdKTsKLSAgICAg
ICAgbV9vZmZzZXRSaW5nQnVmZmVyWzFdID0gV1RGTW92ZShzdGF0ZS5tX29mZnNldFJpbmdCdWZm
ZXJbMV0pOwogICAgICAgICBtX3JpbmdCdWZmZXJJbmRleCA9IFdURk1vdmUoc3RhdGUucmluZ0J1
ZmZlckluZGV4KTsKICAgICAgICAgbV9vZmZzZXQgPSBXVEZNb3ZlKHN0YXRlLm9mZnNldCk7Ci0g
ICAgICAgIG1fbGluZU51bWJlciA9IFdURk1vdmUoc3RhdGUubGluZU51bWJlcik7CiAgICAgfQog
CiAgICAgYm9vbCBpc0Z1bGx5Q29uc3VtZWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
ICFwZWVrKCk7CisgICAgICAgIHJldHVybiBwZWVrKCkudHlwZSA9PSBUb2tlbjo6VHlwZTo6RW5k
T2ZGaWxlOwogICAgIH0KIAogICAgIFN0cmluZyBlcnJvclN0cmluZyhjb25zdCBUb2tlbiYgdG9r
ZW4sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJQYXJzZSBlcnJvciBhdCBsaW5lICIsIHRva2VuLmxpbmVOdW1iZXIsICI6ICIsIG1lc3Nh
Z2UpOworICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiUGFyc2UgZXJyb3IgYXQgbGluZSAiLCBs
aW5lTnVtYmVyRnJvbU9mZnNldCh0b2tlbi5zdGFydE9mZnNldCksICI6ICIsIG1lc3NhZ2UpOwog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICBPcHRpb25hbDxUb2tlbj4gY29uc3VtZVRva2VuRnJvbVN0
cmVhbSgpOworICAgIFRva2VuIGNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKTsKIAogICAgIHZvaWQg
c2tpcFdoaXRlc3BhY2VBbmRDb21tZW50cygpOwotICAgIHZvaWQgc2tpcFdoaXRlc3BhY2UoKTsK
LSAgICB2b2lkIHNraXBMaW5lQ29tbWVudCgpOwotICAgIHZvaWQgc2tpcExvbmdDb21tZW50KCk7
CisKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyRnJvbU9mZnNldCh1bnNpZ25lZCBvZmZzZXQpOwog
CiAgICAgT3B0aW9uYWw8VG9rZW46OlR5cGU+IHJlY29nbml6ZUtleXdvcmQodW5zaWduZWQgZW5k
KTsKIApAQCAtMjc3LDQzICsyNjEsMzEgQEAgcHJpdmF0ZToKICAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gZGlnaXQodW5zaWduZWQpIGNvbnN0OwogICAgIHVuc2lnbmVkIGRpZ2l0U3Rhcih1bnNpZ25l
ZCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGNoYXJhY3RlcihjaGFyLCB1bnNpZ25l
ZCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBPcHRpb25hbDx1bnNpZ25l
ZD4gYW55Q2hhcmFjdGVyKGNvbnN0IGNoYXIgKCZzdHJpbmcpW2xlbmd0aF0sIHVuc2lnbmVkKSBj
b25zdDsKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gY29yZUZsb2F0TGl0ZXJhbFR5cGUxKHVuc2ln
bmVkKSBjb25zdDsKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gY29yZUZsb2F0TGl0ZXJhbCh1bnNp
Z25lZCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGZsb2F0TGl0ZXJhbCh1bnNpZ25l
ZCkgY29uc3Q7CiAgICAgdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBPcHRpb25hbDx1bnNpZ25l
ZD4gc3RyaW5nKGNvbnN0IGNoYXIgKCZzdHJpbmcpW2xlbmd0aF0sIHVuc2lnbmVkKSBjb25zdDsK
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gdmFsaWRJZGVudGlmaWVyKHVuc2lnbmVkKSBjb25zdDsK
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gaWRlbnRpZmllcih1bnNpZ25lZCkgY29uc3Q7Ci0gICAg
T3B0aW9uYWw8dW5zaWduZWQ+IG9wZXJhdG9yTmFtZSh1bnNpZ25lZCkgY29uc3Q7CisgICAgT3B0
aW9uYWw8dW5zaWduZWQ+IGNvbXBsZXRlT3BlcmF0b3JOYW1lKHVuc2lnbmVkKSBjb25zdDsKIAog
ICAgIFN0cmluZ1ZpZXcgbV9zdHJpbmdWaWV3OwotICAgIE9wdGlvbmFsPFRva2VuPiBtX3JpbmdC
dWZmZXJbMl07Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fb2Zmc2V0UmluZ0J1ZmZlclsyXTsK
KyAgICBUb2tlbiBtX3JpbmdCdWZmZXJbMl07CiAgICAgdW5zaWduZWQgbV9yaW5nQnVmZmVySW5k
ZXggeyAwIH07CiAgICAgdW5zaWduZWQgbV9vZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQgbV9s
aW5lTnVtYmVyIHsgMCB9OwogfTsKIAogdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBPcHRpb25h
bDx1bnNpZ25lZD4gTGV4ZXI6OnN0cmluZyhjb25zdCBjaGFyICgmc3RyaW5nKVtsZW5ndGhdLCB1
bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CisgICAgaWYgKG9mZnNldCArIGxlbmd0aCA+IG1fc3Ry
aW5nVmlldy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgKytpKSB7Ci0gICAgICAgIGlmIChvZmZz
ZXQgKyBpID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSB8fCBtX3N0cmluZ1ZpZXdbb2Zmc2V0ICsg
aV0gIT0gc3RyaW5nW2ldKQorICAgICAgICBpZiAobV9zdHJpbmdWaWV3W29mZnNldCArIGldICE9
IHN0cmluZ1tpXSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogICAg
IHJldHVybiBvZmZzZXQgKyBsZW5ndGggLSAxOwogfQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBsZW5n
dGg+IE9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6YW55Q2hhcmFjdGVyKGNvbnN0IGNoYXIgKCZz
dHJpbmcpW2xlbmd0aF0sIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKLXsKLSAgICBpZiAob2Zmc2V0
ID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgKytpKSB7Ci0gICAgICAg
IGlmIChtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA9PSBzdHJpbmdbaV0pCi0gICAgICAgICAgICByZXR1
cm4gb2Zmc2V0ICsgMTsKLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQogfSAv
LyBuYW1lc3BhY2UgV0hMU0wKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgK
aW5kZXggMTNmMjEwYmZjNWJiZDRhOTgwYTc2OWZiZDNlZmM4MTdiOTcyMzFlMS4uOTIzN2IzN2Zl
ZWI2YTE4ZWMyZDBiMjEyZWQwZTk4NGQwOTE2OWM3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCkBAIC00NCwx
NCArNDQsMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+TmFtZVJlc29sdmVyKCk7CiAKLSAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7Ci0KICAgICB2
b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24q
IGZ1bmN0aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0g
ZnVuY3Rpb25EZWZpbml0aW9uOwogICAgIH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6Ok5h
dGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6
VHlwZVJlZmVyZW5jZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpCbG9jayYpIG92
ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwCmluZGV4IDQwZjI2OWRmMWUzMDg1MDViNTk3MjBiMjNlNzJiNjc1MmE2NGYw
OGIuLjIyYjFhOWI4OTMwNmUwMDlhMGY0Zjg0MTI1NjRlNGVhZDdmZTE1YTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKQEAg
LTY2LDkgKzY2LDkgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmlu
Z1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb24KIAogICAgIHdoaWxlICghbV9s
ZXhlci5pc0Z1bGx5Q29uc3VtZWQoKSkgewogICAgICAgICBhdXRvIHRva2VuID0gbV9sZXhlci5w
ZWVrKCk7Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
c3dpdGNoICh0b2tlbi0+dHlwZSkgeworICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsKKyAg
ICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkludmFsaWQ6CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNv
bG9uOgogICAgICAgICAgICAgbV9sZXhlci5jb25zdW1lVG9rZW4oKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTM1LDc1ICsxMzUsOTQgQEAgYXV0byBQYXJzZXI6OmZhaWwoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBUcnlUb1BlZWsgdHJ5VG9QZWVrKSAtPiBVbmV4cGVjdGVkPEVycm8KIAog
YXV0byBQYXJzZXI6OnBlZWsoKSAtPiBFeHBlY3RlZDxMZXhlcjo6VG9rZW4sIEVycm9yPgogewot
ICAgIGlmIChhdXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCkpIHsKLSAgICAgICAgcmV0dXJuICp0
b2tlbjsKLSAgICB9CisgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygpOworICAgIGlmICh0
b2tlbi50eXBlICE9IExleGVyOjpUb2tlbjo6VHlwZTo6SW52YWxpZCAmJiB0b2tlbi50eXBlICE9
IExleGVyOjpUb2tlbjo6VHlwZTo6RW5kT2ZGaWxlKQorICAgICAgICByZXR1cm4geyB0b2tlbiB9
OwogICAgIHJldHVybiBmYWlsKCJDYW5ub3QgY29uc3VtZSB0b2tlbiJfc3RyLCBUcnlUb1BlZWs6
Ok5vKTsKIH0KIAogYXV0byBQYXJzZXI6OnBlZWtGdXJ0aGVyKCkgLT4gRXhwZWN0ZWQ8TGV4ZXI6
OlRva2VuLCBFcnJvcj4KIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVla0Z1cnRo
ZXIoKSkgewotICAgICAgICByZXR1cm4gKnRva2VuOwotICAgIH0KKyAgICBhdXRvIHRva2VuID0g
bV9sZXhlci5wZWVrRnVydGhlcigpOworICAgIGlmICh0b2tlbi50eXBlICE9IExleGVyOjpUb2tl
bjo6VHlwZTo6SW52YWxpZCAmJiB0b2tlbi50eXBlICE9IExleGVyOjpUb2tlbjo6VHlwZTo6RW5k
T2ZGaWxlKQorICAgICAgICByZXR1cm4geyB0b2tlbiB9OwogICAgIHJldHVybiBmYWlsKCJDYW5u
b3QgY29uc3VtZSB0d28gdG9rZW5zIl9zdHIsIFRyeVRvUGVlazo6Tm8pOwogfQogCi1ib29sIFBh
cnNlcjo6cGVla1R5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6VG9rZW46OlR5cGU+JiB0eXBlcykK
K3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUgdCwgTGV4ZXI6OlRva2VuOjpUeXBlLi4uIHRz
Pgorc3RydWN0IFR5cGVzIHsKKyAgICBzdGF0aWMgYm9vbCBpbmNsdWRlcyhMZXhlcjo6VG9rZW46
OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0ID09IHR5cGUgfHwgVHlwZXM8dHMu
Li4+OjppbmNsdWRlcyh0eXBlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmROYW1l
VG8oU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKKyAgICB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KExleGVyOjpUb2tlbjo6dHlwZU5hbWUodCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAi
KTsKKyAgICAgICAgVHlwZXM8dHMuLi4+OjphcHBlbmROYW1lVG8oYnVpbGRlcik7CisgICAgfQor
fTsKK3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUgdD4KK3N0cnVjdCBUeXBlczx0PiB7Cisg
ICAgc3RhdGljIGJvb2wgaW5jbHVkZXMoTGV4ZXI6OlRva2VuOjpUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gdCA9PSB0eXBlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGVu
ZE5hbWVUbyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQorICAgIHsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0KSk7CisgICAgfQorfTsKKwordGVtcGxhdGUg
PExleGVyOjpUb2tlbjo6VHlwZS4uLiB0eXBlcz4KK2Jvb2wgUGFyc2VyOjpwZWVrVHlwZXMoKQog
ewotICAgIGlmIChhdXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCkpCi0gICAgICAgIHJldHVybiBz
dGQ6OmZpbmQodHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIHRva2VuLT50eXBlKSAhPSB0eXBl
cy5lbmQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVl
aygpOworICAgIHJldHVybiBUeXBlczx0eXBlcy4uLj46OmluY2x1ZGVzKHRva2VuLnR5cGUpOwog
fQogCiBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IFBhcnNlcjo6dHJ5VHlwZShMZXhlcjo6VG9rZW46
OlR5cGUgdHlwZSkKIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygpKSB7Ci0g
ICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSB0eXBlKQotICAgICAgICAgICAgcmV0dXJuIG1fbGV4
ZXIuY29uc3VtZVRva2VuKCk7Ci0gICAgfQorICAgIGF1dG8gdG9rZW4gPSBtX2xleGVyLnBlZWso
KTsKKyAgICBpZiAodG9rZW4udHlwZSA9PSB0eXBlKQorICAgICAgICByZXR1cm4geyBtX2xleGVy
LmNvbnN1bWVUb2tlbigpIH07CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotT3B0aW9u
YWw8TGV4ZXI6OlRva2VuPiBQYXJzZXI6OnRyeVR5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6VG9r
ZW46OlR5cGU+JiB0eXBlcykKK3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUuLi4gdHlwZXM+
CitPcHRpb25hbDxMZXhlcjo6VG9rZW4+IFBhcnNlcjo6dHJ5VHlwZXMoKQogewotICAgIGlmIChh
dXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6ZmluZCh0eXBl
cy5iZWdpbigpLCB0eXBlcy5lbmQoKSwgdG9rZW4tPnR5cGUpICE9IHR5cGVzLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7Ci0gICAgfQorICAgIGF1dG8g
dG9rZW4gPSBtX2xleGVyLnBlZWsoKTsKKyAgICBpZiAoVHlwZXM8dHlwZXMuLi4+OjppbmNsdWRl
cyh0b2tlbi50eXBlKSkKKyAgICAgICAgcmV0dXJuIHsgbV9sZXhlci5jb25zdW1lVG9rZW4oKSB9
OwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIGF1dG8gUGFyc2VyOjpjb25zdW1lVHlw
ZShMZXhlcjo6VG9rZW46OlR5cGUgdHlwZSkgLT4gRXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJv
cj4KIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCkpIHsKLSAg
ICAgICAgaWYgKHRva2VuLT50eXBlID09IHR5cGUpCi0gICAgICAgICAgICByZXR1cm4gKnRva2Vu
OwotICAgICAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCJVbmV4cGVjdGVkIHRva2VuIChleHBl
Y3RlZCAiLCBMZXhlcjo6VG9rZW46OnR5cGVOYW1lKHR5cGUpLCAiIGdvdCAiLCBMZXhlcjo6VG9r
ZW46OnR5cGVOYW1lKHRva2VuLT50eXBlKSwgIikiKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWls
KG1ha2VTdHJpbmcoIkNhbm5vdCBjb25zdW1lIHRva2VuIChleHBlY3RlZCAiLCBMZXhlcjo6VG9r
ZW46OnR5cGVOYW1lKHR5cGUpLCAiKSIpKTsKKyAgICBhdXRvIHRva2VuID0gbV9sZXhlci5jb25z
dW1lVG9rZW4oKTsKKyAgICBpZiAodG9rZW4udHlwZSA9PSB0eXBlKQorICAgICAgICByZXR1cm4g
eyB0b2tlbiB9OworICAgIHJldHVybiBmYWlsKG1ha2VTdHJpbmcoIlVuZXhwZWN0ZWQgdG9rZW4g
KGV4cGVjdGVkICIsIExleGVyOjpUb2tlbjo6dHlwZU5hbWUodHlwZSksICIgZ290ICIsIExleGVy
OjpUb2tlbjo6dHlwZU5hbWUodG9rZW4udHlwZSksICIpIikpOwogfQogCi1hdXRvIFBhcnNlcjo6
Y29uc3VtZVR5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6VG9rZW46OlR5cGU+JiB0eXBlcykgLT4g
RXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4KK3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5
cGUuLi4gdHlwZXM+CithdXRvIFBhcnNlcjo6Y29uc3VtZVR5cGVzKCkgLT4gRXhwZWN0ZWQ8TGV4
ZXI6OlRva2VuLCBFcnJvcj4KIHsKICAgICBhdXRvIGJ1aWxkRXhwZWN0ZWRTdHJpbmcgPSBbJl0o
KSAtPiBTdHJpbmcgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCJbIik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBl
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoTGV4ZXI6
OlRva2VuOjp0eXBlTmFtZSh0eXBlc1tpXSkpOwotICAgICAgICB9CisgICAgICAgIFR5cGVzPHR5
cGVzLi4uPjo6YXBwZW5kTmFtZVRvKGJ1aWxkZXIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgi
XSIpOwogICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogICAgIH07CiAKLSAgICBp
ZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCkpIHsKLSAgICAgICAgaWYgKHN0
ZDo6ZmluZCh0eXBlcy5iZWdpbigpLCB0eXBlcy5lbmQoKSwgdG9rZW4tPnR5cGUpICE9IHR5cGVz
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuICp0b2tlbjsKLSAgICAgICAgcmV0dXJuIGZhaWwo
bWFrZVN0cmluZygiVW5leHBlY3RlZCB0b2tlbiAoZXhwZWN0ZWQgb25lIG9mICIsIGJ1aWxkRXhw
ZWN0ZWRTdHJpbmcoKSwgIiBnb3QgIiwgTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0b2tlbi0+dHlw
ZSksICIpIikpOwotICAgIH0KLSAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCJDYW5ub3QgY29u
c3VtZSB0b2tlbiAoZXhwZWN0ZWQgIiwgYnVpbGRFeHBlY3RlZFN0cmluZygpLCAiKSIpKTsKKyAg
ICBhdXRvIHRva2VuID0gbV9sZXhlci5jb25zdW1lVG9rZW4oKTsKKyAgICBpZiAoVHlwZXM8dHlw
ZXMuLi4+OjppbmNsdWRlcyh0b2tlbi50eXBlKSkKKyAgICAgICAgcmV0dXJuIHsgdG9rZW4gfTsK
KyAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCJVbmV4cGVjdGVkIHRva2VuIChleHBlY3RlZCBv
bmUgb2YgIiwgYnVpbGRFeHBlY3RlZFN0cmluZygpLCAiIGdvdCAiLCBMZXhlcjo6VG9rZW46OnR5
cGVOYW1lKHRva2VuLnR5cGUpLCAiKSIpKTsKIH0KIAogc3RhdGljIGludCBkaWdpdFZhbHVlKFVD
aGFyIGNoYXJhY3RlcikKQEAgLTI3OSwyMCArMjk4LDIwIEBAIHN0YXRpYyBFeHBlY3RlZDxmbG9h
dCwgUGFyc2VyOjpFcnJvcj4gZmxvYXRMaXRlcmFsVG9GbG9hdChTdHJpbmdWaWV3IHRleHQpCiAK
IGF1dG8gUGFyc2VyOjpjb25zdW1lSW50ZWdyYWxMaXRlcmFsKCkgLT4gRXhwZWN0ZWQ8VmFyaWFu
dDxpbnQsIHVuc2lnbmVkPiwgRXJyb3I+CiB7Ci0gICAgYXV0byBpbnRlZ3JhbExpdGVyYWxUb2tl
biA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbCB9KTsKKyAgICBhdXRvIGludGVncmFsTGl0ZXJhbFRv
a2VuID0gY29uc3VtZVR5cGVzPExleGVyOjpUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbD4oKTsKICAgICBpZiAoIWludGVncmFsTGl0ZXJhbFRv
a2VuKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oaW50ZWdyYWxMaXRlcmFsVG9r
ZW4uZXJyb3IoKSk7CiAKICAgICBzd2l0Y2ggKGludGVncmFsTGl0ZXJhbFRva2VuLT50eXBlKSB7
CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkludExpdGVyYWw6IHsKLSAgICAgICAgYXV0
byByZXN1bHQgPSBpbnRMaXRlcmFsVG9JbnQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1Zp
ZXcpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGludExpdGVyYWxUb0ludChpbnRlZ3JhbExpdGVy
YWxUb2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAg
ICAgICAgICByZXR1cm4ge3sgKnJlc3VsdCB9fTsKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHJlc3VsdC5lcnJvcigpKTsKICAgICB9CiAgICAgZGVmYXVsdDogewogICAgICAgICBB
U1NFUlQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnR5cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpV
aW50TGl0ZXJhbCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gdWludExpdGVyYWxUb1VpbnQoaW50
ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1ZpZXcpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHVp
bnRMaXRlcmFsVG9VaW50KGludGVncmFsTGl0ZXJhbFRva2VuLT5zdHJpbmdWaWV3KG1fbGV4ZXIp
KTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB7eyAqcmVzdWx0IH19
OwogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOwpAQCAt
MzM1LDMzICszNTQsMzIgQEAgc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVkLCBQYXJzZXI6OkVycm9y
PiByZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIoU3RyaW5nVmkKIAogYXV0byBQYXJzZXI6
OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpDb25zdGFudEV4cHJl
c3Npb24sIEVycm9yPgogewotICAgIGF1dG8gdHlwZSA9IGNvbnN1bWVUeXBlcyh7CisgICAgYXV0
byB0eXBlID0gY29uc3VtZVR5cGVzPAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkludExp
dGVyYWwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVyYWwsCiAgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6RmxvYXRMaXRlcmFsLAogICAgICAgICBMZXhlcjo6VG9rZW46
OlR5cGU6Ok51bGwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VHJ1ZSwKICAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpGYWxzZSwKLSAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpJ
ZGVudGlmaWVyLAotICAgIH0pOworICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZp
ZXI+KCk7CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
dHlwZS5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAodHlwZS0+dHlwZSkgewogICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBpbnRM
aXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBpbnRM
aXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICghdmFs
dWUpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7
CiAgICAgICAgIHJldHVybiB7eyBBU1Q6OkludGVnZXJMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAq
dmFsdWUpIH19OwogICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVy
YWw6IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHVpbnRMaXRlcmFsVG9VaW50KHR5cGUtPnN0cmlu
Z1ZpZXcpOworICAgICAgICBhdXRvIHZhbHVlID0gdWludExpdGVyYWxUb1VpbnQodHlwZS0+c3Ry
aW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7eyBB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwoV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfX07CiAg
ICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpGbG9hdExpdGVyYWw6IHsKLSAgICAg
ICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxvYXQodHlwZS0+c3RyaW5nVmlldyk7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBmbG9hdExpdGVyYWxUb0Zsb2F0KHR5cGUtPnN0cmluZ1ZpZXco
bV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4ge3sgQVNUOjpGbG9h
dExpdGVyYWwoV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfX07CkBAIC0zNzYsNyArMzk0LDcgQEAg
YXV0byBQYXJzZXI6OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24sIEVycm8KICAgICAgICAgQVNTRVJUKHR5cGUtPnR5cGUgPT0gTGV4
ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKG9yaWdp
biwgRnVsbFN0b3ApOwogICAgICAgICBDT05TVU1FX1RZUEUobmV4dCwgSWRlbnRpZmllcik7Ci0g
ICAgICAgIHJldHVybiB7IEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUoKm9y
aWdpbiksIHR5cGUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgbmV4dC0+c3RyaW5nVmlldy50b1N0
cmluZygpKSB9OworICAgICAgICByZXR1cm4geyBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bChXVEZNb3ZlKCpvcmlnaW4pLCB0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCks
IG5leHQtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSkgfTsKICAgICB9CiAgICAgfQog
fQpAQCAtMzkwLDcgKzQwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudCgpIC0+
IEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50LCBFcnJvcj4KICAgICAgICAgcmV0dXJuIEFTVDo6
VHlwZUFyZ3VtZW50KFdURk1vdmUoKmNvbnN0YW50RXhwcmVzc2lvbikpOwogICAgIH0KICAgICBD
T05TVU1FX1RZUEUocmVzdWx0LCBJZGVudGlmaWVyKTsKLSAgICByZXR1cm4gQVNUOjpUeXBlQXJn
dW1lbnQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tlbigqcmVz
dWx0KSwgcmVzdWx0LT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIEFTVDo6VHlwZUFyZ3VtZW50cygp
KSk7CisgICAgcmV0dXJuIEFTVDo6VHlwZUFyZ3VtZW50KG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBl
UmVmZXJlbmNlPihMZXhlcjo6VG9rZW4oKnJlc3VsdCksIHJlc3VsdC0+c3RyaW5nVmlldyhtX2xl
eGVyKS50b1N0cmluZygpLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkpOwogfQogCiBhdXRvIFBhcnNl
cjo6cGFyc2VUeXBlQXJndW1lbnRzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpUeXBlQXJndW1lbnRzLCBF
cnJvcj4KQEAgLTQyMiw3ICs0NDAsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50
cygpIC0+IEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50cywgRXJyb3I+CiAKIGF1dG8gUGFyc2Vy
OjpwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCwgRXJyb3I+CiB7Ci0gICAgYXV0byB0b2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVy
OjpUb2tlbjo6VHlwZTo6U3RhciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFp
ciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCB9KTsKKyAgICBhdXRvIHRv
a2VuID0gY29uc3VtZVR5cGVzPAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlN0YXIsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIsCisgICAgICAgIExl
eGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ+KCk7CiAgICAgaWYgKCF0b2tlbikK
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHRva2VuLmVycm9yKCkpOwogICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0KSB7
CkBAIC00MzcsNyArNDU4LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhBYmJyZXZp
YXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgRXJyCiAKIGF1dG8gUGFy
c2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+CiB7Ci0gICAgYXV0byB0b2tlbiA9IGNvbnN1bWVUeXBl
cyh7IExleGVyOjpUb2tlbjo6VHlwZTo6U3RhciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVC
cmFja2V0UGFpciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCB9KTsKKyAg
ICBhdXRvIHRva2VuID0gY29uc3VtZVR5cGVzPAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OlN0YXIsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ+KCk7CiAgICAgaWYg
KCF0b2tlbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHRva2VuLmVycm9yKCkp
OwogICAgIGlmICh0b2tlbi0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVC
cmFja2V0KSB7CkBAIC00NDcsNyArNDcxLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAg
ICAgICAgIENPTlNVTUVfVFlQRShyaWdodFNxdWFyZUJyYWNrZXQsIFJpZ2h0U3F1YXJlQnJhY2tl
dCk7CiAgICAgICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRz
IH19OwogICAgIH0KLSAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0gY29uc3VtZVR5cGVzKHsg
TGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2Us
IExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhy
ZWFkfSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlczwKKyAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpU
eXBlOjpEZXZpY2UsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkPigpOwogICAgIGlmICghYWRkcmVzc1Nw
YWNlVG9rZW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VU
b2tlbi5lcnJvcigpKTsKICAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CkBAIC00
NzEsNyArNDk5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAKIGF1dG8gUGFyc2VyOjpw
YXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9y
PgogewotICAgIGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSB0cnlUeXBlcyh7IExleGVyOjpUb2tl
bjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9r
ZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAg
IGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSB0cnlUeXBlczwKKyAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpDb25zdGFudCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsCisgICAgICAgIExleGVyOjpU
b2tlbjo6VHlwZTo6VGhyZWFkPigpOwogCiAgICAgQ09OU1VNRV9UWVBFKG5hbWUsIElkZW50aWZp
ZXIpOwogICAgIFBBUlNFKHR5cGVBcmd1bWVudHMsIFR5cGVBcmd1bWVudHMpOwpAQCAtNTA1LDcg
KzUzNyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPgogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAg
ICAgICBQQVJTRShmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgVHlwZVN1ZmZpeEFiYnJldmlh
dGVkKTsKLSAgICAgICAgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKCphZGRyZXNzU3BhY2VUb2tlbiks
IG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwor
ICAgICAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+
c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7
CiAgICAgICAgIGF1dG8gbmV4dCA9IGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQo
KmZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICBy
ZXN1bHQgPSBXVEZNb3ZlKG5leHQpOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNTM0LDcg
KzU2Niw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPgogICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1
ZVJlZjxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51
bUVsZW1lbnRzKSB9OwogICAgICAgICB9CiAgICAgfTsKLSAgICBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1v
dmUoKm5hbWUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1
bWVudHMpKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKm5hbWUpLCBuYW1lLT5zdHJpbmdW
aWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICBQRUVLKG5leHRUb2tlbik7CiAgICAgICAgIGlmIChuZXh0
VG9rZW4tPnR5cGUgIT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyCkBAIC01NTcsMTIgKzU4OSwx
MiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6
VHlwZURlZmluaXRpb24sIEVycm9yPgogICAgIENPTlNVTUVfVFlQRShlcXVhbHMsIEVxdWFsc1Np
Z24pOwogICAgIFBBUlNFKHR5cGUsIFR5cGUpOwogICAgIENPTlNVTUVfVFlQRShzZW1pY29sb24s
IFNlbWljb2xvbik7Ci0gICAgcmV0dXJuIEFTVDo6VHlwZURlZmluaXRpb24oV1RGTW92ZSgqb3Jp
Z2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlKSk7CisgICAg
cmV0dXJuIEFTVDo6VHlwZURlZmluaXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5n
VmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlKSk7CiB9CiAKIGF1dG8gUGFy
c2VyOjpwYXJzZUJ1aWx0SW5TZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFu
dGljLCBFcnJvcj4KIHsKLSAgICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlcyh7CisgICAgYXV0
byBvcmlnaW4gPSBjb25zdW1lVHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZJ
bnN0YW5jZUlELAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWVmVydGV4SUQsCiAgICAg
ICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UFNpemUsCkBAIC01NzYsNyArNjA4LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlQnVpbHRJblNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCdWlsdEluU2Vt
YW50aWMsIEVycm9yPgogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWRGlzcGF0Y2hUaHJl
YWRJRCwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVkdyb3VwSUQsCiAgICAgICAgIExl
eGVyOjpUb2tlbjo6VHlwZTo6U1ZHcm91cEluZGV4LAotICAgICAgICBMZXhlcjo6VG9rZW46OlR5
cGU6OlNWR3JvdXBUaHJlYWRJRH0pOworICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWR3Jv
dXBUaHJlYWRJRD4oKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKIApAQCAtNjIzLDE0ICs2NTUsMTUgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVzb3VyY2VTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VT
ZW1hbnRpYywgRXJyb3I+CiAgICAgQ09OU1VNRV9UWVBFKGxlZnRQYXJlbnRoZXNpcywgTGVmdFBh
cmVudGhlc2lzKTsKIAogICAgIENPTlNVTUVfVFlQRShpbmZvLCBJZGVudGlmaWVyKTsKLSAgICBp
ZiAoaW5mby0+c3RyaW5nVmlldy5sZW5ndGgoKSA8IDIgfHwgKGluZm8tPnN0cmluZ1ZpZXdbMF0g
IT0gJ3UnCi0gICAgICAgICYmIGluZm8tPnN0cmluZ1ZpZXdbMF0gIT0gJ3QnCi0gICAgICAgICYm
IGluZm8tPnN0cmluZ1ZpZXdbMF0gIT0gJ2InCi0gICAgICAgICYmIGluZm8tPnN0cmluZ1ZpZXdb
MF0gIT0gJ3MnKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VT
dHJpbmcoaW5mby0+c3RyaW5nVmlldy5zdWJzdHJpbmcoMCwgMSksICIgaXMgbm90IGEga25vd24g
cmVzb3VyY2UgdHlwZSAoJ3UnLCAndCcsICdiJywgb3IgJ3MnKSIpKSk7CisgICAgYXV0byBpbmZv
U3RyaW5nVmlldyA9IGluZm8tPnN0cmluZ1ZpZXcobV9sZXhlcik7CisgICAgaWYgKGluZm9TdHJp
bmdWaWV3Lmxlbmd0aCgpIDwgMiB8fCAoaW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ3UnCisgICAgICAg
ICYmIGluZm9TdHJpbmdWaWV3WzBdICE9ICd0JworICAgICAgICAmJiBpbmZvU3RyaW5nVmlld1sw
XSAhPSAnYicKKyAgICAgICAgJiYgaW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ3MnKSkKKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmcoaW5mb1N0cmluZ1ZpZXcu
c3Vic3RyaW5nKDAsIDEpLCAiIGlzIG5vdCBhIGtub3duIHJlc291cmNlIHR5cGUgKCd1JywgJ3Qn
LCAnYicsIG9yICdzJykiKSkpOwogCiAgICAgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1v
ZGU7Ci0gICAgc3dpdGNoIChpbmZvLT5zdHJpbmdWaWV3WzBdKSB7CisgICAgc3dpdGNoIChpbmZv
U3RyaW5nVmlld1swXSkgewogICAgIGNhc2UgJ3UnOgogICAgICAgICBtb2RlID0gQVNUOjpSZXNv
dXJjZVNlbWFudGljOjpNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OwogICAgICAgICBicmVhazsK
QEAgLTY0NSwxOSArNjc4LDIwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlc291cmNlU2VtYW50aWMo
KSAtPiBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMsIEVycm9yPgogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBhdXRvIGluZGV4ID0gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRl
Z2VyKGluZm8tPnN0cmluZ1ZpZXcuc3Vic3RyaW5nKDEpKTsKKyAgICBhdXRvIGluZGV4ID0gcmVj
b2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKGluZm9TdHJpbmdWaWV3LnN1YnN0cmluZygxKSk7
CiAgICAgaWYgKCFpbmRleCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGluZGV4
LmVycm9yKCkpOwogCiAgICAgdW5zaWduZWQgc3BhY2UgPSAwOwogICAgIGlmICh0cnlUeXBlKExl
eGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIENPTlNVTUVfVFlQRShzcGFjZVRv
a2VuLCBJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBzcGFjZVRva2VuU3RyaW5nVmlldyA9IHNw
YWNlVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhlcik7CiAgICAgICAgIGF1dG8gcHJlZml4ID0gInNw
YWNlIl9zdHI7Ci0gICAgICAgIGlmICghc3BhY2VUb2tlbi0+c3RyaW5nVmlldy5zdGFydHNXaXRo
KFN0cmluZ1ZpZXcocHJlZml4KSkpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oRXJyb3IobWFrZVN0cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGlj
ICIsIHNwYWNlVG9rZW4tPnN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2YgdGhlIGZvcm0gJ3NwYWNl
MCciKSkpOwotICAgICAgICBpZiAoc3BhY2VUb2tlbi0+c3RyaW5nVmlldy5sZW5ndGgoKSA8PSBw
cmVmaXgubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJy
b3IobWFrZVN0cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICIsIHNw
YWNlVG9rZW4tPnN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2YgdGhlIGZvcm0gJ3NwYWNlMCciKSkp
OwotICAgICAgICBhdXRvIHNwYWNlVmFsdWUgPSByZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVn
ZXIoc3BhY2VUb2tlbi0+c3RyaW5nVmlldy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCgpKSk7Cisg
ICAgICAgIGlmICghc3BhY2VUb2tlblN0cmluZ1ZpZXcuc3RhcnRzV2l0aChTdHJpbmdWaWV3KHBy
ZWZpeCkpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VT
dHJpbmcoIlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJjZSBzZW1hbnRpYyAiLCBzcGFjZVRva2Vu
U3RyaW5nVmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9ybSAnc3BhY2UwJyIpKSk7CisgICAgICAg
IGlmIChzcGFjZVRva2VuU3RyaW5nVmlldy5sZW5ndGgoKSA8PSBwcmVmaXgubGVuZ3RoKCkpCisg
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IobWFrZVN0cmluZygiU2Vj
b25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICIsIHNwYWNlVG9rZW5TdHJpbmdWaWV3
LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIikpKTsKKyAgICAgICAgYXV0byBzcGFj
ZVZhbHVlID0gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKHNwYWNlVG9rZW5TdHJpbmdW
aWV3LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKCFzcGFjZVZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNwYWNlVmFsdWUuZXJyb3Io
KSk7CiAgICAgICAgIHNwYWNlID0gKnNwYWNlVmFsdWU7CkBAIC03MTcsMTYgKzc1MSwxNyBAQCBB
U1Q6OlF1YWxpZmllcnMgUGFyc2VyOjpwYXJzZVF1YWxpZmllcnMoKQogewogICAgIEFTVDo6UXVh
bGlmaWVycyBxdWFsaWZpZXJzOwogICAgIHdoaWxlIChhdXRvIG5leHQgPSB0cnlUeXBlKExleGVy
OjpUb2tlbjo6VHlwZTo6UXVhbGlmaWVyKSkgewotICAgICAgICBpZiAoIm5vaW50ZXJwb2xhdGlv
biIgPT0gbmV4dC0+c3RyaW5nVmlldykKKyAgICAgICAgYXV0byBuZXh0U3RyaW5nVmlldyA9IG5l
eHQtPnN0cmluZ1ZpZXcobV9sZXhlcik7CisgICAgICAgIGlmICgibm9pbnRlcnBvbGF0aW9uIiA9
PSBuZXh0U3RyaW5nVmlldykKICAgICAgICAgICAgIHF1YWxpZmllcnMuYXBwZW5kKEFTVDo6UXVh
bGlmaWVyOjpOb2ludGVycG9sYXRpb24pOwotICAgICAgICBlbHNlIGlmICgibm9wZXJzcGVjdGl2
ZSIgPT0gbmV4dC0+c3RyaW5nVmlldykKKyAgICAgICAgZWxzZSBpZiAoIm5vcGVyc3BlY3RpdmUi
ID09IG5leHRTdHJpbmdWaWV3KQogICAgICAgICAgICAgcXVhbGlmaWVycy5hcHBlbmQoQVNUOjpR
dWFsaWZpZXI6Ok5vcGVyc3BlY3RpdmUpOwotICAgICAgICBlbHNlIGlmICgidW5pZm9ybSIgPT0g
bmV4dC0+c3RyaW5nVmlldykKKyAgICAgICAgZWxzZSBpZiAoInVuaWZvcm0iID09IG5leHRTdHJp
bmdWaWV3KQogICAgICAgICAgICAgcXVhbGlmaWVycy5hcHBlbmQoQVNUOjpRdWFsaWZpZXI6OlVu
aWZvcm0pOwotICAgICAgICBlbHNlIGlmICgiY2VudHJvaWQiID09IG5leHQtPnN0cmluZ1ZpZXcp
CisgICAgICAgIGVsc2UgaWYgKCJjZW50cm9pZCIgPT0gbmV4dFN0cmluZ1ZpZXcpCiAgICAgICAg
ICAgICBxdWFsaWZpZXJzLmFwcGVuZChBU1Q6OlF1YWxpZmllcjo6Q2VudHJvaWQpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCgic2FtcGxlIiA9PSBuZXh0LT5zdHJpbmdWaWV3
KTsKKyAgICAgICAgICAgIEFTU0VSVCgic2FtcGxlIiA9PSBuZXh0U3RyaW5nVmlldyk7CiAgICAg
ICAgICAgICBxdWFsaWZpZXJzLmFwcGVuZChBU1Q6OlF1YWxpZmllcjo6U2FtcGxlKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTc0NCw3ICs3NzksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdHJ1Y3R1
cmVFbGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50LCBFcnJvcj4KICAg
ICBQQVJTRShzZW1hbnRpYywgU2VtYW50aWMpOwogICAgIENPTlNVTUVfVFlQRShzZW1pY29sb24s
IFNlbWljb2xvbik7CiAKLSAgICByZXR1cm4gQVNUOjpTdHJ1Y3R1cmVFbGVtZW50KFdURk1vdmUo
Km9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJp
bmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgcmV0dXJuIEFTVDo6
U3RydWN0dXJlRWxlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZN
b3ZlKCpzZW1hbnRpYykpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VTdHJ1Y3R1cmVEZWZpbml0
aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uLCBFcnJvcj4KQEAgLTc1
OSw3ICs3OTQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uLCBFcgogICAgICAgICBzdHJ1Y3R1cmVF
bGVtZW50cy5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRWxlbWVudCkpOwogICAgIH0KIAotICAg
IHJldHVybiBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+
c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHN0cnVjdHVyZUVsZW1lbnRzKSk7CisgICAg
cmV0dXJuIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5z
dHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMp
KTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24sIEVycm9yPgpAQCAtNzgxLDcgKzgxNiw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVk
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAKICAgICBQQVJTRShmaXJzdEVudW1lcmF0aW9u
TWVtYmVyLCBFbnVtZXJhdGlvbk1lbWJlcik7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiByZXN1bHQoV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygp
LCBXVEZNb3ZlKCp0eXBlKSk7CisgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24gcmVzdWx0
KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwg
V1RGTW92ZSgqdHlwZSkpOwogICAgIGF1dG8gc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgq
Zmlyc3RFbnVtZXJhdGlvbk1lbWJlcikpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0
dXJuIGZhaWwoIkNhbm5vdCBhZGQgZW51bWVyYXRpb24gbWVtYmVyIl9zdHIpOwpAQCAtODAxLDcg
KzgzNiw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4
cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiBhdXRvIFBhcnNlcjo6cGFyc2VFbnVt
ZXJhdGlvbk1lbWJlcigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9y
PgogewogICAgIENPTlNVTUVfVFlQRShpZGVudGlmaWVyLCBJZGVudGlmaWVyKTsKLSAgICBhdXRv
IG5hbWUgPSBpZGVudGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCk7CisgICAgYXV0byBuYW1l
ID0gaWRlbnRpZmllci0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpOwogCiAgICAgaWYg
KHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduKSkgewogICAgICAgICBQQVJT
RShjb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50RXhwcmVzc2lvbik7CkBAIC04MTgsNyArODUz
LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24KICAgICBQQVJTRSh0eXBlQXJndW1lbnRzLCBU
eXBlQXJndW1lbnRzKTsKICAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29sb24pOwog
Ci0gICAgcmV0dXJuIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwor
ICAgIHJldHVybiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBu
YW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVu
dHMpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUsIEVycm9yPgpA
QCAtODczLDcgKzkwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVj
dGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+CiAKICAgICBTdHJpbmcgbmFtZTsK
ICAgICBpZiAoYXV0byB0b2tlbiA9IHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlm
aWVyKSkKLSAgICAgICAgbmFtZSA9IHRva2VuLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCk7CisgICAg
ICAgIG5hbWUgPSB0b2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpOwogCiAgICAg
UEFSU0Uoc2VtYW50aWMsIFNlbWFudGljKTsKIApAQCAtOTIwLDEyICs5NTUsMTIgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlQ29tcHV0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBQQVJTRShwYXJhbWV0ZXJzLCBQYXJhbWV0ZXJzKTsKICAg
ICBQQVJTRShzZW1hbnRpYywgU2VtYW50aWMpOwogICAgIGJvb2wgaXNPcGVyYXRvciA9IGZhbHNl
OwotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZSgqYXR0cmlidXRlQmxvY2spLCBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlLCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJh
bWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yKTsKKyAgICByZXR1cm4gQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmF0dHJpYnV0
ZUJsb2NrKSwgQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZSwgV1RGTW92ZSgqdHlwZSksIG5h
bWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyks
IFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJz
ZVZlcnRleE9yRnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KIHsKLSAgICBhdXRvIGVudHJ5UG9pbnQgPSBjb25z
dW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OlZlcnRleCwgTGV4ZXI6OlRva2VuOjpUeXBl
OjpGcmFnbWVudCB9KTsKKyAgICBhdXRvIGVudHJ5UG9pbnQgPSBjb25zdW1lVHlwZXM8TGV4ZXI6
OlRva2VuOjpUeXBlOjpWZXJ0ZXgsIExleGVyOjpUb2tlbjo6VHlwZTo6RnJhZ21lbnQ+KCk7CiAg
ICAgaWYgKCFlbnRyeVBvaW50KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZW50
cnlQb2ludC5lcnJvcigpKTsKICAgICBhdXRvIGVudHJ5UG9pbnRUeXBlID0gKGVudHJ5UG9pbnQt
PnR5cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpWZXJ0ZXgpID8gQVNUOjpFbnRyeVBvaW50VHlw
ZTo6VmVydGV4IDogQVNUOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ7CkBAIC05MzYsNyArOTcx
LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aW9uRGVjbGFyYXRp
b24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW8KICAgICBQQVJTRShzZW1hbnRpYywgU2VtYW50
aWMpOwogCiAgICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7Ci0gICAgcmV0dXJuIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCplbnRyeVBvaW50KSwgeyB9LCBlbnRyeVBvaW50VHlw
ZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgq
cGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CisgICAgcmV0dXJu
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCplbnRyeVBvaW50KSwgeyB9LCBlbnRy
eVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9T
dHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVy
YXRvcik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9u
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KQEAgLTk0NSw3
ICs5ODAsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigp
IC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdAogCiAgICAgUEFSU0UodHlwZSwgVHlw
ZSk7CiAKLSAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6
OklkZW50aWZpZXIsIExleGVyOjpUb2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1lIH0pOworICAgIGF1
dG8gbmFtZSA9IGNvbnN1bWVUeXBlczxMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIsIExl
eGVyOjpUb2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1lPigpOwogICAgIGlmICghbmFtZSkKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAgICAgYXV0byBpc09w
ZXJhdG9yID0gbmFtZS0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZTsK
QEAgLTk1Myw3ICs5ODgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNs
YXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdAogICAgIFBBUlNFKHBh
cmFtZXRlcnMsIFBhcmFtZXRlcnMpOwogICAgIFBBUlNFKHNlbWFudGljLCBTZW1hbnRpYyk7CiAK
LSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsg
fSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9y
KTsKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xl
eGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMp
LCBpc09wZXJhdG9yKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRl
Y2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4K
QEAgLTEwMDMsNyArMTAzOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUJsb2NrKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpCbG9jaywgRXJyb3I+CiBhdXRvIFBhcnNlcjo6cGFyc2VCbG9ja0JvZHkoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luKSAtPiBFeHBlY3RlZDxBU1Q6OkJsb2NrLCBFcnJvcj4KIHsKICAgICBB
U1Q6OlN0YXRlbWVudHMgc3RhdGVtZW50czsKLSAgICB3aGlsZSAoIXBlZWtUeXBlcyh7TGV4ZXI6
OlRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJhY2tldCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpDYXNl
LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRlZmF1bHR9KSkgeworICAgIHdoaWxlICghcGVla1R5cGVz
PExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQsIExleGVyOjpUb2tlbjo6VHlw
ZTo6Q2FzZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZWZhdWx0PigpKSB7CiAgICAgICAgIFBBUlNF
KHN0YXRlbWVudCwgU3RhdGVtZW50KTsKICAgICAgICAgc3RhdGVtZW50cy5hcHBlbmQoV1RGTW92
ZSgqc3RhdGVtZW50KSk7CiAgICAgfQpAQCAtMTA1NCw3ICsxMDg5LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlU3dpdGNoU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQs
IEVycm9yPgogCiBhdXRvIFBhcnNlcjo6cGFyc2VTd2l0Y2hDYXNlKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpTd2l0Y2hDYXNlLCBFcnJvcj4KIHsKLSAgICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlcyh7
IExleGVyOjpUb2tlbjo6VHlwZTo6Q2FzZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZWZhdWx0IH0p
OworICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGVzPExleGVyOjpUb2tlbjo6VHlwZTo6Q2Fz
ZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZWZhdWx0PigpOwogICAgIGlmICghb3JpZ2luKQogICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwogCkBAIC0xMTYx
LDcgKzExOTYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+IEV4cAogICAgICAgICBpbml0aWFsaXpl
ciA9IGluaXRpYWxpemluZ0V4cHJlc3Npb24udmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdp
biksIFdURk1vdmUocXVhbGlmaWVycyksIHsgV1RGTW92ZSh0eXBlKSB9LCBuYW1lLT5zdHJpbmdW
aWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnNlbWFudGljKSwgV1RGTW92ZShpbml0aWFsaXplcikp
OworICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZShxdWFsaWZpZXJzKSwgeyBXVEZNb3ZlKHR5cGUpIH0sIG5hbWUtPnN0cmluZ1ZpZXco
bV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBXVEZNb3ZlKGluaXRpYWxp
emVyKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJyb3I+CkBAIC0x
MjE4LDM2ICsxMjUzLDM2IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN0YXRlbWVudCgpIC0+IEV4cGVj
dGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPgogICAgIGNhc2UgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpCcmVhazogewogICAgICAgICBhdXRvIGJyZWFrVG9rZW4gPSBtX2xleGVyLmNv
bnN1bWVUb2tlbigpOwogICAgICAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29sb24p
OwotICAgICAgICBhdXRvIGJyZWFrT2JqZWN0ID0gQVNUOjpCcmVhayhXVEZNb3ZlKCpicmVha1Rv
a2VuKSk7CisgICAgICAgIGF1dG8gYnJlYWtPYmplY3QgPSBBU1Q6OkJyZWFrKFdURk1vdmUoYnJl
YWtUb2tlbikpOwogICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QnJlYWs+KFdU
Rk1vdmUoYnJlYWtPYmplY3QpKSB9OwogICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29udGludWU6IHsKICAgICAgICAgYXV0byBjb250aW51ZVRva2VuID0gbV9sZXhlci5jb25z
dW1lVG9rZW4oKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKHNlbWljb2xvbiwgU2VtaWNvbG9uKTsK
LSAgICAgICAgYXV0byBjb250aW51ZU9iamVjdCA9IEFTVDo6Q29udGludWUoV1RGTW92ZSgqY29u
dGludWVUb2tlbikpOworICAgICAgICBhdXRvIGNvbnRpbnVlT2JqZWN0ID0gQVNUOjpDb250aW51
ZShXVEZNb3ZlKGNvbnRpbnVlVG9rZW4pKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkNvbnRpbnVlPihXVEZNb3ZlKGNvbnRpbnVlT2JqZWN0KSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkZhbGx0aHJvdWdoOiB7CiAgICAgICAgIGF1dG8gZmFs
bHRocm91Z2hUb2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7CiAgICAgICAgIENPTlNVTUVf
VFlQRShzZW1pY29sb24sIFNlbWljb2xvbik7Ci0gICAgICAgIGF1dG8gZmFsbHRocm91Z2hPYmpl
Y3QgPSBBU1Q6OkZhbGx0aHJvdWdoKFdURk1vdmUoKmZhbGx0aHJvdWdoVG9rZW4pKTsKKyAgICAg
ICAgYXV0byBmYWxsdGhyb3VnaE9iamVjdCA9IEFTVDo6RmFsbHRocm91Z2goV1RGTW92ZShmYWxs
dGhyb3VnaFRva2VuKSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpGYWxs
dGhyb3VnaD4oV1RGTW92ZShmYWxsdGhyb3VnaE9iamVjdCkpIH07CiAgICAgfQogICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpUcmFwOiB7CiAgICAgICAgIGF1dG8gdHJhcFRva2VuID0gbV9s
ZXhlci5jb25zdW1lVG9rZW4oKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKHNlbWljb2xvbiwgU2Vt
aWNvbG9uKTsKLSAgICAgICAgYXV0byB0cmFwT2JqZWN0ID0gQVNUOjpUcmFwKFdURk1vdmUoKnRy
YXBUb2tlbikpOworICAgICAgICBhdXRvIHRyYXBPYmplY3QgPSBBU1Q6OlRyYXAoV1RGTW92ZSh0
cmFwVG9rZW4pKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlRyYXA+KFdU
Rk1vdmUodHJhcE9iamVjdCkpIH07CiAgICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpSZXR1cm46IHsKICAgICAgICAgYXV0byByZXR1cm5Ub2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRv
a2VuKCk7CiAgICAgICAgIGlmIChhdXRvIHNlbWljb2xvbiA9IHRyeVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpTZW1pY29sb24pKSB7Ci0gICAgICAgICAgICBhdXRvIHJldHVybk9iamVjdCA9IEFT
VDo6UmV0dXJuKFdURk1vdmUoKnJldHVyblRva2VuKSwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIGF1dG8gcmV0dXJuT2JqZWN0ID0gQVNUOjpSZXR1cm4oV1RGTW92ZShyZXR1cm5Ub2tlbiks
IFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6
UmV0dXJuPihXVEZNb3ZlKHJldHVybk9iamVjdCkpIH07CiAgICAgICAgIH0KICAgICAgICAgUEFS
U0UoZXhwcmVzc2lvbiwgRXhwcmVzc2lvbik7CiAgICAgICAgIENPTlNVTUVfVFlQRShmaW5hbFNl
bWljb2xvbiwgU2VtaWNvbG9uKTsKLSAgICAgICAgYXV0byByZXR1cm5PYmplY3QgPSBBU1Q6OlJl
dHVybihXVEZNb3ZlKCpyZXR1cm5Ub2tlbiksIHsgV1RGTW92ZSgqZXhwcmVzc2lvbikgfSk7Cisg
ICAgICAgIGF1dG8gcmV0dXJuT2JqZWN0ID0gQVNUOjpSZXR1cm4oV1RGTW92ZShyZXR1cm5Ub2tl
biksIHsgV1RGTW92ZSgqZXhwcmVzc2lvbikgfSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpSZXR1cm4+KFdURk1vdmUocmV0dXJuT2JqZWN0KSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50OgpAQCAtMTMyMSw3ICsxMzU2LDcgQEAg
YXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsQXNzaWdubWVudCgpIC0+IEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LAogICAgIGJvb2wgaXNFZmZlY3RmdWwgPSBmYWxzZTsKICAg
ICBQQVJTRShleHByZXNzaW9uLCBQb3NzaWJsZVByZWZpeCwgJmlzRWZmZWN0ZnVsKTsKIAotICAg
IGlmICghaXNFZmZlY3RmdWwgfHwgcGVla1R5cGVzKHsKKyAgICBpZiAoIWlzRWZmZWN0ZnVsIHx8
IHBlZWtUeXBlczwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduLAogICAg
ICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNFcXVhbHMsCiAgICAgICAgIExleGVyOjpUb2tl
bjo6VHlwZTo6TWludXNFcXVhbHMsCkBAIC0xMzMzLDcgKzEzNjgsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VFZmZlY3RmdWxBc3NpZ25tZW50KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6T3JFcXVhbHMsCiAgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRTaGlmdEVxdWFscywKICAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpMZWZ0U2hpZnRFcXVhbHMKLSAgICB9KSkgeworICAgID4oKSkgewogICAgICAg
ICByZXR1cm4gY29tcGxldGVBc3NpZ25tZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmV4
cHJlc3Npb24pKTsKICAgICB9CiAKQEAgLTEzNDIsNyArMTM3NywxMCBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VFZmZlY3RmdWxBc3NpZ25tZW50KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4sCiAKIGF1dG8gUGFyc2VyOjpwYXJzZUxpbWl0ZWRTdWZmaXhPcGVyYXRvcihVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBTdWZmaXhFeHByZXNzaW9uCiB7
Ci0gICAgYXV0byB0eXBlID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpGdWxs
U3RvcCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpBcnJvdywgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0
U3F1YXJlQnJhY2tldCB9KTsKKyAgICBhdXRvIHR5cGUgPSBjb25zdW1lVHlwZXM8CisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6RnVsbFN0b3AsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlw
ZTo6QXJyb3csCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ+
KCk7CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZN
b3ZlKHByZXZpb3VzKSwgZmFsc2UpOwogCkBAIC0xMzUxLDEzICsxMzg5LDEzIEBAIGF1dG8gUGFy
c2VyOjpwYXJzZUxpbWl0ZWRTdWZmaXhPcGVyYXRvcihVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiYmIHByZXZpb3VzKSAtCiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNvbnN1bWVUeXBlKExl
eGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikK
ICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNU
OjpEb3RFeHByZXNzaW9uPihXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShwcmV2aW91cyksIGlkZW50
aWZpZXItPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSksIHRydWUpOworICAgICAgICByZXR1cm4gU3Vm
Zml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oV1RGTW92ZSgq
dHlwZSksIFdURk1vdmUocHJldmlvdXMpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3KG1fbGV4ZXIp
LnRvU3RyaW5nKCkpLCB0cnVlKTsKICAgICB9CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OkFycm93OiB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNvbnN1bWVUeXBlKExleGVyOjpU
b2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAg
ICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7
Ci0gICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnR5cGUpLCBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShwcmV2aW91cykpLCBpZGVu
dGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCkpLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIFN1
ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4cHJlc3Npb24+KExleGVyOjpU
b2tlbigqdHlwZSksIG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KFdU
Rk1vdmUoKnR5cGUpLCBXVEZNb3ZlKHByZXZpb3VzKSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXco
bV9sZXhlcikudG9TdHJpbmcoKSksIHRydWUpOwogICAgIH0KICAgICBkZWZhdWx0OiB7CiAgICAg
ICAgIEFTU0VSVCh0eXBlLT50eXBlID09IExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJy
YWNrZXQpOwpAQCAtMTM3Myw3ICsxNDExLDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZUxpbWl0ZWRT
dWZmaXhPcGVyYXRvcihVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtCiAK
IGF1dG8gUGFyc2VyOjpwYXJzZVN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+JiYgcHJldmlvdXMpIC0+IFN1ZmZpeEV4cHJlc3Npb24KIHsKLSAgICBhdXRvIHN1ZmZpeCA9
IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6RnVsbFN0b3AsIExleGVyOjpUb2tl
bjo6VHlwZTo6QXJyb3csIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQsIExl
eGVyOjpUb2tlbjo6VHlwZTo6UGx1c1BsdXMsIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51
cyB9KTsKKyAgICBhdXRvIHN1ZmZpeCA9IGNvbnN1bWVUeXBlczwKKyAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpGdWxsU3RvcCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBcnJvdywK
KyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCwKKyAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpQbHVzUGx1cywKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBl
OjpNaW51c01pbnVzPigpOwogICAgIGlmICghc3VmZml4KQogICAgICAgICByZXR1cm4gU3VmZml4
RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwogCkBAIC0xMzgyLDEzICsxNDI1
LDEzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+JiYgcHJldmlvdXMpIC0+IFN1ZmZpCiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9
IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlm
ICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1v
dmUocHJldmlvdXMpLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1h
a2VVbmlxdWVSZWY8QVNUOjpEb3RFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBXVEZNb3Zl
KHByZXZpb3VzKSwgaWRlbnRpZmllci0+c3RyaW5nVmlldy50b1N0cmluZygpKSwgdHJ1ZSk7Cisg
ICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RFeHBy
ZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBXVEZNb3ZlKHByZXZpb3VzKSwgaWRlbnRpZmllci0+
c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAgfQogICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpBcnJvdzogewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBj
b25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwogICAgICAgICBpZiAo
IWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3Zl
KHByZXZpb3VzKSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtl
VW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpzdWZmaXgpLCBtYWtl
VW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBX
VEZNb3ZlKHByZXZpb3VzKSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSksIHRy
dWUpOworICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6
RG90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpzdWZmaXgpLCBtYWtlVW5pcXVlUmVmPEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBXVEZNb3ZlKHByZXZpb3Vz
KSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSksIHRydWUpOwog
ICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6IHsK
ICAgICAgICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CkBAIC0xNDUxLDcg
KzE0OTQsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVUZXJuYXJ5Q29uZGl0aW9uYWwoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8QVNUOjpFeAogCiBhdXRvIFBhcnNlcjo6Y29tcGxl
dGVBc3NpZ25tZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4mJiBsZWZ0KSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJy
b3I+CiB7Ci0gICAgYXV0byBhc3NpZ25tZW50T3BlcmF0b3IgPSBjb25zdW1lVHlwZXMoeworICAg
IGF1dG8gYXNzaWdubWVudE9wZXJhdG9yID0gY29uc3VtZVR5cGVzPAogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6OkVxdWFsc1NpZ24sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1
c0VxdWFscywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpNaW51c0VxdWFscywKQEAgLTE0
NjIsOCArMTUwNSw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZUFzc2lnbm1lbnQoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uCiAgICAgICAgIExleGVyOjpU
b2tlbjo6VHlwZTo6QW5kRXF1YWxzLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok9yRXF1
YWxzLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0U2hpZnRFcXVhbHMsCi0gICAg
ICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxzCi0gICAgfSk7CisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxzPigpOwogICAgIGlmICghYXNzaWdu
bWVudE9wZXJhdG9yKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYXNzaWdubWVu
dE9wZXJhdG9yLmVycm9yKCkpOwogCkBAIC0xNTIyLDcgKzE1NjQsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlcwogCiAgICAgUEFSU0UoZXhwcmVzc2lvbiwgUG9zc2libGVQcmVmaXgpOwogCi0g
ICAgaWYgKHBlZWtUeXBlcyh7TGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduLAorICAgIGlm
IChwZWVrVHlwZXM8TGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduLAogICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OlBsdXNFcXVhbHMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6
TWludXNFcXVhbHMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGltZXNFcXVhbHMsCkBA
IC0xNTMyLDcgKzE1NzQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZVRlcm5hcnlDb25k
aXRpb25hbCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlcwogICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OkFuZEVxdWFscywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpP
ckVxdWFscywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFNoaWZ0RXF1YWxzLAot
ICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTaGlmdEVxdWFsc30pKSB7CisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxzPigpKSB7CiAgICAgICAgIHJldHVy
biBjb21wbGV0ZUFzc2lnbm1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqZXhwcmVzc2lv
bikpOwogICAgIH0KIApAQCAtMTU1NiwxMyArMTU5OCwxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQ
b3NzaWJsZUxvZ2ljYWxCaW5hcnlPcGVyYXRpb24oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNU
OjpFeAogCiBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZUxvZ2ljYWxCaW5hcnlPcGVyYXRp
b24oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBwcmV2aW91cykgLT4gRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewotICAgIHdoaWxlIChhdXRvIGxvZ2lj
YWxCaW5hcnlPcGVyYXRpb24gPSB0cnlUeXBlcyh7CisgICAgd2hpbGUgKGF1dG8gbG9naWNhbEJp
bmFyeU9wZXJhdGlvbiA9IHRyeVR5cGVzPAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok9y
T3IsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6QW5kQW5kLAogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6Ok9yLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlhvciwKICAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQKLSAgICAgICAgfSkpIHsKKyAgICAgICAgPigpKSB7
CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbik7
CiAKICAgICAgICAgc3dpdGNoIChsb2dpY2FsQmluYXJ5T3BlcmF0aW9uLT50eXBlKSB7CkBAIC0x
NjA4LDE0ICsxNjUwLDE0IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUmVsYXRpb25hbEJp
bmFyeU9wZXJhdGlvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6CiAKIGF1dG8gUGFyc2Vy
Ojpjb21wbGV0ZVBvc3NpYmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbihVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+CiB7Ci0gICAgd2hpbGUgKGF1dG8gcmVsYXRpb25hbEJpbmFyeU9wZXJh
dGlvbiA9IHRyeVR5cGVzKHsKKyAgICB3aGlsZSAoYXV0byByZWxhdGlvbmFsQmluYXJ5T3BlcmF0
aW9uID0gdHJ5VHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVzc1RoYW5TaWdu
LAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkdyZWF0ZXJUaGFuU2lnbiwKICAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpMZXNzVGhhbk9yRXF1YWxUbywKICAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpHcmVhdGVyVGhhbk9yRXF1YWxUbywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpU
eXBlOjpFcXVhbENvbXBhcmlzb24sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6Tm90RXF1
YWwKLSAgICAgICAgfSkpIHsKKyAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBv
c3NpYmxlU2hpZnQpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gY2FsbEFyZ3VtZW50czsKQEAgLTE2NjMsMTAgKzE3MDUsMTAgQEAgYXV0byBQYXJzZXI6OnBh
cnNlUG9zc2libGVTaGlmdCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
LCBFcnJvcj4KIAogYXV0byBQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVTaGlmdChVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiwgRXJyb3I+CiB7Ci0gICAgd2hpbGUgKGF1dG8gc2hpZnQgPSB0cnlUeXBlcyh7
CisgICAgd2hpbGUgKGF1dG8gc2hpZnQgPSB0cnlUeXBlczwKICAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpMZWZ0U2hpZnQsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRTaGlm
dAotICAgICAgICB9KSkgeworICAgICAgICA+KCkpIHsKICAgICAgICAgUEFSU0UobmV4dCwgUG9z
c2libGVBZGQpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4g
Y2FsbEFyZ3VtZW50czsKQEAgLTE2OTcsMTAgKzE3MzksMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNl
UG9zc2libGVBZGQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJy
b3I+CiAKIGF1dG8gUGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlQWRkKFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+JiYgcHJldmlvdXMpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+LCBFcnJvcj4KIHsKLSAgICB3aGlsZSAoYXV0byBhZGQgPSB0cnlUeXBlcyh7CisgICAgd2hp
bGUgKGF1dG8gYWRkID0gdHJ5VHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1
cywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpNaW51cwotICAgICAgICB9KSkgeworICAg
ICAgICA+KCkpIHsKICAgICAgICAgUEFSU0UobmV4dCwgUG9zc2libGVNdWx0aXBseSk7CiAKICAg
ICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwpA
QCAtMTczMSwxMSArMTc3MywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZU11bHRpcGx5
KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycgogCiBhdXRvIFBh
cnNlcjo6Y29tcGxldGVQb3NzaWJsZU11bHRpcGx5KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
JiYgcHJldmlvdXMpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJv
cj4KIHsKLSAgICB3aGlsZSAoYXV0byBtdWx0aXBseSA9IHRyeVR5cGVzKHsKKyAgICB3aGlsZSAo
YXV0byBtdWx0aXBseSA9IHRyeVR5cGVzPAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlN0
YXIsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RGl2aWRlLAogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6Ok1vZAotICAgICAgICB9KSkgeworICAgICAgICA+KCkpIHsKICAgICAgICAg
UEFSU0UobmV4dCwgUG9zc2libGVQcmVmaXgpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKQEAgLTE3NjQsNyArMTgwNiw3IEBAIGF1
dG8gUGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlTXVsdGlwbHkoVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4mJiBwcmV2aW91cykgLT4KIAogYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgo
Ym9vbCAqaXNFZmZlY3RmdWwpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
LCBFcnJvcj4KIHsKLSAgICBpZiAoYXV0byBwcmVmaXggPSB0cnlUeXBlcyh7CisgICAgaWYgKGF1
dG8gcHJlZml4ID0gdHJ5VHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1c1Bs
dXMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51cywKICAgICAgICAgTGV4
ZXI6OlRva2VuOjpUeXBlOjpQbHVzLApAQCAtMTc3NCw3ICsxODE2LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlUG9zc2libGVQcmVmaXgoYm9vbCAqaXNFZmZlY3RmdWwpIC0+IEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkUKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQsCiAgICAgICAgIExl
eGVyOjpUb2tlbjo6VHlwZTo6QXQsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U3Rhcgot
ICAgIH0pKSB7CisgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlUHJlZml4
KTsKIAogICAgICAgICBzd2l0Y2ggKHByZWZpeC0+dHlwZSkgewpAQCAtMTg3Nyw3ICsxOTE5LDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVTdWZmaXgoYm9vbCAqaXNFZmZlY3RmdWwpIC0+
IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkUKIGF1dG8gUGFyc2VyOjpwYXJzZUNhbGxFeHByZXNz
aW9uKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewog
ICAgIENPTlNVTUVfVFlQRShuYW1lLCBJZGVudGlmaWVyKTsKLSAgICBhdXRvIGNhbGxOYW1lID0g
bmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpOworICAgIGF1dG8gY2FsbE5hbWUgPSBuYW1lLT5z
dHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCk7CiAKICAgICBDT05TVU1FX1RZUEUobGVmdFBh
cmVudGhlc2lzLCBMZWZ0UGFyZW50aGVzaXMpOwogCkBAIC0xODk5LDcgKzE5NDEsNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VDYWxsRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+LCBFcnJvcgogCiBhdXRvIFBhcnNlcjo6cGFyc2VUZXJtKCkgLT4gRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewotICAgIGF1dG8gdHlwZSA9
IGNvbnN1bWVUeXBlcyh7CisgICAgYXV0byB0eXBlID0gY29uc3VtZVR5cGVzPAogICAgICAgICBM
ZXhlcjo6VG9rZW46OlR5cGU6OkludExpdGVyYWwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlw
ZTo6VWludExpdGVyYWwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RmxvYXRMaXRlcmFs
LApAQCAtMTkwNywyNiArMTk0OSwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUZXJtKCkgLT4gRXhw
ZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6OlRydWUsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RmFsc2UsCiAg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllciwKLSAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMKLSAgICB9KTsKKyAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpMZWZ0UGFyZW50aGVzaXM+KCk7CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAodHlwZS0+
dHlwZSkgewogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7Ci0gICAg
ICAgIGF1dG8gdmFsdWUgPSBpbnRMaXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyk7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSBpbnRMaXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVy
KSk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4odmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNU
OjpJbnRlZ2VyTGl0ZXJhbD4oV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7Ci0gICAgICAgIGF1dG8gdmFs
dWUgPSB1aW50TGl0ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KTsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IHVpbnRMaXRlcmFsVG9VaW50KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAg
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZh
bHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbD4oV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkZsb2F0TGl0ZXJhbDogewotICAgICAgICBhdXRvIHZh
bHVlID0gZmxvYXRMaXRlcmFsVG9GbG9hdCh0eXBlLT5zdHJpbmdWaWV3KTsKKyAgICAgICAgYXV0
byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxvYXQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7
CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4odmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpG
bG9hdExpdGVyYWw+KFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH07CkBAIC0xOTM4LDcgKzE5Nzks
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUZXJtKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4sIEVycm9yPgogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpGYWxzZToK
ICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkJvb2xlYW5MaXRlcmFsPihXVEZN
b3ZlKCp0eXBlKSwgZmFsc2UpIH07CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50
aWZpZXI6IHsKLSAgICAgICAgYXV0byBuYW1lID0gdHlwZS0+c3RyaW5nVmlldy50b1N0cmluZygp
OworICAgICAgICBhdXRvIG5hbWUgPSB0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5n
KCk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZT4oV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSkpIH07CiAgICAgfQogICAgIGRlZmF1bHQ6
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5oCmluZGV4IGI0NDgyYTQ0NjllZGMxNWU1MzMxOTA2MzA3NDFmNzY4NzkxZGI3NDcuLmRiOTk2
MWQ4NzExNjMzN2ZiYjBhMWVmODdkNWUyNjhiYTM0MzhhNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaApAQCAtMTQzLDExICsxNDMs
MTQgQEAgcHJpdmF0ZToKICAgICBVbmV4cGVjdGVkPEVycm9yPiBmYWlsKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgVHJ5VG9QZWVrID0gVHJ5VG9QZWVrOjpZZXMpOwogICAgIEV4cGVjdGVkPExleGVy
OjpUb2tlbiwgRXJyb3I+IHBlZWsoKTsKICAgICBFeHBlY3RlZDxMZXhlcjo6VG9rZW4sIEVycm9y
PiBwZWVrRnVydGhlcigpOwotICAgIGJvb2wgcGVla1R5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6
VG9rZW46OlR5cGU+Jik7CisgICAgdGVtcGxhdGUgPExleGVyOjpUb2tlbjo6VHlwZS4uLiB0eXBl
cz4KKyAgICBib29sIHBlZWtUeXBlcygpOwogICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gdHJ5
VHlwZShMZXhlcjo6VG9rZW46OlR5cGUpOwotICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4gdHJ5
VHlwZXMoY29uc3QgVmVjdG9yPExleGVyOjpUb2tlbjo6VHlwZT4mKTsKKyAgICB0ZW1wbGF0ZSA8
TGV4ZXI6OlRva2VuOjpUeXBlLi4uIHR5cGVzPgorICAgIE9wdGlvbmFsPExleGVyOjpUb2tlbj4g
dHJ5VHlwZXMoKTsKICAgICBFeHBlY3RlZDxMZXhlcjo6VG9rZW4sIEVycm9yPiBjb25zdW1lVHlw
ZShMZXhlcjo6VG9rZW46OlR5cGUpOwotICAgIEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+
IGNvbnN1bWVUeXBlcyhjb25zdCBWZWN0b3I8TGV4ZXI6OlRva2VuOjpUeXBlPiYpOworICAgIHRl
bXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUuLi4gdHlwZXM+CisgICAgRXhwZWN0ZWQ8TGV4ZXI6
OlRva2VuLCBFcnJvcj4gY29uc3VtZVR5cGVzKCk7CiAKICAgICBFeHBlY3RlZDxWYXJpYW50PGlu
dCwgdW5zaWduZWQ+LCBFcnJvcj4gY29uc3VtZUludGVncmFsTGl0ZXJhbCgpOwogICAgIEV4cGVj
dGVkPHVuc2lnbmVkLCBFcnJvcj4gY29uc3VtZU5vbk5lZ2F0aXZlSW50ZWdyYWxMaXRlcmFsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBy
ZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAppbmRleCAzYzJlYjEw
ZWFiMTFhOTYyODMwZjhjYjNhMmIwMGJmMjY5NTBlZDhiLi45ZDgxZWZkN2FiMGRkNWRhMjE0ZDM1
MGZmMDU1MTM2YTNjZjZiN2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0
aW1lcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0ZToKIAogc3RhdGljIEFMV0FZU19JTkxJ
TkUgTGV4ZXI6OlRva2VuIGFub255bW91c1Rva2VuKExleGVyOjpUb2tlbjo6VHlwZSB0eXBlKQog
ewotICAgIHJldHVybiBMZXhlcjo6VG9rZW4geyB7IH0sIDAsIHR5cGUgfTsKKyAgICByZXR1cm4g
TGV4ZXI6OlRva2VuIHsgMCwgMCwgdHlwZSB9OwogfQogCiBjbGFzcyBQcmVzZXJ2ZUxpZmV0aW1l
cyA6IHB1YmxpYyBWaXNpdG9yIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373518</attachid>
            <date>2019-07-05 11:34:05 -0700</date>
            <delta_ts>2019-07-05 12:28:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199520-20190705113404.patch</filename>
            <type>text/plain</type>
            <size>67084</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MTY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM5ZDE3MmQ2NDkxM2U4
NjI1YjgyY2VkZDBjNjIxYzRiNDcxNzM2NC4uMjZjM2U0NWVlMTMzMmJjZTFiZTZjNTZhZWM4MTE0
NDA5Yzc3MDk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE5LTA3LTA1ICBSb2Jp
biBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBPcHRp
bWl6ZSB0aGUgbGV4ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5OTUyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaW5jbHVkZXMgYSBudW1iZXIgb2Ygc21hbGwgb3B0aW1pemF0aW9u
cyB0byB0aGUgbGV4ZXI6CisgICAgICAgIC0gQnkgY3JlYXRpbmcgdHdvIG5ldyB0eXBlcyBvZiBU
b2tlbiAoSW52YWxpZCBhbmQgRU9GKSwgd2UgY2FuIGF2b2lkIGhhdmluZyB0byBtYW5pcHVsYXRl
IE9wdGlvbmFsPFRva2VuPiBldmVyeXdoZXJlCisgICAgICAgIC0gQnkgY29tYmluaW5nIHRoZSBs
ZXhpbmcgb2YgaWRlbnRpZmllcnMsIGtleXdvcmRzIGFuZCBvcGVyYXRvciBuYW1lcywgd2UgY2Fu
IGF2b2lkIHJlLXJlYWRpbmcgdGhlbSBzZXZlcmFsIHRpbWVzCisgICAgICAgIC0gQnkgc3Rvcmlu
ZyBtZXJlIG9mZnNldHMgaW4gdGhlIHRva2VucyBpbnN0ZWFkIG9mIHN0cmluZyB2aWV3cywgd2Ug
c2F2ZSBzcGFjZSBpbiB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgdGhlIHN0cmluZyB2aWV3IGlzIHVu
dXNlZCAoZS5nLiBmb3Iga2V5d29yZHMpCisgICAgICAgIC0gQnkgc3RvcmluZyBtZXJlIG9mZnNl
dHMgaW4gdGhlIHRva2VucyBpbnN0ZWFkIG9mIGxpbmUgbnVtYmVycywgd2UgY2FuIHNpbXBsaWZ5
IHRoZSB3aGl0ZXNwYWNlIGFuZCBjb21tZW50IGxleGluZzsgYW5kIHdlIGNhbiBlYXNpbHkgcmVj
b21wdXRlIHRoZSBsaW5lIG51bWJlciBvbiBkZW1hbmQKKyAgICAgICAgLSBCeSB1c2luZyB0ZW1w
bGF0ZXMgd2UgY2FuIGF2b2lkIGNvbnN0cnVjdGluZyBhbmQgZGVzdHJ1Y3RpbmcgdmVjdG9ycyBh
dCBydW50aW1lIGV2ZXJ5IHRpbWUgd2UgY2FsbCB0cnlUeXBlcywgY29uc3VtZVR5cGVzIG9yIHBl
ZWtUeXBlczsgYXMgd2VsbCBhcyBhdm9pZGluZyBhIGNhbGwgdG8gZmluZCgpLgorICAgICAgICAt
IEkgYWxzbyBob2lzdGVkIHRoZSBsZW5ndGggY2hlY2sgb3V0IG9mIHRoZSBsb29wIGluIExleGVy
OjpzdHJpbmcoKQorICAgICAgICBBbGwgb2YgdGhpcyBjb21iaW5lZCBicm91Z2h0IHRoZSB0aW1l
IHNwZW50IGluIHRoZSBwYXJzZXIgd2hlbiBydW5uaW5nIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC10ZXN0LWhhcm5lc3MtdGVzdC5odG1sIDUgdGltZXMgb24gbXkgbWFjaGluZSBmcm9tIDYxMm1z
IHRvIDQ2Mm1zLgorCisgICAgICAgIEkgYWxzbyByZW1vdmVkIHRoZSAnYW55Q2hhcmFjdGVyJyBt
ZXRob2Qgc2luY2UgaXQgd2FzIGRlYWQgY29kZS4KKyAgICAgICAgSSBhbHNvIHJlbW92ZWQgTGV4
ZXI6OnBvc2l0aW9uKCksIGJ1dCBpdCBpcyBkaXJlY3RseSBlcXVpdmFsZW50IG5vdyB0byBwZWVr
KCkuc3RhcnRPZmZzZXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoZXJlIGlzIG5vIGlu
dGVuZGVkIGZ1bmN0aW9uYWwgY2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xMZXhlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OlRva2Vu
Ojp0eXBlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvbnN1bWVUb2tl
bkZyb21TdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpsaW5lTnVtYmVy
RnJvbU9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aXNXaGl0ZXNwYWNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjppc05ld2xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkxleGVyOjpza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpMZXhlcjo6ZGlnaXRTdGFyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNM
OjpMZXhlcjo6Y29tcGxldGVPcGVyYXRvck5hbWUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhl
cjo6TGV4ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpUb2tlbjo6c3RyaW5n
Vmlldyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvbnN1bWVUb2tlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnBlZWsgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkxleGVyOjpwZWVrRnVydGhlciBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6TGV4ZXI6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpM
ZXhlcjo6c2V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjppc0Z1bGx5
Q29uc3VtZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjplcnJvclN0
cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnN0cmluZyBjb25zdCk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaDoKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwZWVrKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBlZWtGdXJ0aGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpUeXBlczo6aW5jbHVkZXMpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlR5cGVzOjphcHBlbmROYW1lVG8pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlR5cGVzPHQ+OjppbmNsdWRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VHlw
ZXM8dD46OmFwcGVuZE5hbWVUbyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpw
ZWVrVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6dHJ5VHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjp0cnlUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpjb25zdW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UGFyc2VyOjpjb25zdW1lVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNl
cjo6Y29uc3VtZUludGVncmFsTGl0ZXJhbCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZUNvbnN0YW50RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6UGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZUJ1aWx0SW5TZW1hbnRpYyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
UGFyc2VyOjpwYXJzZVJlc291cmNlU2VtYW50aWMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VRdWFsaWZpZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJz
ZXI6OnBhcnNlU3RydWN0dXJlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFy
c2VyOjpwYXJzZVN0cnVjdHVyZURlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OlBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
V0hMU0w6OlBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbk1lbWJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZUNvbXB1dGVGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aW9u
RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VSZWd1
bGFyRnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2Vy
OjpwYXJzZUJsb2NrQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZVN3aXRjaENhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VWYXJp
YWJsZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNl
U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRWZmZWN0
ZnVsQXNzaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUxp
bWl0ZWRTdWZmaXhPcGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpw
YXJzZVN1ZmZpeE9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNv
bXBsZXRlQXNzaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJz
ZVBvc3NpYmxlVGVybmFyeUNvbmRpdGlvbmFsKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQ
YXJzZXI6OmNvbXBsZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVSZWxhdGlvbmFsQmluYXJ5
T3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9z
c2libGVTaGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpjb21wbGV0ZVBv
c3NpYmxlQWRkKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbXBsZXRlUG9z
c2libGVNdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVBv
c3NpYmxlUHJlZml4KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlQ2Fs
bEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUZXJt
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJpYWJsZUxpZmV0aW1lcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6YW5vbnltb3VzVG9rZW4pOgorCiAyMDE5LTA3
LTA1ICBSeWFuIEhhZGRhZCAgPHJ5YW5oYWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNDcxMTUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCmluZGV4IGI4MzZjNWQ2ZWJmYTBiN2ZlNzVj
ZjBhN2Q0MGNhZjJjODIyZDBjNTMuLmI5ZWQ1YzAxNzYzNDllYWViYWE3ZjkwYjQ2YzhhYWYwMjFk
YTc2NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMTGV4ZXIuY3BwCkBAIC0yNDcsNiArMjQ3LDEwIEBAIGNvbnN0IGNoYXIqIExleGVyOjpUb2tl
bjo6dHlwZU5hbWUoVHlwZSB0eXBlKQogICAgICAgICByZXR1cm4gIiEiOwogICAgIGNhc2UgVHlw
ZTo6QXQ6CiAgICAgICAgIHJldHVybiAiQCI7CisgICAgY2FzZSBUeXBlOjpFbmRPZkZpbGU6Cisg
ICAgICAgIHJldHVybiAiRU9GIjsKKyAgICBjYXNlIFR5cGU6OkludmFsaWQ6CisgICAgICAgIHJl
dHVybiAiTEVYSU5HX0VSUk9SIjsKICAgICB9CiB9CiAKQEAgLTM3MiwyOCArMzc2LDMxIEBAIGF1
dG8gTGV4ZXI6OnJlY29nbml6ZUtleXdvcmQodW5zaWduZWQgZW5kKSAtPiBPcHRpb25hbDxUb2tl
bjo6VHlwZT4KICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1hdXRvIExleGVyOjpjb25z
dW1lVG9rZW5Gcm9tU3RyZWFtKCkgLT4gT3B0aW9uYWw8VG9rZW4+CithdXRvIExleGVyOjpjb25z
dW1lVG9rZW5Gcm9tU3RyZWFtKCkgLT4gVG9rZW4KIHsKLSAgICBhdXRvIHByZXBhcmUgPSBbJl0o
dW5zaWduZWQgbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZSB0eXBlKSAtPiBPcHRpb25hbDxUb2tlbj4g
eworICAgIGF1dG8gcHJlcGFyZSA9IFsmXSh1bnNpZ25lZCBuZXdPZmZzZXQsIFRva2VuOjpUeXBl
IHR5cGUpIC0+IFRva2VuIHsKICAgICAgICAgYXV0byBvbGRPZmZzZXQgPSBtX29mZnNldDsKICAg
ICAgICAgbV9vZmZzZXQgPSBuZXdPZmZzZXQ7CiAgICAgICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29t
bWVudHMoKTsKLSAgICAgICAgcmV0dXJuIHt7IG1fc3RyaW5nVmlldy5zdWJzdHJpbmcob2xkT2Zm
c2V0LCBuZXdPZmZzZXQgLSBvbGRPZmZzZXQpLCBtX2xpbmVOdW1iZXIsIHR5cGUgfX07CisgICAg
ICAgIHJldHVybiB7IG9sZE9mZnNldCwgbmV3T2Zmc2V0LCB0eXBlIH07CiAgICAgfTsKIAorICAg
IGlmIChhdXRvIG5ld09mZnNldCA9IGlkZW50aWZpZXIobV9vZmZzZXQpKSB7CisgICAgICAgIGlm
IChhdXRvIHJlc3VsdCA9IHJlY29nbml6ZUtleXdvcmQoKm5ld09mZnNldCkpIHsKKyAgICAgICAg
ICAgIGlmICgqcmVzdWx0ID09IFRva2VuOjpUeXBlOjpPcGVyYXRvcikgeworICAgICAgICAgICAg
ICAgIGlmIChhdXRvIG5ld2VyT2Zmc2V0ID0gY29tcGxldGVPcGVyYXRvck5hbWUoKm5ld09mZnNl
dCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdlck9mZnNldCwgVG9r
ZW46OlR5cGU6Ok9wZXJhdG9yTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCAqcmVzdWx0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CisgICAgfQog
ICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGZsb2F0TGl0ZXJhbChtX29mZnNldCkpCiAgICAgICAg
IHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpGbG9hdExpdGVyYWwpOwog
ICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHVpbnRMaXRlcmFsKG1fb2Zmc2V0KSkKICAgICAgICAg
cmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsKTsKICAg
ICBpZiAoYXV0byBuZXdPZmZzZXQgPSBpbnRMaXRlcmFsKG1fb2Zmc2V0KSkKICAgICAgICAgcmV0
dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OkludExpdGVyYWwpOwotICAgIGlm
IChhdXRvIG5ld09mZnNldCA9IG9wZXJhdG9yTmFtZShtX29mZnNldCkpCi0gICAgICAgIHJldHVy
biBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWUpOwotICAgIGlm
IChhdXRvIG5ld09mZnNldCA9IGlkZW50aWZpZXIobV9vZmZzZXQpKSB7Ci0gICAgICAgIGlmIChh
dXRvIHJlc3VsdCA9IHJlY29nbml6ZUtleXdvcmQoKm5ld09mZnNldCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCAqcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHByZXBh
cmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwotICAgIH0KICAgICAvLyBT
b3J0ZWQgYnkgbGVuZ3RoLCBzbyBsb25nZXIgbWF0Y2hlcyBhcmUgcHJlZmVyYWJsZSB0byBzaG9y
dGVyIG1hdGNoZXMuCiAgICAgaWYgKGF1dG8gbmV3T2Zmc2V0ID0gc3RyaW5nKCI+Pj0iLCBtX29m
ZnNldCkpCiAgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpS
aWdodFNoaWZ0RXF1YWxzKTsKQEAgLTQ5MCwyMCArNDk3LDI4IEBAIGF1dG8gTGV4ZXI6OmNvbnN1
bWVUb2tlbkZyb21TdHJlYW0oKSAtPiBPcHRpb25hbDxUb2tlbj4KICAgICBpZiAoYXV0byBuZXdP
ZmZzZXQgPSBjaGFyYWN0ZXIoJ0AnLCBtX29mZnNldCkpCiAgICAgICAgIHJldHVybiBwcmVwYXJl
KCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpBdCk7CiAKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIGlmIChpc0Z1bGx5Q29uc3VtZWQoKSkKKyAgICAgICAgcmV0dXJuIHByZXBhcmUobV9v
ZmZzZXQsIFRva2VuOjpUeXBlOjpFbmRPZkZpbGUpOworICAgIHJldHVybiBwcmVwYXJlKG1fb2Zm
c2V0LCBUb2tlbjo6VHlwZTo6SW52YWxpZCk7CiB9CiAKLXZvaWQgTGV4ZXI6OnNraXBXaGl0ZXNw
YWNlQW5kQ29tbWVudHMoKQordW5zaWduZWQgTGV4ZXI6OmxpbmVOdW1iZXJGcm9tT2Zmc2V0KHVu
c2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAgICB1bnNpZ25lZCBzYXZlZE9mZnNldDsKLSAgICBk
byB7Ci0gICAgICAgIHNhdmVkT2Zmc2V0ID0gbV9vZmZzZXQ7Ci0gICAgICAgIHNraXBXaGl0ZXNw
YWNlKCk7Ci0gICAgICAgIHNraXBMaW5lQ29tbWVudCgpOwotICAgICAgICBza2lwTG9uZ0NvbW1l
bnQoKTsKLSAgICB9IHdoaWxlIChzYXZlZE9mZnNldCAhPSBtX29mZnNldCk7CisgICAgLy8gQ291
bnRpbmcgZnJvbSAxIHRvIG1hdGNoIG1vc3QgdGV4dCBlZGl0b3JzLgorICAgIHVuc2lnbmVkIGxp
bmVOdW1iZXIgPSAxOworICAgIGZvciAodW5zaWduZWQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgdGFy
Z2V0T2Zmc2V0OyArK29mZnNldCkgeworICAgICAgICBpZiAobV9zdHJpbmdWaWV3W29mZnNldF0g
PT0gJ1xuJykKKyAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICB9CisgICAgcmV0dXJuIGxp
bmVOdW1iZXI7CiB9CiAKKy8vIFdlIGNhbiB0YWtlIGFkdmFudGFnZSBvZiB0d28gcHJvcGVydGll
cyBvZiBVbmljb2RlOgorLy8gMS4gVGhlIGNvbnNpdHV0ZW50IFVURi0xNiBjb2RlIHVuaXRzIGZv
ciBhbGwgbm9uLUJNUCBjb2RlIHBvaW50cyBhcmUgc3Vycm9nYXRlcywKKy8vICAgICAgICB3aGlj
aCBtZWFucyB3ZSdsbCBuZXZlciBzZWUgYSBmYWxzZSBtYXRjaC4gSWYgd2Ugc2VlIGEgQk1QIGNv
ZGUgdW5pdCwgd2UKKy8vICAgICAgICByZWFsbHkgaGF2ZSBhIEJNUCBjb2RlIHBvaW50LgorLy8g
Mi4gRXZlcnl0aGluZyB3ZSdyZSBsb29raW5nIGZvciBpcyBpbiBCTVAKKwogc3RhdGljIGlubGlu
ZSBib29sIGlzV2hpdGVzcGFjZShVQ2hhciBjb2RlVW5pdCkKIHsKICAgICBzd2l0Y2ggKGNvZGVV
bml0KSB7CkBAIC01MjgsNTMgKzU0MywyOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNOZXdsaW5l
KFVDaGFyIGNvZGVVbml0KQogICAgIH0KIH0KIAotLy8gV2UgY2FuIHRha2UgYWR2YW50YWdlIG9m
IHR3byBwcm9wZXJ0aWVzIG9mIFVuaWNvZGU6Ci0vLyAxLiBUaGUgY29uc2l0dXRlbnQgVVRGLTE2
IGNvZGUgdW5pdHMgZm9yIGFsbCBub24tQk1QIGNvZGUgcG9pbnRzIGFyZSBzdXJyb2dhdGVzLAot
Ly8gICAgICAgIHdoaWNoIG1lYW5zIHdlJ2xsIG5ldmVyIHNlZSBhIGZhbHNlIG1hdGNoLiBJZiB3
ZSBzZWUgYSBCTVAgY29kZSB1bml0LCB3ZQotLy8gICAgICAgIHJlYWxseSBoYXZlIGEgQk1QIGNv
ZGUgcG9pbnQuCi0vLyAyLiBFdmVyeXRoaW5nIHdlJ3JlIGxvb2tpbmcgZm9yIGlzIGluIEJNUAot
Ci12b2lkIExleGVyOjpza2lwV2hpdGVzcGFjZSgpCi17Ci0gICAgZm9yICggOyBtX29mZnNldCA8
IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiBpc1doaXRlc3BhY2UobV9zdHJpbmdWaWV3W21fb2Zm
c2V0XSk7ICsrbV9vZmZzZXQpIHsKLSAgICAgICAgaWYgKG1fc3RyaW5nVmlld1ttX29mZnNldF0g
PT0gJ1xyJyAmJiBtX29mZnNldCArIDEgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJp
bmdWaWV3W21fb2Zmc2V0ICsgMV0gPT0gJ1xuJykgewotICAgICAgICAgICAgKyttX29mZnNldDsK
LSAgICAgICAgICAgICsrbV9saW5lTnVtYmVyOwotICAgICAgICB9IGVsc2UgaWYgKGlzTmV3bGlu
ZShtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdKSkKLSAgICAgICAgICAgICsrbV9saW5lTnVtYmVyOwot
ICAgIH0KLX0KLQotdm9pZCBMZXhlcjo6c2tpcExpbmVDb21tZW50KCkKLXsKLSAgICBpZiAobV9v
ZmZzZXQgKyAxID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSB8fCBtX3N0cmluZ1ZpZXdbbV9vZmZz
ZXRdICE9ICcvJyB8fCBtX3N0cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSAhPSAnLycpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fb2Zmc2V0ICs9IDI7Ci0gICAgZm9yICggOyBtX29mZnNldCA8IG1f
c3RyaW5nVmlldy5sZW5ndGgoKSAmJiAhaXNOZXdsaW5lKG1fc3RyaW5nVmlld1ttX29mZnNldF0p
OyArK21fb2Zmc2V0KSB7IH0KLX0KLQotdm9pZCBMZXhlcjo6c2tpcExvbmdDb21tZW50KCkKK3Zv
aWQgTGV4ZXI6OnNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKQogewotICAgIGlmIChtX29mZnNl
dCArIDEgPj0gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpIHx8IG1fc3RyaW5nVmlld1ttX29mZnNldF0g
IT0gJy8nIHx8IG1fc3RyaW5nVmlld1ttX29mZnNldCArIDFdICE9ICcqJykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9vZmZzZXQgKz0gMjsKLSAgICBkbyB7Ci0gICAgICAgIGZvciAoIDsgbV9v
ZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W21fb2Zmc2V0XSAh
PSAnKic7ICsrbV9vZmZzZXQpIHsKLSAgICAgICAgICAgIGlmIChtX3N0cmluZ1ZpZXdbbV9vZmZz
ZXRdID09ICdccicgJiYgbV9vZmZzZXQgKyAxIDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1f
c3RyaW5nVmlld1ttX29mZnNldCArIDFdID09ICdcbicpIHsKLSAgICAgICAgICAgICAgICArK21f
b2Zmc2V0OwotICAgICAgICAgICAgICAgICsrbV9saW5lTnVtYmVyOwotICAgICAgICAgICAgfSBl
bHNlIGlmIChpc05ld2xpbmUobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSkpCi0gICAgICAgICAgICAg
ICAgKyttX2xpbmVOdW1iZXI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fb2Zmc2V0IDwgbV9z
dHJpbmdWaWV3Lmxlbmd0aCgpKQotICAgICAgICAgICAgKyttX29mZnNldDsKLSAgICAgICAgaWYg
KG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmlld1ttX29mZnNl
dF0gPT0gJy8nKSB7CisgICAgd2hpbGUgKG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgp
KSB7CisgICAgICAgIGlmIChpc1doaXRlc3BhY2UobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSkpCiAg
ICAgICAgICAgICArK21fb2Zmc2V0OworICAgICAgICBlbHNlIGlmIChtX3N0cmluZ1ZpZXdbbV9v
ZmZzZXRdID09ICcvJyAmJiBtX29mZnNldCArIDEgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpIHsK
KyAgICAgICAgICAgIGlmIChtX3N0cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSA9PSAnLycpIHsKKyAg
ICAgICAgICAgICAgICAvLyBMaW5lIGNvbW1lbnQKKyAgICAgICAgICAgICAgICBtX29mZnNldCAr
PSAyOworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSBvZiBcclxuIHRo
aXMgbWFrZXMgdGhlIGNvbW1lbnQgZW5kIG9uIHRoZSBcci4gSXQgaXMgZmluZSwgYXMgdGhlIFxu
IGFmdGVyIHRoYXQgaXMgc2ltcGxlIHdoaXRlc3BhY2UuCisgICAgICAgICAgICAgICAgZm9yICgg
OyBtX29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSAmJiAhaXNOZXdsaW5lKG1fc3RyaW5n
Vmlld1ttX29mZnNldF0pOyArK21fb2Zmc2V0KSB7IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV9zdHJpbmdWaWV3W21fb2Zmc2V0ICsgMV0gPT0gJyonKSB7CisgICAgICAgICAgICAgICAgLy8g
TG9uZyBjb21tZW50CisgICAgICAgICAgICAgICAgZm9yICggOyBtX29mZnNldCA8IG1fc3RyaW5n
Vmlldy5sZW5ndGgoKSA7ICsrbV9vZmZzZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c3RyaW5nVmlld1ttX29mZnNldF0gPT0gJyonICYmIG1fb2Zmc2V0ICsgMSA8IG1fc3RyaW5nVmll
dy5sZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSA9PSAnLycpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fb2Zmc2V0ICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0gd2hpbGUgKG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKTsKKyAgICB9CiB9
CiAKIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiBhcmUgdW5uZWNlc3Nhcnk7IHdlIHNob3VsZG4ndCBu
ZWVkIHRvIGNvbXBpbGUgdGhlbS4KQEAgLTY3NiwxMiArNjY3LDkgQEAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IExleGVyOjpkaWdpdCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAKIHVuc2lnbmVkIExleGVy
OjpkaWdpdFN0YXIodW5zaWduZWQgb2Zmc2V0KSBjb25zdAogewotICAgIHdoaWxlICh0cnVlKSB7
Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZGlnaXQob2Zmc2V0KTsKLSAgICAgICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgICAgICByZXR1cm4gb2Zmc2V0OworICAgIHdoaWxlIChhdXRvIHJlc3VsdCA9
IGRpZ2l0KG9mZnNldCkpCiAgICAgICAgIG9mZnNldCA9ICpyZXN1bHQ7Ci0gICAgfQorICAgIHJl
dHVybiBvZmZzZXQ7CiB9CiAKIE9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6Y2hhcmFjdGVyKGNo
YXIgY2hhcmFjdGVyLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CkBAIC03NTQsNjggKzc0Miw2NiBA
QCBPcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OmlkZW50aWZpZXIodW5zaWduZWQgb2Zmc2V0KSBj
b25zdAogICAgIHJldHVybiB2YWxpZElkZW50aWZpZXIob2Zmc2V0KTsKIH0KIAotT3B0aW9uYWw8
dW5zaWduZWQ+IExleGVyOjpvcGVyYXRvck5hbWUodW5zaWduZWQgb2Zmc2V0KSBjb25zdAorT3B0
aW9uYWw8dW5zaWduZWQ+IExleGVyOjpjb21wbGV0ZU9wZXJhdG9yTmFtZSh1bnNpZ25lZCBvZmZz
ZXQpIGNvbnN0CiB7Ci0gICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJvcGVyYXRvciYuIiwg
b2Zmc2V0KSkKKyAgICAvLyBTb3J0ZWQgYnkgbGVuZ3RoLCBzbyBsb25nZXIgbWF0Y2hlcyBhcmUg
cHJlZmVyYWJsZSB0byBzaG9ydGVyIG1hdGNoZXMuCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3Ry
aW5nKCImW10iLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRv
IHJlc3VsdCA9IHN0cmluZygiW109Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIj4+Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIjw8Iiwgb2Zmc2V0KSkK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIisr
Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQg
PSBzdHJpbmcoIi0tIiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAo
YXV0byByZXN1bHQgPSBzdHJpbmcoIiYmIiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoInx8Iiwgb2Zmc2V0KSkKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIj49Iiwgb2Zmc2V0
KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmco
Ijw9Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1
bHQgPSBzdHJpbmcoIj09Iiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBp
ZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIltdIiwgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIiYuIiwgb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIHZhbGlkSWRlbnRpZmllcigqcmVzdWx0KTsKLSAgICBpZiAoYXV0byByZXN1bHQg
PSBzdHJpbmcoIm9wZXJhdG9yLiIsIG9mZnNldCkpIHsKLSAgICAgICAgaWYgKChyZXN1bHQgPSB2
YWxpZElkZW50aWZpZXIoKnJlc3VsdCkpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byByZXN1bHQy
ID0gY2hhcmFjdGVyKCc9JywgKnJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDI7Ci0gICAgICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBj
aGFyYWN0ZXIoJysnLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNoYXJhY3RlcignLScsIG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCcqJywgb2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0ZXIoJy8nLCBv
ZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNo
YXJhY3RlcignJScsIG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCc8Jywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0ZXIoJz4nLCBvZmZzZXQpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJhY3RlcignIScsIG9m
ZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hh
cmFjdGVyKCd+Jywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0
byByZXN1bHQgPSBjaGFyYWN0ZXIoJyYnLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJhY3RlcignXicsIG9mZnNldCkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCd8Jywgb2Zm
c2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFy
YWN0ZXIoJy4nLCBvZmZzZXQpKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSB2YWxpZElk
ZW50aWZpZXIoKnJlc3VsdCkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdDMgPSBjaGFy
YWN0ZXIoJz0nLCAqcmVzdWx0MikpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDM7Cisg
ICAgICAgICAgICByZXR1cm4gKnJlc3VsdDI7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGF1
dG8gcmVzdWx0ID0gc3RyaW5nKCJvcGVyYXRvciIsIG9mZnNldCkpIHsKLSAgICAgICAgLy8gU29y
dGVkIGJ5IGxlbmd0aCwgc28gbG9uZ2VyIG1hdGNoZXMgYXJlIHByZWZlcmFibGUgdG8gc2hvcnRl
ciBtYXRjaGVzLgotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCImW10iLCAqcmVz
dWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1
bHQyID0gc3RyaW5nKCJbXT0iLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQy
OwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCI+PiIsICpyZXN1bHQpKQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJp
bmcoIjw8IiwgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAg
aWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiKysiLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCItLSIsICpy
ZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJl
c3VsdDIgPSBzdHJpbmcoIiYmIiwgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygifHwiLCAqcmVzdWx0KSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3Ry
aW5nKCI+PSIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAg
IGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIjw9IiwgKnJlc3VsdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiPT0iLCAq
cmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byBy
ZXN1bHQyID0gc3RyaW5nKCJbXSIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJysnLCAqcmVzdWx0KSkK
LSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0g
Y2hhcmFjdGVyKCctJywgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignKicsICpyZXN1bHQpKQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0
ZXIoJy8nLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBp
ZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCclJywgKnJlc3VsdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignPCcs
ICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRv
IHJlc3VsdDIgPSBjaGFyYWN0ZXIoJz4nLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCchJywgKnJlc3Vs
dCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0
MiA9IGNoYXJhY3RlcignficsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7
Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJyYnLCAqcmVzdWx0KSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hh
cmFjdGVyKCdeJywgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignfCcsICpyZXN1bHQpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgfQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuaApp
bmRleCBiYmRlOWZlNGY4YmM0YjFlMmMzNWIwNTkwOWM1MTFmZTQ3YjIyYzFiLi5lMmUyMmFhOGYx
MmJkNjE1N2I2YWFlYzUwMDhlMmRhOWUxZTFlMjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oCkBAIC01NywxNSArNTcsOSBAQCBwdWJs
aWM6CiAgICAgTGV4ZXImIG9wZXJhdG9yPShMZXhlciYmKSA9IGRlZmF1bHQ7CiAKICAgICBzdHJ1
Y3QgVG9rZW4gewotICAgICAgICBUb2tlbigpID0gZGVsZXRlOwotICAgICAgICBUb2tlbihjb25z
dCBUb2tlbiYpID0gZGVmYXVsdDsKLSAgICAgICAgVG9rZW4oVG9rZW4mJikgPSBkZWZhdWx0Owot
ICAgICAgICBUb2tlbiYgb3BlcmF0b3I9KGNvbnN0IFRva2VuJikgPSBkZWZhdWx0OwotICAgICAg
ICBUb2tlbiYgb3BlcmF0b3I9KFRva2VuJiYpID0gZGVmYXVsdDsKLQotICAgICAgICBTdHJpbmdW
aWV3IHN0cmluZ1ZpZXc7Ci0gICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7Ci0gICAgICAgIGVu
dW0gY2xhc3MgVHlwZSB7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OworICAgICAgICB1
bnNpZ25lZCBlbmRPZmZzZXQ7CisgICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qgewog
ICAgICAgICAgICAgSW50TGl0ZXJhbCwKICAgICAgICAgICAgIFVpbnRMaXRlcmFsLAogICAgICAg
ICAgICAgRmxvYXRMaXRlcmFsLApAQCAtMTcyLDEyICsxNjYsMTkgQEAgcHVibGljOgogICAgICAg
ICAgICAgVGlsZGUsCiAgICAgICAgICAgICBFeGNsYW1hdGlvblBvaW50LAogICAgICAgICAgICAg
QXQsCi0gICAgICAgIH0gdHlwZTsKKyAgICAgICAgICAgIEVuZE9mRmlsZSwKKyAgICAgICAgICAg
IEludmFsaWQKKyAgICAgICAgfSB0eXBlIHtUeXBlOjpJbnZhbGlkfTsKIAogICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogdHlwZU5hbWUoVHlwZSk7CisKKyAgICAgICAgY29uc3QgU3RyaW5nVmll
dyBzdHJpbmdWaWV3KGNvbnN0IExleGVyJiBsZXhlcikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGxleGVyLm1fc3RyaW5nVmlldy5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNl
dCAtIHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgfQogICAgIH07CiAKLSAgICBPcHRpb25hbDxUb2tl
bj4gY29uc3VtZVRva2VuKCkKKyAgICBUb2tlbiBjb25zdW1lVG9rZW4oKQogICAgIHsKICAgICAg
ICAgYXV0byByZXN1bHQgPSBtX3JpbmdCdWZmZXJbbV9yaW5nQnVmZmVySW5kZXhdOwogICAgICAg
ICBtX3JpbmdCdWZmZXJbbV9yaW5nQnVmZmVySW5kZXhdID0gY29uc3VtZVRva2VuRnJvbVN0cmVh
bSgpOwpAQCAtMTg1LDEyICsxODYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KIAotICAgIE9wdGlvbmFsPFRva2VuPiBwZWVrKCkKKyAgICBUb2tlbiBwZWVrKCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3JpbmdCdWZmZXJbbV9yaW5nQnVmZmVySW5k
ZXhdOwogICAgIH0KIAotICAgIE9wdGlvbmFsPFRva2VuPiBwZWVrRnVydGhlcigpCisgICAgVG9r
ZW4gcGVla0Z1cnRoZXIoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcmluZ0J1ZmZl
clsobV9yaW5nQnVmZmVySW5kZXggKyAxKSAlIDJdOwogICAgIH0KQEAgLTE5OCwxMCArMTk5LDkg
QEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdGhpcwogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgzNTcKICAgICBzdHJ1
Y3QgU3RhdGUgewotICAgICAgICBPcHRpb25hbDxUb2tlbj4gcmluZ0J1ZmZlclsyXTsKKyAgICAg
ICAgVG9rZW4gcmluZ0J1ZmZlclsyXTsKICAgICAgICAgdW5zaWduZWQgcmluZ0J1ZmZlckluZGV4
OwogICAgICAgICB1bnNpZ25lZCBvZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7
CiAgICAgfTsKIAogICAgIFN0YXRlIHN0YXRlKCkgY29uc3QKQEAgLTIxMSw3ICsyMTEsNiBAQCBw
dWJsaWM6CiAgICAgICAgIHN0YXRlLnJpbmdCdWZmZXJbMV0gPSBtX3JpbmdCdWZmZXJbMV07CiAg
ICAgICAgIHN0YXRlLnJpbmdCdWZmZXJJbmRleCA9IG1fcmluZ0J1ZmZlckluZGV4OwogICAgICAg
ICBzdGF0ZS5vZmZzZXQgPSBtX29mZnNldDsKLSAgICAgICAgc3RhdGUubGluZU51bWJlciA9IG1f
bGluZU51bWJlcjsKICAgICAgICAgcmV0dXJuIHN0YXRlOwogICAgIH0KIApAQCAtMjIxLDcgKzIy
MCw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9yaW5nQnVmZmVyWzFdID0gc3RhdGUucmluZ0J1ZmZl
clsxXTsKICAgICAgICAgbV9yaW5nQnVmZmVySW5kZXggPSBzdGF0ZS5yaW5nQnVmZmVySW5kZXg7
CiAgICAgICAgIG1fb2Zmc2V0ID0gc3RhdGUub2Zmc2V0OwotICAgICAgICBtX2xpbmVOdW1iZXIg
PSBzdGF0ZS5saW5lTnVtYmVyOwogCiAgICAgfQogCkBAIC0yMzEsMjYgKzIyOSwyNCBAQCBwdWJs
aWM6CiAgICAgICAgIG1fcmluZ0J1ZmZlclsxXSA9IFdURk1vdmUoc3RhdGUucmluZ0J1ZmZlclsx
XSk7CiAgICAgICAgIG1fcmluZ0J1ZmZlckluZGV4ID0gV1RGTW92ZShzdGF0ZS5yaW5nQnVmZmVy
SW5kZXgpOwogICAgICAgICBtX29mZnNldCA9IFdURk1vdmUoc3RhdGUub2Zmc2V0KTsKLSAgICAg
ICAgbV9saW5lTnVtYmVyID0gV1RGTW92ZShzdGF0ZS5saW5lTnVtYmVyKTsKICAgICB9CiAKICAg
ICBib29sIGlzRnVsbHlDb25zdW1lZCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9v
ZmZzZXQgPT0gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpOworICAgICAgICByZXR1cm4gcGVlaygpLnR5
cGUgPT0gVG9rZW46OlR5cGU6OkVuZE9mRmlsZTsKICAgICB9CiAKICAgICBTdHJpbmcgZXJyb3JT
dHJpbmcoY29uc3QgVG9rZW4mIHRva2VuLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgewot
ICAgICAgICByZXR1cm4gbWFrZVN0cmluZygiUGFyc2UgZXJyb3IgYXQgbGluZSAiLCB0b2tlbi5s
aW5lTnVtYmVyLCAiOiAiLCBtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlBh
cnNlIGVycm9yIGF0IGxpbmUgIiwgbGluZU51bWJlckZyb21PZmZzZXQodG9rZW4uc3RhcnRPZmZz
ZXQpLCAiOiAiLCBtZXNzYWdlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3B0aW9uYWw8VG9r
ZW4+IGNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKTsKKyAgICBUb2tlbiBjb25zdW1lVG9rZW5Gcm9t
U3RyZWFtKCk7CiAKICAgICB2b2lkIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKLSAgICB2
b2lkIHNraXBXaGl0ZXNwYWNlKCk7Ci0gICAgdm9pZCBza2lwTGluZUNvbW1lbnQoKTsKLSAgICB2
b2lkIHNraXBMb25nQ29tbWVudCgpOworCisgICAgdW5zaWduZWQgbGluZU51bWJlckZyb21PZmZz
ZXQodW5zaWduZWQgb2Zmc2V0KTsKIAogICAgIE9wdGlvbmFsPFRva2VuOjpUeXBlPiByZWNvZ25p
emVLZXl3b3JkKHVuc2lnbmVkIGVuZCk7CiAKQEAgLTI2NSw0MiArMjYxLDMxIEBAIHByaXZhdGU6
CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGRpZ2l0KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNp
Z25lZCBkaWdpdFN0YXIodW5zaWduZWQpIGNvbnN0OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBj
aGFyYWN0ZXIoY2hhciwgdW5zaWduZWQpIGNvbnN0OwotICAgIHRlbXBsYXRlPHVuc2lnbmVkIGxl
bmd0aD4gT3B0aW9uYWw8dW5zaWduZWQ+IGFueUNoYXJhY3Rlcihjb25zdCBjaGFyICgmc3RyaW5n
KVtsZW5ndGhdLCB1bnNpZ25lZCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGNvcmVG
bG9hdExpdGVyYWxUeXBlMSh1bnNpZ25lZCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IGNvcmVGbG9hdExpdGVyYWwodW5zaWduZWQpIGNvbnN0OwogICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBmbG9hdExpdGVyYWwodW5zaWduZWQpIGNvbnN0OwogICAgIHRlbXBsYXRlPHVuc2lnbmVkIGxl
bmd0aD4gT3B0aW9uYWw8dW5zaWduZWQ+IHN0cmluZyhjb25zdCBjaGFyICgmc3RyaW5nKVtsZW5n
dGhdLCB1bnNpZ25lZCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHZhbGlkSWRlbnRp
Zmllcih1bnNpZ25lZCkgY29uc3Q7CiAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGlkZW50aWZpZXIo
dW5zaWduZWQpIGNvbnN0OwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBvcGVyYXRvck5hbWUodW5z
aWduZWQpIGNvbnN0OworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBjb21wbGV0ZU9wZXJhdG9yTmFt
ZSh1bnNpZ25lZCkgY29uc3Q7CiAKICAgICBTdHJpbmdWaWV3IG1fc3RyaW5nVmlldzsKLSAgICBP
cHRpb25hbDxUb2tlbj4gbV9yaW5nQnVmZmVyWzJdOworICAgIFRva2VuIG1fcmluZ0J1ZmZlclsy
XTsKICAgICB1bnNpZ25lZCBtX3JpbmdCdWZmZXJJbmRleCB7IDAgfTsKICAgICB1bnNpZ25lZCBt
X29mZnNldCB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXIgeyAwIH07CiB9OwogCiB0
ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IE9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6c3RyaW5n
KGNvbnN0IGNoYXIgKCZzdHJpbmcpW2xlbmd0aF0sIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsK
KyAgICBpZiAob2Zmc2V0ICsgbGVuZ3RoID4gbV9zdHJpbmdWaWV3Lmxlbmd0aCgpKQorICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGggLSAxOyArK2kpIHsKLSAgICAgICAgaWYgKG9mZnNldCArIGkgPj0gbV9zdHJpbmdWaWV3Lmxl
bmd0aCgpIHx8IG1fc3RyaW5nVmlld1tvZmZzZXQgKyBpXSAhPSBzdHJpbmdbaV0pCisgICAgICAg
IGlmIChtX3N0cmluZ1ZpZXdbb2Zmc2V0ICsgaV0gIT0gc3RyaW5nW2ldKQogICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAgICAgcmV0dXJuIG9mZnNldCArIGxlbmd0aCAt
IDE7CiB9CiAKLXRlbXBsYXRlPHVuc2lnbmVkIGxlbmd0aD4gT3B0aW9uYWw8dW5zaWduZWQ+IExl
eGVyOjphbnlDaGFyYWN0ZXIoY29uc3QgY2hhciAoJnN0cmluZylbbGVuZ3RoXSwgdW5zaWduZWQg
b2Zmc2V0KSBjb25zdAotewotICAgIGlmIChvZmZzZXQgPj0gbV9zdHJpbmdWaWV3Lmxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW5ndGggLSAxOyArK2kpIHsKLSAgICAgICAgaWYgKG1fc3RyaW5nVmlld1tvZmZzZXRd
ID09IHN0cmluZ1tpXSkKLSAgICAgICAgICAgIHJldHVybiBvZmZzZXQgKyAxOwotICAgIH0KLSAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXSExTTAogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIuaAppbmRleCA5MWZhYWNjY2MwYzdlOWI4YWUx
YjYyMzEyZDdhODk0YTJiYjU0NzZhLi5mNDMwYWI3OTBjMGNiMGM4ZDE1NGQ1NzRkZmVjYTkxM2Q2
ODFmODI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTE5hbWVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMTmFtZVJlc29sdmVyLmgKQEAgLTQ0LDggKzQ0LDYgQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB+TmFtZVJlc29sdmVyKCk7CiAKLSAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25E
ZWZpbml0aW9uJikgb3ZlcnJpZGU7Ci0KICAgICB2b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRlZmlu
aXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24qIGZ1bmN0aW9uRGVmaW5pdGlvbikKICAgICB7
CiAgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0gZnVuY3Rpb25EZWZpbml0aW9uOwpAQCAtNTQs
NiArNTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Jlc29sdmluZ0NhbGxzKGJvb2wgaXNS
ZXNvbHZpbmdDYWxscykgeyBtX2lzUmVzb2x2aW5nQ2FsbHMgPSBpc1Jlc29sdmluZ0NhbGxzOyB9
CiAKIHByaXZhdGU6CisgICAgdm9pZCB2aXNpdChBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92
ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpOYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6OlR5cGVSZWZlcmVuY2UmKSBvdmVycmlkZTsK
ICAgICB2b2lkIHZpc2l0KEFTVDo6QmxvY2smKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAppbmRleCA0MGYyNjlk
ZjFlMzA4NTA1YjU5NzIwYjIzZTcyYjY3NTJhNjRmMDhiLi4yMmIxYTliODkzMDZlMDA5YTBmNGY4
NDEyNTY0ZTRlYWQ3ZmUxNWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCkBAIC02Niw5ICs2Niw5IEBAIGF1dG8gUGFyc2Vy
OjpwYXJzZShQcm9ncmFtJiBwcm9ncmFtLCBTdHJpbmdWaWV3IHN0cmluZ1ZpZXcsIE1vZGUgbW9k
ZSkgLT4gT3B0aW9uCiAKICAgICB3aGlsZSAoIW1fbGV4ZXIuaXNGdWxseUNvbnN1bWVkKCkpIHsK
ICAgICAgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygpOwotICAgICAgICBpZiAoIXRva2Vu
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN3aXRjaCAodG9rZW4tPnR5cGUpIHsKKyAg
ICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7CisgICAgICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpJbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlNlbWljb2xvbjoKICAgICAgICAgICAgIG1fbGV4ZXIu
Y29uc3VtZVRva2VuKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEzNSw3NSArMTM1LDk0
IEBAIGF1dG8gUGFyc2VyOjpmYWlsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgVHJ5VG9QZWVrIHRy
eVRvUGVlaykgLT4gVW5leHBlY3RlZDxFcnJvCiAKIGF1dG8gUGFyc2VyOjpwZWVrKCkgLT4gRXhw
ZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4KIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4
ZXIucGVlaygpKSB7Ci0gICAgICAgIHJldHVybiAqdG9rZW47Ci0gICAgfQorICAgIGF1dG8gdG9r
ZW4gPSBtX2xleGVyLnBlZWsoKTsKKyAgICBpZiAodG9rZW4udHlwZSAhPSBMZXhlcjo6VG9rZW46
OlR5cGU6OkludmFsaWQgJiYgdG9rZW4udHlwZSAhPSBMZXhlcjo6VG9rZW46OlR5cGU6OkVuZE9m
RmlsZSkKKyAgICAgICAgcmV0dXJuIHsgdG9rZW4gfTsKICAgICByZXR1cm4gZmFpbCgiQ2Fubm90
IGNvbnN1bWUgdG9rZW4iX3N0ciwgVHJ5VG9QZWVrOjpObyk7CiB9CiAKIGF1dG8gUGFyc2VyOjpw
ZWVrRnVydGhlcigpIC0+IEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+CiB7Ci0gICAgaWYg
KGF1dG8gdG9rZW4gPSBtX2xleGVyLnBlZWtGdXJ0aGVyKCkpIHsKLSAgICAgICAgcmV0dXJuICp0
b2tlbjsKLSAgICB9CisgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVla0Z1cnRoZXIoKTsKKyAg
ICBpZiAodG9rZW4udHlwZSAhPSBMZXhlcjo6VG9rZW46OlR5cGU6OkludmFsaWQgJiYgdG9rZW4u
dHlwZSAhPSBMZXhlcjo6VG9rZW46OlR5cGU6OkVuZE9mRmlsZSkKKyAgICAgICAgcmV0dXJuIHsg
dG9rZW4gfTsKICAgICByZXR1cm4gZmFpbCgiQ2Fubm90IGNvbnN1bWUgdHdvIHRva2VucyJfc3Ry
LCBUcnlUb1BlZWs6Ok5vKTsKIH0KIAotYm9vbCBQYXJzZXI6OnBlZWtUeXBlcyhjb25zdCBWZWN0
b3I8TGV4ZXI6OlRva2VuOjpUeXBlPiYgdHlwZXMpCit0ZW1wbGF0ZSA8TGV4ZXI6OlRva2VuOjpU
eXBlIHQsIExleGVyOjpUb2tlbjo6VHlwZS4uLiB0cz4KK3N0cnVjdCBUeXBlcyB7CisgICAgc3Rh
dGljIGJvb2wgaW5jbHVkZXMoTGV4ZXI6OlRva2VuOjpUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gdCA9PSB0eXBlIHx8IFR5cGVzPHRzLi4uPjo6aW5jbHVkZXModHlwZSk7CisgICAg
fQorCisgICAgc3RhdGljIHZvaWQgYXBwZW5kTmFtZVRvKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIp
CisgICAgeworICAgICAgICBidWlsZGVyLmFwcGVuZChMZXhlcjo6VG9rZW46OnR5cGVOYW1lKHQp
KTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgIFR5cGVzPHRzLi4uPjo6
YXBwZW5kTmFtZVRvKGJ1aWxkZXIpOworICAgIH0KK307Cit0ZW1wbGF0ZSA8TGV4ZXI6OlRva2Vu
OjpUeXBlIHQ+CitzdHJ1Y3QgVHlwZXM8dD4geworICAgIHN0YXRpYyBib29sIGluY2x1ZGVzKExl
eGVyOjpUb2tlbjo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHQgPT0gdHlwZTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmROYW1lVG8oU3RyaW5nQnVpbGRlciYgYnVp
bGRlcikKKyAgICB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKExleGVyOjpUb2tlbjo6dHlwZU5h
bWUodCkpOworICAgIH0KK307CisKK3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUuLi4gdHlw
ZXM+Citib29sIFBhcnNlcjo6cGVla1R5cGVzKCkKIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1f
bGV4ZXIucGVlaygpKQotICAgICAgICByZXR1cm4gc3RkOjpmaW5kKHR5cGVzLmJlZ2luKCksIHR5
cGVzLmVuZCgpLCB0b2tlbi0+dHlwZSkgIT0gdHlwZXMuZW5kKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIGF1dG8gdG9rZW4gPSBtX2xleGVyLnBlZWsoKTsKKyAgICByZXR1cm4gVHlwZXM8dHlw
ZXMuLi4+OjppbmNsdWRlcyh0b2tlbi50eXBlKTsKIH0KIAogT3B0aW9uYWw8TGV4ZXI6OlRva2Vu
PiBQYXJzZXI6OnRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKGF1
dG8gdG9rZW4gPSBtX2xleGVyLnBlZWsoKSkgewotICAgICAgICBpZiAodG9rZW4tPnR5cGUgPT0g
dHlwZSkKLSAgICAgICAgICAgIHJldHVybiBtX2xleGVyLmNvbnN1bWVUb2tlbigpOwotICAgIH0K
KyAgICBhdXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCk7CisgICAgaWYgKHRva2VuLnR5cGUgPT0g
dHlwZSkKKyAgICAgICAgcmV0dXJuIHsgbV9sZXhlci5jb25zdW1lVG9rZW4oKSB9OwogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLU9wdGlvbmFsPExleGVyOjpUb2tlbj4gUGFyc2VyOjp0
cnlUeXBlcyhjb25zdCBWZWN0b3I8TGV4ZXI6OlRva2VuOjpUeXBlPiYgdHlwZXMpCit0ZW1wbGF0
ZSA8TGV4ZXI6OlRva2VuOjpUeXBlLi4uIHR5cGVzPgorT3B0aW9uYWw8TGV4ZXI6OlRva2VuPiBQ
YXJzZXI6OnRyeVR5cGVzKCkKIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygp
KSB7Ci0gICAgICAgIGlmIChzdGQ6OmZpbmQodHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIHRv
a2VuLT50eXBlKSAhPSB0eXBlcy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2xleGVyLmNv
bnN1bWVUb2tlbigpOwotICAgIH0KKyAgICBhdXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCk7Cisg
ICAgaWYgKFR5cGVzPHR5cGVzLi4uPjo6aW5jbHVkZXModG9rZW4udHlwZSkpCisgICAgICAgIHJl
dHVybiB7IG1fbGV4ZXIuY29uc3VtZVRva2VuKCkgfTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogfQogCiBhdXRvIFBhcnNlcjo6Y29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlIHR5cGUp
IC0+IEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+CiB7Ci0gICAgaWYgKGF1dG8gdG9rZW4g
PSBtX2xleGVyLmNvbnN1bWVUb2tlbigpKSB7Ci0gICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSB0
eXBlKQotICAgICAgICAgICAgcmV0dXJuICp0b2tlbjsKLSAgICAgICAgcmV0dXJuIGZhaWwobWFr
ZVN0cmluZygiVW5leHBlY3RlZCB0b2tlbiAoZXhwZWN0ZWQgIiwgTGV4ZXI6OlRva2VuOjp0eXBl
TmFtZSh0eXBlKSwgIiBnb3QgIiwgTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0b2tlbi0+dHlwZSks
ICIpIikpOwotICAgIH0KLSAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCJDYW5ub3QgY29uc3Vt
ZSB0b2tlbiAoZXhwZWN0ZWQgIiwgTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0eXBlKSwgIikiKSk7
CisgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7CisgICAgaWYgKHRva2Vu
LnR5cGUgPT0gdHlwZSkKKyAgICAgICAgcmV0dXJuIHsgdG9rZW4gfTsKKyAgICByZXR1cm4gZmFp
bChtYWtlU3RyaW5nKCJVbmV4cGVjdGVkIHRva2VuIChleHBlY3RlZCAiLCBMZXhlcjo6VG9rZW46
OnR5cGVOYW1lKHR5cGUpLCAiIGdvdCAiLCBMZXhlcjo6VG9rZW46OnR5cGVOYW1lKHRva2VuLnR5
cGUpLCAiKSIpKTsKIH0KIAotYXV0byBQYXJzZXI6OmNvbnN1bWVUeXBlcyhjb25zdCBWZWN0b3I8
TGV4ZXI6OlRva2VuOjpUeXBlPiYgdHlwZXMpIC0+IEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJy
b3I+Cit0ZW1wbGF0ZSA8TGV4ZXI6OlRva2VuOjpUeXBlLi4uIHR5cGVzPgorYXV0byBQYXJzZXI6
OmNvbnN1bWVUeXBlcygpIC0+IEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+CiB7CiAgICAg
YXV0byBidWlsZEV4cGVjdGVkU3RyaW5nID0gWyZdKCkgLT4gU3RyaW5nIHsKICAgICAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgiWyIpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHlwZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
ICAgIGlmIChpID4gMCkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKLSAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKExleGVyOjpUb2tlbjo6dHlwZU5hbWUodHlwZXNbaV0p
KTsKLSAgICAgICAgfQorICAgICAgICBUeXBlczx0eXBlcy4uLj46OmFwcGVuZE5hbWVUbyhidWls
ZGVyKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoIl0iKTsKICAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKICAgICB9OwogCi0gICAgaWYgKGF1dG8gdG9rZW4gPSBtX2xleGVyLmNv
bnN1bWVUb2tlbigpKSB7Ci0gICAgICAgIGlmIChzdGQ6OmZpbmQodHlwZXMuYmVnaW4oKSwgdHlw
ZXMuZW5kKCksIHRva2VuLT50eXBlKSAhPSB0eXBlcy5lbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biAqdG9rZW47Ci0gICAgICAgIHJldHVybiBmYWlsKG1ha2VTdHJpbmcoIlVuZXhwZWN0ZWQgdG9r
ZW4gKGV4cGVjdGVkIG9uZSBvZiAiLCBidWlsZEV4cGVjdGVkU3RyaW5nKCksICIgZ290ICIsIExl
eGVyOjpUb2tlbjo6dHlwZU5hbWUodG9rZW4tPnR5cGUpLCAiKSIpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGZhaWwobWFrZVN0cmluZygiQ2Fubm90IGNvbnN1bWUgdG9rZW4gKGV4cGVjdGVkICIsIGJ1
aWxkRXhwZWN0ZWRTdHJpbmcoKSwgIikiKSk7CisgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIuY29u
c3VtZVRva2VuKCk7CisgICAgaWYgKFR5cGVzPHR5cGVzLi4uPjo6aW5jbHVkZXModG9rZW4udHlw
ZSkpCisgICAgICAgIHJldHVybiB7IHRva2VuIH07CisgICAgcmV0dXJuIGZhaWwobWFrZVN0cmlu
ZygiVW5leHBlY3RlZCB0b2tlbiAoZXhwZWN0ZWQgb25lIG9mICIsIGJ1aWxkRXhwZWN0ZWRTdHJp
bmcoKSwgIiBnb3QgIiwgTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0b2tlbi50eXBlKSwgIikiKSk7
CiB9CiAKIHN0YXRpYyBpbnQgZGlnaXRWYWx1ZShVQ2hhciBjaGFyYWN0ZXIpCkBAIC0yNzksMjAg
KzI5OCwyMCBAQCBzdGF0aWMgRXhwZWN0ZWQ8ZmxvYXQsIFBhcnNlcjo6RXJyb3I+IGZsb2F0TGl0
ZXJhbFRvRmxvYXQoU3RyaW5nVmlldyB0ZXh0KQogCiBhdXRvIFBhcnNlcjo6Y29uc3VtZUludGVn
cmFsTGl0ZXJhbCgpIC0+IEV4cGVjdGVkPFZhcmlhbnQ8aW50LCB1bnNpZ25lZD4sIEVycm9yPgog
ewotICAgIGF1dG8gaW50ZWdyYWxMaXRlcmFsVG9rZW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6
VG9rZW46OlR5cGU6OkludExpdGVyYWwsIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVyYWwg
fSk7CisgICAgYXV0byBpbnRlZ3JhbExpdGVyYWxUb2tlbiA9IGNvbnN1bWVUeXBlczxMZXhlcjo6
VG9rZW46OlR5cGU6OkludExpdGVyYWwsIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVyYWw+
KCk7CiAgICAgaWYgKCFpbnRlZ3JhbExpdGVyYWxUb2tlbikKICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KGludGVncmFsTGl0ZXJhbFRva2VuLmVycm9yKCkpOwogCiAgICAgc3dpdGNo
IChpbnRlZ3JhbExpdGVyYWxUb2tlbi0+dHlwZSkgewogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpU
eXBlOjpJbnRMaXRlcmFsOiB7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gaW50TGl0ZXJhbFRvSW50
KGludGVncmFsTGl0ZXJhbFRva2VuLT5zdHJpbmdWaWV3KTsKKyAgICAgICAgYXV0byByZXN1bHQg
PSBpbnRMaXRlcmFsVG9JbnQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhl
cikpOwogICAgICAgICBpZiAocmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHt7ICpyZXN1bHQg
fX07CiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihyZXN1bHQuZXJyb3IoKSk7CiAg
ICAgfQogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgQVNTRVJUKGludGVncmFsTGl0ZXJhbFRva2Vu
LT50eXBlID09IExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVyYWwpOwotICAgICAgICBhdXRv
IHJlc3VsdCA9IHVpbnRMaXRlcmFsVG9VaW50KGludGVncmFsTGl0ZXJhbFRva2VuLT5zdHJpbmdW
aWV3KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSB1aW50TGl0ZXJhbFRvVWludChpbnRlZ3JhbExp
dGVyYWxUb2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAg
ICAgICAgICAgICByZXR1cm4ge3sgKnJlc3VsdCB9fTsKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KHJlc3VsdC5lcnJvcigpKTsKQEAgLTMzNSwzMyArMzU0LDMyIEBAIHN0YXRpYyBF
eHBlY3RlZDx1bnNpZ25lZCwgUGFyc2VyOjpFcnJvcj4gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJ
bnRlZ2VyKFN0cmluZ1ZpCiAKIGF1dG8gUGFyc2VyOjpwYXJzZUNvbnN0YW50RXhwcmVzc2lvbigp
IC0+IEV4cGVjdGVkPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uLCBFcnJvcj4KIHsKLSAgICBhdXRv
IHR5cGUgPSBjb25zdW1lVHlwZXMoeworICAgIGF1dG8gdHlwZSA9IGNvbnN1bWVUeXBlczwKICAg
ICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRlcmFsLAogICAgICAgICBMZXhlcjo6VG9r
ZW46OlR5cGU6OlVpbnRMaXRlcmFsLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkZsb2F0
TGl0ZXJhbCwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpOdWxsLAogICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OlRydWUsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RmFsc2Us
Ci0gICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllciwKLSAgICB9KTsKKyAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyPigpOwogICAgIGlmICghdHlwZSkKICAg
ICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUuZXJyb3IoKSk7CiAKICAgICBzd2l0
Y2ggKHR5cGUtPnR5cGUpIHsKICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6SW50TGl0ZXJh
bDogewotICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJhbFRvSW50KHR5cGUtPnN0cmluZ1Zp
ZXcpOworICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJhbFRvSW50KHR5cGUtPnN0cmluZ1Zp
ZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFVu
ZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4ge3sgQVNUOjpJ
bnRlZ2VyTGl0ZXJhbChXVEZNb3ZlKCp0eXBlKSwgKnZhbHVlKSB9fTsKICAgICB9CiAgICAgY2Fz
ZSBMZXhlcjo6VG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7Ci0gICAgICAgIGF1dG8gdmFsdWUg
PSB1aW50TGl0ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KTsKKyAgICAgICAgYXV0byB2YWx1
ZSA9IHVpbnRMaXRlcmFsVG9VaW50KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAgICAg
ICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhbHVl
LmVycm9yKCkpOwogICAgICAgICByZXR1cm4ge3sgQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
KFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH19OwogICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tl
bjo6VHlwZTo6RmxvYXRMaXRlcmFsOiB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBmbG9hdExpdGVy
YWxUb0Zsb2F0KHR5cGUtPnN0cmluZ1ZpZXcpOworICAgICAgICBhdXRvIHZhbHVlID0gZmxvYXRM
aXRlcmFsVG9GbG9hdCh0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2
YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigp
KTsKICAgICAgICAgcmV0dXJuIHt7IEFTVDo6RmxvYXRMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAq
dmFsdWUpIH19OwpAQCAtMzc2LDcgKzM5NCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUNvbnN0YW50
RXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPEFTVDo6Q29uc3RhbnRFeHByZXNzaW9uLCBFcnJvCiAg
ICAgICAgIEFTU0VSVCh0eXBlLT50eXBlID09IExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmll
cik7CiAgICAgICAgIENPTlNVTUVfVFlQRShvcmlnaW4sIEZ1bGxTdG9wKTsKICAgICAgICAgQ09O
U1VNRV9UWVBFKG5leHQsIElkZW50aWZpZXIpOwotICAgICAgICByZXR1cm4geyBBU1Q6OkVudW1l
cmF0aW9uTWVtYmVyTGl0ZXJhbChXVEZNb3ZlKCpvcmlnaW4pLCB0eXBlLT5zdHJpbmdWaWV3LnRv
U3RyaW5nKCksIG5leHQtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSkgfTsKKyAgICAgICAgcmV0dXJu
IHsgQVNUOjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwoV1RGTW92ZSgqb3JpZ2luKSwgdHlwZS0+
c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBuZXh0LT5zdHJpbmdWaWV3KG1fbGV4ZXIp
LnRvU3RyaW5nKCkpIH07CiAgICAgfQogICAgIH0KIH0KQEAgLTM5MCw3ICs0MDgsNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnQoKSAtPiBFeHBlY3RlZDxBU1Q6OlR5cGVBcmd1bWVu
dCwgRXJyb3I+CiAgICAgICAgIHJldHVybiBBU1Q6OlR5cGVBcmd1bWVudChXVEZNb3ZlKCpjb25z
dGFudEV4cHJlc3Npb24pKTsKICAgICB9CiAgICAgQ09OU1VNRV9UWVBFKHJlc3VsdCwgSWRlbnRp
Zmllcik7Ci0gICAgcmV0dXJuIEFTVDo6VHlwZUFyZ3VtZW50KG1ha2VVbmlxdWVSZWY8QVNUOjpU
eXBlUmVmZXJlbmNlPihMZXhlcjo6VG9rZW4oKnJlc3VsdCksIHJlc3VsdC0+c3RyaW5nVmlldy50
b1N0cmluZygpLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkpOworICAgIHJldHVybiBBU1Q6OlR5cGVB
cmd1bWVudChtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4oTGV4ZXI6OlRva2VuKCpy
ZXN1bHQpLCByZXN1bHQtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgQVNUOjpUeXBl
QXJndW1lbnRzKCkpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50cygpIC0+
IEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50cywgRXJyb3I+CkBAIC00MjIsNyArNDQwLDEwIEBA
IGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudHMoKSAtPiBFeHBlY3RlZDxBU1Q6OlR5cGVB
cmd1bWVudHMsIEVycm9yPgogCiBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4QWJicmV2aWF0
ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4QWJicmV2aWF0ZWQsIEVycm9yPgogewotICAgIGF1
dG8gdG9rZW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OlN0YXIsIExleGVy
OjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIsIExleGVyOjpUb2tlbjo6VHlwZTo6TGVm
dFNxdWFyZUJyYWNrZXQgfSk7CisgICAgYXV0byB0b2tlbiA9IGNvbnN1bWVUeXBlczwKKyAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OlNxdWFyZUJyYWNrZXRQYWlyLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVh
cmVCcmFja2V0PigpOwogICAgIGlmICghdG9rZW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVk
PEVycm9yPih0b2tlbi5lcnJvcigpKTsKICAgICBpZiAodG9rZW4tPnR5cGUgPT0gTGV4ZXI6OlRv
a2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCkgewpAQCAtNDM3LDcgKzQ1OCwxMCBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4QWJicmV2aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3Vm
Zml4QWJicmV2aWF0ZWQsIEVycgogCiBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJi
cmV2aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQsIEVycm9yPgog
ewotICAgIGF1dG8gdG9rZW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OlN0
YXIsIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIsIExleGVyOjpUb2tlbjo6
VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQgfSk7CisgICAgYXV0byB0b2tlbiA9IGNvbnN1bWVUeXBl
czwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyLAorICAgICAgICBMZXhlcjo6VG9r
ZW46OlR5cGU6OlNxdWFyZUJyYWNrZXRQYWlyLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OkxlZnRTcXVhcmVCcmFja2V0PigpOwogICAgIGlmICghdG9rZW4pCiAgICAgICAgIHJldHVybiBV
bmV4cGVjdGVkPEVycm9yPih0b2tlbi5lcnJvcigpKTsKICAgICBpZiAodG9rZW4tPnR5cGUgPT0g
TGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCkgewpAQCAtNDQ3LDcgKzQ3MSwx
MSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKSAtPiBFeHBl
Y3RlZDxUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZQogICAgICAgICBDT05TVU1FX1RZUEUocmlnaHRT
cXVhcmVCcmFja2V0LCBSaWdodFNxdWFyZUJyYWNrZXQpOwogICAgICAgICByZXR1cm4ge3sgKnRv
a2VuLCBXVEY6Om51bGxvcHQsICpudW1FbGVtZW50cyB9fTsKICAgICB9Ci0gICAgYXV0byBhZGRy
ZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3Rh
bnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVh
ZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAgIGF1dG8gYWRkcmVzc1Nw
YWNlVG9rZW4gPSBjb25zdW1lVHlwZXM8CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6Q29u
c3RhbnQsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLAorICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OlRocmVhZGdyb3VwLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZD4oKTsKICAgICBpZiAoIWFkZHJlc3NTcGFjZVRva2VuKQogICAgICAgICByZXR1cm4g
VW5leHBlY3RlZDxFcnJvcj4oYWRkcmVzc1NwYWNlVG9rZW4uZXJyb3IoKSk7CiAgICAgQVNUOjpB
ZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlOwpAQCAtNDcxLDcgKzQ5OSwxMSBAQCBhdXRvIFBhcnNl
cjo6cGFyc2VUeXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQoKSAtPiBFeHBlY3RlZDxUeXBlU3VmZml4
Tm9uQWJicmV2aWF0ZQogCiBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlKCkgLT4gRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4KIHsKLSAgICBhdXRvIGFkZHJlc3NTcGFj
ZVRva2VuID0gdHJ5VHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50LCBMZXhlcjo6
VG9rZW46OlR5cGU6OkRldmljZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWRncm91cCwgTGV4
ZXI6OlRva2VuOjpUeXBlOjpUaHJlYWR9KTsKKyAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0g
dHJ5VHlwZXM8CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6Q29uc3RhbnQsCisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OlRocmVhZGdyb3VwLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZD4oKTsKIAog
ICAgIENPTlNVTUVfVFlQRShuYW1lLCBJZGVudGlmaWVyKTsKICAgICBQQVJTRSh0eXBlQXJndW1l
bnRzLCBUeXBlQXJndW1lbnRzKTsKQEAgLTUwNSw3ICs1MzcsNyBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VUeXBlKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4K
ICAgICAgICAgICAgIH0KICAgICAgICAgfTsKICAgICAgICAgUEFSU0UoZmlyc3RUeXBlU3VmZml4
QWJicmV2aWF0ZWQsIFR5cGVTdWZmaXhBYmJyZXZpYXRlZCk7Ci0gICAgICAgIFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPiByZXN1bHQgPSBtYWtlVW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5j
ZT4oV1RGTW92ZSgqYWRkcmVzc1NwYWNlVG9rZW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICAgICAgVW5pcXVlUmVmPEFTVDo6VW5u
YW1lZFR5cGU+IHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZN
b3ZlKCphZGRyZXNzU3BhY2VUb2tlbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwogICAgICAgICBhdXRvIG5leHQgPSBjb25z
dHJ1Y3RUeXBlRnJvbVN1ZmZpeEFiYnJldmlhdGVkKCpmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRl
ZCwgV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShuZXh0KTsKICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKQEAgLTUzNCw3ICs1NjYsNyBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VUeXBlKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+LCBFcnJvcj4K
ICAgICAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpBcnJheVR5cGU+KExleGVy
OjpUb2tlbih0eXBlU3VmZml4Tm9uQWJicmV2aWF0ZWQudG9rZW4pLCBXVEZNb3ZlKHByZXZpb3Vz
KSwgKnR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZC5udW1FbGVtZW50cykgfTsKICAgICAgICAgfQog
ICAgIH07Ci0gICAgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9IG1ha2VVbmlx
dWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKCpuYW1lKSwgbmFtZS0+c3RyaW5nVmll
dy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CisgICAgVW5pcXVlUmVmPEFT
VDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9IG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNl
PihXVEZNb3ZlKCpuYW1lKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBX
VEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgUEVF
SyhuZXh0VG9rZW4pOwogICAgICAgICBpZiAobmV4dFRva2VuLT50eXBlICE9IExleGVyOjpUb2tl
bjo6VHlwZTo6U3RhcgpAQCAtNTU3LDEyICs1ODksMTIgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlw
ZURlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OlR5cGVEZWZpbml0aW9uLCBFcnJvcj4KICAg
ICBDT05TVU1FX1RZUEUoZXF1YWxzLCBFcXVhbHNTaWduKTsKICAgICBQQVJTRSh0eXBlLCBUeXBl
KTsKICAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29sb24pOwotICAgIHJldHVybiBB
U1Q6OlR5cGVEZWZpbml0aW9uKFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9T
dHJpbmcoKSwgV1RGTW92ZSgqdHlwZSkpOworICAgIHJldHVybiBBU1Q6OlR5cGVEZWZpbml0aW9u
KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwg
V1RGTW92ZSgqdHlwZSkpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VCdWlsdEluU2VtYW50aWMo
KSAtPiBFeHBlY3RlZDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYywgRXJyb3I+CiB7Ci0gICAgYXV0byBv
cmlnaW4gPSBjb25zdW1lVHlwZXMoeworICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGVzPAog
ICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWSW5zdGFuY2VJRCwKICAgICAgICAgTGV4ZXI6
OlRva2VuOjpUeXBlOjpTVlZlcnRleElELAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlBT
aXplLApAQCAtNTc2LDcgKzYwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUJ1aWx0SW5TZW1hbnRp
YygpIC0+IEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFudGljLCBFcnJvcj4KICAgICAgICAgTGV4
ZXI6OlRva2VuOjpUeXBlOjpTVkRpc3BhdGNoVGhyZWFkSUQsCiAgICAgICAgIExleGVyOjpUb2tl
bjo6VHlwZTo6U1ZHcm91cElELAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWR3JvdXBJ
bmRleCwKLSAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVkdyb3VwVGhyZWFkSUR9KTsKKyAg
ICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVkdyb3VwVGhyZWFkSUQ+KCk7CiAgICAgaWYgKCFv
cmlnaW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihvcmlnaW4uZXJyb3IoKSk7
CiAKQEAgLTYyMywxNCArNjU1LDE1IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlc291cmNlU2VtYW50
aWMoKSAtPiBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMsIEVycm9yPgogICAgIENPTlNV
TUVfVFlQRShsZWZ0UGFyZW50aGVzaXMsIExlZnRQYXJlbnRoZXNpcyk7CiAKICAgICBDT05TVU1F
X1RZUEUoaW5mbywgSWRlbnRpZmllcik7Ci0gICAgaWYgKGluZm8tPnN0cmluZ1ZpZXcubGVuZ3Ro
KCkgPCAyIHx8IChpbmZvLT5zdHJpbmdWaWV3WzBdICE9ICd1JwotICAgICAgICAmJiBpbmZvLT5z
dHJpbmdWaWV3WzBdICE9ICd0JwotICAgICAgICAmJiBpbmZvLT5zdHJpbmdWaWV3WzBdICE9ICdi
JwotICAgICAgICAmJiBpbmZvLT5zdHJpbmdWaWV3WzBdICE9ICdzJykpCi0gICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtlU3RyaW5nKGluZm8tPnN0cmluZ1ZpZXcuc3Vi
c3RyaW5nKDAsIDEpLCAiIGlzIG5vdCBhIGtub3duIHJlc291cmNlIHR5cGUgKCd1JywgJ3QnLCAn
YicsIG9yICdzJykiKSkpOworICAgIGF1dG8gaW5mb1N0cmluZ1ZpZXcgPSBpbmZvLT5zdHJpbmdW
aWV3KG1fbGV4ZXIpOworICAgIGlmIChpbmZvU3RyaW5nVmlldy5sZW5ndGgoKSA8IDIgfHwgKGlu
Zm9TdHJpbmdWaWV3WzBdICE9ICd1JworICAgICAgICAmJiBpbmZvU3RyaW5nVmlld1swXSAhPSAn
dCcKKyAgICAgICAgJiYgaW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ2InCisgICAgICAgICYmIGluZm9T
dHJpbmdWaWV3WzBdICE9ICdzJykpCisgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihF
cnJvcihtYWtlU3RyaW5nKGluZm9TdHJpbmdWaWV3LnN1YnN0cmluZygwLCAxKSwgIiBpcyBub3Qg
YSBrbm93biByZXNvdXJjZSB0eXBlICgndScsICd0JywgJ2InLCBvciAncycpIikpKTsKIAogICAg
IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZSBtb2RlOwotICAgIHN3aXRjaCAoaW5mby0+c3Ry
aW5nVmlld1swXSkgeworICAgIHN3aXRjaCAoaW5mb1N0cmluZ1ZpZXdbMF0pIHsKICAgICBjYXNl
ICd1JzoKICAgICAgICAgbW9kZSA9IEFTVDo6UmVzb3VyY2VTZW1hbnRpYzo6TW9kZTo6VW5vcmRl
cmVkQWNjZXNzVmlldzsKICAgICAgICAgYnJlYWs7CkBAIC02NDUsMTkgKzY3OCwyMCBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpSZXNvdXJj
ZVNlbWFudGljLCBFcnJvcj4KICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byBpbmRl
eCA9IHJlY29nbml6ZVNpbXBsZVVuc2lnbmVkSW50ZWdlcihpbmZvLT5zdHJpbmdWaWV3LnN1YnN0
cmluZygxKSk7CisgICAgYXV0byBpbmRleCA9IHJlY29nbml6ZVNpbXBsZVVuc2lnbmVkSW50ZWdl
cihpbmZvU3RyaW5nVmlldy5zdWJzdHJpbmcoMSkpOwogICAgIGlmICghaW5kZXgpCiAgICAgICAg
IHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihpbmRleC5lcnJvcigpKTsKIAogICAgIHVuc2lnbmVk
IHNwYWNlID0gMDsKICAgICBpZiAodHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OkNvbW1hKSkg
ewogICAgICAgICBDT05TVU1FX1RZUEUoc3BhY2VUb2tlbiwgSWRlbnRpZmllcik7CisgICAgICAg
IGF1dG8gc3BhY2VUb2tlblN0cmluZ1ZpZXcgPSBzcGFjZVRva2VuLT5zdHJpbmdWaWV3KG1fbGV4
ZXIpOwogICAgICAgICBhdXRvIHByZWZpeCA9ICJzcGFjZSJfc3RyOwotICAgICAgICBpZiAoIXNw
YWNlVG9rZW4tPnN0cmluZ1ZpZXcuc3RhcnRzV2l0aChTdHJpbmdWaWV3KHByZWZpeCkpKQotICAg
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmcoIlNlY29u
ZCBhcmd1bWVudCB0byByZXNvdXJjZSBzZW1hbnRpYyAiLCBzcGFjZVRva2VuLT5zdHJpbmdWaWV3
LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIikpKTsKLSAgICAgICAgaWYgKHNwYWNl
VG9rZW4tPnN0cmluZ1ZpZXcubGVuZ3RoKCkgPD0gcHJlZml4Lmxlbmd0aCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmcoIlNlY29uZCBhcmd1
bWVudCB0byByZXNvdXJjZSBzZW1hbnRpYyAiLCBzcGFjZVRva2VuLT5zdHJpbmdWaWV3LCAiIG5l
ZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIikpKTsKLSAgICAgICAgYXV0byBzcGFjZVZhbHVl
ID0gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKHNwYWNlVG9rZW4tPnN0cmluZ1ZpZXcu
c3Vic3RyaW5nKHByZWZpeC5sZW5ndGgoKSkpOworICAgICAgICBpZiAoIXNwYWNlVG9rZW5TdHJp
bmdWaWV3LnN0YXJ0c1dpdGgoU3RyaW5nVmlldyhwcmVmaXgpKSkKKyAgICAgICAgICAgIHJldHVy
biBVbmV4cGVjdGVkPEVycm9yPihFcnJvcihtYWtlU3RyaW5nKCJTZWNvbmQgYXJndW1lbnQgdG8g
cmVzb3VyY2Ugc2VtYW50aWMgIiwgc3BhY2VUb2tlblN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2Yg
dGhlIGZvcm0gJ3NwYWNlMCciKSkpOworICAgICAgICBpZiAoc3BhY2VUb2tlblN0cmluZ1ZpZXcu
bGVuZ3RoKCkgPD0gcHJlZml4Lmxlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmcoIlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJjZSBz
ZW1hbnRpYyAiLCBzcGFjZVRva2VuU3RyaW5nVmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9ybSAn
c3BhY2UwJyIpKSk7CisgICAgICAgIGF1dG8gc3BhY2VWYWx1ZSA9IHJlY29nbml6ZVNpbXBsZVVu
c2lnbmVkSW50ZWdlcihzcGFjZVRva2VuU3RyaW5nVmlldy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0
aCgpKSk7CiAgICAgICAgIGlmICghc3BhY2VWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBVbmV4
cGVjdGVkPEVycm9yPihzcGFjZVZhbHVlLmVycm9yKCkpOwogICAgICAgICBzcGFjZSA9ICpzcGFj
ZVZhbHVlOwpAQCAtNzE3LDE2ICs3NTEsMTcgQEAgQVNUOjpRdWFsaWZpZXJzIFBhcnNlcjo6cGFy
c2VRdWFsaWZpZXJzKCkKIHsKICAgICBBU1Q6OlF1YWxpZmllcnMgcXVhbGlmaWVyczsKICAgICB3
aGlsZSAoYXV0byBuZXh0ID0gdHJ5VHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OlF1YWxpZmllcikp
IHsKLSAgICAgICAgaWYgKCJub2ludGVycG9sYXRpb24iID09IG5leHQtPnN0cmluZ1ZpZXcpCisg
ICAgICAgIGF1dG8gbmV4dFN0cmluZ1ZpZXcgPSBuZXh0LT5zdHJpbmdWaWV3KG1fbGV4ZXIpOwor
ICAgICAgICBpZiAoIm5vaW50ZXJwb2xhdGlvbiIgPT0gbmV4dFN0cmluZ1ZpZXcpCiAgICAgICAg
ICAgICBxdWFsaWZpZXJzLmFwcGVuZChBU1Q6OlF1YWxpZmllcjo6Tm9pbnRlcnBvbGF0aW9uKTsK
LSAgICAgICAgZWxzZSBpZiAoIm5vcGVyc3BlY3RpdmUiID09IG5leHQtPnN0cmluZ1ZpZXcpCisg
ICAgICAgIGVsc2UgaWYgKCJub3BlcnNwZWN0aXZlIiA9PSBuZXh0U3RyaW5nVmlldykKICAgICAg
ICAgICAgIHF1YWxpZmllcnMuYXBwZW5kKEFTVDo6UXVhbGlmaWVyOjpOb3BlcnNwZWN0aXZlKTsK
LSAgICAgICAgZWxzZSBpZiAoInVuaWZvcm0iID09IG5leHQtPnN0cmluZ1ZpZXcpCisgICAgICAg
IGVsc2UgaWYgKCJ1bmlmb3JtIiA9PSBuZXh0U3RyaW5nVmlldykKICAgICAgICAgICAgIHF1YWxp
ZmllcnMuYXBwZW5kKEFTVDo6UXVhbGlmaWVyOjpVbmlmb3JtKTsKLSAgICAgICAgZWxzZSBpZiAo
ImNlbnRyb2lkIiA9PSBuZXh0LT5zdHJpbmdWaWV3KQorICAgICAgICBlbHNlIGlmICgiY2VudHJv
aWQiID09IG5leHRTdHJpbmdWaWV3KQogICAgICAgICAgICAgcXVhbGlmaWVycy5hcHBlbmQoQVNU
OjpRdWFsaWZpZXI6OkNlbnRyb2lkKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NF
UlQoInNhbXBsZSIgPT0gbmV4dC0+c3RyaW5nVmlldyk7CisgICAgICAgICAgICBBU1NFUlQoInNh
bXBsZSIgPT0gbmV4dFN0cmluZ1ZpZXcpOwogICAgICAgICAgICAgcXVhbGlmaWVycy5hcHBlbmQo
QVNUOjpRdWFsaWZpZXI6OlNhbXBsZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC03NDQsNyArNzc5
LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlU3RydWN0dXJlRWxlbWVudCgpIC0+IEV4cGVjdGVkPEFT
VDo6U3RydWN0dXJlRWxlbWVudCwgRXJyb3I+CiAgICAgUEFSU0Uoc2VtYW50aWMsIFNlbWFudGlj
KTsKICAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29sb24pOwogCi0gICAgcmV0dXJu
IEFTVDo6U3RydWN0dXJlRWxlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmll
cnMpLCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3Zl
KCpzZW1hbnRpYykpOworICAgIHJldHVybiBBU1Q6OlN0cnVjdHVyZUVsZW1lbnQoV1RGTW92ZSgq
b3JpZ2luKSwgV1RGTW92ZShxdWFsaWZpZXJzKSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmlu
Z1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqc2VtYW50aWMpKTsKIH0KIAogYXV0
byBQYXJzZXI6OnBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6U3Ry
dWN0dXJlRGVmaW5pdGlvbiwgRXJyb3I+CkBAIC03NTksNyArNzk0LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlU3RydWN0dXJlRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6U3RydWN0dXJlRGVm
aW5pdGlvbiwgRXIKICAgICAgICAgc3RydWN0dXJlRWxlbWVudHMuYXBwZW5kKFdURk1vdmUoKnN0
cnVjdHVyZUVsZW1lbnQpKTsKICAgICB9CiAKLSAgICByZXR1cm4gQVNUOjpTdHJ1Y3R1cmVEZWZp
bml0aW9uKFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RG
TW92ZShzdHJ1Y3R1cmVFbGVtZW50cykpOworICAgIHJldHVybiBBU1Q6OlN0cnVjdHVyZURlZmlu
aXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmlu
ZygpLCBXVEZNb3ZlKHN0cnVjdHVyZUVsZW1lbnRzKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJz
ZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZp
bml0aW9uLCBFcnJvcj4KQEAgLTc4MSw3ICs4MTYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVt
ZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlv
bgogCiAgICAgUEFSU0UoZmlyc3RFbnVtZXJhdGlvbk1lbWJlciwgRW51bWVyYXRpb25NZW1iZXIp
OwogCi0gICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24gcmVzdWx0KFdURk1vdmUoKm9yaWdp
biksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZSkpOworICAgIEFT
VDo6RW51bWVyYXRpb25EZWZpbml0aW9uIHJlc3VsdChXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5z
dHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGUpKTsKICAgICBhdXRv
IHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1iZXIpKTsK
ICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHJldHVybiBmYWlsKCJDYW5ub3QgYWRkIGVudW1l
cmF0aW9uIG1lbWJlciJfc3RyKTsKQEAgLTgwMSw3ICs4MzYsNyBAQCBhdXRvIFBhcnNlcjo6cGFy
c2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uRGVm
aW5pdGlvbgogYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25NZW1iZXIoKSAtPiBFeHBlY3Rl
ZDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyLCBFcnJvcj4KIHsKICAgICBDT05TVU1FX1RZUEUoaWRl
bnRpZmllciwgSWRlbnRpZmllcik7Ci0gICAgYXV0byBuYW1lID0gaWRlbnRpZmllci0+c3RyaW5n
Vmlldy50b1N0cmluZygpOworICAgIGF1dG8gbmFtZSA9IGlkZW50aWZpZXItPnN0cmluZ1ZpZXco
bV9sZXhlcikudG9TdHJpbmcoKTsKIAogICAgIGlmICh0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlw
ZTo6RXF1YWxzU2lnbikpIHsKICAgICAgICAgUEFSU0UoY29uc3RhbnRFeHByZXNzaW9uLCBDb25z
dGFudEV4cHJlc3Npb24pOwpAQCAtODE4LDcgKzg1Myw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZU5h
dGl2ZVR5cGVEZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0
aW9uCiAgICAgUEFSU0UodHlwZUFyZ3VtZW50cywgVHlwZUFyZ3VtZW50cyk7CiAgICAgQ09OU1VN
RV9UWVBFKHNlbWljb2xvbiwgU2VtaWNvbG9uKTsKIAotICAgIHJldHVybiBBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKKyAgICByZXR1cm4gQVNUOjpOYXRpdmVUeXBl
RGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50
b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpw
YXJzZU51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSgpIC0+IEV4cGVjdGVkPEFTVDo6TnVtVGhy
ZWFkc0Z1bmN0aW9uQXR0cmlidXRlLCBFcnJvcj4KQEAgLTg3Myw3ICs5MDgsNyBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VQYXJhbWV0ZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OlZhcmlhYmxlRGVjbGFyYXRp
b24sIEVycm9yPgogCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaWYgKGF1dG8gdG9rZW4gPSB0cnlU
eXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcikpCi0gICAgICAgIG5hbWUgPSB0b2tl
bi0+c3RyaW5nVmlldy50b1N0cmluZygpOworICAgICAgICBuYW1lID0gdG9rZW4tPnN0cmluZ1Zp
ZXcobV9sZXhlcikudG9TdHJpbmcoKTsKIAogICAgIFBBUlNFKHNlbWFudGljLCBTZW1hbnRpYyk7
CiAKQEAgLTkyMCwxMiArOTU1LDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZUNvbXB1dGVGdW5jdGlv
bkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0CiAgICAgUEFS
U0UocGFyYW1ldGVycywgUGFyYW1ldGVycyk7CiAgICAgUEFSU0Uoc2VtYW50aWMsIFNlbWFudGlj
KTsKICAgICBib29sIGlzT3BlcmF0b3IgPSBmYWxzZTsKLSAgICByZXR1cm4gQVNUOjpGdW5jdGlv
bkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmF0dHJpYnV0ZUJsb2NrKSwg
QVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmlu
Z1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGlj
KSwgaXNPcGVyYXRvcik7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZN
b3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCphdHRyaWJ1dGVCbG9jayksIEFTVDo6RW50cnlQb2ludFR5
cGU6OkNvbXB1dGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRv
U3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3Bl
cmF0b3IpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VWZXJ0ZXhPckZyYWdtZW50RnVuY3Rpb25E
ZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+
CiB7Ci0gICAgYXV0byBlbnRyeVBvaW50ID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpU
eXBlOjpWZXJ0ZXgsIExleGVyOjpUb2tlbjo6VHlwZTo6RnJhZ21lbnQgfSk7CisgICAgYXV0byBl
bnRyeVBvaW50ID0gY29uc3VtZVR5cGVzPExleGVyOjpUb2tlbjo6VHlwZTo6VmVydGV4LCBMZXhl
cjo6VG9rZW46OlR5cGU6OkZyYWdtZW50PigpOwogICAgIGlmICghZW50cnlQb2ludCkKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGVudHJ5UG9pbnQuZXJyb3IoKSk7CiAgICAgYXV0
byBlbnRyeVBvaW50VHlwZSA9IChlbnRyeVBvaW50LT50eXBlID09IExleGVyOjpUb2tlbjo6VHlw
ZTo6VmVydGV4KSA/IEFTVDo6RW50cnlQb2ludFR5cGU6OlZlcnRleCA6IEFTVDo6RW50cnlQb2lu
dFR5cGU6OkZyYWdtZW50OwpAQCAtOTM2LDcgKzk3MSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVZl
cnRleE9yRnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5j
dGlvCiAgICAgUEFSU0Uoc2VtYW50aWMsIFNlbWFudGljKTsKIAogICAgIGJvb2wgaXNPcGVyYXRv
ciA9IGZhbHNlOwotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgq
ZW50cnlQb2ludCksIHsgfSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5z
dHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRlcnMpLCBXVEZNb3ZlKCpzZW1h
bnRpYyksIGlzT3BlcmF0b3IpOworICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24o
V1RGTW92ZSgqZW50cnlQb2ludCksIHsgfSwgZW50cnlQb2ludFR5cGUsIFdURk1vdmUoKnR5cGUp
LCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnBhcmFtZXRl
cnMpLCBXVEZNb3ZlKCpzZW1hbnRpYyksIGlzT3BlcmF0b3IpOwogfQogCiBhdXRvIFBhcnNlcjo6
cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbiwgRXJyb3I+CkBAIC05NDUsNyArOTgwLDcgQEAgYXV0byBQYXJzZXI6OnBh
cnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW9u
RGVjbGFyYXQKIAogICAgIFBBUlNFKHR5cGUsIFR5cGUpOwogCi0gICAgYXV0byBuYW1lID0gY29u
c3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyLCBMZXhlcjo6VG9rZW46
OlR5cGU6Ok9wZXJhdG9yTmFtZSB9KTsKKyAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZXM8TGV4
ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyLCBMZXhlcjo6VG9rZW46OlR5cGU6Ok9wZXJhdG9y
TmFtZT4oKTsKICAgICBpZiAoIW5hbWUpCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9y
PihuYW1lLmVycm9yKCkpOwogICAgIGF1dG8gaXNPcGVyYXRvciA9IG5hbWUtPnR5cGUgPT0gTGV4
ZXI6OlRva2VuOjpUeXBlOjpPcGVyYXRvck5hbWU7CkBAIC05NTMsNyArOTg4LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBQQVJTRShwYXJhbWV0ZXJzLCBQYXJhbWV0ZXJzKTsKICAg
ICBQQVJTRShzZW1hbnRpYywgU2VtYW50aWMpOwogCi0gICAgcmV0dXJuIEFTVDo6RnVuY3Rpb25E
ZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92ZSgq
dHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyks
IFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CisgICAgcmV0dXJuIEFTVDo6RnVuY3Rp
b25EZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCB7IH0sIFdURjo6bnVsbG9wdCwgV1RGTW92
ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgq
cGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CiB9CiAKIGF1dG8g
UGFyc2VyOjpwYXJzZU9wZXJhdG9yRnVuY3Rpb25EZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFT
VDo6RnVuY3Rpb25EZWNsYXJhdGlvbiwgRXJyb3I+CkBAIC0xMDAzLDcgKzEwMzgsNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VCbG9jaygpIC0+IEV4cGVjdGVkPEFTVDo6QmxvY2ssIEVycm9yPgogYXV0
byBQYXJzZXI6OnBhcnNlQmxvY2tCb2R5KExleGVyOjpUb2tlbiYmIG9yaWdpbikgLT4gRXhwZWN0
ZWQ8QVNUOjpCbG9jaywgRXJyb3I+CiB7CiAgICAgQVNUOjpTdGF0ZW1lbnRzIHN0YXRlbWVudHM7
Ci0gICAgd2hpbGUgKCFwZWVrVHlwZXMoe0xleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJy
YWNrZXQsIExleGVyOjpUb2tlbjo6VHlwZTo6Q2FzZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZWZh
dWx0fSkpIHsKKyAgICB3aGlsZSAoIXBlZWtUeXBlczxMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0
Q3VybHlCcmFja2V0LCBMZXhlcjo6VG9rZW46OlR5cGU6OkNhc2UsIExleGVyOjpUb2tlbjo6VHlw
ZTo6RGVmYXVsdD4oKSkgewogICAgICAgICBQQVJTRShzdGF0ZW1lbnQsIFN0YXRlbWVudCk7CiAg
ICAgICAgIHN0YXRlbWVudHMuYXBwZW5kKFdURk1vdmUoKnN0YXRlbWVudCkpOwogICAgIH0KQEAg
LTEwNTQsNyArMTA4OSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN3aXRjaFN0YXRlbWVudCgpIC0+
IEV4cGVjdGVkPEFTVDo6U3dpdGNoU3RhdGVtZW50LCBFcnJvcj4KIAogYXV0byBQYXJzZXI6OnBh
cnNlU3dpdGNoQ2FzZSgpIC0+IEV4cGVjdGVkPEFTVDo6U3dpdGNoQ2FzZSwgRXJyb3I+CiB7Ci0g
ICAgYXV0byBvcmlnaW4gPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OkNhc2Us
IExleGVyOjpUb2tlbjo6VHlwZTo6RGVmYXVsdCB9KTsKKyAgICBhdXRvIG9yaWdpbiA9IGNvbnN1
bWVUeXBlczxMZXhlcjo6VG9rZW46OlR5cGU6OkNhc2UsIExleGVyOjpUb2tlbjo6VHlwZTo6RGVm
YXVsdD4oKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJy
b3I+KG9yaWdpbi5lcnJvcigpKTsKIApAQCAtMTE2MSw3ICsxMTk2LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbihVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mJiB0
eXBlKSAtPiBFeHAKICAgICAgICAgaW5pdGlhbGl6ZXIgPSBpbml0aWFsaXppbmdFeHByZXNzaW9u
LnZhbHVlKCkubW92ZVRvVW5pcXVlUHRyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEFTVDo6VmFy
aWFibGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCB7
IFdURk1vdmUodHlwZSkgfSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpz
ZW1hbnRpYyksIFdURk1vdmUoaW5pdGlhbGl6ZXIpKTsKKyAgICByZXR1cm4gQVNUOjpWYXJpYWJs
ZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIHsgV1RG
TW92ZSh0eXBlKSB9LCBuYW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1v
dmUoKnNlbWFudGljKSwgV1RGTW92ZShpbml0aWFsaXplcikpOwogfQogCiBhdXRvIFBhcnNlcjo6
cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9ucygpIC0+IEV4cGVjdGVkPEFTVDo6VmFyaWFibGVEZWNs
YXJhdGlvbnNTdGF0ZW1lbnQsIEVycm9yPgpAQCAtMTIxOCwzNiArMTI1MywzNiBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VTdGF0ZW1lbnQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpTdGF0ZW1l
bnQ+LCBFcnJvcj4KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QnJlYWs6IHsKICAgICAg
ICAgYXV0byBicmVha1Rva2VuID0gbV9sZXhlci5jb25zdW1lVG9rZW4oKTsKICAgICAgICAgQ09O
U1VNRV9UWVBFKHNlbWljb2xvbiwgU2VtaWNvbG9uKTsKLSAgICAgICAgYXV0byBicmVha09iamVj
dCA9IEFTVDo6QnJlYWsoV1RGTW92ZSgqYnJlYWtUb2tlbikpOworICAgICAgICBhdXRvIGJyZWFr
T2JqZWN0ID0gQVNUOjpCcmVhayhXVEZNb3ZlKGJyZWFrVG9rZW4pKTsKICAgICAgICAgcmV0dXJu
IHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkJyZWFrPihXVEZNb3ZlKGJyZWFrT2JqZWN0KSkgfTsKICAg
ICB9CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnRpbnVlOiB7CiAgICAgICAgIGF1
dG8gY29udGludWVUb2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7CiAgICAgICAgIENPTlNV
TUVfVFlQRShzZW1pY29sb24sIFNlbWljb2xvbik7Ci0gICAgICAgIGF1dG8gY29udGludWVPYmpl
Y3QgPSBBU1Q6OkNvbnRpbnVlKFdURk1vdmUoKmNvbnRpbnVlVG9rZW4pKTsKKyAgICAgICAgYXV0
byBjb250aW51ZU9iamVjdCA9IEFTVDo6Q29udGludWUoV1RGTW92ZShjb250aW51ZVRva2VuKSk7
CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpDb250aW51ZT4oV1RGTW92ZShj
b250aW51ZU9iamVjdCkpIH07CiAgICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpG
YWxsdGhyb3VnaDogewogICAgICAgICBhdXRvIGZhbGx0aHJvdWdoVG9rZW4gPSBtX2xleGVyLmNv
bnN1bWVUb2tlbigpOwogICAgICAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29sb24p
OwotICAgICAgICBhdXRvIGZhbGx0aHJvdWdoT2JqZWN0ID0gQVNUOjpGYWxsdGhyb3VnaChXVEZN
b3ZlKCpmYWxsdGhyb3VnaFRva2VuKSk7CisgICAgICAgIGF1dG8gZmFsbHRocm91Z2hPYmplY3Qg
PSBBU1Q6OkZhbGx0aHJvdWdoKFdURk1vdmUoZmFsbHRocm91Z2hUb2tlbikpOwogICAgICAgICBy
ZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6RmFsbHRocm91Z2g+KFdURk1vdmUoZmFsbHRocm91
Z2hPYmplY3QpKSB9OwogICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VHJhcDog
ewogICAgICAgICBhdXRvIHRyYXBUb2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7CiAgICAg
ICAgIENPTlNVTUVfVFlQRShzZW1pY29sb24sIFNlbWljb2xvbik7Ci0gICAgICAgIGF1dG8gdHJh
cE9iamVjdCA9IEFTVDo6VHJhcChXVEZNb3ZlKCp0cmFwVG9rZW4pKTsKKyAgICAgICAgYXV0byB0
cmFwT2JqZWN0ID0gQVNUOjpUcmFwKFdURk1vdmUodHJhcFRva2VuKSk7CiAgICAgICAgIHJldHVy
biB7IG1ha2VVbmlxdWVSZWY8QVNUOjpUcmFwPihXVEZNb3ZlKHRyYXBPYmplY3QpKSB9OwogICAg
IH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6UmV0dXJuOiB7CiAgICAgICAgIGF1dG8g
cmV0dXJuVG9rZW4gPSBtX2xleGVyLmNvbnN1bWVUb2tlbigpOwogICAgICAgICBpZiAoYXV0byBz
ZW1pY29sb24gPSB0cnlUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNvbG9uKSkgewotICAg
ICAgICAgICAgYXV0byByZXR1cm5PYmplY3QgPSBBU1Q6OlJldHVybihXVEZNb3ZlKCpyZXR1cm5U
b2tlbiksIFdURjo6bnVsbG9wdCk7CisgICAgICAgICAgICBhdXRvIHJldHVybk9iamVjdCA9IEFT
VDo6UmV0dXJuKFdURk1vdmUocmV0dXJuVG9rZW4pLCBXVEY6Om51bGxvcHQpOwogICAgICAgICAg
ICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlJldHVybj4oV1RGTW92ZShyZXR1cm5PYmpl
Y3QpKSB9OwogICAgICAgICB9CiAgICAgICAgIFBBUlNFKGV4cHJlc3Npb24sIEV4cHJlc3Npb24p
OwogICAgICAgICBDT05TVU1FX1RZUEUoZmluYWxTZW1pY29sb24sIFNlbWljb2xvbik7Ci0gICAg
ICAgIGF1dG8gcmV0dXJuT2JqZWN0ID0gQVNUOjpSZXR1cm4oV1RGTW92ZSgqcmV0dXJuVG9rZW4p
LCB7IFdURk1vdmUoKmV4cHJlc3Npb24pIH0pOworICAgICAgICBhdXRvIHJldHVybk9iamVjdCA9
IEFTVDo6UmV0dXJuKFdURk1vdmUocmV0dXJuVG9rZW4pLCB7IFdURk1vdmUoKmV4cHJlc3Npb24p
IH0pOwogICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6UmV0dXJuPihXVEZNb3Zl
KHJldHVybk9iamVjdCkpIH07CiAgICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpD
b25zdGFudDoKQEAgLTEzMjEsNyArMTM1Niw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVmZmVjdGZ1
bEFzc2lnbm1lbnQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwKICAg
ICBib29sIGlzRWZmZWN0ZnVsID0gZmFsc2U7CiAgICAgUEFSU0UoZXhwcmVzc2lvbiwgUG9zc2li
bGVQcmVmaXgsICZpc0VmZmVjdGZ1bCk7CiAKLSAgICBpZiAoIWlzRWZmZWN0ZnVsIHx8IHBlZWtU
eXBlcyh7CisgICAgaWYgKCFpc0VmZmVjdGZ1bCB8fCBwZWVrVHlwZXM8CiAgICAgICAgIExleGVy
OjpUb2tlbjo6VHlwZTo6RXF1YWxzU2lnbiwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpQ
bHVzRXF1YWxzLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok1pbnVzRXF1YWxzLApAQCAt
MTMzMyw3ICsxMzY4LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsQXNzaWdubWVudCgp
IC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LAogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6Ok9yRXF1YWxzLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0
U2hpZnRFcXVhbHMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxz
Ci0gICAgfSkpIHsKKyAgICA+KCkpIHsKICAgICAgICAgcmV0dXJuIGNvbXBsZXRlQXNzaWdubWVu
dChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKCpleHByZXNzaW9uKSk7CiAgICAgfQogCkBAIC0x
MzQyLDcgKzEzNzcsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsQXNzaWdubWVudCgp
IC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LAogCiBhdXRvIFBhcnNlcjo6
cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBw
cmV2aW91cykgLT4gU3VmZml4RXhwcmVzc2lvbgogewotICAgIGF1dG8gdHlwZSA9IGNvbnN1bWVU
eXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6RnVsbFN0b3AsIExleGVyOjpUb2tlbjo6VHlwZTo6
QXJyb3csIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQgfSk7CisgICAgYXV0
byB0eXBlID0gY29uc3VtZVR5cGVzPAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkZ1bGxT
dG9wLAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkFycm93LAorICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0PigpOwogICAgIGlmICghdHlwZSkKICAgICAg
ICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKIApA
QCAtMTM1MSwxMyArMTM4OSwxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3Bl
cmF0b3IoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBwcmV2aW91cykgLQogICAgICAgICBh
dXRvIGlkZW50aWZpZXIgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZp
ZXIpOwogICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gU3VmZml4
RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gU3Vm
Zml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oV1RGTW92ZSgq
dHlwZSksIFdURk1vdmUocHJldmlvdXMpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5n
KCkpLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJl
ZjxBU1Q6OkRvdEV4cHJlc3Npb24+KFdURk1vdmUoKnR5cGUpLCBXVEZNb3ZlKHByZXZpb3VzKSwg
aWRlbnRpZmllci0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAg
fQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpBcnJvdzogewogICAgICAgICBhdXRvIGlk
ZW50aWZpZXIgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwog
ICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVz
c2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gU3VmZml4RXhw
cmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCp0
eXBlKSwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oV1RGTW92ZSgq
dHlwZSksIFdURk1vdmUocHJldmlvdXMpKSwgaWRlbnRpZmllci0+c3RyaW5nVmlldy50b1N0cmlu
ZygpKSwgdHJ1ZSk7CisgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVS
ZWY8QVNUOjpEb3RFeHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnR5cGUpLCBtYWtlVW5pcXVlUmVm
PEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShwcmV2
aW91cykpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCkpLCB0cnVl
KTsKICAgICB9CiAgICAgZGVmYXVsdDogewogICAgICAgICBBU1NFUlQodHlwZS0+dHlwZSA9PSBM
ZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0KTsKQEAgLTEzNzMsNyArMTQxMSwx
MiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IoVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbj4mJiBwcmV2aW91cykgLQogCiBhdXRvIFBhcnNlcjo6cGFyc2VTdWZmaXhP
cGVyYXRvcihVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBTdWZmaXhF
eHByZXNzaW9uCiB7Ci0gICAgYXV0byBzdWZmaXggPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9r
ZW46OlR5cGU6OkZ1bGxTdG9wLCBMZXhlcjo6VG9rZW46OlR5cGU6OkFycm93LCBMZXhlcjo6VG9r
ZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0LCBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNQbHVz
LCBMZXhlcjo6VG9rZW46OlR5cGU6Ok1pbnVzTWludXMgfSk7CisgICAgYXV0byBzdWZmaXggPSBj
b25zdW1lVHlwZXM8CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RnVsbFN0b3AsCisgICAg
ICAgIExleGVyOjpUb2tlbjo6VHlwZTo6QXJyb3csCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlw
ZTo6TGVmdFNxdWFyZUJyYWNrZXQsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1c1Bs
dXMsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51cz4oKTsKICAgICBpZiAo
IXN1ZmZpeCkKICAgICAgICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91
cyksIGZhbHNlKTsKIApAQCAtMTM4MiwxMyArMTQyNSwxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VT
dWZmaXhPcGVyYXRvcihVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBT
dWZmaQogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBjb25zdW1lVHlwZShMZXhlcjo6VG9rZW46
OlR5cGU6OklkZW50aWZpZXIpOwogICAgICAgICBpZiAoIWlkZW50aWZpZXIpCiAgICAgICAgICAg
ICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwotICAg
ICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVz
c2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgV1RGTW92ZShwcmV2aW91cyksIGlkZW50aWZpZXItPnN0
cmluZ1ZpZXcudG9TdHJpbmcoKSksIHRydWUpOworICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVz
c2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwg
V1RGTW92ZShwcmV2aW91cyksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJp
bmcoKSksIHRydWUpOwogICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6QXJyb3c6
IHsKICAgICAgICAgYXV0byBpZGVudGlmaWVyID0gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpU
eXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAgaWYgKCFpZGVudGlmaWVyKQogICAgICAgICAgICAg
cmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24oV1RGTW92ZShwcmV2aW91cyksIGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuIFN1ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4cHJlc3Np
b24+KExleGVyOjpUb2tlbigqc3VmZml4KSwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNl
RXhwcmVzc2lvbj4oV1RGTW92ZSgqc3VmZml4KSwgV1RGTW92ZShwcmV2aW91cykpLCBpZGVudGlm
aWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCkpLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIFN1ZmZp
eEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4cHJlc3Npb24+KExleGVyOjpUb2tl
bigqc3VmZml4KSwgbWFrZVVuaXF1ZVJlZjxBU1Q6OkRlcmVmZXJlbmNlRXhwcmVzc2lvbj4oV1RG
TW92ZSgqc3VmZml4KSwgV1RGTW92ZShwcmV2aW91cykpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3
KG1fbGV4ZXIpLnRvU3RyaW5nKCkpLCB0cnVlKTsKICAgICB9CiAgICAgY2FzZSBMZXhlcjo6VG9r
ZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0OiB7CiAgICAgICAgIGF1dG8gZXhwcmVzc2lvbiA9
IHBhcnNlRXhwcmVzc2lvbigpOwpAQCAtMTQ1MSw3ICsxNDk0LDcgQEAgYXV0byBQYXJzZXI6OmNv
bXBsZXRlVGVybmFyeUNvbmRpdGlvbmFsKExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVm
PEFTVDo6RXgKIAogYXV0byBQYXJzZXI6OmNvbXBsZXRlQXNzaWdubWVudChMZXhlcjo6VG9rZW4m
JiBvcmlnaW4sIFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgbGVmdCkgLT4gRXhwZWN0ZWQ8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewotICAgIGF1dG8gYXNzaWdubWVu
dE9wZXJhdG9yID0gY29uc3VtZVR5cGVzKHsKKyAgICBhdXRvIGFzc2lnbm1lbnRPcGVyYXRvciA9
IGNvbnN1bWVUeXBlczwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduLAog
ICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNFcXVhbHMsCiAgICAgICAgIExleGVyOjpU
b2tlbjo6VHlwZTo6TWludXNFcXVhbHMsCkBAIC0xNDYyLDggKzE1MDUsNyBAQCBhdXRvIFBhcnNl
cjo6Y29tcGxldGVBc3NpZ25tZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEFT
VDo6RXhwcmVzc2lvbgogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkFuZEVxdWFscywKICAg
ICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpPckVxdWFscywKICAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpSaWdodFNoaWZ0RXF1YWxzLAotICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Okxl
ZnRTaGlmdEVxdWFscwotICAgIH0pOworICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRT
aGlmdEVxdWFscz4oKTsKICAgICBpZiAoIWFzc2lnbm1lbnRPcGVyYXRvcikKICAgICAgICAgcmV0
dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGFzc2lnbm1lbnRPcGVyYXRvci5lcnJvcigpKTsKIApAQCAt
MTUyMiw3ICsxNTY0LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0
aW9uYWwoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXMKIAogICAgIFBBUlNFKGV4
cHJlc3Npb24sIFBvc3NpYmxlUHJlZml4KTsKIAotICAgIGlmIChwZWVrVHlwZXMoe0xleGVyOjpU
b2tlbjo6VHlwZTo6RXF1YWxzU2lnbiwKKyAgICBpZiAocGVla1R5cGVzPExleGVyOjpUb2tlbjo6
VHlwZTo6RXF1YWxzU2lnbiwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpQbHVzRXF1YWxz
LAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok1pbnVzRXF1YWxzLAogICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OlRpbWVzRXF1YWxzLApAQCAtMTUzMiw3ICsxNTc0LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwoKSAtPiBFeHBlY3RlZDxVbmlx
dWVSZWY8QVNUOjpFeHByZXMKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmRFcXVhbHMs
CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6T3JFcXVhbHMsCiAgICAgICAgIExleGVyOjpU
b2tlbjo6VHlwZTo6UmlnaHRTaGlmdEVxdWFscywKLSAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBl
OjpMZWZ0U2hpZnRFcXVhbHN9KSkgeworICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRT
aGlmdEVxdWFscz4oKSkgewogICAgICAgICByZXR1cm4gY29tcGxldGVBc3NpZ25tZW50KFdURk1v
dmUoKm9yaWdpbiksIFdURk1vdmUoKmV4cHJlc3Npb24pKTsKICAgICB9CiAKQEAgLTE1NTYsMTMg
KzE1OTgsMTMgQEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0
aW9uKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXgKIAogYXV0byBQYXJzZXI6OmNvbXBs
ZXRlUG9zc2libGVMb2dpY2FsQmluYXJ5T3BlcmF0aW9uKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+JiYgcHJldmlvdXMpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBF
cnJvcj4KIHsKLSAgICB3aGlsZSAoYXV0byBsb2dpY2FsQmluYXJ5T3BlcmF0aW9uID0gdHJ5VHlw
ZXMoeworICAgIHdoaWxlIChhdXRvIGxvZ2ljYWxCaW5hcnlPcGVyYXRpb24gPSB0cnlUeXBlczwK
ICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpPck9yLAogICAgICAgICBMZXhlcjo6VG9rZW46
OlR5cGU6OkFuZEFuZCwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpPciwKICAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpYb3IsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6QW5k
Ci0gICAgICAgIH0pKSB7CisgICAgICAgID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQb3Nz
aWJsZVJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24pOwogCiAgICAgICAgIHN3aXRjaCAobG9naWNh
bEJpbmFyeU9wZXJhdGlvbi0+dHlwZSkgewpAQCAtMTYwOCwxNCArMTY1MCwxNCBAQCBhdXRvIFBh
cnNlcjo6cGFyc2VQb3NzaWJsZVJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24oKSAtPiBFeHBlY3Rl
ZDxVbmlxdWVSZWY8QVNUOgogCiBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZVJlbGF0aW9u
YWxCaW5hcnlPcGVyYXRpb24oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBwcmV2aW91cykg
LT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewotICAgIHdo
aWxlIChhdXRvIHJlbGF0aW9uYWxCaW5hcnlPcGVyYXRpb24gPSB0cnlUeXBlcyh7CisgICAgd2hp
bGUgKGF1dG8gcmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbiA9IHRyeVR5cGVzPAogICAgICAgICBM
ZXhlcjo6VG9rZW46OlR5cGU6Okxlc3NUaGFuU2lnbiwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpU
eXBlOjpHcmVhdGVyVGhhblNpZ24sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVzc1Ro
YW5PckVxdWFsVG8sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6R3JlYXRlclRoYW5PckVx
dWFsVG8sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RXF1YWxDb21wYXJpc29uLAogICAg
ICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok5vdEVxdWFsCi0gICAgICAgIH0pKSB7CisgICAgICAg
ID4oKSkgewogICAgICAgICBQQVJTRShuZXh0LCBQb3NzaWJsZVNoaWZ0KTsKIAogICAgICAgICBW
ZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CkBAIC0xNjYz
LDEwICsxNzA1LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlU2hpZnQoKSAtPiBFeHBl
Y3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiAKIGF1dG8gUGFyc2VyOjpj
b21wbGV0ZVBvc3NpYmxlU2hpZnQoVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBwcmV2aW91
cykgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewotICAg
IHdoaWxlIChhdXRvIHNoaWZ0ID0gdHJ5VHlwZXMoeworICAgIHdoaWxlIChhdXRvIHNoaWZ0ID0g
dHJ5VHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0LAogICAgICAg
ICBMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0U2hpZnQKLSAgICAgICAgfSkpIHsKKyAgICAgICAg
PigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlQWRkKTsKIAogICAgICAgICBWZWN0
b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1bWVudHM7CkBAIC0xNjk3LDEw
ICsxNzM5LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlQWRkKCkgLT4gRXhwZWN0ZWQ8
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogCiBhdXRvIFBhcnNlcjo6Y29tcGxl
dGVQb3NzaWJsZUFkZChVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBF
eHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiB7Ci0gICAgd2hpbGUg
KGF1dG8gYWRkID0gdHJ5VHlwZXMoeworICAgIHdoaWxlIChhdXRvIGFkZCA9IHRyeVR5cGVzPAog
ICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6
VHlwZTo6TWludXMKLSAgICAgICAgfSkpIHsKKyAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNF
KG5leHQsIFBvc3NpYmxlTXVsdGlwbHkpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKQEAgLTE3MzEsMTEgKzE3NzMsMTEgQEAgYXV0
byBQYXJzZXI6OnBhcnNlUG9zc2libGVNdWx0aXBseSgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlc3Npb24+LCBFcnIKIAogYXV0byBQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVNdWx0
aXBseShVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBFeHBlY3RlZDxV
bmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiB7Ci0gICAgd2hpbGUgKGF1dG8gbXVs
dGlwbHkgPSB0cnlUeXBlcyh7CisgICAgd2hpbGUgKGF1dG8gbXVsdGlwbHkgPSB0cnlUeXBlczwK
ICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyLAogICAgICAgICBMZXhlcjo6VG9rZW46
OlR5cGU6OkRpdmlkZSwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpNb2QKLSAgICAgICAg
fSkpIHsKKyAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlUHJlZml4
KTsKIAogICAgICAgICBWZWN0b3I8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4+IGNhbGxBcmd1
bWVudHM7CkBAIC0xNzY0LDcgKzE4MDYsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJs
ZU11bHRpcGx5KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+JiYgcHJldmlvdXMpIC0+CiAKIGF1
dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4KGJvb2wgKmlzRWZmZWN0ZnVsKSAtPiBFeHBl
Y3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3I+CiB7Ci0gICAgaWYgKGF1dG8g
cHJlZml4ID0gdHJ5VHlwZXMoeworICAgIGlmIChhdXRvIHByZWZpeCA9IHRyeVR5cGVzPAogICAg
ICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNQbHVzLAogICAgICAgICBMZXhlcjo6VG9rZW46
OlR5cGU6Ok1pbnVzTWludXMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1cywKQEAg
LTE3NzQsNyArMTgxNiw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUHJlZml4KGJvb2wg
KmlzRWZmZWN0ZnVsKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFCiAgICAgICAgIExleGVy
OjpUb2tlbjo6VHlwZTo6QW5kLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkF0LAogICAg
ICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlN0YXIKLSAgICB9KSkgeworICAgID4oKSkgewogICAg
ICAgICBQQVJTRShuZXh0LCBQb3NzaWJsZVByZWZpeCk7CiAKICAgICAgICAgc3dpdGNoIChwcmVm
aXgtPnR5cGUpIHsKQEAgLTE4NzcsNyArMTkxOSw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3Np
YmxlU3VmZml4KGJvb2wgKmlzRWZmZWN0ZnVsKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpF
CiBhdXRvIFBhcnNlcjo6cGFyc2VDYWxsRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJl
ZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4KIHsKICAgICBDT05TVU1FX1RZUEUobmFtZSwgSWRl
bnRpZmllcik7Ci0gICAgYXV0byBjYWxsTmFtZSA9IG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmco
KTsKKyAgICBhdXRvIGNhbGxOYW1lID0gbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmlu
ZygpOwogCiAgICAgQ09OU1VNRV9UWVBFKGxlZnRQYXJlbnRoZXNpcywgTGVmdFBhcmVudGhlc2lz
KTsKIApAQCAtMTg5OSw3ICsxOTQxLDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlQ2FsbEV4cHJlc3Np
b24oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJyb3IKIAogYXV0
byBQYXJzZXI6OnBhcnNlVGVybSgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+LCBFcnJvcj4KIHsKLSAgICBhdXRvIHR5cGUgPSBjb25zdW1lVHlwZXMoeworICAgIGF1dG8g
dHlwZSA9IGNvbnN1bWVUeXBlczwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRl
cmFsLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsLAogICAgICAgICBM
ZXhlcjo6VG9rZW46OlR5cGU6OkZsb2F0TGl0ZXJhbCwKQEAgLTE5MDcsMjYgKzE5NDksMjUgQEAg
YXV0byBQYXJzZXI6OnBhcnNlVGVybSgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJl
c3Npb24+LCBFcnJvcj4KICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpUcnVlLAogICAgICAg
ICBMZXhlcjo6VG9rZW46OlR5cGU6OkZhbHNlLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OklkZW50aWZpZXIsCi0gICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lz
Ci0gICAgfSk7CisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFBhcmVudGhlc2lzPigp
OwogICAgIGlmICghdHlwZSkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHR5cGUu
ZXJyb3IoKSk7CiAKICAgICBzd2l0Y2ggKHR5cGUtPnR5cGUpIHsKICAgICBjYXNlIExleGVyOjpU
b2tlbjo6VHlwZTo6SW50TGl0ZXJhbDogewotICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJh
bFRvSW50KHR5cGUtPnN0cmluZ1ZpZXcpOworICAgICAgICBhdXRvIHZhbHVlID0gaW50TGl0ZXJh
bFRvSW50KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOwogICAg
ICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6SW50ZWdlckxpdGVyYWw+KFdURk1vdmUo
KnR5cGUpLCAqdmFsdWUpIH07CiAgICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpV
aW50TGl0ZXJhbDogewotICAgICAgICBhdXRvIHZhbHVlID0gdWludExpdGVyYWxUb1VpbnQodHlw
ZS0+c3RyaW5nVmlldyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSB1aW50TGl0ZXJhbFRvVWludCh0
eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPih2YWx1ZS5lcnJvcigpKTsKICAgICAgICAgcmV0
dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWw+KFdURk1vdmUo
KnR5cGUpLCAqdmFsdWUpIH07CiAgICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpG
bG9hdExpdGVyYWw6IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxvYXQo
dHlwZS0+c3RyaW5nVmlldyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBmbG9hdExpdGVyYWxUb0Zs
b2F0KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOwogICAgICAg
ICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6RmxvYXRMaXRlcmFsPihXVEZNb3ZlKCp0eXBl
KSwgKnZhbHVlKSB9OwpAQCAtMTkzOCw3ICsxOTc5LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVGVy
bSgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJvcj4KICAgICBj
YXNlIExleGVyOjpUb2tlbjo6VHlwZTo6RmFsc2U6CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpCb29sZWFuTGl0ZXJhbD4oV1RGTW92ZSgqdHlwZSksIGZhbHNlKSB9OwogICAg
IGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyOiB7Ci0gICAgICAgIGF1dG8gbmFt
ZSA9IHR5cGUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKKyAgICAgICAgYXV0byBuYW1lID0gdHlw
ZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpOwogICAgICAgICByZXR1cm4geyBtYWtl
VW5pcXVlUmVmPEFTVDo6VmFyaWFibGVSZWZlcmVuY2U+KFdURk1vdmUoKnR5cGUpLCBXVEZNb3Zl
KG5hbWUpKSB9OwogICAgIH0KICAgICBkZWZhdWx0OiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAppbmRleCBiNDQ4MmE0NDY5ZWRjMTVl
NTMzMTkwNjMwNzQxZjc2ODc5MWRiNzQ3Li5kYjk5NjFkODcxMTYzMzdmYmIwYTFlZjg3ZDVlMjY4
YmEzNDM4YTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9XSExTTFBhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUGFyc2VyLmgKQEAgLTE0MywxMSArMTQzLDE0IEBAIHByaXZhdGU6CiAgICAgVW5leHBl
Y3RlZDxFcnJvcj4gZmFpbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIFRyeVRvUGVlayA9IFRyeVRv
UGVlazo6WWVzKTsKICAgICBFeHBlY3RlZDxMZXhlcjo6VG9rZW4sIEVycm9yPiBwZWVrKCk7CiAg
ICAgRXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4gcGVla0Z1cnRoZXIoKTsKLSAgICBib29s
IHBlZWtUeXBlcyhjb25zdCBWZWN0b3I8TGV4ZXI6OlRva2VuOjpUeXBlPiYpOworICAgIHRlbXBs
YXRlIDxMZXhlcjo6VG9rZW46OlR5cGUuLi4gdHlwZXM+CisgICAgYm9vbCBwZWVrVHlwZXMoKTsK
ICAgICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlKTsK
LSAgICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IHRyeVR5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6
VG9rZW46OlR5cGU+Jik7CisgICAgdGVtcGxhdGUgPExleGVyOjpUb2tlbjo6VHlwZS4uLiB0eXBl
cz4KKyAgICBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IHRyeVR5cGVzKCk7CiAgICAgRXhwZWN0ZWQ8
TGV4ZXI6OlRva2VuLCBFcnJvcj4gY29uc3VtZVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlKTsKLSAg
ICBFeHBlY3RlZDxMZXhlcjo6VG9rZW4sIEVycm9yPiBjb25zdW1lVHlwZXMoY29uc3QgVmVjdG9y
PExleGVyOjpUb2tlbjo6VHlwZT4mKTsKKyAgICB0ZW1wbGF0ZSA8TGV4ZXI6OlRva2VuOjpUeXBl
Li4uIHR5cGVzPgorICAgIEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+IGNvbnN1bWVUeXBl
cygpOwogCiAgICAgRXhwZWN0ZWQ8VmFyaWFudDxpbnQsIHVuc2lnbmVkPiwgRXJyb3I+IGNvbnN1
bWVJbnRlZ3JhbExpdGVyYWwoKTsKICAgICBFeHBlY3RlZDx1bnNpZ25lZCwgRXJyb3I+IGNvbnN1
bWVOb25OZWdhdGl2ZUludGVncmFsTGl0ZXJhbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlc2VydmVWYXJp
YWJsZUxpZmV0aW1lcy5jcHAKaW5kZXggOTlkOGQxZTA2NTFmODhkZDY2MjhlMmQwOTRiMmMzMGRm
MGM5NDUzMC4uNmRiNjA5YTcxMjcwZjk4OWVkMjY1MDYxNjUzMmI4ZTRjMjgxYjg3NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZh
cmlhYmxlTGlmZXRpbWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9X
SExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCkBAIC05Myw3ICs5Myw3IEBA
IHByaXZhdGU6CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIExleGVyOjpUb2tlbiBhbm9ueW1vdXNU
b2tlbihMZXhlcjo6VG9rZW46OlR5cGUgdHlwZSkKIHsKLSAgICByZXR1cm4gTGV4ZXI6OlRva2Vu
IHsgeyB9LCAwLCB0eXBlIH07CisgICAgcmV0dXJuIExleGVyOjpUb2tlbiB7IDAsIDAsIHR5cGUg
fTsKIH0KIAogY2xhc3MgUHJlc2VydmVMaWZldGltZXMgOiBwdWJsaWMgVmlzaXRvciB7Cg==
</data>
<flag name="review"
          id="389296"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373524</attachid>
            <date>2019-07-05 12:28:08 -0700</date>
            <delta_ts>2019-07-05 13:10:42 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch199520</filename>
            <type>text/plain</type>
            <size>66652</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YzlkMTcyZDY0OS4uZjI4MmZiMTg4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5OCBAQAorMjAxOS0wNy0wNSAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgorCisgICAgICAgIFtXSExTTF0gT3B0aW1pemUgdGhlIGxleGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk1MjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBNeWxlcyBNYXhmaWVsZC4KKworICAgICAgICBUaGlzIHBhdGNoIGluY2x1ZGVzIGEg
bnVtYmVyIG9mIHNtYWxsIG9wdGltaXphdGlvbnMgdG8gdGhlIGxleGVyOgorICAgICAgICAtIEJ5
IGNyZWF0aW5nIHR3byBuZXcgdHlwZXMgb2YgVG9rZW4gKEludmFsaWQgYW5kIEVPRiksIHdlIGNh
biBhdm9pZCBoYXZpbmcgdG8gbWFuaXB1bGF0ZSBPcHRpb25hbDxUb2tlbj4gZXZlcnl3aGVyZQor
ICAgICAgICAtIEJ5IGNvbWJpbmluZyB0aGUgbGV4aW5nIG9mIGlkZW50aWZpZXJzLCBrZXl3b3Jk
cyBhbmQgb3BlcmF0b3IgbmFtZXMsIHdlIGNhbiBhdm9pZCByZS1yZWFkaW5nIHRoZW0gc2V2ZXJh
bCB0aW1lcworICAgICAgICAtIEJ5IHN0b3JpbmcgbWVyZSBvZmZzZXRzIGluIHRoZSB0b2tlbnMg
aW5zdGVhZCBvZiBzdHJpbmcgdmlld3MsIHdlIHNhdmUgc3BhY2UgaW4gdGhlIGNvbW1vbiBjYXNl
IHdoZXJlIHRoZSBzdHJpbmcgdmlldyBpcyB1bnVzZWQgKGUuZy4gZm9yIGtleXdvcmRzKQorICAg
ICAgICAtIEJ5IHN0b3JpbmcgbWVyZSBvZmZzZXRzIGluIHRoZSB0b2tlbnMgaW5zdGVhZCBvZiBs
aW5lIG51bWJlcnMsIHdlIGNhbiBzaW1wbGlmeSB0aGUgd2hpdGVzcGFjZSBhbmQgY29tbWVudCBs
ZXhpbmc7IGFuZCB3ZSBjYW4gZWFzaWx5IHJlY29tcHV0ZSB0aGUgbGluZSBudW1iZXIgb24gZGVt
YW5kCisgICAgICAgIC0gQnkgdXNpbmcgdGVtcGxhdGVzIHdlIGNhbiBhdm9pZCBjb25zdHJ1Y3Rp
bmcgYW5kIGRlc3RydWN0aW5nIHZlY3RvcnMgYXQgcnVudGltZSBldmVyeSB0aW1lIHdlIGNhbGwg
dHJ5VHlwZXMsIGNvbnN1bWVUeXBlcyBvciBwZWVrVHlwZXM7IGFzIHdlbGwgYXMgYXZvaWRpbmcg
YSBjYWxsIHRvIGZpbmQoKS4KKyAgICAgICAgLSBJIGFsc28gaG9pc3RlZCB0aGUgbGVuZ3RoIGNo
ZWNrIG91dCBvZiB0aGUgbG9vcCBpbiBMZXhlcjo6c3RyaW5nKCkKKyAgICAgICAgQWxsIG9mIHRo
aXMgY29tYmluZWQgYnJvdWdodCB0aGUgdGltZSBzcGVudCBpbiB0aGUgcGFyc2VyIHdoZW4gcnVu
bmluZyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtdGVzdC1oYXJuZXNzLXRlc3QuaHRtbCA1IHRp
bWVzIG9uIG15IG1hY2hpbmUgZnJvbSA2MTJtcyB0byA0NjJtcy4KKworICAgICAgICBJIGFsc28g
cmVtb3ZlZCB0aGUgJ2FueUNoYXJhY3RlcicgbWV0aG9kIHNpbmNlIGl0IHdhcyBkZWFkIGNvZGUu
CisgICAgICAgIEkgYWxzbyByZW1vdmVkIExleGVyOjpwb3NpdGlvbigpLCBidXQgaXQgaXMgZGly
ZWN0bHkgZXF1aXZhbGVudCBub3cgdG8gcGVlaygpLnN0YXJ0T2Zmc2V0LgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcyB0aGVyZSBpcyBubyBpbnRlbmRlZCBmdW5jdGlvbmFsIGNoYW5nZS4KKwor
ICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkxleGVyOjpUb2tlbjo6dHlwZU5hbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OkxleGVyOjpjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpMZXhlcjo6bGluZU51bWJlckZyb21PZmZzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OmlzV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6aXNOZXds
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6c2tpcFdoaXRlc3BhY2VBbmRD
b21tZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmRpZ2l0U3RhciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OmNvbXBsZXRlT3BlcmF0b3JOYW1l
IGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OkxleGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpMZXhlcjo6VG9rZW46OnN0cmluZ1ZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkxleGVyOjpjb25zdW1lVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVy
OjpwZWVrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpMZXhlcjo6cGVla0Z1cnRo
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxleGVyOjpzdGF0ZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGV4ZXI6OnNldFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpMZXhlcjo6aXNGdWxseUNvbnN1bWVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpMZXhlcjo6ZXJyb3JTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6OkxleGVyOjpzdHJpbmcgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMTmFtZVJlc29sdmVyLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGVlayk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwZWVrRnVydGhlcik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
VHlwZXM6OmluY2x1ZGVzKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpUeXBlczo6YXBwZW5k
TmFtZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpUeXBlczx0Pjo6aW5jbHVkZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlR5cGVzPHQ+OjphcHBlbmROYW1lVG8pOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGVla1R5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpQYXJzZXI6OnRyeVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNl
cjo6dHJ5VHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6Y29uc3VtZVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6Y29uc3VtZVR5cGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OmNvbnN1bWVJbnRlZ3JhbExpdGVyYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VDb25zdGFudEV4cHJlc3Npb24p
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlQXJndW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlU3VmZml4QWJicmV2aWF0
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBlU3VmZml4Tm9u
QWJicmV2aWF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VUeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVHlwZURlZmluaXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VCdWlsdEluU2VtYW50aWMp
OgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VSZXNvdXJjZVNlbWFudGlj
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlUXVhbGlmaWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN0cnVjdHVyZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZp
bml0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpQYXJzZXI6OnBhcnNlRW51bWVyYXRp
b25NZW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VOYXRpdmVU
eXBlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VQ
YXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VDb21wdXRl
RnVuY3Rpb25EZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpw
YXJzZVZlcnRleE9yRnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpQYXJzZXI6OnBhcnNlUmVndWxhckZ1bmN0aW9uRGVjbGFyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VCbG9ja0JvZHkpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTd2l0Y2hDYXNlKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZVN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpwYXJzZUVmZmVjdGZ1bEFzc2lnbm1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VMaW1pdGVkU3VmZml4T3BlcmF0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VTdWZmaXhPcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpjb21wbGV0ZUFzc2lnbm1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlTG9naWNh
bEJpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6UGFyc2VyOjpjb21w
bGV0ZVBvc3NpYmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlU2hpZnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V0hMU0w6OlBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZUFkZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXSExTTDo6UGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlTXVsdGlwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VQb3NzaWJsZVByZWZpeCk6CisgICAgICAgIChXZWJD
b3JlOjpXSExTTDo6UGFyc2VyOjpwYXJzZUNhbGxFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpQYXJzZXI6OnBhcnNlVGVybSk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xQYXJzZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
OmFub255bW91c1Rva2VuKToKKwogMjAxOS0wNy0wNSAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFk
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQ3MTE1Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExleGVyLmNw
cAppbmRleCBiODM2YzVkNmViZi4uY2VkMTM2MjlkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4ZXIuY3BwCkBAIC0yNDcsNiArMjQ3LDEw
IEBAIGNvbnN0IGNoYXIqIExleGVyOjpUb2tlbjo6dHlwZU5hbWUoVHlwZSB0eXBlKQogICAgICAg
ICByZXR1cm4gIiEiOwogICAgIGNhc2UgVHlwZTo6QXQ6CiAgICAgICAgIHJldHVybiAiQCI7Cisg
ICAgY2FzZSBUeXBlOjpFbmRPZkZpbGU6CisgICAgICAgIHJldHVybiAiRU9GIjsKKyAgICBjYXNl
IFR5cGU6OkludmFsaWQ6CisgICAgICAgIHJldHVybiAiTEVYSU5HX0VSUk9SIjsKICAgICB9CiB9
CiAKQEAgLTM3MiwyOCArMzc2LDMxIEBAIGF1dG8gTGV4ZXI6OnJlY29nbml6ZUtleXdvcmQodW5z
aWduZWQgZW5kKSAtPiBPcHRpb25hbDxUb2tlbjo6VHlwZT4KICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogfQogCi1hdXRvIExleGVyOjpjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKCkgLT4gT3B0aW9u
YWw8VG9rZW4+CithdXRvIExleGVyOjpjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKCkgLT4gVG9rZW4K
IHsKLSAgICBhdXRvIHByZXBhcmUgPSBbJl0odW5zaWduZWQgbmV3T2Zmc2V0LCBUb2tlbjo6VHlw
ZSB0eXBlKSAtPiBPcHRpb25hbDxUb2tlbj4geworICAgIGF1dG8gcHJlcGFyZSA9IFsmXSh1bnNp
Z25lZCBuZXdPZmZzZXQsIFRva2VuOjpUeXBlIHR5cGUpIC0+IFRva2VuIHsKICAgICAgICAgYXV0
byBvbGRPZmZzZXQgPSBtX29mZnNldDsKICAgICAgICAgbV9vZmZzZXQgPSBuZXdPZmZzZXQ7CiAg
ICAgICAgIHNraXBXaGl0ZXNwYWNlQW5kQ29tbWVudHMoKTsKLSAgICAgICAgcmV0dXJuIHt7IG1f
c3RyaW5nVmlldy5zdWJzdHJpbmcob2xkT2Zmc2V0LCBuZXdPZmZzZXQgLSBvbGRPZmZzZXQpLCBt
X2xpbmVOdW1iZXIsIHR5cGUgfX07CisgICAgICAgIHJldHVybiB7IG9sZE9mZnNldCwgbmV3T2Zm
c2V0LCB0eXBlIH07CiAgICAgfTsKIAorICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGlkZW50aWZp
ZXIobV9vZmZzZXQpKSB7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlY29nbml6ZUtleXdv
cmQoKm5ld09mZnNldCkpIHsKKyAgICAgICAgICAgIGlmICgqcmVzdWx0ID09IFRva2VuOjpUeXBl
OjpPcGVyYXRvcikgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIG5ld2VyT2Zmc2V0ID0gY29t
cGxldGVPcGVyYXRvck5hbWUoKm5ld09mZnNldCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBwcmVwYXJlKCpuZXdlck9mZnNldCwgVG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCAqcmVzdWx0
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCBUb2tlbjo6
VHlwZTo6SWRlbnRpZmllcik7CisgICAgfQogICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGZsb2F0
TGl0ZXJhbChtX29mZnNldCkpCiAgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRv
a2VuOjpUeXBlOjpGbG9hdExpdGVyYWwpOwogICAgIGlmIChhdXRvIG5ld09mZnNldCA9IHVpbnRM
aXRlcmFsKG1fb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9r
ZW46OlR5cGU6OlVpbnRMaXRlcmFsKTsKICAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBpbnRMaXRl
cmFsKG1fb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46
OlR5cGU6OkludExpdGVyYWwpOwotICAgIGlmIChhdXRvIG5ld09mZnNldCA9IG9wZXJhdG9yTmFt
ZShtX29mZnNldCkpCi0gICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpU
eXBlOjpPcGVyYXRvck5hbWUpOwotICAgIGlmIChhdXRvIG5ld09mZnNldCA9IGlkZW50aWZpZXIo
bV9vZmZzZXQpKSB7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IHJlY29nbml6ZUtleXdvcmQo
Km5ld09mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gcHJlcGFyZSgqbmV3T2Zmc2V0LCAqcmVz
dWx0KTsKLSAgICAgICAgcmV0dXJuIHByZXBhcmUoKm5ld09mZnNldCwgVG9rZW46OlR5cGU6Oklk
ZW50aWZpZXIpOwotICAgIH0KICAgICAvLyBTb3J0ZWQgYnkgbGVuZ3RoLCBzbyBsb25nZXIgbWF0
Y2hlcyBhcmUgcHJlZmVyYWJsZSB0byBzaG9ydGVyIG1hdGNoZXMuCiAgICAgaWYgKGF1dG8gbmV3
T2Zmc2V0ID0gc3RyaW5nKCI+Pj0iLCBtX29mZnNldCkpCiAgICAgICAgIHJldHVybiBwcmVwYXJl
KCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpSaWdodFNoaWZ0RXF1YWxzKTsKQEAgLTQ5MCwyMCAr
NDk3LDI4IEBAIGF1dG8gTGV4ZXI6OmNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKSAtPiBPcHRpb25h
bDxUb2tlbj4KICAgICBpZiAoYXV0byBuZXdPZmZzZXQgPSBjaGFyYWN0ZXIoJ0AnLCBtX29mZnNl
dCkpCiAgICAgICAgIHJldHVybiBwcmVwYXJlKCpuZXdPZmZzZXQsIFRva2VuOjpUeXBlOjpBdCk7
CiAKLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGlmIChtX29mZnNldCA9PSBtX3N0cmlu
Z1ZpZXcubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBwcmVwYXJlKG1fb2Zmc2V0LCBUb2tlbjo6
VHlwZTo6RW5kT2ZGaWxlKTsKKyAgICByZXR1cm4gcHJlcGFyZShtX29mZnNldCwgVG9rZW46OlR5
cGU6OkludmFsaWQpOwogfQogCi12b2lkIExleGVyOjpza2lwV2hpdGVzcGFjZUFuZENvbW1lbnRz
KCkKK3Vuc2lnbmVkIExleGVyOjpsaW5lTnVtYmVyRnJvbU9mZnNldCh1bnNpZ25lZCB0YXJnZXRP
ZmZzZXQpCiB7Ci0gICAgdW5zaWduZWQgc2F2ZWRPZmZzZXQ7Ci0gICAgZG8gewotICAgICAgICBz
YXZlZE9mZnNldCA9IG1fb2Zmc2V0OwotICAgICAgICBza2lwV2hpdGVzcGFjZSgpOwotICAgICAg
ICBza2lwTGluZUNvbW1lbnQoKTsKLSAgICAgICAgc2tpcExvbmdDb21tZW50KCk7Ci0gICAgfSB3
aGlsZSAoc2F2ZWRPZmZzZXQgIT0gbV9vZmZzZXQpOworICAgIC8vIENvdW50aW5nIGZyb20gMSB0
byBtYXRjaCBtb3N0IHRleHQgZWRpdG9ycy4KKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gMTsK
KyAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IDA7IG9mZnNldCA8IHRhcmdldE9mZnNldDsgKytv
ZmZzZXQpIHsKKyAgICAgICAgaWYgKG1fc3RyaW5nVmlld1tvZmZzZXRdID09ICdcbicpCisgICAg
ICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgfQorICAgIHJldHVybiBsaW5lTnVtYmVyOwogfQog
CisvLyBXZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdHdvIHByb3BlcnRpZXMgb2YgVW5pY29kZToK
Ky8vIDEuIFRoZSBjb25zaXR1dGVudCBVVEYtMTYgY29kZSB1bml0cyBmb3IgYWxsIG5vbi1CTVAg
Y29kZSBwb2ludHMgYXJlIHN1cnJvZ2F0ZXMsCisvLyB3aGljaCBtZWFucyB3ZSdsbCBuZXZlciBz
ZWUgYSBmYWxzZSBtYXRjaC4gSWYgd2Ugc2VlIGEgQk1QIGNvZGUgdW5pdCwgd2UKKy8vIHJlYWxs
eSBoYXZlIGEgQk1QIGNvZGUgcG9pbnQuCisvLyAyLiBFdmVyeXRoaW5nIHdlJ3JlIGxvb2tpbmcg
Zm9yIGlzIGluIEJNUAorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKFVDaGFyIGNv
ZGVVbml0KQogewogICAgIHN3aXRjaCAoY29kZVVuaXQpIHsKQEAgLTUyOCw1MyArNTQzLDI5IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBpc05ld2xpbmUoVUNoYXIgY29kZVVuaXQpCiAgICAgfQogfQog
Ci0vLyBXZSBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdHdvIHByb3BlcnRpZXMgb2YgVW5pY29kZToK
LS8vIDEuIFRoZSBjb25zaXR1dGVudCBVVEYtMTYgY29kZSB1bml0cyBmb3IgYWxsIG5vbi1CTVAg
Y29kZSBwb2ludHMgYXJlIHN1cnJvZ2F0ZXMsCi0vLyAgICAgICAgd2hpY2ggbWVhbnMgd2UnbGwg
bmV2ZXIgc2VlIGEgZmFsc2UgbWF0Y2guIElmIHdlIHNlZSBhIEJNUCBjb2RlIHVuaXQsIHdlCi0v
LyAgICAgICAgcmVhbGx5IGhhdmUgYSBCTVAgY29kZSBwb2ludC4KLS8vIDIuIEV2ZXJ5dGhpbmcg
d2UncmUgbG9va2luZyBmb3IgaXMgaW4gQk1QCi0KLXZvaWQgTGV4ZXI6OnNraXBXaGl0ZXNwYWNl
KCkKLXsKLSAgICBmb3IgKCA7IG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIGlz
V2hpdGVzcGFjZShtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdKTsgKyttX29mZnNldCkgewotICAgICAg
ICBpZiAobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSA9PSAnXHInICYmIG1fb2Zmc2V0ICsgMSA8IG1f
c3RyaW5nVmlldy5sZW5ndGgoKSAmJiBtX3N0cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSA9PSAnXG4n
KSB7Ci0gICAgICAgICAgICArK21fb2Zmc2V0OwotICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7
Ci0gICAgICAgIH0gZWxzZSBpZiAoaXNOZXdsaW5lKG1fc3RyaW5nVmlld1ttX29mZnNldF0pKQot
ICAgICAgICAgICAgKyttX2xpbmVOdW1iZXI7Ci0gICAgfQotfQotCi12b2lkIExleGVyOjpza2lw
TGluZUNvbW1lbnQoKQotewotICAgIGlmIChtX29mZnNldCArIDEgPj0gbV9zdHJpbmdWaWV3Lmxl
bmd0aCgpIHx8IG1fc3RyaW5nVmlld1ttX29mZnNldF0gIT0gJy8nIHx8IG1fc3RyaW5nVmlld1tt
X29mZnNldCArIDFdICE9ICcvJykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9vZmZzZXQgKz0g
MjsKLSAgICBmb3IgKCA7IG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmICFpc05l
d2xpbmUobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSk7ICsrbV9vZmZzZXQpIHsgfQotfQotCi12b2lk
IExleGVyOjpza2lwTG9uZ0NvbW1lbnQoKQordm9pZCBMZXhlcjo6c2tpcFdoaXRlc3BhY2VBbmRD
b21tZW50cygpCiB7Ci0gICAgaWYgKG1fb2Zmc2V0ICsgMSA+PSBtX3N0cmluZ1ZpZXcubGVuZ3Ro
KCkgfHwgbV9zdHJpbmdWaWV3W21fb2Zmc2V0XSAhPSAnLycgfHwgbV9zdHJpbmdWaWV3W21fb2Zm
c2V0ICsgMV0gIT0gJyonKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX29mZnNldCArPSAyOwot
ICAgIGRvIHsKLSAgICAgICAgZm9yICggOyBtX29mZnNldCA8IG1fc3RyaW5nVmlldy5sZW5ndGgo
KSAmJiBtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdICE9ICcqJzsgKyttX29mZnNldCkgewotICAgICAg
ICAgICAgaWYgKG1fc3RyaW5nVmlld1ttX29mZnNldF0gPT0gJ1xyJyAmJiBtX29mZnNldCArIDEg
PCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkgJiYgbV9zdHJpbmdWaWV3W21fb2Zmc2V0ICsgMV0gPT0g
J1xuJykgewotICAgICAgICAgICAgICAgICsrbV9vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgKytt
X2xpbmVOdW1iZXI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmV3bGluZShtX3N0cmluZ1Zp
ZXdbbV9vZmZzZXRdKSkKLSAgICAgICAgICAgICAgICArK21fbGluZU51bWJlcjsKLSAgICAgICAg
fQotICAgICAgICBpZiAobV9vZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpCi0gICAgICAg
ICAgICArK21fb2Zmc2V0OwotICAgICAgICBpZiAobV9vZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVu
Z3RoKCkgJiYgbV9zdHJpbmdWaWV3W21fb2Zmc2V0XSA9PSAnLycpIHsKKyAgICB3aGlsZSAobV9v
ZmZzZXQgPCBtX3N0cmluZ1ZpZXcubGVuZ3RoKCkpIHsKKyAgICAgICAgaWYgKGlzV2hpdGVzcGFj
ZShtX3N0cmluZ1ZpZXdbbV9vZmZzZXRdKSkKICAgICAgICAgICAgICsrbV9vZmZzZXQ7CisgICAg
ICAgIGVsc2UgaWYgKG1fc3RyaW5nVmlld1ttX29mZnNldF0gPT0gJy8nICYmIG1fb2Zmc2V0ICsg
MSA8IG1fc3RyaW5nVmlldy5sZW5ndGgoKSkgeworICAgICAgICAgICAgaWYgKG1fc3RyaW5nVmll
d1ttX29mZnNldCArIDFdID09ICcvJykgeworICAgICAgICAgICAgICAgIC8vIExpbmUgY29tbWVu
dAorICAgICAgICAgICAgICAgIG1fb2Zmc2V0ICs9IDI7CisgICAgICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IGluIHRoZSBjYXNlIG9mIFxyXG4gdGhpcyBtYWtlcyB0aGUgY29tbWVudCBlbmQgb24g
dGhlIFxyLiBJdCBpcyBmaW5lLCBhcyB0aGUgXG4gYWZ0ZXIgdGhhdCBpcyBzaW1wbGUgd2hpdGVz
cGFjZS4KKyAgICAgICAgICAgICAgICBmb3IgKCA7IG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxl
bmd0aCgpICYmICFpc05ld2xpbmUobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSk7ICsrbV9vZmZzZXQp
IHsgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0cmluZ1ZpZXdbbV9vZmZzZXQgKyAxXSA9
PSAnKicpIHsKKyAgICAgICAgICAgICAgICAvLyBMb25nIGNvbW1lbnQKKyAgICAgICAgICAgICAg
ICBmb3IgKCA7IG1fb2Zmc2V0IDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpIDsgKyttX29mZnNldCkg
eworICAgICAgICAgICAgICAgICAgICBpZiAobV9zdHJpbmdWaWV3W21fb2Zmc2V0XSA9PSAnKicg
JiYgbV9vZmZzZXQgKyAxIDwgbV9zdHJpbmdWaWV3Lmxlbmd0aCgpICYmIG1fc3RyaW5nVmlld1tt
X29mZnNldCArIDFdID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9vZmZzZXQg
Kz0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAobV9vZmZzZXQgPCBtX3N0
cmluZ1ZpZXcubGVuZ3RoKCkpOworICAgIH0KIH0KIAogLy8gUmVndWxhciBleHByZXNzaW9uIGFy
ZSB1bm5lY2Vzc2FyeTsgd2Ugc2hvdWxkbid0IG5lZWQgdG8gY29tcGlsZSB0aGVtLgpAQCAtNjc2
LDEyICs2NjcsOSBAQCBPcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OmRpZ2l0KHVuc2lnbmVkIG9m
ZnNldCkgY29uc3QKIAogdW5zaWduZWQgTGV4ZXI6OmRpZ2l0U3Rhcih1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0CiB7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBkaWdp
dChvZmZzZXQpOwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBvZmZz
ZXQ7CisgICAgd2hpbGUgKGF1dG8gcmVzdWx0ID0gZGlnaXQob2Zmc2V0KSkKICAgICAgICAgb2Zm
c2V0ID0gKnJlc3VsdDsKLSAgICB9CisgICAgcmV0dXJuIG9mZnNldDsKIH0KIAogT3B0aW9uYWw8
dW5zaWduZWQ+IExleGVyOjpjaGFyYWN0ZXIoY2hhciBjaGFyYWN0ZXIsIHVuc2lnbmVkIG9mZnNl
dCkgY29uc3QKQEAgLTc1NCw2OCArNzQyLDY2IEBAIE9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6
aWRlbnRpZmllcih1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiAgICAgcmV0dXJuIHZhbGlkSWRlbnRp
ZmllcihvZmZzZXQpOwogfQogCi1PcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6Om9wZXJhdG9yTmFt
ZSh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CitPcHRpb25hbDx1bnNpZ25lZD4gTGV4ZXI6OmNvbXBs
ZXRlT3BlcmF0b3JOYW1lKHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBy
ZXN1bHQgPSBzdHJpbmcoIm9wZXJhdG9yJi4iLCBvZmZzZXQpKQorICAgIC8vIFNvcnRlZCBieSBs
ZW5ndGgsIHNvIGxvbmdlciBtYXRjaGVzIGFyZSBwcmVmZXJhYmxlIHRvIHNob3J0ZXIgbWF0Y2hl
cy4KKyAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIiZbXSIsIG9mZnNldCkpCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gc3RyaW5nKCJbXT0iLCBvZmZz
ZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmlu
ZygiPj4iLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJl
c3VsdCA9IHN0cmluZygiPDwiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiKysiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiLS0iLCBvZmZzZXQpKQorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiJiYiLCBv
ZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0
cmluZygifHwiLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRv
IHJlc3VsdCA9IHN0cmluZygiPj0iLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiPD0iLCBvZmZzZXQpKQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiPT0iLCBvZmZzZXQpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygiW10i
LCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9
IHN0cmluZygiJi4iLCBvZmZzZXQpKQogICAgICAgICByZXR1cm4gdmFsaWRJZGVudGlmaWVyKCpy
ZXN1bHQpOwotICAgIGlmIChhdXRvIHJlc3VsdCA9IHN0cmluZygib3BlcmF0b3IuIiwgb2Zmc2V0
KSkgewotICAgICAgICBpZiAoKHJlc3VsdCA9IHZhbGlkSWRlbnRpZmllcigqcmVzdWx0KSkpIHsK
LSAgICAgICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJz0nLCAqcmVzdWx0KSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgICAgIHJldHVybiAqcmVz
dWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJhY3RlcignKycsIG9mZnNldCkpCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCctJywg
b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBj
aGFyYWN0ZXIoJyonLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChh
dXRvIHJlc3VsdCA9IGNoYXJhY3RlcignLycsIG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCclJywgb2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0ZXIoJzwnLCBv
ZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNo
YXJhY3RlcignPicsIG9mZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1
dG8gcmVzdWx0ID0gY2hhcmFjdGVyKCchJywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjaGFyYWN0ZXIoJ34nLCBvZmZzZXQpKQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJhY3RlcignJicsIG9m
ZnNldCkpCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gY2hh
cmFjdGVyKCdeJywgb2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAoYXV0
byByZXN1bHQgPSBjaGFyYWN0ZXIoJ3wnLCBvZmZzZXQpKQorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNoYXJhY3RlcignLicsIG9mZnNldCkpIHsKKyAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0MiA9IHZhbGlkSWRlbnRpZmllcigqcmVzdWx0KSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0MyA9IGNoYXJhY3RlcignPScsICpyZXN1bHQyKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0MzsKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0MjsK
ICAgICAgICAgfQogICAgIH0KLSAgICBpZiAoYXV0byByZXN1bHQgPSBzdHJpbmcoIm9wZXJhdG9y
Iiwgb2Zmc2V0KSkgewotICAgICAgICAvLyBTb3J0ZWQgYnkgbGVuZ3RoLCBzbyBsb25nZXIgbWF0
Y2hlcyBhcmUgcHJlZmVyYWJsZSB0byBzaG9ydGVyIG1hdGNoZXMuCi0gICAgICAgIGlmIChhdXRv
IHJlc3VsdDIgPSBzdHJpbmcoIiZbXSIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIltdPSIsICpyZXN1bHQp
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIg
PSBzdHJpbmcoIj4+IiwgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAg
ICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiPDwiLCAqcmVzdWx0KSkKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gc3RyaW5nKCIr
KyIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChh
dXRvIHJlc3VsdDIgPSBzdHJpbmcoIi0tIiwgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygiJiYiLCAqcmVzdWx0
KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQy
ID0gc3RyaW5nKCJ8fCIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0g
ICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIj49IiwgKnJlc3VsdCkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IHN0cmluZygi
PD0iLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAo
YXV0byByZXN1bHQyID0gc3RyaW5nKCI9PSIsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBzdHJpbmcoIltdIiwgKnJlc3Vs
dCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0
MiA9IGNoYXJhY3RlcignKycsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7
Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJy0nLCAqcmVzdWx0KSkKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hh
cmFjdGVyKCcqJywgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAg
ICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignLycsICpyZXN1bHQpKQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIo
JyUnLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAo
YXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCc8JywgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9IGNoYXJhY3RlcignPicsICpy
ZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0gICAgICAgIGlmIChhdXRvIHJl
c3VsdDIgPSBjaGFyYWN0ZXIoJyEnLCAqcmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFjdGVyKCd+JywgKnJlc3VsdCkp
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICAgICAgaWYgKGF1dG8gcmVzdWx0MiA9
IGNoYXJhY3RlcignJicsICpyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDI7Ci0g
ICAgICAgIGlmIChhdXRvIHJlc3VsdDIgPSBjaGFyYWN0ZXIoJ14nLCAqcmVzdWx0KSkKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQyOwotICAgICAgICBpZiAoYXV0byByZXN1bHQyID0gY2hhcmFj
dGVyKCd8JywgKnJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0MjsKLSAgICB9CiAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xMZXhlci5oCmluZGV4IGJiZGU5ZmU0ZjhiLi5lMmUyMmFhOGYx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xM
ZXhlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTGV4
ZXIuaApAQCAtNTcsMTUgKzU3LDkgQEAgcHVibGljOgogICAgIExleGVyJiBvcGVyYXRvcj0oTGV4
ZXImJikgPSBkZWZhdWx0OwogCiAgICAgc3RydWN0IFRva2VuIHsKLSAgICAgICAgVG9rZW4oKSA9
IGRlbGV0ZTsKLSAgICAgICAgVG9rZW4oY29uc3QgVG9rZW4mKSA9IGRlZmF1bHQ7Ci0gICAgICAg
IFRva2VuKFRva2VuJiYpID0gZGVmYXVsdDsKLSAgICAgICAgVG9rZW4mIG9wZXJhdG9yPShjb25z
dCBUb2tlbiYpID0gZGVmYXVsdDsKLSAgICAgICAgVG9rZW4mIG9wZXJhdG9yPShUb2tlbiYmKSA9
IGRlZmF1bHQ7Ci0KLSAgICAgICAgU3RyaW5nVmlldyBzdHJpbmdWaWV3OwotICAgICAgICB1bnNp
Z25lZCBsaW5lTnVtYmVyOwotICAgICAgICBlbnVtIGNsYXNzIFR5cGUgeworICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0OworICAgICAgICBl
bnVtIGNsYXNzIFR5cGUgOiB1aW50OF90IHsKICAgICAgICAgICAgIEludExpdGVyYWwsCiAgICAg
ICAgICAgICBVaW50TGl0ZXJhbCwKICAgICAgICAgICAgIEZsb2F0TGl0ZXJhbCwKQEAgLTE3Miwx
MiArMTY2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgICAgIFRpbGRlLAogICAgICAgICAgICAgRXhj
bGFtYXRpb25Qb2ludCwKICAgICAgICAgICAgIEF0LAotICAgICAgICB9IHR5cGU7CisgICAgICAg
ICAgICBFbmRPZkZpbGUsCisgICAgICAgICAgICBJbnZhbGlkCisgICAgICAgIH0gdHlwZSB7VHlw
ZTo6SW52YWxpZH07CiAKICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVOYW1lKFR5cGUp
OworCisgICAgICAgIGNvbnN0IFN0cmluZ1ZpZXcgc3RyaW5nVmlldyhjb25zdCBMZXhlciYgbGV4
ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBsZXhlci5tX3N0cmluZ1ZpZXcuc3Vi
c3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CisgICAgICAgIH0K
ICAgICB9OwogCi0gICAgT3B0aW9uYWw8VG9rZW4+IGNvbnN1bWVUb2tlbigpCisgICAgVG9rZW4g
Y29uc3VtZVRva2VuKCkKICAgICB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9yaW5nQnVmZmVy
W21fcmluZ0J1ZmZlckluZGV4XTsKICAgICAgICAgbV9yaW5nQnVmZmVyW21fcmluZ0J1ZmZlcklu
ZGV4XSA9IGNvbnN1bWVUb2tlbkZyb21TdHJlYW0oKTsKQEAgLTE4NSwxMiArMTg2LDEyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBPcHRpb25hbDxUb2tl
bj4gcGVlaygpCisgICAgVG9rZW4gcGVlaygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV9yaW5nQnVmZmVyW21fcmluZ0J1ZmZlckluZGV4XTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxU
b2tlbj4gcGVla0Z1cnRoZXIoKQorICAgIFRva2VuIHBlZWtGdXJ0aGVyKCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3JpbmdCdWZmZXJbKG1fcmluZ0J1ZmZlckluZGV4ICsgMSkgJSAy
XTsKICAgICB9CkBAIC0xOTgsMTAgKzE5OSw5IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIG5vdCBuZWVkIHRoaXMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTk4MzU3CiAgICAgc3RydWN0IFN0YXRlIHsKLSAgICAgICAgT3B0aW9uYWw8
VG9rZW4+IHJpbmdCdWZmZXJbMl07CisgICAgICAgIFRva2VuIHJpbmdCdWZmZXJbMl07CiAgICAg
ICAgIHVuc2lnbmVkIHJpbmdCdWZmZXJJbmRleDsKICAgICAgICAgdW5zaWduZWQgb2Zmc2V0Owot
ICAgICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwogICAgIH07CiAKICAgICBTdGF0ZSBzdGF0ZSgp
IGNvbnN0CkBAIC0yMTEsNyArMjExLDYgQEAgcHVibGljOgogICAgICAgICBzdGF0ZS5yaW5nQnVm
ZmVyWzFdID0gbV9yaW5nQnVmZmVyWzFdOwogICAgICAgICBzdGF0ZS5yaW5nQnVmZmVySW5kZXgg
PSBtX3JpbmdCdWZmZXJJbmRleDsKICAgICAgICAgc3RhdGUub2Zmc2V0ID0gbV9vZmZzZXQ7Ci0g
ICAgICAgIHN0YXRlLmxpbmVOdW1iZXIgPSBtX2xpbmVOdW1iZXI7CiAgICAgICAgIHJldHVybiBz
dGF0ZTsKICAgICB9CiAKQEAgLTIyMSw3ICsyMjAsNiBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmlu
Z0J1ZmZlclsxXSA9IHN0YXRlLnJpbmdCdWZmZXJbMV07CiAgICAgICAgIG1fcmluZ0J1ZmZlcklu
ZGV4ID0gc3RhdGUucmluZ0J1ZmZlckluZGV4OwogICAgICAgICBtX29mZnNldCA9IHN0YXRlLm9m
ZnNldDsKLSAgICAgICAgbV9saW5lTnVtYmVyID0gc3RhdGUubGluZU51bWJlcjsKIAogICAgIH0K
IApAQCAtMjMxLDI2ICsyMjksMjQgQEAgcHVibGljOgogICAgICAgICBtX3JpbmdCdWZmZXJbMV0g
PSBXVEZNb3ZlKHN0YXRlLnJpbmdCdWZmZXJbMV0pOwogICAgICAgICBtX3JpbmdCdWZmZXJJbmRl
eCA9IFdURk1vdmUoc3RhdGUucmluZ0J1ZmZlckluZGV4KTsKICAgICAgICAgbV9vZmZzZXQgPSBX
VEZNb3ZlKHN0YXRlLm9mZnNldCk7Ci0gICAgICAgIG1fbGluZU51bWJlciA9IFdURk1vdmUoc3Rh
dGUubGluZU51bWJlcik7CiAgICAgfQogCiAgICAgYm9vbCBpc0Z1bGx5Q29uc3VtZWQoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG1fc3RyaW5nVmlldy5sZW5ndGgo
KTsKKyAgICAgICAgcmV0dXJuIHBlZWsoKS50eXBlID09IFRva2VuOjpUeXBlOjpFbmRPZkZpbGU7
CiAgICAgfQogCiAgICAgU3RyaW5nIGVycm9yU3RyaW5nKGNvbnN0IFRva2VuJiB0b2tlbiwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIlBh
cnNlIGVycm9yIGF0IGxpbmUgIiwgdG9rZW4ubGluZU51bWJlciwgIjogIiwgbWVzc2FnZSk7Cisg
ICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJQYXJzZSBlcnJvciBhdCBsaW5lICIsIGxpbmVOdW1i
ZXJGcm9tT2Zmc2V0KHRva2VuLnN0YXJ0T2Zmc2V0KSwgIjogIiwgbWVzc2FnZSk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIE9wdGlvbmFsPFRva2VuPiBjb25zdW1lVG9rZW5Gcm9tU3RyZWFtKCk7
CisgICAgVG9rZW4gY29uc3VtZVRva2VuRnJvbVN0cmVhbSgpOwogCiAgICAgdm9pZCBza2lwV2hp
dGVzcGFjZUFuZENvbW1lbnRzKCk7Ci0gICAgdm9pZCBza2lwV2hpdGVzcGFjZSgpOwotICAgIHZv
aWQgc2tpcExpbmVDb21tZW50KCk7Ci0gICAgdm9pZCBza2lwTG9uZ0NvbW1lbnQoKTsKKworICAg
IHVuc2lnbmVkIGxpbmVOdW1iZXJGcm9tT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCk7CiAKICAgICBP
cHRpb25hbDxUb2tlbjo6VHlwZT4gcmVjb2duaXplS2V5d29yZCh1bnNpZ25lZCBlbmQpOwogCkBA
IC0yNjUsNDIgKzI2MSwzMSBAQCBwcml2YXRlOgogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBkaWdp
dCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgZGlnaXRTdGFyKHVuc2lnbmVkKSBjb25z
dDsKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gY2hhcmFjdGVyKGNoYXIsIHVuc2lnbmVkKSBjb25z
dDsKLSAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IE9wdGlvbmFsPHVuc2lnbmVkPiBhbnlD
aGFyYWN0ZXIoY29uc3QgY2hhciAoJnN0cmluZylbbGVuZ3RoXSwgdW5zaWduZWQpIGNvbnN0Owog
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBjb3JlRmxvYXRMaXRlcmFsVHlwZTEodW5zaWduZWQpIGNv
bnN0OwogICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBjb3JlRmxvYXRMaXRlcmFsKHVuc2lnbmVkKSBj
b25zdDsKICAgICBPcHRpb25hbDx1bnNpZ25lZD4gZmxvYXRMaXRlcmFsKHVuc2lnbmVkKSBjb25z
dDsKICAgICB0ZW1wbGF0ZTx1bnNpZ25lZCBsZW5ndGg+IE9wdGlvbmFsPHVuc2lnbmVkPiBzdHJp
bmcoY29uc3QgY2hhciAoJnN0cmluZylbbGVuZ3RoXSwgdW5zaWduZWQpIGNvbnN0OwogICAgIE9w
dGlvbmFsPHVuc2lnbmVkPiB2YWxpZElkZW50aWZpZXIodW5zaWduZWQpIGNvbnN0OwogICAgIE9w
dGlvbmFsPHVuc2lnbmVkPiBpZGVudGlmaWVyKHVuc2lnbmVkKSBjb25zdDsKLSAgICBPcHRpb25h
bDx1bnNpZ25lZD4gb3BlcmF0b3JOYW1lKHVuc2lnbmVkKSBjb25zdDsKKyAgICBPcHRpb25hbDx1
bnNpZ25lZD4gY29tcGxldGVPcGVyYXRvck5hbWUodW5zaWduZWQpIGNvbnN0OwogCiAgICAgU3Ry
aW5nVmlldyBtX3N0cmluZ1ZpZXc7Ci0gICAgT3B0aW9uYWw8VG9rZW4+IG1fcmluZ0J1ZmZlclsy
XTsKKyAgICBUb2tlbiBtX3JpbmdCdWZmZXJbMl07CiAgICAgdW5zaWduZWQgbV9yaW5nQnVmZmVy
SW5kZXggeyAwIH07CiAgICAgdW5zaWduZWQgbV9vZmZzZXQgeyAwIH07Ci0gICAgdW5zaWduZWQg
bV9saW5lTnVtYmVyIHsgMCB9OwogfTsKIAogdGVtcGxhdGU8dW5zaWduZWQgbGVuZ3RoPiBPcHRp
b25hbDx1bnNpZ25lZD4gTGV4ZXI6OnN0cmluZyhjb25zdCBjaGFyICgmc3RyaW5nKVtsZW5ndGhd
LCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0CiB7CisgICAgaWYgKG9mZnNldCArIGxlbmd0aCA+IG1f
c3RyaW5nVmlldy5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgKytpKSB7Ci0gICAgICAgIGlmIChv
ZmZzZXQgKyBpID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSB8fCBtX3N0cmluZ1ZpZXdbb2Zmc2V0
ICsgaV0gIT0gc3RyaW5nW2ldKQorICAgICAgICBpZiAobV9zdHJpbmdWaWV3W29mZnNldCArIGld
ICE9IHN0cmluZ1tpXSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQog
ICAgIHJldHVybiBvZmZzZXQgKyBsZW5ndGggLSAxOwogfQogCi10ZW1wbGF0ZTx1bnNpZ25lZCBs
ZW5ndGg+IE9wdGlvbmFsPHVuc2lnbmVkPiBMZXhlcjo6YW55Q2hhcmFjdGVyKGNvbnN0IGNoYXIg
KCZzdHJpbmcpW2xlbmd0aF0sIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKLXsKLSAgICBpZiAob2Zm
c2V0ID49IG1fc3RyaW5nVmlldy5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoIC0gMTsgKytpKSB7Ci0gICAg
ICAgIGlmIChtX3N0cmluZ1ZpZXdbb2Zmc2V0XSA9PSBzdHJpbmdbaV0pCi0gICAgICAgICAgICBy
ZXR1cm4gb2Zmc2V0ICsgMTsKLSAgICB9Ci0gICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQog
fSAvLyBuYW1lc3BhY2UgV0hMU0wKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xOYW1lUmVzb2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVy
LmgKaW5kZXggOTFmYWFjY2NjMGMuLmY0MzBhYjc5MGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTE5hbWVSZXNvbHZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMTmFtZVJlc29sdmVyLmgKQEAgLTQ0
LDggKzQ0LDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+TmFtZVJlc29sdmVyKCk7CiAKLSAg
ICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJikgb3ZlcnJpZGU7Ci0KICAgICB2
b2lkIHNldEN1cnJlbnRGdW5jdGlvbkRlZmluaXRpb24oQVNUOjpGdW5jdGlvbkRlZmluaXRpb24q
IGZ1bmN0aW9uRGVmaW5pdGlvbikKICAgICB7CiAgICAgICAgIG1fY3VycmVudEZ1bmN0aW9uID0g
ZnVuY3Rpb25EZWZpbml0aW9uOwpAQCAtNTQsNiArNTIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRJc1Jlc29sdmluZ0NhbGxzKGJvb2wgaXNSZXNvbHZpbmdDYWxscykgeyBtX2lzUmVzb2x2aW5n
Q2FsbHMgPSBpc1Jlc29sdmluZ0NhbGxzOyB9CiAKIHByaXZhdGU6CisgICAgdm9pZCB2aXNpdChB
U1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgdmlzaXQoQVNUOjpO
YXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCB2aXNpdChBU1Q6
OlR5cGVSZWZlcmVuY2UmKSBvdmVycmlkZTsKICAgICB2b2lkIHZpc2l0KEFTVDo6QmxvY2smKSBv
dmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmNwcAppbmRleCA0MGYyNjlkZjFlMy4uMjJiMWE5Yjg5MzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAKQEAg
LTY2LDkgKzY2LDkgQEAgYXV0byBQYXJzZXI6OnBhcnNlKFByb2dyYW0mIHByb2dyYW0sIFN0cmlu
Z1ZpZXcgc3RyaW5nVmlldywgTW9kZSBtb2RlKSAtPiBPcHRpb24KIAogICAgIHdoaWxlICghbV9s
ZXhlci5pc0Z1bGx5Q29uc3VtZWQoKSkgewogICAgICAgICBhdXRvIHRva2VuID0gbV9sZXhlci5w
ZWVrKCk7Ci0gICAgICAgIGlmICghdG9rZW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
c3dpdGNoICh0b2tlbi0+dHlwZSkgeworICAgICAgICBzd2l0Y2ggKHRva2VuLnR5cGUpIHsKKyAg
ICAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkludmFsaWQ6CisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6U2VtaWNv
bG9uOgogICAgICAgICAgICAgbV9sZXhlci5jb25zdW1lVG9rZW4oKTsKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTM1LDc1ICsxMzUsOTQgQEAgYXV0byBQYXJzZXI6OmZhaWwoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBUcnlUb1BlZWsgdHJ5VG9QZWVrKSAtPiBVbmV4cGVjdGVkPEVycm8KIAog
YXV0byBQYXJzZXI6OnBlZWsoKSAtPiBFeHBlY3RlZDxMZXhlcjo6VG9rZW4sIEVycm9yPgogewot
ICAgIGlmIChhdXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCkpIHsKLSAgICAgICAgcmV0dXJuICp0
b2tlbjsKLSAgICB9CisgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygpOworICAgIGlmICh0
b2tlbi50eXBlICE9IExleGVyOjpUb2tlbjo6VHlwZTo6SW52YWxpZCAmJiB0b2tlbi50eXBlICE9
IExleGVyOjpUb2tlbjo6VHlwZTo6RW5kT2ZGaWxlKQorICAgICAgICByZXR1cm4geyB0b2tlbiB9
OwogICAgIHJldHVybiBmYWlsKCJDYW5ub3QgY29uc3VtZSB0b2tlbiJfc3RyLCBUcnlUb1BlZWs6
Ok5vKTsKIH0KIAogYXV0byBQYXJzZXI6OnBlZWtGdXJ0aGVyKCkgLT4gRXhwZWN0ZWQ8TGV4ZXI6
OlRva2VuLCBFcnJvcj4KIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVla0Z1cnRo
ZXIoKSkgewotICAgICAgICByZXR1cm4gKnRva2VuOwotICAgIH0KKyAgICBhdXRvIHRva2VuID0g
bV9sZXhlci5wZWVrRnVydGhlcigpOworICAgIGlmICh0b2tlbi50eXBlICE9IExleGVyOjpUb2tl
bjo6VHlwZTo6SW52YWxpZCAmJiB0b2tlbi50eXBlICE9IExleGVyOjpUb2tlbjo6VHlwZTo6RW5k
T2ZGaWxlKQorICAgICAgICByZXR1cm4geyB0b2tlbiB9OwogICAgIHJldHVybiBmYWlsKCJDYW5u
b3QgY29uc3VtZSB0d28gdG9rZW5zIl9zdHIsIFRyeVRvUGVlazo6Tm8pOwogfQogCi1ib29sIFBh
cnNlcjo6cGVla1R5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6VG9rZW46OlR5cGU+JiB0eXBlcykK
K3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUgdCwgTGV4ZXI6OlRva2VuOjpUeXBlLi4uIHRz
Pgorc3RydWN0IFR5cGVzIHsKKyAgICBzdGF0aWMgYm9vbCBpbmNsdWRlcyhMZXhlcjo6VG9rZW46
OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0ID09IHR5cGUgfHwgVHlwZXM8dHMu
Li4+OjppbmNsdWRlcyh0eXBlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmROYW1l
VG8oU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKKyAgICB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KExleGVyOjpUb2tlbjo6dHlwZU5hbWUodCkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAi
KTsKKyAgICAgICAgVHlwZXM8dHMuLi4+OjphcHBlbmROYW1lVG8oYnVpbGRlcik7CisgICAgfQor
fTsKK3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUgdD4KK3N0cnVjdCBUeXBlczx0PiB7Cisg
ICAgc3RhdGljIGJvb2wgaW5jbHVkZXMoTGV4ZXI6OlRva2VuOjpUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gdCA9PSB0eXBlOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGFwcGVu
ZE5hbWVUbyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQorICAgIHsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQoTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0KSk7CisgICAgfQorfTsKKwordGVtcGxhdGUg
PExleGVyOjpUb2tlbjo6VHlwZS4uLiB0eXBlcz4KK2Jvb2wgUGFyc2VyOjpwZWVrVHlwZXMoKQog
ewotICAgIGlmIChhdXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCkpCi0gICAgICAgIHJldHVybiBz
dGQ6OmZpbmQodHlwZXMuYmVnaW4oKSwgdHlwZXMuZW5kKCksIHRva2VuLT50eXBlKSAhPSB0eXBl
cy5lbmQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVl
aygpOworICAgIHJldHVybiBUeXBlczx0eXBlcy4uLj46OmluY2x1ZGVzKHRva2VuLnR5cGUpOwog
fQogCiBPcHRpb25hbDxMZXhlcjo6VG9rZW4+IFBhcnNlcjo6dHJ5VHlwZShMZXhlcjo6VG9rZW46
OlR5cGUgdHlwZSkKIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIucGVlaygpKSB7Ci0g
ICAgICAgIGlmICh0b2tlbi0+dHlwZSA9PSB0eXBlKQotICAgICAgICAgICAgcmV0dXJuIG1fbGV4
ZXIuY29uc3VtZVRva2VuKCk7Ci0gICAgfQorICAgIGF1dG8gdG9rZW4gPSBtX2xleGVyLnBlZWso
KTsKKyAgICBpZiAodG9rZW4udHlwZSA9PSB0eXBlKQorICAgICAgICByZXR1cm4geyBtX2xleGVy
LmNvbnN1bWVUb2tlbigpIH07CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotT3B0aW9u
YWw8TGV4ZXI6OlRva2VuPiBQYXJzZXI6OnRyeVR5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6VG9r
ZW46OlR5cGU+JiB0eXBlcykKK3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5cGUuLi4gdHlwZXM+
CitPcHRpb25hbDxMZXhlcjo6VG9rZW4+IFBhcnNlcjo6dHJ5VHlwZXMoKQogewotICAgIGlmIChh
dXRvIHRva2VuID0gbV9sZXhlci5wZWVrKCkpIHsKLSAgICAgICAgaWYgKHN0ZDo6ZmluZCh0eXBl
cy5iZWdpbigpLCB0eXBlcy5lbmQoKSwgdG9rZW4tPnR5cGUpICE9IHR5cGVzLmVuZCgpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7Ci0gICAgfQorICAgIGF1dG8g
dG9rZW4gPSBtX2xleGVyLnBlZWsoKTsKKyAgICBpZiAoVHlwZXM8dHlwZXMuLi4+OjppbmNsdWRl
cyh0b2tlbi50eXBlKSkKKyAgICAgICAgcmV0dXJuIHsgbV9sZXhlci5jb25zdW1lVG9rZW4oKSB9
OwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIGF1dG8gUGFyc2VyOjpjb25zdW1lVHlw
ZShMZXhlcjo6VG9rZW46OlR5cGUgdHlwZSkgLT4gRXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJv
cj4KIHsKLSAgICBpZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCkpIHsKLSAg
ICAgICAgaWYgKHRva2VuLT50eXBlID09IHR5cGUpCi0gICAgICAgICAgICByZXR1cm4gKnRva2Vu
OwotICAgICAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCJVbmV4cGVjdGVkIHRva2VuIChleHBl
Y3RlZCAiLCBMZXhlcjo6VG9rZW46OnR5cGVOYW1lKHR5cGUpLCAiIGdvdCAiLCBMZXhlcjo6VG9r
ZW46OnR5cGVOYW1lKHRva2VuLT50eXBlKSwgIikiKSk7Ci0gICAgfQotICAgIHJldHVybiBmYWls
KG1ha2VTdHJpbmcoIkNhbm5vdCBjb25zdW1lIHRva2VuIChleHBlY3RlZCAiLCBMZXhlcjo6VG9r
ZW46OnR5cGVOYW1lKHR5cGUpLCAiKSIpKTsKKyAgICBhdXRvIHRva2VuID0gbV9sZXhlci5jb25z
dW1lVG9rZW4oKTsKKyAgICBpZiAodG9rZW4udHlwZSA9PSB0eXBlKQorICAgICAgICByZXR1cm4g
eyB0b2tlbiB9OworICAgIHJldHVybiBmYWlsKG1ha2VTdHJpbmcoIlVuZXhwZWN0ZWQgdG9rZW4g
KGV4cGVjdGVkICIsIExleGVyOjpUb2tlbjo6dHlwZU5hbWUodHlwZSksICIgZ290ICIsIExleGVy
OjpUb2tlbjo6dHlwZU5hbWUodG9rZW4udHlwZSksICIpIikpOwogfQogCi1hdXRvIFBhcnNlcjo6
Y29uc3VtZVR5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6VG9rZW46OlR5cGU+JiB0eXBlcykgLT4g
RXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4KK3RlbXBsYXRlIDxMZXhlcjo6VG9rZW46OlR5
cGUuLi4gdHlwZXM+CithdXRvIFBhcnNlcjo6Y29uc3VtZVR5cGVzKCkgLT4gRXhwZWN0ZWQ8TGV4
ZXI6OlRva2VuLCBFcnJvcj4KIHsKICAgICBhdXRvIGJ1aWxkRXhwZWN0ZWRTdHJpbmcgPSBbJl0o
KSAtPiBTdHJpbmcgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCJbIik7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0eXBl
cy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoTGV4ZXI6
OlRva2VuOjp0eXBlTmFtZSh0eXBlc1tpXSkpOwotICAgICAgICB9CisgICAgICAgIFR5cGVzPHR5
cGVzLi4uPjo6YXBwZW5kTmFtZVRvKGJ1aWxkZXIpOwogICAgICAgICBidWlsZGVyLmFwcGVuZCgi
XSIpOwogICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogICAgIH07CiAKLSAgICBp
ZiAoYXV0byB0b2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCkpIHsKLSAgICAgICAgaWYgKHN0
ZDo6ZmluZCh0eXBlcy5iZWdpbigpLCB0eXBlcy5lbmQoKSwgdG9rZW4tPnR5cGUpICE9IHR5cGVz
LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuICp0b2tlbjsKLSAgICAgICAgcmV0dXJuIGZhaWwo
bWFrZVN0cmluZygiVW5leHBlY3RlZCB0b2tlbiAoZXhwZWN0ZWQgb25lIG9mICIsIGJ1aWxkRXhw
ZWN0ZWRTdHJpbmcoKSwgIiBnb3QgIiwgTGV4ZXI6OlRva2VuOjp0eXBlTmFtZSh0b2tlbi0+dHlw
ZSksICIpIikpOwotICAgIH0KLSAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCJDYW5ub3QgY29u
c3VtZSB0b2tlbiAoZXhwZWN0ZWQgIiwgYnVpbGRFeHBlY3RlZFN0cmluZygpLCAiKSIpKTsKKyAg
ICBhdXRvIHRva2VuID0gbV9sZXhlci5jb25zdW1lVG9rZW4oKTsKKyAgICBpZiAoVHlwZXM8dHlw
ZXMuLi4+OjppbmNsdWRlcyh0b2tlbi50eXBlKSkKKyAgICAgICAgcmV0dXJuIHsgdG9rZW4gfTsK
KyAgICByZXR1cm4gZmFpbChtYWtlU3RyaW5nKCJVbmV4cGVjdGVkIHRva2VuIChleHBlY3RlZCBv
bmUgb2YgIiwgYnVpbGRFeHBlY3RlZFN0cmluZygpLCAiIGdvdCAiLCBMZXhlcjo6VG9rZW46OnR5
cGVOYW1lKHRva2VuLnR5cGUpLCAiKSIpKTsKIH0KIAogc3RhdGljIGludCBkaWdpdFZhbHVlKFVD
aGFyIGNoYXJhY3RlcikKQEAgLTI3OSwyMCArMjk4LDIwIEBAIHN0YXRpYyBFeHBlY3RlZDxmbG9h
dCwgUGFyc2VyOjpFcnJvcj4gZmxvYXRMaXRlcmFsVG9GbG9hdChTdHJpbmdWaWV3IHRleHQpCiAK
IGF1dG8gUGFyc2VyOjpjb25zdW1lSW50ZWdyYWxMaXRlcmFsKCkgLT4gRXhwZWN0ZWQ8VmFyaWFu
dDxpbnQsIHVuc2lnbmVkPiwgRXJyb3I+CiB7Ci0gICAgYXV0byBpbnRlZ3JhbExpdGVyYWxUb2tl
biA9IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbCB9KTsKKyAgICBhdXRvIGludGVncmFsTGl0ZXJhbFRv
a2VuID0gY29uc3VtZVR5cGVzPExleGVyOjpUb2tlbjo6VHlwZTo6SW50TGl0ZXJhbCwgTGV4ZXI6
OlRva2VuOjpUeXBlOjpVaW50TGl0ZXJhbD4oKTsKICAgICBpZiAoIWludGVncmFsTGl0ZXJhbFRv
a2VuKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oaW50ZWdyYWxMaXRlcmFsVG9r
ZW4uZXJyb3IoKSk7CiAKICAgICBzd2l0Y2ggKGludGVncmFsTGl0ZXJhbFRva2VuLT50eXBlKSB7
CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkludExpdGVyYWw6IHsKLSAgICAgICAgYXV0
byByZXN1bHQgPSBpbnRMaXRlcmFsVG9JbnQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1Zp
ZXcpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGludExpdGVyYWxUb0ludChpbnRlZ3JhbExpdGVy
YWxUb2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAg
ICAgICAgICByZXR1cm4ge3sgKnJlc3VsdCB9fTsKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8
RXJyb3I+KHJlc3VsdC5lcnJvcigpKTsKICAgICB9CiAgICAgZGVmYXVsdDogewogICAgICAgICBB
U1NFUlQoaW50ZWdyYWxMaXRlcmFsVG9rZW4tPnR5cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpV
aW50TGl0ZXJhbCk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gdWludExpdGVyYWxUb1VpbnQoaW50
ZWdyYWxMaXRlcmFsVG9rZW4tPnN0cmluZ1ZpZXcpOworICAgICAgICBhdXRvIHJlc3VsdCA9IHVp
bnRMaXRlcmFsVG9VaW50KGludGVncmFsTGl0ZXJhbFRva2VuLT5zdHJpbmdWaWV3KG1fbGV4ZXIp
KTsKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB7eyAqcmVzdWx0IH19
OwogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ocmVzdWx0LmVycm9yKCkpOwpAQCAt
MzM1LDMzICszNTQsMzIgQEAgc3RhdGljIEV4cGVjdGVkPHVuc2lnbmVkLCBQYXJzZXI6OkVycm9y
PiByZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVnZXIoU3RyaW5nVmkKIAogYXV0byBQYXJzZXI6
OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpDb25zdGFudEV4cHJl
c3Npb24sIEVycm9yPgogewotICAgIGF1dG8gdHlwZSA9IGNvbnN1bWVUeXBlcyh7CisgICAgYXV0
byB0eXBlID0gY29uc3VtZVR5cGVzPAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkludExp
dGVyYWwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVyYWwsCiAgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6RmxvYXRMaXRlcmFsLAogICAgICAgICBMZXhlcjo6VG9rZW46
OlR5cGU6Ok51bGwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VHJ1ZSwKICAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpGYWxzZSwKLSAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpJ
ZGVudGlmaWVyLAotICAgIH0pOworICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZp
ZXI+KCk7CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
dHlwZS5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAodHlwZS0+dHlwZSkgewogICAgIGNhc2UgTGV4
ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBpbnRM
aXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBpbnRM
aXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICghdmFs
dWUpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7
CiAgICAgICAgIHJldHVybiB7eyBBU1Q6OkludGVnZXJMaXRlcmFsKFdURk1vdmUoKnR5cGUpLCAq
dmFsdWUpIH19OwogICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6VWludExpdGVy
YWw6IHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IHVpbnRMaXRlcmFsVG9VaW50KHR5cGUtPnN0cmlu
Z1ZpZXcpOworICAgICAgICBhdXRvIHZhbHVlID0gdWludExpdGVyYWxUb1VpbnQodHlwZS0+c3Ry
aW5nVmlldyhtX2xleGVyKSk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4odmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7eyBB
U1Q6OlVuc2lnbmVkSW50ZWdlckxpdGVyYWwoV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfX07CiAg
ICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpGbG9hdExpdGVyYWw6IHsKLSAgICAg
ICAgYXV0byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxvYXQodHlwZS0+c3RyaW5nVmlldyk7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBmbG9hdExpdGVyYWxUb0Zsb2F0KHR5cGUtPnN0cmluZ1ZpZXco
bV9sZXhlcikpOwogICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhw
ZWN0ZWQ8RXJyb3I+KHZhbHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4ge3sgQVNUOjpGbG9h
dExpdGVyYWwoV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfX07CkBAIC0zNzYsNyArMzk0LDcgQEAg
YXV0byBQYXJzZXI6OnBhcnNlQ29uc3RhbnRFeHByZXNzaW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpD
b25zdGFudEV4cHJlc3Npb24sIEVycm8KICAgICAgICAgQVNTRVJUKHR5cGUtPnR5cGUgPT0gTGV4
ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlmaWVyKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKG9yaWdp
biwgRnVsbFN0b3ApOwogICAgICAgICBDT05TVU1FX1RZUEUobmV4dCwgSWRlbnRpZmllcik7Ci0g
ICAgICAgIHJldHVybiB7IEFTVDo6RW51bWVyYXRpb25NZW1iZXJMaXRlcmFsKFdURk1vdmUoKm9y
aWdpbiksIHR5cGUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgbmV4dC0+c3RyaW5nVmlldy50b1N0
cmluZygpKSB9OworICAgICAgICByZXR1cm4geyBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bChXVEZNb3ZlKCpvcmlnaW4pLCB0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCks
IG5leHQtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSkgfTsKICAgICB9CiAgICAgfQog
fQpAQCAtMzkwLDcgKzQwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVBcmd1bWVudCgpIC0+
IEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50LCBFcnJvcj4KICAgICAgICAgcmV0dXJuIEFTVDo6
VHlwZUFyZ3VtZW50KFdURk1vdmUoKmNvbnN0YW50RXhwcmVzc2lvbikpOwogICAgIH0KICAgICBD
T05TVU1FX1RZUEUocmVzdWx0LCBJZGVudGlmaWVyKTsKLSAgICByZXR1cm4gQVNUOjpUeXBlQXJn
dW1lbnQobWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KExleGVyOjpUb2tlbigqcmVz
dWx0KSwgcmVzdWx0LT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIEFTVDo6VHlwZUFyZ3VtZW50cygp
KSk7CisgICAgcmV0dXJuIEFTVDo6VHlwZUFyZ3VtZW50KG1ha2VVbmlxdWVSZWY8QVNUOjpUeXBl
UmVmZXJlbmNlPihMZXhlcjo6VG9rZW4oKnJlc3VsdCksIHJlc3VsdC0+c3RyaW5nVmlldyhtX2xl
eGVyKS50b1N0cmluZygpLCBBU1Q6OlR5cGVBcmd1bWVudHMoKSkpOwogfQogCiBhdXRvIFBhcnNl
cjo6cGFyc2VUeXBlQXJndW1lbnRzKCkgLT4gRXhwZWN0ZWQ8QVNUOjpUeXBlQXJndW1lbnRzLCBF
cnJvcj4KQEAgLTQyMiw3ICs0NDAsMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNlVHlwZUFyZ3VtZW50
cygpIC0+IEV4cGVjdGVkPEFTVDo6VHlwZUFyZ3VtZW50cywgRXJyb3I+CiAKIGF1dG8gUGFyc2Vy
OjpwYXJzZVR5cGVTdWZmaXhBYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJy
ZXZpYXRlZCwgRXJyb3I+CiB7Ci0gICAgYXV0byB0b2tlbiA9IGNvbnN1bWVUeXBlcyh7IExleGVy
OjpUb2tlbjo6VHlwZTo6U3RhciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVCcmFja2V0UGFp
ciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCB9KTsKKyAgICBhdXRvIHRv
a2VuID0gY29uc3VtZVR5cGVzPAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlN0YXIsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIsCisgICAgICAgIExl
eGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ+KCk7CiAgICAgaWYgKCF0b2tlbikK
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHRva2VuLmVycm9yKCkpOwogICAgIGlm
ICh0b2tlbi0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVCcmFja2V0KSB7
CkBAIC00MzcsNyArNDU4LDEwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhBYmJyZXZp
YXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgRXJyCiAKIGF1dG8gUGFy
c2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZCwgRXJyb3I+CiB7Ci0gICAgYXV0byB0b2tlbiA9IGNvbnN1bWVUeXBl
cyh7IExleGVyOjpUb2tlbjo6VHlwZTo6U3RhciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpTcXVhcmVC
cmFja2V0UGFpciwgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCB9KTsKKyAg
ICBhdXRvIHRva2VuID0gY29uc3VtZVR5cGVzPAorICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6
OlN0YXIsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U3F1YXJlQnJhY2tldFBhaXIsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ+KCk7CiAgICAgaWYg
KCF0b2tlbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHRva2VuLmVycm9yKCkp
OwogICAgIGlmICh0b2tlbi0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTcXVhcmVC
cmFja2V0KSB7CkBAIC00NDcsNyArNDcxLDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZm
aXhOb25BYmJyZXZpYXRlZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAg
ICAgICAgIENPTlNVTUVfVFlQRShyaWdodFNxdWFyZUJyYWNrZXQsIFJpZ2h0U3F1YXJlQnJhY2tl
dCk7CiAgICAgICAgIHJldHVybiB7eyAqdG9rZW4sIFdURjo6bnVsbG9wdCwgKm51bUVsZW1lbnRz
IH19OwogICAgIH0KLSAgICBhdXRvIGFkZHJlc3NTcGFjZVRva2VuID0gY29uc3VtZVR5cGVzKHsg
TGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2Us
IExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsIExleGVyOjpUb2tlbjo6VHlwZTo6VGhy
ZWFkfSk7CisgICAgYXV0byBhZGRyZXNzU3BhY2VUb2tlbiA9IGNvbnN1bWVUeXBlczwKKyAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpDb25zdGFudCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpU
eXBlOjpEZXZpY2UsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkPigpOwogICAgIGlmICghYWRkcmVzc1Nw
YWNlVG9rZW4pCiAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkPEVycm9yPihhZGRyZXNzU3BhY2VU
b2tlbi5lcnJvcigpKTsKICAgICBBU1Q6OkFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2U7CkBAIC00
NzEsNyArNDk5LDExIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZCgpIC0+IEV4cGVjdGVkPFR5cGVTdWZmaXhOb25BYmJyZXZpYXRlCiAKIGF1dG8gUGFyc2VyOjpw
YXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9y
PgogewotICAgIGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSB0cnlUeXBlcyh7IExleGVyOjpUb2tl
bjo6VHlwZTo6Q29uc3RhbnQsIExleGVyOjpUb2tlbjo6VHlwZTo6RGV2aWNlLCBMZXhlcjo6VG9r
ZW46OlR5cGU6OlRocmVhZGdyb3VwLCBMZXhlcjo6VG9rZW46OlR5cGU6OlRocmVhZH0pOworICAg
IGF1dG8gYWRkcmVzc1NwYWNlVG9rZW4gPSB0cnlUeXBlczwKKyAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpDb25zdGFudCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZXZpY2UsCisg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGhyZWFkZ3JvdXAsCisgICAgICAgIExleGVyOjpU
b2tlbjo6VHlwZTo6VGhyZWFkPigpOwogCiAgICAgQ09OU1VNRV9UWVBFKG5hbWUsIElkZW50aWZp
ZXIpOwogICAgIFBBUlNFKHR5cGVBcmd1bWVudHMsIFR5cGVBcmd1bWVudHMpOwpAQCAtNTA1LDcg
KzUzNyw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPgogICAgICAgICAgICAgfQogICAgICAgICB9OwogICAg
ICAgICBQQVJTRShmaXJzdFR5cGVTdWZmaXhBYmJyZXZpYXRlZCwgVHlwZVN1ZmZpeEFiYnJldmlh
dGVkKTsKLSAgICAgICAgVW5pcXVlUmVmPEFTVDo6VW5uYW1lZFR5cGU+IHJlc3VsdCA9IG1ha2VV
bmlxdWVSZWY8QVNUOjpUeXBlUmVmZXJlbmNlPihXVEZNb3ZlKCphZGRyZXNzU3BhY2VUb2tlbiks
IG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwor
ICAgICAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gbWFrZVVuaXF1ZVJl
ZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKmFkZHJlc3NTcGFjZVRva2VuKSwgbmFtZS0+
c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlQXJndW1lbnRzKSk7
CiAgICAgICAgIGF1dG8gbmV4dCA9IGNvbnN0cnVjdFR5cGVGcm9tU3VmZml4QWJicmV2aWF0ZWQo
KmZpcnN0VHlwZVN1ZmZpeEFiYnJldmlhdGVkLCBXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICBy
ZXN1bHQgPSBXVEZNb3ZlKG5leHQpOwogICAgICAgICB3aGlsZSAodHJ1ZSkgewpAQCAtNTM0LDcg
KzU2Niw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVR5cGUoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4sIEVycm9yPgogICAgICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1
ZVJlZjxBU1Q6OkFycmF5VHlwZT4oTGV4ZXI6OlRva2VuKHR5cGVTdWZmaXhOb25BYmJyZXZpYXRl
ZC50b2tlbiksIFdURk1vdmUocHJldmlvdXMpLCAqdHlwZVN1ZmZpeE5vbkFiYnJldmlhdGVkLm51
bUVsZW1lbnRzKSB9OwogICAgICAgICB9CiAgICAgfTsKLSAgICBVbmlxdWVSZWY8QVNUOjpVbm5h
bWVkVHlwZT4gcmVzdWx0ID0gbWFrZVVuaXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1v
dmUoKm5hbWUpLCBuYW1lLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1
bWVudHMpKTsKKyAgICBVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4gcmVzdWx0ID0gbWFrZVVu
aXF1ZVJlZjxBU1Q6OlR5cGVSZWZlcmVuY2U+KFdURk1vdmUoKm5hbWUpLCBuYW1lLT5zdHJpbmdW
aWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVudHMpKTsKICAgICB3
aGlsZSAodHJ1ZSkgewogICAgICAgICBQRUVLKG5leHRUb2tlbik7CiAgICAgICAgIGlmIChuZXh0
VG9rZW4tPnR5cGUgIT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpTdGFyCkBAIC01NTcsMTIgKzU4OSwx
MiBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUeXBlRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6
VHlwZURlZmluaXRpb24sIEVycm9yPgogICAgIENPTlNVTUVfVFlQRShlcXVhbHMsIEVxdWFsc1Np
Z24pOwogICAgIFBBUlNFKHR5cGUsIFR5cGUpOwogICAgIENPTlNVTUVfVFlQRShzZW1pY29sb24s
IFNlbWljb2xvbik7Ci0gICAgcmV0dXJuIEFTVDo6VHlwZURlZmluaXRpb24oV1RGTW92ZSgqb3Jp
Z2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlKSk7CisgICAg
cmV0dXJuIEFTVDo6VHlwZURlZmluaXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5n
VmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCp0eXBlKSk7CiB9CiAKIGF1dG8gUGFy
c2VyOjpwYXJzZUJ1aWx0SW5TZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6QnVpbHRJblNlbWFu
dGljLCBFcnJvcj4KIHsKLSAgICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlcyh7CisgICAgYXV0
byBvcmlnaW4gPSBjb25zdW1lVHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U1ZJ
bnN0YW5jZUlELAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWVmVydGV4SUQsCiAgICAg
ICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UFNpemUsCkBAIC01NzYsNyArNjA4LDcgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlQnVpbHRJblNlbWFudGljKCkgLT4gRXhwZWN0ZWQ8QVNUOjpCdWlsdEluU2Vt
YW50aWMsIEVycm9yPgogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWRGlzcGF0Y2hUaHJl
YWRJRCwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpTVkdyb3VwSUQsCiAgICAgICAgIExl
eGVyOjpUb2tlbjo6VHlwZTo6U1ZHcm91cEluZGV4LAotICAgICAgICBMZXhlcjo6VG9rZW46OlR5
cGU6OlNWR3JvdXBUaHJlYWRJRH0pOworICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlNWR3Jv
dXBUaHJlYWRJRD4oKTsKICAgICBpZiAoIW9yaWdpbikKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0
ZWQ8RXJyb3I+KG9yaWdpbi5lcnJvcigpKTsKIApAQCAtNjIzLDE0ICs2NTUsMTUgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlUmVzb3VyY2VTZW1hbnRpYygpIC0+IEV4cGVjdGVkPEFTVDo6UmVzb3VyY2VT
ZW1hbnRpYywgRXJyb3I+CiAgICAgQ09OU1VNRV9UWVBFKGxlZnRQYXJlbnRoZXNpcywgTGVmdFBh
cmVudGhlc2lzKTsKIAogICAgIENPTlNVTUVfVFlQRShpbmZvLCBJZGVudGlmaWVyKTsKLSAgICBp
ZiAoaW5mby0+c3RyaW5nVmlldy5sZW5ndGgoKSA8IDIgfHwgKGluZm8tPnN0cmluZ1ZpZXdbMF0g
IT0gJ3UnCi0gICAgICAgICYmIGluZm8tPnN0cmluZ1ZpZXdbMF0gIT0gJ3QnCi0gICAgICAgICYm
IGluZm8tPnN0cmluZ1ZpZXdbMF0gIT0gJ2InCi0gICAgICAgICYmIGluZm8tPnN0cmluZ1ZpZXdb
MF0gIT0gJ3MnKSkKLSAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VT
dHJpbmcoaW5mby0+c3RyaW5nVmlldy5zdWJzdHJpbmcoMCwgMSksICIgaXMgbm90IGEga25vd24g
cmVzb3VyY2UgdHlwZSAoJ3UnLCAndCcsICdiJywgb3IgJ3MnKSIpKSk7CisgICAgYXV0byBpbmZv
U3RyaW5nVmlldyA9IGluZm8tPnN0cmluZ1ZpZXcobV9sZXhlcik7CisgICAgaWYgKGluZm9TdHJp
bmdWaWV3Lmxlbmd0aCgpIDwgMiB8fCAoaW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ3UnCisgICAgICAg
ICYmIGluZm9TdHJpbmdWaWV3WzBdICE9ICd0JworICAgICAgICAmJiBpbmZvU3RyaW5nVmlld1sw
XSAhPSAnYicKKyAgICAgICAgJiYgaW5mb1N0cmluZ1ZpZXdbMF0gIT0gJ3MnKSkKKyAgICAgICAg
cmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VTdHJpbmcoaW5mb1N0cmluZ1ZpZXcu
c3Vic3RyaW5nKDAsIDEpLCAiIGlzIG5vdCBhIGtub3duIHJlc291cmNlIHR5cGUgKCd1JywgJ3Qn
LCAnYicsIG9yICdzJykiKSkpOwogCiAgICAgQVNUOjpSZXNvdXJjZVNlbWFudGljOjpNb2RlIG1v
ZGU7Ci0gICAgc3dpdGNoIChpbmZvLT5zdHJpbmdWaWV3WzBdKSB7CisgICAgc3dpdGNoIChpbmZv
U3RyaW5nVmlld1swXSkgewogICAgIGNhc2UgJ3UnOgogICAgICAgICBtb2RlID0gQVNUOjpSZXNv
dXJjZVNlbWFudGljOjpNb2RlOjpVbm9yZGVyZWRBY2Nlc3NWaWV3OwogICAgICAgICBicmVhazsK
QEAgLTY0NSwxOSArNjc4LDIwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVJlc291cmNlU2VtYW50aWMo
KSAtPiBFeHBlY3RlZDxBU1Q6OlJlc291cmNlU2VtYW50aWMsIEVycm9yPgogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBhdXRvIGluZGV4ID0gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRl
Z2VyKGluZm8tPnN0cmluZ1ZpZXcuc3Vic3RyaW5nKDEpKTsKKyAgICBhdXRvIGluZGV4ID0gcmVj
b2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKGluZm9TdHJpbmdWaWV3LnN1YnN0cmluZygxKSk7
CiAgICAgaWYgKCFpbmRleCkKICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KGluZGV4
LmVycm9yKCkpOwogCiAgICAgdW5zaWduZWQgc3BhY2UgPSAwOwogICAgIGlmICh0cnlUeXBlKExl
eGVyOjpUb2tlbjo6VHlwZTo6Q29tbWEpKSB7CiAgICAgICAgIENPTlNVTUVfVFlQRShzcGFjZVRv
a2VuLCBJZGVudGlmaWVyKTsKKyAgICAgICAgYXV0byBzcGFjZVRva2VuU3RyaW5nVmlldyA9IHNw
YWNlVG9rZW4tPnN0cmluZ1ZpZXcobV9sZXhlcik7CiAgICAgICAgIGF1dG8gcHJlZml4ID0gInNw
YWNlIl9zdHI7Ci0gICAgICAgIGlmICghc3BhY2VUb2tlbi0+c3RyaW5nVmlldy5zdGFydHNXaXRo
KFN0cmluZ1ZpZXcocHJlZml4KSkpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4oRXJyb3IobWFrZVN0cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGlj
ICIsIHNwYWNlVG9rZW4tPnN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2YgdGhlIGZvcm0gJ3NwYWNl
MCciKSkpOwotICAgICAgICBpZiAoc3BhY2VUb2tlbi0+c3RyaW5nVmlldy5sZW5ndGgoKSA8PSBw
cmVmaXgubGVuZ3RoKCkpCi0gICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJy
b3IobWFrZVN0cmluZygiU2Vjb25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICIsIHNw
YWNlVG9rZW4tPnN0cmluZ1ZpZXcsICIgbmVlZHMgYmUgb2YgdGhlIGZvcm0gJ3NwYWNlMCciKSkp
OwotICAgICAgICBhdXRvIHNwYWNlVmFsdWUgPSByZWNvZ25pemVTaW1wbGVVbnNpZ25lZEludGVn
ZXIoc3BhY2VUb2tlbi0+c3RyaW5nVmlldy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCgpKSk7Cisg
ICAgICAgIGlmICghc3BhY2VUb2tlblN0cmluZ1ZpZXcuc3RhcnRzV2l0aChTdHJpbmdWaWV3KHBy
ZWZpeCkpKQorICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KEVycm9yKG1ha2VT
dHJpbmcoIlNlY29uZCBhcmd1bWVudCB0byByZXNvdXJjZSBzZW1hbnRpYyAiLCBzcGFjZVRva2Vu
U3RyaW5nVmlldywgIiBuZWVkcyBiZSBvZiB0aGUgZm9ybSAnc3BhY2UwJyIpKSk7CisgICAgICAg
IGlmIChzcGFjZVRva2VuU3RyaW5nVmlldy5sZW5ndGgoKSA8PSBwcmVmaXgubGVuZ3RoKCkpCisg
ICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oRXJyb3IobWFrZVN0cmluZygiU2Vj
b25kIGFyZ3VtZW50IHRvIHJlc291cmNlIHNlbWFudGljICIsIHNwYWNlVG9rZW5TdHJpbmdWaWV3
LCAiIG5lZWRzIGJlIG9mIHRoZSBmb3JtICdzcGFjZTAnIikpKTsKKyAgICAgICAgYXV0byBzcGFj
ZVZhbHVlID0gcmVjb2duaXplU2ltcGxlVW5zaWduZWRJbnRlZ2VyKHNwYWNlVG9rZW5TdHJpbmdW
aWV3LnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKCkpKTsKICAgICAgICAgaWYgKCFzcGFjZVZhbHVl
KQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHNwYWNlVmFsdWUuZXJyb3Io
KSk7CiAgICAgICAgIHNwYWNlID0gKnNwYWNlVmFsdWU7CkBAIC03MTcsMTYgKzc1MSwxNyBAQCBB
U1Q6OlF1YWxpZmllcnMgUGFyc2VyOjpwYXJzZVF1YWxpZmllcnMoKQogewogICAgIEFTVDo6UXVh
bGlmaWVycyBxdWFsaWZpZXJzOwogICAgIHdoaWxlIChhdXRvIG5leHQgPSB0cnlUeXBlKExleGVy
OjpUb2tlbjo6VHlwZTo6UXVhbGlmaWVyKSkgewotICAgICAgICBpZiAoIm5vaW50ZXJwb2xhdGlv
biIgPT0gbmV4dC0+c3RyaW5nVmlldykKKyAgICAgICAgYXV0byBuZXh0U3RyaW5nVmlldyA9IG5l
eHQtPnN0cmluZ1ZpZXcobV9sZXhlcik7CisgICAgICAgIGlmICgibm9pbnRlcnBvbGF0aW9uIiA9
PSBuZXh0U3RyaW5nVmlldykKICAgICAgICAgICAgIHF1YWxpZmllcnMuYXBwZW5kKEFTVDo6UXVh
bGlmaWVyOjpOb2ludGVycG9sYXRpb24pOwotICAgICAgICBlbHNlIGlmICgibm9wZXJzcGVjdGl2
ZSIgPT0gbmV4dC0+c3RyaW5nVmlldykKKyAgICAgICAgZWxzZSBpZiAoIm5vcGVyc3BlY3RpdmUi
ID09IG5leHRTdHJpbmdWaWV3KQogICAgICAgICAgICAgcXVhbGlmaWVycy5hcHBlbmQoQVNUOjpR
dWFsaWZpZXI6Ok5vcGVyc3BlY3RpdmUpOwotICAgICAgICBlbHNlIGlmICgidW5pZm9ybSIgPT0g
bmV4dC0+c3RyaW5nVmlldykKKyAgICAgICAgZWxzZSBpZiAoInVuaWZvcm0iID09IG5leHRTdHJp
bmdWaWV3KQogICAgICAgICAgICAgcXVhbGlmaWVycy5hcHBlbmQoQVNUOjpRdWFsaWZpZXI6OlVu
aWZvcm0pOwotICAgICAgICBlbHNlIGlmICgiY2VudHJvaWQiID09IG5leHQtPnN0cmluZ1ZpZXcp
CisgICAgICAgIGVsc2UgaWYgKCJjZW50cm9pZCIgPT0gbmV4dFN0cmluZ1ZpZXcpCiAgICAgICAg
ICAgICBxdWFsaWZpZXJzLmFwcGVuZChBU1Q6OlF1YWxpZmllcjo6Q2VudHJvaWQpOwogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCgic2FtcGxlIiA9PSBuZXh0LT5zdHJpbmdWaWV3
KTsKKyAgICAgICAgICAgIEFTU0VSVCgic2FtcGxlIiA9PSBuZXh0U3RyaW5nVmlldyk7CiAgICAg
ICAgICAgICBxdWFsaWZpZXJzLmFwcGVuZChBU1Q6OlF1YWxpZmllcjo6U2FtcGxlKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTc0NCw3ICs3NzksNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdHJ1Y3R1
cmVFbGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50LCBFcnJvcj4KICAg
ICBQQVJTRShzZW1hbnRpYywgU2VtYW50aWMpOwogICAgIENPTlNVTUVfVFlQRShzZW1pY29sb24s
IFNlbWljb2xvbik7CiAKLSAgICByZXR1cm4gQVNUOjpTdHJ1Y3R1cmVFbGVtZW50KFdURk1vdmUo
Km9yaWdpbiksIFdURk1vdmUocXVhbGlmaWVycyksIFdURk1vdmUoKnR5cGUpLCBuYW1lLT5zdHJp
bmdWaWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnNlbWFudGljKSk7CisgICAgcmV0dXJuIEFTVDo6
U3RydWN0dXJlRWxlbWVudChXVEZNb3ZlKCpvcmlnaW4pLCBXVEZNb3ZlKHF1YWxpZmllcnMpLCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpLCBXVEZN
b3ZlKCpzZW1hbnRpYykpOwogfQogCiBhdXRvIFBhcnNlcjo6cGFyc2VTdHJ1Y3R1cmVEZWZpbml0
aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uLCBFcnJvcj4KQEAgLTc1
OSw3ICs3OTQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uLCBFcgogICAgICAgICBzdHJ1Y3R1cmVF
bGVtZW50cy5hcHBlbmQoV1RGTW92ZSgqc3RydWN0dXJlRWxlbWVudCkpOwogICAgIH0KIAotICAg
IHJldHVybiBBU1Q6OlN0cnVjdHVyZURlZmluaXRpb24oV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+
c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKHN0cnVjdHVyZUVsZW1lbnRzKSk7CisgICAg
cmV0dXJuIEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBuYW1lLT5z
dHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoc3RydWN0dXJlRWxlbWVudHMp
KTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKCkgLT4gRXhw
ZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24sIEVycm9yPgpAQCAtNzgxLDcgKzgxNiw3
IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4cGVjdGVk
PEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiAKICAgICBQQVJTRShmaXJzdEVudW1lcmF0aW9u
TWVtYmVyLCBFbnVtZXJhdGlvbk1lbWJlcik7CiAKLSAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5p
dGlvbiByZXN1bHQoV1RGTW92ZSgqb3JpZ2luKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygp
LCBXVEZNb3ZlKCp0eXBlKSk7CisgICAgQVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24gcmVzdWx0
KFdURk1vdmUoKm9yaWdpbiksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwg
V1RGTW92ZSgqdHlwZSkpOwogICAgIGF1dG8gc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgq
Zmlyc3RFbnVtZXJhdGlvbk1lbWJlcikpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0
dXJuIGZhaWwoIkNhbm5vdCBhZGQgZW51bWVyYXRpb24gbWVtYmVyIl9zdHIpOwpAQCAtODAxLDcg
KzgzNiw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpIC0+IEV4
cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uCiBhdXRvIFBhcnNlcjo6cGFyc2VFbnVt
ZXJhdGlvbk1lbWJlcigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9y
PgogewogICAgIENPTlNVTUVfVFlQRShpZGVudGlmaWVyLCBJZGVudGlmaWVyKTsKLSAgICBhdXRv
IG5hbWUgPSBpZGVudGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCk7CisgICAgYXV0byBuYW1l
ID0gaWRlbnRpZmllci0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpOwogCiAgICAgaWYg
KHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduKSkgewogICAgICAgICBQQVJT
RShjb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50RXhwcmVzc2lvbik7CkBAIC04MTgsNyArODUz
LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24KICAgICBQQVJTRSh0eXBlQXJndW1lbnRzLCBU
eXBlQXJndW1lbnRzKTsKICAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29sb24pOwog
Ci0gICAgcmV0dXJuIEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZUFyZ3VtZW50cykpOwor
ICAgIHJldHVybiBBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbihXVEZNb3ZlKCpvcmlnaW4pLCBu
YW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGVBcmd1bWVu
dHMpKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUsIEVycm9yPgpA
QCAtODczLDcgKzkwOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBhcmFtZXRlcigpIC0+IEV4cGVj
dGVkPEFTVDo6VmFyaWFibGVEZWNsYXJhdGlvbiwgRXJyb3I+CiAKICAgICBTdHJpbmcgbmFtZTsK
ICAgICBpZiAoYXV0byB0b2tlbiA9IHRyeVR5cGUoTGV4ZXI6OlRva2VuOjpUeXBlOjpJZGVudGlm
aWVyKSkKLSAgICAgICAgbmFtZSA9IHRva2VuLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCk7CisgICAg
ICAgIG5hbWUgPSB0b2tlbi0+c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpOwogCiAgICAg
UEFSU0Uoc2VtYW50aWMsIFNlbWFudGljKTsKIApAQCAtOTIwLDEyICs5NTUsMTIgQEAgYXV0byBQ
YXJzZXI6OnBhcnNlQ29tcHV0ZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6
OkZ1bmN0aW9uRGVjbGFyYXQKICAgICBQQVJTRShwYXJhbWV0ZXJzLCBQYXJhbWV0ZXJzKTsKICAg
ICBQQVJTRShzZW1hbnRpYywgU2VtYW50aWMpOwogICAgIGJvb2wgaXNPcGVyYXRvciA9IGZhbHNl
OwotICAgIHJldHVybiBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZSgqYXR0cmlidXRlQmxvY2spLCBBU1Q6OkVudHJ5UG9pbnRUeXBlOjpDb21wdXRlLCBX
VEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJh
bWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9yKTsKKyAgICByZXR1cm4gQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmF0dHJpYnV0
ZUJsb2NrKSwgQVNUOjpFbnRyeVBvaW50VHlwZTo6Q29tcHV0ZSwgV1RGTW92ZSgqdHlwZSksIG5h
bWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyks
IFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJz
ZVZlcnRleE9yRnJhZ21lbnRGdW5jdGlvbkRlY2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpG
dW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KIHsKLSAgICBhdXRvIGVudHJ5UG9pbnQgPSBjb25z
dW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6OlZlcnRleCwgTGV4ZXI6OlRva2VuOjpUeXBl
OjpGcmFnbWVudCB9KTsKKyAgICBhdXRvIGVudHJ5UG9pbnQgPSBjb25zdW1lVHlwZXM8TGV4ZXI6
OlRva2VuOjpUeXBlOjpWZXJ0ZXgsIExleGVyOjpUb2tlbjo6VHlwZTo6RnJhZ21lbnQ+KCk7CiAg
ICAgaWYgKCFlbnRyeVBvaW50KQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oZW50
cnlQb2ludC5lcnJvcigpKTsKICAgICBhdXRvIGVudHJ5UG9pbnRUeXBlID0gKGVudHJ5UG9pbnQt
PnR5cGUgPT0gTGV4ZXI6OlRva2VuOjpUeXBlOjpWZXJ0ZXgpID8gQVNUOjpFbnRyeVBvaW50VHlw
ZTo6VmVydGV4IDogQVNUOjpFbnRyeVBvaW50VHlwZTo6RnJhZ21lbnQ7CkBAIC05MzYsNyArOTcx
LDcgQEAgYXV0byBQYXJzZXI6OnBhcnNlVmVydGV4T3JGcmFnbWVudEZ1bmN0aW9uRGVjbGFyYXRp
b24oKSAtPiBFeHBlY3RlZDxBU1Q6OkZ1bmN0aW8KICAgICBQQVJTRShzZW1hbnRpYywgU2VtYW50
aWMpOwogCiAgICAgYm9vbCBpc09wZXJhdG9yID0gZmFsc2U7Ci0gICAgcmV0dXJuIEFTVDo6RnVu
Y3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCplbnRyeVBvaW50KSwgeyB9LCBlbnRyeVBvaW50VHlw
ZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSwgV1RGTW92ZSgq
cGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVyYXRvcik7CisgICAgcmV0dXJu
IEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbihXVEZNb3ZlKCplbnRyeVBvaW50KSwgeyB9LCBlbnRy
eVBvaW50VHlwZSwgV1RGTW92ZSgqdHlwZSksIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9T
dHJpbmcoKSwgV1RGTW92ZSgqcGFyYW1ldGVycyksIFdURk1vdmUoKnNlbWFudGljKSwgaXNPcGVy
YXRvcik7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVJlZ3VsYXJGdW5jdGlvbkRlY2xhcmF0aW9u
KCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4KQEAgLTk0NSw3
ICs5ODAsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNsYXJhdGlvbigp
IC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdAogCiAgICAgUEFSU0UodHlwZSwgVHlw
ZSk7CiAKLSAgICBhdXRvIG5hbWUgPSBjb25zdW1lVHlwZXMoeyBMZXhlcjo6VG9rZW46OlR5cGU6
OklkZW50aWZpZXIsIExleGVyOjpUb2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1lIH0pOworICAgIGF1
dG8gbmFtZSA9IGNvbnN1bWVUeXBlczxMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIsIExl
eGVyOjpUb2tlbjo6VHlwZTo6T3BlcmF0b3JOYW1lPigpOwogICAgIGlmICghbmFtZSkKICAgICAg
ICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KG5hbWUuZXJyb3IoKSk7CiAgICAgYXV0byBpc09w
ZXJhdG9yID0gbmFtZS0+dHlwZSA9PSBMZXhlcjo6VG9rZW46OlR5cGU6Ok9wZXJhdG9yTmFtZTsK
QEAgLTk1Myw3ICs5ODgsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VSZWd1bGFyRnVuY3Rpb25EZWNs
YXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6RnVuY3Rpb25EZWNsYXJhdAogICAgIFBBUlNFKHBh
cmFtZXRlcnMsIFBhcmFtZXRlcnMpOwogICAgIFBBUlNFKHNlbWFudGljLCBTZW1hbnRpYyk7CiAK
LSAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiksIHsg
fSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldy50b1N0cmlu
ZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBpc09wZXJhdG9y
KTsKKyAgICByZXR1cm4gQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdpbiks
IHsgfSwgV1RGOjpudWxsb3B0LCBXVEZNb3ZlKCp0eXBlKSwgbmFtZS0+c3RyaW5nVmlldyhtX2xl
eGVyKS50b1N0cmluZygpLCBXVEZNb3ZlKCpwYXJhbWV0ZXJzKSwgV1RGTW92ZSgqc2VtYW50aWMp
LCBpc09wZXJhdG9yKTsKIH0KIAogYXV0byBQYXJzZXI6OnBhcnNlT3BlcmF0b3JGdW5jdGlvbkRl
Y2xhcmF0aW9uKCkgLT4gRXhwZWN0ZWQ8QVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uLCBFcnJvcj4K
QEAgLTEwMDMsNyArMTAzOCw3IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUJsb2NrKCkgLT4gRXhwZWN0
ZWQ8QVNUOjpCbG9jaywgRXJyb3I+CiBhdXRvIFBhcnNlcjo6cGFyc2VCbG9ja0JvZHkoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luKSAtPiBFeHBlY3RlZDxBU1Q6OkJsb2NrLCBFcnJvcj4KIHsKICAgICBB
U1Q6OlN0YXRlbWVudHMgc3RhdGVtZW50czsKLSAgICB3aGlsZSAoIXBlZWtUeXBlcyh7TGV4ZXI6
OlRva2VuOjpUeXBlOjpSaWdodEN1cmx5QnJhY2tldCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpDYXNl
LCBMZXhlcjo6VG9rZW46OlR5cGU6OkRlZmF1bHR9KSkgeworICAgIHdoaWxlICghcGVla1R5cGVz
PExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRDdXJseUJyYWNrZXQsIExleGVyOjpUb2tlbjo6VHlw
ZTo6Q2FzZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZWZhdWx0PigpKSB7CiAgICAgICAgIFBBUlNF
KHN0YXRlbWVudCwgU3RhdGVtZW50KTsKICAgICAgICAgc3RhdGVtZW50cy5hcHBlbmQoV1RGTW92
ZSgqc3RhdGVtZW50KSk7CiAgICAgfQpAQCAtMTA1NCw3ICsxMDg5LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlU3dpdGNoU3RhdGVtZW50KCkgLT4gRXhwZWN0ZWQ8QVNUOjpTd2l0Y2hTdGF0ZW1lbnQs
IEVycm9yPgogCiBhdXRvIFBhcnNlcjo6cGFyc2VTd2l0Y2hDYXNlKCkgLT4gRXhwZWN0ZWQ8QVNU
OjpTd2l0Y2hDYXNlLCBFcnJvcj4KIHsKLSAgICBhdXRvIG9yaWdpbiA9IGNvbnN1bWVUeXBlcyh7
IExleGVyOjpUb2tlbjo6VHlwZTo6Q2FzZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZWZhdWx0IH0p
OworICAgIGF1dG8gb3JpZ2luID0gY29uc3VtZVR5cGVzPExleGVyOjpUb2tlbjo6VHlwZTo6Q2Fz
ZSwgTGV4ZXI6OlRva2VuOjpUeXBlOjpEZWZhdWx0PigpOwogICAgIGlmICghb3JpZ2luKQogICAg
ICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4ob3JpZ2luLmVycm9yKCkpOwogCkBAIC0xMTYx
LDcgKzExOTYsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYmIHR5cGUpIC0+IEV4cAogICAgICAgICBpbml0aWFsaXpl
ciA9IGluaXRpYWxpemluZ0V4cHJlc3Npb24udmFsdWUoKS5tb3ZlVG9VbmlxdWVQdHIoKTsKICAg
ICB9CiAKLSAgICByZXR1cm4gQVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uKFdURk1vdmUoKm9yaWdp
biksIFdURk1vdmUocXVhbGlmaWVycyksIHsgV1RGTW92ZSh0eXBlKSB9LCBuYW1lLT5zdHJpbmdW
aWV3LnRvU3RyaW5nKCksIFdURk1vdmUoKnNlbWFudGljKSwgV1RGTW92ZShpbml0aWFsaXplcikp
OworICAgIHJldHVybiBBU1Q6OlZhcmlhYmxlRGVjbGFyYXRpb24oV1RGTW92ZSgqb3JpZ2luKSwg
V1RGTW92ZShxdWFsaWZpZXJzKSwgeyBXVEZNb3ZlKHR5cGUpIH0sIG5hbWUtPnN0cmluZ1ZpZXco
bV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqc2VtYW50aWMpLCBXVEZNb3ZlKGluaXRpYWxp
emVyKSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25zKCkgLT4g
RXhwZWN0ZWQ8QVNUOjpWYXJpYWJsZURlY2xhcmF0aW9uc1N0YXRlbWVudCwgRXJyb3I+CkBAIC0x
MjE4LDM2ICsxMjUzLDM2IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN0YXRlbWVudCgpIC0+IEV4cGVj
dGVkPFVuaXF1ZVJlZjxBU1Q6OlN0YXRlbWVudD4sIEVycm9yPgogICAgIGNhc2UgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpCcmVhazogewogICAgICAgICBhdXRvIGJyZWFrVG9rZW4gPSBtX2xleGVyLmNv
bnN1bWVUb2tlbigpOwogICAgICAgICBDT05TVU1FX1RZUEUoc2VtaWNvbG9uLCBTZW1pY29sb24p
OwotICAgICAgICBhdXRvIGJyZWFrT2JqZWN0ID0gQVNUOjpCcmVhayhXVEZNb3ZlKCpicmVha1Rv
a2VuKSk7CisgICAgICAgIGF1dG8gYnJlYWtPYmplY3QgPSBBU1Q6OkJyZWFrKFdURk1vdmUoYnJl
YWtUb2tlbikpOwogICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6QnJlYWs+KFdU
Rk1vdmUoYnJlYWtPYmplY3QpKSB9OwogICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlw
ZTo6Q29udGludWU6IHsKICAgICAgICAgYXV0byBjb250aW51ZVRva2VuID0gbV9sZXhlci5jb25z
dW1lVG9rZW4oKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKHNlbWljb2xvbiwgU2VtaWNvbG9uKTsK
LSAgICAgICAgYXV0byBjb250aW51ZU9iamVjdCA9IEFTVDo6Q29udGludWUoV1RGTW92ZSgqY29u
dGludWVUb2tlbikpOworICAgICAgICBhdXRvIGNvbnRpbnVlT2JqZWN0ID0gQVNUOjpDb250aW51
ZShXVEZNb3ZlKGNvbnRpbnVlVG9rZW4pKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJl
ZjxBU1Q6OkNvbnRpbnVlPihXVEZNb3ZlKGNvbnRpbnVlT2JqZWN0KSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkZhbGx0aHJvdWdoOiB7CiAgICAgICAgIGF1dG8gZmFs
bHRocm91Z2hUb2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRva2VuKCk7CiAgICAgICAgIENPTlNVTUVf
VFlQRShzZW1pY29sb24sIFNlbWljb2xvbik7Ci0gICAgICAgIGF1dG8gZmFsbHRocm91Z2hPYmpl
Y3QgPSBBU1Q6OkZhbGx0aHJvdWdoKFdURk1vdmUoKmZhbGx0aHJvdWdoVG9rZW4pKTsKKyAgICAg
ICAgYXV0byBmYWxsdGhyb3VnaE9iamVjdCA9IEFTVDo6RmFsbHRocm91Z2goV1RGTW92ZShmYWxs
dGhyb3VnaFRva2VuKSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpGYWxs
dGhyb3VnaD4oV1RGTW92ZShmYWxsdGhyb3VnaE9iamVjdCkpIH07CiAgICAgfQogICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpUcmFwOiB7CiAgICAgICAgIGF1dG8gdHJhcFRva2VuID0gbV9s
ZXhlci5jb25zdW1lVG9rZW4oKTsKICAgICAgICAgQ09OU1VNRV9UWVBFKHNlbWljb2xvbiwgU2Vt
aWNvbG9uKTsKLSAgICAgICAgYXV0byB0cmFwT2JqZWN0ID0gQVNUOjpUcmFwKFdURk1vdmUoKnRy
YXBUb2tlbikpOworICAgICAgICBhdXRvIHRyYXBPYmplY3QgPSBBU1Q6OlRyYXAoV1RGTW92ZSh0
cmFwVG9rZW4pKTsKICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OlRyYXA+KFdU
Rk1vdmUodHJhcE9iamVjdCkpIH07CiAgICAgfQogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBl
OjpSZXR1cm46IHsKICAgICAgICAgYXV0byByZXR1cm5Ub2tlbiA9IG1fbGV4ZXIuY29uc3VtZVRv
a2VuKCk7CiAgICAgICAgIGlmIChhdXRvIHNlbWljb2xvbiA9IHRyeVR5cGUoTGV4ZXI6OlRva2Vu
OjpUeXBlOjpTZW1pY29sb24pKSB7Ci0gICAgICAgICAgICBhdXRvIHJldHVybk9iamVjdCA9IEFT
VDo6UmV0dXJuKFdURk1vdmUoKnJldHVyblRva2VuKSwgV1RGOjpudWxsb3B0KTsKKyAgICAgICAg
ICAgIGF1dG8gcmV0dXJuT2JqZWN0ID0gQVNUOjpSZXR1cm4oV1RGTW92ZShyZXR1cm5Ub2tlbiks
IFdURjo6bnVsbG9wdCk7CiAgICAgICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6
UmV0dXJuPihXVEZNb3ZlKHJldHVybk9iamVjdCkpIH07CiAgICAgICAgIH0KICAgICAgICAgUEFS
U0UoZXhwcmVzc2lvbiwgRXhwcmVzc2lvbik7CiAgICAgICAgIENPTlNVTUVfVFlQRShmaW5hbFNl
bWljb2xvbiwgU2VtaWNvbG9uKTsKLSAgICAgICAgYXV0byByZXR1cm5PYmplY3QgPSBBU1Q6OlJl
dHVybihXVEZNb3ZlKCpyZXR1cm5Ub2tlbiksIHsgV1RGTW92ZSgqZXhwcmVzc2lvbikgfSk7Cisg
ICAgICAgIGF1dG8gcmV0dXJuT2JqZWN0ID0gQVNUOjpSZXR1cm4oV1RGTW92ZShyZXR1cm5Ub2tl
biksIHsgV1RGTW92ZSgqZXhwcmVzc2lvbikgfSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlx
dWVSZWY8QVNUOjpSZXR1cm4+KFdURk1vdmUocmV0dXJuT2JqZWN0KSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkNvbnN0YW50OgpAQCAtMTMyMSw3ICsxMzU2LDcgQEAg
YXV0byBQYXJzZXI6OnBhcnNlRWZmZWN0ZnVsQXNzaWdubWVudCgpIC0+IEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LAogICAgIGJvb2wgaXNFZmZlY3RmdWwgPSBmYWxzZTsKICAg
ICBQQVJTRShleHByZXNzaW9uLCBQb3NzaWJsZVByZWZpeCwgJmlzRWZmZWN0ZnVsKTsKIAotICAg
IGlmICghaXNFZmZlY3RmdWwgfHwgcGVla1R5cGVzKHsKKyAgICBpZiAoIWlzRWZmZWN0ZnVsIHx8
IHBlZWtUeXBlczwKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduLAogICAg
ICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlBsdXNFcXVhbHMsCiAgICAgICAgIExleGVyOjpUb2tl
bjo6VHlwZTo6TWludXNFcXVhbHMsCkBAIC0xMzMzLDcgKzEzNjgsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VFZmZlY3RmdWxBc3NpZ25tZW50KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6T3JFcXVhbHMsCiAgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRTaGlmdEVxdWFscywKICAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpMZWZ0U2hpZnRFcXVhbHMKLSAgICB9KSkgeworICAgID4oKSkgewogICAgICAg
ICByZXR1cm4gY29tcGxldGVBc3NpZ25tZW50KFdURk1vdmUoKm9yaWdpbiksIFdURk1vdmUoKmV4
cHJlc3Npb24pKTsKICAgICB9CiAKQEAgLTEzNDIsNyArMTM3NywxMCBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VFZmZlY3RmdWxBc3NpZ25tZW50KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhw
cmVzc2lvbj4sCiAKIGF1dG8gUGFyc2VyOjpwYXJzZUxpbWl0ZWRTdWZmaXhPcGVyYXRvcihVbmlx
dWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBTdWZmaXhFeHByZXNzaW9uCiB7
Ci0gICAgYXV0byB0eXBlID0gY29uc3VtZVR5cGVzKHsgTGV4ZXI6OlRva2VuOjpUeXBlOjpGdWxs
U3RvcCwgTGV4ZXI6OlRva2VuOjpUeXBlOjpBcnJvdywgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0
U3F1YXJlQnJhY2tldCB9KTsKKyAgICBhdXRvIHR5cGUgPSBjb25zdW1lVHlwZXM8CisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6RnVsbFN0b3AsCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlw
ZTo6QXJyb3csCisgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ+
KCk7CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZN
b3ZlKHByZXZpb3VzKSwgZmFsc2UpOwogCkBAIC0xMzUxLDEzICsxMzg5LDEzIEBAIGF1dG8gUGFy
c2VyOjpwYXJzZUxpbWl0ZWRTdWZmaXhPcGVyYXRvcihVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
PiYmIHByZXZpb3VzKSAtCiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNvbnN1bWVUeXBlKExl
eGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikK
ICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBm
YWxzZSk7Ci0gICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNU
OjpEb3RFeHByZXNzaW9uPihXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShwcmV2aW91cyksIGlkZW50
aWZpZXItPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSksIHRydWUpOworICAgICAgICByZXR1cm4gU3Vm
Zml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oV1RGTW92ZSgq
dHlwZSksIFdURk1vdmUocHJldmlvdXMpLCBpZGVudGlmaWVyLT5zdHJpbmdWaWV3KG1fbGV4ZXIp
LnRvU3RyaW5nKCkpLCB0cnVlKTsKICAgICB9CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6
OkFycm93OiB7CiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9IGNvbnN1bWVUeXBlKExleGVyOjpU
b2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlmICghaWRlbnRpZmllcikKICAgICAg
ICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1vdmUocHJldmlvdXMpLCBmYWxzZSk7
Ci0gICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RF
eHByZXNzaW9uPihMZXhlcjo6VG9rZW4oKnR5cGUpLCBtYWtlVW5pcXVlUmVmPEFTVDo6RGVyZWZl
cmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCp0eXBlKSwgV1RGTW92ZShwcmV2aW91cykpLCBpZGVu
dGlmaWVyLT5zdHJpbmdWaWV3LnRvU3RyaW5nKCkpLCB0cnVlKTsKKyAgICAgICAgcmV0dXJuIFN1
ZmZpeEV4cHJlc3Npb24obWFrZVVuaXF1ZVJlZjxBU1Q6OkRvdEV4cHJlc3Npb24+KExleGVyOjpU
b2tlbigqdHlwZSksIG1ha2VVbmlxdWVSZWY8QVNUOjpEZXJlZmVyZW5jZUV4cHJlc3Npb24+KFdU
Rk1vdmUoKnR5cGUpLCBXVEZNb3ZlKHByZXZpb3VzKSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXco
bV9sZXhlcikudG9TdHJpbmcoKSksIHRydWUpOwogICAgIH0KICAgICBkZWZhdWx0OiB7CiAgICAg
ICAgIEFTU0VSVCh0eXBlLT50eXBlID09IExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJy
YWNrZXQpOwpAQCAtMTM3Myw3ICsxNDExLDEyIEBAIGF1dG8gUGFyc2VyOjpwYXJzZUxpbWl0ZWRT
dWZmaXhPcGVyYXRvcihVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtCiAK
IGF1dG8gUGFyc2VyOjpwYXJzZVN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+JiYgcHJldmlvdXMpIC0+IFN1ZmZpeEV4cHJlc3Npb24KIHsKLSAgICBhdXRvIHN1ZmZpeCA9
IGNvbnN1bWVUeXBlcyh7IExleGVyOjpUb2tlbjo6VHlwZTo6RnVsbFN0b3AsIExleGVyOjpUb2tl
bjo6VHlwZTo6QXJyb3csIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQsIExl
eGVyOjpUb2tlbjo6VHlwZTo6UGx1c1BsdXMsIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51
cyB9KTsKKyAgICBhdXRvIHN1ZmZpeCA9IGNvbnN1bWVUeXBlczwKKyAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpGdWxsU3RvcCwKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBcnJvdywK
KyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpMZWZ0U3F1YXJlQnJhY2tldCwKKyAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpQbHVzUGx1cywKKyAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBl
OjpNaW51c01pbnVzPigpOwogICAgIGlmICghc3VmZml4KQogICAgICAgICByZXR1cm4gU3VmZml4
RXhwcmVzc2lvbihXVEZNb3ZlKHByZXZpb3VzKSwgZmFsc2UpOwogCkBAIC0xMzgyLDEzICsxNDI1
LDEzIEBAIGF1dG8gUGFyc2VyOjpwYXJzZVN1ZmZpeE9wZXJhdG9yKFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+JiYgcHJldmlvdXMpIC0+IFN1ZmZpCiAgICAgICAgIGF1dG8gaWRlbnRpZmllciA9
IGNvbnN1bWVUeXBlKExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllcik7CiAgICAgICAgIGlm
ICghaWRlbnRpZmllcikKICAgICAgICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKFdURk1v
dmUocHJldmlvdXMpLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1h
a2VVbmlxdWVSZWY8QVNUOjpEb3RFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBXVEZNb3Zl
KHByZXZpb3VzKSwgaWRlbnRpZmllci0+c3RyaW5nVmlldy50b1N0cmluZygpKSwgdHJ1ZSk7Cisg
ICAgICAgIHJldHVybiBTdWZmaXhFeHByZXNzaW9uKG1ha2VVbmlxdWVSZWY8QVNUOjpEb3RFeHBy
ZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBXVEZNb3ZlKHByZXZpb3VzKSwgaWRlbnRpZmllci0+
c3RyaW5nVmlldyhtX2xleGVyKS50b1N0cmluZygpKSwgdHJ1ZSk7CiAgICAgfQogICAgIGNhc2Ug
TGV4ZXI6OlRva2VuOjpUeXBlOjpBcnJvdzogewogICAgICAgICBhdXRvIGlkZW50aWZpZXIgPSBj
b25zdW1lVHlwZShMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50aWZpZXIpOwogICAgICAgICBpZiAo
IWlkZW50aWZpZXIpCiAgICAgICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihXVEZNb3Zl
KHByZXZpb3VzKSwgZmFsc2UpOwotICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtl
VW5pcXVlUmVmPEFTVDo6RG90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpzdWZmaXgpLCBtYWtl
VW5pcXVlUmVmPEFTVDo6RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBX
VEZNb3ZlKHByZXZpb3VzKSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcudG9TdHJpbmcoKSksIHRy
dWUpOworICAgICAgICByZXR1cm4gU3VmZml4RXhwcmVzc2lvbihtYWtlVW5pcXVlUmVmPEFTVDo6
RG90RXhwcmVzc2lvbj4oTGV4ZXI6OlRva2VuKCpzdWZmaXgpLCBtYWtlVW5pcXVlUmVmPEFTVDo6
RGVyZWZlcmVuY2VFeHByZXNzaW9uPihXVEZNb3ZlKCpzdWZmaXgpLCBXVEZNb3ZlKHByZXZpb3Vz
KSksIGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKSksIHRydWUpOwog
ICAgIH0KICAgICBjYXNlIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNxdWFyZUJyYWNrZXQ6IHsK
ICAgICAgICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CkBAIC0xNDUxLDcg
KzE0OTQsNyBAQCBhdXRvIFBhcnNlcjo6Y29tcGxldGVUZXJuYXJ5Q29uZGl0aW9uYWwoTGV4ZXI6
OlRva2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8QVNUOjpFeAogCiBhdXRvIFBhcnNlcjo6Y29tcGxl
dGVBc3NpZ25tZW50KExleGVyOjpUb2tlbiYmIG9yaWdpbiwgVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4mJiBsZWZ0KSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJy
b3I+CiB7Ci0gICAgYXV0byBhc3NpZ25tZW50T3BlcmF0b3IgPSBjb25zdW1lVHlwZXMoeworICAg
IGF1dG8gYXNzaWdubWVudE9wZXJhdG9yID0gY29uc3VtZVR5cGVzPAogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6OkVxdWFsc1NpZ24sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1
c0VxdWFscywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpNaW51c0VxdWFscywKQEAgLTE0
NjIsOCArMTUwNSw3IEBAIGF1dG8gUGFyc2VyOjpjb21wbGV0ZUFzc2lnbm1lbnQoTGV4ZXI6OlRv
a2VuJiYgb3JpZ2luLCBVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uCiAgICAgICAgIExleGVyOjpU
b2tlbjo6VHlwZTo6QW5kRXF1YWxzLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok9yRXF1
YWxzLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlJpZ2h0U2hpZnRFcXVhbHMsCi0gICAg
ICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxzCi0gICAgfSk7CisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxzPigpOwogICAgIGlmICghYXNzaWdu
bWVudE9wZXJhdG9yKQogICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4oYXNzaWdubWVu
dE9wZXJhdG9yLmVycm9yKCkpOwogCkBAIC0xNTIyLDcgKzE1NjQsNyBAQCBhdXRvIFBhcnNlcjo6
cGFyc2VQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxB
U1Q6OkV4cHJlcwogCiAgICAgUEFSU0UoZXhwcmVzc2lvbiwgUG9zc2libGVQcmVmaXgpOwogCi0g
ICAgaWYgKHBlZWtUeXBlcyh7TGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduLAorICAgIGlm
IChwZWVrVHlwZXM8TGV4ZXI6OlRva2VuOjpUeXBlOjpFcXVhbHNTaWduLAogICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OlBsdXNFcXVhbHMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6
TWludXNFcXVhbHMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6VGltZXNFcXVhbHMsCkBA
IC0xNTMyLDcgKzE1NzQsNyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZVRlcm5hcnlDb25k
aXRpb25hbCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlcwogICAgICAgICBMZXhl
cjo6VG9rZW46OlR5cGU6OkFuZEVxdWFscywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpP
ckVxdWFscywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpSaWdodFNoaWZ0RXF1YWxzLAot
ICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkxlZnRTaGlmdEVxdWFsc30pKSB7CisgICAgICAg
IExleGVyOjpUb2tlbjo6VHlwZTo6TGVmdFNoaWZ0RXF1YWxzPigpKSB7CiAgICAgICAgIHJldHVy
biBjb21wbGV0ZUFzc2lnbm1lbnQoV1RGTW92ZSgqb3JpZ2luKSwgV1RGTW92ZSgqZXhwcmVzc2lv
bikpOwogICAgIH0KIApAQCAtMTU1NiwxMyArMTU5OCwxMyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQ
b3NzaWJsZUxvZ2ljYWxCaW5hcnlPcGVyYXRpb24oKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNU
OjpFeAogCiBhdXRvIFBhcnNlcjo6Y29tcGxldGVQb3NzaWJsZUxvZ2ljYWxCaW5hcnlPcGVyYXRp
b24oVW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mJiBwcmV2aW91cykgLT4gRXhwZWN0ZWQ8VW5p
cXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewotICAgIHdoaWxlIChhdXRvIGxvZ2lj
YWxCaW5hcnlPcGVyYXRpb24gPSB0cnlUeXBlcyh7CisgICAgd2hpbGUgKGF1dG8gbG9naWNhbEJp
bmFyeU9wZXJhdGlvbiA9IHRyeVR5cGVzPAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6Ok9y
T3IsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6QW5kQW5kLAogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6Ok9yLAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlhvciwKICAgICAg
ICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQKLSAgICAgICAgfSkpIHsKKyAgICAgICAgPigpKSB7
CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbik7
CiAKICAgICAgICAgc3dpdGNoIChsb2dpY2FsQmluYXJ5T3BlcmF0aW9uLT50eXBlKSB7CkBAIC0x
NjA4LDE0ICsxNjUwLDE0IEBAIGF1dG8gUGFyc2VyOjpwYXJzZVBvc3NpYmxlUmVsYXRpb25hbEJp
bmFyeU9wZXJhdGlvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6CiAKIGF1dG8gUGFyc2Vy
Ojpjb21wbGV0ZVBvc3NpYmxlUmVsYXRpb25hbEJpbmFyeU9wZXJhdGlvbihVbmlxdWVSZWY8QVNU
OjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHBy
ZXNzaW9uPiwgRXJyb3I+CiB7Ci0gICAgd2hpbGUgKGF1dG8gcmVsYXRpb25hbEJpbmFyeU9wZXJh
dGlvbiA9IHRyeVR5cGVzKHsKKyAgICB3aGlsZSAoYXV0byByZWxhdGlvbmFsQmluYXJ5T3BlcmF0
aW9uID0gdHJ5VHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TGVzc1RoYW5TaWdu
LAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OkdyZWF0ZXJUaGFuU2lnbiwKICAgICAgICAg
TGV4ZXI6OlRva2VuOjpUeXBlOjpMZXNzVGhhbk9yRXF1YWxUbywKICAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpHcmVhdGVyVGhhbk9yRXF1YWxUbywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpU
eXBlOjpFcXVhbENvbXBhcmlzb24sCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6Tm90RXF1
YWwKLSAgICAgICAgfSkpIHsKKyAgICAgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBv
c3NpYmxlU2hpZnQpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9u
Pj4gY2FsbEFyZ3VtZW50czsKQEAgLTE2NjMsMTAgKzE3MDUsMTAgQEAgYXV0byBQYXJzZXI6OnBh
cnNlUG9zc2libGVTaGlmdCgpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
LCBFcnJvcj4KIAogYXV0byBQYXJzZXI6OmNvbXBsZXRlUG9zc2libGVTaGlmdChVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPiYmIHByZXZpb3VzKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpF
eHByZXNzaW9uPiwgRXJyb3I+CiB7Ci0gICAgd2hpbGUgKGF1dG8gc2hpZnQgPSB0cnlUeXBlcyh7
CisgICAgd2hpbGUgKGF1dG8gc2hpZnQgPSB0cnlUeXBlczwKICAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpMZWZ0U2hpZnQsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UmlnaHRTaGlm
dAotICAgICAgICB9KSkgeworICAgICAgICA+KCkpIHsKICAgICAgICAgUEFSU0UobmV4dCwgUG9z
c2libGVBZGQpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPj4g
Y2FsbEFyZ3VtZW50czsKQEAgLTE2OTcsMTAgKzE3MzksMTAgQEAgYXV0byBQYXJzZXI6OnBhcnNl
UG9zc2libGVBZGQoKSAtPiBFeHBlY3RlZDxVbmlxdWVSZWY8QVNUOjpFeHByZXNzaW9uPiwgRXJy
b3I+CiAKIGF1dG8gUGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlQWRkKFVuaXF1ZVJlZjxBU1Q6OkV4
cHJlc3Npb24+JiYgcHJldmlvdXMpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Np
b24+LCBFcnJvcj4KIHsKLSAgICB3aGlsZSAoYXV0byBhZGQgPSB0cnlUeXBlcyh7CisgICAgd2hp
bGUgKGF1dG8gYWRkID0gdHJ5VHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1
cywKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpNaW51cwotICAgICAgICB9KSkgeworICAg
ICAgICA+KCkpIHsKICAgICAgICAgUEFSU0UobmV4dCwgUG9zc2libGVNdWx0aXBseSk7CiAKICAg
ICAgICAgVmVjdG9yPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+PiBjYWxsQXJndW1lbnRzOwpA
QCAtMTczMSwxMSArMTc3MywxMSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VQb3NzaWJsZU11bHRpcGx5
KCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycgogCiBhdXRvIFBh
cnNlcjo6Y29tcGxldGVQb3NzaWJsZU11bHRpcGx5KFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
JiYgcHJldmlvdXMpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+LCBFcnJv
cj4KIHsKLSAgICB3aGlsZSAoYXV0byBtdWx0aXBseSA9IHRyeVR5cGVzKHsKKyAgICB3aGlsZSAo
YXV0byBtdWx0aXBseSA9IHRyeVR5cGVzPAogICAgICAgICBMZXhlcjo6VG9rZW46OlR5cGU6OlN0
YXIsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RGl2aWRlLAogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6Ok1vZAotICAgICAgICB9KSkgeworICAgICAgICA+KCkpIHsKICAgICAgICAg
UEFSU0UobmV4dCwgUG9zc2libGVQcmVmaXgpOwogCiAgICAgICAgIFZlY3RvcjxVbmlxdWVSZWY8
QVNUOjpFeHByZXNzaW9uPj4gY2FsbEFyZ3VtZW50czsKQEAgLTE3NjQsNyArMTgwNiw3IEBAIGF1
dG8gUGFyc2VyOjpjb21wbGV0ZVBvc3NpYmxlTXVsdGlwbHkoVW5pcXVlUmVmPEFTVDo6RXhwcmVz
c2lvbj4mJiBwcmV2aW91cykgLT4KIAogYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVQcmVmaXgo
Ym9vbCAqaXNFZmZlY3RmdWwpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkV4cHJlc3Npb24+
LCBFcnJvcj4KIHsKLSAgICBpZiAoYXV0byBwcmVmaXggPSB0cnlUeXBlcyh7CisgICAgaWYgKGF1
dG8gcHJlZml4ID0gdHJ5VHlwZXM8CiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6UGx1c1Bs
dXMsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6TWludXNNaW51cywKICAgICAgICAgTGV4
ZXI6OlRva2VuOjpUeXBlOjpQbHVzLApAQCAtMTc3NCw3ICsxODE2LDcgQEAgYXV0byBQYXJzZXI6
OnBhcnNlUG9zc2libGVQcmVmaXgoYm9vbCAqaXNFZmZlY3RmdWwpIC0+IEV4cGVjdGVkPFVuaXF1
ZVJlZjxBU1Q6OkUKICAgICAgICAgTGV4ZXI6OlRva2VuOjpUeXBlOjpBbmQsCiAgICAgICAgIExl
eGVyOjpUb2tlbjo6VHlwZTo6QXQsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6U3Rhcgot
ICAgIH0pKSB7CisgICAgPigpKSB7CiAgICAgICAgIFBBUlNFKG5leHQsIFBvc3NpYmxlUHJlZml4
KTsKIAogICAgICAgICBzd2l0Y2ggKHByZWZpeC0+dHlwZSkgewpAQCAtMTg3Nyw3ICsxOTE5LDcg
QEAgYXV0byBQYXJzZXI6OnBhcnNlUG9zc2libGVTdWZmaXgoYm9vbCAqaXNFZmZlY3RmdWwpIC0+
IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6OkUKIGF1dG8gUGFyc2VyOjpwYXJzZUNhbGxFeHByZXNz
aW9uKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewog
ICAgIENPTlNVTUVfVFlQRShuYW1lLCBJZGVudGlmaWVyKTsKLSAgICBhdXRvIGNhbGxOYW1lID0g
bmFtZS0+c3RyaW5nVmlldy50b1N0cmluZygpOworICAgIGF1dG8gY2FsbE5hbWUgPSBuYW1lLT5z
dHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCk7CiAKICAgICBDT05TVU1FX1RZUEUobGVmdFBh
cmVudGhlc2lzLCBMZWZ0UGFyZW50aGVzaXMpOwogCkBAIC0xODk5LDcgKzE5NDEsNyBAQCBhdXRv
IFBhcnNlcjo6cGFyc2VDYWxsRXhwcmVzc2lvbigpIC0+IEV4cGVjdGVkPFVuaXF1ZVJlZjxBU1Q6
OkV4cHJlc3Npb24+LCBFcnJvcgogCiBhdXRvIFBhcnNlcjo6cGFyc2VUZXJtKCkgLT4gRXhwZWN0
ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogewotICAgIGF1dG8gdHlwZSA9
IGNvbnN1bWVUeXBlcyh7CisgICAgYXV0byB0eXBlID0gY29uc3VtZVR5cGVzPAogICAgICAgICBM
ZXhlcjo6VG9rZW46OlR5cGU6OkludExpdGVyYWwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlw
ZTo6VWludExpdGVyYWwsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RmxvYXRMaXRlcmFs
LApAQCAtMTkwNywyNiArMTk0OSwyNSBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUZXJtKCkgLT4gRXhw
ZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4sIEVycm9yPgogICAgICAgICBMZXhlcjo6
VG9rZW46OlR5cGU6OlRydWUsCiAgICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6RmFsc2UsCiAg
ICAgICAgIExleGVyOjpUb2tlbjo6VHlwZTo6SWRlbnRpZmllciwKLSAgICAgICAgTGV4ZXI6OlRv
a2VuOjpUeXBlOjpMZWZ0UGFyZW50aGVzaXMKLSAgICB9KTsKKyAgICAgICAgTGV4ZXI6OlRva2Vu
OjpUeXBlOjpMZWZ0UGFyZW50aGVzaXM+KCk7CiAgICAgaWYgKCF0eXBlKQogICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4odHlwZS5lcnJvcigpKTsKIAogICAgIHN3aXRjaCAodHlwZS0+
dHlwZSkgewogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpJbnRMaXRlcmFsOiB7Ci0gICAg
ICAgIGF1dG8gdmFsdWUgPSBpbnRMaXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyk7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSBpbnRMaXRlcmFsVG9JbnQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVy
KSk7CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxF
cnJvcj4odmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNU
OjpJbnRlZ2VyTGl0ZXJhbD4oV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OlVpbnRMaXRlcmFsOiB7Ci0gICAgICAgIGF1dG8gdmFs
dWUgPSB1aW50TGl0ZXJhbFRvVWludCh0eXBlLT5zdHJpbmdWaWV3KTsKKyAgICAgICAgYXV0byB2
YWx1ZSA9IHVpbnRMaXRlcmFsVG9VaW50KHR5cGUtPnN0cmluZ1ZpZXcobV9sZXhlcikpOwogICAg
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KHZh
bHVlLmVycm9yKCkpOwogICAgICAgICByZXR1cm4geyBtYWtlVW5pcXVlUmVmPEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbD4oV1RGTW92ZSgqdHlwZSksICp2YWx1ZSkgfTsKICAgICB9CiAgICAg
Y2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OkZsb2F0TGl0ZXJhbDogewotICAgICAgICBhdXRvIHZh
bHVlID0gZmxvYXRMaXRlcmFsVG9GbG9hdCh0eXBlLT5zdHJpbmdWaWV3KTsKKyAgICAgICAgYXV0
byB2YWx1ZSA9IGZsb2F0TGl0ZXJhbFRvRmxvYXQodHlwZS0+c3RyaW5nVmlldyhtX2xleGVyKSk7
CiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJv
cj4odmFsdWUuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpG
bG9hdExpdGVyYWw+KFdURk1vdmUoKnR5cGUpLCAqdmFsdWUpIH07CkBAIC0xOTM4LDcgKzE5Nzks
NyBAQCBhdXRvIFBhcnNlcjo6cGFyc2VUZXJtKCkgLT4gRXhwZWN0ZWQ8VW5pcXVlUmVmPEFTVDo6
RXhwcmVzc2lvbj4sIEVycm9yPgogICAgIGNhc2UgTGV4ZXI6OlRva2VuOjpUeXBlOjpGYWxzZToK
ICAgICAgICAgcmV0dXJuIHsgbWFrZVVuaXF1ZVJlZjxBU1Q6OkJvb2xlYW5MaXRlcmFsPihXVEZN
b3ZlKCp0eXBlKSwgZmFsc2UpIH07CiAgICAgY2FzZSBMZXhlcjo6VG9rZW46OlR5cGU6OklkZW50
aWZpZXI6IHsKLSAgICAgICAgYXV0byBuYW1lID0gdHlwZS0+c3RyaW5nVmlldy50b1N0cmluZygp
OworICAgICAgICBhdXRvIG5hbWUgPSB0eXBlLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5n
KCk7CiAgICAgICAgIHJldHVybiB7IG1ha2VVbmlxdWVSZWY8QVNUOjpWYXJpYWJsZVJlZmVyZW5j
ZT4oV1RGTW92ZSgqdHlwZSksIFdURk1vdmUobmFtZSkpIH07CiAgICAgfQogICAgIGRlZmF1bHQ6
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNl
ci5oCmluZGV4IGI0NDgyYTQ0NjllLi5kYjk5NjFkODcxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5oCkBAIC0xNDMsMTEgKzE0Mywx
NCBAQCBwcml2YXRlOgogICAgIFVuZXhwZWN0ZWQ8RXJyb3I+IGZhaWwoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBUcnlUb1BlZWsgPSBUcnlUb1BlZWs6Olllcyk7CiAgICAgRXhwZWN0ZWQ8TGV4ZXI6
OlRva2VuLCBFcnJvcj4gcGVlaygpOwogICAgIEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+
IHBlZWtGdXJ0aGVyKCk7Ci0gICAgYm9vbCBwZWVrVHlwZXMoY29uc3QgVmVjdG9yPExleGVyOjpU
b2tlbjo6VHlwZT4mKTsKKyAgICB0ZW1wbGF0ZSA8TGV4ZXI6OlRva2VuOjpUeXBlLi4uIHR5cGVz
PgorICAgIGJvb2wgcGVla1R5cGVzKCk7CiAgICAgT3B0aW9uYWw8TGV4ZXI6OlRva2VuPiB0cnlU
eXBlKExleGVyOjpUb2tlbjo6VHlwZSk7Ci0gICAgT3B0aW9uYWw8TGV4ZXI6OlRva2VuPiB0cnlU
eXBlcyhjb25zdCBWZWN0b3I8TGV4ZXI6OlRva2VuOjpUeXBlPiYpOworICAgIHRlbXBsYXRlIDxM
ZXhlcjo6VG9rZW46OlR5cGUuLi4gdHlwZXM+CisgICAgT3B0aW9uYWw8TGV4ZXI6OlRva2VuPiB0
cnlUeXBlcygpOwogICAgIEV4cGVjdGVkPExleGVyOjpUb2tlbiwgRXJyb3I+IGNvbnN1bWVUeXBl
KExleGVyOjpUb2tlbjo6VHlwZSk7Ci0gICAgRXhwZWN0ZWQ8TGV4ZXI6OlRva2VuLCBFcnJvcj4g
Y29uc3VtZVR5cGVzKGNvbnN0IFZlY3RvcjxMZXhlcjo6VG9rZW46OlR5cGU+Jik7CisgICAgdGVt
cGxhdGUgPExleGVyOjpUb2tlbjo6VHlwZS4uLiB0eXBlcz4KKyAgICBFeHBlY3RlZDxMZXhlcjo6
VG9rZW4sIEVycm9yPiBjb25zdW1lVHlwZXMoKTsKIAogICAgIEV4cGVjdGVkPFZhcmlhbnQ8aW50
LCB1bnNpZ25lZD4sIEVycm9yPiBjb25zdW1lSW50ZWdyYWxMaXRlcmFsKCk7CiAgICAgRXhwZWN0
ZWQ8dW5zaWduZWQsIEVycm9yPiBjb25zdW1lTm9uTmVnYXRpdmVJbnRlZ3JhbExpdGVyYWwoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJl
c2VydmVWYXJpYWJsZUxpZmV0aW1lcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGltZXMuY3BwCmluZGV4IDk5ZDhkMWUw
NjUxLi42ZGI2MDlhNzEyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xQcmVzZXJ2ZVZhcmlhYmxlTGlmZXRpbWVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXNlcnZlVmFyaWFibGVMaWZldGlt
ZXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIHByaXZhdGU6CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IExleGVyOjpUb2tlbiBhbm9ueW1vdXNUb2tlbihMZXhlcjo6VG9rZW46OlR5cGUgdHlwZSkKIHsK
LSAgICByZXR1cm4gTGV4ZXI6OlRva2VuIHsgeyB9LCAwLCB0eXBlIH07CisgICAgcmV0dXJuIExl
eGVyOjpUb2tlbiB7IDAsIDAsIHR5cGUgfTsKIH0KIAogY2xhc3MgUHJlc2VydmVMaWZldGltZXMg
OiBwdWJsaWMgVmlzaXRvciB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>