<?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>146466</bug_id>
          
          <creation_ts>2015-06-30 12:29:14 -0700</creation_ts>
          <short_desc>Web Inspector: no need to allocate protocolErrors array for every dispatched backend command</short_desc>
          <delta_ts>2015-08-26 11:16:30 -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>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147097</dependson>
          <blocked>147067</blocked>
    
    <blocked>148480</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brian Burg">burg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bburg</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>graouts</cc>
    
    <cc>joepeck</cc>
    
    <cc>jonowells</cc>
    
    <cc>mattbaker</cc>
    
    <cc>nvasilyev</cc>
    
    <cc>ossy</cc>
    
    <cc>peavo</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1105755</commentid>
    <comment_count>0</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-06-30 12:29:14 -0700</bug_when>
    <thetext>This can be reused per domain dispatcher, removing one InspectorArray allocation per dispatched command in the normal case.

While this is done, can also extract the code for getting the parameters object out of the payload into the dispatcher&apos;s main dispatch method. This removes more duplicated code from every generated command binding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105756</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-06-30 12:30:00 -0700</bug_when>
    <thetext>&lt;rdar://problem/21616637&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1107179</commentid>
    <comment_count>2</comment_count>
      <attachid>256229</attachid>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-07-06 12:12:58 -0700</bug_when>
    <thetext>Created attachment 256229
Patch (no tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1107180</commentid>
    <comment_count>3</comment_count>
    <who name="Brian Burg">burg</who>
    <bug_when>2015-07-06 12:13:44 -0700</bug_when>
    <thetext>This patch makes some subtle changes to how errors are reported. I&apos;d like to write a test to cover the existing error cases before landing this, so we have a clear idea of the behavior change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120670</commentid>
    <comment_count>4</comment_count>
      <attachid>259866</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-25 11:50:29 -0700</bug_when>
    <thetext>Created attachment 259866
Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120671</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-25 11:52:59 -0700</bug_when>
    <thetext>This patch modifies the inspector protocol generator. Please ensure that you have rebaselined any generator test results (i.e., by running `Tools/Scripts/run-inspector-generator-tests --reset-results`)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120686</commentid>
    <comment_count>6</comment_count>
      <attachid>259866</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-08-25 12:18:50 -0700</bug_when>
    <thetext>Comment on attachment 259866
Proposed Fix

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

Nice! Much cleaner

&gt; Source/JavaScriptCore/ChangeLog:67
&gt; +        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:

Duplicated in the changelog?

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.h:75
&gt; +    unsigned protocolErrorCount() const { return m_protocolErrors.size(); }

This is only ever used alongside &quot;&gt; 0&quot;. Maybe it should just be `bool hasProtocolErrors()`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120735</commentid>
    <comment_count>7</comment_count>
      <attachid>259889</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-25 15:19:35 -0700</bug_when>
    <thetext>Created attachment 259889
Proposed Fix (fix linker)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120779</commentid>
    <comment_count>8</comment_count>
      <attachid>259903</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-25 16:52:20 -0700</bug_when>
    <thetext>Created attachment 259903
Proposed Fix (EWS)

Now includes fixes for ObjC generated code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120880</commentid>
    <comment_count>9</comment_count>
      <attachid>259903</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-08-26 00:55:36 -0700</bug_when>
    <thetext>Comment on attachment 259903
Proposed Fix (EWS)

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120930</commentid>
    <comment_count>10</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2015-08-26 07:34:54 -0700</bug_when>
    <thetext>Committed r188965: &lt;http://trac.webkit.org/changeset/188965&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120950</commentid>
    <comment_count>11</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-08-26 08:57:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Committed r188965: &lt;http://trac.webkit.org/changeset/188965&gt;

It broke the WinCairo build: https://build.webkit.org/builders/WinCairo%2064-Bit%20Release/builds/48696</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120952</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-08-26 09:02:56 -0700</bug_when>
    <thetext>Interesting. Looks like a symbol isn&apos;t getting exported. Alex: I wonder if it&apos;s our old friend &quot;the overly zealous symbol stripper&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120990</commentid>
    <comment_count>13</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-08-26 11:16:30 -0700</bug_when>
    <thetext>I deleted the WebKitBuild directory on my bot.  I&apos;m just going to close my eyes and hope this magically fixes it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256229</attachid>
            <date>2015-07-06 12:12:58 -0700</date>
            <delta_ts>2015-08-25 11:50:24 -0700</delta_ts>
            <desc>Patch (no tests)</desc>
            <filename>bug-146466-20150706091159.patch</filename>
            <type>text/plain</type>
            <size>90876</size>
            <attacher name="Brian Burg">burg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg2MTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
ZmIzYzg0ZTBiMDMwZjJmOTQyZTU0OGY2ODBlNDA3YTFmZTdkMTM3Li5jMzAwOWRmYmE2MTNlNDYz
OWVmYWQxMGVhM2I3ZTc5NmVkOTZmZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MSBAQAorMjAxNS0wNy0wNiAgQnJpYW4gSi4gQnVyZyAgPGJ1cmdAY3Mud2FzaGluZ3Rv
bi5lZHU+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjogbm8gbmVlZCB0byBhbGxvY2F0ZSBwcm90
b2NvbEVycm9ycyBhcnJheSBmb3IgZXZlcnkgZGlzcGF0Y2hlZCBiYWNrZW5kIGNvbW1hbmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjQ2NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIHNv
bWUgb2YgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBjb2RlLCB3aXRoIGEgZm9jdXMgb24gZWxpbWlu
YXRpbmcgdXNlbGVzcyBhbGxvY2F0aW9ucworICAgICAgICBvZiBvYmplY3RzIGluIHRoZSBjb21t
b24gY2FzZSB3aGVuIG5vIHByb3RvY29sIGVycm9ycyBoYXBwZW4uIFRoaXMgaXMgZG9uZSBieSBz
YXZpbmcgdGhlCisgICAgICAgIGlkIG9mIGVhY2ggcmVxdWVzdCBhcyBpdCBpcyBiZWluZyBwcm9j
ZXNzZWQgYnkgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciwgYW5kIHRhZ2dpbmcgYW55CisgICAgICAg
IHN1YnNlcXVlbnQgZXJyb3JzIHdpdGggdGhhdCBpZC4gVGhpcyBhbHNvIGFsbG93cyBmb3IgY2xl
YW51cHMgaW4gZGlzcGF0Y2hlciBjb2RlIHRoYXQgbWF5CisgICAgICAgIHJlcG9ydCBwcm90b2Nv
bCBlcnJvcnMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGxpZnRzIHNvbWUgY29tbW9uIGNv
ZGUgc2hhcmVkIGJldHdlZW4gYWxsIGdlbmVyYXRlZCBiYWNrZW5kIGNvbW1hbmQKKyAgICAgICAg
aW1wbGVtZW50YXRhdGlvbnMgaW50byB0aGUgcGVyLWRvbWFpbiBkaXNwYXRjaCBtZXRob2QgaW5z
dGVhZC4gVGhpcyByZWR1Y2VzIGdlbmVyYXRlZCBjb2RlIHNpemUuCisKKyAgICAgICAgVG8gYXZv
aWQgY29uZnVzaW9uLCBzdGFuZGFyZGl6ZSBvbiBjYWxsaW5nIHRoZSBpZCBvZiBhIGJhY2tlbmQg
bWVzc2FnZSBpdHMgJ3JlcXVlc3RJZCcuCisgICAgICAgIFJlcXVlc3RzIGNhbiBiZSBoYW5kbGVk
IHN5bmNocm9ub3VzbHkgb3IgYXN5bmNocm9ub3VzbHkgKHRyaWdnZXJlZCB2aWEgdGhlICdhc3lu
YycgcHJvcGVydHkpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgY292ZXJlZCBieSBleGlzdGlu
ZyBwcm90b2NvbCB0ZXN0cy4KKworICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZSk6IEluaXRpYWxpemUgbV9hbHJlYWR5U2VudCBpbiBo
ZWFkZXIuCisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jh
c2U6OnNlbmRJZkFjdGl2ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6IFJlc2V0IGNvdW50ZXJzIGFuZCBjdXJyZW50IHJlcXVlc3RJZCBiZWZvcmUg
ZGlzcGF0Y2hpbmcuCisgICAgICAgIE5vIG5lZWQgdG8gbWFudWFsbHkgdGhyZWFkIHRoZSByZXF1
ZXN0SWQgdG8gYWxsIHJlcG9ydFByb3RvY29sRXJyb3IgY2FsbHMuCisKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZSk6CisgICAgICAgIChJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKTogRG9uJ3Qgc2VuZCBh
ICdkYXRhJyBhcnJheSBjb250YWluaW5nIG5lc3RlZAorICAgICAgICBlcnJvcnMuIEluc3RlYWQs
IGVhY2ggcHJvdG9jb2wgZXJyb3Igd2lsbCBnZW5lcmF0ZSBhIHNlcGFyYXRlIG1lc3NhZ2UgdG8g
dGhlIGZyb250ZW5kLgorCisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRQcm9wZXJ0eVZhbHVlKTogUmVtb3ZlIHVzZWxlc3MgdHlwZSBwYXJhbWV0ZXJzIGFuZCBudWtl
IG1vc3Qgb2YKKyAgICAgICAgdGhlIHR5cGUgY29udmVyc2lvbiBtZXRob2RzLiBVc2Ugc3RkOjpm
dW5jdGlvbiB0eXBlcyBpbnN0ZWFkIG9mIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMuCisKKyAgICAg
ICAgKEluc3BlY3Rvcjo6Y2FzdFRvSW50ZWdlcik6IEFkZGVkLgorICAgICAgICAoSW5zcGVjdG9y
OjpjYXN0VG9OdW1iZXIpOiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3Bh
dGNoZXI6OmdldEludGVnZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0RG91YmxlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6Omdl
dFN0cmluZyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29s
ZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheSk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OmdldFByb3BlcnR5VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9y
OjpBc01ldGhvZEJyaWRnZXM6OmFzSW50ZWdlcik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0
b3I6OkFzTWV0aG9kQnJpZGdlczo6YXNEb3VibGUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVj
dG9yOjpBc01ldGhvZEJyaWRnZXM6OmFzU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3Bl
Y3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4pOiBEZWxldGVkLgorICAgICAgICAoSW5z
cGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKElu
c3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBFeHRyYWN0ICdw
YXJhbXMnIG9iamVjdCBpbiBkb21haW4gZGlzcGF0Y2ggbWV0aG9kLgorICAgICAgICBPbWl0IHJl
cXVlc3RJZHMgd2hlcmUgcG9zc2libGUuIENvbnZlcnQgZGlzcGF0Y2ggdGFibGVzIHRvIHVzZSBO
ZXZlckRlc3Ryb3llZC4gQ2hlY2sgdGhlIHByb3RvY29sIGVycm9yIGNvdW50CisgICAgICAgIHRv
IGRlY2lkZSB3aGV0aGVyIHRvIGFib3J0IHRoZSBkaXNwYXRjaCBvciBub3QsIHJhdGhlciB0aGFu
IGFsbG9jYXRpbmcgb3VyIG93biBlcnJvcnMgYXJyYXkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
OiBSZXZlcnQgdG8gcGFzc2luZyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PgorICAgICAgICBzaW5j
ZSBwYXJhbWV0ZXJzIGFyZSBub3cgYmVpbmcgcGFzc2VkIHJhdGhlciB0aGFuIHRoZSBtZXNzYWdl
IG9iamVjdC4gU29tZSBjb21tYW5kcyBkbyBub3QgcmVxdWlyZSBwYXJhbWV0ZXJzLgorCisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5nZW5lcmF0ZV9vdXRwdXQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVt
ZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zv
cl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9j
b21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwt
cmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVt
LXZhbHVlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbi1yZXN1bHQ6CisKIDIwMTUtMDYtMjkgIERlYW4gSmFja3NvbiAgPGRpbm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFRlbXBvcmFyaWx5IGRpc2FibGUgUElDVFVSRV9TSVpFUwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcAppbmRleCBmODhjZmJkYWJjMWRjOWNlYWY4ZjUwMzBjNjc1
ZDQ5NGQ3NjAzODE5Li42MTBjZGRhNzM4YjZkNjJmZmJjNjJmNjgwNzRjY2QyMjk0MDNmNDk3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcApAQCAtMzQsMTAgKzM0LDkgQEAKIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKLUJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OkNhbGxi
YWNrQmFzZShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBp
ZCkKK0JhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZShSZWY8QmFj
a2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGxvbmcgcmVxdWVzdElkKQogICAg
IDogbV9iYWNrZW5kRGlzcGF0Y2hlcihXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpKQotICAg
ICwgbV9pZChpZCkKLSAgICAsIG1fYWxyZWFkeVNlbnQoZmFsc2UpCisgICAgLCBtX3JlcXVlc3RJ
ZChyZXF1ZXN0SWQpCiB7CiB9CiAKQEAgLTU3LDcgKzU2LDcgQEAgdm9pZCBCYWNrZW5kRGlzcGF0
Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kSWZBY3RpdmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXIKICAgICBpZiAobV9hbHJlYWR5U2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKG1faWQsIFdURjo6bW92ZShwYXJ0aWFsTWVz
c2FnZSksIGludm9jYXRpb25FcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKG1fcmVxdWVzdElkLCBXVEY6Om1vdmUocGFydGlhbE1lc3NhZ2UpLCBpbnZvY2F0aW9u
RXJyb3IpOwogICAgIG1fYWxyZWFkeVNlbnQgPSB0cnVlOwogfQogCkBAIC03Niw4MSArNzUsODYg
QEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogewogICAgIFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKKyAgICBt
X3Byb3RvY29sRXJyb3JDb3VudCA9IDA7CisgICAgbV9jdXJyZW50UmVxdWVzdElkID0gTnVsbG9w
dDsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcGFyc2VkTWVzc2FnZTsKICAgICBpZiAo
IUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSwgcGFyc2VkTWVzc2FnZSkpIHsKLSAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxscHRyLCBQYXJzZUVycm9yLCBBU0NJSUxpdGVy
YWwoIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpKTsKKyAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihQYXJzZUVycm9yLCBBU0NJSUxpdGVyYWwoIk1lc3NhZ2UgbXVzdCBiZSBpbiBK
U09OIGZvcm1hdCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7CiAgICAgaWYgKCFwYXJzZWRNZXNzYWdlLT5hc09i
amVjdChtZXNzYWdlT2JqZWN0KSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxw
dHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05p
ZmllZCBvYmplY3QiKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVl
c3QsIEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2Fs
bElkVmFsdWU7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRWYWx1ZShBU0NJSUxpdGVyYWwo
ImlkIiksIGNhbGxJZFZhbHVlKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxw
dHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIidpZCcgcHJvcGVydHkgd2FzIG5vdCBm
b3VuZCIpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHJlcXVlc3RJZFZhbHVlOworICAg
IGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJpZCIpLCByZXF1ZXN0
SWRWYWx1ZSkpIHsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwg
QVNDSUlMaXRlcmFsKCInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBsb25nIGNhbGxJZCA9IDA7Ci0gICAgaWYgKCFjYWxsSWRWYWx1
ZS0+YXNJbnRlZ2VyKGNhbGxJZCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxs
cHRyLCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAnaWQnIHByb3Bl
cnR5IG11c3QgYmUgaW50ZWdlciIpKTsKKyAgICBsb25nIHJlcXVlc3RJZCA9IDA7CisgICAgaWYg
KCFyZXF1ZXN0SWRWYWx1ZS0+YXNJbnRlZ2VyKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAn
aWQnIHByb3BlcnR5IG11c3QgYmUgaW50ZWdlciIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorICAgIG1fY3VycmVudFJlcXVlc3RJZCA9IHJlcXVlc3RJZDsKKwogICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gbWV0aG9kVmFsdWU7CiAgICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRWYWx1
ZShBU0NJSUxpdGVyYWwoIm1ldGhvZCIpLCBtZXRob2RWYWx1ZSkpIHsKLSAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCInbWV0
aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0
IGZvdW5kIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgU3RyaW5nIG1ldGhvZDsK
ICAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZyhtZXRob2QpKSB7Ci0gICAgICAgIHJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKSk7CisgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiVGhlIHR5cGUg
b2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBzaXplX3QgcG9zaXRpb24gPSBtZXRob2QuZmluZCgnLicpOwogICAgIGlm
IChwb3NpdGlvbiA9PSBXVEY6Om5vdEZvdW5kKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiVGhlICdtZXRob2QnIHBy
b3BlcnR5IHdhcyBmb3JtYXR0ZWQgaW5jb3JyZWN0bHkuIEl0IHNob3VsZCBiZSAnRG9tYWluLm1l
dGhvZCciKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsIEFT
Q0lJTGl0ZXJhbCgiVGhlICdtZXRob2QnIHByb3BlcnR5IHdhcyBmb3JtYXR0ZWQgaW5jb3JyZWN0
bHkuIEl0IHNob3VsZCBiZSAnRG9tYWluLm1ldGhvZCciKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBTdHJpbmcgZG9tYWluID0gbWV0aG9kLnN1YnN0cmluZygwLCBwb3NpdGlvbik7
CiAgICAgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqIGRvbWFpbkRpc3BhdGNoZXIgPSBt
X2Rpc3BhdGNoZXJzLmdldChkb21haW4pOwogICAgIGlmICghZG9tYWluRGlzcGF0Y2hlcikgewot
ICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIg
KyBkb21haW4gKyAiJyBkb21haW4gd2FzIG5vdCBmb3VuZCIpOworICAgICAgICByZXBvcnRQcm90
b2NvbEVycm9yKE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBkb21haW4gKyAiJyBkb21haW4gd2FzIG5v
dCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgU3RyaW5nIGRvbWFpbk1l
dGhvZCA9IG1ldGhvZC5zdWJzdHJpbmcocG9zaXRpb24gKyAxKTsKLSAgICBkb21haW5EaXNwYXRj
aGVyLT5kaXNwYXRjaChjYWxsSWQsIGRvbWFpbk1ldGhvZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChtX2N1cnJlbnRSZXF1
ZXN0SWQudmFsdWUoKSwgZG9tYWluTWV0aG9kLCBtZXNzYWdlT2JqZWN0LnJlbGVhc2VOb25OdWxs
KCkpOwogfQogCi12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyBjYWxs
SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYg
aW52b2NhdGlvbkVycm9yKQordm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHJlc3VsdCwgY29uc3QgRXJy
b3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKIHsKICAgICBpZiAoIW1fZnJvbnRlbmRDaGFubmVs
KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaW52b2NhdGlvbkVycm9yLmxlbmd0aCgpKSB7
Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgU2VydmVyRXJyb3IsIGludm9j
YXRpb25FcnJvcik7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoU2VydmVyRXJyb3IsIGlu
dm9jYXRpb25FcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBSZWY8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHJl
c3VsdCk7Ci0gICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQi
KSwgY2FsbElkKTsKKyAgICByZXNwb25zZU1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFs
KCJpZCIpLCByZXF1ZXN0SWQpOwogICAgIG1fZnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRv
RnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgQmFj
a2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2Fs
bElkLCBDb21tb25FcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkgY29uc3QKK3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoQ29t
bW9uRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0g
ICAgcmVwb3J0UHJvdG9jb2xFcnJvcihjYWxsSWQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlLCBu
dWxscHRyKTsKKyAgICByZXBvcnRQcm90b2NvbEVycm9yKG1fY3VycmVudFJlcXVlc3RJZC52YWx1
ZU9yKDApLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3Bh
dGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21t
b25FcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgZGF0YSkgY29uc3QKK3ZvaWQg
QmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IobG9uZyByZWxhdGVkUmVxdWVz
dElkLCBDb21tb25FcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkKIHsKICAgICBzdGF0aWMgY29uc3QgaW50IGVycm9yQ29kZXNbXSA9IHsKICAgICAgICAgLTMy
NzAwLCAvLyBQYXJzZUVycm9yCkBAIC0xNjUsMjkgKzE2OSwyNiBAQCB2b2lkIEJhY2tlbmREaXNw
YXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29t
bW9uRXJybwogICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCAodW5zaWduZWQpZXJyb3JDb2RlIDwg
V1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7CiAgICAgQVNTRVJUX0FSRyhlcnJvckNvZGUs
IGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CiAKKyAgICBtX3Byb3RvY29sRXJyb3JDb3VudCsrOwor
CiAgICAgaWYgKCFtX2Zyb250ZW5kQ2hhbm5lbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IGVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCBlcnJvckNvZGVzW2Vycm9y
Q29kZV0pOwogICAgIGVycm9yLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIGVy
cm9yTWVzc2FnZSk7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGVycm9yLT5zZXRBcnJheShBU0NJ
SUxpdGVyYWwoImRhdGEiKSwgV1RGOjptb3ZlKGRhdGEpKTsKIAogICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIG1lc3NhZ2Ut
PnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIFdURjo6bW92ZShlcnJvcikpOwotICAg
IGlmIChjYWxsSWQpCi0gICAgICAgIG1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJp
ZCIpLCAqY2FsbElkKTsKLSAgICBlbHNlCi0gICAgICAgIG1lc3NhZ2UtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgiaWQiKSwgSW5zcGVjdG9yVmFsdWU6Om51bGwoKSk7CisgICAgbWVzc2FnZS0+c2V0
SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksIHJlbGF0ZWRSZXF1ZXN0SWQpOwogCiAgICAgbV9m
cm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblZhbHVlVHlwZSwgdHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZSBEZWZhdWx0VmFsdWVUeXBlPgotc3RhdGljIFJldHVyblZhbHVl
VHlwZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzLCBEZWZhdWx0VmFsdWVUeXBlIGRlZmF1
bHRWYWx1ZSwgYm9vbCAoKmFzTWV0aG9kKShJbnNwZWN0b3JWYWx1ZSYsIFZhbHVlVHlwZSYpLCBj
b25zdCBjaGFyKiB0eXBlTmFtZSkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIEJhY2tlbmREaXNw
YXRjaGVyOjpnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVl
LCBzdGQ6OmZ1bmN0aW9uPGJvb2woSW5zcGVjdG9yVmFsdWUmLCBUJik+IGFzTWV0aG9kLCBjb25z
dCBjaGFyKiB0eXBlTmFtZSkKIHsKLSAgICBWYWx1ZVR5cGUgcmVzdWx0ID0gZGVmYXVsdFZhbHVl
OworICAgIFQgcmVzdWx0KGRlZmF1bHRWYWx1ZSk7CiAgICAgLy8gb3V0X29wdGlvbmFsVmFsdWVG
b3VuZCBzaWduYWxzIHRvIHRoZSBjYWxsZXIgd2hldGhlciBhbiBvcHRpb25hbCBwcm9wZXJ0eSB3
YXMgZm91bmQuCiAgICAgLy8gaWYgb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9PSBudWxscHRyLCB0
aGVuIHRoaXMgaXMgYSByZXF1aXJlZCBwcm9wZXJ0eS4KICAgICBpZiAob3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKQEAgLTE5NSwxOSArMTk2LDE5IEBAIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0
UHJvcGVydHlWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuCiAK
ICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQp
Ci0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6Zm9ybWF0KCIncGFy
YW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlw
ZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmlu
Zzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRl
ciAnJXMnIHdpdGggdHlwZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBv
YmplY3QtPmZpbmQobmFtZSk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gb2JqZWN0LT5lbmQoKSkg
ewogICAgICAgICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90
b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5
cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsK
KyAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFs
aWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJyB3
YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBpZiAoIWFzTWV0aG9kKCpmaW5kUmVzdWx0LT52
YWx1ZSwgcmVzdWx0KSkgewotICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6
Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlBh
cmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICclcycuIiwgbmFtZS51dGY4
KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApA
QCAtMjE3LDQ5ICsyMTgsNDIgQEAgc3RhdGljIFJldHVyblZhbHVlVHlwZSBnZXRQcm9wZXJ0eVZh
bHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG4KICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1zdHJ1Y3QgQXNNZXRob2RCcmlkZ2VzIHsKLSAgICBzdGF0aWMgYm9vbCBh
c0ludGVnZXIoSW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBpbnQmIG91dHB1dCkgeyByZXR1cm4gdmFs
dWUuYXNJbnRlZ2VyKG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc0RvdWJsZShJbnNwZWN0
b3JWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc0RvdWJsZShv
dXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wgYXNTdHJpbmcoSW5zcGVjdG9yVmFsdWUmIHZhbHVl
LCBTdHJpbmcmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNTdHJpbmcob3V0cHV0KTsgfQotICAg
IHN0YXRpYyBib29sIGFzQm9vbGVhbihJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIGJvb2wmIG91dHB1
dCkgeyByZXR1cm4gdmFsdWUuYXNCb29sZWFuKG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBh
c09iamVjdChJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBv
dXRwdXQpIHsgcmV0dXJuIHZhbHVlLmFzT2JqZWN0KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9v
bCBhc0FycmF5KEluc3BlY3RvclZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYg
b3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc0FycmF5KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9v
bCBhc1ZhbHVlKEluc3BlY3RvclZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYg
b3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc1ZhbHVlKG91dHB1dCk7IH0KLX07Ci0KLWludCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKK3N0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSW5z
cGVjdG9yVmFsdWUmIHZhbHVlLCBpbnQmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2Vy
KHJlc3VsdCk7IH0KK3N0YXRpYyBib29sIGNhc3RUb051bWJlcihJbnNwZWN0b3JWYWx1ZSYgdmFs
dWUsIGRvdWJsZSYgcmVzdWx0KSB7IHJldHVybiB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9CisK
K2ludCBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBn
ZXRQcm9wZXJ0eVZhbHVlPGludCwgaW50LCBpbnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6YXNJbnRlZ2VyLCAiSW50ZWdlciIp
OworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZv
dW5kLCAwLCAmY2FzdFRvSW50ZWdlciwgIkludGVnZXIiKTsKIH0KIAotZG91YmxlIEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPiYgcHJvdG9jb2xFcnJvcnMpCitkb3VibGUgQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJs
ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRvdWJsZSwgZG91YmxlLCBk
b3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0
aG9kQnJpZGdlczo6YXNEb3VibGUsICJOdW1iZXIiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZTxkb3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgMCwgJmNhc3RUb051bWJlciwg
Ik51bWJlciIpOwogfQogCi1TdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNw
ZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKK1N0
cmluZyBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8U3RyaW5nLCBTdHJpbmcsIFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgIiIsIEFzTWV0aG9kQnJpZGdlczo6YXNTdHJpbmcsICJT
dHJpbmciKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+KG9iamVjdCwgbmFt
ZSwgdmFsdWVGb3VuZCwgIiIsICZJbnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcsICJTdHJpbmciKTsK
IH0KIAotYm9vbCBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKK2Jvb2wgQmFja2VuZERp
c3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1
ZTxib29sLCBib29sLCBib29sPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJy
b3JzLCBmYWxzZSwgQXNNZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4sICJCb29sZWFuIik7CisgICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8Ym9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBm
YWxzZSwgJkluc3BlY3RvclZhbHVlOjphc0Jvb2xlYW4sICJCb29sZWFuIik7CiB9CiAKLVJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCiB7Ci0g
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+LCBJbnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVl
Rm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0
LCAiT2JqZWN0Iik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkluc3BlY3RvclZh
bHVlOjphc09iamVjdCwgIk9iamVjdCIpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKK1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFs
dWU8UmVmUHRyPEluc3BlY3RvckFycmF5PiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiwgSW5zcGVj
dG9yQXJyYXkqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxs
cHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzQXJyYXksICJBcnJheSIpOworICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0b3JBcnJheT4+KG9iamVjdCwgbmFtZSwgdmFsdWVG
b3VuZCwgbnVsbHB0ciwgJkluc3BlY3RvclZhbHVlOjphc0FycmF5LCAiQXJyYXkiKTsKIH0KIAot
UmVmUHRyPEluc3BlY3RvclZhbHVlPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewot
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4sIEluc3BlY3RvclZhbHVlKj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc1ZhbHVlLCAi
VmFsdWUiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZJbnNwZWN0b3JWYWx1ZTo6
YXNWYWx1ZSwgIlZhbHVlIik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oCmluZGV4IGIzMDM3MDBhMjA5YmIyMjI2NmJhZThmNGU0ZGU4ZGQzMjZm
Yjk0YjcuLjU0MTNiZTdjMmVjZDUzZTFjNDczYWUwOWZkMGRhNTg1ZWE3MWZkNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXJfaAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQzLDcgKzQ0LDcgQEAgcHVibGlj
OgogICAgIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGF0Y2hlcikKICAgICAgICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmRE
aXNwYXRjaGVyKSB7IH0KICAgICB2aXJ0dWFsIH5TdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgPSAwOwogcHJvdGVjdGVkOgogICAgIFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CkBAIC01NCw3ICs1
NSw3IEBAIHB1YmxpYzoKIAogICAgIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENhbGxiYWNrQmFz
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbGxiYWNrQmFzZT4gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgQ2FsbGJhY2tCYXNlKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAg
ICAgQ2FsbGJhY2tCYXNlKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgbG9uZyByZXF1ZXN0SWQp
OwogCiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZW5kRmFp
bHVyZShjb25zdCBFcnJvclN0cmluZyYpOwpAQCAtNjUsMTMgKzY2LDE1IEBAIHB1YmxpYzoKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKLSAgICAgICAgaW50IG1faWQ7Ci0gICAgICAgIGJvb2wgbV9hbHJlYWR5U2VudDsK
KyAgICAgICAgbG9uZyBtX3JlcXVlc3RJZDsKKyAgICAgICAgYm9vbCBtX2FscmVhZHlTZW50IHsg
ZmFsc2UgfTsKICAgICB9OwogCiAgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2Zyb250ZW5k
Q2hhbm5lbCA9IG51bGxwdHI7IH0KICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
ISFtX2Zyb250ZW5kQ2hhbm5lbDsgfQogCisgICAgdW5zaWduZWQgcHJvdG9jb2xFcnJvckNvdW50
KCkgY29uc3QgeyByZXR1cm4gbV9wcm90b2NvbEVycm9yQ291bnQ7IH0KKwogICAgIGVudW0gQ29t
bW9uRXJyb3JDb2RlIHsKICAgICAgICAgUGFyc2VFcnJvciA9IDAsCiAgICAgICAgIEludmFsaWRS
ZXF1ZXN0LApAQCAtODMsMTcgKzg2LDIwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKGNvbnN0IFN0cmluZyYgZG9tYWluLCBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciopOwogICAgIHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdl
KTsKLSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIGNhbGxJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpOwotICAg
IHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1v
bkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIGNvbnN0OwotICAgIHZvaWQg
cmVwb3J0UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9y
Q29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+PiYmIGRhdGEpIGNvbnN0OwotCi0gICAgc3RhdGljIGludCBnZXRJ
bnRlZ2VyKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVG
b3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMp
OwotICAgIHN0YXRpYyBkb3VibGUgZ2V0RG91YmxlKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBTdHJpbmcgZ2V0U3RyaW5nKElu
c3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0
YXRpYyBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBw
cm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0VmFs
dWUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7Ci0g
ICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUmVmUHRy
PEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz4mIHByb3RvY29sRXJyb3JzKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZXN1bHQsIGNvbnN0IEVycm9yU3RyaW5nJiBp
bnZvY2F0aW9uRXJyb3IpOworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihDb21tb25FcnJv
ckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2b2lkIHJlcG9ydFByb3Rv
Y29sRXJyb3IobG9uZyByZWxhdGVkUmVxdWVzdElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBn
ZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCogb3V0X29wdGlvbmFsVmFsdWVGb3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248
Ym9vbChJbnNwZWN0b3JWYWx1ZSYsIFQmKT4sIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKKworICAg
IGludCBnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCogdmFsdWVGb3VuZCk7CisgICAgZG91YmxlIGdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOworICAgIFN0cmluZyBnZXRTdHJp
bmcoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
KTsKKyAgICBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldFZh
bHVlKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0KEluc3BlY3Rvck9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwogCiBwcml2YXRlOgogICAgIEJhY2tlbmREaXNwYXRjaGVy
KEZyb250ZW5kQ2hhbm5lbCogRnJvbnRlbmRDaGFubmVsKQpAQCAtMTAxLDYgKzEwNywxNCBAQCBw
cml2YXRlOgogCiAgICAgRnJvbnRlbmRDaGFubmVsKiBtX2Zyb250ZW5kQ2hhbm5lbDsKICAgICBI
YXNoTWFwPFN0cmluZywgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqPiBtX2Rpc3BhdGNo
ZXJzOworCisgICAgLy8gQ291bnQgb2YgcHJvdG9jb2wgZXJyb3JzIHJlcG9ydGVkIGZvciB0aGUg
dG9wLWxldmVsIHJlcXVlc3QgYmVpbmcgcHJvY2Vzc2VkLgorICAgIC8vIElmIHByb2Nlc3Npbmcg
YSByZXF1ZXN0IHRyaWdnZXJzIGFzeW5jIHJlc3BvbnNlcywgdGhlbiBhbnkgcmVsYXRlZCBlcnJv
cnMgd2lsbAorICAgIC8vIGJlIGF0dHJpYnV0ZWQgdG8gdGhlIHRvcC1sZXZlbCByZXF1ZXN0Lgor
ICAgIHVuc2lnbmVkIG1fcHJvdG9jb2xFcnJvckNvdW50IHsgMCB9OworICAgIC8vIEZvciBzeW5j
aHJvbm91c2x5IGhhbmRsZWQgcmVxdWVzdHMsIGF2b2lkIHBsdW1iaW5nIHJlcXVlc3RJZCB0aHJv
dWdoIGV2ZXJ5CisgICAgLy8gY2FsbCB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGZhaWwgd2l0aCBh
IHByb3RvY29sIGVycm9yLgorICAgIE9wdGlvbmFsPGxvbmc+IG1fY3VycmVudFJlcXVlc3RJZCB7
IE51bGxvcHQgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAwNWYzNTMwOTc0ZTA1
OWQ3ZjljNjRmOWZlODk2MGU0NTMyY2FmZjhlLi43YzgxZDZiYzk5MmM5NjRjOWQxZWE2NmYwZWUw
YTY1NmJhZDJjMTU3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weQpAQCAtMTAxLDcgKzEwMSw3IEBAIHByb3RlY3RlZDoKICAgICAiIiIke2NsYXNz
QW5kRXhwb3J0TWFjcm99ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0
Y2hlciosICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBw
cml2YXRlOgogICAgICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0
Y2hlciYsICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTEyMywy
NCArMTIzLDMwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7
aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCisgICAgIiIidm9pZCAke2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKICR7ZGlzcGF0Y2hDYXNlc30KICAgICBl
bHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNh
bGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcXCcn
LCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0i
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0iIiIpCiAKICAgICBCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAg
UmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAg
ICB0eXBlZGVmIHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5k
bGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKworICAgIHR5cGVkZWYgdm9p
ZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpOwogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKLSAgICBERVBSRUNBVEVE
X0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7Ci0gICAg
aWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxE
aXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CisgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1w
dHkoKSkgewogICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVy
OwpAQCAtMTQ5LDE2ICsxNTUsMTYgQEAgJHtkaXNwYXRjaENhc2VzfQogICAgICAgICB9OwogICAg
ICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5kcyk7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRj
aE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgICAg
ICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0u
aGFuZGxlcik7CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRl
cmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7Ci0gICAgaWYgKGl0ID09IGRpc3Bh
dGNoTWFwLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtl
U3RyaW5nKCdcXCcnLCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZv
dW5kIikpOworICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0
aG9kKTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFt
ZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZS5nZXQoKSk7
CisgICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURjo6bW92ZShw
YXJhbWV0ZXJzKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkRvbWFpbkNvbnN0cnVjdG9yID0gKApAQCAtMTc4LDEzICsxODQsOSBAQCAke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlcgogfSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Q
cmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgKLSIiIiAgICBhdXRvIHByb3RvY29sRXJyb3JzID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwotICAgIG1lc3NhZ2UuZ2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7Ci0ke2luUGFyYW1ldGVy
RGVjbGFyYXRpb25zfQotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAg
ICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgXCclc1wnIGNhbid0IGJlIHByb2Nlc3NlZCIsICIke2RvbWFpbk5hbWV9LiR7Y29t
bWFuZE5hbWV9Iik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVz
c2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CisiIiIke2luUGFyYW1ldGVyRGVjbGFy
YXRpb25zfQorICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5wcm90b2NvbEVycm9yQ291bnQo
KSA+IDApIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUg
YXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7ZG9tYWlu
TmFtZX0uJHtjb21tYW5kTmFtZX0iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAiIiIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDU0YmRiM2U5MWFjMDcxNWQ3YTZjZTJiMzZmNTVj
YzNmMjQzMTVhZDYuLjU5YjI5ZTRhMmE2YmEwYjY0MThjOWE3MGFjMjUxOGYyYTlhZTkwNWMgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0yMDUsNCArMjA1LDQgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9kb21haW4oZG9tYWluLCBUZW1wbGF0ZShDcHBUZW1w
bGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24p
LnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAg
ICByZXR1cm4gIiAgICB2b2lkICVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQorICAgICAgICByZXR1cm4gIiAgICB2
b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRl
cnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKaW5kZXggMzUwZjA4NTRjYjlhNTZlNzg3YjlkZmI1ZThjOWEwOGVmYmRjZTEx
OC4uODIwYmQ4MGIyYjZhMDM5OWJkNzZiZDQ3NGQwMjFkOWE5Yzc0ZjY4NCAxMDA3NTUKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2Vu
ZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIENw
cEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAg
ICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAogICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL05ldmVyRGVzdHJveWVkLmg+JywKICAg
ICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCiAKICAgICAgICAgc2Vjb25kYXJ5X2lu
Y2x1ZGVzID0gWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlf
aGVhZGVyc10KQEAgLTEwNCwxMCArMTA1LDEwIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3Nt
YWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9t
YWluKToKICAgICAgICAgY2FzZXMgPSBbXQogICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAo
bWV0aG9kID09ICIlcyIpJyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCi0gICAg
ICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQsIG1lc3NhZ2UpOycgJSBkb21haW4u
Y29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAg
JXMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOycgJSBkb21haW4uY29tbWFuZHNb
MF0uY29tbWFuZF9uYW1lKQogICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNb
MTpdOgogICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIl
cyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcg
ICAgICAgICVzKGNhbGxJZCwgbWVzc2FnZSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAg
ICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBh
cmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUpCiAKICAgICAgICAgc3dpdGNoX2Fy
Z3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAg
LTE3MCw3ICsxNzEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMg
PSBbXQogICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hl
cl9tZXRob2RfcGFyYW1ldGVycyA9IFsnY2FsbElkJ10KKyAgICAgICAgYWx0ZXJuYXRlX2Rpc3Bh
dGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMgPSBbJ3JlcXVlc3RJZCddCiAgICAgICAgIG1ldGhvZF9w
YXJhbWV0ZXJzID0gWydlcnJvciddCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyczoKQEAgLTIwNyw3ICsyMDgsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICAg
ICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShw
YXJhbWV0ZXJUeXBlKXMgJShwYXJhbWV0ZXJOYW1lKXMgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6JShr
ZXllZEdldE1ldGhvZClzKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCIlKHBh
cmFtZXRlcktleSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMu
YXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlM
aXRlcmFsKCIlKHBhcmFtZXRlcktleSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMpOycgJSBwYXJh
bV9hcmdzKQogCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAg
ICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUp
c192YWx1ZUZvdW5kID8gJShwYXJhbWV0ZXJFeHByZXNzaW9uKXMgOiBudWxscHRyJyAlIHBhcmFt
X2FyZ3MKQEAgLTIyNCw3ICsyMjUsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGNhbGxiYWNrLT5k
aXNhYmxlKCk7JykKLSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKKyAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7JykKICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIHJldHVybjsnKQogICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5k
KCdjYWxsYmFjay5jb3B5UmVmKCknKQogCkBAIC0yNjcsOSArMjY4LDkgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAg
ICAgIGxpbmVzID0gW10KICAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9
PSAwOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2Vu
ZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiknICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lk
ICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiknICUgY29tbWFuZF9hcmdzKQogICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRl
cnMpJyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKIAogICAgICAg
ICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID4gMDoKQEAgLTI4Niw3ICsyODcsNyBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjwlKGRvbWFpbk5hbWUpc0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZigq
bmV3ICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFt
ZSlzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBjYWxsSWQpKTsnICUgY29tbWFuZF9h
cmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPCUoZG9tYWluTmFtZSlzQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0
UmVmKCpuZXcgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJh
Y2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOycgJSBj
b21tYW5kX2FyZ3MpCiAgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+
IDA6CiAgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCkBAIC0zMDUsNiArMzA2LDYg
QEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCiAgICAgICAgIGlmIG5vdCBj
b21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9y
KTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsnKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gIlxuIi5qb2luKGxpbmVzKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IDE1ZDZhNGQ5ZTEwMzc3
NmUyYTljZDBkMTRjOTVjNTZiZDE2YjdhODMuLjc1OTJkNGEwMDE2ZGM4Y2M4YjA2YTQyNDVhOGI3
NzIxM2ZkMDQ0OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
LXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAg
LTE4NywxMiArMTg3LDEyIEBAIHByb3RlY3RlZDoKIGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJh
Y2tlbmREaXNwYXRjaGVyKiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZvaWQg
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKIHByaXZh
dGU6CiAgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0yNDUsNiArMjQ1LDcgQEAgcHJpdmF0ZToKIAog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNzAsMzggKzI3MSwzNyBAQCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwogfQogCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJ
SUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKwogICAgIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVT
UUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVy
cykpOwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhj
YWxsSWQsIG1lc3NhZ2UpOworICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAgICAgZWxzZSBpZiAobWV0
aG9kID09ICJleGVjdXRlU1FMU3luYyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jKGNhbGxJZCwg
bWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBh
cmFtZXRlcnMpKTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpCi0g
ICAgICAgIGV4ZWN1dGVTUUxBc3luYyhjYWxsSWQsIG1lc3NhZ2UpOworICAgICAgICBleGVjdXRl
U1FMQXN5bmMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFi
YXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAiJyB3
YXMgbm90IGZvdW5kIikpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewotICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7Ci0gICAgbWVzc2FnZS5nZXRPYmpl
Y3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKLSAgICBpbnQgaW5f
ZGF0YWJhc2VJZCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJy
b3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxs
cHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFz
ZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIik7Ci0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3Jz
KSk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRl
Z2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRy
KTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyKTsKKyAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+cHJvdG9jb2xFcnJvckNvdW50KCkgPiAwKSB7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyBjYWxsSWQsCiAgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCiAgICAg
ICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgb3V0
X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3Vs
dCksIGVycm9yKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tl
bmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShX
VEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CkBAIC0zNzMsNTQgKzM3Myw0NiBA
QCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYQogICAgIHNlbmRJZkFjdGl2ZShXVEY6Om1vdmUoanNv
bk1lc3NhZ2UpLCBFcnJvclN0cmluZygpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewotICAgIGF1dG8gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUo
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7Ci0gICAgbWVz
c2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsK
LSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBh
cmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJx
dWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgaWYgKHByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOwotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShw
cm90b2NvbEVycm9ycykpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNl
SWQiKSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVs
bHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPnByb3RvY29sRXJyb3JDb3VudCgp
ID4gMCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5f
cXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBFcnJvclN0cmlu
ZyBlcnJvcjsKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBh
ZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29w
eVJlZigpLCBjYWxsSWQpKTsKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNr
ID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVy
LmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7CiAgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFj
ay5jb3B5UmVmKCkpOwogCiAgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgIGNhbGxi
YWNrLT5kaXNhYmxlKCk7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKLSAgICBhdXRvIHByb3RvY29sRXJyb3Jz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwotICAgIG1lc3NhZ2UuZ2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7Ci0gICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9ycy5nZXQoKSk7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gQmFja2VuZERpc3BhdGNoZXI6Omdl
dFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJh
c2UuZXhlY3V0ZVNRTFN5bmMiKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
ZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKKyAgICBpbnQgaW5fZGF0
YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9x
dWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBB
U0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRj
aGVyLT5wcm90b2NvbEVycm9yQ291bnQoKSA+IDApIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlU1FMU3luYyhjYWxsSWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQs
IGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgpAQCAtNDUxLDcgKzQ0Myw3IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjCiAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CiAgICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwogICAgIH0K
LSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUo
cmVzdWx0KSwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBp
bnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEY6Om1vdmUoYmFja2Vu
ZERpc3BhdGNoZXIpLCBpZCkgeyB9CkBAIC00NzIsMzQgKzQ2NCwzMCBAQCB2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUAogICAgIHNlbmRJZkFjdGl2ZShXVEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBFcnJv
clN0cmluZygpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3Zv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXV0byBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBt
ZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIp
OwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIo
cGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0
ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwo
InF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBpZiAocHJvdG9j
b2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIpOwotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpJ
bnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOwor
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihw
YXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7Cisg
ICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFt
ZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7CisgICAgaWYgKG1f
YmFja2VuZERpc3BhdGNoZXItPnByb3RvY29sRXJyb3JDb3VudCgpID4gMCkgeworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMoY2FsbElkLCBpbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNR
TEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICBSZWY8SW5z
cGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJl
ZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVm
KCksIGNhbGxJZCkpOworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNr
ZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwogICAgIG1fYWdlbnQtPmV4ZWN1
dGVTUUxBc3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlS
ZWYoKSk7CiAKICAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmRp
c2FibGUoKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CmluZGV4IGUzNDllY2Y2ZjA4ZDBhZjRmZjg2MzI4YzczYTE2Yjc2MzBiYWUwZGUu
LjVkOGY5YmYyYzFmYjliYTU2YjkwNTE2ODJhMzhjOWM5MTJiYzA3MjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21t
YW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dApAQCAtMTcwLDEwICsxNzAsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXIqLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAg
dm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZv
aWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0yMjYsNiArMjI2LDcg
QEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNTEsNTIgKzI1
Miw1MSBAQCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRo
aXMpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNz
YWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2Fn
ZSkKIHsKICAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CiAKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2Ut
PmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKwogICAgIGlm
IChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykp
OwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikK
LSAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2FnZSk7Cisg
ICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURjo6bW92ZShw
YXJhbWV0ZXJzKSk7CiAgICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBm
b3VuZCIpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRh
dGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXV0byBw
cm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBt
ZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIp
OwogICAgIGJvb2wgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gQmFj
a2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4g
b3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9u
b3Rlc192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3RyaW5nIG9wdF9p
bl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7CiAgICAg
Ym9vbCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBvcHRfaW5fdGltZXN0YW1wID0gQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgi
dGltZXN0YW1wIiksICZvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3Jz
LmdldCgpKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBvcHRf
aW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICZvcHRfaW5fdGltZXN0YW1wX3ZhbHVl
Rm91bmQpOwogICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gQmFja2Vu
ZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJh
bCgidmFsdWVzIiksICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdl
dCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1
ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJ2YWx1ZXMiKSwgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7CiAgICAgYm9v
bCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yVmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gQmFja2VuZERpc3BhdGNoZXI6Omdl
dFZhbHVlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXls
b2FkIiksICZvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9kYXRh
YmFzZUlkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJk
YXRhYmFzZUlkIiksICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9w
dF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBvcHRfaW5fc3FsRXJyb3IgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
T2JqZWN0KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAm
b3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl9zcWxFcnJvciA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
InNxbEVycm9yIiksICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRf
aW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2Ny
ZWVuQ29sb3IgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmb3B0X2luX3NjcmVlbkNvbG9yX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgb3B0X2luX3NjcmVl
bkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCks
IEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJm9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZv
dW5kKTsKICAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgJm9wdF9pbl9hbHRlcm5hdGVDb2xv
cnNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvckFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5h
dGVDb2xvcnMiKSwgJm9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7CiAgICAgYm9v
bCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9p
bl9wcmludENvbG9yID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmb3B0X2luX3ByaW50Q29sb3Jf
dmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpOwotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9y
cykpOworICAgIFN0cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwg
Jm9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRj
aGVyLT5wcm90b2NvbEVycm9yQ291bnQoKSA+IDApIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJl
IHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElk
LCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51
bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDog
bnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6
IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQo
KSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFi
YXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxF
cnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9w
dF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVG
b3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJp
bnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7CisgICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhy
ZXF1ZXN0SWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVtbk5h
bWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2luX25v
dGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90aW1l
c3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFsdWVz
LmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9wYXls
b2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZvcHRf
aW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8gb3B0
X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91
bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNvbG9y
c192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIsIG9w
dF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxscHRy
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzM3LDMzICszMzcsMjkgQEAg
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdAogICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3Np
Z25lZCgpKQogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmlu
dENvbG9yIiksIG91dF9wcmludENvbG9yLmdldFZhbHVlKCkpOwogICAgIH0KLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJy
b3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewotICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7Ci0gICAgbWVzc2FnZS5nZXRPYmplY3QoQVND
SUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMg
PSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVND
SUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAg
ZG91YmxlIGluX3RpbWVzdGFtcCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1z
Q29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBpbl92YWx1ZXMgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMu
Z2V0KCkpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2Fk
ID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVND
SUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmpl
Y3Q+IGluX3NxbEVycm9yID0gQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250
YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xF
cnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IEJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVl
bkNvbG9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gQmFja2VuZERpc3Bh
dGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRl
cm5hdGVDb2xvcnMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmlu
ZyBpbl9wcmludENvbG9yID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250
YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9ycy5nZXQoKSk7Ci0gICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewotICAg
ICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRz
IG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMiKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
ZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVz
IiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG51bGxw
dHIpOworICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRE
b3VibGUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0
cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl92YWx1ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJ2YWx1ZXMiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwYXJhbWV0
ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgbnVsbHB0cik7CisgICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJyb3Ii
KSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29s
b3IiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGlu
X2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIpOworICAg
IFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCBudWxscHRyKTsKKyAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+cHJvdG9jb2xFcnJvckNvdW50KCkgPiAwKSB7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhjYWxsSWQsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVz
dGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJv
ciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOwor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhyZXF1ZXN0SWQsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmlu
X3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2Ny
ZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zOTQsNyArMzkwLDcgQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQs
IGNvbnN0IEkKICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0
ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKICAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjpt
b3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21h
aW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDE5MGIyNjAw
MjNjYmM4NmFhYjU0NDJhMGFlYzRkZjVjN2JkYzY3NWIuLmRhMTE0ZWQ3ZjZiYjk4ZTU4ZDBiYTdm
MDNjYjNiNGIxMGZlMTkzYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24tcmVzdWx0CkBAIC0xODgsOSArMTg4LDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIqLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZh
dGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKIHByaXZhdGU6CiAgICAgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIG1fYWdlbnQ7CkBAIC0yMDUsMTUgKzIwNSwxNSBAQCBwcml2YXRlOgogY2xhc3MgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIqLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZh
dGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCwgY29u
c3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2Fk
UmVzb3VyY2U0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQg
bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U2
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKIHByaXZhdGU6CiAgICAgTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7CiAgICAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0y
NjYsNiArMjY2LDcgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBA
IC0yOTIsMjEgKzI5MywyNCBAQCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5l
dHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9i
amVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOwor
ICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJz
KTsKKwogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKQotICAgICAgICBsb2FkUmVz
b3VyY2UxKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElk
LCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsxIiwgJy4nLCBtZXRob2Qs
ICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3Ry
aW5nKCdcJycsICJOZXR3b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwog
fQogCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAg
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmxvYWRSZXNvdXJjZTEoY2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKQEAgLTMxNSw3ICszMTksNyBAQCB2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShy
ZXN1bHQpLCBlcnJvcik7CiB9CiAKIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIqIGJhY2tlbmRE
aXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCkBAIC0z
MzMsMTQgKzMzNywxNyBAQCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdv
cmszIiksIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVj
dD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CiAKLSAgICB0eXBlZGVmIHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OipDYWxsSGFuZGxlcikobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdl
LT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKKyAgICB0
eXBlZGVmIHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSk7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFwOwotICAgIERFUFJF
Q0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0Y2hNYXAsICgpKTsK
LSAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKKyAgICBpZiAoZGlzcGF0Y2hNYXAuZ2V0KCku
aXNFbXB0eSgpKSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0aG9kVGFibGUgewog
ICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICAgICAgICAgIENhbGxIYW5kbGVyIGhh
bmRsZXI7CkBAIC0zNTUsMjMgKzM2MiwyMyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPAogICAg
ICAgICB9OwogICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjb21tYW5k
cyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAgICAg
ICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxl
cik7CisgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwg
Y29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgSGFzaE1hcDxTdHJpbmcsIENhbGxI
YW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5kKG1ldGhvZCk7Ci0gICAgaWYg
KGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3JrMyIsICcuJywgbWV0aG9kLCAiJyB3YXMg
bm90IGZvdW5kIikpOworICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZp
bmQobWV0aG9kKTsKKyAgICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQo
KSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29y
azMiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+dmFsdWUpKGNhbGxJZCwgbWVzc2FnZS5nZXQoKSk7
CisgICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURjo6bW92ZShw
YXJhbWV0ZXJzKSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3ZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShjYWxsSWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzgwLDE0ICszODcsMTQgQEAgdm9pZCBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOwogCi0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3Vs
dCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIoY2Fs
bElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVl
c3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM5NiwxNCArNDAzLDE0
IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2UyKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAot
dm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2UzKGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
CkBAIC00MTIsMTQgKzQxOSwxNCBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMyhlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1
bHQpLCBlcnJvcik7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3ZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChjYWxsSWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocmVxdWVzdElkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgpAQCAtNDI4LDE0ICs0MzUsMTQgQEAgdm9pZCBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOwogCi0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3Vs
dCksIGVycm9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUoY2Fs
bElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1KHJlcXVl
c3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQ0NCwxNCArNDUxLDE0
IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U1KGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAot
dm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
Ojpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U2KGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
CkBAIC00NjAsMTQgKzQ2NywxNCBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1
bHQpLCBlcnJvcik7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3ZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhjYWxsSWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTcocmVxdWVzdElkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgpAQCAtNDc2LDcgKzQ4Myw3IEBAIHZvaWQgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsKIAotICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQp
LCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1y
ZXN1bHQKaW5kZXggOWQ3NDg1M2MyZjUzM2U2ZTEzMDU0NWQ0NTYyYzM5OWY4NjAzZDhiYy4uNTFi
YjcyNzlmMzkyMjgxM2ZiMzA0YmQ0YmQ0OTU3MDAzNDM5YTcxMSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFs
dWVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApAQCAtMTY5LDkgKzE2
OSw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciosIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZv
aWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKIHBy
aXZhdGU6CiAgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0yMjQsNiArMjI0
LDcgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNDksMjEg
KzI1MCwyNCBAQCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkNvbW1hbmREb21h
aW4iKSwgdGhpcyk7CiB9CiAKLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JP
YmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0
b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBh
cmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiks
IHBhcmFtZXRlcnMpOworCiAgICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUiKQotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShjYWxsSWQsIG1lc3Nh
Z2UpOworICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQsIFdURjo6
bW92ZShwYXJhbWV0ZXJzKSk7CiAgICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiQ29tbWFuZERvbWFpbiIsICcuJywgbWV0aG9kLCAi
JyB3YXMgbm90IGZvdW5kIikpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmlu
ZygnXCcnLCAiQ29tbWFuZERvbWFpbiIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikp
OwogfQogCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhF
bnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lk
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgpAQCAtMjc2LDcgKzI4MCw3IEBAIHZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCwgY29u
CiAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJyZXR1cm5WYWx1ZSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3Vs
dCksIGVycm9yKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZl
bnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRp
b25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDRiNjIyZDlkZTU0M2Q0YzFlZDJlYWFl
N2Q5MDI1NDZlM2ZlMGMyOWQuLmFkNTI2ZDNhZTk2MTBiZjU1MjhhZjEzMmI3NmJmYTk1MDYxMGQy
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0xODAs
NiArMTgwLDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNv
bi1yZXN1bHQKaW5kZXggYmI4ZDI5ZDg0YmY2Y2Y0NjNmODQ5MjQ3ODgzYmY3NjdlYzY2YmEzOS4u
NWMwNWJlODAwZmNkNzA2ZDE1MTgxYTk1MmEzMThkYzQ2MTMwYjQwMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVy
YXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC0xNjUsOSArMTY1LDkg
QEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIq
LCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JP
YmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4m
JiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CiBwcml2YXRlOgogICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwpAQCAtMjIxLDYgKzIyMSw3IEBA
IHByaXZhdGU6CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
Lmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjQ5LDIxICsyNTAs
MjQgQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlz
KTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2Fn
ZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
CiB7CiAgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwog
CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5n
ZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKICAgICBpZiAo
bWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKQotICAgICAgICBsb2FkUmVzb3VyY2UoY2FsbElkLCBt
ZXNzYWdlKTsKKyAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFt
ZXRlcnMpKTsKICAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBt
YWtlU3RyaW5nKCdcJycsICJOZXR3b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5k
IikpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29y
azEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KIAotdm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
KGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJl
cXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTI3Miw3ICsyNzYs
NyBAQCB2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JgogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKIH0KICNl
bmRpZiAvLyBQTEFURk9STShXRUJfQ09NTUFORFMpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQt
ZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFp
bi5qc29uLXJlc3VsdAppbmRleCBjMjcyZjcyYjZmMDkzYjEyYzhkYzhjZjA0MTU5NjBmMDdhMjhh
Mzk5Li4zMGNjZTE4NTFjZTljMzliODIxYzYzM2NhOGU4M2FiZmNiZGM3YzhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CkBAIC0xNzQsNiArMTc0LDcgQEAgdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dl
ZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggYTgxODZlMGIwYmE4MTE0
MDVkNDUwYzRjNDliNWU0MDdiZjZhNTZjMS4uMjhlMTQ1NjU1YjA3YzYwYTFkMTk5NWE0ZjZiMGI0
OWQwOTgwNWZhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
LXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CkBA
IC0xNzQsNiArMTc0LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1w
cmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0
aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNTNiM2YyMjE2NjlhOGVjMDQzZDBmYjk5YzNkZjc3
OGM2ZWZkNmIyYy4uOGJiZmMyOWU4MWUzYzhmZmI5ZDFkMmQ5ZjNiMTRkYjNiY2NhMDJiNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0
CkBAIC0xNzQsNiArMTc0LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNs
dWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQK
aW5kZXggN2U5ZWYxZThhMDJmZTAwOGUxMWY1YmI1ZDdlZTVkYTA3N2UzYjI1YS4uZDBmNGFmMTNj
MWNmYzYxNzc5ZTc3OGM4NDAzZTI5NjgzN2E4ZjQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRp
b24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBl
Lmpzb24tcmVzdWx0CkBAIC0xNzcsNiArMTc3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAj
aW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFy
YXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24tcmVzdWx0CmluZGV4IDZkNjNkZDVhZTBjZTEyMmIyZDBjMjYyYTkxNGU2ZjI1M2Q3OWFiYjEu
LjM0YzI4NWM2MDEyMDBlM2UxYzIzZDk2ZDlmOGRjYWY0MDYzMjYwYzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1l
bnVtLXR5cGUuanNvbi1yZXN1bHQKQEAgLTE3OCw2ICsxNzgsNyBAQCB0eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IDZlOTQ5NDFiYzFlM2I2MThiOTg0MjQ4OGJiMTBm
NWYzMzA0MjZlM2UuLjYwZGI1ZWMyNjBiZDFjODgyMTZmNjRkZjJlMjRkNTE1ZDY4NTlhYTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC0xNzQsNiArMTc0LDcgQEAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAppbmRleCA5ZWIxZDQwZGRlYjRk
ZGQ2ZDFhYThjM2UwYmY2YzY2YzhhZjcwZTUzLi4zYzE3NmY1MDgyZGJkZGFiNTQxMGIyMzVlNGIx
MzVmMzk1YWI5OWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29u
LXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdApAQCAt
MTc4LDYgKzE3OCw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259866</attachid>
            <date>2015-08-25 11:50:29 -0700</date>
            <delta_ts>2015-08-25 15:19:29 -0700</delta_ts>
            <desc>Proposed Fix</desc>
            <filename>bug-146466-20150825115017.patch</filename>
            <type>text/plain</type>
            <size>107371</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4ODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NzY4ODc3N2I4M2UxZGQxY2UwZGMxMTUxNmMwY2VjOWY2OGJjZjM1Li45OWM0YTRiNjdmZmZjNDk5
ZmY1MGI2ZDllMDVmNGU3YWIxYTM0YTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5MCBAQAorMjAxNS0wOC0yNSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBubyBuZWVkIHRvIGFsbG9jYXRlIHByb3RvY29sRXJyb3Jz
IGFycmF5IGZvciBldmVyeSBkaXNwYXRjaGVkIGJhY2tlbmQgY29tbWFuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NDY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2xlYW4gdXAgc29tZSBvZiB0aGUg
YmFja2VuZCBkaXNwYXRjaGVyIGNvZGUsIHdpdGggYSBmb2N1cyBvbiBlbGltaW5hdGluZyB1c2Vs
ZXNzIGFsbG9jYXRpb25zCisgICAgICAgIG9mIG9iamVjdHMgaW4gdGhlIGNvbW1vbiBjYXNlIHdo
ZW4gbm8gcHJvdG9jb2wgZXJyb3JzIGhhcHBlbi4gVGhpcyBpcyBkb25lIGJ5IHNhdmluZyB0aGUK
KyAgICAgICAgY3VycmVudCBpZCBvZiBlYWNoIHJlcXVlc3QgYXMgaXQgaXMgYmVpbmcgcHJvY2Vz
c2VkIGJ5IHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIsIGFuZCB0YWdnaW5nIGFueQorICAgICAgICBz
dWJzZXF1ZW50IGVycm9ycyB3aXRoIHRoYXQgaWQuIFRoaXMgYWxzbyBtZWFucyB3ZSBkb24ndCBo
YXZlIHRvIHRocmVhZCB0aGUgcmVxdWVzdElkIGV4Y2VwdAorICAgICAgICBpbiB0aGUgYXN5bmMg
Y29tbWFuZCBjb2RlIHBhdGguCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGxpZnRzIHNvbWUg
Y29tbW9uIGNvZGUgc2hhcmVkIGJldHdlZW4gYWxsIGdlbmVyYXRlZCBiYWNrZW5kIGNvbW1hbmQK
KyAgICAgICAgaW1wbGVtZW50YXRhdGlvbnMgaW50byB0aGUgcGVyLWRvbWFpbiBkaXNwYXRjaCBt
ZXRob2QgaW5zdGVhZC4gVGhpcyByZWR1Y2VzIGdlbmVyYXRlZCBjb2RlIHNpemUuCisKKyAgICAg
ICAgVG8gYmUgY29uc2lzdGVudCwgdGhpcyBwYXRjaCBzdGFuZGFyZGl6ZXMgb24gY2FsbGluZyB0
aGUgaWQgb2YgYSBiYWNrZW5kIG1lc3NhZ2UgaXRzICdyZXF1ZXN0SWQnLgorICAgICAgICBSZXF1
ZXN0cyBjYW4gYmUgaGFuZGxlZCBzeW5jaHJvbm91c2x5IG9yIGFzeW5jaHJvbm91c2x5ICh0cmln
Z2VyZWQgdmlhIHRoZSAnYXN5bmMnIHByb3BlcnR5KS4KKworICAgICAgICBObyBuZXcgdGVzdHMs
IGNvdmVyZWQgYnkgZXhpc3RpbmcgcHJvdG9jb2wgdGVzdHMuCisKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpDYWxsYmFja0Jhc2UpOiBTcGxpdCB0aGUg
dHdvIGNvZGUgcGF0aHMgZm9yIHJlcG9ydGluZworICAgICAgICBzdWNjZXNzIGFuZCBmYWlsdXJl
LgorCisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRGYWlsdXJlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MpOiBSZW5hbWVkIGZyb20gc2VuZElmQWN0aXZlLgorICAg
ICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gpOiBSZXNldCBjb3Vu
dGVycyBhbmQgY3VycmVudCByZXF1ZXN0SWQgYmVmb3JlIGRpc3BhdGNoaW5nLgorICAgICAgICBO
byBuZWVkIHRvIG1hbnVhbGx5IHRocmVhZCB0aGUgcmVxdWVzdElkIHRvIGFsbCByZXBvcnRQcm90
b2NvbEVycm9yIGNhbGxzLgorCisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpzZW5kUmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6
c2VuZFBlbmRpbmdFcnJvcnMpOiBTZW5kIGFueSBzYXZlZCBwcm90b2NvbCBlcnJvcnMgdG8gdGhl
IGZyb250ZW5kLgorICAgICAgICBBbHdheXMgc2VuZCBhICdkYXRhJyBtZW1iZXIgd2l0aCBhbGwg
b2YgdGhlIGVycm9ycywgZXZlbiBpZiB0aGVyZSdzIGp1c3Qgb25lLiBXZSBtaWdodCB3YW50IHRv
IGFkZAorICAgICAgICBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGVycm9ycyBsYXRlci4KKworICAg
ICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcik6
IEVucXVldWUgYSBwcm90b2NvbCBlcnJvciB0byBiZSBzZW50IGxhdGVyLgorICAgICAgICAoSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvcGVydHlWYWx1ZSk6IFJlbW92ZSB1c2Vs
ZXNzIHR5cGUgcGFyYW1ldGVycyBhbmQgbnVrZSBtb3N0IG9mCisgICAgICAgIHRoZSB0eXBlIGNv
bnZlcnNpb24gbWV0aG9kcy4gVXNlIHN0ZDo6ZnVuY3Rpb24gdHlwZXMgaW5zdGVhZCBvZiBmdW5j
dGlvbiBwb2ludGVyIHR5cGVzLgorCisgICAgICAgIChJbnNwZWN0b3I6OmNhc3RUb0ludGVnZXIp
OiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVyKTogQWRkZWQuCisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpnZXRQcm9wZXJ0eVZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc0ludGVnZXIp
OiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6OmFzRG91Ymxl
KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc1N0cmlu
Zyk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9kQnJpZGdlczo6YXNCb29s
ZWFuKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlkZ2VzOjphc09i
amVjdCk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9kQnJpZGdlczo6YXNB
cnJheSk6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9kQnJpZGdlczo6YXNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weTogRXh0cmFjdCAncGFyYW1zJyBvYmplY3QgaW4gZG9tYWluIGRpc3Bh
dGNoIG1ldGhvZC4KKyAgICAgICAgT21pdCByZXF1ZXN0SWRzIHdoZXJlIHBvc3NpYmxlLiBDb252
ZXJ0IGRpc3BhdGNoIHRhYmxlcyB0byB1c2UgTmV2ZXJEZXN0cm95ZWQuIENoZWNrIHRoZSBwcm90
b2NvbCBlcnJvciBjb3VudAorICAgICAgICB0byBkZWNpZGUgd2hldGhlciB0byBhYm9ydCB0aGUg
ZGlzcGF0Y2ggb3Igbm90LCByYXRoZXIgdGhhbiBhbGxvY2F0aW5nIG91ciBvd24gZXJyb3JzIGFy
cmF5LgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weTogUmV2ZXJ0IHRvIHBhc3NpbmcgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4KKyAgICAgICAgc2luY2UgcGFyYW1ldGVycyBhcmUgbm93IGJlaW5nIHBh
c3NlZCByYXRoZXIgdGhhbiB0aGUgbWVzc2FnZSBvYmplY3QuIFNvbWUgY29tbWFuZHMgZG8gbm90
IHJlcXVpcmUgcGFyYW1ldGVycy4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHk6CisgICAgICAgICh2b2lkKToKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3NtYWxsX2Rpc3Bh
dGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgIFJlYmFzZWxpbmUgc29tZSBw
cm90b2NvbCBnZW5lcmF0b3IgdGVzdHMuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1h
bmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0OgorICAgICAg
ICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxp
YXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OgorCiAyMDE1LTA4LTI0ICBCcmlhbiBCdXJn
ICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBwcm90b2Nv
bCB0ZXN0IGZvciBleGlzdGluZyBlcnJvciBoYW5kbGluZyBwZXJmb3JtZWQgYnkgdGhlIGJhY2tl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGYxZDQ2YTE5NzVmYWQ3Y2U2OGI0YjdlNzlh
MGYzY2FiZTQ2OTczZDEuLmRlZDg0ZDRlZDQ2NmE1OTJiOTU2OWM5Nzc2MWEyNmY0YzU2NDE0OTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDE1LTA4LTI1ICBC
cmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5v
IG5lZWQgdG8gYWxsb2NhdGUgcHJvdG9jb2xFcnJvcnMgYXJyYXkgZm9yIGV2ZXJ5IGRpc3BhdGNo
ZWQgYmFja2VuZCBjb21tYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDY0NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGVzdFN0dWIuaHRtbDogRml4IGEgdHlwbywgdGhp
cyBwcm9wZXJ0eSBleGlzdHMgb24gUHJvdG9jb2xUZXN0LgorCiAyMDE1LTA4LTI0ICBCcmlhbiBC
dXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFkZCBwcm90
b2NvbCB0ZXN0IGZvciBleGlzdGluZyBlcnJvciBoYW5kbGluZyBwZXJmb3JtZWQgYnkgdGhlIGJh
Y2tlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKaW5kZXggZDY3YWI5OTRiZWViYjkwYWI0
OGUyYzJmMWZhM2NlM2QwNjY1YjY4OC4uNGZmMzJkNzUzNGNiZTkzYzcwYTZhNmNiMzgwYjA2OGUw
N2YzYjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNCwxMCArMzQsOSBAQAogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2Fs
bGJhY2tCYXNlKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKQorQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKFJlZjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgbG9uZyByZXF1ZXN0SWQpCiAg
ICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKFdURjo6bW92ZShiYWNrZW5kRGlzcGF0Y2hlcikpCi0g
ICAgLCBtX2lkKGlkKQotICAgICwgbV9hbHJlYWR5U2VudChmYWxzZSkKKyAgICAsIG1fcmVxdWVz
dElkKHJlcXVlc3RJZCkKIHsKIH0KIApAQCAtNDksMTYgKzQ4LDI0IEBAIGJvb2wgQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6aXNBY3RpdmUoKSBjb25zdAogdm9pZCBCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kRmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYgZXJy
b3IpCiB7CiAgICAgQVNTRVJUKGVycm9yLmxlbmd0aCgpKTsKLSAgICBzZW5kSWZBY3RpdmUobnVs
bHB0ciwgZXJyb3IpOworCisgICAgaWYgKG1fYWxyZWFkeVNlbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fYWxyZWFkeVNlbnQgPSB0cnVlOworCisgICAgLy8gSW1tZWRpYXRlbHkgc2VuZCBh
biBlcnJvciBtZXNzYWdlIHNpbmNlIHRoaXMgaXMgYW4gYXN5bmMgcmVzcG9uc2Ugd2l0aCBhIHNp
bmdsZSBlcnJvci4KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KG1fcmVxdWVzdElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZTo6c2VuZElmQWN0aXZlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFydGlh
bE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCit2b2lkIEJhY2tl
bmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCiB7CiAgICAgaWYgKG1fYWxyZWFkeVNlbnQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShtX2lk
LCBXVEY6Om1vdmUocGFydGlhbE1lc3NhZ2UpLCBpbnZvY2F0aW9uRXJyb3IpOwogICAgIG1fYWxy
ZWFkeVNlbnQgPSB0cnVlOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZSht
X3JlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcnRpYWxNZXNzYWdlKSk7CiB9CiAKIFJlZjxCYWNrZW5k
RGlzcGF0Y2hlcj4gQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShGcm9udGVuZENoYW5uZWwqIGZy
b250ZW5kQ2hhbm5lbCkKQEAgLTc2LDgzICs4Myw5NCBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPEJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIG1fcHJvdG9jb2xFcnJvcnMuY2xlYXIoKTsK
KyAgICBtX2N1cnJlbnRSZXF1ZXN0SWQgPSBOdWxsb3B0OworCiAgICAgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBwYXJzZWRNZXNzYWdlOwogICAgIGlmICghSW5zcGVjdG9yVmFsdWU6OnBhcnNlSlNP
TihtZXNzYWdlLCBwYXJzZWRNZXNzYWdlKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KG51bGxwdHIsIFBhcnNlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0IGJlIGluIEpT
T04gZm9ybWF0IikpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKFBhcnNlRXJyb3IsIEFT
Q0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0IikpOworICAgICAgICBz
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdDsKICAgICBpZiAoIXBhcnNlZE1lc3NhZ2Ut
PmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
bnVsbHB0ciwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0IGJlIGEg
SlNPTmlmaWVkIG9iamVjdCIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlk
UmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0
IikpOworICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZTsKLSAgICBpZiAoIW1l
c3NhZ2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgY2FsbElkVmFsdWUpKSB7
Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IobnVsbHB0ciwgSW52YWxpZFJlcXVlc3QsIEFT
Q0lJTGl0ZXJhbCgiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIikpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4gcmVxdWVzdElkVmFsdWU7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5n
ZXRWYWx1ZShBU0NJSUxpdGVyYWwoImlkIiksIHJlcXVlc3RJZFZhbHVlKSkgeworICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIidpZCcgcHJv
cGVydHkgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvbmcgY2FsbElkID0gMDsKLSAgICBpZiAoIWNh
bGxJZFZhbHVlLT5hc0ludGVnZXIoY2FsbElkKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKG51bGxwdHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIlRoZSB0eXBlIG9mICdp
ZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIikpOworICAgIGxvbmcgcmVxdWVzdElkID0gMDsK
KyAgICBpZiAoIXJlcXVlc3RJZFZhbHVlLT5hc0ludGVnZXIocmVxdWVzdElkKSkgeworICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIlRoZSB0
eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIikpOworICAgICAgICBzZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgbV9jdXJyZW50UmVx
dWVzdElkID0gcmVxdWVzdElkOworCiAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBtZXRob2RW
YWx1ZTsKICAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJTGl0ZXJhbCgibWV0
aG9kIiksIG1ldGhvZFZhbHVlKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIidtZXRob2QnIHByb3BlcnR5IHdhc24n
dCBmb3VuZCIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwg
QVNDSUlMaXRlcmFsKCInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiKSk7CisgICAgICAg
IHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBTdHJp
bmcgbWV0aG9kU3RyaW5nOwogICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKG1ldGhvZFN0
cmluZykpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVx
dWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJl
IHN0cmluZyIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwg
QVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBtdXN0IGJlIHN0cmlu
ZyIpKTsKKyAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbkFuZE1ldGhvZDsKICAgICBtZXRob2RTdHJp
bmcuc3BsaXQoJy4nLCB0cnVlLCBkb21haW5BbmRNZXRob2QpOwogICAgIGlmIChkb21haW5BbmRN
ZXRob2Quc2l6ZSgpICE9IDIgfHwgIWRvbWFpbkFuZE1ldGhvZFswXS5sZW5ndGgoKSB8fCAhZG9t
YWluQW5kTWV0aG9kWzFdLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiVGhlICdtZXRob2QnIHByb3Bl
cnR5IHdhcyBmb3JtYXR0ZWQgaW5jb3JyZWN0bHkuIEl0IHNob3VsZCBiZSAnRG9tYWluLm1ldGhv
ZCciKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsIEFTQ0lJ
TGl0ZXJhbCgiVGhlICdtZXRob2QnIHByb3BlcnR5IHdhcyBmb3JtYXR0ZWQgaW5jb3JyZWN0bHku
IEl0IHNob3VsZCBiZSAnRG9tYWluLm1ldGhvZCciKSk7CisgICAgICAgIHNlbmRQZW5kaW5nRXJy
b3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBTdHJpbmcgZG9tYWluID0gZG9t
YWluQW5kTWV0aG9kWzBdOwogICAgIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKiBkb21h
aW5EaXNwYXRjaGVyID0gbV9kaXNwYXRjaGVycy5nZXQoZG9tYWluKTsKICAgICBpZiAoIWRvbWFp
bkRpc3BhdGNoZXIpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBNZXRo
b2ROb3RGb3VuZCwgIiciICsgZG9tYWluICsgIicgZG9tYWluIHdhcyBub3QgZm91bmQiKTsKKyAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihNZXRob2ROb3RGb3VuZCwgIiciICsgZG9tYWluICsg
IicgZG9tYWluIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFN0cmluZyBtZXRob2QgPSBkb21haW5BbmRN
ZXRob2RbMV07Ci0gICAgZG9tYWluRGlzcGF0Y2hlci0+ZGlzcGF0Y2goY2FsbElkLCBtZXRob2Qs
IG1lc3NhZ2VPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgZG9tYWluRGlzcGF0Y2hlci0+
ZGlzcGF0Y2gocmVxdWVzdElkLCBtZXRob2QsIG1lc3NhZ2VPYmplY3QucmVsZWFzZU5vbk51bGwo
KSk7CisKKyAgICBpZiAobV9wcm90b2NvbEVycm9ycy5zaXplKCkpCisgICAgICAgIHNlbmRQZW5k
aW5nRXJyb3JzKCk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShs
b25nIGNhbGxJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZXN1bHQsIGNvbnN0IEVycm9y
U3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVz
cG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0KQog
ewogICAgIGlmICghbV9mcm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
IChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJv
cigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlvbkVycm9yKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIAorICAgIC8v
IFRoZSBKU09OLVJQQyAyLjAgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGF0IHRoZSAiZXJyb3Ii
IG1lbWJlciBoYXZlIHRoZSB2YWx1ZSAnbnVsbCcKKyAgICAvLyBpZiBubyBlcnJvciBvY2N1cnJl
ZCBkdXJpbmcgYW4gaW52b2NhdGlvbiwgYnV0IHdlIGRvIG5vdCBpbmNsdWRlIGl0IGF0IGFsbC4K
ICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgicmVzdWx0IiksIHJlc3VsdCk7Ci0gICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRJbnRlZ2VyKEFT
Q0lJTGl0ZXJhbCgiaWQiKSwgY2FsbElkKTsKKyAgICByZXNwb25zZU1lc3NhZ2UtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCByZXF1ZXN0SWQpOwogICAgIG1fZnJvbnRlbmRDaGFubmVs
LT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3Qg
bG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSkgY29uc3QKLXsKLSAgICByZXBvcnRQcm90b2NvbEVycm9yKGNhbGxJ
ZCwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIG51bGxwdHIpOwotfQotCi12b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwg
Q29tbW9uRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGRhdGEpIGNvbnN0Cit2
b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUGVuZGluZ0Vycm9ycygpCiB7CisgICAgLy8gVGhl
c2UgZXJyb3IgY29kZXMgYXJlIHNwZWNpZmllZCBpbiBKU09OLVJQQyAyLjAsIFNlY3Rpb24gNS4x
LgogICAgIHN0YXRpYyBjb25zdCBpbnQgZXJyb3JDb2Rlc1tdID0gewogICAgICAgICAtMzI3MDAs
IC8vIFBhcnNlRXJyb3IKICAgICAgICAgLTMyNjAwLCAvLyBJbnZhbGlkUmVxdWVzdApAQCAtMTYy
LDMzICsxODAsNjYgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJv
cihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm8KICAgICAgICAgLTMyMDAwLCAv
LyBTZXJ2ZXJFcnJvcgogICAgIH07CiAKLSAgICBBU1NFUlRfQVJHKGVycm9yQ29kZSwgZXJyb3JD
b2RlID49IDApOwotICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCAodW5zaWduZWQpZXJyb3JDb2Rl
IDwgV1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7Ci0gICAgQVNTRVJUX0FSRyhlcnJvckNv
ZGUsIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7Ci0KICAgICBpZiAoIW1fZnJvbnRlbmRDaGFubmVs
KQogICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVG8gY29uc3RydWN0IHRoZSBlcnJvciBv
YmplY3QsIG9ubHkgdXNlIHRoZSBsYXN0IGVycm9yJ3MgY29kZSBhbmQgbWVzc2FnZS4KKyAgICAv
LyBQZXIgSlNPTi1SUEMgMi4wLCBTZWN0aW9uIDUuMSwgdGhlICdkYXRhJyBtZW1iZXIgbWF5IGNv
bnRhaW4gbmVzdGVkIGVycm9ycywKKyAgICAvLyBidXQgb25seSBvbmUgdG9wLWxldmVsIEVycm9y
IG9iamVjdCBzaG91bGQgYmUgc2VudCBwZXIgcmVxdWVzdC4KKyAgICBDb21tb25FcnJvckNvZGUg
ZXJyb3JDb2RlOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgUmVmPEluc3BlY3RvckFy
cmF5PiBwYXlsb2FkID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIAorICAgIGZvciAo
YXV0byYgZGF0YSA6IG1fcHJvdG9jb2xFcnJvcnMpIHsKKyAgICAgICAgZXJyb3JDb2RlID0gc3Rk
OjpnZXQ8MD4oZGF0YSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IHN0ZDo6Z2V0PDE+KGRhdGEp
OworCisgICAgICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCAodW5zaWduZWQpZXJyb3JDb2RlIDwg
V1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7CisgICAgICAgIEFTU0VSVF9BUkcoZXJyb3JD
b2RlLCBlcnJvckNvZGVzW2Vycm9yQ29kZV0pOworCisgICAgICAgIFJlZjxJbnNwZWN0b3JPYmpl
Y3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgZXJyb3ItPnNl
dEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7Cisg
ICAgICAgIGVycm9yLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIGVycm9yTWVz
c2FnZSk7CisgICAgICAgIHBheWxvYWQtPnB1c2hPYmplY3QoV1RGOjptb3ZlKGVycm9yKSk7Cisg
ICAgfQogCi0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIGVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIpLCBl
cnJvckNvZGVzW2Vycm9yQ29kZV0pOwotICAgIGVycm9yLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJtZXNzYWdlIiksIGVycm9yTWVzc2FnZSk7Ci0gICAgaWYgKGRhdGEpCi0gICAgICAgIGVycm9y
LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgV1RGOjptb3ZlKGRhdGEpKTsKKyAgICBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiB0b3BMZXZlbEVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICB0b3BMZXZlbEVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiY29kZSIp
LCBlcnJvckNvZGVzW2Vycm9yQ29kZV0pOworICAgIHRvcExldmVsRXJyb3ItPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgZXJyb3JNZXNzYWdlKTsKKyAgICB0b3BMZXZlbEVycm9y
LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgV1RGOjptb3ZlKHBheWxvYWQpKTsKIAog
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIG1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVycm9yIiksIFdURjo6
bW92ZShlcnJvcikpOwotICAgIGlmIChjYWxsSWQpCi0gICAgICAgIG1lc3NhZ2UtPnNldEludGVn
ZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCAqY2FsbElkKTsKLSAgICBlbHNlCisgICAgbWVzc2FnZS0+
c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgV1RGOjptb3ZlKHRvcExldmVsRXJyb3Ip
KTsKKyAgICBpZiAobV9jdXJyZW50UmVxdWVzdElkKQorICAgICAgICBtZXNzYWdlLT5zZXRJbnRl
Z2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgbV9jdXJyZW50UmVxdWVzdElkLnZhbHVlKCkpOworICAg
IGVsc2UgeworICAgICAgICAvLyBUaGUgJ251bGwnIHZhbHVlIGZvciBhbiB1bmtub3duIGlkIGlz
IHNwZWNpZmllZCBpbiBKU09OLVJQQyAyLjAsIFNlY3Rpb24gNS4KICAgICAgICAgbWVzc2FnZS0+
c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJpZCIpLCBJbnNwZWN0b3JWYWx1ZTo6bnVsbCgpKTsKKyAg
ICB9CiAKICAgICBtX2Zyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKG1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKIH0KKyAgICAKK3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnJl
cG9ydFByb3RvY29sRXJyb3IoQ29tbW9uRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihtX2N1cnJlbnRSZXF1
ZXN0SWQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKK30KIAotdGVtcGxhdGU8dHlwZW5hbWUg
UmV0dXJuVmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lIERlZmF1bHRWYWx1
ZVR5cGU+Ci1zdGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJv
cnMsIERlZmF1bHRWYWx1ZVR5cGUgZGVmYXVsdFZhbHVlLCBib29sICgqYXNNZXRob2QpKEluc3Bl
Y3RvclZhbHVlJiwgVmFsdWVUeXBlJiksIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihPcHRpb25hbDxsb25nPiByZWxhdGVk
UmVxdWVzdElkLCBDb21tb25FcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9y
TWVzc2FnZSkKIHsKLSAgICBWYWx1ZVR5cGUgcmVzdWx0ID0gZGVmYXVsdFZhbHVlOworICAgIEFT
U0VSVF9BUkcoZXJyb3JDb2RlLCBlcnJvckNvZGUgPj0gMCk7CisKKyAgICAvLyBJZiB0aGUgZXJy
b3Igd2FzIHJlcG9ydGVkIGZyb20gYW4gYXN5bmMgY2FsbGJhY2ssIHRoZW4gbm8gcmVxdWVzdCBp
ZCB3aWxsIGJlIHJlZ2lzdGVyZWQgeWV0LgorICAgIGlmICghbV9jdXJyZW50UmVxdWVzdElkKQor
ICAgICAgICBtX2N1cnJlbnRSZXF1ZXN0SWQgPSByZWxhdGVkUmVxdWVzdElkOworCisgICAgbV9w
cm90b2NvbEVycm9ycy5hcHBlbmQoc3RkOjp0dXBsZTxDb21tb25FcnJvckNvZGUsIFN0cmluZz4o
ZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Qg
QmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlvbmFsVmFsdWVGb3VuZCwgVCBk
ZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChJbnNwZWN0b3JWYWx1ZSYsIFQmKT4gYXNN
ZXRob2QsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQoreworICAgIFQgcmVzdWx0KGRlZmF1bHRWYWx1
ZSk7CiAgICAgLy8gb3V0X29wdGlvbmFsVmFsdWVGb3VuZCBzaWduYWxzIHRvIHRoZSBjYWxsZXIg
d2hldGhlciBhbiBvcHRpb25hbCBwcm9wZXJ0eSB3YXMgZm91bmQuCiAgICAgLy8gaWYgb3V0X29w
dGlvbmFsVmFsdWVGb3VuZCA9PSBudWxscHRyLCB0aGVuIHRoaXMgaXMgYSByZXF1aXJlZCBwcm9w
ZXJ0eS4KICAgICBpZiAob3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKQEAgLTE5NiwxOSArMjQ3LDE5
IEBAIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShJbnNwZWN0b3JPYmpl
Y3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuCiAKICAgICBpZiAoIW9iamVjdCkgewogICAgICAg
ICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9y
cy5hZGRJdGVtKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJl
cXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEo
KSwgdHlwZU5hbWUpKTsKKyAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3Qg
bXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBvYmplY3QtPmZpbmQobmFtZSk7CiAgICAgaWYg
KGZpbmRSZXN1bHQgPT0gb2JqZWN0LT5lbmQoKSkgewogICAgICAgICBpZiAoIW91dF9vcHRpb25h
bFZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6
Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsIG5h
bWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJQ
YXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIsIG5hbWUudXRmOCgp
LmRhdGEoKSwgdHlwZU5hbWUpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAg
ICBpZiAoIWFzTWV0aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0KSkgewotICAgICAgICBw
cm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyBoYXMg
d3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5h
bWUpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhhcyB3cm9uZyB0eXBl
LiBJdCBtdXN0IGJlICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBlTmFtZSkpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjE4LDQ5ICsyNjksNDIgQEAgc3RhdGlj
IFJldHVyblZhbHVlVHlwZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdHJ1Y3QgQXNNZXRo
b2RCcmlkZ2VzIHsKLSAgICBzdGF0aWMgYm9vbCBhc0ludGVnZXIoSW5zcGVjdG9yVmFsdWUmIHZh
bHVlLCBpbnQmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKG91dHB1dCk7IH0KLSAg
ICBzdGF0aWMgYm9vbCBhc0RvdWJsZShJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgb3V0
cHV0KSB7IHJldHVybiB2YWx1ZS5hc0RvdWJsZShvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wg
YXNTdHJpbmcoSW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBTdHJpbmcmIG91dHB1dCkgeyByZXR1cm4g
dmFsdWUuYXNTdHJpbmcob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzQm9vbGVhbihJbnNw
ZWN0b3JWYWx1ZSYgdmFsdWUsIGJvb2wmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNCb29sZWFu
KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc09iamVjdChJbnNwZWN0b3JWYWx1ZSYgdmFs
dWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLmFzT2Jq
ZWN0KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc0FycmF5KEluc3BlY3RvclZhbHVlJiB2
YWx1ZSwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc0Fy
cmF5KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc1ZhbHVlKEluc3BlY3RvclZhbHVlJiB2
YWx1ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc1Zh
bHVlKG91dHB1dCk7IH0KLX07Ci0KLWludCBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykK
K3N0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBpbnQmIHJl
c3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKHJlc3VsdCk7IH0KK3N0YXRpYyBib29sIGNh
c3RUb051bWJlcihJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgcmVzdWx0KSB7IHJldHVy
biB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9CisKK2ludCBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGludCwgaW50LCBp
bnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9k
QnJpZGdlczo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2FzdFRvSW50ZWdlciwgIklu
dGVnZXIiKTsKIH0KIAotZG91YmxlIEJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUoSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitkb3Vi
bGUgQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVZhbHVlPGRvdWJsZSwgZG91YmxlLCBkb3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6YXNEb3VibGUsICJOdW1i
ZXIiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGU+KG9iamVjdCwgbmFtZSwg
dmFsdWVGb3VuZCwgMCwgJmNhc3RUb051bWJlciwgIk51bWJlciIpOwogfQogCi1TdHJpbmcgQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKK1N0cmluZyBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nLCBTdHJp
bmcsIFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgIiIs
IEFzTWV0aG9kQnJpZGdlczo6YXNTdHJpbmcsICJTdHJpbmciKTsKKyAgICByZXR1cm4gZ2V0UHJv
cGVydHlWYWx1ZTxTdHJpbmc+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgIiIsICZJbnNwZWN0
b3JWYWx1ZTo6YXNTdHJpbmcsICJTdHJpbmciKTsKIH0KIAotYm9vbCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBw
cm90b2NvbEVycm9ycykKK2Jvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVj
dG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkK
IHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxib29sLCBib29sLCBib29sPihvYmplY3Qs
IG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBmYWxzZSwgQXNNZXRob2RCcmlkZ2Vz
Ojphc0Jvb2xlYW4sICJCb29sZWFuIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8Ym9v
bD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBmYWxzZSwgJkluc3BlY3RvclZhbHVlOjphc0Jv
b2xlYW4sICJCb29sZWFuIik7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3Ry
aW5nPiYgcHJvdG9jb2xFcnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBJbnNwZWN0
b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxs
cHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3Rvck9iamVjdD4+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgbnVsbHB0ciwgJkluc3BlY3RvclZhbHVlOjphc09iamVjdCwgIk9iamVjdCIpOwog
fQogCi1SZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZv
dW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykK
K1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQp
CiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3RvckFycmF5Piwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkqPihvYmplY3QsIG5hbWUsIHZh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzQXJy
YXksICJBcnJheSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkluc3BlY3RvclZh
bHVlOjphc0FycmF5LCAiQXJyYXkiKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvclZhbHVlPiBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVl
PFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIEluc3BlY3Rv
clZhbHVlKj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0
ciwgQXNNZXRob2RCcmlkZ2VzOjphc1ZhbHVlLCAiVmFsdWUiKTsKKyAgICByZXR1cm4gZ2V0UHJv
cGVydHlWYWx1ZTxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91
bmQsIG51bGxwdHIsICZJbnNwZWN0b3JWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmluZGV4IGIzMDM3
MDBhMjA5YmIyMjI2NmJhZThmNGU0ZGU4ZGQzMjZmYjk0YjcuLjBkODVhZmRlNzEzNDdmNzkxZDA0
NTQ2NDQ2MDhhZTIzYjY4YjA5MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yOCw2ICsyOCw3IEBA
CiAjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKIAogI2luY2x1ZGUgIkluc3Bl
Y3RvclByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC00Myw3ICs0NCw3IEBAIHB1YmxpYzoKICAgICBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIpCiAgICAgICAgIDogbV9iYWNr
ZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0Y2hlcikgeyB9CiAgICAgdmlydHVhbCB+U3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpID0g
MDsKIHByb3RlY3RlZDoKICAgICBSZWY8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CiB9OwpAQCAtNTQsMjQgKzU1LDI1IEBAIHB1YmxpYzoKIAogICAgIGNsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIENhbGxiYWNrQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbGxiYWNrQmFz
ZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FsbGJhY2tCYXNlKFJlZjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgQ2FsbGJhY2tCYXNlKFJlZjxCYWNrZW5kRGlzcGF0
Y2hlcj4mJiwgbG9uZyByZXF1ZXN0SWQpOwogCiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25z
dDsKLSAgICAgICAgdm9pZCBzZW5kRmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYpOwogICAgICAg
ICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFkeVNlbnQgPSB0cnVlOyB9CiAKLSAgICBwcm90ZWN0
ZWQ6Ci0gICAgICAgIHZvaWQgc2VuZElmQWN0aXZlKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
cGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpOworICAg
ICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpOworICAgICAg
ICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJik7CiAKICAgICBwcml2YXRlOgog
ICAgICAgICBSZWY8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7Ci0gICAg
ICAgIGludCBtX2lkOwotICAgICAgICBib29sIG1fYWxyZWFkeVNlbnQ7CisgICAgICAgIGxvbmcg
bV9yZXF1ZXN0SWQ7CisgICAgICAgIGJvb2wgbV9hbHJlYWR5U2VudCB7IGZhbHNlIH07CiAgICAg
fTsKIAogICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9mcm9udGVuZENoYW5uZWwgPSBudWxs
cHRyOyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9mcm9udGVuZENo
YW5uZWw7IH0KIAorICAgIHVuc2lnbmVkIHByb3RvY29sRXJyb3JDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpOyB9CisKICAgICBlbnVtIENvbW1vbkVycm9yQ29k
ZSB7CiAgICAgICAgIFBhcnNlRXJyb3IgPSAwLAogICAgICAgICBJbnZhbGlkUmVxdWVzdCwKQEAg
LTgzLDI0ICs4NSw0MSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlZ2lzdGVyRGlzcGF0Y2hlckZv
ckRvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIqKTsKICAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVz
dWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKLSAgICB2b2lkIHJlcG9y
dFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsKLSAgICB2b2lkIHJlcG9ydFByb3Rv
Y29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPj4mJiBkYXRhKSBjb25zdDsKLQotICAgIHN0YXRpYyBpbnQgZ2V0SW50ZWdlcihJbnNw
ZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0
aWMgZG91YmxlIGdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHBy
b3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgYm9vbCBn
ZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJv
cnMpOwotICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldFZhbHVlKEluc3BlY3Rv
ck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2Nv
bEVycm9ycyk7CisKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiByZXN1bHQpOworICAgIHZvaWQgc2VuZFBlbmRpbmdFcnJvcnMo
KTsKKworICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihDb21tb25FcnJvckNvZGUsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoT3B0
aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0
UHJvcGVydHlWYWx1ZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9uPGJv
b2woSW5zcGVjdG9yVmFsdWUmLCBUJik+LCBjb25zdCBjaGFyKiB0eXBlTmFtZSk7CisKKyAgICBp
bnQgZ2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQpOworICAgIGRvdWJsZSBnZXREb3VibGUoSW5zcGVjdG9yT2JqZWN0KiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5n
KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7
CisgICAgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBnZXRWYWx1
ZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQp
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChJbnNwZWN0b3JPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kKTsKIAogcHJpdmF0ZToKLSAgICBCYWNrZW5kRGlzcGF0Y2hlcihG
cm9udGVuZENoYW5uZWwqIEZyb250ZW5kQ2hhbm5lbCkKLSAgICAgICAgOiBtX2Zyb250ZW5kQ2hh
bm5lbChGcm9udGVuZENoYW5uZWwpIHsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyKEZyb250ZW5k
Q2hhbm5lbCogY2hhbm5lbCkKKyAgICAgICAgOiBtX2Zyb250ZW5kQ2hhbm5lbChjaGFubmVsKQor
ICAgIHsKKyAgICB9CiAKICAgICBGcm9udGVuZENoYW5uZWwqIG1fZnJvbnRlbmRDaGFubmVsOwog
ICAgIEhhc2hNYXA8U3RyaW5nLCBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcio+IG1fZGlz
cGF0Y2hlcnM7CisKKyAgICAvLyBQcm90b2NvbCBlcnJvcnMgcmVwb3J0ZWQgZm9yIHRoZSB0b3At
bGV2ZWwgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQuCisgICAgLy8gSWYgcHJvY2Vzc2luZyBhIHJl
cXVlc3QgdHJpZ2dlcnMgYXN5bmMgcmVzcG9uc2VzLCB0aGVuIGFueSByZWxhdGVkIGVycm9ycyB3
aWxsCisgICAgLy8gYmUgYXR0cmlidXRlZCB0byB0aGUgdG9wLWxldmVsIHJlcXVlc3QsIGJ1dCBn
ZW5lcmF0ZSBzZXBhcmF0ZSBlcnJvciBtZXNzYWdlcy4KKyAgICBWZWN0b3I8c3RkOjp0dXBsZTxD
b21tb25FcnJvckNvZGUsIFN0cmluZz4+IG1fcHJvdG9jb2xFcnJvcnM7CisKKyAgICAvLyBGb3Ig
c3luY2hyb25vdXNseSBoYW5kbGVkIHJlcXVlc3RzLCBhdm9pZCBwbHVtYmluZyByZXF1ZXN0SWQg
dGhyb3VnaCBldmVyeQorICAgIC8vIGNhbGwgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBmYWlsIHdp
dGggYSBwcm90b2NvbCBlcnJvci4KKyAgICBPcHRpb25hbDxsb25nPiBtX2N1cnJlbnRSZXF1ZXN0
SWQgeyBOdWxsb3B0IH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5kZXggMDVmMzUzMDk3
NGUwNTlkN2Y5YzY0ZjlmZTg5NjBlNDUzMmNhZmY4ZS4uN2Q3Y2IyY2MxZmY3ZTJlYWY4MjQxY2Nj
NmFjNmQ4MmUyNzEwZGNjYSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMK
LSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChjKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMDEsNyArMTAxLDcgQEAgcHJvdGVjdGVk
OgogICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyKiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKICR7Y29tbWFu
ZERlY2xhcmF0aW9uc30KIHByaXZhdGU6CiAgICAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwpAQCAtMTIzLDI0ICsxMjMsMzAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
JHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9KSA9IDA7IiIiKQogCiAgICAgQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0gKAotICAgICIiInZvaWQgJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKKyAgICAiIiJ2b2lk
ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7
CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CiAKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2Ut
PmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKwogJHtkaXNw
YXRjaENhc2VzfQogICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
IG1ha2VTdHJpbmcoJ1xcJycsICIke2RvbWFpbk5hbWV9IiwgJy4nLCBtZXRob2QsICInIHdhcyBu
b3QgZm91bmQiKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcXCcn
LCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogfSIi
IikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25MYXJnZVN3aXRjaCA9ICgK
LSIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNh
bGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2Fn
ZSkKKyIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYg
bWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90
ZWN0KCp0aGlzKTsKIAotICAgIHR5cGVkZWYgdm9pZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
IG1lc3NhZ2UpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAg
bWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOwor
CisgICAgdHlwZWRlZiB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxs
SGFuZGxlcikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2Fn
ZSk7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+IERpc3BhdGNoTWFw
OwotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChEaXNwYXRjaE1hcCwgZGlzcGF0
Y2hNYXAsICgpKTsKLSAgICBpZiAoZGlzcGF0Y2hNYXAuaXNFbXB0eSgpKSB7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKKyAgICBpZiAoZGlzcGF0
Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgTWV0
aG9kVGFibGUgewogICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICAgICAgICAgIENh
bGxIYW5kbGVyIGhhbmRsZXI7CkBAIC0xNDksMTYgKzE1NSwxNiBAQCAke2Rpc3BhdGNoQ2FzZXN9
CiAgICAgICAgIH07CiAgICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNv
bW1hbmRzKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAg
ICAgICAgICAgIGRpc3BhdGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5o
YW5kbGVyKTsKKyAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5u
YW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9CiAKLSAgICBIYXNoTWFwPFN0cmluZywg
Q2FsbEhhbmRsZXI+OjppdGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKLSAg
ICBpZiAoaXQgPT0gZGlzcGF0Y2hNYXAuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1xcJycsICIke2RvbWFpbk5hbWV9IiwgJy4nLCBtZXRo
b2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hN
YXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFw
LmdldCgpLmVuZCgpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdc
XCcnLCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElk
LCBtZXNzYWdlLmdldCgpKTsKKyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVl
c3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0b3IgPSAoCkBAIC0xNzgsMTMgKzE4NCw5
IEBAICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyCiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzID0gKAotIiIiICAgIGF1dG8g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVh
dGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7Ci0gICAg
bWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVy
KTsKLSR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9Ci0gICAgaWYgKHByb3RvY29sRXJyb3JzLT5s
ZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQo
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCBcJyVzXCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIiR7
ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0iKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKKyIiIiR7
aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPnBy
b3RvY29sRXJyb3JDb3VudCgpID4gMCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwnJXNcJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfSIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICIiIikKQEAgLTE5Niw3ICsxOTgsNyBAQCB2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nlc3MoJHtmb3Jt
YQogewogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25NZXNzYWdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9Ci0gICAgc2VuZElmQWN0
aXZlKFdURjo6bW92ZShqc29uTWVzc2FnZSksIEVycm9yU3RyaW5nKCkpOworICAgIENhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoV1RGOjptb3ZlKGpzb25NZXNzYWdlKSk7CiB9IiIiKQogCiAgICAg
RnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQppbmRleCA1NGJkYjNlOTFhYzA3MTVkN2E2Y2UyYjM2ZjU1Y2MzZjI0
MzE1YWQ2Li4yZTVmZjdhNmE2M2ZiYmUwZjU5YjUwMjhiZDg2ZjhjNDFjY2I2MTM2IDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9k
aXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMSw2ICsxLDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhv
bgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTIwNSw0ICsyMDUsNCBAQCBjbGFz
cyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAg
ICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2RvbWFpbihkb21haW4sIFRlbXBsYXRl
KENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNs
YXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6
Ci0gICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYgbWVzc2FnZSk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1lCisgICAgICAgIHJldHVy
biAiICAgIHZvaWQgJXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
cGFyYW1ldGVycyk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1lCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCAzNTBmMDg1NGNiOWE1NmU3ODdiOWRmYjVlOGM5YTA4
ZWZiZGNlMTE4Li4xMjUxMTQ5MzNjZTkyODgxNWI0MmQ0NTJmNTIzZWFlY2QzMDdhMTFlIDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEsNiArMSw2IEBACiAj
IS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0IChjKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChjKSAyMDE0LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChjKSAyMDE0IFVuaXZlcnNpdHkg
b2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01
MSw2ICs1MSw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgc2Vjb25kYXJ5X2hlYWRlcnMgPSBbCiAgICAgICAg
ICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4nLAogICAgICAgICAg
ICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywKKyAgICAgICAgICAgICc8d3RmL05l
dmVyRGVzdHJveWVkLmg+JywKICAgICAgICAgICAgICc8d3RmL3RleHQvQ1N0cmluZy5oPiddCiAK
ICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gWycjaW5jbHVkZSAlcycgJSBoZWFkZXIgZm9y
IGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10KQEAgLTEwNCwxMCArMTA1LDEwIEBAIGNsYXNz
IENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToK
ICAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAgY2FzZXMgPSBbXQogICAgICAgICBj
YXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIpJyAlIGRvbWFpbi5jb21tYW5kc1sw
XS5jb21tYW5kX25hbWUpCi0gICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhjYWxsSWQs
IG1lc3NhZ2UpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQorICAgICAgICBj
YXNlcy5hcHBlbmQoJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykp
OycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lKQogICAgICAgICBmb3IgY29tbWFu
ZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAg
ZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQotICAgICAg
ICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJZCwgbWVzc2FnZSk7JyAlIGNvbW1h
bmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKHJl
cXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUp
CiAKICAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRv
bWFpbi5kb21haW5fbmFtZSwKQEAgLTE3MCw3ICsxNzEsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGluX3Bh
cmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQogICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0
aW9ucyA9IFtdCiAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAgICAg
ICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsnY2FsbElkJ10KKyAg
ICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMgPSBbJ3JlcXVlc3RJ
ZCddCiAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzID0gWydlcnJvciddCiAKICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKQEAgLTIwNyw3ICsyMDgsNyBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CiAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2Fy
Z3VtZW50CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJh
dGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgJShwYXJhbWV0ZXJOYW1lKXMgPSBC
YWNrZW5kRGlzcGF0Y2hlcjo6JShrZXllZEdldE1ldGhvZClzKHBhcmFtc0NvbnRhaW5lci5nZXQo
KSwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlcktleSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgIGluX3Bh
cmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgJShwYXJh
bWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlcktleSlzIiksICUoc3VjY2Vz
c091dFBhcmFtKXMpOycgJSBwYXJhbV9hcmdzKQogCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgb3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmlu
ZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJShwYXJhbWV0ZXJFeHByZXNzaW9u
KXMgOiBudWxscHRyJyAlIHBhcmFtX2FyZ3MKQEAgLTIyNCw3ICsyMjUsNyBAQCBjbGFzcyBDcHBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7JykKLSAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7JykKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQogICAgICAgICAgICAgbWV0
aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjay5jb3B5UmVmKCknKQogCkBAIC0yNjcsOSAr
MjY4LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
cihHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgaWYgbGVuKGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lk
ICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiknICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUo
Y29tbWFuZE5hbWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikn
ICUgY29tbWFuZF9hcmdzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKScgJSBjb21tYW5kX2Fy
Z3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5k
RGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpJyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgbGluZXMu
YXBwZW5kKCd7JykKIAogICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID4g
MDoKQEAgLTI4Niw3ICsyODcsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEVy
cm9yU3RyaW5nIGVycm9yOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAg
aWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjwl
KGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcz4g
Y2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3ICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBj
YWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
UmVmPCUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFt
ZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVm
KCksIHJlcXVlc3RJZCkpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGlmIGxlbihjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6CiAgICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3Bh
cmFtZXRlcl9kZWNsYXJhdGlvbnMpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQt
PiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2Fy
Z3MpCkBAIC0zMDUsNiArMzA2LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQogCiAgICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RG
Ojptb3ZlKHJlc3VsdCksIGVycm9yKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSknKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShy
ZXN1bHQpKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZWxzZScpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJv
cikpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJldHVybiAiXG4iLmpv
aW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKaW5kZXggMTVk
NmE0ZDllMTAzNzc2ZTJhOWNkMGQxNGM5NWM1NmJkMTZiN2E4My4uODRmNTYxMjhjN2NkNWMxZjJl
MjRjNjQxM2JiZmViNmY2MmEwMjI5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0
cmlidXRlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29u
LXJlc3VsdApAQCAtMTg3LDEyICsxODcsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIqLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6
Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRl
cnMpOwogcHJpdmF0ZToKICAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKQEAgLTI0NSw2ICsyNDUsNyBAQCBw
cml2YXRlOgogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5o
PgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI3MCwzOCArMjcxLDM3
IEBAIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7
CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
Cit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQog
ewogICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCiAgICAgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAg
ICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURjo6bW92
ZShwYXJhbWV0ZXJzKSk7CiAgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBl
bHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTFN5
bmMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBX
VEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNR
TEFzeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKGNhbGxJZCwgbWVzc2FnZSk7CisgICAg
ICAgIGV4ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAg
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygn
XCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBt
ZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXV0byBwcm90
b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBtZXNz
YWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwot
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFy
YW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IEJhY2tlbmREaXNw
YXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1
ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBpZiAocHJvdG9jb2xF
cnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6
OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2Vk
IiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJv
dG9jb2xFcnJvcnMpKTsKKyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlk
IiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxw
dHIpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5wcm90b2NvbEVycm9yQ291bnQoKSA+
IDApIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzQyLDcgKzM0MiwxMCBAQCB2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMobG9uZyBjYWxsSWQsCiAgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fzc2ln
bmVkKCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50
Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgfQotICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJv
cik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCiBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
ayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBC
YWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURjo6bW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KQEAgLTM3MCw1NyArMzczLDQ5IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
CiAgICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNv
bG9ycyIpLCBhbHRlcm5hdGVDb2xvcnMpOwogICAgIGlmIChwcmludENvbG9yLmlzQXNzaWduZWQo
KSkKICAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKLSAgICBzZW5kSWZBY3RpdmUoV1RGOjptb3Zl
KGpzb25NZXNzYWdlKSwgRXJyb3JTdHJpbmcoKSk7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3Vj
Y2VzcyhXVEY6Om1vdmUoanNvbk1lc3NhZ2UpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewotICAgIGF1dG8g
cHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVh
dGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7Ci0gICAg
bWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVy
KTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2Vy
KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgaWYgKHByb3Rv
Y29sRXJyb3JzLT5sZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpOwot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92
ZShwcm90b2NvbEVycm9ycykpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFi
YXNlSWQiKSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwg
bnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPnByb3RvY29sRXJyb3JDb3Vu
dCgpID4gMCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNl
LmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAg
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAKICAgICBFcnJvclN0
cmluZyBlcnJvcjsKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIu
Y29weVJlZigpLCBjYWxsSWQpKTsKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxi
YWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRj
aGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7CiAgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxs
YmFjay5jb3B5UmVmKCkpOwogCiAgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgIGNh
bGxiYWNrLT5kaXNhYmxlKCk7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKLSAgICBhdXRvIHByb3RvY29sRXJy
b3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwotICAgIG1lc3NhZ2UuZ2V0
T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7Ci0gICAgaW50
IGluX2RhdGFiYXNlSWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250
YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2Nv
bEVycm9ycy5nZXQoKSk7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gQmFja2VuZERpc3BhdGNoZXI6
OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChwcm90b2NvbEVycm9ycy0+
bGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0
KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0
YWJhc2UuZXhlY3V0ZVNRTFN5bmMiKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKKyAgICBpbnQgaW5f
ZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOworICAgIFN0cmluZyBp
bl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIpOworICAgIGlmIChtX2JhY2tlbmREaXNw
YXRjaGVyLT5wcm90b2NvbEVycm9yQ291bnQoKSA+IDApIHsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhjYWxsSWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
KTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0
SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgpAQCAtNDUxLDcgKzQ0NiwxMCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplYwogICAgICAg
ICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwogICAg
ICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKICAg
ICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjpt
b3ZlKHJlc3VsdCksIGVycm9yKTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVz
dWx0KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9y
KSk7CiB9CiAKIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5
bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZShXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CkBAIC00NjksMzcg
KzQ2NywzMyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUAogICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOwogICAgIGpzb25NZXNzYWdlLT5zZXRB
cnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBhbHRlcm5hdGVDb2xvcnMpOwog
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29sb3IpKTsKLSAg
ICBzZW5kSWZBY3RpdmUoV1RGOjptb3ZlKGpzb25NZXNzYWdlKSwgRXJyb3JTdHJpbmcoKSk7Cisg
ICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEY6Om1vdmUoanNvbk1lc3NhZ2UpKTsKIH0K
IAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXV0byBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBtZXNzYWdlLmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwotICAgIGludCBpbl9k
YXRhYmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVy
LmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0
aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNl
LmV4ZWN1dGVTUUxBc3luYyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBl
cnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOworICAgIGludCBpbl9kYXRh
YmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgp
LCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1
ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNo
ZXItPnByb3RvY29sRXJyb3JDb3VudCgpID4gMCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1z
LCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlU1FMQXN5bmMoY2FsbElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJ
ZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCiAKICAgICBFcnJvclN0cmluZyBlcnJvcjsKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZjxEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0g
YWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOwor
ICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5j
b3B5UmVmKCksIHJlcXVlc3RJZCkpOwogICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhlcnJv
ciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CiAKICAgICBp
ZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4
IGUzNDllY2Y2ZjA4ZDBhZjRmZjg2MzI4YzczYTE2Yjc2MzBiYWUwZGUuLjk3ZTVhYmRhNzMyNTA0
ZGYzNTJiMjMxMjI4ZDc1NmJiNTQzYjFlYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlv
bmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgt
b3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMTcwLDEwICsx
NzAsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3Bh
dGNoZXIqLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1l
c3NhZ2UpOwotICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKIHByaXZh
dGU6CiAgICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0yMjYsNiArMjI2LDcgQEAgcHJpdmF0ZToKIAog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNTEsNTIgKzI1Miw1MSBAQCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbihBU0NJSUxpdGVyYWwoIkRhdGFiYXNlIiksIHRoaXMpOwogfQogCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKKyAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJ
SUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKwogICAgIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UgaWYg
KG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikKLSAgICAgICAgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAg
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygn
XCcnLCAiRGF0YWJhc2UiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBt
ZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXV0byBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBtZXNzYWdlLmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwogICAgIGJvb2wgb3B0
X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gQmFja2VuZERpc3BhdGNoZXI6
OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1l
cyIpLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2NvbHVtbk5h
bWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVND
SUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCAmb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQp
OwogICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcg
b3B0X2luX25vdGVzID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9ub3Rlc192YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgU3RyaW5nIG9wdF9pbl9ub3RlcyA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
Im5vdGVzIiksICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fdGlt
ZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpPcHRP
dXRwdXQ8ZG91YmxlPiBvcHRfaW5fdGltZXN0YW1wID0gQmFja2VuZERpc3BhdGNoZXI6OmdldERv
dWJsZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksICZv
cHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpPcHRPdXRwdXQ8ZG91YmxlPiBvcHRfaW5fdGltZXN0YW1wID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgidGltZXN0YW1wIiksICZvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQpOwogICAgIGJv
b2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gQmFja2VuZERpc3BhdGNoZXI6Omdl
dE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZv
cHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fcGF5bG9h
ZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFs
dWU+IG9wdF9pbl9wYXlsb2FkID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKHBhcmFtc0Nv
bnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZvcHRfaW5fcGF5bG9hZF92
YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yVmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksICZvcHRfaW5f
cGF5bG9hZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJh
c2VJZCIpLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0
KCkpOworICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksICZv
cHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92
YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBvcHRfaW5fc3FsRXJyb3IgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0Nv
bnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9y
X3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksICZv
cHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fc2NyZWVuQ29sb3Jf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2NyZWVuQ29sb3IgPSBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJzY3JlZW5Db2xvciIpLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQsIHByb3Rv
Y29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgJm9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kKTsKICAgICBib29s
IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJhbHRlcm5hdGVDb2xvcnMiKSwgJm9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJy
YXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgJm9w
dF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0g
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCwgcHJv
dG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsK
LSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOworICAgIFN0cmlu
ZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgJm9wdF9pbl9wcmludENv
bG9yX3ZhbHVlRm91bmQpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5wcm90b2NvbEVy
cm9yQ291bnQoKSA+IDApIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3Jt
YXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJE
YXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAg
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBvcHRfaW5fY29sdW1u
TmFtZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9w
dF9pbl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90
aW1lc3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2lu
X3ZhbHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9wYXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9w
dF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRy
LCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51
bGxwdHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xv
ciA6IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9h
bHRlcm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZv
dW5kID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIG9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVs
bHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwg
b3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRy
LCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0
ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVs
bHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6
IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdl
dCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3Nj
cmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8g
b3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9y
X3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxscHRyKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzM3LDMzICszMzcsMzIgQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
LCBjb25zdAogICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQogICAgICAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9w
cmludENvbG9yLmdldFZhbHVlKCkpOwogICAgIH0KLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEY6Om1vdmUoZXJyb3IpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0
IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXV0byBwcm90b2NvbEVycm9ycyA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwotICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBtZXNzYWdlLmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IEJhY2tlbmREaXNwYXRj
aGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9u
b3RlcyA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgp
LCBBU0NJSUxpdGVyYWwoIm5vdGVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
LSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShw
YXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3Q+IGluX3ZhbHVlcyA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29u
dGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9ycy5nZXQoKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWU+IGluX3Bh
eWxvYWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUocGFyYW1zQ29udGFpbmVyLmdldCgp
LCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIo
cGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0
ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdD4gaW5fc3FsRXJyb3IgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gQmFja2VuZERp
c3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgi
c2NyZWVuQ29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMgPSBCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwo
ImFsdGVybmF0ZUNvbG9ycyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAg
U3RyaW5nIGluX3ByaW50Q29sb3IgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7
Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1
bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFy
YW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOworICAgIFJlZlB0
cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1u
TmFtZXMiKSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwg
bnVsbHB0cik7CisgICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCBu
dWxscHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluX3ZhbHVl
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJ
SUxpdGVyYWwoInZhbHVlcyIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyKTsKKyAgICBp
bnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1l
dGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxF
cnJvciIpLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3Jl
ZW5Db2xvciIpLCBudWxscHRyKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFy
YW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgbnVsbHB0cik7
CisgICAgU3RyaW5nIGluX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG51bGxwdHIp
OworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5wcm90b2NvbEVycm9yQ291bnQoKSA+IDAp
IHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5h
dGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5f
dGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3Nx
bEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xv
cik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1w
LCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBp
bl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM5NCw3ICszOTMsMTAgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBj
YWxsSWQsIGNvbnN0IEkKICAgICAgICAgcmVzdWx0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFs
dGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CiAgICAgfQotICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBl
cnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21t
YW5kLXNpemVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMu
anNvbi1yZXN1bHQKaW5kZXggMTkwYjI2MDAyM2NiYzg2YWFiNTQ0MmEwYWVjNGRmNWM3YmRjNjc1
Yi4uMTg4NDgyYTE5ODg2MmJlN2RhN2FiNTU3MmQyYzk1MjIxNjFmMzlmZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKQEAgLTE4OCw5ICsxODgsOSBA
QCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlcios
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBsb2Fk
UmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwogcHJpdmF0ZToKICAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKQEAgLTIwNSwxNSArMjA1LDE1
IEBAIHByaXZhdGU6CiBjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlcios
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9i
amVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2Fk
UmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IElu
c3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2Fs
bElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291
cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogcHJpdmF0ZToK
ICAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudDsKQEAgLTI2Niw2ICsyNjYsNyBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI5MiwyMSArMjkzLDI0IEBAIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7CiB9CiAKLXZvaWQgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJl
c291cmNlMSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZTEoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAg
ICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAgICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcn
LCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsxIiwgJy4nLCBtZXRo
b2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikK
K3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShjYWxsSWQpOwor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzE1LDcgKzMxOSwxMCBAQCB2b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJv
cik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6
Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShy
ZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEY6Om1vdmUoZXJy
b3IpKTsKIH0KIAogUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciogYmFja2VuZERpc3BhdGNoZXIs
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKQEAgLTMzMywxNCArMzQw
LDE3IEBAIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazMiKSwgdGhp
cyk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBj
YWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3Nh
Z2UpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdl
KQogewogICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsK
IAotICAgIHR5cGVkZWYgdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5k
bGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKworICAgIHR5cGVkZWYgdm9p
ZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKTsKICAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgREVQUkVDQVRFRF9ERUZJ
TkVfU1RBVElDX0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwotICAgIGlmIChk
aXNwYXRjaE1hcC5pc0VtcHR5KCkpIHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0
Y2hNYXA+IGRpc3BhdGNoTWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkp
IHsKICAgICAgICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICAg
ICBjb25zdCBjaGFyKiBuYW1lOwogICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKQEAg
LTM1NSwyMyArMzY1LDIzIEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8CiAgICAgICAgIH07CiAg
ICAgICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNvbW1hbmRzKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKLSAgICAgICAgICAgIGRpc3Bh
dGNoTWFwLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKKyAgICAg
ICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tp
XS5oYW5kbGVyKTsKICAgICB9CiAKLSAgICBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+Ojpp
dGVyYXRvciBpdCA9IGRpc3BhdGNoTWFwLmZpbmQobWV0aG9kKTsKLSAgICBpZiAoaXQgPT0gZGlz
cGF0Y2hNYXAuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1h
a2VTdHJpbmcoJ1wnJywgIk5ldHdvcmszIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQi
KSk7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2Qp
OworICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3JrMyIsICcuJywg
bWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKCgqdGhpcykuKml0LT52YWx1ZSkoY2FsbElkLCBtZXNzYWdlLmdldCgpKTsKKyAgICAoKCp0
aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMp
KTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmCkBAIC0zODAsMTQgKzM5MCwxNyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdAog
ICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CiAKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3Ip
OworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEY6Om1vdmUoZXJyb3IpKTsKIH0KIAotdm9pZCBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkLCBjb25zdCBJ
bnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2UyKGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMihyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zOTYs
MTQgKzQwOSwxNyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+
bG9hZFJlc291cmNlMihlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEY6Om1vdmUoZXJyb3IpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQor
dm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKGNhbGxJZCk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC00MTIsMTQgKzQyOCwxNyBAQCB2b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMyhlcnJv
cik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6
Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShy
ZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEY6Om1vdmUoZXJy
b3IpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmCkBAIC00MjgsMTQgKzQ0NywxNyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
dAogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJy
b3IpOworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEY6Om1vdmUoZXJyb3IpKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2U1KGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlNShyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC00
NDQsMTQgKzQ2NiwxNyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJlZjxJbnNwZWN0
b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2Vu
dC0+bG9hZFJlc291cmNlNShlcnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEY6Om1vdmUoZXJyb3IpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIp
IHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KGNhbGxJZCk7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1ZXN0SWQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC00NjAsMTQgKzQ4NSwxNyBAQCB2
b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdAogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihl
cnJvcik7CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBX
VEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92
ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEY6Om1vdmUo
ZXJyb3IpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KGNhbGxJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCkBAIC00NzYsNyArNTA0LDEwIEBAIHZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KGVycm9yKTsKIAotICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBl
cnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVs
c2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9l
bnVtLXZhbHVlcy5qc29uLXJlc3VsdAppbmRleCA5ZDc0ODUzYzJmNTMzZTZlMTMwNTQ1ZDQ1NjJj
Mzk5Zjg2MDNkOGJjLi42ZjkzZTQzYTViNTk4YWY5YWYwZTc3NTcyZTEyZDllMTg4YzM0MTZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVz
dWx0CkBAIC0xNjksOSArMTY5LDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwotICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsK
IHByaXZhdGU6Ci0gICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYm
IHBhcmFtZXRlcnMpOwogcHJpdmF0ZToKICAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7CiAgICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2Vu
dDsKQEAgLTIyNCw2ICsyMjQsNyBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKQEAgLTI0OSwyMSArMjUwLDI0IEBAIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyCiAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0
ZXJhbCgiQ29tbWFuZERvbWFpbiIpLCB0aGlzKTsKIH0KIAotdm9pZCBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlM
aXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKICAgICBpZiAobWV0aG9kID09ICJjb21t
YW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIpCi0gICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBlbHNlCi0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJDb21tYW5kRG9tYWlu
IiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJDb21tYW5kRG9tYWluIiwgJy4nLCBtZXRob2QsICIn
IHdhcyBub3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JikKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoY2FsbElkKTsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0yNzYsNyArMjgwLDEwIEBAIHZvaWQg
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShsb25nIGNhbGxJZCwgY29uCiAgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXR1cm5WYWx1ZSIpLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUpKTsKIAotICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQp
LCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKaW5kZXggNGI2MjJkOWRlNTQzZDRjMWVkMmVhYWU3ZDkwMjU0NmUzZmUwYzI5ZC4u
YWQ1MjZkM2FlOTYxMGJmNTUyOGFmMTMyYjc2YmZhOTUwNjEwZDJlOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50
cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTE4MCw2ICsxODAsNyBAQCB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAppbmRleCBiYjhk
MjlkODRiZjZjZjQ2M2Y4NDkyNDc4ODNiZjc2N2VjNjZiYTM5Li41N2EwNDAzOGNiNTI5OTc5YTQx
ODA0Y2M1YTc0M2IxZjdiZGNhN2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZl
YXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVy
ZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTE2NSw5ICsxNjUsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFz
cyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciosIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBv
dmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRl
OwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKIHByaXZhdGU6CiAg
ICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CiAgICAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqIG1fYWdlbnQ7CkBAIC0yMjEsNiArMjIxLDcgQEAgcHJpdmF0ZToKIAogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCkBAIC0yNDksMjEgKzI1MCwyNCBAQCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZv
ckRvbWFpbihBU0NJSUxpdGVyYWwoIk5ldHdvcmsxIiksIHRoaXMpOwogfQogCi12b2lkIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKKyAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVy
YWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKwogICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNv
dXJjZSIpCi0gICAgICAgIGxvYWRSZXNvdXJjZShjYWxsSWQsIG1lc3NhZ2UpOworICAgICAgICBs
b2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5l
dHdvcmsxIiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3b3JrMSIsICcuJywgbWV0aG9kLCAi
JyB3YXMgbm90IGZvdW5kIikpOwogfQogCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JikKK3ZvaWQg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UoY2FsbElkKTsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UocmVxdWVzdElkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMjcyLDcgKzI3NiwxMCBAQCB2b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JgogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1
bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQog
I2VuZGlmIC8vIFBMQVRGT1JNKFdFQl9DT01NQU5EUykKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0CmluZGV4IGMyNzJmNzJiNmYwOTNiMTJjOGRjOGNmMDQxNTk2MGYwN2Ey
OGEzOTkuLjMwY2NlMTg1MWNlOWMzOWI4MjFjNjMzY2E4ZTgzYWJmY2JkYzdjOGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTE3NCw2ICsxNzQsNyBAQCB0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCBhODE4NmUwYjBiYTgx
MTQwNWQ0NTBjNGM0OWI1ZTQwN2JmNmE1NmMxLi4yOGUxNDU2NTViMDdjNjBhMWQxOTk1YTRmNmIw
YjQ5ZDA5ODA1ZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQK
QEAgLTE3NCw2ICsxNzQsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uLXJlc3VsdAppbmRleCA1M2IzZjIyMTY2OWE4ZWMwNDNkMGZiOTljM2Rm
Nzc4YzZlZmQ2YjJjLi44YmJmYzI5ZTgxZTNjOGZmYjlkMWQyZDlmM2IxNGRiM2JjY2EwMmI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1
bHQKQEAgLTE3NCw2ICsxNzQsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3Vs
dAppbmRleCA3ZTllZjFlOGEwMmZlMDA4ZTExZjViYjVkN2VlNWRhMDc3ZTNiMjVhLi5kMGY0YWYx
M2MxY2ZjNjE3NzllNzc4Yzg0MDNlMjk2ODM3YThmNDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbi1yZXN1bHQKQEAgLTE3Nyw2ICsxNzcsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4K
ICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKaW5kZXggNmQ2M2RkNWFlMGNlMTIyYjJkMGMyNjJhOTE0ZTZmMjUzZDc5YWJi
MS4uMzRjMjg1YzYwMTIwMGUzZTFjMjNkOTZkOWY4ZGNhZjQwNjMyNjBjOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtMTc4LDYgKzE3OCw3IEBAIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNmU5NDk0MWJjMWUzYjYxOGI5ODQyNDg4YmIx
MGY1ZjMzMDQyNmUzZS4uNjBkYjVlYzI2MGJkMWM4ODIxNmY2NGRmMmUyNGQ1MTVkNjg1OWFhMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTE3NCw2ICsxNzQsNyBA
QCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDllYjFkNDBkZGVi
NGRkZDZkMWFhOGMzZTBiZjZjNjZjOGFmNzBlNTMuLjNjMTc2ZjUwODJkYmRkYWI1NDEwYjIzNWU0
YjEzNWYzOTVhYjk5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBA
IC0xNzgsNiArMTc4LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVGVzdFN0dWIuaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1Rlc3RTdHViLmh0bWwKaW5kZXggOWE0NTJjNTIwNmVmYWMzN2E2Y2VhY2NmYzBmMTEz
NjMwZmUyZTMyNy4uN2I1MjA0ZGQ2ZjVlNjQxNjkzM2RkNWI4OTNhMDFiYjkwOWJmZTU0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdFN0dWIuaHRt
bAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0U3R1Yi5odG1s
CkBAIC00Nyw3ICs0Nyw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgICAgIFByb3RvY29sVGVzdC5kdW1wQWN0
aXZpdHlUb1N5c3RlbUNvbnNvbGUgPSBmYWxzZTsKIAogICAgICAgICAvLyBCZXN0IHVzZWQgaW4g
Y29tYmluYXRpb24gd2l0aCBkdW1wQWN0aXZpdHlUb1N5c3RlbUNvbnNvbGUuCi0gICAgICAgIElu
c3BlY3RvclByb3RvY29sLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzID0gZmFsc2U7Cisg
ICAgICAgIFByb3RvY29sVGVzdC5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcyA9IGZhbHNl
OwogICAgIDwvc2NyaXB0PgogPC9oZWFkPgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDhkZmJhOTM1ODc2YTgy
MWZmMzExYmFkNGNiODViYTAzMTljOTJkMGMuLjcwY2MxMDdhNGRlOTNmM2NiNjAzYzYxYWQ1NjVk
YjVhOWIzYWI4MWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wOC0yNSAgQnJpYW4gQnVy
ZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBubyBuZWVkIHRv
IGFsbG9jYXRlIHByb3RvY29sRXJyb3JzIGFycmF5IGZvciBldmVyeSBkaXNwYXRjaGVkIGJhY2tl
bmQgY29tbWFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ2NDY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvYmFja2VuZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVycm9y
cy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL2JhY2tlbmQtZGlz
cGF0Y2hlci1hcmd1bWVudC1lcnJvcnMuaHRtbDoKKyAgICAgICAgU3RyaW5naWZ5IHRoZSAnZGF0
YScgbWVtYmVyIGJlZm9yZSBkdW1waW5nLCBzaW5jZSBpdCBub3cgY29udGFpbnMgSlNPTi4gUmVi
YXNlbGluZSBpdC4KKwogMjAxNS0wOC0yNCAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhZGQgcHJvdG9jb2wgdGVzdCBmb3IgZXhpc3Rpbmcg
ZXJyb3IgaGFuZGxpbmcgcGVyZm9ybWVkIGJ5IHRoZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFja2VuZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVy
cm9ycy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFja2Vu
ZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVycm9ycy1leHBlY3RlZC50eHQKaW5kZXggNDRjNDk0MjM4
NWI0ODY0OTQwNGQxMGE3NGUyZGExNTVlMzA3N2QzNC4uNzUxMDM3MThlYTFkN2M2MGY4NjM5MTM1
OGNiYzk3MDA0OWU3ZjE1OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3Rv
Y29sL2JhY2tlbmQtZGlzcGF0Y2hlci1hcmd1bWVudC1lcnJvcnMtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9iYWNrZW5kLWRpc3BhdGNoZXItYXJndW1l
bnQtZXJyb3JzLWV4cGVjdGVkLnR4dApAQCAtOCw3ICs4LDcgQEAgUEFTUzogdGhlIGJhY2tlbmQg
c2hvdWxkIHNlbmQgYSBwcm90b2NvbCBlcnJvciB3aGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIG1l
c3NhZ2UKIFBBU1M6IHRoZSByZXBvcnRlZCBlcnJvciBzaG91bGQgYmUgIkludmFsaWRQYXJhbXMi
ICgtMzI2MDIpCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyNjAyCiBBY3R1YWwgZXJyb3IgbWVzc2Fn
ZTogU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBw
cm9jZXNzZWQKLUFjdHVhbCBlcnJvciBkYXRhOiAncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWlu
IHJlcXVpcmVkIHBhcmFtZXRlciAnZXhwcmVzc2lvbicgd2l0aCB0eXBlICdTdHJpbmcnLgorQWN0
dWFsIGVycm9yIGRhdGE6IFt7ImNvZGUiOi0zMjYwMiwibWVzc2FnZSI6IidwYXJhbXMnIG9iamVj
dCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICdleHByZXNzaW9uJyB3aXRoIHR5cGUg
J1N0cmluZycuIn0seyJjb2RlIjotMzI2MDIsIm1lc3NhZ2UiOiJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJ1J1bnRpbWUuZXZhbHVhdGUnIGNhbid0IGJlIHByb2Nlc3NlZCJ9XQogCiAtLSBSdW5u
aW5nIHRlc3QgY2FzZTogTWlzc2luZ1JlcXVpcmVkUGFyYW1ldGVyCiBTZW5kaW5nIG1lc3NhZ2U6
IHsiaWQiOjEyMywibWV0aG9kIjoiUnVudGltZS5ldmFsdWF0ZSIsInBhcmFtcyI6eyJzdHVmZiI6
MTIzfX0KQEAgLTE2LDcgKzE2LDcgQEAgUEFTUzogdGhlIGJhY2tlbmQgc2hvdWxkIHNlbmQgYSBw
cm90b2NvbCBlcnJvciB3aGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIG1lc3NhZ2UKIFBBU1M6IHRo
ZSByZXBvcnRlZCBlcnJvciBzaG91bGQgYmUgIkludmFsaWRQYXJhbXMiICgtMzI2MDIpCiBBY3R1
YWwgZXJyb3IgY29kZTogLTMyNjAyCiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBwcm9jZXNzZWQKLUFjdHVh
bCBlcnJvciBkYXRhOiBQYXJhbWV0ZXIgJ2V4cHJlc3Npb24nIHdpdGggdHlwZSAnU3RyaW5nJyB3
YXMgbm90IGZvdW5kLgorQWN0dWFsIGVycm9yIGRhdGE6IFt7ImNvZGUiOi0zMjYwMiwibWVzc2Fn
ZSI6IlBhcmFtZXRlciAnZXhwcmVzc2lvbicgd2l0aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91
bmQuIn0seyJjb2RlIjotMzI2MDIsIm1lc3NhZ2UiOiJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2Qg
J1J1bnRpbWUuZXZhbHVhdGUnIGNhbid0IGJlIHByb2Nlc3NlZCJ9XQogCiAtLSBSdW5uaW5nIHRl
c3QgY2FzZTogUmVxdWlyZWRQYXJhbWV0ZXJXcm9uZ1R5cGUKIFNlbmRpbmcgbWVzc2FnZTogeyJp
ZCI6MTIzLCJtZXRob2QiOiJSdW50aW1lLmV2YWx1YXRlIiwicGFyYW1zIjp7ImV4cHJlc3Npb24i
OltdfX0KQEAgLTI0LDcgKzI0LDcgQEAgUEFTUzogdGhlIGJhY2tlbmQgc2hvdWxkIHNlbmQgYSBw
cm90b2NvbCBlcnJvciB3aGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIG1lc3NhZ2UKIFBBU1M6IHRo
ZSByZXBvcnRlZCBlcnJvciBzaG91bGQgYmUgIkludmFsaWRQYXJhbXMiICgtMzI2MDIpCiBBY3R1
YWwgZXJyb3IgY29kZTogLTMyNjAyCiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogU29tZSBhcmd1bWVu
dHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBwcm9jZXNzZWQKLUFjdHVh
bCBlcnJvciBkYXRhOiBQYXJhbWV0ZXIgJ2V4cHJlc3Npb24nIGhhcyB3cm9uZyB0eXBlLiBJdCBt
dXN0IGJlICdTdHJpbmcnLgorQWN0dWFsIGVycm9yIGRhdGE6IFt7ImNvZGUiOi0zMjYwMiwibWVz
c2FnZSI6IlBhcmFtZXRlciAnZXhwcmVzc2lvbicgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUg
J1N0cmluZycuIn0seyJjb2RlIjotMzI2MDIsIm1lc3NhZ2UiOiJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJ1J1bnRpbWUuZXZhbHVhdGUnIGNhbid0IGJlIHByb2Nlc3NlZCJ9XQogCiAtLSBSdW5u
aW5nIHRlc3QgY2FzZTogT3B0aW9uYWxQYXJhbWV0ZXJXcm9uZ1R5cGUKIFNlbmRpbmcgbWVzc2Fn
ZTogeyJpZCI6MTIzLCJtZXRob2QiOiJSdW50aW1lLmV2YWx1YXRlIiwicGFyYW1zIjp7ImV4cHJl
c3Npb24iOiI0MiIsImluY2x1ZGVDb21tYW5kTGluZUFQSSI6MTIzfX0KQEAgLTMyLDcgKzMyLDcg
QEAgUEFTUzogdGhlIGJhY2tlbmQgc2hvdWxkIHNlbmQgYSBwcm90b2NvbCBlcnJvciB3aGVuIHJl
Y2VpdmluZyBhbiBpbnZhbGlkIG1lc3NhZ2UKIFBBU1M6IHRoZSByZXBvcnRlZCBlcnJvciBzaG91
bGQgYmUgIkludmFsaWRQYXJhbXMiICgtMzI2MDIpCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyNjAy
CiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1l
LmV2YWx1YXRlJyBjYW4ndCBiZSBwcm9jZXNzZWQKLUFjdHVhbCBlcnJvciBkYXRhOiBQYXJhbWV0
ZXIgJ2luY2x1ZGVDb21tYW5kTGluZUFQSScgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0Jv
b2xlYW4nLgorQWN0dWFsIGVycm9yIGRhdGE6IFt7ImNvZGUiOi0zMjYwMiwibWVzc2FnZSI6IlBh
cmFtZXRlciAnaW5jbHVkZUNvbW1hbmRMaW5lQVBJJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBi
ZSAnQm9vbGVhbicuIn0seyJjb2RlIjotMzI2MDIsIm1lc3NhZ2UiOiJTb21lIGFyZ3VtZW50cyBv
ZiBtZXRob2QgJ1J1bnRpbWUuZXZhbHVhdGUnIGNhbid0IGJlIHByb2Nlc3NlZCJ9XQogCiAtLSBS
dW5uaW5nIHRlc3QgY2FzZTogVGVzdEVycm9yQ29kZUZvclN5bmNTZXJ2ZXJFcnJvcgogU2VuZGlu
ZyBtZXNzYWdlOiB7ImlkIjoxMjMsIm1ldGhvZCI6IkRhdGFiYXNlLmdldERhdGFiYXNlVGFibGVO
YW1lcyIsInBhcmFtcyI6eyJkYXRhYmFzZUlkIjoidGhpc2lzTm90QURhdGFiYXNlIn19CkBAIC00
MCw2ICs0MCw3IEBAIFBBU1M6IHRoZSBiYWNrZW5kIHNob3VsZCBzZW5kIGEgcHJvdG9jb2wgZXJy
b3Igd2hlbiByZWNlaXZpbmcgYW4gaW52YWxpZCBtZXNzYWdlCiBQQVNTOiB0aGUgcmVwb3J0ZWQg
ZXJyb3Igc2hvdWxkIGJlICJTZXJ2ZXJFcnJvciIgKC0zMjAwMCkKIEFjdHVhbCBlcnJvciBjb2Rl
OiAtMzIwMDAKIEFjdHVhbCBlcnJvciBtZXNzYWdlOiBEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5h
YmxlZAorQWN0dWFsIGVycm9yIGRhdGE6IFt7ImNvZGUiOi0zMjAwMCwibWVzc2FnZSI6IkRhdGFi
YXNlIGFnZW50IGlzIG5vdCBlbmFibGVkIn1dCiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBUZXN0
RXJyb3JDb2RlRm9yQXN5bmNTZXJ2ZXJFcnJvcgogU2VuZGluZyBtZXNzYWdlOiB7ImlkIjoxMjMs
Im1ldGhvZCI6IkRhdGFiYXNlLmV4ZWN1dGVTUUwiLCJwYXJhbXMiOnsiZGF0YWJhc2VJZCI6InRo
aXNpc05vdEFEYXRhYmFzZSIsInF1ZXJ5IjoiYXNkZiJ9fQpAQCAtNDcsNiArNDgsNyBAQCBQQVNT
OiB0aGUgYmFja2VuZCBzaG91bGQgc2VuZCBhIHByb3RvY29sIGVycm9yIHdoZW4gcmVjZWl2aW5n
IGFuIGludmFsaWQgbWVzc2FnZQogUEFTUzogdGhlIHJlcG9ydGVkIGVycm9yIHNob3VsZCBiZSAi
U2VydmVyRXJyb3IiICgtMzIwMDApCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyMDAwCiBBY3R1YWwg
ZXJyb3IgbWVzc2FnZTogRGF0YWJhc2UgYWdlbnQgaXMgbm90IGVuYWJsZWQKK0FjdHVhbCBlcnJv
ciBkYXRhOiBbeyJjb2RlIjotMzIwMDAsIm1lc3NhZ2UiOiJEYXRhYmFzZSBhZ2VudCBpcyBub3Qg
ZW5hYmxlZCJ9XQogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ29tbWFuZFdpdGhCYWRBcmd1bWVu
dFZhbHVlCiBTZW5kaW5nIG1lc3NhZ2U6IHsiaWQiOjEyMywibWV0aG9kIjoiUnVudGltZS5nZXRQ
cm9wZXJ0aWVzIiwicGFyYW1zIjp7Im9iamVjdElkIjoidGhpc2lzTm90QW5JZCJ9fQpAQCAtNTQs
NCArNTYsNSBAQCBQQVNTOiB0aGUgYmFja2VuZCBzaG91bGQgc2VuZCBhIHByb3RvY29sIGVycm9y
IHdoZW4gcmVjZWl2aW5nIGFuIGludmFsaWQgbWVzc2FnZQogUEFTUzogdGhlIHJlcG9ydGVkIGVy
cm9yIHNob3VsZCBiZSAiU2VydmVyRXJyb3IiICgtMzIwMDApCiBBY3R1YWwgZXJyb3IgY29kZTog
LTMyMDAwCiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogSW5zcGVjdGVkIGZyYW1lIGhhcyBnb25lCitB
Y3R1YWwgZXJyb3IgZGF0YTogW3siY29kZSI6LTMyMDAwLCJtZXNzYWdlIjoiSW5zcGVjdGVkIGZy
YW1lIGhhcyBnb25lIn1dCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm90
b2NvbC9iYWNrZW5kLWRpc3BhdGNoZXItYXJndW1lbnQtZXJyb3JzLmh0bWwgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFja2VuZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVycm9ycy5o
dG1sCmluZGV4IDE1MGU4MzIwMjljMWQxYTczYjA5ZDFhNGM0ZTA5ZTBmMDE0ZWE1MTEuLjA1YWE3
ZTQ1MmIxY2I5MzdhNDFkZGYyZDUwYmQyMjc5Mjk4ZDI3ODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9wcm90b2NvbC9iYWNrZW5kLWRpc3BhdGNoZXItYXJndW1lbnQtZXJyb3Jz
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL2JhY2tlbmQtZGlzcGF0
Y2hlci1hcmd1bWVudC1lcnJvcnMuaHRtbApAQCAtMzYsNyArMzYsNyBAQCBmdW5jdGlvbiB0ZXN0
KCkKICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xUZXN0LmxvZygiQWN0dWFsIGVycm9yIGNv
ZGU6ICIgKyByZXNwb25zZS5jb2RlKTsKICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xUZXN0
LmxvZygiQWN0dWFsIGVycm9yIG1lc3NhZ2U6ICIgKyByZXNwb25zZS5tZXNzYWdlKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBQcm90b2NvbFRlc3QubG9nKCJBY3R1YWwgZXJyb3IgZGF0YTogIiArIHJlc3BvbnNlLmRhdGEp
OworICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xUZXN0LmxvZygiQWN0dWFsIGVycm9y
IGRhdGE6ICIgKyBKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgIH0pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259889</attachid>
            <date>2015-08-25 15:19:35 -0700</date>
            <delta_ts>2015-08-25 16:52:15 -0700</delta_ts>
            <desc>Proposed Fix (fix linker)</desc>
            <filename>bug-146466-20150825151923.patch</filename>
            <type>text/plain</type>
            <size>107572</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4OTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
Mjk5OTJlZGVjZTY2NTliMDA4M2UxMzFlYjkwYzllNjM5MWQ1MjE5Li40OTI2NTUxNGVlMzI3MTlh
NDk0MGRiMDU2ZTkzNjYwYjVhYWE5ZDk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4OCBAQAorMjAxNS0wOC0yNSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBubyBuZWVkIHRvIGFsbG9jYXRlIHByb3RvY29sRXJyb3Jz
IGFycmF5IGZvciBldmVyeSBkaXNwYXRjaGVkIGJhY2tlbmQgY29tbWFuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NDY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIENsZWFuIHVwIHNvbWUgb2YgdGhl
IGJhY2tlbmQgZGlzcGF0Y2hlciBjb2RlLCB3aXRoIGEgZm9jdXMgb24gZWxpbWluYXRpbmcgdXNl
bGVzcyBhbGxvY2F0aW9ucworICAgICAgICBvZiBvYmplY3RzIGluIHRoZSBjb21tb24gY2FzZSB3
aGVuIG5vIHByb3RvY29sIGVycm9ycyBoYXBwZW4uIFRoaXMgaXMgZG9uZSBieSBzYXZpbmcgdGhl
CisgICAgICAgIGN1cnJlbnQgaWQgb2YgZWFjaCByZXF1ZXN0IGFzIGl0IGlzIGJlaW5nIHByb2Nl
c3NlZCBieSB0aGUgYmFja2VuZCBkaXNwYXRjaGVyLCBhbmQgdGFnZ2luZyBhbnkKKyAgICAgICAg
c3Vic2VxdWVudCBlcnJvcnMgd2l0aCB0aGF0IGlkLiBUaGlzIGFsc28gbWVhbnMgd2UgZG9uJ3Qg
aGF2ZSB0byB0aHJlYWQgdGhlIHJlcXVlc3RJZCBleGNlcHQKKyAgICAgICAgaW4gdGhlIGFzeW5j
IGNvbW1hbmQgY29kZSBwYXRoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBsaWZ0cyBzb21l
IGNvbW1vbiBjb2RlIHNoYXJlZCBiZXR3ZWVuIGFsbCBnZW5lcmF0ZWQgYmFja2VuZCBjb21tYW5k
CisgICAgICAgIGltcGxlbWVudGF0YXRpb25zIGludG8gdGhlIHBlci1kb21haW4gZGlzcGF0Y2gg
bWV0aG9kIGluc3RlYWQuIFRoaXMgcmVkdWNlcyBnZW5lcmF0ZWQgY29kZSBzaXplLgorCisgICAg
ICAgIFRvIGJlIGNvbnNpc3RlbnQsIHRoaXMgcGF0Y2ggc3RhbmRhcmRpemVzIG9uIGNhbGxpbmcg
dGhlIGlkIG9mIGEgYmFja2VuZCBtZXNzYWdlIGl0cyAncmVxdWVzdElkJy4KKyAgICAgICAgUmVx
dWVzdHMgY2FuIGJlIGhhbmRsZWQgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseSAodHJp
Z2dlcmVkIHZpYSB0aGUgJ2FzeW5jJyBwcm9wZXJ0eSkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHByb3RvY29sIHRlc3RzLgorCisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKTogU3BsaXQgdGhl
IHR3byBjb2RlIHBhdGhzIGZvciByZXBvcnRpbmcKKyAgICAgICAgc3VjY2VzcyBhbmQgZmFpbHVy
ZS4KKworICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
OjpzZW5kRmFpbHVyZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKTogUmVuYW1lZCBmcm9tIHNlbmRJZkFjdGl2ZS4KKyAg
ICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKTogUmVzZXQgY291
bnRlcnMgYW5kIGN1cnJlbnQgcmVxdWVzdElkIGJlZm9yZSBkaXNwYXRjaGluZy4KKyAgICAgICAg
Tm8gbmVlZCB0byBtYW51YWxseSB0aHJlYWQgdGhlIHJlcXVlc3RJZCB0byBhbGwgcmVwb3J0UHJv
dG9jb2xFcnJvciBjYWxscy4KKworICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
cjo6aGFzUHJvdG9jb2xFcnJvcnMpOiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyOjpzZW5kUGVuZGluZ0Vycm9ycyk6IFNlbmQgYW55IHNhdmVkIHByb3RvY29sIGVy
cm9ycyB0byB0aGUgZnJvbnRlbmQuCisgICAgICAgIEFsd2F5cyBzZW5kIGEgJ2RhdGEnIG1lbWJl
ciB3aXRoIGFsbCBvZiB0aGUgZXJyb3JzLCBldmVuIGlmIHRoZXJlJ3MganVzdCBvbmUuIFdlIG1p
Z2h0IHdhbnQgdG8gYWRkCisgICAgICAgIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZXJyb3JzIGxh
dGVyLgorCisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90
b2NvbEVycm9yKTogRW5xdWV1ZSBhIHByb3RvY29sIGVycm9yIHRvIGJlIHNlbnQgbGF0ZXIuCisg
ICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9wZXJ0eVZhbHVlKTog
UmVtb3ZlIHVzZWxlc3MgdHlwZSBwYXJhbWV0ZXJzIGFuZCBudWtlIG1vc3Qgb2YKKyAgICAgICAg
dGhlIHR5cGUgY29udmVyc2lvbiBtZXRob2RzLiBVc2Ugc3RkOjpmdW5jdGlvbiB0eXBlcyBpbnN0
ZWFkIG9mIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMuCisKKyAgICAgICAgKEluc3BlY3Rvcjo6Y2Fz
dFRvSW50ZWdlcik6IEFkZGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpjYXN0VG9OdW1iZXIpOiBB
ZGRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIp
OgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAgICAg
IChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdCk6CisgICAgICAgIChJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OmdldFByb3Bl
cnR5VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6
OmFzSW50ZWdlcik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9kQnJpZGdl
czo6YXNEb3VibGUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRn
ZXM6OmFzU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlk
Z2VzOjphc0Jvb2xlYW4pOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJy
aWRnZXM6OmFzT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RC
cmlkZ2VzOjphc0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RC
cmlkZ2VzOjphc1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBFeHRyYWN0ICdwYXJhbXMnIG9iamVjdCBpbiBk
b21haW4gZGlzcGF0Y2ggbWV0aG9kLgorICAgICAgICBPbWl0IHJlcXVlc3RJZHMgd2hlcmUgcG9z
c2libGUuIENvbnZlcnQgZGlzcGF0Y2ggdGFibGVzIHRvIHVzZSBOZXZlckRlc3Ryb3llZC4gQ2hl
Y2sgdGhlIHByb3RvY29sIGVycm9yIGNvdW50CisgICAgICAgIHRvIGRlY2lkZSB3aGV0aGVyIHRv
IGFib3J0IHRoZSBkaXNwYXRjaCBvciBub3QsIHJhdGhlciB0aGFuIGFsbG9jYXRpbmcgb3VyIG93
biBlcnJvcnMgYXJyYXkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OgorICAgICAgICAodm9pZCk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weTogUmV2ZXJ0IHRvIHBhc3NpbmcgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4KKyAgICAg
ICAgc2luY2UgcGFyYW1ldGVycyBhcmUgbm93IGJlaW5nIHBhc3NlZCByYXRoZXIgdGhhbiB0aGUg
bWVzc2FnZSBvYmplY3QuIFNvbWUgY29tbWFuZHMgZG8gbm90IHJlcXVpcmUgcGFyYW1ldGVycy4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChD
cHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zbWFs
bF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICBSZWJhc2VsaW5l
IHNvbWUgcHJvdG9jb2wgZ2VuZXJhdG9yIHRlc3RzLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVz
dWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZm
ZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdDoK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdDoKKwogMjAxNS0wOC0yNSAgU2Fh
bSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBMZXRzIHJlbmFtZSBjb2Rl
T3JpZ2luSW5kZXggdG8gY2FsbFNpdGVJbmRleCBhbmQgZ2V0IHJpZCBvZiBDYWxsRnJhbWU6Okxv
Y2F0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggZmZlZTRkNzI5NjA4ODgzYzY3OGNj
NTk1MjUwODhjOTA5MjY4Zjk3Mi4uODAxZmVjNmVjMWQwNGI1Nzc4ZTJlNDI1ZDg4Y2UzNTMwY2Q0
NDA1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTUtMDgt
MjUgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rv
cjogbm8gbmVlZCB0byBhbGxvY2F0ZSBwcm90b2NvbEVycm9ycyBhcnJheSBmb3IgZXZlcnkgZGlz
cGF0Y2hlZCBiYWNrZW5kIGNvbW1hbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0NjQ2NgorCisgICAgICAgIFJldmlld2VkIGJ5IEpvc2VwaCBQZWNv
cmFyby4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVGVzdFN0dWIuaHRtbDogRml4IGEgdHlw
bywgdGhpcyBwcm9wZXJ0eSBleGlzdHMgb24gUHJvdG9jb2xUZXN0LgorCiAyMDE1LTA4LTI1ICBN
YXR0IEJha2VyICA8bWF0dGJha2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBSZW5kZXJpbmcgRnJhbWVzIHBpZSBjaGFydCBzaG91bGQgdXNlIHRoZSBuZWVkc0xheW91dC91
cGRhdGVMYXlvdXQgaWRpb20KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKaW5kZXggZDY3YWI5
OTRiZWViYjkwYWI0OGUyYzJmMWZhM2NlM2QwNjY1YjY4OC4uNGZmMzJkNzUzNGNiZTkzYzcwYTZh
NmNiMzgwYjA2OGUwN2YzYjYyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIENocm9taXVtIEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNCwxMCArMzQs
OSBAQAogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZTo6Q2FsbGJhY2tCYXNlKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlz
cGF0Y2hlciwgaW50IGlkKQorQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJh
Y2tCYXNlKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgbG9uZyBy
ZXF1ZXN0SWQpCiAgICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKFdURjo6bW92ZShiYWNrZW5kRGlz
cGF0Y2hlcikpCi0gICAgLCBtX2lkKGlkKQotICAgICwgbV9hbHJlYWR5U2VudChmYWxzZSkKKyAg
ICAsIG1fcmVxdWVzdElkKHJlcXVlc3RJZCkKIHsKIH0KIApAQCAtNDksMTYgKzQ4LDI0IEBAIGJv
b2wgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6aXNBY3RpdmUoKSBjb25zdAogdm9p
ZCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kRmFpbHVyZShjb25zdCBFcnJv
clN0cmluZyYgZXJyb3IpCiB7CiAgICAgQVNTRVJUKGVycm9yLmxlbmd0aCgpKTsKLSAgICBzZW5k
SWZBY3RpdmUobnVsbHB0ciwgZXJyb3IpOworCisgICAgaWYgKG1fYWxyZWFkeVNlbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1fYWxyZWFkeVNlbnQgPSB0cnVlOworCisgICAgLy8gSW1tZWRp
YXRlbHkgc2VuZCBhbiBlcnJvciBtZXNzYWdlIHNpbmNlIHRoaXMgaXMgYW4gYXN5bmMgcmVzcG9u
c2Ugd2l0aCBhIHNpbmdsZSBlcnJvci4KKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKG1fcmVxdWVzdElkLCBTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiB9CiAKLXZvaWQgQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZElmQWN0aXZlKFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3Ip
Cit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCiB7CiAgICAgaWYgKG1fYWxyZWFk
eVNlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShtX2lkLCBXVEY6Om1vdmUocGFydGlhbE1lc3NhZ2UpLCBpbnZvY2F0aW9uRXJyb3Ip
OwogICAgIG1fYWxyZWFkeVNlbnQgPSB0cnVlOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShtX3JlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcnRpYWxNZXNzYWdlKSk7CiB9CiAK
IFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4gQmFja2VuZERpc3BhdGNoZXI6OmNyZWF0ZShGcm9udGVu
ZENoYW5uZWwqIGZyb250ZW5kQ2hhbm5lbCkKQEAgLTc2LDgzICs4Myw5NCBAQCB2b2lkIEJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgUmVm
PEJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIG1fcHJvdG9jb2xFcnJv
cnMuY2xlYXIoKTsKKyAgICBtX2N1cnJlbnRSZXF1ZXN0SWQgPSBOdWxsb3B0OworCiAgICAgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBwYXJzZWRNZXNzYWdlOwogICAgIGlmICghSW5zcGVjdG9yVmFs
dWU6OnBhcnNlSlNPTihtZXNzYWdlLCBwYXJzZWRNZXNzYWdlKSkgewotICAgICAgICByZXBvcnRQ
cm90b2NvbEVycm9yKG51bGxwdHIsIFBhcnNlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBt
dXN0IGJlIGluIEpTT04gZm9ybWF0IikpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKFBh
cnNlRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Iikp
OworICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZU9iamVjdDsKICAgICBpZiAoIXBh
cnNlZE1lc3NhZ2UtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKSB7Ci0gICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IobnVsbHB0ciwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiTWVzc2Fn
ZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJNZXNzYWdlIG11c3QgYmUgYSBKU09O
aWZpZWQgb2JqZWN0IikpOworICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBjYWxsSWRWYWx1ZTsK
LSAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgY2Fs
bElkVmFsdWUpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IobnVsbHB0ciwgSW52YWxp
ZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIikpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gcmVxdWVzdElkVmFsdWU7CisgICAgaWYgKCFtZXNz
YWdlT2JqZWN0LT5nZXRWYWx1ZShBU0NJSUxpdGVyYWwoImlkIiksIHJlcXVlc3RJZFZhbHVlKSkg
eworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVy
YWwoIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgc2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxvbmcgY2FsbElkID0gMDsK
LSAgICBpZiAoIWNhbGxJZFZhbHVlLT5hc0ludGVnZXIoY2FsbElkKSkgewotICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIlRo
ZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIikpOworICAgIGxvbmcgcmVx
dWVzdElkID0gMDsKKyAgICBpZiAoIXJlcXVlc3RJZFZhbHVlLT5hc0ludGVnZXIocmVxdWVzdElk
KSkgeworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCBBU0NJSUxp
dGVyYWwoIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIikpOworICAg
ICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
bV9jdXJyZW50UmVxdWVzdElkID0gcmVxdWVzdElkOworCiAgICAgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiBtZXRob2RWYWx1ZTsKICAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgibWV0aG9kIiksIG1ldGhvZFZhbHVlKSkgewotICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKCZjYWxsSWQsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIidtZXRob2QnIHBy
b3BlcnR5IHdhc24ndCBmb3VuZCIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCInbWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQi
KSk7CisgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBTdHJpbmcgbWV0aG9kU3RyaW5nOwogICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3Ry
aW5nKG1ldGhvZFN0cmluZykpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElk
LCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9w
ZXJ0eSBtdXN0IGJlIHN0cmluZyIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAnbWV0aG9kJyBwcm9wZXJ0eSBt
dXN0IGJlIHN0cmluZyIpKTsKKyAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IGRvbWFpbkFuZE1ldGhvZDsKICAg
ICBtZXRob2RTdHJpbmcuc3BsaXQoJy4nLCB0cnVlLCBkb21haW5BbmRNZXRob2QpOwogICAgIGlm
IChkb21haW5BbmRNZXRob2Quc2l6ZSgpICE9IDIgfHwgIWRvbWFpbkFuZE1ldGhvZFswXS5sZW5n
dGgoKSB8fCAhZG9tYWluQW5kTWV0aG9kWzFdLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiVGhlICdt
ZXRob2QnIHByb3BlcnR5IHdhcyBmb3JtYXR0ZWQgaW5jb3JyZWN0bHkuIEl0IHNob3VsZCBiZSAn
RG9tYWluLm1ldGhvZCciKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJl
cXVlc3QsIEFTQ0lJTGl0ZXJhbCgiVGhlICdtZXRob2QnIHByb3BlcnR5IHdhcyBmb3JtYXR0ZWQg
aW5jb3JyZWN0bHkuIEl0IHNob3VsZCBiZSAnRG9tYWluLm1ldGhvZCciKSk7CisgICAgICAgIHNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBTdHJpbmcg
ZG9tYWluID0gZG9tYWluQW5kTWV0aG9kWzBdOwogICAgIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyKiBkb21haW5EaXNwYXRjaGVyID0gbV9kaXNwYXRjaGVycy5nZXQoZG9tYWluKTsKICAg
ICBpZiAoIWRvbWFpbkRpc3BhdGNoZXIpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcigm
Y2FsbElkLCBNZXRob2ROb3RGb3VuZCwgIiciICsgZG9tYWluICsgIicgZG9tYWluIHdhcyBub3Qg
Zm91bmQiKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihNZXRob2ROb3RGb3VuZCwgIici
ICsgZG9tYWluICsgIicgZG9tYWluIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgc2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFN0cmluZyBtZXRob2Qg
PSBkb21haW5BbmRNZXRob2RbMV07Ci0gICAgZG9tYWluRGlzcGF0Y2hlci0+ZGlzcGF0Y2goY2Fs
bElkLCBtZXRob2QsIG1lc3NhZ2VPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgZG9tYWlu
RGlzcGF0Y2hlci0+ZGlzcGF0Y2gocmVxdWVzdElkLCBtZXRob2QsIG1lc3NhZ2VPYmplY3QucmVs
ZWFzZU5vbk51bGwoKSk7CisKKyAgICBpZiAobV9wcm90b2NvbEVycm9ycy5zaXplKCkpCisgICAg
ICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNl
bmRSZXNwb25zZShsb25nIGNhbGxJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiByZXN1bHQs
IGNvbnN0IEVycm9yU3RyaW5nJiBpbnZvY2F0aW9uRXJyb3IpCit2b2lkIEJhY2tlbmREaXNwYXRj
aGVyOjpzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcmVzdWx0KQogewogICAgIGlmICghbV9mcm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmIChpbnZvY2F0aW9uRXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcigmY2FsbElkLCBTZXJ2ZXJFcnJvciwgaW52b2NhdGlvbkVycm9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgp
KTsKIAorICAgIC8vIFRoZSBKU09OLVJQQyAyLjAgc3BlY2lmaWNhdGlvbiByZXF1aXJlcyB0aGF0
IHRoZSAiZXJyb3IiIG1lbWJlciBoYXZlIHRoZSB2YWx1ZSAnbnVsbCcKKyAgICAvLyBpZiBubyBl
cnJvciBvY2N1cnJlZCBkdXJpbmcgYW4gaW52b2NhdGlvbiwgYnV0IHdlIGRvIG5vdCBpbmNsdWRl
IGl0IGF0IGFsbC4KICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZU1lc3NhZ2UgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHJlc3BvbnNlTWVzc2FnZS0+c2V0T2JqZWN0
KEFTQ0lJTGl0ZXJhbCgicmVzdWx0IiksIHJlc3VsdCk7Ci0gICAgcmVzcG9uc2VNZXNzYWdlLT5z
ZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgY2FsbElkKTsKKyAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCByZXF1ZXN0SWQpOwogICAgIG1fZnJv
bnRlbmRDaGFubmVsLT5zZW5kTWVzc2FnZVRvRnJvbnRlbmQocmVzcG9uc2VNZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29s
RXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgZXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29uc3QKLXsKLSAgICByZXBvcnRQcm90b2Nv
bEVycm9yKGNhbGxJZCwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UsIG51bGxwdHIpOwotfQotCi12
b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNv
bnN0IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlIGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+PiYmIGRh
dGEpIGNvbnN0Cit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUGVuZGluZ0Vycm9ycygpCiB7
CisgICAgLy8gVGhlc2UgZXJyb3IgY29kZXMgYXJlIHNwZWNpZmllZCBpbiBKU09OLVJQQyAyLjAs
IFNlY3Rpb24gNS4xLgogICAgIHN0YXRpYyBjb25zdCBpbnQgZXJyb3JDb2Rlc1tdID0gewogICAg
ICAgICAtMzI3MDAsIC8vIFBhcnNlRXJyb3IKICAgICAgICAgLTMyNjAwLCAvLyBJbnZhbGlkUmVx
dWVzdApAQCAtMTYyLDMzICsxODAsNjYgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0
UHJvdG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm8KICAgICAg
ICAgLTMyMDAwLCAvLyBTZXJ2ZXJFcnJvcgogICAgIH07CiAKLSAgICBBU1NFUlRfQVJHKGVycm9y
Q29kZSwgZXJyb3JDb2RlID49IDApOwotICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCAodW5zaWdu
ZWQpZXJyb3JDb2RlIDwgV1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7Ci0gICAgQVNTRVJU
X0FSRyhlcnJvckNvZGUsIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7Ci0KICAgICBpZiAoIW1fZnJv
bnRlbmRDaGFubmVsKQogICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVG8gY29uc3RydWN0
IHRoZSBlcnJvciBvYmplY3QsIG9ubHkgdXNlIHRoZSBsYXN0IGVycm9yJ3MgY29kZSBhbmQgbWVz
c2FnZS4KKyAgICAvLyBQZXIgSlNPTi1SUEMgMi4wLCBTZWN0aW9uIDUuMSwgdGhlICdkYXRhJyBt
ZW1iZXIgbWF5IGNvbnRhaW4gbmVzdGVkIGVycm9ycywKKyAgICAvLyBidXQgb25seSBvbmUgdG9w
LWxldmVsIEVycm9yIG9iamVjdCBzaG91bGQgYmUgc2VudCBwZXIgcmVxdWVzdC4KKyAgICBDb21t
b25FcnJvckNvZGUgZXJyb3JDb2RlOworICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7CisgICAgUmVm
PEluc3BlY3RvckFycmF5PiBwYXlsb2FkID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
IAorICAgIGZvciAoYXV0byYgZGF0YSA6IG1fcHJvdG9jb2xFcnJvcnMpIHsKKyAgICAgICAgZXJy
b3JDb2RlID0gc3RkOjpnZXQ8MD4oZGF0YSk7CisgICAgICAgIGVycm9yTWVzc2FnZSA9IHN0ZDo6
Z2V0PDE+KGRhdGEpOworCisgICAgICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCAodW5zaWduZWQp
ZXJyb3JDb2RlIDwgV1RGX0FSUkFZX0xFTkdUSChlcnJvckNvZGVzKSk7CisgICAgICAgIEFTU0VS
VF9BUkcoZXJyb3JDb2RlLCBlcnJvckNvZGVzW2Vycm9yQ29kZV0pOworCisgICAgICAgIFJlZjxJ
bnNwZWN0b3JPYmplY3Q+IGVycm9yID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgZXJyb3ItPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJjb2RlIiksIGVycm9yQ29kZXNbZXJy
b3JDb2RlXSk7CisgICAgICAgIGVycm9yLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJtZXNzYWdl
IiksIGVycm9yTWVzc2FnZSk7CisgICAgICAgIHBheWxvYWQtPnB1c2hPYmplY3QoV1RGOjptb3Zl
KGVycm9yKSk7CisgICAgfQogCi0gICAgUmVmPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJh
bCgiY29kZSIpLCBlcnJvckNvZGVzW2Vycm9yQ29kZV0pOwotICAgIGVycm9yLT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJtZXNzYWdlIiksIGVycm9yTWVzc2FnZSk7Ci0gICAgaWYgKGRhdGEpCi0g
ICAgICAgIGVycm9yLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgV1RGOjptb3ZlKGRh
dGEpKTsKKyAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiB0b3BMZXZlbEVycm9yID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICB0b3BMZXZlbEVycm9yLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0
ZXJhbCgiY29kZSIpLCBlcnJvckNvZGVzW2Vycm9yQ29kZV0pOworICAgIHRvcExldmVsRXJyb3It
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgZXJyb3JNZXNzYWdlKTsKKyAgICB0
b3BMZXZlbEVycm9yLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImRhdGEiKSwgV1RGOjptb3ZlKHBh
eWxvYWQpKTsKIAogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IG1lc3NhZ2UgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIG1lc3NhZ2UtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoImVy
cm9yIiksIFdURjo6bW92ZShlcnJvcikpOwotICAgIGlmIChjYWxsSWQpCi0gICAgICAgIG1lc3Nh
Z2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCAqY2FsbElkKTsKLSAgICBlbHNlCisg
ICAgbWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgiZXJyb3IiKSwgV1RGOjptb3ZlKHRv
cExldmVsRXJyb3IpKTsKKyAgICBpZiAobV9jdXJyZW50UmVxdWVzdElkKQorICAgICAgICBtZXNz
YWdlLT5zZXRJbnRlZ2VyKEFTQ0lJTGl0ZXJhbCgiaWQiKSwgbV9jdXJyZW50UmVxdWVzdElkLnZh
bHVlKCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBUaGUgJ251bGwnIHZhbHVlIGZvciBhbiB1
bmtub3duIGlkIGlzIHNwZWNpZmllZCBpbiBKU09OLVJQQyAyLjAsIFNlY3Rpb24gNS4KICAgICAg
ICAgbWVzc2FnZS0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJpZCIpLCBJbnNwZWN0b3JWYWx1ZTo6
bnVsbCgpKTsKKyAgICB9CiAKICAgICBtX2Zyb250ZW5kQ2hhbm5lbC0+c2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKG1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KKyAgICAKK3ZvaWQgQmFja2VuZERp
c3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoQ29tbW9uRXJyb3JDb2RlIGVycm9yQ29kZSwg
Y29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCit7CisgICAgcmVwb3J0UHJvdG9jb2xFcnJvciht
X2N1cnJlbnRSZXF1ZXN0SWQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKK30KIAotdGVtcGxh
dGU8dHlwZW5hbWUgUmV0dXJuVmFsdWVUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
IERlZmF1bHRWYWx1ZVR5cGU+Ci1zdGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdldFByb3BlcnR5VmFs
dWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0
X29wdGlvbmFsVmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYg
cHJvdG9jb2xFcnJvcnMsIERlZmF1bHRWYWx1ZVR5cGUgZGVmYXVsdFZhbHVlLCBib29sICgqYXNN
ZXRob2QpKEluc3BlY3RvclZhbHVlJiwgVmFsdWVUeXBlJiksIGNvbnN0IGNoYXIqIHR5cGVOYW1l
KQordm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xFcnJvcihPcHRpb25hbDxs
b25nPiByZWxhdGVkUmVxdWVzdElkLCBDb21tb25FcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBT
dHJpbmcmIGVycm9yTWVzc2FnZSkKIHsKLSAgICBWYWx1ZVR5cGUgcmVzdWx0ID0gZGVmYXVsdFZh
bHVlOworICAgIEFTU0VSVF9BUkcoZXJyb3JDb2RlLCBlcnJvckNvZGUgPj0gMCk7CisKKyAgICAv
LyBJZiB0aGUgZXJyb3Igd2FzIHJlcG9ydGVkIGZyb20gYW4gYXN5bmMgY2FsbGJhY2ssIHRoZW4g
bm8gcmVxdWVzdCBpZCB3aWxsIGJlIHJlZ2lzdGVyZWQgeWV0LgorICAgIGlmICghbV9jdXJyZW50
UmVxdWVzdElkKQorICAgICAgICBtX2N1cnJlbnRSZXF1ZXN0SWQgPSByZWxhdGVkUmVxdWVzdElk
OworCisgICAgbV9wcm90b2NvbEVycm9ycy5hcHBlbmQoc3RkOjp0dXBsZTxDb21tb25FcnJvckNv
ZGUsIFN0cmluZz4oZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK1QgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChJbnNwZWN0b3JWYWx1
ZSYsIFQmKT4gYXNNZXRob2QsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQoreworICAgIFQgcmVzdWx0
KGRlZmF1bHRWYWx1ZSk7CiAgICAgLy8gb3V0X29wdGlvbmFsVmFsdWVGb3VuZCBzaWduYWxzIHRv
IHRoZSBjYWxsZXIgd2hldGhlciBhbiBvcHRpb25hbCBwcm9wZXJ0eSB3YXMgZm91bmQuCiAgICAg
Ly8gaWYgb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9PSBudWxscHRyLCB0aGVuIHRoaXMgaXMgYSBy
ZXF1aXJlZCBwcm9wZXJ0eS4KICAgICBpZiAob3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKQEAgLTE5
NiwxOSArMjQ3LDE5IEBAIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlWYWx1ZShJ
bnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuCiAKICAgICBpZiAoIW9iamVj
dCkgewogICAgICAgICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQpCi0gICAgICAgICAgICBw
cm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6Zm9ybWF0KCIncGFyYW1zJyBvYmplY3QgbXVz
dCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlwZSAnJXMnLiIsIG5hbWUu
dXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCIncGFy
YW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnJXMnIHdpdGggdHlw
ZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBvYmplY3QtPmZpbmQobmFt
ZSk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gb2JqZWN0LT5lbmQoKSkgewogICAgICAgICBpZiAo
IW91dF9vcHRpb25hbFZhbHVlRm91bmQpCi0gICAgICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJ
dGVtKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90
IGZvdW5kLiIsIG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmlu
Zzo6Zm9ybWF0KCJQYXJhbWV0ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJyB3YXMgbm90IGZvdW5kLiIs
IG5hbWUudXRmOCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CiAKICAgICBpZiAoIWFzTWV0aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0KSkg
ewotICAgICAgICBwcm90b2NvbEVycm9ycy5hZGRJdGVtKFN0cmluZzo6Zm9ybWF0KCJQYXJhbWV0
ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRmOCgpLmRh
dGEoKSwgdHlwZU5hbWUpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlBhcmFtZXRlciAnJXMnIGhh
cyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICclcycuIiwgbmFtZS51dGY4KCkuZGF0YSgpLCB0eXBl
TmFtZSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIApAQCAtMjE4LDQ5ICsyNjks
NDIgQEAgc3RhdGljIFJldHVyblZhbHVlVHlwZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG4KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1z
dHJ1Y3QgQXNNZXRob2RCcmlkZ2VzIHsKLSAgICBzdGF0aWMgYm9vbCBhc0ludGVnZXIoSW5zcGVj
dG9yVmFsdWUmIHZhbHVlLCBpbnQmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKG91
dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc0RvdWJsZShJbnNwZWN0b3JWYWx1ZSYgdmFsdWUs
IGRvdWJsZSYgb3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc0RvdWJsZShvdXRwdXQpOyB9Ci0gICAg
c3RhdGljIGJvb2wgYXNTdHJpbmcoSW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBTdHJpbmcmIG91dHB1
dCkgeyByZXR1cm4gdmFsdWUuYXNTdHJpbmcob3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFz
Qm9vbGVhbihJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIGJvb2wmIG91dHB1dCkgeyByZXR1cm4gdmFs
dWUuYXNCb29sZWFuKG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc09iamVjdChJbnNwZWN0
b3JWYWx1ZSYgdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiBvdXRwdXQpIHsgcmV0dXJu
IHZhbHVlLmFzT2JqZWN0KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc0FycmF5KEluc3Bl
Y3RvclZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvckFycmF5PiYgb3V0cHV0KSB7IHJldHVy
biB2YWx1ZS5hc0FycmF5KG91dHB1dCk7IH0KLSAgICBzdGF0aWMgYm9vbCBhc1ZhbHVlKEluc3Bl
Y3RvclZhbHVlJiB2YWx1ZSwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiYgb3V0cHV0KSB7IHJldHVy
biB2YWx1ZS5hc1ZhbHVlKG91dHB1dCk7IH0KLX07Ci0KLWludCBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90
b2NvbEVycm9ycykKK3N0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSW5zcGVjdG9yVmFsdWUmIHZh
bHVlLCBpbnQmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKHJlc3VsdCk7IH0KK3N0
YXRpYyBib29sIGNhc3RUb051bWJlcihJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgcmVz
dWx0KSB7IHJldHVybiB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9CisKK2ludCBCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0SW50ZWdlcihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVl
PGludCwgaW50LCBpbnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMs
IDAsIEFzTWV0aG9kQnJpZGdlczo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOworICAgIHJldHVybiBn
ZXRQcm9wZXJ0eVZhbHVlPGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2FzdFRv
SW50ZWdlciwgIkludGVnZXIiKTsKIH0KIAotZG91YmxlIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRE
b3VibGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xF
cnJvcnMpCitkb3VibGUgQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShJbnNwZWN0b3JPYmpl
Y3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAg
IHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRvdWJsZSwgZG91YmxlLCBkb3VibGU+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsIDAsIEFzTWV0aG9kQnJpZGdlczo6YXNE
b3VibGUsICJOdW1iZXIiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGU+KG9i
amVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgMCwgJmNhc3RUb051bWJlciwgIk51bWJlciIpOwogfQog
Ci1TdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKK1N0cmluZyBCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
U3RyaW5nLCBTdHJpbmcsIFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2Nv
bEVycm9ycywgIiIsIEFzTWV0aG9kQnJpZGdlczo6YXNTdHJpbmcsICJTdHJpbmciKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwg
IiIsICZJbnNwZWN0b3JWYWx1ZTo6YXNTdHJpbmcsICJTdHJpbmciKTsKIH0KIAotYm9vbCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJh
eTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycykKK2Jvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4oSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxib29sLCBib29sLCBi
b29sPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBmYWxzZSwgQXNN
ZXRob2RCcmlkZ2VzOjphc0Jvb2xlYW4sICJCb29sZWFuIik7CisgICAgcmV0dXJuIGdldFByb3Bl
cnR5VmFsdWU8Ym9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBmYWxzZSwgJkluc3BlY3Rv
clZhbHVlOjphc0Jvb2xlYW4sICJCb29sZWFuIik7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3Qs
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdldFBy
b3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3Rvck9iamVjdD4sIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+LCBJbnNwZWN0b3JPYmplY3QqPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29s
RXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJyaWRnZXM6OmFzT2JqZWN0LCAiT2JqZWN0Iik7Cisg
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3Rvck9iamVjdD4+KG9iamVj
dCwgbmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkluc3BlY3RvclZhbHVlOjphc09iamVjdCwg
Ik9iamVjdCIpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEJhY2tlbmREaXNwYXRjaGVy
OjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90
b2NvbEVycm9ycykKK1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gQmFja2VuZERpc3BhdGNoZXI6Omdl
dEFycmF5KEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3Bl
Y3RvckFycmF5PiwgUmVmUHRyPEluc3BlY3RvckFycmF5PiwgSW5zcGVjdG9yQXJyYXkqPihvYmpl
Y3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCBudWxscHRyLCBBc01ldGhvZEJy
aWRnZXM6OmFzQXJyYXksICJBcnJheSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwg
Jkluc3BlY3RvclZhbHVlOjphc0FycmF5LCAiQXJyYXkiKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4sIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4sIEluc3BlY3RvclZhbHVlKj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc1ZhbHVlLCAiVmFsdWUiKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+PihvYmplY3QsIG5h
bWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZJbnNwZWN0b3JWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVl
Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
CmluZGV4IGIzMDM3MDBhMjA5YmIyMjI2NmJhZThmNGU0ZGU4ZGQzMjZmYjk0YjcuLjAxZjgyNTVl
MjNmNzNlNzI5YzRmMTRlNzMwZWQyNjRkYTViNjNjOWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJ
bmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIENocm9t
aXVtIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
OCw2ICsyOCw3IEBACiAjZGVmaW5lIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyX2gKIAogI2lu
Y2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCkBAIC00MywzNSArNDQsMzYgQEAgcHVibGljOgogICAgIFN1cHBsZW1lbnRhbEJh
Y2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlcikKICAg
ICAgICAgOiBtX2JhY2tlbmREaXNwYXRjaGVyKGJhY2tlbmREaXNwYXRjaGVyKSB7IH0KICAgICB2
aXJ0dWFsIH5TdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkgPSAwOwogcHJvdGVjdGVkOgogICAgIFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKIH07CiAKLWNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8QmFja2VuZERpc3BhdGNoZXI+IHsKK2Ns
YXNzIEJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8QmFja2VuZERpc3BhdGNo
ZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUo
RnJvbnRlbmRDaGFubmVsKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEZyb250ZW5kQ2hhbm5lbCopOwogCiAgICAgY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgQ2FsbGJhY2tCYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FsbGJhY2tC
YXNlPiB7CiAgICAgcHVibGljOgotICAgICAgICBDYWxsYmFja0Jhc2UoUmVmPEJhY2tlbmREaXNw
YXRjaGVyPiYmLCBpbnQgaWQpOworICAgICAgICBDYWxsYmFja0Jhc2UoUmVmPEJhY2tlbmREaXNw
YXRjaGVyPiYmLCBsb25nIHJlcXVlc3RJZCk7CiAKICAgICAgICAgYm9vbCBpc0FjdGl2ZSgpIGNv
bnN0OwotICAgICAgICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJik7CiAgICAg
ICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2VudCA9IHRydWU7IH0KIAotICAgIHByb3Rl
Y3RlZDoKLSAgICAgICAgdm9pZCBzZW5kSWZBY3RpdmUoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4m
JiBwYXJ0aWFsTWVzc2FnZSwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcik7Cisg
ICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJik7CisgICAg
ICAgIHZvaWQgc2VuZEZhaWx1cmUoY29uc3QgRXJyb3JTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKLSAg
ICAgICAgaW50IG1faWQ7Ci0gICAgICAgIGJvb2wgbV9hbHJlYWR5U2VudDsKKyAgICAgICAgbG9u
ZyBtX3JlcXVlc3RJZDsKKyAgICAgICAgYm9vbCBtX2FscmVhZHlTZW50IHsgZmFsc2UgfTsKICAg
ICB9OwogCiAgICAgdm9pZCBjbGVhckZyb250ZW5kKCkgeyBtX2Zyb250ZW5kQ2hhbm5lbCA9IG51
bGxwdHI7IH0KICAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gISFtX2Zyb250ZW5k
Q2hhbm5lbDsgfQogCisgICAgYm9vbCBoYXNQcm90b2NvbEVycm9ycygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpID4gMDsgfQorCiAgICAgZW51bSBDb21tb25FcnJvckNv
ZGUgewogICAgICAgICBQYXJzZUVycm9yID0gMCwKICAgICAgICAgSW52YWxpZFJlcXVlc3QsCkBA
IC04MiwyNSArODQsNDIgQEAgcHVibGljOgogICAgIH07CiAKICAgICB2b2lkIHJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbiwgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7
Ci0gICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyBjYWxsSWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYgcmVzdWx0LCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlvbkVycm9yKTsKLSAgICB2
b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25F
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdDsKLSAgICB2b2lkIHJl
cG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9uZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNv
ZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPj4mJiBkYXRhKSBjb25zdDsKLQotICAgIHN0YXRpYyBpbnQgZ2V0SW50
ZWdlcihJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsK
LSAgICBzdGF0aWMgZG91YmxlIGdldERvdWJsZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgU3RyaW5nIGdldFN0cmluZyhJbnNw
ZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0
aWMgYm9vbCBnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJv
dG9jb2xFcnJvcnMpOwotICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGdldFZhbHVl
KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOwotICAg
IHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5zcGVjdG9yT2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gZ2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+
JiBwcm90b2NvbEVycm9ycyk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkaXNwYXRjaChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOworCisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcmVzdWx0KTsKKyAgICB2b2lkIHNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CisKKyAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoQ29tbW9uRXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CisgICAgdm9pZCByZXBvcnRQcm90
b2NvbEVycm9yKE9wdGlvbmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbW1vbkVycm9yQ29k
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBUIGdldFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kLCBUIGRlZmF1bHRWYWx1ZSwgc3Rk
OjpmdW5jdGlvbjxib29sKEluc3BlY3RvclZhbHVlJiwgVCYpPiwgY29uc3QgY2hhciogdHlwZU5h
bWUpOworCisgICAgaW50IGdldEludGVnZXIoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKKyAgICBkb3VibGUgZ2V0RG91YmxlKEluc3BlY3Rv
ck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgU3Ry
aW5nIGdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IHZhbHVlRm91bmQpOworICAgIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gZ2V0VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBnZXRPYmplY3QoSW5z
cGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVjdCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7CiAKIHByaXZhdGU6Ci0gICAgQmFja2Vu
ZERpc3BhdGNoZXIoRnJvbnRlbmRDaGFubmVsKiBGcm9udGVuZENoYW5uZWwpCi0gICAgICAgIDog
bV9mcm9udGVuZENoYW5uZWwoRnJvbnRlbmRDaGFubmVsKSB7IH0KKyAgICBCYWNrZW5kRGlzcGF0
Y2hlcihGcm9udGVuZENoYW5uZWwqIGNoYW5uZWwpCisgICAgICAgIDogbV9mcm9udGVuZENoYW5u
ZWwoY2hhbm5lbCkKKyAgICB7CisgICAgfQogCiAgICAgRnJvbnRlbmRDaGFubmVsKiBtX2Zyb250
ZW5kQ2hhbm5lbDsKICAgICBIYXNoTWFwPFN0cmluZywgU3VwcGxlbWVudGFsQmFja2VuZERpc3Bh
dGNoZXIqPiBtX2Rpc3BhdGNoZXJzOworCisgICAgLy8gUHJvdG9jb2wgZXJyb3JzIHJlcG9ydGVk
IGZvciB0aGUgdG9wLWxldmVsIHJlcXVlc3QgYmVpbmcgcHJvY2Vzc2VkLgorICAgIC8vIElmIHBy
b2Nlc3NpbmcgYSByZXF1ZXN0IHRyaWdnZXJzIGFzeW5jIHJlc3BvbnNlcywgdGhlbiBhbnkgcmVs
YXRlZCBlcnJvcnMgd2lsbAorICAgIC8vIGJlIGF0dHJpYnV0ZWQgdG8gdGhlIHRvcC1sZXZlbCBy
ZXF1ZXN0LCBidXQgZ2VuZXJhdGUgc2VwYXJhdGUgZXJyb3IgbWVzc2FnZXMuCisgICAgVmVjdG9y
PHN0ZDo6dHVwbGU8Q29tbW9uRXJyb3JDb2RlLCBTdHJpbmc+PiBtX3Byb3RvY29sRXJyb3JzOwor
CisgICAgLy8gRm9yIHN5bmNocm9ub3VzbHkgaGFuZGxlZCByZXF1ZXN0cywgYXZvaWQgcGx1bWJp
bmcgcmVxdWVzdElkIHRocm91Z2ggZXZlcnkKKyAgICAvLyBjYWxsIHRoYXQgY291bGQgcG90ZW50
aWFsbHkgZmFpbCB3aXRoIGEgcHJvdG9jb2wgZXJyb3IuCisgICAgT3B0aW9uYWw8bG9uZz4gbV9j
dXJyZW50UmVxdWVzdElkIHsgTnVsbG9wdCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cmlu
ZGV4IDA1ZjM1MzA5NzRlMDU5ZDdmOWM2NGY5ZmU4OTYwZTQ1MzJjYWZmOGUuLjc1MDcxYzZkMTVh
NTlkMjA1OTViMmMzNDgwNjk1ZTI1NDI4ZjM4ODEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVz
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTAxLDcgKzEwMSw3
IEBAIHByb3RlY3RlZDoKICAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciosICR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJp
ZGU7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRlOgogICAgICR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsICR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTEyMywyNCArMTIzLDMwIEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAog
ICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAi
IiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
CisgICAgIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4m
JiBtZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOwogCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsK
KyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVy
cyk7CisKICR7ZGlzcGF0Y2hDYXNlc30KICAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcXCcnLCAiJHtkb21haW5OYW1lfSIsICcuJywgbWV0
aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFr
ZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBm
b3VuZCIpKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFy
Z2VTd2l0Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlz
cGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVj
dG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICB0eXBlZGVmIHZvaWQgKCR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBw
YXJhbWV0ZXJzKTsKKworICAgIHR5cGVkZWYgdm9pZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmIG1lc3NhZ2UpOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVy
PiBEaXNwYXRjaE1hcDsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0
Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7Ci0gICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkg
eworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7Cisg
ICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewogICAgICAgICBzdGF0aWMgY29u
c3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAg
ICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOwpAQCAtMTQ5LDE2ICsxNTUsMTYgQEAgJHtk
aXNwYXRjaENhc2VzfQogICAgICAgICB9OwogICAgICAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FS
UkFZX0xFTkdUSChjb21tYW5kcyk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVu
Z3RoOyArK2kpCi0gICAgICAgICAgICBkaXNwYXRjaE1hcC5hZGQoY29tbWFuZHNbaV0ubmFtZSwg
Y29tbWFuZHNbaV0uaGFuZGxlcik7CisgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgSGFz
aE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjo6aXRlcmF0b3IgaXQgPSBkaXNwYXRjaE1hcC5maW5k
KG1ldGhvZCk7Ci0gICAgaWYgKGl0ID09IGRpc3BhdGNoTWFwLmVuZCgpKSB7Ci0gICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcXCcnLCAiJHtkb21haW5OYW1l
fSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworICAgIGF1dG8gZmluZFJlc3Vs
dCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBpZiAoZmluZFJlc3VsdCA9
PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
bWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5v
dCBmb3VuZCIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLippdC0+
dmFsdWUpKGNhbGxJZCwgbWVzc2FnZS5nZXQoKSk7CisgICAgKCgqdGhpcykuKmZpbmRSZXN1bHQt
PnZhbHVlKShyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiB9IiIiKQogCiAgICAg
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yID0gKApAQCAt
MTc4LDEzICsxODQsOSBAQCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAgIEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgK
LSIiIiAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyOwotICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBh
cmFtc0NvbnRhaW5lcik7Ci0ke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQotICAgIGlmIChwcm90
b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0
cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgXCclc1wnIGNhbid0IGJlIHBy
b2Nlc3NlZCIsICIke2RvbWFpbk5hbWV9LiR7Y29tbWFuZE5hbWV9Iik7Ci0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJy
b3JzKSk7CisiIiIke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorICAgIGlmIChtX2JhY2tlbmRE
aXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJh
bXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgXCclc1wnIGNhbid0
IGJlIHByb2Nlc3NlZCIsICIke2RvbWFpbk5hbWV9LiR7Y29tbWFuZE5hbWV9IikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogIiIiKQpAQCAtMTk2LDcgKzE5OCw3IEBAIHZvaWQgJHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vz
cygke2Zvcm1hCiB7CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4ganNvbk1lc3NhZ2UgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwogJHtvdXRQYXJhbWV0ZXJBc3NpZ25tZW50c30KLSAgICBz
ZW5kSWZBY3RpdmUoV1RGOjptb3ZlKGpzb25NZXNzYWdlKSwgRXJyb3JTdHJpbmcoKSk7CisgICAg
Q2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEY6Om1vdmUoanNvbk1lc3NhZ2UpKTsKIH0iIiIp
CiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24gPSAo
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDU0YmRiM2U5MWFjMDcxNWQ3YTZjZTJiMzZm
NTVjYzNmMjQzMTVhZDYuLjJlNWZmN2E2YTYzZmJiZTBmNTliNTAyOGJkODZmOGM0MWNjYjYxMzYg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0xLDYgKzEsNiBAQAogIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCiAjCi0jIENvcHlyaWdodCAoYykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoYykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoYykgMjAxNCBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjA1LDQgKzIwNSw0
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfZG9tYWluKGRvbWFpbiwg
VGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0
Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBj
b21tYW5kKToKLSAgICAgICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKKyAgICAg
ICAgcmV0dXJuICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDM1MGYwODU0Y2I5YTU2ZTc4N2I5ZGZi
NWU4YzlhMDhlZmJkY2UxMTguLjEyNTExNDkzM2NlOTI4ODE1YjQyZDQ1MmY1MjNlYWVjZDMwN2Ex
MWUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMSw2ICsx
LDYgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5p
dmVyc2l0eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTUxLDYgKzUxLDcgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICBzZWNvbmRhcnlfaGVhZGVycyA9IFsK
ICAgICAgICAgICAgICc8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPicsCiAg
ICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4nLAorICAgICAgICAgICAg
Jzx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4nLAogICAgICAgICAgICAgJzx3dGYvdGV4dC9DU3RyaW5n
Lmg+J10KIAogICAgICAgICBzZWNvbmRhcnlfaW5jbHVkZXMgPSBbJyNpbmNsdWRlICVzJyAlIGhl
YWRlciBmb3IgaGVhZGVyIGluIHNlY29uZGFyeV9oZWFkZXJzXQpAQCAtMTA0LDEwICsxMDUsMTAg
QEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5l
cmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfc21hbGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVt
ZW50YXRpb25fZm9yX2RvbWFpbihzZWxmLCBkb21haW4pOgogICAgICAgICBjYXNlcyA9IFtdCiAg
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgIGlmIChtZXRob2QgPT0gIiVzIiknICUgZG9tYWluLmNv
bW1hbmRzWzBdLmNvbW1hbmRfbmFtZSkKLSAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVz
KGNhbGxJZCwgbWVzc2FnZSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCisg
ICAgICAgIGNhc2VzLmFwcGVuZCgnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJh
bWV0ZXJzKSk7JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCiAgICAgICAgIGZv
ciBjb21tYW5kIGluIGRvbWFpbi5jb21tYW5kc1sxOl06CiAgICAgICAgICAgICBjYXNlcy5hcHBl
bmQoJyAgICBlbHNlIGlmIChtZXRob2QgPT0gIiVzIiknICUgY29tbWFuZC5jb21tYW5kX25hbWUp
Ci0gICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMoY2FsbElkLCBtZXNzYWdlKTsn
ICUgY29tbWFuZC5jb21tYW5kX25hbWUpCisgICAgICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAg
ICAgJXMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1h
bmRfbmFtZSkKIAogICAgICAgICBzd2l0Y2hfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5O
YW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTcwLDcgKzE3MSw3IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAg
ICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIG91dF9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zID0gW10KICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtd
Ci0gICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzID0gWydjYWxs
SWQnXQorICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsn
cmVxdWVzdElkJ10KICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbJ2Vycm9yJ10KIAogICAg
ICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgpAQCAtMjA3LDcg
KzIwOCw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICAnc3VjY2Vzc091dFBhcmFtJzogb3V0X3N1
Y2Nlc3NfYXJndW1lbnQKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW5fcGFyYW1ldGVy
X2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyAlKHBhcmFtZXRlck5h
bWUpcyA9IEJhY2tlbmREaXNwYXRjaGVyOjolKGtleWVkR2V0TWV0aG9kKXMocGFyYW1zQ29udGFp
bmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyS2V5KXMiKSwgJShzdWNjZXNzT3V0
UGFyYW0pcywgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAg
ICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUp
cyAlKHBhcmFtZXRlck5hbWUpcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPiUoa2V5ZWRHZXRNZXRo
b2QpcyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoIiUocGFyYW1ldGVyS2V5KXMiKSwg
JShzdWNjZXNzT3V0UGFyYW0pcyk7JyAlIHBhcmFtX2FyZ3MpCiAKICAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBvcHRpb25hbF9pbl9wYXJhbWV0
ZXJfc3RyaW5nID0gJyUocGFyYW1ldGVyTmFtZSlzX3ZhbHVlRm91bmQgPyAlKHBhcmFtZXRlckV4
cHJlc3Npb24pcyA6IG51bGxwdHInICUgcGFyYW1fYXJncwpAQCAtMjI0LDcgKzIyNSw3IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9y
KToKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsnKQotICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsnKQorICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5h
cHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsnKQogICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCiAgICAgICAg
ICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrLmNvcHlSZWYoKScpCiAKQEAg
LTI2Nyw5ICsyNjgsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBs
ZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlz
KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKScgJSBjb21tYW5kX2FyZ3MpCisg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0
Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpJyAlIGNv
bW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUp
c0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyknICUgY29tbWFuZF9hcmdzKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3snKQogCiAgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1l
dGVycykgPiAwOgpAQCAtMjg2LDcgKzI4Nyw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgRXJyb3JTdHJpbmcgZXJyb3I7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsnKQog
ICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgUmVmPCUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNr
TmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgJShkb21haW5OYW1lKXNCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5
UmVmKCksIGNhbGxJZCkpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBSZWY8JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2Fs
bGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyAlKGRvbWFpbk5hbWUpc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVy
LmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgaWYgbGVu
KGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoKICAgICAgICAgICAgIGxpbmVzLmV4dGVu
ZChvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
bV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNv
bW1hbmRfYXJncykKQEAgLTMwNSw2ICszMDYsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCiAKICAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKScpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
Ojptb3ZlKHJlc3VsdCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbHNlJykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjpt
b3ZlKGVycm9yKSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0dXJu
ICJcbiIuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApp
bmRleCAxNWQ2YTRkOWUxMDM3NzZlMmE5Y2QwZDE0Yzk1YzU2YmQxNmI3YTgzLi44NGY1NjEyOGM3
Y2Q1YzFmMmUyNGM2NDEzYmJmZWI2ZjYyYTAyMjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24tcmVzdWx0CkBAIC0xODcsMTIgKzE4NywxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciosIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwog
cHJpdmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFz
eW5jKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZv
aWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
cGFyYW1ldGVycyk7CiBwcml2YXRlOgogICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAg
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwpAQCAtMjQ1LDYgKzI0
NSw3IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjcwLDM4
ICsyNzEsMzcgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJEYXRhYmFzZSIp
LCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYg
bWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRo
aXMpOwogCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNz
YWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKICAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAg
ICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsIG1lc3NhZ2Up
OworICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwg
V1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykp
OwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKQotICAgICAgICBleGVj
dXRlU1FMU3luYyhjYWxsSWQsIG1lc3NhZ2UpOworICAgICAgICBleGVjdXRlU1FMU3luYyhyZXF1
ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAgICAgZWxzZSBpZiAobWV0aG9kID09ICJl
eGVjdXRlU1FMQXN5bmMiKQotICAgICAgICBleGVjdXRlU1FMQXN5bmMoY2FsbElkLCBtZXNzYWdl
KTsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRl
cnMpKTsKICAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtl
U3RyaW5nKCdcJycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikp
OworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2Ui
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
Y2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKLSAgICBh
dXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6
Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwot
ICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRh
aW5lcik7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50
ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gQmFj
a2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChw
cm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9
IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBw
cm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIp
OwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6
bW92ZShwcm90b2NvbEVycm9ycykpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRh
dGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnki
KSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPnByb3RvY29sRXJyb3JD
b3VudCgpID4gMCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
ICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhjYWxsSWQsIGluX2Rh
dGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zNDIsNyArMzQy
LDEwIEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwKICAgICAgICAgaWYgKG91dF9wcmludENvbG9y
LmlzQXNzaWduZWQoKSkKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJh
bCgicHJpbnRDb2xvciIpLCBvdXRfcHJpbnRDb2xvci5nZXRWYWx1ZSgpKTsKICAgICB9Ci0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3Vs
dCksIGVycm9yKTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0KSk7Cisg
ICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7CiB9CiAK
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50
IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGOjptb3ZlKGJhY2tlbmRE
aXNwYXRjaGVyKSwgaWQpIHsgfQpAQCAtMzcwLDU3ICszNzMsNDkgQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmEKICAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0
ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNvbG9ycyk7CiAgICAgaWYgKHByaW50Q29sb3IuaXNB
c3NpZ25lZCgpKQogICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgi
cHJpbnRDb2xvciIpLCBwcmludENvbG9yLmdldFZhbHVlKCkpOwotICAgIHNlbmRJZkFjdGl2ZShX
VEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBFcnJvclN0cmluZygpKTsKKyAgICBDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKFdURjo6bW92ZShqc29uTWVzc2FnZSkpOwogfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0g
ICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmlu
Zz46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5l
cjsKLSAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXND
b250YWluZXIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6Omdl
dEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQi
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9
IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJ
SUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBp
ZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3Nh
Z2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3Qg
YmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
JmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwg
V1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CisgICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJh
bCgiZGF0YWJhc2VJZCIpLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJx
dWVyeSIpLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+cHJvdG9jb2xF
cnJvckNvdW50KCkgPiAwKSB7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElk
LCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAogICAg
IEVycm9yU3RyaW5nIGVycm9yOwogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBj
YWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlz
cGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOworICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFj
az4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFja2Vu
ZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKICAgICBtX2FnZW50LT5leGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVl
cnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CiAKICAgICBpZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAg
ICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKQogewotICAgIGF1dG8gcHJv
dG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUo
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbXNDb250YWluZXI7Ci0gICAgbWVz
c2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1zQ29udGFpbmVyKTsK
LSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBh
cmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJx
dWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgaWYgKHByb3RvY29s
RXJyb3JzLT5sZW5ndGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5n
Ojpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3Nl
ZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIpOwotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2NvbEVycm9ycykpOworICAg
IGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAg
U3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPnByb3RvY29sRXJyb3JDb3VudCgpID4gMCkgeworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJ
bnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICcl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jIikpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKGNhbGxJZCwgaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5j
KHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmCkBAIC00NTEsNyArNDQ2LDEwIEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVj
CiAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9y
KSk7CiAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIp
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xv
cikpOwogICAgIH0KLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UoY2FsbElk
LCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6
bW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEY6Om1v
dmUoZXJyb3IpKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1
dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERp
c3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlKFdURjo6bW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KQEAg
LTQ2OSwzNyArNDY3LDMzIEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQCiAgICAganNvbk1lc3Nh
Z2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7CiAgICAganNvbk1lc3Nh
Z2UtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIGFsdGVybmF0ZUNv
bG9ycyk7CiAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29s
b3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xv
cikpOwotICAgIHNlbmRJZkFjdGl2ZShXVEY6Om1vdmUoanNvbk1lc3NhZ2UpLCBFcnJvclN0cmlu
ZygpKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURjo6bW92ZShqc29uTWVzc2Fn
ZSkpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Yyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKLSAgICBhdXRvIHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwotICAgIG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7Ci0gICAg
aW50IGluX2RhdGFiYXNlSWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXND
b250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gQmFja2VuZERpc3BhdGNo
ZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnki
KSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChwcm90b2NvbEVycm9y
cy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAi
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7CisgICAgaW50
IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRl
cnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyKTsKKyAgICBTdHJp
bmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyKTsKKyAgICBpZiAobV9iYWNrZW5k
RGlzcGF0Y2hlci0+cHJvdG9jb2xFcnJvckNvdW50KCkgPiAwKSB7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFs
aWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jIikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luYyhjYWxsSWQsIGluX2RhdGFiYXNlSWQsIGlu
X3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMo
cmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgIFJlZjxJbnNwZWN0b3JP
YmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2Fs
bGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgY2Fs
bElkKSk7CisgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNw
YXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7CiAgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFz
eW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsK
IAogICAgIGlmIChlcnJvci5sZW5ndGgoKSkgewogICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgp
OwotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQKaW5kZXggZTM0OWVjZjZmMDhkMGFmNGZmODYzMjhjNzNhMTZiNzYzMGJhZTBkZS4uOTdlNWFi
ZGE3MzI1MDRkZjM1MmIyMzEyMjhkNzU2YmI1NDNiMWVhMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdp
dGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFu
ZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC0x
NzAsMTAgKzE3MCwxMCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciosIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5z
cGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0ZToKLSAgICB2b2lkIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgdm9pZCBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
OwogcHJpdmF0ZToKICAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKQEAgLTIyNiw2ICsyMjYsNyBAQCBwcml2
YXRlOgogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI1MSw1MiArMjUyLDUxIEBA
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9
CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewog
ICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCiAgICAgaWYgKG1ldGhv
ZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAgICAg
ZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKQotICAgICAg
ICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRl
cnMpKTsKICAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtl
U3RyaW5nKCdcJycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikp
OworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2Ui
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElk
LCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKLSAgICBhdXRvIHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwotICAgIG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7CiAgICAg
Ym9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBCYWNrZW5kRGlz
cGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImNv
bHVtbk5hbWVzIiksICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBvcHRfaW5f
Y29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdl
dCgpLCBBU0NJSUxpdGVyYWwoImNvbHVtbk5hbWVzIiksICZvcHRfaW5fY29sdW1uTmFtZXNfdmFs
dWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFN0cmluZyBvcHRfaW5fbm90ZXMgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFt
c0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmb3B0X2luX25vdGVzX3Zh
bHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBTdHJpbmcgb3B0X2luX25vdGVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgibm90ZXMiKSwgJm9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kKTsKICAgICBib29sIG9w
dF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok9wdE91dHB1dDxkb3VibGU+IG9wdF9pbl90aW1lc3RhbXAgPSBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3Rh
bXAiKSwgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok9wdE91dHB1dDxkb3VibGU+IG9wdF9pbl90aW1l
c3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5nZXQoKSwg
QVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7
CiAgICAgYm9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0T2JqZWN0KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ2YWx1
ZXMiKSwgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInZhbHVlcyIpLCAmb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9p
bl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUo
cGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwgJm9wdF9pbl9w
YXlsb2FkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRWYWx1ZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInBheWxvYWQiKSwg
Jm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJkYXRhYmFzZUlkIiksICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9ycy5nZXQoKSk7CisgICAgaW50IG9wdF9pbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNl
SWQiKSwgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX3Nx
bEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3Q+IG9wdF9pbl9zcWxFcnJvciA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3Qo
cGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksICZvcHRfaW5f
c3FsRXJyb3JfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic3FsRXJy
b3IiKSwgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xv
ciA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBB
U0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3Vu
ZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOworICAgIFN0cmluZyBvcHRfaW5fc2NyZWVuQ29sb3Ig
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJzY3JlZW5Db2xvciIpLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwog
ICAgIGJvb2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMg
PSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJ
SUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9y
cyIpLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9p
bl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX3ByaW50
Q29sb3IgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQo
KSwgQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5n
dGgoKSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNv
bWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFz
ZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Oklu
dmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7Cisg
ICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCAmb3B0X2lu
X3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPnBy
b3RvY29sRXJyb3JDb3VudCgpID4gMCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJp
bmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsIG9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVs
bHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwg
b3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRy
LCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0
ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVs
bHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6
IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdl
dCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3Nj
cmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8g
b3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9y
X3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxscHRyKTsKKyAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJ
ZCwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBu
dWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6
IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRh
YmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3Fs
RXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMzcsMzMgKzMzNywzMiBAQCB2b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyBjYWxsSWQsIGNvbnN0CiAgICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkp
CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7Cisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKLSAgICBhdXRvIHByb3RvY29s
RXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwotICAgIG1lc3NhZ2Uu
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7Ci0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgU3Ry
aW5nIGluX25vdGVzID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMu
Z2V0KCkpOwotICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
RG91YmxlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwg
bnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChw
YXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIsIHBy
b3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gaW5fcGF5bG9hZCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9y
cy5nZXQoKSk7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0
SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIp
LCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmpl
Y3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG51bGxw
dHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9
IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgp
KTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVu
Z3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJh
c2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIik7Ci0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Oklu
dmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3ZlKHByb3RvY29sRXJyb3JzKSk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGluX2NvbHVtbk5hbWVzID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJjb2x1bW5OYW1lcyIpLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fbm90ZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJu
b3RlcyIpLCBudWxscHRyKTsKKyAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidGltZXN0
YW1wIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
aW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIG51bGxwdHIp
OworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0cik7
CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIG51bGxwdHIpOworICAgIFN0cmluZyBpbl9zY3JlZW5Db2xvciA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvckFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRB
cnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBu
dWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwg
bnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPnByb3RvY29sRXJyb3JDb3Vu
dCgpID4gMCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNl
LmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoY2FsbElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25v
dGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlk
LCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9w
cmludENvbG9yKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90
aW1lc3RhbXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3Fs
RXJyb3IsIGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9y
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMzk0LDcgKzM5MywxMCBAQCB2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhsb25nIGNhbGxJZCwgY29uc3QgSQogICAgICAgICByZXN1bHQtPnNldEFycmF5KEFTQ0lJTGl0
ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG91dF9hbHRlcm5hdGVDb2xvcnMpOwogICAgICAgICBy
ZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKICAgICB9Ci0g
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJl
c3VsdCksIGVycm9yKTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0KSk7
CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5
aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFu
ZC1zaXplcy5qc29uLXJlc3VsdAppbmRleCAxOTBiMjYwMDIzY2JjODZhYWI1NDQyYTBhZWM0ZGY1
YzdiZGM2NzViLi4xODg0ODJhMTk4ODYyYmU3ZGE3YWI1NTcyZDJjOTUyMjE2MWYzOWZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtMTg4LDkg
KzE4OCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyKiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5z
cGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JP
YmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYgcGFyYW1ldGVycyk7CiBwcml2YXRlOgogICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwog
ICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwpAQCAtMjA1LDE1
ICsyMDUsMTUgQEAgcHJpdmF0ZToKIGNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyKiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5z
cGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JP
YmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVz
c2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwg
Y29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUo
bG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2U2KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2Jq
ZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3Vy
Y2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMp
OworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTco
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiBw
cml2YXRlOgogICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwpAQCAtMjY2LDYgKzI2Niw3IEBAIHByaXZhdGU6
CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpAQCAtMjkyLDIxICsyOTMsMjQgQEAgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRp
c3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKIH0KIAot
dm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAg
UmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3Qo
QVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKICAgICBpZiAobWV0aG9kID09
ICJsb2FkUmVzb3VyY2UxIikKLSAgICAgICAgbG9hZFJlc291cmNlMShjYWxsSWQsIG1lc3NhZ2Up
OworICAgICAgICBsb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMp
KTsKICAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3Ry
aW5nKCdcJycsICJOZXR3b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOwor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAn
LicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmKQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKGNh
bGxJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1
ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMTUsNyArMzE5LDEw
IEBAIHZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2UxKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
Ojptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6
bW92ZShlcnJvcikpOwogfQogCiBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlz
cGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQpAQCAtMzMz
LDE0ICszNDAsMTcgQEAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3Jr
MyIpLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+
JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOwogCi0gICAgdHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoq
Q2FsbEhhbmRsZXIpKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2Up
OworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgdHlw
ZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpOwogICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKLSAgICBERVBSRUNB
VEVEX0RFRklORV9TVEFUSUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7Ci0g
ICAgaWYgKGRpc3BhdGNoTWFwLmlzRW1wdHkoKSkgeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CisgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlz
RW1wdHkoKSkgewogICAgICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CiAgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5k
bGVyOwpAQCAtMzU1LDIzICszNjUsMjMgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjwKICAgICAg
ICAgfTsKICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMp
OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAg
ICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIp
OworICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNv
bW1hbmRzW2ldLmhhbmRsZXIpOwogICAgIH0KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFu
ZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwotICAgIGlmIChp
dCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazMiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5v
dCBmb3VuZCIpKTsKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5k
KG1ldGhvZCk7CisgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkp
IHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsz
IiwgJy4nLCBtZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICAoKCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsIG1lc3NhZ2UuZ2V0KCkpOwor
ICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEY6Om1vdmUocGFy
YW1ldGVycykpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTEobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEoY2FsbElkKTsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKQEAgLTM4MCwxNCArMzkwLDE3IEBAIHZvaWQgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAotICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQp
LCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAg
IGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCi12
b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQs
IGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYp
CiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYg
KG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmxvYWRSZXNvdXJjZTIoY2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5s
b2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYK
QEAgLTM5NiwxNCArNDA5LDE3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMihsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPElu
c3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMoY2Fs
bElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVl
c3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQxMiwxNCArNDI4LDE3
IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNh
bGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVz
dWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2UzKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
Ojptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6
bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTQobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQoY2FsbElkKTsKKyAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQyOCwxNCArNDQ3LDE3IEBAIHZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1
bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOwor
ICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQog
Ci12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTUoY2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U1KHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYKQEAgLTQ0NCwxNCArNDY2LDE3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTYo
Y2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJl
cXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQ2MCwxNCArNDg1
LDE3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2U2KGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTcobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTcoY2FsbElkKTsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQ3Niw3ICs1MDQsMTAgQEAgdm9pZCBOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNw
ZWN0b3JPYmplY3QKICAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOwogCi0g
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJl
c3VsdCksIGVycm9yKTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0KSk7
CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CmluZGV4IDlkNzQ4NTNjMmY1MzNlNmUxMzA1
NDVkNDU2MmMzOTlmODYwM2Q4YmMuLjZmOTNlNDNhNWI1OThhZjlhZjBlNzc1NzJlMTJkOWUxODhj
MzQxNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMu
anNvbi1yZXN1bHQKQEAgLTE2OSw5ICsxNjksOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIqLCBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcg
Y2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNz
YWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92
ZXJyaWRlOwogcHJpdmF0ZToKLSAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgcGFyYW1ldGVycyk7CiBwcml2YXRlOgogICAgIENvbW1hbmREb21haW5CYWNrZW5k
RGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIqKTsKICAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KiBtX2FnZW50OwpAQCAtMjI0LDYgKzIyNCw3IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQpAQCAtMjQ5LDIxICsyNTAsMjQgQEAgQ29tbWFuZERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXIKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
QVNDSUlMaXRlcmFsKCJDb21tYW5kRG9tYWluIiksIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVm
PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVj
dChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKwogICAgIGlmIChtZXRob2Qg
PT0gImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIikKLSAgICAgICAgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkNvbW1h
bmREb21haW4iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkNvbW1hbmREb21haW4iLCAnLicsIG1l
dGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKIH0KIAotdm9pZCBDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShjYWxsSWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVl
c3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTI3Niw3ICsyODAsMTAg
QEAgdm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlKGxvbmcgY2FsbElkLCBjb24KICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQogICAg
ICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwog
Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3Zl
KHJlc3VsdCksIGVycm9yKTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0
KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdAppbmRleCA0YjYyMmQ5ZGU1NDNkNGMxZWQyZWFhZTdkOTAyNTQ2ZTNm
ZTBjMjlkLi5hZDUyNmQzYWU5NjEwYmY1NTI4YWYxMzJiNzZiZmE5NTA2MTBkMmU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMTgwLDYgKzE4MCw3IEBA
IHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0Cmlu
ZGV4IGJiOGQyOWQ4NGJmNmNmNDYzZjg0OTI0Nzg4M2JmNzY3ZWM2NmJhMzkuLjU3YTA0MDM4Y2I1
Mjk5NzlhNDE4MDRjYzVhNzQzYjFmN2JkY2E3YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5z
LXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0
aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtMTY1LDkgKzE2NSw5IEBAIHByb3RlY3Rl
ZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiwgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9u
ZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkg
b3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogcHJp
dmF0ZToKICAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciogbV9hZ2VudDsKQEAgLTIyMSw2ICsyMjEsNyBAQCBwcml2YXRlOgog
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI0OSwyMSArMjUwLDI0IEBAIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7CiB9CiAKLXZv
aWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJl
ZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCiAgICAgaWYgKG1ldGhvZCA9PSAi
bG9hZFJlc291cmNlIikKLSAgICAgICAgbG9hZFJlc291cmNlKGNhbGxJZCwgbWVzc2FnZSk7Cisg
ICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAg
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygn
XCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsxIiwgJy4nLCBt
ZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3Qm
KQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
ewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShjYWxsSWQpOwor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0yNzIsNyArMjc2LDEwIEBAIHZvaWQg
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmCiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3Ip
OwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjpt
b3ZlKHJlc3VsdCksIGVycm9yKTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVz
dWx0KSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9y
KSk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2Ft
ZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZl
cmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXggYzI3MmY3MmI2ZjA5M2IxMmM4ZGM4Y2YwNDE1
OTYwZjA3YTI4YTM5OS4uMzBjY2UxODUxY2U5YzM5YjgyMWM2MzNjYThlODNhYmZjYmRjN2M4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
YW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtMTc0LDYgKzE3NCw3
IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CmluZGV4IGE4MTg2
ZTBiMGJhODExNDA1ZDQ1MGM0YzQ5YjVlNDA3YmY2YTU2YzEuLjI4ZTE0NTY1NWIwN2M2MGExZDE5
OTVhNGY2YjBiNDlkMDk4MDVmYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29u
LXJlc3VsdApAQCAtMTc0LDYgKzE3NCw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlh
c2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmluZGV4IDUzYjNmMjIxNjY5YThlYzA0M2Qw
ZmI5OWMzZGY3NzhjNmVmZDZiMmMuLjhiYmZjMjllODFlM2M4ZmZiOWQxZDJkOWYzYjE0ZGIzYmNj
YTAyYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUu
anNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5q
c29uLXJlc3VsdApAQCAtMTc0LDYgKzE3NCw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpz
b24tcmVzdWx0CmluZGV4IDdlOWVmMWU4YTAyZmUwMDhlMTFmNWJiNWQ3ZWU1ZGEwNzdlM2IyNWEu
LmQwZjRhZjEzYzFjZmM2MTc3OWU3NzhjODQwM2UyOTY4MzdhOGY0N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
YXJyYXktdHlwZS5qc29uLXJlc3VsdApAQCAtMTc3LDYgKzE3Nyw3IEBAIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVu
dW0tdHlwZS5qc29uLXJlc3VsdAppbmRleCA2ZDYzZGQ1YWUwY2UxMjJiMmQwYzI2MmE5MTRlNmYy
NTNkNzlhYmIxLi4zNGMyODVjNjAxMjAwZTNlMWMyM2Q5NmQ5ZjhkY2FmNDA2MzI2MGM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC0xNzgsNiArMTc4LDcgQEAgdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdAppbmRleCA2ZTk0OTQxYmMxZTNiNjE4Yjk4
NDI0ODhiYjEwZjVmMzMwNDI2ZTNlLi42MGRiNWVjMjYwYmQxYzg4MjE2ZjY0ZGYyZTI0ZDUxNWQ2
ODU5YWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtMTc0LDYg
KzE3NCw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKaW5kZXggOWVi
MWQ0MGRkZWI0ZGRkNmQxYWE4YzNlMGJmNmM2NmM4YWY3MGU1My4uM2MxNzZmNTA4MmRiZGRhYjU0
MTBiMjM1ZTRiMTM1ZjM5NWFiOTlmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1y
ZXN1bHQKQEAgLTE3OCw2ICsxNzgsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAog
I2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9UZXN0U3R1Yi5odG1sIGIvU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvVGVzdFN0dWIuaHRtbAppbmRleCA5YTQ1MmM1MjA2ZWZhYzM3YTZjZWFj
Y2ZjMGYxMTM2MzBmZTJlMzI3Li43YjUyMDRkZDZmNWU2NDE2OTMzZGQ1Yjg5M2EwMWJiOTA5YmZl
NTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0
U3R1Yi5odG1sCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1Rlc3RT
dHViLmh0bWwKQEAgLTQ3LDcgKzQ3LDcgQEAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAgICAgICAgUHJvdG9jb2xUZXN0
LmR1bXBBY3Rpdml0eVRvU3lzdGVtQ29uc29sZSA9IGZhbHNlOwogCiAgICAgICAgIC8vIEJlc3Qg
dXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGR1bXBBY3Rpdml0eVRvU3lzdGVtQ29uc29sZS4KLSAg
ICAgICAgSW5zcGVjdG9yUHJvdG9jb2wuZHVtcEluc3BlY3RvclByb3RvY29sTWVzc2FnZXMgPSBm
YWxzZTsKKyAgICAgICAgUHJvdG9jb2xUZXN0LmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2Vz
ID0gZmFsc2U7CiAgICAgPC9zY3JpcHQ+CiA8L2hlYWQ+CiA8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzM2NWRi
Mjk5YzM5MWJlM2QyYzgyYTFjYzUxMzBkYTRmMzIwMDkzYy4uODlkYjk4ZTJmYjQ3Y2E2YzY0ZTZl
NWMyNzA5M2I1YjVkNDQxMjlhZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTA4LTI1ICBC
cmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG5v
IG5lZWQgdG8gYWxsb2NhdGUgcHJvdG9jb2xFcnJvcnMgYXJyYXkgZm9yIGV2ZXJ5IGRpc3BhdGNo
ZWQgYmFja2VuZCBjb21tYW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDY0NjYKKworICAgICAgICBSZXZpZXdlZCBieSBKb3NlcGggUGVjb3Jhcm8u
CisKKyAgICAgICAgKiBpbnNwZWN0b3IvcHJvdG9jb2wvYmFja2VuZC1kaXNwYXRjaGVyLWFyZ3Vt
ZW50LWVycm9ycy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL2Jh
Y2tlbmQtZGlzcGF0Y2hlci1hcmd1bWVudC1lcnJvcnMuaHRtbDoKKyAgICAgICAgU3RyaW5naWZ5
IHRoZSAnZGF0YScgbWVtYmVyIGJlZm9yZSBkdW1waW5nLCBzaW5jZSBpdCBub3cgY29udGFpbnMg
SlNPTi4gUmViYXNlbGluZSBpdC4KKwogMjAxNS0wOC0yNSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBw
bGUuY29tPgogCiAgICAgICAgIFtNYWNdIGFjY2Vzc2liaWxpdHkvZG9jdW1lbnQtYXR0cmlidXRl
cy5odG1sIGZhaWxzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wv
YmFja2VuZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVycm9ycy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFja2VuZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVycm9y
cy1leHBlY3RlZC50eHQKaW5kZXggNDRjNDk0MjM4NWI0ODY0OTQwNGQxMGE3NGUyZGExNTVlMzA3
N2QzNC4uNzUxMDM3MThlYTFkN2M2MGY4NjM5MTM1OGNiYzk3MDA0OWU3ZjE1OCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL2JhY2tlbmQtZGlzcGF0Y2hlci1hcmd1
bWVudC1lcnJvcnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm90
b2NvbC9iYWNrZW5kLWRpc3BhdGNoZXItYXJndW1lbnQtZXJyb3JzLWV4cGVjdGVkLnR4dApAQCAt
OCw3ICs4LDcgQEAgUEFTUzogdGhlIGJhY2tlbmQgc2hvdWxkIHNlbmQgYSBwcm90b2NvbCBlcnJv
ciB3aGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIG1lc3NhZ2UKIFBBU1M6IHRoZSByZXBvcnRlZCBl
cnJvciBzaG91bGQgYmUgIkludmFsaWRQYXJhbXMiICgtMzI2MDIpCiBBY3R1YWwgZXJyb3IgY29k
ZTogLTMyNjAyCiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBwcm9jZXNzZWQKLUFjdHVhbCBlcnJvciBkYXRh
OiAncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnZXhwcmVz
c2lvbicgd2l0aCB0eXBlICdTdHJpbmcnLgorQWN0dWFsIGVycm9yIGRhdGE6IFt7ImNvZGUiOi0z
MjYwMiwibWVzc2FnZSI6IidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4gcmVxdWlyZWQgcGFy
YW1ldGVyICdleHByZXNzaW9uJyB3aXRoIHR5cGUgJ1N0cmluZycuIn0seyJjb2RlIjotMzI2MDIs
Im1lc3NhZ2UiOiJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ1J1bnRpbWUuZXZhbHVhdGUnIGNh
bid0IGJlIHByb2Nlc3NlZCJ9XQogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogTWlzc2luZ1JlcXVp
cmVkUGFyYW1ldGVyCiBTZW5kaW5nIG1lc3NhZ2U6IHsiaWQiOjEyMywibWV0aG9kIjoiUnVudGlt
ZS5ldmFsdWF0ZSIsInBhcmFtcyI6eyJzdHVmZiI6MTIzfX0KQEAgLTE2LDcgKzE2LDcgQEAgUEFT
UzogdGhlIGJhY2tlbmQgc2hvdWxkIHNlbmQgYSBwcm90b2NvbCBlcnJvciB3aGVuIHJlY2Vpdmlu
ZyBhbiBpbnZhbGlkIG1lc3NhZ2UKIFBBU1M6IHRoZSByZXBvcnRlZCBlcnJvciBzaG91bGQgYmUg
IkludmFsaWRQYXJhbXMiICgtMzI2MDIpCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyNjAyCiBBY3R1
YWwgZXJyb3IgbWVzc2FnZTogU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1
YXRlJyBjYW4ndCBiZSBwcm9jZXNzZWQKLUFjdHVhbCBlcnJvciBkYXRhOiBQYXJhbWV0ZXIgJ2V4
cHJlc3Npb24nIHdpdGggdHlwZSAnU3RyaW5nJyB3YXMgbm90IGZvdW5kLgorQWN0dWFsIGVycm9y
IGRhdGE6IFt7ImNvZGUiOi0zMjYwMiwibWVzc2FnZSI6IlBhcmFtZXRlciAnZXhwcmVzc2lvbicg
d2l0aCB0eXBlICdTdHJpbmcnIHdhcyBub3QgZm91bmQuIn0seyJjb2RlIjotMzI2MDIsIm1lc3Nh
Z2UiOiJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ1J1bnRpbWUuZXZhbHVhdGUnIGNhbid0IGJl
IHByb2Nlc3NlZCJ9XQogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogUmVxdWlyZWRQYXJhbWV0ZXJX
cm9uZ1R5cGUKIFNlbmRpbmcgbWVzc2FnZTogeyJpZCI6MTIzLCJtZXRob2QiOiJSdW50aW1lLmV2
YWx1YXRlIiwicGFyYW1zIjp7ImV4cHJlc3Npb24iOltdfX0KQEAgLTI0LDcgKzI0LDcgQEAgUEFT
UzogdGhlIGJhY2tlbmQgc2hvdWxkIHNlbmQgYSBwcm90b2NvbCBlcnJvciB3aGVuIHJlY2Vpdmlu
ZyBhbiBpbnZhbGlkIG1lc3NhZ2UKIFBBU1M6IHRoZSByZXBvcnRlZCBlcnJvciBzaG91bGQgYmUg
IkludmFsaWRQYXJhbXMiICgtMzI2MDIpCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyNjAyCiBBY3R1
YWwgZXJyb3IgbWVzc2FnZTogU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1
YXRlJyBjYW4ndCBiZSBwcm9jZXNzZWQKLUFjdHVhbCBlcnJvciBkYXRhOiBQYXJhbWV0ZXIgJ2V4
cHJlc3Npb24nIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdTdHJpbmcnLgorQWN0dWFsIGVy
cm9yIGRhdGE6IFt7ImNvZGUiOi0zMjYwMiwibWVzc2FnZSI6IlBhcmFtZXRlciAnZXhwcmVzc2lv
bicgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ1N0cmluZycuIn0seyJjb2RlIjotMzI2MDIs
Im1lc3NhZ2UiOiJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ1J1bnRpbWUuZXZhbHVhdGUnIGNh
bid0IGJlIHByb2Nlc3NlZCJ9XQogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogT3B0aW9uYWxQYXJh
bWV0ZXJXcm9uZ1R5cGUKIFNlbmRpbmcgbWVzc2FnZTogeyJpZCI6MTIzLCJtZXRob2QiOiJSdW50
aW1lLmV2YWx1YXRlIiwicGFyYW1zIjp7ImV4cHJlc3Npb24iOiI0MiIsImluY2x1ZGVDb21tYW5k
TGluZUFQSSI6MTIzfX0KQEAgLTMyLDcgKzMyLDcgQEAgUEFTUzogdGhlIGJhY2tlbmQgc2hvdWxk
IHNlbmQgYSBwcm90b2NvbCBlcnJvciB3aGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIG1lc3NhZ2UK
IFBBU1M6IHRoZSByZXBvcnRlZCBlcnJvciBzaG91bGQgYmUgIkludmFsaWRQYXJhbXMiICgtMzI2
MDIpCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyNjAyCiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBwcm9jZXNz
ZWQKLUFjdHVhbCBlcnJvciBkYXRhOiBQYXJhbWV0ZXIgJ2luY2x1ZGVDb21tYW5kTGluZUFQSScg
aGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0Jvb2xlYW4nLgorQWN0dWFsIGVycm9yIGRhdGE6
IFt7ImNvZGUiOi0zMjYwMiwibWVzc2FnZSI6IlBhcmFtZXRlciAnaW5jbHVkZUNvbW1hbmRMaW5l
QVBJJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnQm9vbGVhbicuIn0seyJjb2RlIjotMzI2
MDIsIm1lc3NhZ2UiOiJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ1J1bnRpbWUuZXZhbHVhdGUn
IGNhbid0IGJlIHByb2Nlc3NlZCJ9XQogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogVGVzdEVycm9y
Q29kZUZvclN5bmNTZXJ2ZXJFcnJvcgogU2VuZGluZyBtZXNzYWdlOiB7ImlkIjoxMjMsIm1ldGhv
ZCI6IkRhdGFiYXNlLmdldERhdGFiYXNlVGFibGVOYW1lcyIsInBhcmFtcyI6eyJkYXRhYmFzZUlk
IjoidGhpc2lzTm90QURhdGFiYXNlIn19CkBAIC00MCw2ICs0MCw3IEBAIFBBU1M6IHRoZSBiYWNr
ZW5kIHNob3VsZCBzZW5kIGEgcHJvdG9jb2wgZXJyb3Igd2hlbiByZWNlaXZpbmcgYW4gaW52YWxp
ZCBtZXNzYWdlCiBQQVNTOiB0aGUgcmVwb3J0ZWQgZXJyb3Igc2hvdWxkIGJlICJTZXJ2ZXJFcnJv
ciIgKC0zMjAwMCkKIEFjdHVhbCBlcnJvciBjb2RlOiAtMzIwMDAKIEFjdHVhbCBlcnJvciBtZXNz
YWdlOiBEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5hYmxlZAorQWN0dWFsIGVycm9yIGRhdGE6IFt7
ImNvZGUiOi0zMjAwMCwibWVzc2FnZSI6IkRhdGFiYXNlIGFnZW50IGlzIG5vdCBlbmFibGVkIn1d
CiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBUZXN0RXJyb3JDb2RlRm9yQXN5bmNTZXJ2ZXJFcnJv
cgogU2VuZGluZyBtZXNzYWdlOiB7ImlkIjoxMjMsIm1ldGhvZCI6IkRhdGFiYXNlLmV4ZWN1dGVT
UUwiLCJwYXJhbXMiOnsiZGF0YWJhc2VJZCI6InRoaXNpc05vdEFEYXRhYmFzZSIsInF1ZXJ5Ijoi
YXNkZiJ9fQpAQCAtNDcsNiArNDgsNyBAQCBQQVNTOiB0aGUgYmFja2VuZCBzaG91bGQgc2VuZCBh
IHByb3RvY29sIGVycm9yIHdoZW4gcmVjZWl2aW5nIGFuIGludmFsaWQgbWVzc2FnZQogUEFTUzog
dGhlIHJlcG9ydGVkIGVycm9yIHNob3VsZCBiZSAiU2VydmVyRXJyb3IiICgtMzIwMDApCiBBY3R1
YWwgZXJyb3IgY29kZTogLTMyMDAwCiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogRGF0YWJhc2UgYWdl
bnQgaXMgbm90IGVuYWJsZWQKK0FjdHVhbCBlcnJvciBkYXRhOiBbeyJjb2RlIjotMzIwMDAsIm1l
c3NhZ2UiOiJEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5hYmxlZCJ9XQogCiAtLSBSdW5uaW5nIHRl
c3QgY2FzZTogQ29tbWFuZFdpdGhCYWRBcmd1bWVudFZhbHVlCiBTZW5kaW5nIG1lc3NhZ2U6IHsi
aWQiOjEyMywibWV0aG9kIjoiUnVudGltZS5nZXRQcm9wZXJ0aWVzIiwicGFyYW1zIjp7Im9iamVj
dElkIjoidGhpc2lzTm90QW5JZCJ9fQpAQCAtNTQsNCArNTYsNSBAQCBQQVNTOiB0aGUgYmFja2Vu
ZCBzaG91bGQgc2VuZCBhIHByb3RvY29sIGVycm9yIHdoZW4gcmVjZWl2aW5nIGFuIGludmFsaWQg
bWVzc2FnZQogUEFTUzogdGhlIHJlcG9ydGVkIGVycm9yIHNob3VsZCBiZSAiU2VydmVyRXJyb3Ii
ICgtMzIwMDApCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyMDAwCiBBY3R1YWwgZXJyb3IgbWVzc2Fn
ZTogSW5zcGVjdGVkIGZyYW1lIGhhcyBnb25lCitBY3R1YWwgZXJyb3IgZGF0YTogW3siY29kZSI6
LTMyMDAwLCJtZXNzYWdlIjoiSW5zcGVjdGVkIGZyYW1lIGhhcyBnb25lIn1dCiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9iYWNrZW5kLWRpc3BhdGNoZXItYXJn
dW1lbnQtZXJyb3JzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFja2Vu
ZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVycm9ycy5odG1sCmluZGV4IDE1MGU4MzIwMjljMWQxYTcz
YjA5ZDFhNGM0ZTA5ZTBmMDE0ZWE1MTEuLjA1YWE3ZTQ1MmIxY2I5MzdhNDFkZGYyZDUwYmQyMjc5
Mjk4ZDI3ODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9iYWNr
ZW5kLWRpc3BhdGNoZXItYXJndW1lbnQtZXJyb3JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3Byb3RvY29sL2JhY2tlbmQtZGlzcGF0Y2hlci1hcmd1bWVudC1lcnJvcnMuaHRtbApA
QCAtMzYsNyArMzYsNyBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgICAgICAgICAgICAgUHJv
dG9jb2xUZXN0LmxvZygiQWN0dWFsIGVycm9yIGNvZGU6ICIgKyByZXNwb25zZS5jb2RlKTsKICAg
ICAgICAgICAgICAgICAgICAgUHJvdG9jb2xUZXN0LmxvZygiQWN0dWFsIGVycm9yIG1lc3NhZ2U6
ICIgKyByZXNwb25zZS5tZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNl
LmRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBQcm90b2NvbFRlc3QubG9nKCJBY3R1YWwg
ZXJyb3IgZGF0YTogIiArIHJlc3BvbnNlLmRhdGEpOworICAgICAgICAgICAgICAgICAgICAgICAg
UHJvdG9jb2xUZXN0LmxvZygiQWN0dWFsIGVycm9yIGRhdGE6ICIgKyBKU09OLnN0cmluZ2lmeShy
ZXNwb25zZS5kYXRhKSk7CiAKICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOwogICAgICAg
ICAgICAgICAgIH0pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259903</attachid>
            <date>2015-08-25 16:52:20 -0700</date>
            <delta_ts>2015-08-26 00:55:36 -0700</delta_ts>
            <desc>Proposed Fix (EWS)</desc>
            <filename>bug-146466-20150825165209.patch</filename>
            <type>text/plain</type>
            <size>138173</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4OTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
Mjk5OTJlZGVjZTY2NTliMDA4M2UxMzFlYjkwYzllNjM5MWQ1MjE5Li5hNGNlZDdiZTlhN2E0N2Nl
MDYyNGU2OTBmZjk3NDk3MjIzMWFkNThhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAxNS0wOC0yNSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBubyBuZWVkIHRvIGFsbG9jYXRlIHByb3RvY29sRXJyb3Jz
IGFycmF5IGZvciBldmVyeSBkaXNwYXRjaGVkIGJhY2tlbmQgY29tbWFuZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NDY2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAgICAgIENsZWFuIHVwIHNvbWUgb2YgdGhl
IGJhY2tlbmQgZGlzcGF0Y2hlciBjb2RlLCB3aXRoIGEgZm9jdXMgb24gZWxpbWluYXRpbmcgdXNl
bGVzcyBhbGxvY2F0aW9ucworICAgICAgICBvZiBvYmplY3RzIGluIHRoZSBjb21tb24gY2FzZSB3
aGVuIG5vIHByb3RvY29sIGVycm9ycyBoYXBwZW4uIFRoaXMgaXMgZG9uZSBieSBzYXZpbmcgdGhl
CisgICAgICAgIGN1cnJlbnQgaWQgb2YgZWFjaCByZXF1ZXN0IGFzIGl0IGlzIGJlaW5nIHByb2Nl
c3NlZCBieSB0aGUgYmFja2VuZCBkaXNwYXRjaGVyLCBhbmQgdGFnZ2luZyBhbnkKKyAgICAgICAg
c3Vic2VxdWVudCBlcnJvcnMgd2l0aCB0aGF0IGlkLiBUaGlzIGFsc28gbWVhbnMgd2UgZG9uJ3Qg
aGF2ZSB0byB0aHJlYWQgdGhlIHJlcXVlc3RJZCBleGNlcHQKKyAgICAgICAgaW4gdGhlIGFzeW5j
IGNvbW1hbmQgY29kZSBwYXRoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBsaWZ0cyBzb21l
IGNvbW1vbiBjb2RlIHNoYXJlZCBiZXR3ZWVuIGFsbCBnZW5lcmF0ZWQgYmFja2VuZCBjb21tYW5k
CisgICAgICAgIGltcGxlbWVudGF0YXRpb25zIGludG8gdGhlIHBlci1kb21haW4gZGlzcGF0Y2gg
bWV0aG9kIGluc3RlYWQuIFRoaXMgcmVkdWNlcyBnZW5lcmF0ZWQgY29kZSBzaXplLgorCisgICAg
ICAgIFRvIGJlIGNvbnNpc3RlbnQsIHRoaXMgcGF0Y2ggc3RhbmRhcmRpemVzIG9uIGNhbGxpbmcg
dGhlIGlkIG9mIGEgYmFja2VuZCBtZXNzYWdlIGl0cyAncmVxdWVzdElkJy4KKyAgICAgICAgUmVx
dWVzdHMgY2FuIGJlIGhhbmRsZWQgc3luY2hyb25vdXNseSBvciBhc3luY2hyb25vdXNseSAodHJp
Z2dlcmVkIHZpYSB0aGUgJ2FzeW5jJyBwcm9wZXJ0eSkuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBjb3ZlcmVkIGJ5IGV4aXN0aW5nIHByb3RvY29sIHRlc3RzLgorCisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6Q2FsbGJhY2tCYXNlKTogU3BsaXQgdGhl
IHR3byBjb2RlIHBhdGhzIGZvciByZXBvcnRpbmcKKyAgICAgICAgc3VjY2VzcyBhbmQgZmFpbHVy
ZS4KKworICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNl
OjpzZW5kRmFpbHVyZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKTogUmVuYW1lZCBmcm9tIHNlbmRJZkFjdGl2ZS4KKyAg
ICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKTogUmVzZXQgY291
bnRlcnMgYW5kIGN1cnJlbnQgcmVxdWVzdElkIGJlZm9yZSBkaXNwYXRjaGluZy4KKyAgICAgICAg
Tm8gbmVlZCB0byBtYW51YWxseSB0aHJlYWQgdGhlIHJlcXVlc3RJZCB0byBhbGwgcmVwb3J0UHJv
dG9jb2xFcnJvciBjYWxscy4KKworICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
cjo6aGFzUHJvdG9jb2xFcnJvcnMpOiBBZGRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyOjpzZW5kUGVuZGluZ0Vycm9ycyk6IFNlbmQgYW55IHNhdmVkIHByb3RvY29sIGVy
cm9ycyB0byB0aGUgZnJvbnRlbmQuCisgICAgICAgIEFsd2F5cyBzZW5kIGEgJ2RhdGEnIG1lbWJl
ciB3aXRoIGFsbCBvZiB0aGUgZXJyb3JzLCBldmVuIGlmIHRoZXJlJ3MganVzdCBvbmUuIFdlIG1p
Z2h0IHdhbnQgdG8gYWRkCisgICAgICAgIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZXJyb3JzIGxh
dGVyLgorCisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90
b2NvbEVycm9yKTogRW5xdWV1ZSBhIHByb3RvY29sIGVycm9yIHRvIGJlIHNlbnQgbGF0ZXIuCisg
ICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9wZXJ0eVZhbHVlKTog
UmVtb3ZlIHVzZWxlc3MgdHlwZSBwYXJhbWV0ZXJzIGFuZCBudWtlIG1vc3Qgb2YKKyAgICAgICAg
dGhlIHR5cGUgY29udmVyc2lvbiBtZXRob2RzLiBVc2Ugc3RkOjpmdW5jdGlvbiB0eXBlcyBpbnN0
ZWFkIG9mIGZ1bmN0aW9uIHBvaW50ZXIgdHlwZXMuCisKKyAgICAgICAgKEluc3BlY3Rvcjo6Y2Fz
dFRvSW50ZWdlcik6IEFkZGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpjYXN0VG9OdW1iZXIpOiBB
ZGRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIp
OgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAgICAg
IChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdCk6CisgICAgICAgIChJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OmdldFByb3Bl
cnR5VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRnZXM6
OmFzSW50ZWdlcik6IERlbGV0ZWQuCisgICAgICAgIChJbnNwZWN0b3I6OkFzTWV0aG9kQnJpZGdl
czo6YXNEb3VibGUpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJyaWRn
ZXM6OmFzU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RCcmlk
Z2VzOjphc0Jvb2xlYW4pOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpBc01ldGhvZEJy
aWRnZXM6OmFzT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RC
cmlkZ2VzOjphc0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6QXNNZXRob2RC
cmlkZ2VzOjphc1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OiBFeHRyYWN0ICdwYXJhbXMnIG9iamVjdCBpbiBk
b21haW4gZGlzcGF0Y2ggbWV0aG9kLgorICAgICAgICBPbWl0IHJlcXVlc3RJZHMgd2hlcmUgcG9z
c2libGUuIENvbnZlcnQgZGlzcGF0Y2ggdGFibGVzIHRvIHVzZSBOZXZlckRlc3Ryb3llZC4gQ2hl
Y2sgdGhlIHByb3RvY29sIGVycm9yIGNvdW50CisgICAgICAgIHRvIGRlY2lkZSB3aGV0aGVyIHRv
IGFib3J0IHRoZSBkaXNwYXRjaCBvciBub3QsIHJhdGhlciB0aGFuIGFsbG9jYXRpbmcgb3VyIG93
biBlcnJvcnMgYXJyYXkuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OgorICAgICAgICAodm9pZCk6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weTogUmV2ZXJ0IHRvIHBhc3NpbmcgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4KKyAgICAg
ICAgc2luY2UgcGFyYW1ldGVycyBhcmUgbm93IGJlaW5nIHBhc3NlZCByYXRoZXIgdGhhbiB0aGUg
bWVzc2FnZSBvYmplY3QuIFNvbWUgY29tbWFuZHMgZG8gbm90IHJlcXVpcmUgcGFyYW1ldGVycy4K
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6CisgICAgICAgIChD
cHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zbWFs
bF9kaXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVy
LnB5OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5l
cmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJf
aW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDQ29uZmlndXJhdGlvbkltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5k
KToKKyAgICAgICAgKE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OgorCisgICAgICAgIFJl
YmFzZWxpbmUgc29tZSBwcm90b2NvbCBnZW5lcmF0b3IgdGVzdHMuCisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUu
anNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0
aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24t
cmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3Qt
dHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0OgorCiAyMDE1LTA4
LTI1ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIExldHMgcmVu
YW1lIGNvZGVPcmlnaW5JbmRleCB0byBjYWxsU2l0ZUluZGV4IGFuZCBnZXQgcmlkIG9mIENhbGxG
cmFtZTo6TG9jYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBmZmVlNGQ3Mjk2MDg4
ODNjNjc4Y2M1OTUyNTA4OGM5MDkyNjhmOTcyLi44MDFmZWM2ZWMxZDA0YjU3NzhlMmU0MjVkODhj
ZTM1MzBjZDQ0MDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAxNS0wOC0yNSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBubyBuZWVkIHRvIGFsbG9jYXRlIHByb3RvY29sRXJyb3JzIGFycmF5IGZvciBl
dmVyeSBkaXNwYXRjaGVkIGJhY2tlbmQgY29tbWFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2NDY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9z
ZXBoIFBlY29yYXJvLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9UZXN0U3R1Yi5odG1sOiBG
aXggYSB0eXBvLCB0aGlzIHByb3BlcnR5IGV4aXN0cyBvbiBQcm90b2NvbFRlc3QuCisKIDIwMTUt
MDgtMjUgIE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFJlbmRlcmluZyBGcmFtZXMgcGllIGNoYXJ0IHNob3VsZCB1c2UgdGhlIG5lZWRz
TGF5b3V0L3VwZGF0ZUxheW91dCBpZGlvbQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAppbmRl
eCBkNjdhYjk5NGJlZWJiOTBhYjQ4ZTJjMmYxZmEzY2UzZDA2NjViNjg4Li4zNzFjMGE5NDhmYzU2
OTMzNTM1YWFlMmJhMTkzZTI4ZjhmNTIxYTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNw
cApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQ2hyb21p
dW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI5
LDE1ICsyOSwxNSBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSA8d3RmL1RlbXBvcmFyeUNoYW5n
ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLUJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2U6OkNhbGxiYWNrQmFzZShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFj
a2VuZERpc3BhdGNoZXIsIGludCBpZCkKK0JhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OkNhbGxiYWNrQmFzZShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIs
IGxvbmcgcmVxdWVzdElkKQogICAgIDogbV9iYWNrZW5kRGlzcGF0Y2hlcihXVEY6Om1vdmUoYmFj
a2VuZERpc3BhdGNoZXIpKQotICAgICwgbV9pZChpZCkKLSAgICAsIG1fYWxyZWFkeVNlbnQoZmFs
c2UpCisgICAgLCBtX3JlcXVlc3RJZChyZXF1ZXN0SWQpCiB7CiB9CiAKQEAgLTQ5LDE2ICs0OSwy
NCBAQCBib29sIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OmlzQWN0aXZlKCkgY29u
c3QKIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1cmUoY29u
c3QgRXJyb3JTdHJpbmcmIGVycm9yKQogewogICAgIEFTU0VSVChlcnJvci5sZW5ndGgoKSk7Ci0g
ICAgc2VuZElmQWN0aXZlKG51bGxwdHIsIGVycm9yKTsKKworICAgIGlmIChtX2FscmVhZHlTZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2FscmVhZHlTZW50ID0gdHJ1ZTsKKworICAgIC8v
IEltbWVkaWF0ZWx5IHNlbmQgYW4gZXJyb3IgbWVzc2FnZSBzaW5jZSB0aGlzIGlzIGFuIGFzeW5j
IHJlc3BvbnNlIHdpdGggYSBzaW5nbGUgZXJyb3IuCisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihtX3JlcXVlc3RJZCwgU2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogfQogCi12b2lkIEJh
Y2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRJZkFjdGl2ZShSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdlLCBjb25zdCBFcnJvclN0cmluZyYgaW52b2NhdGlv
bkVycm9yKQordm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kU3VjY2Vz
cyhSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdlKQogewogICAgIGlmICht
X2FscmVhZHlTZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UobV9pZCwgV1RGOjptb3ZlKHBhcnRpYWxNZXNzYWdlKSwgaW52b2NhdGlv
bkVycm9yKTsKICAgICBtX2FscmVhZHlTZW50ID0gdHJ1ZTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UobV9yZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJ0aWFsTWVzc2FnZSkp
OwogfQogCiBSZWY8QmFja2VuZERpc3BhdGNoZXI+IEJhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUo
RnJvbnRlbmRDaGFubmVsKiBmcm9udGVuZENoYW5uZWwpCkBAIC03Niw4MyArODQsOTQgQEAgdm9p
ZCBCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewog
ICAgIFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKKyAgICBBU1NFUlQo
IW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKKwogICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
cGFyc2VkTWVzc2FnZTsKICAgICBpZiAoIUluc3BlY3RvclZhbHVlOjpwYXJzZUpTT04obWVzc2Fn
ZSwgcGFyc2VkTWVzc2FnZSkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxscHRy
LCBQYXJzZUVycm9yLCBBU0NJSUxpdGVyYWwoIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1h
dCIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihQYXJzZUVycm9yLCBBU0NJSUxpdGVy
YWwoIk1lc3NhZ2UgbXVzdCBiZSBpbiBKU09OIGZvcm1hdCIpKTsKKyAgICAgICAgc2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7CiAgICAgaWYgKCFwYXJzZWRNZXNzYWdlLT5hc09iamVj
dChtZXNzYWdlT2JqZWN0KSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIs
IEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmll
ZCBvYmplY3QiKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3Qs
IEFTQ0lJTGl0ZXJhbCgiTWVzc2FnZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCIpKTsKKyAg
ICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gY2FsbElkVmFsdWU7Ci0gICAgaWYgKCFtZXNzYWdlT2Jq
ZWN0LT5nZXRWYWx1ZShBU0NJSUxpdGVyYWwoImlkIiksIGNhbGxJZFZhbHVlKSkgewotICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKG51bGxwdHIsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVy
YWwoIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IHJlcXVlc3RJZFZhbHVlOworICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJpZCIpLCByZXF1ZXN0SWRWYWx1ZSkpIHsKKyAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCInaWQnIHByb3BlcnR5IHdh
cyBub3QgZm91bmQiKSk7CisgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBsb25nIGNhbGxJZCA9IDA7Ci0gICAgaWYgKCFjYWxsSWRWYWx1
ZS0+YXNJbnRlZ2VyKGNhbGxJZCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihudWxs
cHRyLCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAnaWQnIHByb3Bl
cnR5IG11c3QgYmUgaW50ZWdlciIpKTsKKyAgICBsb25nIHJlcXVlc3RJZCA9IDA7CisgICAgaWYg
KCFyZXF1ZXN0SWRWYWx1ZS0+YXNJbnRlZ2VyKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgcmVwb3J0
UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgdHlwZSBvZiAn
aWQnIHByb3BlcnR5IG11c3QgYmUgaW50ZWdlciIpKTsKKyAgICAgICAgc2VuZFBlbmRpbmdFcnJv
cnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIEFTU0VSVCghbV9jdXJyZW50UmVx
dWVzdElkKTsKKyAgICBUZW1wb3JhcnlDaGFuZ2U8T3B0aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVl
c3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIHJlcXVlc3RJZCk7CisKICAgICBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+IG1ldGhvZFZhbHVlOwogICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJtZXRob2QiKSwgbWV0aG9kVmFsdWUpKSB7Ci0gICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoJmNhbGxJZCwgSW52YWxpZFJlcXVlc3QsIEFTQ0lJTGl0ZXJhbCgiJ21ldGhv
ZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIikpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBm
b3VuZCIpKTsKKyAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIFN0cmluZyBtZXRob2RTdHJpbmc7CiAgICAgaWYgKCFtZXRob2RWYWx1ZS0+
YXNTdHJpbmcobWV0aG9kU3RyaW5nKSkgewotICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKCZj
YWxsSWQsIEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIlRoZSB0eXBlIG9mICdtZXRob2Qn
IHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIikpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEludmFsaWRSZXF1ZXN0LCBBU0NJSUxpdGVyYWwoIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3Bl
cnR5IG11c3QgYmUgc3RyaW5nIikpOworICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgVmVjdG9yPFN0cmluZz4gZG9tYWluQW5kTWV0aG9k
OwogICAgIG1ldGhvZFN0cmluZy5zcGxpdCgnLicsIHRydWUsIGRvbWFpbkFuZE1ldGhvZCk7CiAg
ICAgaWYgKGRvbWFpbkFuZE1ldGhvZC5zaXplKCkgIT0gMiB8fCAhZG9tYWluQW5kTWV0aG9kWzBd
Lmxlbmd0aCgpIHx8ICFkb21haW5BbmRNZXRob2RbMV0ubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVw
b3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBJbnZhbGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJU
aGUgJ21ldGhvZCcgcHJvcGVydHkgd2FzIGZvcm1hdHRlZCBpbmNvcnJlY3RseS4gSXQgc2hvdWxk
IGJlICdEb21haW4ubWV0aG9kJyIpKTsKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgQVNDSUlMaXRlcmFsKCJUaGUgJ21ldGhvZCcgcHJvcGVydHkgd2FzIGZvcm1h
dHRlZCBpbmNvcnJlY3RseS4gSXQgc2hvdWxkIGJlICdEb21haW4ubWV0aG9kJyIpKTsKKyAgICAg
ICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFN0
cmluZyBkb21haW4gPSBkb21haW5BbmRNZXRob2RbMF07CiAgICAgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIqIGRvbWFpbkRpc3BhdGNoZXIgPSBtX2Rpc3BhdGNoZXJzLmdldChkb21haW4p
OwogICAgIGlmICghZG9tYWluRGlzcGF0Y2hlcikgewotICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIE1ldGhvZE5vdEZvdW5kLCAiJyIgKyBkb21haW4gKyAiJyBkb21haW4gd2Fz
IG5vdCBmb3VuZCIpOworICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKE1ldGhvZE5vdEZvdW5k
LCAiJyIgKyBkb21haW4gKyAiJyBkb21haW4gd2FzIG5vdCBmb3VuZCIpOworICAgICAgICBzZW5k
UGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgU3RyaW5nIG1l
dGhvZCA9IGRvbWFpbkFuZE1ldGhvZFsxXTsKLSAgICBkb21haW5EaXNwYXRjaGVyLT5kaXNwYXRj
aChjYWxsSWQsIG1ldGhvZCwgbWVzc2FnZU9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBk
b21haW5EaXNwYXRjaGVyLT5kaXNwYXRjaChyZXF1ZXN0SWQsIG1ldGhvZCwgbWVzc2FnZU9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgIGlmIChtX3Byb3RvY29sRXJyb3JzLnNpemUoKSkK
KyAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hl
cjo6c2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHJl
c3VsdCwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRpb25FcnJvcikKK3ZvaWQgQmFja2VuZERp
c3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4mJiByZXN1bHQpCiB7CiAgICAgaWYgKCFtX2Zyb250ZW5kQ2hhbm5lbCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKGludm9jYXRpb25FcnJvci5sZW5ndGgoKSkgewotICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIFNlcnZlckVycm9yLCBpbnZvY2F0aW9uRXJyb3Ip
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghbV9wcm90b2NvbEVycm9ycy5z
aXplKCkpOwogCisgICAgLy8gVGhlIEpTT04tUlBDIDIuMCBzcGVjaWZpY2F0aW9uIHJlcXVpcmVz
IHRoYXQgdGhlICJlcnJvciIgbWVtYmVyIGhhdmUgdGhlIHZhbHVlICdudWxsJworICAgIC8vIGlm
IG5vIGVycm9yIG9jY3VycmVkIGR1cmluZyBhbiBpbnZvY2F0aW9uLCBidXQgd2UgZG8gbm90IGlu
Y2x1ZGUgaXQgYXQgYWxsLgogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlTWVzc2Fn
ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcmVzcG9uc2VNZXNzYWdlLT5zZXRP
YmplY3QoQVNDSUlMaXRlcmFsKCJyZXN1bHQiKSwgcmVzdWx0KTsKLSAgICByZXNwb25zZU1lc3Nh
Z2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCBjYWxsSWQpOworICAgIHJlc3BvbnNl
TWVzc2FnZS0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksIHJlcXVlc3RJZCk7CiAgICAg
bV9mcm9udGVuZENoYW5uZWwtPnNlbmRNZXNzYWdlVG9Gcm9udGVuZChyZXNwb25zZU1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJv
dG9jb2xFcnJvcihjb25zdCBsb25nKiBjb25zdCBjYWxsSWQsIENvbW1vbkVycm9yQ29kZSBlcnJv
ckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSBjb25zdAotewotICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoY2FsbElkLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSwgbnVsbHB0cik7Ci19
Ci0KLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoY29uc3QgbG9u
ZyogY29uc3QgY2FsbElkLCBDb21tb25FcnJvckNvZGUgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcm
IGVycm9yTWVzc2FnZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+
JiYgZGF0YSkgY29uc3QKK3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRQZW5kaW5nRXJyb3Jz
KCkKIHsKKyAgICAvLyBUaGVzZSBlcnJvciBjb2RlcyBhcmUgc3BlY2lmaWVkIGluIEpTT04tUlBD
IDIuMCwgU2VjdGlvbiA1LjEuCiAgICAgc3RhdGljIGNvbnN0IGludCBlcnJvckNvZGVzW10gPSB7
CiAgICAgICAgIC0zMjcwMCwgLy8gUGFyc2VFcnJvcgogICAgICAgICAtMzI2MDAsIC8vIEludmFs
aWRSZXF1ZXN0CkBAIC0xNjIsMzMgKzE4MSw2OSBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpy
ZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJZCwgQ29tbW9uRXJybwog
ICAgICAgICAtMzIwMDAsIC8vIFNlcnZlckVycm9yCiAgICAgfTsKIAotICAgIEFTU0VSVF9BUkco
ZXJyb3JDb2RlLCBlcnJvckNvZGUgPj0gMCk7Ci0gICAgQVNTRVJUX0FSRyhlcnJvckNvZGUsICh1
bnNpZ25lZCllcnJvckNvZGUgPCBXVEZfQVJSQVlfTEVOR1RIKGVycm9yQ29kZXMpKTsKLSAgICBB
U1NFUlRfQVJHKGVycm9yQ29kZSwgZXJyb3JDb2Rlc1tlcnJvckNvZGVdKTsKLQogICAgIGlmICgh
bV9mcm9udGVuZENoYW5uZWwpCiAgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUbyBjb25z
dHJ1Y3QgdGhlIGVycm9yIG9iamVjdCwgb25seSB1c2UgdGhlIGxhc3QgZXJyb3IncyBjb2RlIGFu
ZCBtZXNzYWdlLgorICAgIC8vIFBlciBKU09OLVJQQyAyLjAsIFNlY3Rpb24gNS4xLCB0aGUgJ2Rh
dGEnIG1lbWJlciBtYXkgY29udGFpbiBuZXN0ZWQgZXJyb3JzLAorICAgIC8vIGJ1dCBvbmx5IG9u
ZSB0b3AtbGV2ZWwgRXJyb3Igb2JqZWN0IHNob3VsZCBiZSBzZW50IHBlciByZXF1ZXN0LgorICAg
IENvbW1vbkVycm9yQ29kZSBlcnJvckNvZGU7CisgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKKyAg
ICBSZWY8SW5zcGVjdG9yQXJyYXk+IHBheWxvYWQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisgICAgCisgICAgZm9yIChhdXRvJiBkYXRhIDogbV9wcm90b2NvbEVycm9ycykgeworICAgICAg
ICBlcnJvckNvZGUgPSBzdGQ6OmdldDwwPihkYXRhKTsKKyAgICAgICAgZXJyb3JNZXNzYWdlID0g
c3RkOjpnZXQ8MT4oZGF0YSk7CisKKyAgICAgICAgQVNTRVJUX0FSRyhlcnJvckNvZGUsICh1bnNp
Z25lZCllcnJvckNvZGUgPCBXVEZfQVJSQVlfTEVOR1RIKGVycm9yQ29kZXMpKTsKKyAgICAgICAg
QVNTRVJUX0FSRyhlcnJvckNvZGUsIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CisKKyAgICAgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gZXJyb3IgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBlcnJvci0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImNvZGUiKSwgZXJyb3JDb2Rl
c1tlcnJvckNvZGVdKTsKKyAgICAgICAgZXJyb3ItPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm1l
c3NhZ2UiKSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgcGF5bG9hZC0+cHVzaE9iamVjdChXVEY6
Om1vdmUoZXJyb3IpKTsKKyAgICB9CiAKLSAgICBSZWY8SW5zcGVjdG9yT2JqZWN0PiBlcnJvciA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZXJyb3ItPnNldEludGVnZXIoQVNDSUlM
aXRlcmFsKCJjb2RlIiksIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7Ci0gICAgZXJyb3ItPnNldFN0
cmluZyhBU0NJSUxpdGVyYWwoIm1lc3NhZ2UiKSwgZXJyb3JNZXNzYWdlKTsKLSAgICBpZiAoZGF0
YSkKLSAgICAgICAgZXJyb3ItPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBXVEY6Om1v
dmUoZGF0YSkpOworICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHRvcExldmVsRXJyb3IgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHRvcExldmVsRXJyb3ItPnNldEludGVnZXIoQVND
SUlMaXRlcmFsKCJjb2RlIiksIGVycm9yQ29kZXNbZXJyb3JDb2RlXSk7CisgICAgdG9wTGV2ZWxF
cnJvci0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibWVzc2FnZSIpLCBlcnJvck1lc3NhZ2UpOwor
ICAgIHRvcExldmVsRXJyb3ItPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZGF0YSIpLCBXVEY6Om1v
dmUocGF5bG9hZCkpOwogCiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbWVzc2FnZS0+c2V0T2JqZWN0KEFTQ0lJTGl0ZXJh
bCgiZXJyb3IiKSwgV1RGOjptb3ZlKGVycm9yKSk7Ci0gICAgaWYgKGNhbGxJZCkKLSAgICAgICAg
bWVzc2FnZS0+c2V0SW50ZWdlcihBU0NJSUxpdGVyYWwoImlkIiksICpjYWxsSWQpOwotICAgIGVs
c2UKKyAgICBtZXNzYWdlLT5zZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJlcnJvciIpLCBXVEY6Om1v
dmUodG9wTGV2ZWxFcnJvcikpOworICAgIGlmIChtX2N1cnJlbnRSZXF1ZXN0SWQpCisgICAgICAg
IG1lc3NhZ2UtPnNldEludGVnZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCBtX2N1cnJlbnRSZXF1ZXN0
SWQudmFsdWUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIFRoZSAnbnVsbCcgdmFsdWUgZm9y
IGFuIHVua25vd24gaWQgaXMgc3BlY2lmaWVkIGluIEpTT04tUlBDIDIuMCwgU2VjdGlvbiA1Lgog
ICAgICAgICBtZXNzYWdlLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoImlkIiksIEluc3BlY3RvclZh
bHVlOjpudWxsKCkpOworICAgIH0KIAogICAgIG1fZnJvbnRlbmRDaGFubmVsLT5zZW5kTWVzc2Fn
ZVRvRnJvbnRlbmQobWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworCisgICAgbV9wcm90b2NvbEVy
cm9ycy5jbGVhcigpOworICAgIG1fY3VycmVudFJlcXVlc3RJZCA9IE51bGxvcHQ7Cit9CisgICAg
Cit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKENvbW1vbkVycm9y
Q29kZSBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQoreworICAgIHJlcG9y
dFByb3RvY29sRXJyb3IobV9jdXJyZW50UmVxdWVzdElkLCBlcnJvckNvZGUsIGVycm9yTWVzc2Fn
ZSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFJldHVyblZhbHVlVHlwZSwgdHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZSBEZWZhdWx0VmFsdWVUeXBlPgotc3RhdGljIFJldHVyblZhbHVlVHlw
ZSBnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzLCBEZWZhdWx0VmFsdWVUeXBlIGRlZmF1bHRW
YWx1ZSwgYm9vbCAoKmFzTWV0aG9kKShJbnNwZWN0b3JWYWx1ZSYsIFZhbHVlVHlwZSYpLCBjb25z
dCBjaGFyKiB0eXBlTmFtZSkKK3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29s
RXJyb3IoT3B0aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwgQ29tbW9uRXJyb3JDb2RlIGVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgVmFsdWVUeXBlIHJl
c3VsdCA9IGRlZmF1bHRWYWx1ZTsKKyAgICBBU1NFUlRfQVJHKGVycm9yQ29kZSwgZXJyb3JDb2Rl
ID49IDApOworCisgICAgLy8gSWYgdGhlIGVycm9yIHdhcyByZXBvcnRlZCBmcm9tIGFuIGFzeW5j
IGNhbGxiYWNrLCB0aGVuIG5vIHJlcXVlc3QgaWQgd2lsbCBiZSByZWdpc3RlcmVkIHlldC4KKyAg
ICBpZiAoIW1fY3VycmVudFJlcXVlc3RJZCkKKyAgICAgICAgbV9jdXJyZW50UmVxdWVzdElkID0g
cmVsYXRlZFJlcXVlc3RJZDsKKworICAgIG1fcHJvdG9jb2xFcnJvcnMuYXBwZW5kKHN0ZDo6dHVw
bGU8Q29tbW9uRXJyb3JDb2RlLCBTdHJpbmc+KGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9wZXJ0
eVZhbHVlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wq
IG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9uPGJv
b2woSW5zcGVjdG9yVmFsdWUmLCBUJik+IGFzTWV0aG9kLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkK
K3sKKyAgICBUIHJlc3VsdChkZWZhdWx0VmFsdWUpOwogICAgIC8vIG91dF9vcHRpb25hbFZhbHVl
Rm91bmQgc2lnbmFscyB0byB0aGUgY2FsbGVyIHdoZXRoZXIgYW4gb3B0aW9uYWwgcHJvcGVydHkg
d2FzIGZvdW5kLgogICAgIC8vIGlmIG91dF9vcHRpb25hbFZhbHVlRm91bmQgPT0gbnVsbHB0ciwg
dGhlbiB0aGlzIGlzIGEgcmVxdWlyZWQgcHJvcGVydHkuCiAgICAgaWYgKG91dF9vcHRpb25hbFZh
bHVlRm91bmQpCkBAIC0xOTYsMTkgKzI1MSwxOSBAQCBzdGF0aWMgUmV0dXJuVmFsdWVUeXBlIGdl
dFByb3BlcnR5VmFsdWUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbgog
CiAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
KQotICAgICAgICAgICAgcHJvdG9jb2xFcnJvcnMuYWRkSXRlbShTdHJpbmc6OmZvcm1hdCgiJ3Bh
cmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyVzJyB3aXRoIHR5
cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7CisgICAgICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBTdHJp
bmc6OmZvcm1hdCgiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0
ZXIgJyVzJyB3aXRoIHR5cGUgJyVzJy4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgYXV0byBmaW5kUmVzdWx0ID0g
b2JqZWN0LT5maW5kKG5hbWUpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG9iamVjdC0+ZW5kKCkp
IHsKICAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQotICAgICAgICAgICAgcHJv
dG9jb2xFcnJvcnMuYWRkSXRlbShTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0
eXBlICclcycgd2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7
CisgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiUGFyYW1ldGVyICclcycgd2l0aCB0eXBlICclcycg
d2FzIG5vdCBmb3VuZC4iLCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgaWYgKCFhc01ldGhvZCgqZmluZFJlc3VsdC0+
dmFsdWUsIHJlc3VsdCkpIHsKLSAgICAgICAgcHJvdG9jb2xFcnJvcnMuYWRkSXRlbShTdHJpbmc6
OmZvcm1hdCgiUGFyYW1ldGVyICclcycgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyVzJy4i
LCBuYW1lLnV0ZjgoKS5kYXRhKCksIHR5cGVOYW1lKSk7CisgICAgICAgIHJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJQ
YXJhbWV0ZXIgJyVzJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnJXMnLiIsIG5hbWUudXRm
OCgpLmRhdGEoKSwgdHlwZU5hbWUpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
QEAgLTIxOCw0OSArMjczLDQyIEBAIHN0YXRpYyBSZXR1cm5WYWx1ZVR5cGUgZ2V0UHJvcGVydHlW
YWx1ZShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotc3RydWN0IEFzTWV0aG9kQnJpZGdlcyB7Ci0gICAgc3RhdGljIGJvb2wg
YXNJbnRlZ2VyKEluc3BlY3RvclZhbHVlJiB2YWx1ZSwgaW50JiBvdXRwdXQpIHsgcmV0dXJuIHZh
bHVlLmFzSW50ZWdlcihvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wgYXNEb3VibGUoSW5zcGVj
dG9yVmFsdWUmIHZhbHVlLCBkb3VibGUmIG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNEb3VibGUo
b3V0cHV0KTsgfQotICAgIHN0YXRpYyBib29sIGFzU3RyaW5nKEluc3BlY3RvclZhbHVlJiB2YWx1
ZSwgU3RyaW5nJiBvdXRwdXQpIHsgcmV0dXJuIHZhbHVlLmFzU3RyaW5nKG91dHB1dCk7IH0KLSAg
ICBzdGF0aWMgYm9vbCBhc0Jvb2xlYW4oSW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBib29sJiBvdXRw
dXQpIHsgcmV0dXJuIHZhbHVlLmFzQm9vbGVhbihvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJvb2wg
YXNPYmplY3QoSW5zcGVjdG9yVmFsdWUmIHZhbHVlLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYg
b3V0cHV0KSB7IHJldHVybiB2YWx1ZS5hc09iamVjdChvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJv
b2wgYXNBcnJheShJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4m
IG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNBcnJheShvdXRwdXQpOyB9Ci0gICAgc3RhdGljIGJv
b2wgYXNWYWx1ZShJbnNwZWN0b3JWYWx1ZSYgdmFsdWUsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4m
IG91dHB1dCkgeyByZXR1cm4gdmFsdWUuYXNWYWx1ZShvdXRwdXQpOyB9Ci19OwotCi1pbnQgQmFj
a2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitzdGF0aWMgYm9vbCBjYXN0VG9JbnRlZ2VyKElu
c3BlY3RvclZhbHVlJiB2YWx1ZSwgaW50JiByZXN1bHQpIHsgcmV0dXJuIHZhbHVlLmFzSW50ZWdl
cihyZXN1bHQpOyB9CitzdGF0aWMgYm9vbCBjYXN0VG9OdW1iZXIoSW5zcGVjdG9yVmFsdWUmIHZh
bHVlLCBkb3VibGUmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNEb3VibGUocmVzdWx0KTsgfQor
CitpbnQgQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSW5zcGVjdG9yT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKIHsKLSAgICByZXR1cm4g
Z2V0UHJvcGVydHlWYWx1ZTxpbnQsIGludCwgaW50PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQs
IHByb3RvY29sRXJyb3JzLCAwLCBBc01ldGhvZEJyaWRnZXM6OmFzSW50ZWdlciwgIkludGVnZXIi
KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQ+KG9iamVjdCwgbmFtZSwgdmFsdWVG
b3VuZCwgMCwgJmNhc3RUb0ludGVnZXIsICJJbnRlZ2VyIik7CiB9CiAKLWRvdWJsZSBCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz4mIHByb3RvY29sRXJyb3JzKQorZG91YmxlIEJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3Vi
bGUoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGUsIGRvdWJsZSwg
ZG91YmxlPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLCAwLCBBc01l
dGhvZEJyaWRnZXM6OmFzRG91YmxlLCAiTnVtYmVyIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5
VmFsdWU8ZG91YmxlPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIDAsICZjYXN0VG9OdW1iZXIs
ICJOdW1iZXIiKTsKIH0KIAotU3RyaW5nIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcoSW5z
cGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitT
dHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhJbnNwZWN0b3JPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBn
ZXRQcm9wZXJ0eVZhbHVlPFN0cmluZywgU3RyaW5nLCBTdHJpbmc+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMsICIiLCBBc01ldGhvZEJyaWRnZXM6OmFzU3RyaW5nLCAi
U3RyaW5nIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihvYmplY3QsIG5h
bWUsIHZhbHVlRm91bmQsICIiLCAmSW5zcGVjdG9yVmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7
CiB9CiAKLWJvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSW5zcGVjdG9yT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitib29sIEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRCb29sZWFuKEluc3BlY3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFs
dWU8Ym9vbCwgYm9vbCwgYm9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9ycywgZmFsc2UsIEFzTWV0aG9kQnJpZGdlczo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOworICAg
IHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGJvb2w+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwg
ZmFsc2UsICZJbnNwZWN0b3JWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwogfQogCi1SZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEluc3BlY3Rv
ck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQorUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChJbnNwZWN0b3JP
YmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewot
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+LCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiwgSW5zcGVjdG9yT2JqZWN0Kj4ob2JqZWN0LCBuYW1lLCB2YWx1
ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVsbHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc09iamVj
dCwgIk9iamVjdCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZJbnNwZWN0b3JW
YWx1ZTo6YXNPYmplY3QsICJPYmplY3QiKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvckFycmF5PiBC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSW5zcGVjdG9yT2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJy
YXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpCitSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEJhY2tl
bmREaXNwYXRjaGVyOjpnZXRBcnJheShJbnNwZWN0b3JPYmplY3QqIG9iamVjdCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPFJlZlB0cjxJbnNwZWN0b3JBcnJheT4sIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4sIEluc3Bl
Y3RvckFycmF5Kj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycywgbnVs
bHB0ciwgQXNNZXRob2RCcmlkZ2VzOjphc0FycmF5LCAiQXJyYXkiKTsKKyAgICByZXR1cm4gZ2V0
UHJvcGVydHlWYWx1ZTxSZWZQdHI8SW5zcGVjdG9yQXJyYXk+PihvYmplY3QsIG5hbWUsIHZhbHVl
Rm91bmQsIG51bGxwdHIsICZJbnNwZWN0b3JWYWx1ZTo6YXNBcnJheSwgIkFycmF5Iik7CiB9CiAK
LVJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEluc3Bl
Y3Rvck9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKQorUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSW5zcGVjdG9y
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKIHsK
LSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+LCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+LCBJbnNwZWN0b3JWYWx1ZSo+KG9iamVjdCwgbmFtZSwgdmFsdWVG
b3VuZCwgcHJvdG9jb2xFcnJvcnMsIG51bGxwdHIsIEFzTWV0aG9kQnJpZGdlczo6YXNWYWx1ZSwg
IlZhbHVlIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEluc3BlY3RvclZh
bHVlPj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBudWxscHRyLCAmSW5zcGVjdG9yVmFsdWU6
OmFzVmFsdWUsICJWYWx1ZSIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaAppbmRleCBiMzAzNzAwYTIwOWJiMjIyNjZiYWU4ZjRlNGRlOGRkMzI2
ZmI5NGI3Li5mMjI0ODJkOWIwZjk1MTI4OTczOTUxY2Y4MzIzMjdmMGFiMzgxNTAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDExIFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcl9oCiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDMsMzUgKzQ0LDM2IEBAIHB1YmxpYzoKICAg
ICBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2Vu
ZERpc3BhdGNoZXIpCiAgICAgICAgIDogbV9iYWNrZW5kRGlzcGF0Y2hlcihiYWNrZW5kRGlzcGF0
Y2hlcikgeyB9CiAgICAgdmlydHVhbCB+U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpID0gMDsKIHByb3RlY3RlZDoKICAgICBSZWY8QmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiB9OwogCi1jbGFzcyBKU19FWFBP
UlRfUFJJVkFURSBCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVkPEJhY2tlbmRE
aXNwYXRjaGVyPiB7CitjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBSZWZDb3VudGVk
PEJhY2tlbmREaXNwYXRjaGVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxCYWNrZW5kRGlz
cGF0Y2hlcj4gY3JlYXRlKEZyb250ZW5kQ2hhbm5lbCopOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBSZWY8QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShGcm9udGVuZENoYW5uZWwqKTsK
IAogICAgIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENhbGxiYWNrQmFzZSA6IHB1YmxpYyBSZWZD
b3VudGVkPENhbGxiYWNrQmFzZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgQ2FsbGJhY2tCYXNl
KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKKyAgICAgICAgQ2FsbGJhY2tCYXNl
KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgbG9uZyByZXF1ZXN0SWQpOwogCiAgICAgICAgIGJv
b2wgaXNBY3RpdmUoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZW5kRmFpbHVyZShjb25zdCBFcnJv
clN0cmluZyYpOwogICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFkeVNlbnQgPSB0cnVl
OyB9CiAKLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZvaWQgc2VuZElmQWN0aXZlKFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UsIGNvbnN0IEVycm9yU3RyaW5nJiBpbnZv
Y2F0aW9uRXJyb3IpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYpOworICAgICAgICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJik7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWY8QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2Vu
ZERpc3BhdGNoZXI7Ci0gICAgICAgIGludCBtX2lkOwotICAgICAgICBib29sIG1fYWxyZWFkeVNl
bnQ7CisgICAgICAgIGxvbmcgbV9yZXF1ZXN0SWQ7CisgICAgICAgIGJvb2wgbV9hbHJlYWR5U2Vu
dCB7IGZhbHNlIH07CiAgICAgfTsKIAogICAgIHZvaWQgY2xlYXJGcm9udGVuZCgpIHsgbV9mcm9u
dGVuZENoYW5uZWwgPSBudWxscHRyOyB9CiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuICEhbV9mcm9udGVuZENoYW5uZWw7IH0KIAorICAgIGJvb2wgaGFzUHJvdG9jb2xFcnJvcnMo
KSBjb25zdCB7IHJldHVybiBtX3Byb3RvY29sRXJyb3JzLnNpemUoKSA+IDA7IH0KKwogICAgIGVu
dW0gQ29tbW9uRXJyb3JDb2RlIHsKICAgICAgICAgUGFyc2VFcnJvciA9IDAsCiAgICAgICAgIElu
dmFsaWRSZXF1ZXN0LApAQCAtODIsMjUgKzg0LDQyIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAg
dm9pZCByZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4sIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpOwotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgY2FsbElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIHJlc3VsdCwgY29uc3QgRXJyb3JTdHJpbmcmIGludm9jYXRp
b25FcnJvcik7Ci0gICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0
IGNhbGxJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgY29u
c3Q7Ci0gICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKGNvbnN0IGxvbmcqIGNvbnN0IGNhbGxJ
ZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4+JiYgZGF0YSkgY29uc3Q7Ci0KLSAgICBz
dGF0aWMgaW50IGdldEludGVnZXIoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBw
cm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIGRvdWJsZSBnZXREb3VibGUoSW5zcGVjdG9yT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVycm9ycyk7Ci0gICAgc3RhdGljIFN0cmlu
ZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxTdHJpbmc+JiBwcm90b2NvbEVy
cm9ycyk7Ci0gICAgc3RhdGljIGJvb2wgZ2V0Qm9vbGVhbihJbnNwZWN0b3JPYmplY3QqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFy
cmF5PFN0cmluZz4mIHByb3RvY29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBnZXRWYWx1ZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz4mIHByb3Rv
Y29sRXJyb3JzKTsKLSAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZ2V0T2JqZWN0
KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOwotICAg
IHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KEluc3BlY3Rvck9iamVjdCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXJyYXk8U3RyaW5nPiYgcHJvdG9jb2xFcnJvcnMpOworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHJlc3VsdCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZW5kUGVuZGlu
Z0Vycm9ycygpOworCisgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9yKENvbW1vbkVycm9yQ29k
ZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgcmVwb3J0UHJvdG9jb2xFcnJvcihPcHRpb25hbDxsb25nPiByZWxhdGVkUmVxdWVzdElkLCBD
b21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEluc3BlY3Rvck9iamVjdCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlvbmFsVmFsdWVGb3VuZCwgVCBkZWZh
dWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChJbnNwZWN0b3JWYWx1ZSYsIFQmKT4sIGNvbnN0
IGNoYXIqIHR5cGVOYW1lKTsKKworICAgIGludCBnZXRJbnRlZ2VyKEluc3BlY3Rvck9iamVjdCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgZG91YmxlIGdldERv
dWJsZShJbnNwZWN0b3JPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQpOworICAgIFN0cmluZyBnZXRTdHJpbmcoSW5zcGVjdG9yT2JqZWN0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKKyAgICBib29sIGdldEJvb2xlYW4oSW5zcGVjdG9y
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IGdldFZhbHVlKEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Z2V0T2JqZWN0KEluc3BlY3Rvck9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBnZXRBcnJheShJbnNwZWN0b3JP
YmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwogCiBwcml2YXRl
OgotICAgIEJhY2tlbmREaXNwYXRjaGVyKEZyb250ZW5kQ2hhbm5lbCogRnJvbnRlbmRDaGFubmVs
KQotICAgICAgICA6IG1fZnJvbnRlbmRDaGFubmVsKEZyb250ZW5kQ2hhbm5lbCkgeyB9CisgICAg
QmFja2VuZERpc3BhdGNoZXIoRnJvbnRlbmRDaGFubmVsKiBjaGFubmVsKQorICAgICAgICA6IG1f
ZnJvbnRlbmRDaGFubmVsKGNoYW5uZWwpCisgICAgeworICAgIH0KIAogICAgIEZyb250ZW5kQ2hh
bm5lbCogbV9mcm9udGVuZENoYW5uZWw7CiAgICAgSGFzaE1hcDxTdHJpbmcsIFN1cHBsZW1lbnRh
bEJhY2tlbmREaXNwYXRjaGVyKj4gbV9kaXNwYXRjaGVyczsKKworICAgIC8vIFByb3RvY29sIGVy
cm9ycyByZXBvcnRlZCBmb3IgdGhlIHRvcC1sZXZlbCByZXF1ZXN0IGJlaW5nIHByb2Nlc3NlZC4K
KyAgICAvLyBJZiBwcm9jZXNzaW5nIGEgcmVxdWVzdCB0cmlnZ2VycyBhc3luYyByZXNwb25zZXMs
IHRoZW4gYW55IHJlbGF0ZWQgZXJyb3JzIHdpbGwKKyAgICAvLyBiZSBhdHRyaWJ1dGVkIHRvIHRo
ZSB0b3AtbGV2ZWwgcmVxdWVzdCwgYnV0IGdlbmVyYXRlIHNlcGFyYXRlIGVycm9yIG1lc3NhZ2Vz
LgorICAgIFZlY3RvcjxzdGQ6OnR1cGxlPENvbW1vbkVycm9yQ29kZSwgU3RyaW5nPj4gbV9wcm90
b2NvbEVycm9yczsKKworICAgIC8vIEZvciBzeW5jaHJvbm91c2x5IGhhbmRsZWQgcmVxdWVzdHMs
IGF2b2lkIHBsdW1iaW5nIHJlcXVlc3RJZCB0aHJvdWdoIGV2ZXJ5CisgICAgLy8gY2FsbCB0aGF0
IGNvdWxkIHBvdGVudGlhbGx5IGZhaWwgd2l0aCBhIHByb3RvY29sIGVycm9yLgorICAgIE9wdGlv
bmFsPGxvbmc+IG1fY3VycmVudFJlcXVlc3RJZCB7IE51bGxvcHQgfTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weQppbmRleCAwNWYzNTMwOTc0ZTA1OWQ3ZjljNjRmOWZlODk2MGU0NTMyY2FmZjhl
Li43NTA3MWM2ZDE1YTU5ZDIwNTk1YjJjMzQ4MDY5NWUyNTQyOGYzODgxIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJh
dG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQpAQCAtMSw2ICsxLDYgQEAK
ICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTEwMSw3ICsxMDEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgIiIiJHtjbGFzc0FuZEV4cG9ydE1hY3Jv
fSAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8JHtkb21haW5O
YW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIqLCAke2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVj
dD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1l
c3NhZ2UpIG92ZXJyaWRlOwogJHtjb21tYW5kRGVjbGFyYXRpb25zfQogcHJpdmF0ZToKICAgICAk
e2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCAke2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CkBAIC0xMjMsMjQgKzEyMywzMCBAQCBw
cml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30p
ID0gMDsiIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0
Y2ggPSAoCi0gICAgIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVj
dD4mJiBtZXNzYWdlKQorICAgICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1z
IiksIHBhcmFtZXRlcnMpOworCiAke2Rpc3BhdGNoQ2FzZXN9CiAgICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywgIiR7ZG9tYWluTmFt
ZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsIG1ha2VTdHJpbmcoJ1xcJycsICIke2RvbWFpbk5hbWV9IiwgJy4nLCBtZXRob2Qs
ICInIHdhcyBub3QgZm91bmQiKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKAotIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQorIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgdHlwZWRlZiB2b2lk
ICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OipDYWxsSGFuZGxlcikobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFs
KCJwYXJhbXMiKSwgcGFyYW1ldGVycyk7CisKKyAgICB0eXBlZGVmIHZvaWQgKCR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KkNhbGxIYW5kbGVyKShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKTsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBDYWxsSGFuZGxlcj4gRGlzcGF0Y2hNYXA7Ci0gICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKERpc3BhdGNoTWFwLCBkaXNwYXRjaE1hcCwgKCkpOwotICAgIGlmIChkaXNwYXRjaE1h
cC5pc0VtcHR5KCkpIHsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOworICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBNZXRob2RUYWJsZSB7CiAgICAgICAgICAgICBjb25zdCBj
aGFyKiBuYW1lOwogICAgICAgICAgICAgQ2FsbEhhbmRsZXIgaGFuZGxlcjsKQEAgLTE0OSwxNiAr
MTU1LDE2IEBAICR7ZGlzcGF0Y2hDYXNlc30KICAgICAgICAgfTsKICAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAuYWRkKGNvbW1h
bmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgICAgICAgICAgZGlzcGF0Y2hN
YXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwogICAg
IH0KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9yIGl0ID0gZGlz
cGF0Y2hNYXAuZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1hcC5lbmQoKSkg
ewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXFwnJywg
IiR7ZG9tYWluTmFtZX0iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICBh
dXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7CisgICAgaWYg
KGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1xcJycsICIke2RvbWFpbk5hbWV9IiwgJy4nLCBtZXRo
b2QsICInIHdhcyBub3QgZm91bmQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAo
KCp0aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsIG1lc3NhZ2UuZ2V0KCkpOworICAgICgoKnRoaXMp
LipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwog
fSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1
Y3RvciA9ICgKQEAgLTE3OCwxMyArMTg0LDkgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjoke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKIH0i
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRB
cmd1bWVudHMgPSAoCi0iIiIgICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwo
InBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwotJHtpblBhcmFtZXRlckRlY2xhcmF0aW9uc30K
LSAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJv
ck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwnJXNc
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfSIpOwot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92
ZShwcm90b2NvbEVycm9ycykpOworIiIiJHtpblBhcmFtZXRlckRlY2xhcmF0aW9uc30KKyAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
IFwnJXNcJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiJHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1l
fSIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICIiIikKQEAgLTE5Niw3ICsxOTgsNyBAQCB2
b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1l
fTo6c2VuZFN1Y2Nlc3MoJHtmb3JtYQogewogICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICR7b3V0UGFyYW1ldGVyQXNzaWdu
bWVudHN9Ci0gICAgc2VuZElmQWN0aXZlKFdURjo6bW92ZShqc29uTWVzc2FnZSksIEVycm9yU3Ry
aW5nKCkpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGOjptb3ZlKGpzb25NZXNz
YWdlKSk7CiB9IiIiKQogCiAgICAgRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0Y2hlckRl
Y2xhcmF0aW9uID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCA1NGJkYjNlOTFhYzA3
MTVkN2E2Y2UyYjM2ZjU1Y2MzZjI0MzE1YWQ2Li4yZTVmZjdhNmE2M2ZiYmUwZjU5YjUwMjhiZDg2
ZjhjNDFjY2I2MTM2IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMSw2ICsxLDYgQEAK
ICMhL3Vzci9iaW4vZW52IHB5dGhvbgogIwotIyBDb3B5cmlnaHQgKGMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBDb3B5cmlnaHQgKGMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyBDb3B5cmlnaHQgKGMpIDIwMTQgVW5pdmVyc2l0
eSBvZiBXYXNoaW5ndG9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTIwNSw0ICsyMDUsNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Rv
bWFpbihkb21haW4sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJf
YXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7IiAlIGNvbW1hbmQuY29tbWFu
ZF9uYW1lCisgICAgICAgIHJldHVybiAiICAgIHZvaWQgJXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1l
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCAzNTBmMDg1NGNi
OWE1NmU3ODdiOWRmYjVlOGM5YTA4ZWZiZGNlMTE4Li4xMjUxMTQ5MzNjZTkyODgxNWI0MmQ0NTJm
NTIzZWFlY2QzMDdhMTFlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2VudiBweXRob24KICMKLSMgQ29weXJpZ2h0
IChjKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0
IChjKSAyMDE0IFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC01MSw2ICs1MSw3IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgc2Vjb25kYXJ5
X2hlYWRlcnMgPSBbCiAgICAgICAgICAgICAnPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwuaD4nLAogICAgICAgICAgICAgJzxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+JywK
KyAgICAgICAgICAgICc8d3RmL05ldmVyRGVzdHJveWVkLmg+JywKICAgICAgICAgICAgICc8d3Rm
L3RleHQvQ1N0cmluZy5oPiddCiAKICAgICAgICAgc2Vjb25kYXJ5X2luY2x1ZGVzID0gWycjaW5j
bHVkZSAlcycgJSBoZWFkZXIgZm9yIGhlYWRlciBpbiBzZWNvbmRhcnlfaGVhZGVyc10KQEAgLTEw
NCwxMCArMTA1LDEwIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJf
c3dpdGNoX2ltcGxlbWVudGF0aW9uX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToKICAgICAgICAg
Y2FzZXMgPSBbXQogICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICBpZiAobWV0aG9kID09ICIlcyIp
JyAlIGRvbWFpbi5jb21tYW5kc1swXS5jb21tYW5kX25hbWUpCi0gICAgICAgIGNhc2VzLmFwcGVu
ZCgnICAgICAgICAlcyhjYWxsSWQsIG1lc3NhZ2UpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29t
bWFuZF9uYW1lKQorICAgICAgICBjYXNlcy5hcHBlbmQoJyAgICAgICAgJXMocmVxdWVzdElkLCBX
VEY6Om1vdmUocGFyYW1ldGVycykpOycgJSBkb21haW4uY29tbWFuZHNbMF0uY29tbWFuZF9uYW1l
KQogICAgICAgICBmb3IgY29tbWFuZCBpbiBkb21haW4uY29tbWFuZHNbMTpdOgogICAgICAgICAg
ICAgY2FzZXMuYXBwZW5kKCcgICAgZWxzZSBpZiAobWV0aG9kID09ICIlcyIpJyAlIGNvbW1hbmQu
Y29tbWFuZF9uYW1lKQotICAgICAgICAgICAgY2FzZXMuYXBwZW5kKCcgICAgICAgICVzKGNhbGxJ
ZCwgbWVzc2FnZSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICAgICAgY2FzZXMu
YXBwZW5kKCcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsnICUg
Y29tbWFuZC5jb21tYW5kX25hbWUpCiAKICAgICAgICAgc3dpdGNoX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTE3MCw3ICsxNzEsNyBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVy
YXRvcik6CiAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQogICAgICAgICBv
dXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMgPSBbXQotICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1l
dGVycyA9IFsnY2FsbElkJ10KKyAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3Bh
cmFtZXRlcnMgPSBbJ3JlcXVlc3RJZCddCiAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzID0gWydl
cnJvciddCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKQEAgLTIwNyw3ICsyMDgsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQ
YXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMg
JShwYXJhbWV0ZXJOYW1lKXMgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6JShrZXllZEdldE1ldGhvZClz
KHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCIlKHBhcmFtZXRlcktleSlzIiks
ICUoc3VjY2Vzc091dFBhcmFtKXMsIHByb3RvY29sRXJyb3JzLmdldCgpKTsnICUgcGFyYW1fYXJn
cykKKyAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgJShw
YXJhbWV0ZXJUeXBlKXMgJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT4l
KGtleWVkR2V0TWV0aG9kKXMocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCIlKHBhcmFt
ZXRlcktleSlzIiksICUoc3VjY2Vzc091dFBhcmFtKXMpOycgJSBwYXJhbV9hcmdzKQogCiAgICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgb3B0aW9u
YWxfaW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8g
JShwYXJhbWV0ZXJFeHByZXNzaW9uKXMgOiBudWxscHRyJyAlIHBhcmFtX2FyZ3MKQEAgLTIyNCw3
ICsyMjUsNyBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKEdlbmVyYXRvcik6CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7JykKLSAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKKyAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykKICAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJldHVy
bjsnKQogICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjay5jb3B5
UmVmKCknKQogCkBAIC0yNjcsOSArMjY4LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzID0gW10K
ICAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUo
Y29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiknICUgY29t
bWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4mJiknICUgY29tbWFuZF9hcmdzKQogICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNo
ZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBt
ZXNzYWdlKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQg
JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpJyAlIGNvbW1hbmRf
YXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKIAogICAgICAgICBpZiBsZW4oY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnMpID4gMDoKQEAgLTI4Niw3ICsyODcsNyBAQCBjbGFzcyBDcHBCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIFJlZjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7JykKICAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFJlZjwlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JShjYWxsYmFja05hbWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3ICUoZG9tYWluTmFt
ZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERp
c3BhdGNoZXIuY29weVJlZigpLCBjYWxsSWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPCUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgJShkb21h
aW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNr
ZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOycgJSBjb21tYW5kX2FyZ3MpCiAg
ICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6CiAgICAgICAgICAg
ICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0
ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCkBAIC0zMDUsNiArMzA2LDkgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQogCiAgICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5j
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsnKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgZWxzZScpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURjo6bW92ZShlcnJvcikpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAg
ICAgICAgIHJldHVybiAiXG4iLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
aW5kZXggMjliMzhlODg3MThkOWY1ODhiMjIyNGY2NWYwZTI1ZjZlMDQ5ZWYwNS4uZDU2YTBiMTc4
MDM2OWE5YjlkOGU1NThiYTQ5OGVhOWMwZGI0Yjk0ZiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQpAQCAtOTQsNyArOTQsNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2Rl
Y2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtd
Ci0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElkJ10KKyAgICAgICAgcGFyYW1ldGVy
cyA9IFsnbG9uZyByZXF1ZXN0SWQnXQogICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyczoKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8l
cycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFt
ZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggMjdiZGQ0YTliYmMyNzkxMjgy
MjU2OGMzNjM2YzZkOWY2ODNiMjVlNi4uYTI3N2Q3ODZlNTJlMmFkNmUxMWMwY2VhZDVlNWUyNmM4
ZDRjMjViMyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAg
LTgyLDcgKzgyLDcgQEAgY2xhc3MgT2JqQ0NvbmZpZ3VyYXRpb25JbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0
aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQorICAgICAgICBwYXJhbWV0
ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5f
JXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJh
bWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKIApAQCAtMTM5LDkg
KzEzOSw5IEBAIGNsYXNzIE9iakNDb25maWd1cmF0aW9uSW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
R2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJfbmFtZSkKICAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKEFTQ0lJTGl0
ZXJhbCgiJXMiKSwgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3Zl
KHJlc3VsdE9iamVjdCksIFN0cmluZygpKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6
bW92ZShyZXN1bHRPYmplY3QpKTsnKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQs
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsnKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOycpCiAKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgfTsnKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IGVmNzEyYjhk
YmRjMjgxNWYxYTMyZDViYzliMDA3ODY4ZDYwZjU4ZWEuLmEyOGE5ZWYxMDUxZjM4OTk5ZDZiNTMw
MmQyZTIzYjAwZTcyOGZlZWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkKQEAgLTExMiw3ICsxMTIsOCBAQCBwcml2YXRlOgogICAgICIiInZv
aWQgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtjb21tYW5k
TmFtZX0oJHtwYXJhbWV0ZXJzfSkKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogJHtzdWNjZXNzQ2FsbGJhY2t9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMt
d2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKaW5kZXggMTVkNmE0ZDllMTAzNzc2ZTJh
OWNkMGQxNGM5NWM1NmJkMTZiN2E4My4uZTM3ZjljNTM3MWFmOTJhMGM1OTc4MTVkODk0NTE5Nzk2
Nzk0NWVmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtMTg3
LDEyICsxODcsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2Vu
ZERpc3BhdGNoZXIqLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEluc3Bl
Y3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0
b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0g
ICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYg
cGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0ZXJzKTsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogcHJpdmF0ZToK
ICAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciogbV9hZ2VudDsKQEAgLTI0NSw2ICsyNDUsNyBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGlu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKQEAgLTI3MCwzOCArMjcxLDM3IEBAIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKEFTQ0lJTGl0ZXJhbCgiRGF0YWJhc2UiKSwgdGhpcyk7CiB9CiAKLXZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCiAgICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBtZXNzYWdlKTsKKyAgICAgICAgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7
CiAgICAgZWxzZSBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIpCi0gICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGNhbGxJ
ZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBlbHNlIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxTeW5jIikKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMoY2FsbElkLCBtZXNz
YWdlKTsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1l
dGVycykpOwogICAgIGVsc2UgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikKLSAgICAg
ICAgZXhlY3V0ZVNRTEFzeW5jKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGV4ZWN1dGVTUUxB
c3luYyhyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAgICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiRGF0YWJhc2Ui
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBtZXRob2QsICInIHdhcyBu
b3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7Ci0gICAgYXV0byBwcm90b2NvbEVycm9ycyA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRhaW5lcjsKLSAgICBtZXNzYWdlLmdldE9iamVjdChB
U0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJhbXNDb250YWluZXIpOwotICAgIGludCBpbl9kYXRh
YmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdl
dCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMu
Z2V0KCkpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJp
bmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgp
KSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBh
cmd1bWVudHMgb2YgbWV0aG9kICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsK
KyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOwor
ICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIpOworICAgIGlmICht
X2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Oklu
dmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcyIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGNhbGxJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYKQEAgLTM0Miw3ICszNDIsMTAgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElk
LAogICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaXNBc3NpZ25lZCgpKQogICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIG91dF9wcmludENv
bG9yLmdldFZhbHVlKCkpOwogICAgIH0KLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0KSwgZXJyb3IpOworICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURjo6bW92ZShyZXN1bHQpKTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEY6Om1vdmUoZXJyb3IpKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1
dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRj
aGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZShXVEY6Om1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CkBAIC0zNzAs
NTcgKzM3Myw0OSBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYQogICAgICAgICBqc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgYWx0ZXJuYXRlQ29s
b3JzKTsKICAgICBpZiAocHJpbnRDb2xvci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHByaW50Q29sb3IuZ2V0
VmFsdWUoKSk7Ci0gICAgc2VuZElmQWN0aXZlKFdURjo6bW92ZShqc29uTWVzc2FnZSksIEVycm9y
U3RyaW5nKCkpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGOjptb3ZlKGpzb25N
ZXNzYWdlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9i
amVjdCYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+JiYgcGFyYW1ldGVycykKIHsKLSAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcGFyYW1zQ29udGFpbmVyOwotICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFT
Q0lJTGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtc0NvbnRhaW5lcik7Ci0gICAgaW50IGluX2RhdGFi
YXNlSWQgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0ciwg
cHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlmIChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkp
IHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFy
Z3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKTsKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsK
KyAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJkYXRhYmFzZUlkIiksIG51bGxwdHIpOwor
ICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJh
bWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIpOworICAgIGlmICht
X2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Oklu
dmFsaWRQYXJhbXMsIFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVz
JyBjYW4ndCBiZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoY2FsbElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYKIAogICAgIEVycm9yU3RyaW5nIGVycm9yOwogICAgIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVm
PERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIGNhbGxJZCkpOworICAg
IFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQp
KTsKICAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJv
ciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7CiAKICAgICBp
ZiAoZXJyb3IubGVuZ3RoKCkpIHsKICAgICAgICAgY2FsbGJhY2stPmRpc2FibGUoKTsKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVj
dG9yT2JqZWN0JiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJh
bWV0ZXJzKQogewotICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJhbXNDb250YWluZXI7Ci0gICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJh
bXMiKSwgcGFyYW1zQ29udGFpbmVyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRJbnRlZ2VyKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJkYXRhYmFzZUlkIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJp
bmcgaW5fcXVlcnkgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJxdWVyeSIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5n
ZXQoKSk7Ci0gICAgaWYgKHByb3RvY29sRXJyb3JzLT5sZW5ndGgoKSkgewotICAgICAgICBTdHJp
bmcgZXJyb3JNZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhv
ZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMU3luYyIpOwot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92
ZShwcm90b2NvbEVycm9ycykpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFi
YXNlSWQiKSwgbnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwg
bnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3Jz
KCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVj
dXRlU1FMU3luYyIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhjYWxs
SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5leGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtNDUxLDcgKzQ0NiwxMCBAQCB2b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBj
b25zdCBJbnNwZWN0b3JPYmplYwogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVy
YWwoInNjcmVlbkNvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF9zY3JlZW5Db2xvcikpOwogICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJSUxp
dGVyYWwoInByaW50Q29sb3IiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Z2V0RW51bUNvbnN0YW50
VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKICAgICB9Ci0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsKKyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0KSk7CisgICAgZWxzZQorICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7CiB9CiAKIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQp
IDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEY6Om1vdmUoYmFja2VuZERpc3Bh
dGNoZXIpLCBpZCkgeyB9CkBAIC00NjksMzcgKzQ2NywzMyBAQCB2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3Mo
UmVmUAogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xv
ciIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xv
cikpOwogICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNv
bG9ycyIpLCBhbHRlcm5hdGVDb2xvcnMpOwogICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoQVND
SUlMaXRlcmFsKCJwcmludENvbG9yIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25z
dGFudFZhbHVlKHByaW50Q29sb3IpKTsKLSAgICBzZW5kSWZBY3RpdmUoV1RGOjptb3ZlKGpzb25N
ZXNzYWdlKSwgRXJyb3JTdHJpbmcoKSk7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhX
VEY6Om1vdmUoanNvbk1lc3NhZ2UpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYg
bWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpCiB7
Ci0gICAgYXV0byBwcm90b2NvbEVycm9ycyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFycmF5PFN0
cmluZz46OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmFtc0NvbnRh
aW5lcjsKLSAgICBtZXNzYWdlLmdldE9iamVjdChBU0NJSUxpdGVyYWwoInBhcmFtcyIpLCBwYXJh
bXNDb250YWluZXIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6
OmdldEludGVnZXIocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNl
SWQiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIFN0cmluZyBpbl9xdWVy
eSA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBB
U0NJSUxpdGVyYWwoInF1ZXJ5IiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAg
ICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1l
c3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYyIpOwotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBlcnJvck1lc3NhZ2UsIFdURjo6bW92ZShwcm90b2Nv
bEVycm9ycykpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwg
bnVsbHB0cik7CisgICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicXVlcnkiKSwgbnVsbHB0cik7
CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3RyaW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nlc3NlZCIsICJEYXRhYmFzZS5leGVjdXRlU1FMQXN5
bmMiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKGNhbGxJZCwgaW5f
ZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVTUUxBc3luYyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgRXJyb3JTdHJpbmcgZXJyb3I7CiAgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIu
Y29weVJlZigpLCBjYWxsSWQpKTsKKyAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNr
KG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKICAgICBtX2FnZW50
LT5leGVjdXRlU1FMQXN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFj
ay5jb3B5UmVmKCkpOwogCiAgICAgaWYgKGVycm9yLmxlbmd0aCgpKSB7CiAgICAgICAgIGNhbGxi
YWNrLT5kaXNhYmxlKCk7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoJmNhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiB9CkBAIC04NTEsMTAgKzg0NSwxMCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIE9iakNJbnNwZWN0
b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKLSAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5KSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxSV0lQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtMTAzMywxMCArMTAy
NywxMSBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVj
dG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRp
bWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFJXSVByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgUldJUHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmlu
dENvbG9yKSB7CkBAIC0xMDY3LDcgKzEwNjIsNyBAQCB2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKAog
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0
ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7CiAgICAg
ICAgIGlmIChwcmludENvbG9yKQogICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJwcmludENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3Ip
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RG
Ojptb3ZlKHJlc3VsdE9iamVjdCksIFN0cmluZygpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdE9iamVjdCkpOwog
ICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKQEAgLTEw
NzYsMTAgKzEwNzEsMTEgQEAgdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygKICAgICBbbV9kZWxlZ2F0
ZSBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19p
bl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFJX
SVByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBSV0lQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0
ZUNvbG9ycywgUldJUHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewpAQCAtMTExMCw3ICsxMTA2LDcgQEAgdm9p
ZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMKICAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
QVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXkoKmFs
dGVybmF0ZUNvbG9ycykpOwogICAgICAgICBpZiAocHJpbnRDb2xvcikKICAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgicHJpbnRDb2xvciIpLCB0b1Byb3Rv
Y29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHRPYmplY3QpLCBTdHJpbmcoKSk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6
bW92ZShyZXN1bHRPYmplY3QpKTsKICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9
IGluX2RhdGFiYXNlSWQ7CkBAIC0xMTE5LDEwICsxMTE1LDExIEBAIHZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9
CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3Ip
IHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5z
cGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFJXSVByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSV0lQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKQEAgLTExNDMsNyArMTE0MCw3
IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVT
UUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fCiAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJhbHRlcm5hdGVDb2xvcnMiKSwgaW5zcGVjdG9yU3RyaW5nQXJyYXko
YWx0ZXJuYXRlQ29sb3JzKSk7CiAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwog
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3Ii
KSwgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHRPYmplY3QpLCBTdHJp
bmcoKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURjo6bW92ZShyZXN1bHRPYmplY3QpKTsKICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0
YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CkBAIC0xMTUyLDEwICsxMTQ5LDExIEBAIHZvaWQgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcg
Y2FsbElkLCBpbnQgaW5fCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25n
IGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit2b2lk
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMo
bG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
KQogewogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBS
V0lQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFJXSVByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
QXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKQEAgLTExNzYsNyArMTE3NCw3IEBAIHZvaWQg
T2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhs
b25nIGNhbGxJZCwgaW50IGluCiAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKEFTQ0lJ
TGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwog
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29s
b3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwogICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90
b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHRPYmplY3QpLCBTdHJpbmcoKSk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6
bW92ZShyZXN1bHRPYmplY3QpKTsKICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9
IGluX2RhdGFiYXNlSWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1y
ZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCBlMzQ5ZWNmNmYwOGQwYWY0ZmY4NjMy
OGM3M2ExNmI3NjMwYmFlMGRlLi5iY2E3NDMzZTI2YWU3YjU1MjI2NmE3MDBkNjkyYmFjMDVkODQ2
NWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0
ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBh
cmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTE3MCwxMCArMTcwLDEwIEBAIHByb3RlY3RlZDoKIGNs
YXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiwgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxs
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2Up
IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJp
ZGU7CiBwcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0
JiBtZXNzYWdlKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9p
ZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiBwcml2YXRlOgogICAgIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlciopOwogICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50
OwpAQCAtMjI2LDYgKzIyNiw3IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQpAQCAtMjUxLDUyICsyNTIsNTEgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRl
cmFsKCJEYXRhYmFzZSIpLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNw
ZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVj
dG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOwogCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1l
dGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMiKSwgcGFy
YW1ldGVycyk7CisKICAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzIikKLSAgICAgICAgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhjYWxsSWQsIG1lc3Nh
Z2UpOworICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RG
Ojptb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBlbHNlIGlmIChtZXRob2QgPT0gImV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyIpCi0gICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhj
YWxsSWQsIG1lc3NhZ2UpOworICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVx
dWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkRhdGFiYXNlIiwgJy4nLCBt
ZXRob2QsICInIHdhcyBub3QgZm91bmQiKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBt
YWtlU3RyaW5nKCdcJycsICJEYXRhYmFzZSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5k
IikpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2Fn
ZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJhbWV0
ZXJzKQogewotICAgIGF1dG8gcHJvdG9jb2xFcnJvcnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJh
bXNDb250YWluZXI7Ci0gICAgbWVzc2FnZS5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJwYXJhbXMi
KSwgcGFyYW1zQ29udGFpbmVyKTsKICAgICBib29sIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZv
dW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IG9wdF9p
bl9jb2x1bW5OYW1lcyA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXNDb250YWlu
ZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMiKSwgJm9wdF9pbl9jb2x1bW5OYW1l
c192YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXk+IG9wdF9pbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiY29sdW1uTmFtZXMi
KSwgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl9ub3Rl
c192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9ub3RlcyA9IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwo
Im5vdGVzIiksICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkp
OworICAgIFN0cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCAmb3B0X2luX25vdGVz
X3ZhbHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFs
c2U7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0T3V0cHV0PGRvdWJsZT4gb3B0X2luX3Rp
bWVzdGFtcCA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUocGFyYW1zQ29udGFpbmVyLmdl
dCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZv
dW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6T3B0
T3V0cHV0PGRvdWJsZT4gb3B0X2luX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInRpbWVzdGFtcCIpLCAmb3B0
X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKICAgICBib29sIG9wdF9pbl92YWx1ZXNfdmFsdWVG
b3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3B0
X2luX3ZhbHVlcyA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVy
LmdldCgpLCBBU0NJSUxpdGVyYWwoInZhbHVlcyIpLCAmb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5k
LCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBh
cmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksICZvcHRfaW5fdmFsdWVzX3Zh
bHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvcHRfaW5fcGF5bG9hZCA9IEJh
Y2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgicGF5bG9hZCIpLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCwgcHJvdG9jb2xFcnJv
cnMuZ2V0KCkpOworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBvcHRfaW5f
cGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCks
IEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7CiAg
ICAgYm9vbCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgaW50IG9w
dF9pbl9kYXRhYmFzZUlkID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIocGFyYW1zQ29u
dGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoImRhdGFiYXNlSWQiKSwgJm9wdF9pbl9kYXRhYmFz
ZUlkX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKKyAgICBpbnQgb3B0X2luX2Rh
dGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0
KCksIEFTQ0lJTGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCAmb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVG
b3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gQmFj
a2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0
ZXJhbCgic3FsRXJyb3IiKSwgJm9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVy
cm9ycy5nZXQoKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvcHRf
aW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJzcWxFcnJvciIpLCAmb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91
bmQpOwogICAgIGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAg
ICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmlu
ZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgic2NyZWVuQ29sb3IiKSwgJm9w
dF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7CisgICAg
U3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksICZvcHRfaW5f
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7CiAgICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3Jz
X3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJh
eT4gb3B0X2luX2FsdGVybmF0ZUNvbG9ycyA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShw
YXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksICZv
cHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4gb3B0X2luX2FsdGVybmF0ZUNv
bG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksIEFT
Q0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3Zh
bHVlRm91bmQpOwogICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIFN0cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwg
Jm9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAg
ICBpZiAocHJvdG9jb2xFcnJvcnMtPmxlbmd0aCgpKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1l
c3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICclcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
KTsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgZXJyb3JNZXNzYWdlLCBXVEY6
Om1vdmUocHJvdG9jb2xFcnJvcnMpKTsKKyAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRl
cmFsKCJwcmludENvbG9yIiksICZvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kKTsKKyAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCBTdHJpbmc6OmZvcm1hdCgiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICclcycgY2FuJ3QgYmUgcHJvY2Vzc2VkIiwgIkRhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhjYWxsSWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2Nv
bHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0
X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9p
bl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5f
dmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9p
bl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/
ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5k
ID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3Zh
bHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0
ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxw
dHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBu
dWxscHRyKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBv
cHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQg
PyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/
IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5k
ID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1
ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVu
Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5f
YWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgp
IDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRD
b2xvciA6IG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMzcs
MzMgKzMzNywzMiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0CiAgICAgICAgIGlmIChvdXRfcHJp
bnRDb2xvci5pc0Fzc2lnbmVkKCkpCiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInByaW50Q29sb3IiKSwgb3V0X3ByaW50Q29sb3IuZ2V0VmFsdWUoKSk7CiAgICAg
fQotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92
ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3Vs
dCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikp
OwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycykK
IHsKLSAgICBhdXRvIHByb3RvY29sRXJyb3JzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8
U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyYW1zQ29u
dGFpbmVyOwotICAgIG1lc3NhZ2UuZ2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFyYW1zIiksIHBh
cmFtc0NvbnRhaW5lcik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+IGlu
X2NvbHVtbk5hbWVzID0gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KHBhcmFtc0NvbnRhaW5l
ci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyLCBwcm90b2NvbEVy
cm9ycy5nZXQoKSk7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gQmFja2VuZERpc3BhdGNoZXI6Omdl
dFN0cmluZyhwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgibm90ZXMiKSwgbnVs
bHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGRvdWJsZSBpbl90aW1lc3RhbXAgPSBC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKHBhcmFtc0NvbnRhaW5lci5nZXQoKSwgQVNDSUlM
aXRlcmFsKCJ0aW1lc3RhbXAiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gQmFja2VuZERp
c3BhdGNoZXI6OmdldE9iamVjdChwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgi
dmFsdWVzIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBSZWZQdHI8SW5z
cGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gaW5fcGF5bG9hZCA9IEJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRWYWx1ZShwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgicGF5bG9hZCIpLCBu
dWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcihwYXJhbXNDb250YWluZXIuZ2V0KCksIEFTQ0lJ
TGl0ZXJhbCgiZGF0YWJhc2VJZCIpLCBudWxscHRyLCBwcm90b2NvbEVycm9ycy5nZXQoKSk7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbl9zcWxFcnJvciA9IEJhY2tl
bmREaXNwYXRjaGVyOjpnZXRPYmplY3QocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVy
YWwoInNxbEVycm9yIiksIG51bGxwdHIsIHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJp
bmcgaW5fc2NyZWVuQ29sb3IgPSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKHBhcmFtc0Nv
bnRhaW5lci5nZXQoKSwgQVNDSUlMaXRlcmFsKCJzY3JlZW5Db2xvciIpLCBudWxscHRyLCBwcm90
b2NvbEVycm9ycy5nZXQoKSk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
IGluX2FsdGVybmF0ZUNvbG9ycyA9IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShwYXJhbXND
b250YWluZXIuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgiYWx0ZXJuYXRlQ29sb3JzIiksIG51bGxwdHIs
IHByb3RvY29sRXJyb3JzLmdldCgpKTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IEJhY2tl
bmREaXNwYXRjaGVyOjpnZXRTdHJpbmcocGFyYW1zQ29udGFpbmVyLmdldCgpLCBBU0NJSUxpdGVy
YWwoInByaW50Q29sb3IiKSwgbnVsbHB0ciwgcHJvdG9jb2xFcnJvcnMuZ2V0KCkpOwotICAgIGlm
IChwcm90b2NvbEVycm9ycy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZSA9IFN0cmluZzo6Zm9ybWF0KCJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJyVzJyBjYW4ndCBi
ZSBwcm9jZXNzZWQiLCAiRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIik7Ci0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIGVycm9yTWVzc2FnZSwgV1RGOjptb3Zl
KHByb3RvY29sRXJyb3JzKSk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+
IGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVy
cy5nZXQoKSwgQVNDSUlMaXRlcmFsKCJjb2x1bW5OYW1lcyIpLCBudWxscHRyKTsKKyAgICBTdHJp
bmcgaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgQVNDSUlMaXRlcmFsKCJub3RlcyIpLCBudWxscHRyKTsKKyAgICBkb3VibGUgaW5fdGlt
ZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCks
IEFTQ0lJTGl0ZXJhbCgidGltZXN0YW1wIiksIG51bGxwdHIpOworICAgIFJlZlB0cjxJbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksIEFTQ0lJTGl0ZXJhbCgidmFsdWVzIiksIG51bGxwdHIp
OworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlPiBpbl9wYXlsb2FkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgQVNDSUlMaXRlcmFs
KCJwYXlsb2FkIiksIG51bGxwdHIpOworICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoImRh
dGFiYXNlSWQiKSwgbnVsbHB0cik7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0
ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNxbEVycm9yIiksIG51bGxwdHIpOworICAgIFN0cmlu
ZyBpbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0
ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIG51bGxwdHIpOworICAgIFJl
ZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxpdGVyYWwo
ImFsdGVybmF0ZUNvbG9ycyIpLCBudWxscHRyKTsKKyAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCBBU0NJSUxp
dGVyYWwoInByaW50Q29sb3IiKSwgbnVsbHB0cik7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNo
ZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgU3Ry
aW5nOjpmb3JtYXQoIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnJXMnIGNhbid0IGJlIHByb2Nl
c3NlZCIsICJEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGNhbGxJZCwgKmluX2Nv
bHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9h
ZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVy
bmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvcik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVz
LCBpbl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0
YWJhc2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9y
cywgaW5fcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM5
NCw3ICszOTMsMTAgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEkKICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheShBU0NJSUxpdGVyYWwoImFsdGVybmF0ZUNvbG9ycyIpLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzKTsKICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmludENvbG9y
IiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENv
bG9yKSk7CiAgICAgfQotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxs
SWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
Ojptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6
bW92ZShlcnJvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTc0NCw4ICs3
NDYsOCBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKGlkPFJXSVByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJy
YXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUq
IGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGluX3ZhbHVl
cywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCogaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENv
bG9yKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29u
c3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNv
bG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25v
dGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5f
cGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nKiBpbl9wcmludENvbG9yKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91
YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3Zh
bHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5
JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgb3ZlcnJp
ZGU7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxSV0lQcm90b2NvbERhdGFiYXNlRG9tYWlu
SGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtOTI0LDEwICs5MjYsMTEgQEAgX19hdHRyaWJ1
dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ckFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91
YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KiBpbl92
YWx1ZXMsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIGluX3BheWxvYWQsIGNvbnN0
IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QqIGlu
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3RvckFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJp
bnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEluc3BlY3Rv
cjo6SW5zcGVjdG9yQXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVz
LCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QqIGluX3ZhbHVlcywgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBpbl9wcmludENvbG9yKQogewogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2Fs
bElkLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rlcywg
ZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBSV0lQcm90b2NvbERh
dGFiYXNlRXJyb3IgKipzcWxFcnJvciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFJX
SVByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAq
cHJpbnRDb2xvcikgewpAQCAtOTU4LDcgKzk2MSw3IEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBj
CiAgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiYWx0ZXJu
YXRlQ29sb3JzIiksIGluc3BlY3RvclN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKICAg
ICAgICAgaWYgKHByaW50Q29sb3IpCiAgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
ZyhBU0NJSUxpdGVyYWwoInByaW50Q29sb3IiKSwgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xv
cikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBX
VEY6Om1vdmUocmVzdWx0T2JqZWN0KSwgU3RyaW5nKCkpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0T2JqZWN0KSk7
CiAgICAgfTsKIAogICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsK
QEAgLTk5NSwxMCArOTk4LDExIEBAIHZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjCiAgICAgW21fZGVs
ZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5f
Y29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8g
Jm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0
YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9h
ZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFi
YXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAm
b19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5f
c2NyZWVuQ29sb3IgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8g
Jm9faW5fYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8g
Jm9faW5fcHJpbnRDb2xvciA6IG5pbCldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25z
dCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdCYgaW5fdmFsdWVzLCBJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlIGlu
X3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IElu
c3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBJ
bnNwZWN0b3I6Okluc3BlY3RvckFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBp
bl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JP
YmplY3QmIGluX3ZhbHVlcywgSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSBpbl9wYXlsb2FkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRD
b2xvcikKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5T
U3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpw
YXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUldJUHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJv
ciwgUldJUHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBSV0lQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7CkBAIC0xMDE5LDcg
KzEwMjMsNyBAQCB2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYQogICAgICAgICByZXN1bHRPYmplY3Qt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInNjcmVlbkNvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmco
c2NyZWVuQ29sb3IpKTsKICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheShBU0NJSUxpdGVy
YWwoImFsdGVybmF0ZUNvbG9ycyIpLCBpbnNwZWN0b3JTdHJpbmdBcnJheShhbHRlcm5hdGVDb2xv
cnMpKTsKICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJwcmlu
dENvbG9yIiksIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBXVEY6Om1vdmUocmVzdWx0T2JqZWN0
KSwgU3RyaW5nKCkpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0T2JqZWN0KSk7CiAgICAgfTsKIAogICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IG9iamNTdHJpbmdBcnJheSgmaW5f
Y29sdW1uTmFtZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJl
c3VsdAppbmRleCAxOTBiMjYwMDIzY2JjODZhYWI1NDQyYTBhZWM0ZGY1YzdiZGM2NzViLi5jNGNm
NmIxMWQxYzhiMDdmZTY3ZDE1ZjY4NzFlOGFjMDg5NjBlZWJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13
aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtMTg4LDkgKzE4OCw5IEBAIHByb3Rl
Y3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiwgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2Fn
ZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CiBwcml2YXRlOgogICAgIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwpAQCAtMjA1LDE1ICsyMDUsMTUgQEAgcHJp
dmF0ZToKIGNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiwgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2go
bG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYm
IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2Fn
ZSkgb3ZlcnJpZGU7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJ
ZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3Nh
Z2UpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9y
T2JqZWN0JiBtZXNzYWdlKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNv
bnN0IEluc3BlY3Rvck9iamVjdCYgbWVzc2FnZSk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOwotICAgIHZvaWQgbG9h
ZFJlc291cmNlNyhsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBtZXNzYWdlKTsK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9h
ZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAg
IHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1ldGVycyk7CiBwcml2YXRlOgogICAgIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwogICAgIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKiBtX2FnZW50OwpAQCAtMjY2LDYgKzI2Niw3IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9y
L0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQpAQCAtMjkyLDIxICsyOTMsMjQgQEAgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMSIpLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCisgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyYW1ldGVyczsKKyAgICBtZXNzYWdlLT5nZXRPYmplY3QoQVNDSUlMaXRlcmFsKCJw
YXJhbXMiKSwgcGFyYW1ldGVycyk7CisKICAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2Ux
IikKLSAgICAgICAgbG9hZFJlc291cmNlMShjYWxsSWQsIG1lc3NhZ2UpOworICAgICAgICBsb2Fk
UmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoJmNhbGxJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCBtYWtlU3RyaW5nKCdcJycsICJOZXR3
b3JrMSIsICcuJywgbWV0aG9kLCAiJyB3YXMgbm90IGZvdW5kIikpOworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEiLCAnLicsIG1ldGhvZCwgIicg
d2FzIG5vdCBmb3VuZCIpKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKGNhbGxJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0zMTUsNyArMzE5LDEwIEBAIHZvaWQgTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAot
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShy
ZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwog
fQogCiBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqIGFnZW50KQpAQCAtMzMzLDE0ICszNDAsMTcgQEAg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3Rl
ckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJOZXR3b3JrMyIpLCB0aGlzKTsKIH0K
IAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIGNhbGxJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkKK3Zv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAg
ICAgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAg
dHlwZWRlZiB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxv
bmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJ
TGl0ZXJhbCgicGFyYW1zIiksIHBhcmFtZXRlcnMpOworCisgICAgdHlwZWRlZiB2b2lkIChOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqQ2FsbEhhbmRsZXIpKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpOwogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmcsIENhbGxIYW5kbGVyPiBEaXNwYXRjaE1hcDsKLSAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoRGlzcGF0Y2hNYXAsIGRpc3BhdGNoTWFwLCAoKSk7Ci0gICAgaWYgKGRpc3BhdGNo
TWFwLmlzRW1wdHkoKSkgeworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4g
ZGlzcGF0Y2hNYXA7CisgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewogICAg
ICAgICBzdGF0aWMgY29uc3Qgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIG5hbWU7CiAgICAgICAgICAgICBDYWxsSGFuZGxlciBoYW5kbGVyOwpAQCAtMzU1LDIz
ICszNjUsMjMgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IGNhbGxJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjwKICAgICAgICAgfTsKICAgICAgICAg
c2l6ZV90IGxlbmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY29tbWFuZHMpOwogICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQotICAgICAgICAgICAgZGlzcGF0Y2hNYXAu
YWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOworICAgICAgICAgICAg
ZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRs
ZXIpOwogICAgIH0KIAotICAgIEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj46Oml0ZXJhdG9y
IGl0ID0gZGlzcGF0Y2hNYXAuZmluZChtZXRob2QpOwotICAgIGlmIChpdCA9PSBkaXNwYXRjaE1h
cC5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKCZjYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmlu
ZygnXCcnLCAiTmV0d29yazMiLCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAg
ICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7CisgICAg
aWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmszIiwgJy4nLCBtZXRob2Qs
ICInIHdhcyBub3QgZm91bmQiKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0
aGlzKS4qaXQtPnZhbHVlKShjYWxsSWQsIG1lc3NhZ2UuZ2V0KCkpOworICAgICgoKnRoaXMpLipm
aW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogfQog
Ci12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBjYWxs
SWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTEoY2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYKQEAgLTM4MCwxNCArMzkwLDE3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVm
PEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rv
ck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIo
Y2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJl
cXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTM5NiwxNCArNDA5
LDE3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25n
IGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UyKGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShj
YWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6Omxv
YWRSZXNvdXJjZTMobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMoY2FsbElkKTsKKyAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQxMiwxNCArNDI4LDE3IEBAIHZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCwgY29uc3QgSW5z
cGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKGVycm9yKTsKIAot
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShy
ZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkp
OworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwog
fQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBj
YWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAg
ICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmxvYWRSZXNvdXJjZTQoY2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYKQEAgLTQyOCwxNCArNDQ3LDE3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlNChsb25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAg
UmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7Cisg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQsIGNvbnN0IEluc3Bl
Y3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZTUoY2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1
KHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQ0NCwxNCAr
NDY2LDE3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShs
b25nIGNhbGxJZCwgY29uc3QgSW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVj
dD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2Fk
UmVzb3VyY2U1KGVycm9yKTsKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGOjptb3ZlKHJlc3VsdCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURjo6bW92ZShlcnJvcikpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTYoY2FsbElkKTsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTQ2MCwxNCArNDg1LDE3IEBAIHZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIGNhbGxJZCwgY29uc3Qg
SW5zcGVjdG9yT2JqZWN0CiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsK
IAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShjYWxsSWQsIFdURjo6bW92
ZShyZXN1bHQpLCBlcnJvcik7CisgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGOjptb3ZlKHJlc3Vs
dCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURjo6bW92ZShlcnJvcikp
OwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9u
ZyBjYWxsSWQsIGNvbnN0IEluc3BlY3Rvck9iamVjdCYpCit2b2lkIE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTcoY2FsbElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYKQEAgLTQ3Niw3ICs1MDQsMTAgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QKICAg
ICBSZWY8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOwogCi0gICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9yKTsK
KyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0KSk7CisgICAgZWxzZQorICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpAQCAtNzM5LDcgKzc3MCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Y2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgT2Jq
Q0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8UldJUHJvdG9jb2xOZXR3b3Jr
MURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOwogcHJpdmF0
ZToKICAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBt
X2RlbGVnYXRlOwogfTsKQEAgLTc0OSwxMyArNzgwLDEzIEBAIHByaXZhdGU6CiBjbGFzcyBPYmpD
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5h
dGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9y
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihpZDxSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTMobG9uZyBjYWxsSWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U0KGxvbmcgY2FsbElkKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIGNhbGxJZCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTYobG9uZyBjYWxsSWQpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2U3KGxvbmcgY2FsbElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNl
MShsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTIobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlNChsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTUobG9uZyByZXF1ZXN0SWQpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2U2KGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNyhsb25nIHJlcXVlc3RJZCkgb3ZlcnJpZGU7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxSV0lQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpA
QCAtOTU1LDE0ICs5ODYsMTUgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKQordm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJl
cXVlc3RJZCkKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfTsK
IAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtOTcxLDkyICsxMDAz
LDk5IEBAIHZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyBjYWxsSWQpCiAKIAogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKQordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCkKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfTsKIAog
ICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElk
KQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlMihsb25nIHJlcXVlc3RJZCkKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNh
bGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwogfQog
Ci12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UzKGxvbmcgY2FsbElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkKIHsKICAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9y
T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKIHsKICAg
ICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAg
fTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0
cmluZygpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKQordm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJl
cXVlc3RJZCkKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfTsK
IAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJ
bnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgY2Fs
bElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNihsb25nIHJlcXVlc3RJZCkKIHsKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQs
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwog
fQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2U3KGxvbmcgY2FsbElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKIHsKICAgICBpZCBlcnJvckNh
bGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIFN0cmluZygpKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNv
dXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFs
dWVzLmpzb24tcmVzdWx0CmluZGV4IDlkNzQ4NTNjMmY1MzNlNmUxMzA1NDVkNDU2MmMzOTlmODYw
M2Q4YmMuLmQxZjFmZjFmMzRmMzRkOWFhNWVjN2QwNWU1N2ZmODI4OWJlNDk0YjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAg
LTE2OSw5ICsxNjksOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBj
cmVhdGUoQmFja2VuZERpc3BhdGNoZXIqLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoKGxvbmcgY2FsbElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRlOwogcHJpdmF0
ZToKLSAgICB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkLCBjb25z
dCBJbnNwZWN0b3JPYmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CiBwcml2YXRlOgogICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
ICAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKiBtX2FnZW50OwpAQCAt
MjI0LDYgKzIyNCw3IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQpA
QCAtMjQ5LDIxICsyNTAsMjQgQEAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oQVNDSUlMaXRlcmFsKCJD
b21tYW5kRG9tYWluIiksIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCiB7CiAgICAgUmVmPENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBwYXJhbWV0ZXJzOworICAgIG1lc3NhZ2UtPmdldE9iamVjdChBU0NJSUxpdGVyYWwo
InBhcmFtcyIpLCBwYXJhbWV0ZXJzKTsKKwogICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlIikKLSAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoY2Fs
bElkLCBtZXNzYWdlKTsKKyAgICAgICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVz
dElkLCBXVEY6Om1vdmUocGFyYW1ldGVycykpOwogICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcigmY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIkNvbW1hbmREb21haW4iLCAnLics
IG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
IG1ha2VTdHJpbmcoJ1wnJywgIkNvbW1hbmREb21haW4iLCAnLicsIG1ldGhvZCwgIicgd2FzIG5v
dCBmb3VuZCIpKTsKIH0KIAotdm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmKQordm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51
bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5j
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShjYWxsSWQpOworICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTI3Niw3ICsyODAsMTAgQEAgdm9pZCBDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcg
Y2FsbElkLCBjb24KICAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQogICAgICAgICByZXN1bHQtPnNl
dFN0cmluZyhBU0NJSUxpdGVyYWwoInJldHVyblZhbHVlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOwogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVycm9y
KTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0KSk7CisgICAgZWxzZQor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtNTg0LDcgKzU5MSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8
UldJUHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5W
YWx1ZShsb25nIGNhbGxJZCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBvdmVycmlkZTsKIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOwogfTsKQEAgLTc3NywxNiArNzg0LDE3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAKIAotdm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpj
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIGNhbGxJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUobG9uZyByZXF1ZXN0SWQpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxs
SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KFJXSVByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJu
VmFsdWUgcmV0dXJuVmFsdWUpIHsKICAgICAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJyZXR1cm5WYWx1ZSIpLCB0b1Byb3RvY29sU3RyaW5n
KHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShjYWxsSWQsIFdURjo6bW92ZShyZXN1bHRPYmplY3QpLCBTdHJpbmcoKSk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURjo6bW92ZShyZXN1
bHRPYmplY3QpKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dAppbmRleCA0YjYyMmQ5ZGU1NDNkNGMxZWQyZWFhZTdkOTAyNTQ2ZTNmZTBjMjlkLi5hZDUyNmQz
YWU5NjEwYmY1NTI4YWYxMzJiNzZiZmE5NTA2MTBkMmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgt
b3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwt
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtMTgwLDYgKzE4MCw3IEBAIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9n
ZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUt
ZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CmluZGV4IGJiOGQyOWQ4NGJm
NmNmNDYzZjg0OTI0Nzg4M2JmNzY3ZWM2NmJhMzkuLjg3MDA1ZjUwYmIxYzRkZmJkMTY2MGYxNmEx
NDZkODY5M2EyYzNjYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJk
cy5qc29uLXJlc3VsdApAQCAtMTY1LDkgKzE2NSw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyKiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxJbnNwZWN0b3JPYmplY3Q+JiYgbWVzc2FnZSkgb3ZlcnJpZGU7CiBwcml2
YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JP
YmplY3QmIG1lc3NhZ2UpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiYmIHBhcmFtZXRlcnMpOwogcHJpdmF0ZToKICAgICBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKICAgICBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciogbV9hZ2VudDsKQEAgLTIyMSw2ICsyMjEsNyBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSA8aW5z
cGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hhbm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKQEAgLTI0OSwyMSArMjUwLDI0IEBAIE5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KEFTQ0lJTGl0ZXJhbCgiTmV0d29yazEiKSwgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SW5zcGVjdG9yT2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEluc3BlY3Rvck9iamVjdD4mJiBtZXNzYWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAorICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHBhcmFtZXRlcnM7CisgICAgbWVzc2FnZS0+Z2V0T2JqZWN0KEFTQ0lJTGl0ZXJhbCgicGFy
YW1zIiksIHBhcmFtZXRlcnMpOworCiAgICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikK
LSAgICAgICAgbG9hZFJlc291cmNlKGNhbGxJZCwgbWVzc2FnZSk7CisgICAgICAgIGxvYWRSZXNv
dXJjZShyZXF1ZXN0SWQsIFdURjo6bW92ZShwYXJhbWV0ZXJzKSk7CiAgICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKCZjYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgbWFrZVN0cmluZygnXCcnLCAiTmV0d29yazEi
LCAnLicsIG1ldGhvZCwgIicgd2FzIG5vdCBmb3VuZCIpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsIG1ha2VTdHJpbmcoJ1wnJywgIk5ldHdvcmsxIiwgJy4nLCBtZXRob2QsICInIHdhcyBu
b3QgZm91bmQiKSk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmplY3QmKQordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShjYWxsSWQpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmCkBAIC0yNzIsNyArMjc2LDEwIEBAIHZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgY2FsbElkLCBjb25zdCBJbnNwZWN0b3JPYmpl
Y3QmCiAgICAgUmVmPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOwogCi0gICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKGNhbGxJZCwgV1RGOjptb3ZlKHJlc3VsdCksIGVy
cm9yKTsKKyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQorICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEY6Om1vdmUocmVzdWx0KSk7CisgICAgZWxz
ZQorICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGOjptb3ZlKGVycm9yKSk7CiB9CiAjZW5kaWYg
Ly8gUExBVEZPUk0oV0VCX0NPTU1BTkRTKQogCkBAIC02MjcsNyArNjM0LDcgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxSV0lQ
cm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFu
ZGxlcjsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIG92ZXJy
aWRlOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8UldJUHJvdG9jb2xOZXR3b3JrMURvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTgyMiwxNCArODI5LDE1IEBAIF9fYXR0cmli
dXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0IikpKQogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
ICNpZiBQTEFURk9STShXRUJfQ09NTUFORFMpCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpCit2b2lkIE9iakNJbnNw
ZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0
SWQpCiB7CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShjYWxsSWQsIEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCksIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UoY2FsbElkLCBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpLCBTdHJpbmcoKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH07CiAKICAg
ICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1p
ZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0CmluZGV4IGMyNzJmNzJiNmYwOTNiMTJjOGRjOGNmMDQxNTk2MGYwN2Ey
OGEzOTkuLjMwY2NlMTg1MWNlOWMzOWI4MjFjNjMzY2E4ZTgzYWJmY2JkYzdjOGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTE3NCw2ICsxNzQsNyBAQCB0eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRv
d2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCBhODE4NmUwYjBiYTgx
MTQwNWQ0NTBjNGM0OWI1ZTQwN2JmNmE1NmMxLi4yOGUxNDU2NTViMDdjNjBhMWQxOTk1YTRmNmIw
YjQ5ZDA5ODA1ZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQK
QEAgLTE3NCw2ICsxNzQsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2luY2x1
ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2Vk
LXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmlt
aXRpdmUtdHlwZS5qc29uLXJlc3VsdAppbmRleCA1M2IzZjIyMTY2OWE4ZWMwNDNkMGZiOTljM2Rm
Nzc4YzZlZmQ2YjJjLi44YmJmYzI5ZTgxZTNjOGZmYjlkMWQyZDlmM2IxNGRiM2JjY2EwMmI0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1
bHQKQEAgLTE3NCw2ICsxNzQsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2lu
Y2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxp
bnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJh
eS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3Vs
dAppbmRleCA3ZTllZjFlOGEwMmZlMDA4ZTExZjViYjVkN2VlNWRhMDc3ZTNiMjVhLi5kMGY0YWYx
M2MxY2ZjNjE3NzllNzc4Yzg0MDNlMjk2ODM3YThmNDdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJh
dGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5
cGUuanNvbi1yZXN1bHQKQEAgLTE3Nyw2ICsxNzcsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZENoYW5uZWwuaD4K
ICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKaW5kZXggNmQ2M2RkNWFlMGNlMTIyYjJkMGMyNjJhOTE0ZTZmMjUzZDc5YWJi
MS4uMzRjMjg1YzYwMTIwMGUzZTFjMjNkOTZkOWY4ZGNhZjQwNjMyNjBjOCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtMTc4LDYgKzE3OCw3IEBAIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogCiAjaW5jbHVkZSA8aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbC5oPgogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
b2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNmU5NDk0MWJjMWUzYjYxOGI5ODQyNDg4YmIx
MGY1ZjMzMDQyNmUzZS4uNjBkYjVlYzI2MGJkMWM4ODIxNmY2NGRmMmUyNGQ1MTVkNjg1OWFhMCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKQEAgLTE3NCw2ICsxNzQsNyBA
QCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogI2luY2x1ZGUgPGluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDllYjFkNDBkZGVi
NGRkZDZkMWFhOGMzZTBiZjZjNjZjOGFmNzBlNTMuLjNjMTc2ZjUwODJkYmRkYWI1NDEwYjIzNWU0
YjEzNWYzOTVhYjk5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBA
IC0xNzgsNiArMTc4LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKICNpbmNsdWRl
IDxpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsLmg+CiAjaW5jbHVkZSA8aW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1Vz
ZXJJbnRlcmZhY2UvVGVzdFN0dWIuaHRtbCBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1Rlc3RTdHViLmh0bWwKaW5kZXggOWE0NTJjNTIwNmVmYWMzN2E2Y2VhY2NmYzBmMTEz
NjMwZmUyZTMyNy4uN2I1MjA0ZGQ2ZjVlNjQxNjkzM2RkNWI4OTNhMDFiYjkwOWJmZTU0ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVGVzdFN0dWIuaHRt
bAorKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0U3R1Yi5odG1s
CkBAIC00Nyw3ICs0Nyw3IEBAIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgICAgICAgIFByb3RvY29sVGVzdC5kdW1wQWN0
aXZpdHlUb1N5c3RlbUNvbnNvbGUgPSBmYWxzZTsKIAogICAgICAgICAvLyBCZXN0IHVzZWQgaW4g
Y29tYmluYXRpb24gd2l0aCBkdW1wQWN0aXZpdHlUb1N5c3RlbUNvbnNvbGUuCi0gICAgICAgIElu
c3BlY3RvclByb3RvY29sLmR1bXBJbnNwZWN0b3JQcm90b2NvbE1lc3NhZ2VzID0gZmFsc2U7Cisg
ICAgICAgIFByb3RvY29sVGVzdC5kdW1wSW5zcGVjdG9yUHJvdG9jb2xNZXNzYWdlcyA9IGZhbHNl
OwogICAgIDwvc2NyaXB0PgogPC9oZWFkPgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDczNjVkYjI5OWMzOTFi
ZTNkMmM4MmExY2M1MTMwZGE0ZjMyMDA5M2MuLjg5ZGI5OGUyZmI0N2NhNmM2NGU2ZTVjMjcwOTNi
NWI1ZDQ0MTI5YWQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wOC0yNSAgQnJpYW4gQnVy
ZyAgPGJidXJnQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBubyBuZWVkIHRv
IGFsbG9jYXRlIHByb3RvY29sRXJyb3JzIGFycmF5IGZvciBldmVyeSBkaXNwYXRjaGVkIGJhY2tl
bmQgY29tbWFuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQ2NDY2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9zZXBoIFBlY29yYXJvLgorCisgICAg
ICAgICogaW5zcGVjdG9yL3Byb3RvY29sL2JhY2tlbmQtZGlzcGF0Y2hlci1hcmd1bWVudC1lcnJv
cnMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9iYWNrZW5kLWRp
c3BhdGNoZXItYXJndW1lbnQtZXJyb3JzLmh0bWw6CisgICAgICAgIFN0cmluZ2lmeSB0aGUgJ2Rh
dGEnIG1lbWJlciBiZWZvcmUgZHVtcGluZywgc2luY2UgaXQgbm93IGNvbnRhaW5zIEpTT04uIFJl
YmFzZWxpbmUgaXQuCisKIDIwMTUtMDgtMjUgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4K
IAogICAgICAgICBbTWFjXSBhY2Nlc3NpYmlsaXR5L2RvY3VtZW50LWF0dHJpYnV0ZXMuaHRtbCBm
YWlscwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL2JhY2tlbmQt
ZGlzcGF0Y2hlci1hcmd1bWVudC1lcnJvcnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL3Byb3RvY29sL2JhY2tlbmQtZGlzcGF0Y2hlci1hcmd1bWVudC1lcnJvcnMtZXhwZWN0
ZWQudHh0CmluZGV4IDQ0YzQ5NDIzODViNDg2NDk0MDRkMTBhNzRlMmRhMTU1ZTMwNzdkMzQuLjc1
MTAzNzE4ZWExZDdjNjBmODYzOTEzNThjYmM5NzAwNDllN2YxNTggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9wcm90b2NvbC9iYWNrZW5kLWRpc3BhdGNoZXItYXJndW1lbnQtZXJy
b3JzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFj
a2VuZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVycm9ycy1leHBlY3RlZC50eHQKQEAgLTgsNyArOCw3
IEBAIFBBU1M6IHRoZSBiYWNrZW5kIHNob3VsZCBzZW5kIGEgcHJvdG9jb2wgZXJyb3Igd2hlbiBy
ZWNlaXZpbmcgYW4gaW52YWxpZCBtZXNzYWdlCiBQQVNTOiB0aGUgcmVwb3J0ZWQgZXJyb3Igc2hv
dWxkIGJlICJJbnZhbGlkUGFyYW1zIiAoLTMyNjAyKQogQWN0dWFsIGVycm9yIGNvZGU6IC0zMjYw
MgogQWN0dWFsIGVycm9yIG1lc3NhZ2U6IFNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnUnVudGlt
ZS5ldmFsdWF0ZScgY2FuJ3QgYmUgcHJvY2Vzc2VkCi1BY3R1YWwgZXJyb3IgZGF0YTogJ3BhcmFt
cycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJ2V4cHJlc3Npb24nIHdp
dGggdHlwZSAnU3RyaW5nJy4KK0FjdHVhbCBlcnJvciBkYXRhOiBbeyJjb2RlIjotMzI2MDIsIm1l
c3NhZ2UiOiIncGFyYW1zJyBvYmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAn
ZXhwcmVzc2lvbicgd2l0aCB0eXBlICdTdHJpbmcnLiJ9LHsiY29kZSI6LTMyNjAyLCJtZXNzYWdl
IjoiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBw
cm9jZXNzZWQifV0KIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IE1pc3NpbmdSZXF1aXJlZFBhcmFt
ZXRlcgogU2VuZGluZyBtZXNzYWdlOiB7ImlkIjoxMjMsIm1ldGhvZCI6IlJ1bnRpbWUuZXZhbHVh
dGUiLCJwYXJhbXMiOnsic3R1ZmYiOjEyM319CkBAIC0xNiw3ICsxNiw3IEBAIFBBU1M6IHRoZSBi
YWNrZW5kIHNob3VsZCBzZW5kIGEgcHJvdG9jb2wgZXJyb3Igd2hlbiByZWNlaXZpbmcgYW4gaW52
YWxpZCBtZXNzYWdlCiBQQVNTOiB0aGUgcmVwb3J0ZWQgZXJyb3Igc2hvdWxkIGJlICJJbnZhbGlk
UGFyYW1zIiAoLTMyNjAyKQogQWN0dWFsIGVycm9yIGNvZGU6IC0zMjYwMgogQWN0dWFsIGVycm9y
IG1lc3NhZ2U6IFNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnUnVudGltZS5ldmFsdWF0ZScgY2Fu
J3QgYmUgcHJvY2Vzc2VkCi1BY3R1YWwgZXJyb3IgZGF0YTogUGFyYW1ldGVyICdleHByZXNzaW9u
JyB3aXRoIHR5cGUgJ1N0cmluZycgd2FzIG5vdCBmb3VuZC4KK0FjdHVhbCBlcnJvciBkYXRhOiBb
eyJjb2RlIjotMzI2MDIsIm1lc3NhZ2UiOiJQYXJhbWV0ZXIgJ2V4cHJlc3Npb24nIHdpdGggdHlw
ZSAnU3RyaW5nJyB3YXMgbm90IGZvdW5kLiJ9LHsiY29kZSI6LTMyNjAyLCJtZXNzYWdlIjoiU29t
ZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBwcm9jZXNz
ZWQifV0KIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IFJlcXVpcmVkUGFyYW1ldGVyV3JvbmdUeXBl
CiBTZW5kaW5nIG1lc3NhZ2U6IHsiaWQiOjEyMywibWV0aG9kIjoiUnVudGltZS5ldmFsdWF0ZSIs
InBhcmFtcyI6eyJleHByZXNzaW9uIjpbXX19CkBAIC0yNCw3ICsyNCw3IEBAIFBBU1M6IHRoZSBi
YWNrZW5kIHNob3VsZCBzZW5kIGEgcHJvdG9jb2wgZXJyb3Igd2hlbiByZWNlaXZpbmcgYW4gaW52
YWxpZCBtZXNzYWdlCiBQQVNTOiB0aGUgcmVwb3J0ZWQgZXJyb3Igc2hvdWxkIGJlICJJbnZhbGlk
UGFyYW1zIiAoLTMyNjAyKQogQWN0dWFsIGVycm9yIGNvZGU6IC0zMjYwMgogQWN0dWFsIGVycm9y
IG1lc3NhZ2U6IFNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnUnVudGltZS5ldmFsdWF0ZScgY2Fu
J3QgYmUgcHJvY2Vzc2VkCi1BY3R1YWwgZXJyb3IgZGF0YTogUGFyYW1ldGVyICdleHByZXNzaW9u
JyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnU3RyaW5nJy4KK0FjdHVhbCBlcnJvciBkYXRh
OiBbeyJjb2RlIjotMzI2MDIsIm1lc3NhZ2UiOiJQYXJhbWV0ZXIgJ2V4cHJlc3Npb24nIGhhcyB3
cm9uZyB0eXBlLiBJdCBtdXN0IGJlICdTdHJpbmcnLiJ9LHsiY29kZSI6LTMyNjAyLCJtZXNzYWdl
IjoiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBiZSBw
cm9jZXNzZWQifV0KIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IE9wdGlvbmFsUGFyYW1ldGVyV3Jv
bmdUeXBlCiBTZW5kaW5nIG1lc3NhZ2U6IHsiaWQiOjEyMywibWV0aG9kIjoiUnVudGltZS5ldmFs
dWF0ZSIsInBhcmFtcyI6eyJleHByZXNzaW9uIjoiNDIiLCJpbmNsdWRlQ29tbWFuZExpbmVBUEki
OjEyM319CkBAIC0zMiw3ICszMiw3IEBAIFBBU1M6IHRoZSBiYWNrZW5kIHNob3VsZCBzZW5kIGEg
cHJvdG9jb2wgZXJyb3Igd2hlbiByZWNlaXZpbmcgYW4gaW52YWxpZCBtZXNzYWdlCiBQQVNTOiB0
aGUgcmVwb3J0ZWQgZXJyb3Igc2hvdWxkIGJlICJJbnZhbGlkUGFyYW1zIiAoLTMyNjAyKQogQWN0
dWFsIGVycm9yIGNvZGU6IC0zMjYwMgogQWN0dWFsIGVycm9yIG1lc3NhZ2U6IFNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnUnVudGltZS5ldmFsdWF0ZScgY2FuJ3QgYmUgcHJvY2Vzc2VkCi1BY3R1
YWwgZXJyb3IgZGF0YTogUGFyYW1ldGVyICdpbmNsdWRlQ29tbWFuZExpbmVBUEknIGhhcyB3cm9u
ZyB0eXBlLiBJdCBtdXN0IGJlICdCb29sZWFuJy4KK0FjdHVhbCBlcnJvciBkYXRhOiBbeyJjb2Rl
IjotMzI2MDIsIm1lc3NhZ2UiOiJQYXJhbWV0ZXIgJ2luY2x1ZGVDb21tYW5kTGluZUFQSScgaGFz
IHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJ0Jvb2xlYW4nLiJ9LHsiY29kZSI6LTMyNjAyLCJtZXNz
YWdlIjoiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdSdW50aW1lLmV2YWx1YXRlJyBjYW4ndCBi
ZSBwcm9jZXNzZWQifV0KIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IFRlc3RFcnJvckNvZGVGb3JT
eW5jU2VydmVyRXJyb3IKIFNlbmRpbmcgbWVzc2FnZTogeyJpZCI6MTIzLCJtZXRob2QiOiJEYXRh
YmFzZS5nZXREYXRhYmFzZVRhYmxlTmFtZXMiLCJwYXJhbXMiOnsiZGF0YWJhc2VJZCI6InRoaXNp
c05vdEFEYXRhYmFzZSJ9fQpAQCAtNDAsNiArNDAsNyBAQCBQQVNTOiB0aGUgYmFja2VuZCBzaG91
bGQgc2VuZCBhIHByb3RvY29sIGVycm9yIHdoZW4gcmVjZWl2aW5nIGFuIGludmFsaWQgbWVzc2Fn
ZQogUEFTUzogdGhlIHJlcG9ydGVkIGVycm9yIHNob3VsZCBiZSAiU2VydmVyRXJyb3IiICgtMzIw
MDApCiBBY3R1YWwgZXJyb3IgY29kZTogLTMyMDAwCiBBY3R1YWwgZXJyb3IgbWVzc2FnZTogRGF0
YWJhc2UgYWdlbnQgaXMgbm90IGVuYWJsZWQKK0FjdHVhbCBlcnJvciBkYXRhOiBbeyJjb2RlIjot
MzIwMDAsIm1lc3NhZ2UiOiJEYXRhYmFzZSBhZ2VudCBpcyBub3QgZW5hYmxlZCJ9XQogCiAtLSBS
dW5uaW5nIHRlc3QgY2FzZTogVGVzdEVycm9yQ29kZUZvckFzeW5jU2VydmVyRXJyb3IKIFNlbmRp
bmcgbWVzc2FnZTogeyJpZCI6MTIzLCJtZXRob2QiOiJEYXRhYmFzZS5leGVjdXRlU1FMIiwicGFy
YW1zIjp7ImRhdGFiYXNlSWQiOiJ0aGlzaXNOb3RBRGF0YWJhc2UiLCJxdWVyeSI6ImFzZGYifX0K
QEAgLTQ3LDYgKzQ4LDcgQEAgUEFTUzogdGhlIGJhY2tlbmQgc2hvdWxkIHNlbmQgYSBwcm90b2Nv
bCBlcnJvciB3aGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIG1lc3NhZ2UKIFBBU1M6IHRoZSByZXBv
cnRlZCBlcnJvciBzaG91bGQgYmUgIlNlcnZlckVycm9yIiAoLTMyMDAwKQogQWN0dWFsIGVycm9y
IGNvZGU6IC0zMjAwMAogQWN0dWFsIGVycm9yIG1lc3NhZ2U6IERhdGFiYXNlIGFnZW50IGlzIG5v
dCBlbmFibGVkCitBY3R1YWwgZXJyb3IgZGF0YTogW3siY29kZSI6LTMyMDAwLCJtZXNzYWdlIjoi
RGF0YWJhc2UgYWdlbnQgaXMgbm90IGVuYWJsZWQifV0KIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6
IENvbW1hbmRXaXRoQmFkQXJndW1lbnRWYWx1ZQogU2VuZGluZyBtZXNzYWdlOiB7ImlkIjoxMjMs
Im1ldGhvZCI6IlJ1bnRpbWUuZ2V0UHJvcGVydGllcyIsInBhcmFtcyI6eyJvYmplY3RJZCI6InRo
aXNpc05vdEFuSWQifX0KQEAgLTU0LDQgKzU2LDUgQEAgUEFTUzogdGhlIGJhY2tlbmQgc2hvdWxk
IHNlbmQgYSBwcm90b2NvbCBlcnJvciB3aGVuIHJlY2VpdmluZyBhbiBpbnZhbGlkIG1lc3NhZ2UK
IFBBU1M6IHRoZSByZXBvcnRlZCBlcnJvciBzaG91bGQgYmUgIlNlcnZlckVycm9yIiAoLTMyMDAw
KQogQWN0dWFsIGVycm9yIGNvZGU6IC0zMjAwMAogQWN0dWFsIGVycm9yIG1lc3NhZ2U6IEluc3Bl
Y3RlZCBmcmFtZSBoYXMgZ29uZQorQWN0dWFsIGVycm9yIGRhdGE6IFt7ImNvZGUiOi0zMjAwMCwi
bWVzc2FnZSI6Ikluc3BlY3RlZCBmcmFtZSBoYXMgZ29uZSJ9XQogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFja2VuZC1kaXNwYXRjaGVyLWFyZ3VtZW50LWVy
cm9ycy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Byb3RvY29sL2JhY2tlbmQtZGlzcGF0
Y2hlci1hcmd1bWVudC1lcnJvcnMuaHRtbAppbmRleCAxNTBlODMyMDI5YzFkMWE3M2IwOWQxYTRj
NGUwOWUwZjAxNGVhNTExLi4wNWFhN2U0NTJiMWNiOTM3YTQxZGRmMmQ1MGJkMjI3OTI5OGQyNzg3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcHJvdG9jb2wvYmFja2VuZC1kaXNw
YXRjaGVyLWFyZ3VtZW50LWVycm9ycy5odG1sCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9w
cm90b2NvbC9iYWNrZW5kLWRpc3BhdGNoZXItYXJndW1lbnQtZXJyb3JzLmh0bWwKQEAgLTM2LDcg
KzM2LDcgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAgICAgICAgICAgICAgIFByb3RvY29sVGVz
dC5sb2coIkFjdHVhbCBlcnJvciBjb2RlOiAiICsgcmVzcG9uc2UuY29kZSk7CiAgICAgICAgICAg
ICAgICAgICAgIFByb3RvY29sVGVzdC5sb2coIkFjdHVhbCBlcnJvciBtZXNzYWdlOiAiICsgcmVz
cG9uc2UubWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhKQot
ICAgICAgICAgICAgICAgICAgICAgICAgUHJvdG9jb2xUZXN0LmxvZygiQWN0dWFsIGVycm9yIGRh
dGE6ICIgKyByZXNwb25zZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFByb3RvY29s
VGVzdC5sb2coIkFjdHVhbCBlcnJvciBkYXRhOiAiICsgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2Uu
ZGF0YSkpOwogCiAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgICAg
ICB9KQo=
</data>
<flag name="review"
          id="285099"
          type_id="1"
          status="+"
          setter="joepeck"
    />
          </attachment>
      

    </bug>

</bugzilla>